Merge lp:~morphis/network-manager/add-snappy-support into lp:~phablet-team/network-manager/snappy

Proposed by Simon Fels
Status: Merged
Approved by: Tony Espy
Approved revision: 978
Merged at revision: 972
Proposed branch: lp:~morphis/network-manager/add-snappy-support
Merge into: lp:~phablet-team/network-manager/snappy
Diff against target: 4420 lines (+4353/-0)
12 files modified
debian/patches/add-snappy-support.patch (+691/-0)
debian/patches/fix-code-to-build-with-werror.patch (+547/-0)
debian/patches/series (+3/-0)
parts/plugins/x-autotools.py (+129/-0)
snapcraft.yaml (+239/-0)
snappy/bin/dhclient (+32/-0)
snappy/bin/dnsmasq (+41/-0)
snappy/bin/networkmanager (+37/-0)
snappy/conf/NetworkManager.conf (+6/-0)
snappy/conf/dnsmasq-dbus.conf (+10/-0)
snappy/conf/org.freedesktop.NetworkManager.conf (+152/-0)
snappy/icon.svg (+2466/-0)
To merge this branch: bzr merge lp:~morphis/network-manager/add-snappy-support
Reviewer Review Type Date Requested Status
Tony Espy Approve
Simon Fels Pending
Review via email: mp+289514@code.launchpad.net

Commit message

Import snappy support from our 15.04 work

This is fully converted to snapcraft 2.x syntax now but still runs fully
unconfined. Also this doesn't include ModemManager as for the snappy 16
series we still have to find out whether we go with it or ofono as default.

Additionaly this is putting the snappy build configuration next to our
debian to both together and build stuff from the same base (patches,
config, ...).

Description of the change

Still some things we need to debate like

- version number (took the nm version + -<n>)
- Applying all debian/patches/ or not

but is fine for a first drop and we can move on from what we have then in that branch by defining further work items.

To post a comment you must log in.
976. By Simon Fels

Remove left over ModemManager udev rules

Revision history for this message
Tony Espy (awe) wrote :

1) I will have to say, I'm not a fan of merging the debian and snappy packaging into a single branch. There's simply too many debian-specific files included which are useless when it comes to building a snap. Add in the fact that the debian packaging branch for NM includes many stale patches ( ie. patches that aren't used or are commented out in the d/p/series ), and it seems like a mess to me.

Also, if we base the snap on the NM branch like this, we probably should revise the version to actually reflect this, at the moment it doesn't include the '-4ubuntu15.1.8' part in the version, yet it does include the code from that version.

I really prefer the bluez approach, where although the bzr namespace is the same as the debian package, the snap branch *only* includes snappy bits.

2) Why bother with --configure-snappy, the branch is solely for snappy? If we eventually try to upstream the patch(es), we'll probably need to change this is done ( ie. doubtful upstream would accept such a switch, we'd probably instead want to fix generically ), so let's either make the branch snappy only, or re-work the snappy patch into something we *think* upstream might accept ( note, let's do this after we switch to 1.2 ).

3) Why did you remove modemmanager and leave ofono in place? We know that modemmanager works, and we also know that ofono won't work till we re-write the settings plugin.

4) What's the reasoning behind the fix-code-to-build-with-werror.patch? It seems like this is changing a lot of code. Also this may not work with NM1.2, as they've gotten rid of some deprecated code ( eg. dbus-glib ), but not all ( eg. GSimpleAsyncResult ). Does the snap fail to build without this?

Note, I've also cleaned up a lot of ofono unused code in my 1.2 branch.

5) Where did the icon.svg come from? It's *huge* compared to the bluez icon.png ( which is a generic Ubuntu icon ).

6) What's the plan to fix "XXX: hardcode architecture" in wrapper binaries?

7) It looks like you're manually installing the binary wrapper scripts. Have you tested this? I couldn't get bluez to work this way, and ended up modifying yet another core snapcraft library to add the copies in when generating the wrapper scripts.

8) I don't see nmcli?

9) d/p/0002-Force-online-state-with-unmanaged-devices.patch: not re-patched for snappy.

10) 0003-Don-t-setup-Sleep-Monitor-if-not-booted-with-systemd.patch: not applicable for snappy.

11) d/p/0004-Use-symlinks-for-nmtui.patch: have you tested nmtui on snappy?

12) There are bunch of other patches that aren't really applicable to snappy ( eg. whoopsie support, upstart patches, ... ).

review: Needs Information
Revision history for this message
Tony Espy (awe) wrote :

Also note that the bluez snap uses the ~bluetooth team, perhaps we should use ~network-manager here instead of ~phablet-team?

Revision history for this message
Simon Fels (morphis) wrote :
Download full text (4.5 KiB)

Thanks a lot for the first review round!

For 1: I must say I don't really like us separating stuff into multiple different approaches per product. We already have separate packaging branches for desktop and touch and adding a third one for snappy doesn't really scale. That there are debian patches which might not apply to snappy, stale patches etc. but those things are all sth we have to solve over time. We have to find one common approach for all projects we're doing and apply that to all projects the same way.

Also respect that we're already shipping snappy packages for 15.04 with the exact same approach we're doing here but just having the debian package unpacked in another git repo. So this is only a continuation of what we've done before but in a more packed way. I would really like to bring all the different work we're doing as close as possible together rather than investing a huge amount of time for development, testing, reviewing for all different projects. There will be always project specific development/testing/.. but we should aim for convergence. I know there are problems in practice but those are the bits we need to solve.

I am fine with adding the debian packaging version number.

For 2: Adding --enable-snappy was done with the aim to align our packaging as described for 1). The debian package would simply build with --disable-snappy.

For 3: I removed ModemManager as

 * It needs to be in its own snap. The NetworkManager snap/part
   then just interacts with. What we did for 15.04 was a
   quick hack and is nothing we should just continue to do
   without discussing what we really want.
 * Its a per device decision if a telephony snap should be
   installed or not.
 * There are different components we can use to bring
   telephony into the game and we still haven't decided
   which horse we will ride for snappy (ofono, ModemManager)
 * This MP isn't aiming for feature completeness. Its just
   bringing the basic work from 15.04 to series 16 and
   leaving stuff out we don't know if we want it or not.

Also I left ofono in place as I simply copied the configflags from the debian packaging which have ofono enabled by default. That is again sth which needs to be reworked in follow up stories after we have decided where our way goes to.

For 4: I added that patch simply because all the wonderful patches we did on top of upstream doesn't build with -Werror (deprecated glib functions, ignoring const, unused variables) which is the default on xenial. I am sure you fixed some or most of them already with your 1.2 work and lets not bother with this patch too much. Its just there to get stuff building for the time being but the right way is to rework all those patches.

For 5: That icon is what we had in 15.04 for the network-manager snap. Its a more colorful networking one coming from the default icon set on desktop??

For 6: None yet. But the best would be if we get rid of them by telling the build not to install things into arch specific directories as that doesn't make much sense with snappy. Its currently a bit of a mess how those things are handled within the snap configuration but that is up for later.

For 7: Works as it s...

Read more...

977. By Simon Fels

Move snappy icon to its folder

978. By Simon Fels

Reflect debian version also in our snap version

Revision history for this message
Tony Espy (awe) :
review: Approve
Revision history for this message
Tony Espy (awe) wrote :

Approved; discussion on most of the above points will happen separately.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'debian/patches/add-snappy-support.patch'
2--- debian/patches/add-snappy-support.patch 1970-01-01 00:00:00 +0000
3+++ debian/patches/add-snappy-support.patch 2016-03-30 06:28:14 +0000
4@@ -0,0 +1,691 @@
5+Index: build/configure.ac
6+===================================================================
7+--- build.orig/configure.ac
8++++ build/configure.ac
9+@@ -758,6 +758,15 @@ fi
10+ AM_CONDITIONAL(BUILD_NMTUI, test "$build_nmtui" = yes)
11+
12+
13++AC_ARG_ENABLE(snappy, AS_HELP_STRING([--enable-snappy], [enable Ubuntu Snappy support]),
14++ [enable_snappy=${enableval}], [enable_snappy=yes])
15++if (test "${enable_snappy}" = "yes"); then
16++ AC_DEFINE(WITH_SNAPPY, 1, [Define if you want Ubuntu Snappy support])
17++else
18++ AC_DEFINE(WITH_SNAPPY, 0, [Define if you want Ubuntu Snappy support])
19++fi
20++AM_CONDITIONAL(WITH_SNAPPY, test "${enable_snappy}" = "yes")
21++
22+ NM_COMPILER_WARNINGS
23+
24+ dnl -------------------------
25+@@ -921,6 +930,7 @@ else
26+ echo " policykit: no"
27+ fi
28+ echo " selinux: $have_selinux"
29++echo " Ubuntu snappy: ${enable_snappy}"
30+ echo
31+
32+ echo "Features:"
33+Index: build/src/Makefile.am
34+===================================================================
35+--- build.orig/src/Makefile.am
36++++ build/src/Makefile.am
37+@@ -38,6 +38,11 @@ AM_CPPFLAGS = \
38+ -DG_LOG_DOMAIN=\""NetworkManager"\" \
39+ -DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE
40+
41++if WITH_SNAPPY
42++AM_CPPFLAGS += \
43++ -DSNAPPY=
44++endif
45++
46+ # add each subdirectory that contains a libNM source file. $(sort) is being used
47+ # primarily for its side effect of removing duplicates.
48+ AM_CPPFLAGS += $(foreach d,$(sort $(dir $(libNetworkManager_la_SOURCES))),-I$(top_srcdir)/src/$d)
49+Index: build/src/devices/nm-device.c
50+===================================================================
51+--- build.orig/src/devices/nm-device.c
52++++ build/src/devices/nm-device.c
53+@@ -78,6 +78,8 @@ static void impl_device_disconnect (NMDe
54+
55+ #include "nm-device-glue.h"
56+
57++#include "snappy.h"
58++
59+ static void nm_device_config_device_interface_init (NMConfigDeviceInterface *iface);
60+
61+ G_DEFINE_ABSTRACT_TYPE_WITH_CODE (NMDevice, nm_device, G_TYPE_OBJECT,
62+@@ -4454,6 +4456,12 @@ send_arps (NMDevice *self, const char *m
63+ NMIP4Address *addr;
64+ guint32 ipaddr;
65+ GError *error = NULL;
66++ char *path = NULL;
67++
68++ if (get_snap_app_path()) {
69++ path = g_strdup_printf("%s/usr/bin/arping", get_snap_app_path());
70++ argv[0] = path;
71++ }
72+
73+ connection = nm_device_get_connection (self);
74+ if (!connection)
75+@@ -4482,6 +4490,9 @@ send_arps (NMDevice *self, const char *m
76+ g_clear_error (&error);
77+ }
78+ }
79++
80++ if (path)
81++ g_free(path);
82+ }
83+
84+ static gboolean
85+Index: build/src/dhcp-manager/nm-dhcp-dhclient.c
86+===================================================================
87+--- build.orig/src/dhcp-manager/nm-dhcp-dhclient.c
88++++ build/src/dhcp-manager/nm-dhcp-dhclient.c
89+@@ -40,20 +40,21 @@
90+ #include "nm-dhcp-dhclient-utils.h"
91+ #include "nm-dhcp-manager.h"
92+ #include "nm-posix-signals.h"
93++#include "snappy.h"
94+
95+ G_DEFINE_TYPE (NMDHCPDhclient, nm_dhcp_dhclient, NM_TYPE_DHCP_CLIENT)
96+
97+ #define NM_DHCP_DHCLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_DHCP_DHCLIENT, NMDHCPDhclientPrivate))
98+
99+ typedef struct {
100+- const char *path;
101++ char *path;
102+ char *conf_file;
103+ const char *def_leasefile;
104+ char *lease_file;
105+ char *pid_file;
106+ } NMDHCPDhclientPrivate;
107+
108+-const char *
109++char *
110+ nm_dhcp_dhclient_get_path (const char *try_first)
111+ {
112+ static const char *dhclient_paths[] = {
113+@@ -66,7 +67,7 @@ nm_dhcp_dhclient_get_path (const char *t
114+ const char **path = dhclient_paths;
115+
116+ if (strlen (try_first) && g_file_test (try_first, G_FILE_TEST_EXISTS))
117+- return try_first;
118++ return g_strdup (try_first);
119+
120+ while (*path != NULL) {
121+ if (g_file_test (*path, G_FILE_TEST_EXISTS))
122+@@ -74,7 +75,7 @@ nm_dhcp_dhclient_get_path (const char *t
123+ path++;
124+ }
125+
126+- return *path;
127++ return g_strdup(*path);
128+ }
129+
130+ /**
131+@@ -97,9 +98,14 @@ get_dhclient_leasefile (const char *ifac
132+ char **out_preferred_path)
133+ {
134+ char *path;
135++ char *base_path = NMSTATEDIR;
136++
137++ if (get_snap_app_data_path())
138++ base_path = (char *) get_snap_app_data_path();
139+
140+ /* /var/lib/NetworkManager is the preferred leasefile path */
141+- path = g_strdup_printf (NMSTATEDIR "/dhclient%s-%s-%s.lease",
142++ path = g_strdup_printf ("%s/dhclient%s-%s-%s.lease",
143++ base_path,
144+ ipv6 ? "6" : "",
145+ uuid,
146+ iface);
147+@@ -274,12 +280,16 @@ create_dhclient_config (const char *ifac
148+ const char *hostname)
149+ {
150+ char *orig = NULL, *new = NULL;
151++ char *base_path = NMSTATEDIR;
152+ GError *error = NULL;
153+ gboolean success = FALSE;
154+
155+ g_return_val_if_fail (iface != NULL, NULL);
156+
157+- new = g_strdup_printf (NMSTATEDIR "/dhclient%s-%s.conf", is_ip6 ? "6" : "", iface);
158++ if (get_snap_app_data_path())
159++ base_path = (char *) get_snap_app_data_path();
160++
161++ new = g_strdup_printf ("%s/dhclient%s-%s.conf", base_path, is_ip6 ? "6" : "", iface);
162+ nm_log_dbg (is_ip6 ? LOGD_DHCP6 : LOGD_DHCP4,
163+ "(%s): creating composite dhclient config %s",
164+ iface, new);
165+@@ -351,9 +361,15 @@ dhclient_start (NMDHCPClient *client,
166+ return -1;
167+ }
168+
169+- pid_file = g_strdup_printf ("/run/sendsigs.omit.d/network-manager.dhclient%s-%s.pid",
170+- ipv6 ? "6" : "",
171+- iface);
172++ if (get_snap_app_data_path())
173++ pid_file = g_strdup_printf ("%s/run/sendsigs.omit.d/network-manager.dhclient%s-%s.pid",
174++ get_snap_app_data_path(),
175++ ipv6 ? "6" : "",
176++ iface);
177++ else
178++ pid_file = g_strdup_printf ("/run/sendsigs.omit.d/network-manager.dhclient%s-%s.pid",
179++ ipv6 ? "6" : "",
180++ iface);
181+
182+ /* Kill any existing dhclient from the pidfile */
183+ binary_name = g_path_get_basename (priv->path);
184+@@ -406,6 +422,8 @@ dhclient_start (NMDHCPClient *client,
185+ }
186+ }
187+
188++ nm_log_warn (log_domain, "dhclient: building argv array; binary path is: %s", priv->path);
189++
190+ argv = g_ptr_array_new ();
191+ g_ptr_array_add (argv, (gpointer) priv->path);
192+
193+@@ -427,17 +445,22 @@ dhclient_start (NMDHCPClient *client,
194+ g_ptr_array_add (argv, (gpointer) "-sf"); /* Set script file */
195+ g_ptr_array_add (argv, (gpointer) nm_dhcp_helper_path);
196+
197++ nm_log_warn (log_domain, "dhclient: building argv array; -sf <helper_path> is: %s", nm_dhcp_helper_path);
198++
199+ if (pid_file) {
200+ g_ptr_array_add (argv, (gpointer) "-pf"); /* Set pid file */
201+ g_ptr_array_add (argv, (gpointer) pid_file);
202++ nm_log_warn (log_domain, "dhclient: building argv array; -pf <pid_file> is: %s", pid_file);
203+ }
204+
205+ g_ptr_array_add (argv, (gpointer) "-lf"); /* Set lease file */
206+ g_ptr_array_add (argv, (gpointer) priv->lease_file);
207++ nm_log_warn (log_domain, "dhclient: building argv array; -lf <lease_file> is: %s", priv->lease_file);
208+
209+ if (priv->conf_file) {
210+ g_ptr_array_add (argv, (gpointer) "-cf"); /* Set interface config file */
211+ g_ptr_array_add (argv, (gpointer) priv->conf_file);
212++ nm_log_warn (log_domain, "dhclient: building argv array; -cf <config_file> is: %s", priv->conf_file);
213+ }
214+
215+ /* Usually the system bus address is well-known; but if it's supposed
216+@@ -603,8 +626,15 @@ nm_dhcp_dhclient_init (NMDHCPDhclient *s
217+ {
218+ NMDHCPDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (self);
219+ const char **iter = &def_leasefiles[0];
220++ char *dhclient_path = DHCLIENT_PATH;
221++
222++ if (get_snap_app_path())
223++ dhclient_path = g_strdup_printf("%s/sbin/dhclient", get_snap_app_path());
224++
225++ priv->path = nm_dhcp_dhclient_get_path (dhclient_path);
226+
227+- priv->path = nm_dhcp_dhclient_get_path (DHCLIENT_PATH);
228++ if (get_snap_app_path ())
229++ g_free (dhclient_path);
230+
231+ while (iter && *iter) {
232+ if (g_file_test (*iter, G_FILE_TEST_EXISTS)) {
233+@@ -627,6 +657,7 @@ dispose (GObject *object)
234+ g_free (priv->pid_file);
235+ g_free (priv->conf_file);
236+ g_free (priv->lease_file);
237++ g_free (priv->path);
238+
239+ G_OBJECT_CLASS (nm_dhcp_dhclient_parent_class)->dispose (object);
240+ }
241+Index: build/src/main.c
242+===================================================================
243+--- build.orig/src/main.c
244++++ build/src/main.c
245+@@ -55,6 +55,7 @@
246+ #include "nm-posix-signals.h"
247+ #include "nm-session-monitor.h"
248+ #include "nm-dispatcher.h"
249++#include "snappy.h"
250+
251+ #if !defined(NM_DIST_VERSION)
252+ # define NM_DIST_VERSION VERSION
253+@@ -63,6 +64,9 @@
254+ #define NM_DEFAULT_PID_FILE NMRUNDIR "/NetworkManager.pid"
255+ #define NM_DEFAULT_SYSTEM_STATE_FILE NMSTATEDIR "/NetworkManager.state"
256+
257++extern const char* get_snap_app_path();
258++extern const char* get_snap_app_data_path();
259++
260+ /*
261+ * Globals
262+ */
263+@@ -355,6 +359,7 @@ main (int argc, char *argv[])
264+ GError *error = NULL;
265+ gboolean wrote_pidfile = FALSE;
266+ char *bad_domains = NULL;
267++ char *run_dir, *state_dir;
268+
269+ GOptionEntry options[] = {
270+ { "version", 'V', 0, G_OPTION_ARG_NONE, &show_version, N_("Print NetworkManager version and exit"), NULL },
271+@@ -476,18 +481,37 @@ main (int argc, char *argv[])
272+ g_free (path);
273+ }
274+
275++ if (get_snap_app_data_path()) {
276++ run_dir = g_strdup_printf("%s/var/run/", get_snap_app_data_path());
277++ state_dir = g_strdup_printf("%s/var/lib/", get_snap_app_data_path());
278++ } else {
279++ run_dir = g_strdup (NMRUNDIR);
280++ state_dir = g_strdup (NMSTATEDIR);
281++ }
282++
283++ nm_log_warn (LOGD_CORE, "run_dir: '%s", run_dir);
284++ nm_log_warn (LOGD_CORE, "state_dir: '%s", state_dir);
285++
286+ /* Setup runtime directory */
287+- if (g_mkdir_with_parents (NMRUNDIR, 0755) != 0) {
288+- nm_log_err (LOGD_CORE, "Cannot create '%s': %s", NMRUNDIR, strerror (errno));
289++ if (g_mkdir_with_parents (run_dir, 0755) != 0) {
290++ nm_log_err (LOGD_CORE, "Cannot create '%s': %s", run_dir, strerror (errno));
291++ g_free (run_dir);
292++ g_free (state_dir);
293+ exit (1);
294+ }
295+
296++ g_free (run_dir);
297++
298+ /* Ensure state directory exists */
299+- if (g_mkdir_with_parents (NMSTATEDIR, 0755) != 0) {
300+- nm_log_err (LOGD_CORE, "Cannot create '%s': %s", NMSTATEDIR, strerror (errno));
301++ if (g_mkdir_with_parents (state_dir, 0755) != 0) {
302++ nm_log_err (LOGD_CORE, "Cannot create '%s': %s", state_dir, strerror (errno));
303++ g_free (run_dir);
304++ g_free (state_dir);
305+ exit (1);
306+ }
307+
308++ g_free (state_dir);
309++
310+ pidfile = pidfile ? pidfile : g_strdup (NM_DEFAULT_PID_FILE);
311+ state_file = state_file ? state_file : g_strdup (NM_DEFAULT_SYSTEM_STATE_FILE);
312+
313+@@ -561,7 +585,10 @@ main (int argc, char *argv[])
314+ g_log_set_always_fatal (fatal_mask);
315+ }
316+
317++#ifndef SNAPPY
318++ /* FIXME: this causes us to segfault in a snappy environment */
319+ nm_logging_syslog_openlog (debug);
320++#endif
321+
322+ #if !GLIB_CHECK_VERSION (2, 35, 0)
323+ g_type_init ();
324+@@ -593,6 +620,7 @@ main (int argc, char *argv[])
325+
326+ /* Initialize our DBus service & connection */
327+ dbus_mgr = nm_dbus_manager_get ();
328++
329+ g_assert (dbus_mgr != NULL);
330+
331+ vpn_manager = nm_vpn_manager_get ();
332+Index: build/src/nm-activation-request.c
333+===================================================================
334+--- build.orig/src/nm-activation-request.c
335++++ build/src/nm-activation-request.c
336+@@ -37,6 +37,7 @@
337+ #include "nm-active-connection.h"
338+ #include "nm-settings-connection.h"
339+ #include "nm-posix-signals.h"
340++#include "snappy.h"
341+
342+
343+ G_DEFINE_TYPE (NMActRequest, nm_act_request, NM_TYPE_ACTIVE_CONNECTION)
344+@@ -228,8 +229,13 @@ nm_act_request_set_shared (NMActRequest
345+ char *envp[1] = { NULL };
346+ gs_strfreev char **argv = NULL;
347+ gs_free char *cmd = NULL;
348++ char *base_path = "";
349+
350+- cmd = g_strdup_printf ("%s --table %s %s %s",
351++ if (get_snap_app_path())
352++ base_path = get_snap_app_path();
353++
354++ cmd = g_strdup_printf ("%s%s --table %s %s %s",
355++ base_path,
356+ IPTABLES_PATH,
357+ rule->table,
358+ shared ? "--insert" : "--delete",
359+Index: build/src/nm-manager.c
360+===================================================================
361+--- build.orig/src/nm-manager.c
362++++ build/src/nm-manager.c
363+@@ -70,7 +70,7 @@
364+ #include "nm-sleep-monitor.h"
365+ #include "nm-connectivity.h"
366+ #include "nm-policy.h"
367+-
368++#include "snappy.h"
369+
370+ #define NM_AUTOIP_DBUS_SERVICE "org.freedesktop.nm_avahi_autoipd"
371+ #define NM_AUTOIP_DBUS_IFACE "org.freedesktop.nm_avahi_autoipd"
372+@@ -2022,13 +2022,25 @@ load_device_factories (NMManager *self)
373+ const char *item;
374+ char *path;
375+ GSList *iter;
376++ char *plugin_dir;
377++
378++ /* FIXME: hard-coded arch path... */
379++ if (get_snap_app_path())
380++ plugin_dir = g_strdup_printf("%s/usr/lib/NetworkManager/",
381++ get_snap_app_path());
382++ else
383++ plugin_dir = g_strdup (NMPLUGINDIR);
384++
385++ nm_log_warn (LOGD_HW, "load_device_factories: about to open plugin directory %s", plugin_dir);
386++
387++ dir = g_dir_open (plugin_dir, 0, &error);
388+
389+- dir = g_dir_open (NMPLUGINDIR, 0, &error);
390+ if (!dir) {
391+ nm_log_warn (LOGD_HW, "Failed to open plugin directory %s: %s",
392+- NMPLUGINDIR,
393++ plugin_dir,
394+ (error && error->message) ? error->message : "(unknown)");
395+ g_clear_error (&error);
396++ g_free (plugin_dir);
397+ return;
398+ }
399+
400+@@ -2045,7 +2057,11 @@ load_device_factories (NMManager *self)
401+ if (g_str_has_suffix (item, ".la"))
402+ continue;
403+
404+- path = g_module_build_path (NMPLUGINDIR, item);
405++ if (get_snap_app_path())
406++ path = g_module_build_path(plugin_dir, item);
407++ else
408++ path = g_module_build_path (NMPLUGINDIR, item);
409++
410+ g_assert (path);
411+ plugin = g_module_open (path, G_MODULE_BIND_LOCAL);
412+ g_free (path);
413+@@ -2113,8 +2129,11 @@ load_device_factories (NMManager *self)
414+ nm_log_info (LOGD_HW, "Loaded device plugin: %s", g_module_name (plugin));
415+ };
416+ g_dir_close (dir);
417++ g_free (plugin_dir);
418+
419+ priv->factories = g_slist_reverse (priv->factories);
420++
421++ nm_log_warn (LOGD_HW, "load_device_factories: all done");
422+ }
423+
424+ static void
425+Index: build/src/ppp-manager/nm-ppp-manager.c
426+===================================================================
427+--- build.orig/src/ppp-manager/nm-ppp-manager.c
428++++ build/src/ppp-manager/nm-ppp-manager.c
429+@@ -53,6 +53,7 @@
430+ #include "nm-dbus-manager.h"
431+ #include "nm-logging.h"
432+ #include "nm-posix-signals.h"
433++#include "snappy.h"
434+
435+ static void impl_ppp_manager_need_secrets (NMPPPManager *manager,
436+ DBusGMethodInvocation *context);
437+@@ -972,7 +973,16 @@ create_pppd_cmd_line (NMPPPManager *self
438+ nm_cmd_line_add_string (cmd, priv->dbus_path);
439+
440+ nm_cmd_line_add_string (cmd, "plugin");
441+- nm_cmd_line_add_string (cmd, NM_PPPD_PLUGIN);
442++
443++ if (get_snap_app_path()) {
444++ gchar *plugin_path = g_strdup_printf("%s%s",
445++ get_snap_app_path(),
446++ NM_PPPD_PLUGIN);
447++ nm_cmd_line_add_string (cmd, plugin_path);
448++ g_free(plugin_path);
449++ } else {
450++ nm_cmd_line_add_string (cmd, NM_PPPD_PLUGIN);
451++ }
452+
453+ return cmd;
454+ }
455+Index: build/src/settings/nm-settings.c
456+===================================================================
457+--- build.orig/src/settings/nm-settings.c
458++++ build/src/settings/nm-settings.c
459+@@ -68,6 +68,7 @@
460+ #include "nm-connection-provider.h"
461+ #include "nm-config.h"
462+ #include "NetworkManagerUtils.h"
463++#include "snappy.h"
464+
465+ /* LINKER CRACKROCK */
466+ #define EXPORT(sym) void * __export_##sym = &sym;
467+@@ -124,7 +125,6 @@ static void connection_provider_init (NM
468+ G_DEFINE_TYPE_EXTENDED (NMSettings, nm_settings, G_TYPE_OBJECT, 0,
469+ G_IMPLEMENT_INTERFACE (NM_TYPE_CONNECTION_PROVIDER, connection_provider_init))
470+
471+-
472+ typedef struct {
473+ NMDBusManager *dbus_mgr;
474+
475+@@ -615,6 +615,15 @@ load_plugins (NMSettings *self, const ch
476+ const char **iter;
477+ gboolean keyfile_added = FALSE;
478+ gboolean success = TRUE;
479++ char *plugin_dir = NULL;
480++
481++ if (get_snap_app_path()) {
482++ plugin_dir = g_strdup_printf ("%s/usr/lib/NetworkManager/", get_snap_app_path());
483++ }
484++ else
485++ plugin_dir = g_strdup (NMPLUGINDIR);
486++
487++ nm_log_warn (LOGD_HW, "load_plugins: about to open plugin directory %s", plugin_dir);
488+
489+ for (iter = plugins; iter && *iter; iter++) {
490+ GModule *plugin;
491+@@ -645,7 +654,7 @@ load_plugins (NMSettings *self, const ch
492+ }
493+
494+ full_name = g_strdup_printf ("nm-settings-plugin-%s", pname);
495+- path = g_module_build_path (NMPLUGINDIR, full_name);
496++ path = g_module_build_path (plugin_dir, full_name);
497+
498+ plugin = g_module_open (path, G_MODULE_BIND_LOCAL);
499+ if (!plugin) {
500+@@ -690,6 +699,9 @@ load_plugins (NMSettings *self, const ch
501+
502+ g_slist_free_full (list, g_object_unref);
503+
504++ if (plugin_dir)
505++ g_free (plugin_dir);
506++
507+ return success;
508+ }
509+
510+@@ -1754,6 +1766,8 @@ nm_settings_new (GError **error)
511+ NMSettings *self;
512+ NMSettingsPrivate *priv;
513+
514++ nm_log_warn (LOGD_HW, "nm_settings_new");
515++
516+ self = g_object_new (NM_TYPE_SETTINGS, NULL);
517+
518+ priv = NM_SETTINGS_GET_PRIVATE (self);
519+@@ -1761,8 +1775,11 @@ nm_settings_new (GError **error)
520+ priv->config = nm_config_get ();
521+ priv->dbus_mgr = nm_dbus_manager_get ();
522+
523++ nm_log_warn (LOGD_HW, "nm_settings_new: about to call load_plugins");
524++
525+ /* Load the plugins; fail if a plugin is not found. */
526+ if (!load_plugins (self, nm_config_get_plugins (priv->config), error)) {
527++ fprintf (stderr, "load settings plugins - FAILED!!!\n");
528+ g_object_unref (self);
529+ return NULL;
530+ }
531+Index: build/src/settings/plugins/keyfile/plugin.c
532+===================================================================
533+--- build.orig/src/settings/plugins/keyfile/plugin.c
534++++ build/src/settings/plugins/keyfile/plugin.c
535+@@ -44,6 +44,7 @@
536+ #include "writer.h"
537+ #include "common.h"
538+ #include "utils.h"
539++#include "snappy.h"
540+
541+ static char *plugin_get_hostname (SCPluginKeyfile *plugin);
542+ static void system_config_interface_init (NMSystemConfigInterface *system_config_interface_class);
543+@@ -282,7 +283,17 @@ setup_monitoring (NMSystemConfigInterfac
544+ GFileMonitor *monitor;
545+
546+ if (nm_config_get_monitor_connection_files (nm_config_get ())) {
547+- file = g_file_new_for_path (KEYFILE_DIR);
548++
549++ if (get_snap_app_data_path()) {
550++ char *keyfile_dir = NULL;
551++ keyfile_dir = g_strdup_printf("%s/%s", get_snap_app_data_path(),
552++ KEYFILE_DIR);
553++ file = g_file_new_for_path (keyfile_dir);
554++ g_free(keyfile_dir);
555++ } else {
556++ file = g_file_new_for_path (KEYFILE_DIR);
557++ }
558++
559+ monitor = g_file_monitor_directory (file, G_FILE_MONITOR_NONE, NULL, NULL);
560+ g_object_unref (file);
561+
562+@@ -316,7 +327,16 @@ read_connections (NMSystemConfigInterfac
563+ GHashTableIter iter;
564+ gpointer data;
565+
566+- dir = g_dir_open (KEYFILE_DIR, 0, &error);
567++ if (get_snap_app_data_path()) {
568++ char *keyfile_dir = NULL;
569++ keyfile_dir = g_strdup_printf("%s/%s", get_snap_app_data_path(),
570++ KEYFILE_DIR);
571++ dir = g_dir_open (keyfile_dir, 0, &error);
572++ g_free(keyfile_dir);
573++ } else {
574++ dir = g_dir_open (KEYFILE_DIR, 0, &error);
575++ }
576++
577+ if (!dir) {
578+ nm_log_warn (LOGD_SETTINGS, "Cannot read directory '%s': (%d) %s",
579+ KEYFILE_DIR,
580+@@ -341,7 +361,10 @@ read_connections (NMSystemConfigInterfac
581+ if (nm_keyfile_plugin_utils_should_ignore_file (item))
582+ continue;
583+
584+- full_path = g_build_filename (KEYFILE_DIR, item, NULL);
585++ if (get_snap_app_data_path())
586++ full_path = g_build_filename (get_snap_app_data_path(), KEYFILE_DIR, item, NULL);
587++ else
588++ full_path = g_build_filename (KEYFILE_DIR, item, NULL);
589+
590+ connection = g_hash_table_lookup (oldconns, full_path);
591+ if (connection) {
592+Index: build/src/settings/plugins/keyfile/writer.c
593+===================================================================
594+--- build.orig/src/settings/plugins/keyfile/writer.c
595++++ build/src/settings/plugins/keyfile/writer.c
596+@@ -48,6 +48,7 @@
597+ #include "writer.h"
598+ #include "common.h"
599+ #include "utils.h"
600++#include "snappy.h"
601+
602+ /* Some setting properties also contain setting names, such as
603+ * NMSettingConnection's 'type' property (which specifies the base type of the
604+@@ -1124,12 +1125,26 @@ nm_keyfile_plugin_write_connection (NMCo
605+ char **out_path,
606+ GError **error)
607+ {
608+- return _internal_write_connection (connection,
609+- KEYFILE_DIR,
610++ gboolean ret;
611++ char *keyfile_dir = NULL;
612++
613++ if (get_snap_app_data_path())
614++ keyfile_dir = g_strdup_printf("%s%s",
615++ get_snap_app_data_path(),
616++ KEYFILE_DIR);
617++ else
618++ keyfile_dir = g_strdup(KEYFILE_DIR);
619++
620++ ret = _internal_write_connection (connection,
621++ keyfile_dir,
622+ 0, 0,
623+ existing_path,
624+ out_path,
625+ error);
626++
627++ g_free(keyfile_dir);
628++
629++ return ret;
630+ }
631+
632+ gboolean
633+Index: build/src/snappy.h
634+===================================================================
635+--- /dev/null
636++++ build/src/snappy.h
637+@@ -0,0 +1,45 @@
638++/* NetworkManager -- Network link manager
639++ *
640++ * This program is free software; you can redistribute it and/or modify
641++ * it under the terms of the GNU General Public License as published by
642++ * the Free Software Foundation; either version 2 of the License, or
643++ * (at your option) any later version.
644++ *
645++ * This program is distributed in the hope that it will be useful,
646++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
647++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
648++ * GNU General Public License for more details.
649++ *
650++ * You should have received a copy of the GNU General Public License along
651++ * with this program; if not, write to the Free Software Foundation, Inc.,
652++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
653++ *
654++ * Copyright (C) 2015 Canonical Ltd.
655++ */
656++
657++#ifndef SNAPPY_H_
658++#define SNAPPY_H_
659++
660++#include <stdlib.h>
661++
662++static const char* get_snap_app_data_path()
663++{
664++ static char *path = NULL;
665++
666++ if (!path)
667++ path = getenv("SNAP_APP_DATA_PATH");
668++
669++ return path;
670++}
671++
672++static const char* get_snap_app_path()
673++{
674++ static char *path = NULL;
675++
676++ if (!path)
677++ path = getenv("SNAP_APP_PATH");
678++
679++ return path;
680++}
681++
682++#endif
683+Index: build/src/dhcp-manager/nm-dhcp-dhclient.h
684+===================================================================
685+--- build.orig/src/dhcp-manager/nm-dhcp-dhclient.h
686++++ build/src/dhcp-manager/nm-dhcp-dhclient.h
687+@@ -45,7 +45,7 @@ GSList *nm_dhcp_dhclient_get_lease_ip_co
688+ const char *uuid,
689+ gboolean ipv6);
690+
691+-const char *nm_dhcp_dhclient_get_path (const char *try_first);
692++char *nm_dhcp_dhclient_get_path (const char *try_first);
693+
694+ #endif /* NM_DHCP_DHCLIENT_H */
695+
696
697=== added file 'debian/patches/fix-code-to-build-with-werror.patch'
698--- debian/patches/fix-code-to-build-with-werror.patch 1970-01-01 00:00:00 +0000
699+++ debian/patches/fix-code-to-build-with-werror.patch 2016-03-30 06:28:14 +0000
700@@ -0,0 +1,547 @@
701+Index: build/libgsystem/Makefile-libgsystem.am
702+===================================================================
703+--- build.orig/libgsystem/Makefile-libgsystem.am
704++++ build/libgsystem/Makefile-libgsystem.am
705+@@ -37,6 +37,6 @@ libgsystem_la_SOURCES = \
706+ $(libgsystem_srcpath)/libgsystem.h \
707+ $(NULL)
708+
709+-libgsystem_la_CFLAGS = $(AM_CFLAGS) $(libgsystem_cflags)
710++libgsystem_la_CFLAGS = $(AM_CFLAGS) $(libgsystem_cflags) -Wno-deprecated-declarations
711+ libgsystem_la_LDFLAGS = -avoid-version -Bsymbolic-functions -export-symbols-regex "^gs_" -no-undefined -export-dynamic
712+ libgsystem_la_LIBADD = $(libgsystem_libs)
713+Index: build/src/NetworkManagerUtils.c
714+===================================================================
715+--- build.orig/src/NetworkManagerUtils.c
716++++ build/src/NetworkManagerUtils.c
717+@@ -19,7 +19,6 @@
718+ * Copyright (C) 2005 - 2008 Novell, Inc.
719+ */
720+
721+-#include <glib.h>
722+ #include <errno.h>
723+ #include <fcntl.h>
724+ #include <string.h>
725+@@ -27,6 +26,8 @@
726+ #include <stdlib.h>
727+ #include <resolv.h>
728+
729++#include <glib.h>
730++
731+ #include "NetworkManagerUtils.h"
732+ #include "nm-utils.h"
733+ #include "nm-logging.h"
734+Index: build/src/devices/nm-device.c
735+===================================================================
736+--- build.orig/src/devices/nm-device.c
737++++ build/src/devices/nm-device.c
738+@@ -3808,7 +3808,7 @@ ip6_use_tempaddr (void)
739+ ret = use_tempaddr_clamp (tmp);
740+
741+ done:
742+- sysctl_data = g_string_free (sysctl_data, TRUE);
743++ sysctl_data = (GString*) g_string_free (sysctl_data, TRUE);
744+ g_clear_error (&error);
745+ g_key_file_free (keyfile);
746+
747+Index: build/src/devices/wwan/nm-modem-ofono.c
748+===================================================================
749+--- build.orig/src/devices/wwan/nm-modem-ofono.c
750++++ build/src/devices/wwan/nm-modem-ofono.c
751+@@ -35,6 +35,7 @@
752+ #include "nm-modem.h"
753+ #include "nm-dbus-manager.h"
754+ #include "NetworkManagerUtils.h"
755++#include "nm-utils.h"
756+
757+ G_DEFINE_TYPE (NMModemOfono, nm_modem_ofono, NM_TYPE_MODEM)
758+
759+@@ -63,17 +64,6 @@ typedef struct {
760+
761+ } NMModemOfonoPrivate;
762+
763+-#define NM_OFONO_ERROR (nm_ofono_error_quark ())
764+-
765+-static GQuark
766+-nm_ofono_error_quark (void)
767+-{
768+- static GQuark quark = 0;
769+- if (!quark)
770+- quark = g_quark_from_static_string ("nm-ofono-error");
771+- return quark;
772+-}
773+-
774+ static gboolean
775+ ip_string_to_network_address (const gchar *str,
776+ guint32 *out)
777+@@ -141,7 +131,6 @@ disconnect_done (DBusGProxy *proxy, DBus
778+ {
779+ SimpleDisconnectContext *ctx = (SimpleDisconnectContext*) user_data;
780+ NMModemOfono *self = ctx->self;
781+- NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
782+ GError *error = NULL;
783+
784+ nm_log_dbg (LOGD_MB, "in %s", __func__);
785+@@ -199,7 +188,7 @@ deactivate (NMModem *_self, NMDevice *de
786+ NM_MODEM_CLASS (nm_modem_ofono_parent_class)->deactivate (_self, device);
787+ }
788+
789+-DBusGProxy *
790++static DBusGProxy *
791+ get_ofono_proxy (NMModemOfono *self, const char *path, const char *interface)
792+ {
793+ NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
794+@@ -238,7 +227,6 @@ static void
795+ get_ofono_conn_manager_properties_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
796+ {
797+ NMModemOfono *self = NM_MODEM_OFONO (user_data);
798+- NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
799+ GError *error = NULL;
800+ GHashTable *properties = NULL;
801+ GValue *value = NULL;
802+@@ -310,12 +298,9 @@ static void
803+ get_ofono_sim_properties_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
804+ {
805+ NMModemOfono *self = NM_MODEM_OFONO (user_data);
806+- NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
807+- NMModemState state = nm_modem_get_state (NM_MODEM (self));
808+ GError *error = NULL;
809+ GHashTable *properties = NULL;
810+ GValue *value = NULL;
811+- const gchar *value_str;
812+
813+ nm_log_dbg (LOGD_MB, "in %s", __func__);
814+
815+@@ -360,17 +345,12 @@ ofono_context_added (DBusGProxy *proxy,
816+ GValue *prop,
817+ gpointer user_data)
818+ {
819+- NMModemOfono *self = NM_MODEM_OFONO (user_data);
820+-
821+ nm_log_dbg (LOGD_MB, "context %s added", path);
822+ }
823+
824+ static void
825+ ofono_context_removed (DBusGProxy *proxy, const char *path, gpointer user_data)
826+ {
827+- NMModemOfono *self = NM_MODEM_OFONO (user_data);
828+- NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
829+-
830+ nm_log_dbg (LOGD_MB, "context %s removed", path);
831+ }
832+
833+@@ -695,7 +675,6 @@ context_properties_changed (DBusGProxy *
834+ gpointer user_data)
835+ {
836+ NMModemOfono *self = NM_MODEM_OFONO (user_data);
837+- NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
838+
839+ if (g_strcmp0("Settings", key) == 0) {
840+ ofono_context_get_ip_properties (self);
841+@@ -708,8 +687,8 @@ do_context_activate (NMModemOfono *self,
842+ NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
843+ GValue value = G_VALUE_INIT;
844+
845+- g_return_val_if_fail (self != NULL, FALSE);
846+- g_return_val_if_fail (NM_IS_MODEM_OFONO (self), FALSE);
847++ g_return_if_fail (self != NULL);
848++ g_return_if_fail (NM_IS_MODEM_OFONO (self));
849+
850+ nm_log_dbg (LOGD_MB, "in %s", __func__);
851+
852+@@ -762,66 +741,6 @@ do_context_activate (NMModemOfono *self,
853+
854+ }
855+
856+-static void
857+-context_set_property (gpointer key, gpointer value, gpointer user_data)
858+-{
859+- NMModemOfono *self = NM_MODEM_OFONO (user_data);
860+- NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
861+- GValue val = G_VALUE_INIT;
862+-
863+- nm_log_dbg (LOGD_MB, "%s -- setting context prop: %s == %s",
864+- __func__,
865+- (char*)key,
866+- (char*)value);
867+-
868+- g_value_init (&val, G_TYPE_STRING);
869+- g_value_set_string (&val, (char*)value);
870+-
871+- if (!priv->property_error) {
872+- dbus_g_proxy_call_with_timeout (priv->context_proxy,
873+- "SetProperty",
874+- 20000,
875+- &priv->property_error,
876+- G_TYPE_STRING, (char*)key,
877+- G_TYPE_VALUE, &val,
878+- G_TYPE_INVALID);
879+- } else {
880+- nm_log_warn (LOGD_MB, "could not set context property '%s': %s", (char*)key,
881+- priv->property_error
882+- && priv->property_error->message
883+- ? priv->property_error->message : "(unknown)");
884+- }
885+-}
886+-
887+-static void stage1_enable_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data);
888+-
889+-static void
890+-stage1_enable_done (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
891+-{
892+- NMModemOfono *self = NM_MODEM_OFONO (user_data);
893+- NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
894+- GError *error = NULL;
895+-
896+- nm_log_dbg (LOGD_MB, "in %s", __func__);
897+-
898+- if (dbus_g_proxy_end_call (proxy, call_id, &error, G_TYPE_INVALID)) {
899+- if (priv->context_path)
900+- do_context_activate (self, priv->context_path);
901+- else
902+- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED);
903+- } else {
904+- nm_log_warn (LOGD_MB, "OFONO modem enable failed: (%d) %s",
905+- error ? error->code : -1,
906+- error && error->message ? error->message : "(unknown)");
907+-
908+- g_signal_emit_by_name (self, NM_MODEM_PREPARE_RESULT, FALSE, NM_DEVICE_STATE_REASON_MODEM_INIT_FAILED);
909+-
910+- g_error_free (error);
911+- }
912+-
913+- g_object_unref (self);
914+-}
915+-
916+ static GHashTable *
917+ create_connect_properties (NMConnection *connection)
918+ {
919+@@ -857,7 +776,6 @@ act_stage1_prepare (NMModem *modem,
920+ NMModemOfono *self = NM_MODEM_OFONO (modem);
921+ NMModemOfonoPrivate *priv = NM_MODEM_OFONO_GET_PRIVATE (self);
922+ const char *context_id;
923+- char *context_path;
924+ char **id = NULL;
925+
926+ nm_log_dbg (LOGD_MB, "in %s", __func__);
927+@@ -1014,7 +932,6 @@ get_capabilities (NMModem *_self,
928+ NMDeviceModemCapabilities *modem_caps,
929+ NMDeviceModemCapabilities *current_caps)
930+ {
931+- NMModemOfono *self = NM_MODEM_OFONO (_self);
932+ NMDeviceModemCapabilities all_ofono_caps = NM_DEVICE_MODEM_CAPABILITY_GSM_UMTS;
933+
934+ *modem_caps = all_ofono_caps;
935+Index: build/src/dhcp-manager/nm-dhcp-dhclient.c
936+===================================================================
937+--- build.orig/src/dhcp-manager/nm-dhcp-dhclient.c
938++++ build/src/dhcp-manager/nm-dhcp-dhclient.c
939+@@ -18,9 +18,7 @@
940+ * Copyright (C) 2005 - 2012 Red Hat, Inc.
941+ */
942+
943+-#define _XOPEN_SOURCE
944+ #include <time.h>
945+-#undef _XOPEN_SOURCE
946+
947+ #include <glib.h>
948+ #include <glib/gi18n.h>
949+Index: build/src/dns-manager/nm-dns-dnsmasq.c
950+===================================================================
951+--- build.orig/src/dns-manager/nm-dns-dnsmasq.c
952++++ build/src/dns-manager/nm-dns-dnsmasq.c
953+@@ -83,7 +83,6 @@ find_dnsmasq (void)
954+ static gboolean
955+ add_ip4_config (DBusMessage *message, NMIP4Config *ip4, gboolean split)
956+ {
957+- char buf[INET_ADDRSTRLEN];
958+ in_addr_t addr;
959+ int nnameservers, i_nameserver, n, i;
960+ gboolean added = FALSE;
961+@@ -105,7 +104,7 @@ add_ip4_config (DBusMessage *message, NM
962+ /* searches are preferred over domains */
963+ n = nm_ip4_config_get_num_searches (ip4);
964+ for (i = 0; i < n; i++) {
965+- char *search = nm_ip4_config_get_search (ip4, i);
966++ const char *search = nm_ip4_config_get_search (ip4, i);
967+ dbus_message_append_args (message,
968+ DBUS_TYPE_STRING, &search,
969+ DBUS_TYPE_INVALID);
970+@@ -116,7 +115,7 @@ add_ip4_config (DBusMessage *message, NM
971+ /* If not searches, use any domains */
972+ n = nm_ip4_config_get_num_domains (ip4);
973+ for (i = 0; i < n; i++) {
974+- char *domain = nm_ip4_config_get_domain (ip4, i);
975++ const char *domain = nm_ip4_config_get_domain (ip4, i);
976+ dbus_message_append_args (message,
977+ DBUS_TYPE_STRING, &domain,
978+ DBUS_TYPE_INVALID);
979+@@ -193,7 +192,7 @@ add_ip6_config (DBusMessage *message, NM
980+ /* searches are preferred over domains */
981+ n = nm_ip6_config_get_num_searches (ip6);
982+ for (i = 0; i < n; i++) {
983+- char *search = nm_ip6_config_get_search (ip6, i);
984++ const char *search = nm_ip6_config_get_search (ip6, i);
985+ dbus_message_append_args (message,
986+ DBUS_TYPE_STRING, &search,
987+ DBUS_TYPE_INVALID);
988+@@ -204,7 +203,7 @@ add_ip6_config (DBusMessage *message, NM
989+ /* If not searches, use any domains */
990+ n = nm_ip6_config_get_num_domains (ip6);
991+ for (i = 0; i < n; i++) {
992+- char *domain = nm_ip6_config_get_domain (ip6, i);
993++ const char *domain = nm_ip6_config_get_domain (ip6, i);
994+ dbus_message_append_args (message,
995+ DBUS_TYPE_STRING, &domain,
996+ DBUS_TYPE_INVALID);
997+@@ -342,7 +341,7 @@ update (NMDnsPlugin *plugin,
998+ /* Work on a copy of the vpn_configs list because we might want to remove
999+ * some items from it, yet not affect other DNS plugins that might run
1000+ */
1001+- vpn_configs_copy = g_slist_copy (vpn_configs);
1002++ vpn_configs_copy = g_slist_copy ((GSList*) vpn_configs);
1003+
1004+ /* Look for a VPN config that is set to get a default route, and if
1005+ * there is one, install it *without* splitting into per-domain servers.
1006+@@ -413,9 +412,9 @@ update (NMDnsPlugin *plugin,
1007+ * we cleared up the dnsmasq cache; but we should also fail the update, so
1008+ * that we don't write 127.0.1.1 to resolv.conf.
1009+ */
1010+- if (((vpn_configs && g_slist_length (vpn_configs) < 1) || !vpn_configs) &&
1011+- ((dev_configs && g_slist_length (dev_configs) < 1) || !dev_configs) &&
1012+- ((other_configs && g_slist_length (other_configs) < 1) || !other_configs))
1013++ if (((vpn_configs && g_slist_length ((GSList*) vpn_configs) < 1) || !vpn_configs) &&
1014++ ((dev_configs && g_slist_length ((GSList*) dev_configs) < 1) || !dev_configs) &&
1015++ ((other_configs && g_slist_length ((GSList*) other_configs) < 1) || !other_configs))
1016+ ret = FALSE;
1017+
1018+ out:
1019+Index: build/src/dns-manager/nm-dns-manager.c
1020+===================================================================
1021+--- build.orig/src/dns-manager/nm-dns-manager.c
1022++++ build/src/dns-manager/nm-dns-manager.c
1023+@@ -784,7 +784,6 @@ static void
1024+ plugin_appeared (NMDnsPlugin *plugin, gpointer user_data)
1025+ {
1026+ NMDnsManager *self = NM_DNS_MANAGER (user_data);
1027+- NMDnsManagerPrivate *priv = NM_DNS_MANAGER_GET_PRIVATE (self);
1028+ GError *error = NULL;
1029+
1030+ /* Not applicable to non-caching plugins */
1031+Index: build/src/nm-manager.c
1032+===================================================================
1033+--- build.orig/src/nm-manager.c
1034++++ build/src/nm-manager.c
1035+@@ -800,7 +800,6 @@ remove_device (NMManager *manager, NMDev
1036+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
1037+
1038+ if (nm_device_get_managed (device)) {
1039+- NMActRequest *req = nm_device_get_act_request (device);
1040+ gboolean unmanage = FALSE;
1041+
1042+ /* Ubuntu: don't use device assumption, so as not to leave
1043+@@ -2172,7 +2171,6 @@ platform_link_added (NMManager *self,
1044+ /*
1045+ * Ubuntu: Explicitly unmanage p2p Wi-Fi devices exposed by Android JB Wi-Fi drivers.
1046+ */
1047+- NMDeviceType devtype = nm_device_get_device_type (device);
1048+ if ((plink->type == NM_LINK_TYPE_WIFI)
1049+ && !strncmp (plink->name, "p2p0", STRLEN ("p2p0"))) {
1050+ nm_log_info (LOGD_HW, "(%s): ignoring P2P wireless iface", plink->name);
1051+@@ -4266,9 +4264,6 @@ ifstate_file_changed (GFileMonitor *moni
1052+ GFileMonitorEvent event_type,
1053+ gpointer user_data)
1054+ {
1055+- NMManager *self = NM_MANAGER (user_data);
1056+- NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
1057+-
1058+ switch (event_type) {
1059+ // case G_FILE_MONITOR_EVENT_CREATED:
1060+ //#if GLIB_CHECK_VERSION(2,23,4)
1061+@@ -4809,7 +4804,6 @@ urfkill_wlan_state_changed_cb (NMUrfkill
1062+ {
1063+ NMManager *self = NM_MANAGER (user_data);
1064+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
1065+- GError *error = NULL;
1066+
1067+ nm_log_dbg (LOGD_RFKILL, "urfkill wlan state changed to %s",
1068+ enabled ? "enabled" : "disabled");
1069+@@ -4832,7 +4826,6 @@ urfkill_wwan_state_changed_cb (NMUrfkill
1070+ {
1071+ NMManager *self = NM_MANAGER (user_data);
1072+ NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
1073+- GError *error = NULL;
1074+
1075+ nm_log_dbg (LOGD_RFKILL, "urfkill wwan state changed to %s",
1076+ enabled ? "enabled" : "disabled");
1077+@@ -4910,6 +4903,7 @@ nm_manager_new (NMSettings *settings,
1078+ NMManagerPrivate *priv;
1079+ DBusGConnection *bus;
1080+ DBusConnection *dbus_connection;
1081++ KillState *kill_state;
1082+
1083+ g_assert (settings);
1084+
1085+@@ -5009,7 +5003,7 @@ nm_manager_new (NMSettings *settings,
1086+ * changes to the WirelessEnabled/WWANEnabled properties which toggle kernel
1087+ * rfkill.
1088+ */
1089+- KillState *kill_state = g_slice_new0 (KillState);
1090++ kill_state = g_slice_new0 (KillState);
1091+ kill_state->manager = g_object_ref (singleton);
1092+ kill_state->wlan_enabled = initial_wifi_enabled;
1093+ kill_state->wwan_enabled = initial_wwan_enabled;
1094+Index: build/src/nm-urfkill-manager.c
1095+===================================================================
1096+--- build.orig/src/nm-urfkill-manager.c
1097++++ build/src/nm-urfkill-manager.c
1098+@@ -63,7 +63,6 @@ wlan_state_changed (GDBusProxy *proxy,
1099+ gpointer user_data)
1100+ {
1101+ NMUrfkillManager *self = NM_URFKILL_MANAGER (user_data);
1102+- GVariant *state;
1103+ gboolean enabled;
1104+
1105+ enabled = nm_urfkill_get_wlan_state (self);
1106+@@ -81,7 +80,6 @@ wwan_state_changed (GDBusProxy *proxy,
1107+ gpointer user_data)
1108+ {
1109+ NMUrfkillManager *self = NM_URFKILL_MANAGER (user_data);
1110+- GVariant *state = NULL;
1111+ gboolean enabled;
1112+
1113+ enabled = nm_urfkill_get_wwan_state (self);
1114+@@ -234,8 +232,6 @@ on_urfkill_vanished (GDBusConnection *co
1115+ static void
1116+ nm_urfkill_manager_init (NMUrfkillManager *self)
1117+ {
1118+- DBusGConnection *bus;
1119+-
1120+ self->urfkill_watch = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
1121+ "org.freedesktop.URfkill",
1122+ 0,
1123+Index: build/src/nm-urfkill-manager.h
1124+===================================================================
1125+--- build.orig/src/nm-urfkill-manager.h
1126++++ build/src/nm-urfkill-manager.h
1127+@@ -39,7 +39,7 @@ typedef struct _NMUrfkillManager NMUrfki
1128+
1129+ GType nm_urfkill_manager_get_type (void);
1130+
1131+-NMUrfkillManager *nm_urfkill_manager_new ();
1132++NMUrfkillManager *nm_urfkill_manager_new (void);
1133+
1134+ gboolean nm_urfkill_get_wlan_state (NMUrfkillManager *self);
1135+ gboolean nm_urfkill_get_wwan_state (NMUrfkillManager *self);
1136+Index: build/src/devices/bluetooth/Makefile.am
1137+===================================================================
1138+--- build.orig/src/devices/bluetooth/Makefile.am
1139++++ build/src/devices/bluetooth/Makefile.am
1140+@@ -19,7 +19,8 @@ AM_CPPFLAGS = \
1141+ $(DBUS_CFLAGS) \
1142+ $(POLKIT_CFLAGS) \
1143+ $(LIBNL_CFLAGS) \
1144+- $(GUDEV_CFLAGS)
1145++ $(GUDEV_CFLAGS) \
1146++ -Wno-deprecated-declarations
1147+
1148+ GLIB_GENERATED = nm-bt-enum-types.h nm-bt-enum-types.c
1149+ GLIB_MKENUMS_H_FLAGS = --identifier-prefix NM
1150+Index: build/src/settings/plugins/ofono/plugin.c
1151+===================================================================
1152+--- build.orig/src/settings/plugins/ofono/plugin.c
1153++++ build/src/settings/plugins/ofono/plugin.c
1154+@@ -96,11 +96,6 @@ ofono_plugin_error_quark (void)
1155+ }
1156+
1157+ static void
1158+-ignore_cb ()
1159+-{
1160+-}
1161+-
1162+-static void
1163+ SCPluginOfono_parse_contexts (SCPluginOfono *self, GSList *contexts, const char *imsi)
1164+ {
1165+ SCPluginOfonoPrivate *priv = SC_PLUGIN_OFONO_GET_PRIVATE (self);
1166+@@ -197,7 +192,6 @@ next_context:
1167+ static gboolean
1168+ nm_ofono_read_imsi_contexts (SCPluginOfono *self, const char *imsi, GError **error)
1169+ {
1170+- SCPluginOfonoPrivate *priv = SC_PLUGIN_OFONO_GET_PRIVATE (self);
1171+ GHashTable *context;
1172+ GHashTable *pref_context = NULL;
1173+ GSList *contexts = NULL;
1174+@@ -358,7 +352,6 @@ ofono_imsi_changed (GFileMonitor *monito
1175+ gpointer user_data)
1176+ {
1177+ SCPluginOfono *self = SC_PLUGIN_OFONO (user_data);
1178+- SCPluginOfonoPrivate *priv = SC_PLUGIN_OFONO_GET_PRIVATE (self);
1179+ GFile *parent;
1180+ gchar *path, *imsi;
1181+ GError *error = NULL;
1182+@@ -465,9 +458,8 @@ ofono_dir_changed (GFileMonitor *monitor
1183+ SCPluginOfono *self = SC_PLUGIN_OFONO (user_data);
1184+ SCPluginOfonoPrivate *priv = SC_PLUGIN_OFONO_GET_PRIVATE (self);
1185+ GFileMonitor *imsi_monitor;
1186+- GFile *config_path;
1187+ gulong id;
1188+- gchar *imsi, *path;
1189++ gchar *imsi;
1190+ gboolean res;
1191+ GError *error = NULL;
1192+
1193+@@ -597,8 +589,6 @@ static void
1194+ GObject__get_property (GObject *object, guint prop_id,
1195+ GValue *value, GParamSpec *pspec)
1196+ {
1197+- NMSystemConfigInterface *self = NM_SYSTEM_CONFIG_INTERFACE (object);
1198+-
1199+ switch (prop_id) {
1200+ case NM_SYSTEM_CONFIG_INTERFACE_PROP_NAME:
1201+ g_value_set_string (value, OFONO_PLUGIN_NAME);
1202+@@ -676,8 +666,6 @@ SCPluginOfono_init (NMSystemConfigInterf
1203+ {
1204+ SCPluginOfono *self = SC_PLUGIN_OFONO (config);
1205+ SCPluginOfonoPrivate *priv = SC_PLUGIN_OFONO_GET_PRIVATE (self);
1206+- GError *error = NULL;
1207+- gboolean success = FALSE;
1208+
1209+ /* Keep a hash table of GFileMonitors per IMSI for later removal */
1210+ if (!priv->ofono_imsi_monitors)
1211+@@ -705,11 +693,13 @@ SCPluginOfono_get_unmanaged_specs (NMSys
1212+ static gint
1213+ sort_by_context_id (gconstpointer a, gconstpointer b)
1214+ {
1215++ const char *context_a, *context_b;
1216++
1217+ g_return_val_if_fail (a != NULL, 0);
1218+ g_return_val_if_fail (b != NULL, 0);
1219+
1220+- const char *context_a = nm_connection_get_id (NM_CONNECTION (a));
1221+- const char *context_b = nm_connection_get_id (NM_CONNECTION (b));
1222++ context_a = nm_connection_get_id (NM_CONNECTION (a));
1223++ context_b = nm_connection_get_id (NM_CONNECTION (b));
1224+
1225+ return g_strcmp0 (context_a, context_b);
1226+ }
1227+Index: build/src/platform/tests/test-link.c
1228+===================================================================
1229+--- build.orig/src/platform/tests/test-link.c
1230++++ build/src/platform/tests/test-link.c
1231+@@ -188,12 +188,12 @@ test_slave (int master, int type, Signal
1232+ /* Older team versions (e.g. Fedora 17) have a bug that team master stays
1233+ * IFF_LOWER_UP even if its slave is down. Double check it with iproute2 and if
1234+ * `ip link` also claims master to be up, accept it. */
1235+- char *stdout = NULL;
1236++ char *_stdout = NULL;
1237+
1238+- nmtst_spawn_sync (NULL, &stdout, NULL, 0, "/sbin/ip", "link", "show", "dev", nm_platform_link_get_name (master));
1239++ nmtst_spawn_sync (NULL, &_stdout, NULL, 0, "/sbin/ip", "link", "show", "dev", nm_platform_link_get_name (master));
1240+
1241+- g_assert (strstr (stdout, "LOWER_UP"));
1242+- g_free (stdout);
1243++ g_assert (strstr (_stdout, "LOWER_UP"));
1244++ g_free (_stdout);
1245+ } else
1246+ g_assert_not_reached ();
1247+ }
1248
1249=== modified file 'debian/patches/series'
1250--- debian/patches/series 2015-10-01 21:39:53 +0000
1251+++ debian/patches/series 2016-03-30 06:28:14 +0000
1252@@ -76,3 +76,6 @@
1253 lp1444162-add-ip6-config-to-nm-ofono-connections.patch
1254 fix-ofono-plugin-leaks.patch
1255 rm-scofono-plugin-dbus.patch
1256+
1257+fix-code-to-build-with-werror.patch
1258+add-snappy-support.patch
1259
1260=== added directory 'parts'
1261=== added directory 'parts/plugins'
1262=== added file 'parts/plugins/x-autotools.py'
1263--- parts/plugins/x-autotools.py 1970-01-01 00:00:00 +0000
1264+++ parts/plugins/x-autotools.py 2016-03-30 06:28:14 +0000
1265@@ -0,0 +1,129 @@
1266+# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*-
1267+#
1268+# Copyright (C) 2015 Canonical Ltd
1269+#
1270+# This program is free software: you can redistribute it and/or modify
1271+# it under the terms of the GNU General Public License version 3 as
1272+# published by the Free Software Foundation.
1273+#
1274+# This program is distributed in the hope that it will be useful,
1275+# but WITHOUT ANY WARRANTY; without even the implied warranty of
1276+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1277+# GNU General Public License for more details.
1278+#
1279+# You should have received a copy of the GNU General Public License
1280+# along with this program. If not, see <http://www.gnu.org/licenses/>.
1281+
1282+"""The autotools plugin is used for autotools based parts.
1283+
1284+Autotools based projects are the ones that have the usual
1285+`./configure && make && make install` instruction set.
1286+
1287+The plugin tries to build using ./configure first, if it is not there
1288+it will run ./autogen and if autogen is not there it will run autoreconf.
1289+
1290+This plugin uses the common plugin keywords as well as those for "sources".
1291+For more information check the 'plugins' topic for the former and the
1292+'sources' topic for the latter.
1293+
1294+In additon, this plugin uses the following plugin-specific keywords:
1295+
1296+ - configflags:
1297+ (list of strings)
1298+ configure flags to pass to the build such as those shown by running
1299+ './configure --help'
1300+"""
1301+
1302+import os
1303+import stat
1304+
1305+import snapcraft
1306+
1307+
1308+class AutotoolsPlugin(snapcraft.BasePlugin):
1309+
1310+ @classmethod
1311+ def schema(cls):
1312+ schema = super().schema()
1313+ schema['properties']['configflags'] = {
1314+ 'type': 'array',
1315+ 'minitems': 1,
1316+ 'uniqueItems': True,
1317+ 'items': {
1318+ 'type': 'string',
1319+ },
1320+ 'default': [],
1321+ }
1322+
1323+ schema['properties']['install-via'] = {
1324+ 'enum': ['destdir', 'prefix'],
1325+ 'default': 'destdir',
1326+ }
1327+
1328+ schema['properties']['patches-dir'] = {
1329+ 'type': 'string',
1330+ 'default': 'patches',
1331+ }
1332+
1333+ schema['properties']['force-autogen'] = {
1334+ 'type': 'boolean',
1335+ 'default': 'true',
1336+ }
1337+
1338+ return schema
1339+
1340+ def __init__(self, name, options):
1341+ super().__init__(name, options)
1342+ self.build_packages.extend([
1343+ 'autoconf',
1344+ 'automake',
1345+ 'autopoint',
1346+ 'libtool',
1347+ 'make',
1348+ ])
1349+
1350+ if options.install_via == 'destdir':
1351+ self.install_via_destdir = True
1352+ elif options.install_via == 'prefix':
1353+ self.install_via_destdir = False
1354+ else:
1355+ raise RuntimeError('Unsupported installation method: "{}"'.format(
1356+ options.install_via))
1357+
1358+ def build(self):
1359+ super().build()
1360+
1361+ patchdir = os.path.join(self.builddir, "../../..", self.options.patches_dir)
1362+
1363+ if os.path.exists(patchdir):
1364+ os.environ['QUILT_PATCHES'] = patchdir
1365+ self.run(['quilt', 'push', '-a'])
1366+
1367+ if not os.path.exists(os.path.join(self.builddir, "configure")) or self.options.force_autogen:
1368+ autogen_path = os.path.join(self.builddir, "autogen.sh")
1369+ if os.path.exists(autogen_path):
1370+ # Make sure it's executable
1371+ if not os.access(autogen_path, os.X_OK):
1372+ os.chmod(autogen_path,
1373+ stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR |
1374+ stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP |
1375+ stat.S_IROTH | stat.S_IWOTH | stat.S_IXOTH)
1376+
1377+ self.run(['env', 'NOCONFIGURE=1', './autogen.sh'])
1378+ else:
1379+ self.run(['autoreconf', '-i'])
1380+
1381+ configure_command = ['./configure']
1382+ make_install_command = ['make', 'install']
1383+
1384+ if self.install_via_destdir:
1385+ # Use an empty prefix since we'll install via DESTDIR
1386+ configure_command.append('--prefix=')
1387+ make_install_command.append('DESTDIR=' + self.installdir)
1388+ else:
1389+ configure_command.append('--prefix=' + self.installdir)
1390+
1391+ self.run(configure_command + self.options.configflags)
1392+ self.run(['make', '-j{}'.format(
1393+ snapcraft.common.get_parallel_build_count())])
1394+ self.run(make_install_command)
1395
1396=== added file 'snapcraft.yaml'
1397--- snapcraft.yaml 1970-01-01 00:00:00 +0000
1398+++ snapcraft.yaml 2016-03-30 06:28:14 +0000
1399@@ -0,0 +1,239 @@
1400+name: network-manager
1401+version: 0.9.10.0-4ubuntu15.1.8-1
1402+type: app
1403+summary: Network management based on NeworkManager
1404+description: Network management of wired ethernet and WiFi based on NetworkManager
1405+icon: snappy/icon.svg
1406+
1407+apps:
1408+ nmcli:
1409+ command: usr/bin/nmcli
1410+ plugs: [unconfined]
1411+ nmtui-connect:
1412+ command: usr/bin/nmtui-connect
1413+ plugs: [unconfined]
1414+ nmtui-edit:
1415+ command: usr/bin/nmtui-edit
1416+ plugs: [unconfined]
1417+ NetworkManager:
1418+ command: bin/networkmanager
1419+ daemon: simple
1420+ plugs: [unconfined]
1421+ dnsmasq:
1422+ command: bin/dnsmasq
1423+ daemon: simple
1424+ plugs: [unconfined]
1425+
1426+plugs:
1427+ unconfined:
1428+ interface: old-security
1429+ security-template: unconfined
1430+
1431+parts:
1432+ networkmanager-common:
1433+ plugin: copy
1434+ files:
1435+ snappy/bin/networkmanager: bin/networkmanager
1436+ snappy/bin/dnsmasq: bin/dnsmasq
1437+ snappy/conf/NetworkManager.conf: etc/NetworkManager/NetworkManager.conf
1438+ snappy/conf/dnsmasq-dbus.conf: conf/dnsmasq-dbus.conf
1439+
1440+ networkmanager:
1441+ plugin: autotools
1442+
1443+ source: https://download.gnome.org/sources/NetworkManager/0.9/NetworkManager-0.9.10.0.tar.xz
1444+
1445+ # Taking the same patchset as our debian package does
1446+ patches-dir: debian/patches
1447+
1448+ # NOTE: Force autogen to be executed again even if the tarball already
1449+ # comes with a configure script but that links against aclocal-1.13
1450+ # which we don't profile anymore and will cause the build to fail.
1451+ force-autogen: true
1452+
1453+ # NOTE: Keep this in sync with what the debian package configures
1454+ # NetworkManager. For everything we do differently please add a
1455+ # comment why we do so.
1456+ configflags:
1457+ - --libexecdir=/usr/lib/NetworkManager
1458+ - --with-pppd-plugin-dir=/usr/lib/pppd/2.4.6
1459+ - --with-pppd=/usr/sbin/pppd
1460+ - --with-pppoe=/usr/sbin/pppoe
1461+ - --with-resolvconf=/sbin/resolvconf
1462+ - --with-dhclient=/sbin/dhclient
1463+ - --with-iptables=/sbin/iptables
1464+ - --with-dnsmasq=/usr/sbin/dnsmasq
1465+ - --with-systemdsystemunitdir=/lib/systemd/system
1466+ - --with-crypto=gnutls
1467+ - --with-session-tracking=systemd
1468+ - --with-suspend-resume=systemd
1469+ - --with-modem-manager-1
1470+ - --with-nmtui
1471+ - --disable-more-warnings
1472+ - --disable-modify-system
1473+ - --enable-polkit
1474+ - --enable-ppp
1475+ - --enable-ifupdown
1476+ - --enable-introspection
1477+ - --enable-gtk-doc
1478+ - --enable-concheck
1479+ - --enable-teamdctl=no
1480+ - --enable-vala
1481+ - --enable-bluez4
1482+ - --with-tests
1483+ # NOTE: After this all options are specific to snappy and are not
1484+ # in sync with those being used in the debian package.
1485+ - --prefix=/usr
1486+ - --sysconfdir=/etc
1487+ - --disable-qt
1488+ - --enable-snappy
1489+
1490+ # We stage everything here we need for build and runtime
1491+ stage-packages:
1492+ - adduser
1493+ - dbus-test-runner
1494+ - dnsmasq-base
1495+ - gobject-introspection
1496+ - gtk-doc-tools
1497+ - init-system-helpers
1498+ - intltool
1499+ - iputils-arping
1500+ - isc-dhcp-client
1501+ - iw
1502+ - libc6
1503+ - libdbus-1-3
1504+ - libdbus-1-dev
1505+ - libdbus-glib-1-2
1506+ - libdbus-glib-1-dev
1507+ - libgcrypt11-dev
1508+ - libgcrypt20
1509+ - libgirepository1.0-dev
1510+ - libglib2.0-0
1511+ - libglib2.0-dev
1512+ - libglib2.0-doc
1513+ - libgudev-1.0-0
1514+ - libgudev-1.0-dev
1515+ - libiw-dev
1516+ - libmbim-glib4
1517+ - libmm-glib-dev
1518+ - libndp-dev
1519+ - libndp0
1520+ - libnewt-dev
1521+ - libnewt0.52
1522+ - libnl-3-200
1523+ - libnl-3-dev
1524+ - libnl-genl-3-200
1525+ - libnl-genl-3-dev
1526+ - libnl-route-3-200
1527+ - libnl-route-3-dev
1528+ - libnss3-dev
1529+ - libnspr4-dev
1530+ - libpam-systemd
1531+ - libpolkit-agent-1-0
1532+ - libpolkit-gobject-1-0
1533+ - libpolkit-gobject-1-dev
1534+ - libqmi-glib1
1535+ - libreadline-dev
1536+ - libreadline6
1537+ - libsoup2.4-1
1538+ - libsoup2.4-dev
1539+ - libsystemd-dev
1540+ - libsystemd0
1541+ - libudev-dev
1542+ - libuuid1
1543+ - lsb-base
1544+ - pkg-config
1545+ - policykit-1
1546+ - ppp-dev
1547+ - python-dbus
1548+ - python-gi
1549+ - udev
1550+ - uuid-dev
1551+ - valac
1552+ - wireless-tools
1553+
1554+ # We don't want that anything from our staged packages ends
1555+ # up in the resulting snap. We only need them to build
1556+ # NetworkManager. All runtime dependencies are pulled in with
1557+ # the rdepends part below. The only left items specified
1558+ # here are the results of the network manager build.
1559+ filesets:
1560+ docs:
1561+ # Need those to chip the license files of all things
1562+ # we put into the snap.
1563+ - usr/share/doc
1564+ binaries:
1565+ - usr/bin/nm-online
1566+ - usr/bin/nmcli
1567+ - usr/bin/nmtui
1568+ - usr/bin/nmtui-connect
1569+ - usr/bin/nmtui-hostname
1570+ - usr/bin/nmtui-edit
1571+ - usr/lib/*/NetworkManager
1572+ - usr/lib/pppd/2.4.6/nm-pppd-plugin.so
1573+ - usr/lib/NetworkManager
1574+ - usr/sbin/NetworkManager
1575+ - usr/lib/*/libnm-*.so*
1576+ - usr/lib/libnm-*.so*
1577+ configs:
1578+ - etc/dbus-1/system.d/*
1579+ rdepends:
1580+ - lib64/*
1581+ - lib/*/
1582+ - usr/lib/*/
1583+ - sbin/iwconfig
1584+ - sbin/iwlist
1585+ - sbin/iw
1586+ - sbin/dhclient-script
1587+ - sbin/dhclient
1588+ - bin/ip
1589+ - etc/dbus-1/system.d/dnsmasq.conf
1590+ - etc/iproute2/
1591+ - usr/sbin/arpd
1592+ - usr/sbin/dnsmasq
1593+ - usr/bin/arping
1594+ - usr/share/dnsmasq-base/
1595+ - etc/dhcp/
1596+ unwanted:
1597+ - -etc/dbus-1/system.d/org.freedesktop.ModemManager1.conf
1598+ - -usr/bin/mmcli
1599+ - -usr/include/libmm-glib/
1600+ - -usr/lib/*/libmm-glib.so*
1601+ - -usr/lib/*/ModemManager/
1602+ - -usr/sbin/ModemManager
1603+ - -usr/share/icons/hicolor/22x22/apps/ModemManager.png
1604+ - -usr/lib/*/gobject-introspection
1605+ - -usr/lib/*/pkgconfig
1606+ - -usr/lib/pkgconfig
1607+ - -usr/lib/*/perl/
1608+ - -usr/lib/*/perl5/
1609+ - -usr/lib/python2.7/
1610+ - -usr/lib/python3.4/
1611+ - -usr/lib/python3/
1612+ - -usr/lib/gcc/
1613+ - -usr/lib/ldscripts/
1614+ - -usr/lib/policykit-1
1615+ - -usr/lib/valgrind/
1616+ - -usr/lib/*/dbus-1.0/
1617+ - -usr/lib/*/girepository-1.0/
1618+ - -usr/lib/*/gconv/
1619+ - -usr/lib/girepository-1.0/
1620+ - -usr/lib/compat-ld/
1621+ - -usr/lib/dbus-1.0/dbus-daemon-launch-helper
1622+ - -usr/lib/dpkg/
1623+ - -lib/udev
1624+ - -lib/systemd
1625+ - -lib/ifupdown
1626+ - -lib/lsb
1627+ - -usr/lib/*.a
1628+ - -usr/lib/*/*.a
1629+ - -usr/lib/*.la
1630+ - -usr/lib/*/*.la
1631+ - -usr/lib/*/NetworkManager/*.la
1632+ - -usr/lib/pppd/*/nm-pppd-plugin.la
1633+ snap:
1634+ - $docs
1635+ - $binaries
1636+ - $configs
1637+ - $rdepends
1638+ - $unwanted
1639
1640=== added directory 'snappy'
1641=== added directory 'snappy/bin'
1642=== added file 'snappy/bin/dhclient'
1643--- snappy/bin/dhclient 1970-01-01 00:00:00 +0000
1644+++ snappy/bin/dhclient 2016-03-30 06:28:14 +0000
1645@@ -0,0 +1,32 @@
1646+#!/bin/bash
1647+
1648+set -e
1649+set -x
1650+
1651+escape() {
1652+ echo "$*" | sed "s/'/'\"'\"'/g; s/.*/'&'/"
1653+}
1654+
1655+run=""
1656+while [ $# -gt 0 ]; do
1657+ case $1 in
1658+ -sf|-pf|-lf|-cf)
1659+ case $2 in
1660+ /*)
1661+ path=$2
1662+ ;;
1663+ *)
1664+ path=$PWD/$2
1665+ ;;
1666+ esac
1667+ run="$run $1 `escape $path`"
1668+ shift 2
1669+ ;;
1670+ *)
1671+ run="$run `escape $1`"
1672+ shift
1673+ ;;
1674+ esac
1675+done
1676+
1677+eval exec $0.real $run
1678
1679=== added file 'snappy/bin/dnsmasq'
1680--- snappy/bin/dnsmasq 1970-01-01 00:00:00 +0000
1681+++ snappy/bin/dnsmasq 2016-03-30 06:28:14 +0000
1682@@ -0,0 +1,41 @@
1683+#!/bin/sh
1684+
1685+set -e
1686+set -x
1687+
1688+# Copy in our dbus policy until snappy has support for this
1689+cp $SNAP_APP_PATH/conf/dnsmasq-dbus.conf \
1690+ /etc/dbus-1/system.d/$SNAP_APP.conf
1691+
1692+mkdir -p $SNAP_APP_DATA_PATH/etc/NetworkManager/dnsmasq.d
1693+mkdir -p $SNAP_APP_DATA_PATH/var/run/NetworkManager
1694+touch $SNAP_APP_DATA_PATH/var/run/NetworkManager/dnsmasq.conf
1695+chmod 0644 $SNAP_APP_DATA_PATH/var/run/NetworkManager/dnsmasq.conf
1696+
1697+TRIPLET=
1698+
1699+case $SNAP_ARCH in
1700+ amd64)
1701+ TRIPLET=x86_64-linux-gnu
1702+ ;;
1703+ *)
1704+ echo "ERROR: Architecture $SNAP_ARCH isn't supported by this snap"
1705+ exit 1
1706+esac
1707+
1708+
1709+# XXX hardcoded architecture
1710+LD_LIBRARY_PATH="$SNAP_APP_PATH/usr/lib/$TRIPLET:$SNAP_APP_PATH/usr/lib:$SNAP_APP_PATH/lib/$TRIPLET" \
1711+$SNAP_APP_PATH/usr/sbin/dnsmasq \
1712+ --no-resolv \
1713+ --keep-in-foreground \
1714+ --no-hosts \
1715+ --listen-address=127.0.1.1 \
1716+ --cache-size=0 \
1717+ --proxy-dnssec \
1718+ --enable-dbus=org.freedesktop.NetworkManager.dnsmasq \
1719+ --conf-file=$SNAP_APP_DATA_PATH/var/run/NetworkManager/dnsmasq.conf \
1720+ --conf-dir=$SNAP_APP_DATA_PATH/etc/NetworkManager/dnsmasq.d \
1721+ "$@"
1722+
1723+rm /etc/dbus-1/system.d/$SNAP_APP.conf
1724
1725=== added file 'snappy/bin/networkmanager'
1726--- snappy/bin/networkmanager 1970-01-01 00:00:00 +0000
1727+++ snappy/bin/networkmanager 2016-03-30 06:28:14 +0000
1728@@ -0,0 +1,37 @@
1729+#!/bin/sh
1730+
1731+set -e
1732+set -x
1733+
1734+# Copy in our dbus policy until snappy has support for this
1735+cp $SNAP_APP_PATH/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf \
1736+ /etc/dbus-1/system.d/$SNAP_APP.conf
1737+
1738+# Create all necessary directories we need at runtime
1739+mkdir -p $SNAP_APP_DATA_PATH/etc/NetworkManager/system-connections
1740+mkdir -p $SNAP_APP_DATA_PATH/run/sendsigs.omit.d
1741+mkdir -p $SNAP_APP_DATA_PATH/var/run
1742+mkdir -p $SNAP_APP_DATA_PATH/var/lib
1743+
1744+TRIPLET=
1745+
1746+case $SNAP_ARCH in
1747+ amd64)
1748+ TRIPLET=x86_64-linux-gnu
1749+ ;;
1750+ *)
1751+ echo "ERROR: Architecture $SNAP_ARCH isn't supported by this snap"
1752+ exit 1
1753+esac
1754+
1755+# TODO drop DEBUG
1756+LD_LIBRARY_PATH="$SNAP_APP_PATH/usr/lib/$TRIPLET:$SNAP_APP_PATH/usr/lib:$SNAP_APP_PATH/usr/lib/$TRIPLET/NetworkManager:$SNAP_APP_PATH/usr/lib/NetworkManager:$SNAP_APP_PATH/lib/$TRIPLET" \
1757+$SNAP_APP_PATH/usr/sbin/NetworkManager \
1758+ --state-file=$SNAP_APP_DATA_PATH/NetworkManager.state \
1759+ --config-dir=$SNAP_APP_PATH/etc/NetworkManager \
1760+ --config=$SNAP_APP_PATH/etc/NetworkManager/NetworkManager.conf \
1761+ --log-level=DEBUG \
1762+ --no-daemon \
1763+ "$@"
1764+
1765+rm /etc/dbus-1/system.d/$SNAP_APP.conf
1766
1767=== added directory 'snappy/conf'
1768=== added file 'snappy/conf/NetworkManager.conf'
1769--- snappy/conf/NetworkManager.conf 1970-01-01 00:00:00 +0000
1770+++ snappy/conf/NetworkManager.conf 2016-03-30 06:28:14 +0000
1771@@ -0,0 +1,6 @@
1772+[main]
1773+plugins=ifupdown,keyfile
1774+dns=dnsmasq
1775+
1776+[ifupdown]
1777+managed=false
1778
1779=== added file 'snappy/conf/dnsmasq-dbus.conf'
1780--- snappy/conf/dnsmasq-dbus.conf 1970-01-01 00:00:00 +0000
1781+++ snappy/conf/dnsmasq-dbus.conf 2016-03-30 06:28:14 +0000
1782@@ -0,0 +1,10 @@
1783+<!DOCTYPE busconfig PUBLIC
1784+ "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
1785+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
1786+<busconfig>
1787+ <policy user="root">
1788+ <allow own="org.freedesktop.NetworkManager.dnsmasq"/>
1789+ <allow send_destination="org.freedesktop.NetworkManager.dnsmasq"/>
1790+ </policy>
1791+</busconfig>
1792+
1793
1794=== added file 'snappy/conf/org.freedesktop.NetworkManager.conf'
1795--- snappy/conf/org.freedesktop.NetworkManager.conf 1970-01-01 00:00:00 +0000
1796+++ snappy/conf/org.freedesktop.NetworkManager.conf 2016-03-30 06:28:14 +0000
1797@@ -0,0 +1,152 @@
1798+<!DOCTYPE busconfig PUBLIC
1799+ "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
1800+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
1801+<busconfig>
1802+ <policy user="root">
1803+ <allow own="org.freedesktop.NetworkManager"/>
1804+ <allow send_destination="org.freedesktop.NetworkManager"/>
1805+
1806+ <allow send_destination="org.freedesktop.NetworkManager"
1807+ send_interface="org.freedesktop.NetworkManager.PPP"/>
1808+
1809+ <allow send_interface="org.freedesktop.NetworkManager.SecretAgent"/>
1810+
1811+ <!-- Allow NM to talk to known VPN plugins; due to a bug in
1812+ the D-Bus daemon, when a plugin is installed and the user
1813+ immediately tries to use it, the VPN plugin's rules aren't
1814+ always loaded into dbus-daemon. Those rules allow NM to
1815+ talk to the plugin. Oops. Work around that by explicitly
1816+ allowing NM to talk to VPN plugins here.
1817+ -->
1818+ <allow send_destination="org.freedesktop.NetworkManager.openconnect"/>
1819+ <allow send_destination="org.freedesktop.NetworkManager.openswan"/>
1820+ <allow send_destination="org.freedesktop.NetworkManager.openvpn"/>
1821+ <allow send_destination="org.freedesktop.NetworkManager.pptp"/>
1822+ <allow send_destination="org.freedesktop.NetworkManager.vpnc"/>
1823+ <allow send_destination="org.freedesktop.NetworkManager.ssh"/>
1824+ <allow send_destination="org.freedesktop.NetworkManager.iodine"/>
1825+
1826+ <!-- Allow the custom name for the dnsmasq instance spawned by NM
1827+ from the dns dnsmasq plugin to own it's dbus name, and for
1828+ messages to be sent to it.
1829+ -->
1830+ <allow own="org.freedesktop.NetworkManager.dnsmasq"/>
1831+ <allow send_destination="org.freedesktop.NetworkManager.dnsmasq"/>
1832+ </policy>
1833+ <policy user="whoopsie">
1834+ <allow send_destination="org.freedesktop.NetworkManager"/>
1835+
1836+ <allow send_destination="org.freedesktop.NetworkManager"
1837+ send_interface="org.freedesktop.DBus.Introspectable"/>
1838+
1839+ <allow send_destination="org.freedesktop.NetworkManager"
1840+ send_interface="org.freedesktop.DBus.Properties"/>
1841+
1842+ <allow send_destination="org.freedesktop.NetworkManager"
1843+ send_interface="org.freedesktop.NetworkManager"/>
1844+
1845+ <allow send_destination="org.freedesktop.NetworkManager"
1846+ send_interface="org.freedesktop.NetworkManager.Connection.Active"/>
1847+
1848+ <allow send_destination="org.freedesktop.NetworkManager"
1849+ send_interface="org.freedesktop.NetworkManager.Device"/>
1850+ </policy>
1851+ <policy context="default">
1852+ <deny own="org.freedesktop.NetworkManager"/>
1853+
1854+ <deny send_destination="org.freedesktop.NetworkManager"/>
1855+
1856+ <!-- Basic D-Bus API stuff -->
1857+ <allow send_destination="org.freedesktop.NetworkManager"
1858+ send_interface="org.freedesktop.DBus.Introspectable"/>
1859+ <allow send_destination="org.freedesktop.NetworkManager"
1860+ send_interface="org.freedesktop.DBus.Properties"/>
1861+
1862+ <!-- Devices (read-only properties, no methods) -->
1863+ <allow send_destination="org.freedesktop.NetworkManager"
1864+ send_interface="org.freedesktop.NetworkManager.Device.Adsl"/>
1865+ <allow send_destination="org.freedesktop.NetworkManager"
1866+ send_interface="org.freedesktop.NetworkManager.Device.Bond"/>
1867+ <allow send_destination="org.freedesktop.NetworkManager"
1868+ send_interface="org.freedesktop.NetworkManager.Device.Bridge"/>
1869+ <allow send_destination="org.freedesktop.NetworkManager"
1870+ send_interface="org.freedesktop.NetworkManager.Device.Bluetooth"/>
1871+ <allow send_destination="org.freedesktop.NetworkManager"
1872+ send_interface="org.freedesktop.NetworkManager.Device.Wired"/>
1873+ <allow send_destination="org.freedesktop.NetworkManager"
1874+ send_interface="org.freedesktop.NetworkManager.Device.Generic"/>
1875+ <allow send_destination="org.freedesktop.NetworkManager"
1876+ send_interface="org.freedesktop.NetworkManager.Device.Gre"/>
1877+ <allow send_destination="org.freedesktop.NetworkManager"
1878+ send_interface="org.freedesktop.NetworkManager.Device.Infiniband"/>
1879+ <allow send_destination="org.freedesktop.NetworkManager"
1880+ send_interface="org.freedesktop.NetworkManager.Device.Macvlan"/>
1881+ <allow send_destination="org.freedesktop.NetworkManager"
1882+ send_interface="org.freedesktop.NetworkManager.Device.Modem"/>
1883+ <allow send_destination="org.freedesktop.NetworkManager"
1884+ send_interface="org.freedesktop.NetworkManager.Device.OlpcMesh"/>
1885+ <allow send_destination="org.freedesktop.NetworkManager"
1886+ send_interface="org.freedesktop.NetworkManager.Device.Team"/>
1887+ <allow send_destination="org.freedesktop.NetworkManager"
1888+ send_interface="org.freedesktop.NetworkManager.Device.Tun"/>
1889+ <allow send_destination="org.freedesktop.NetworkManager"
1890+ send_interface="org.freedesktop.NetworkManager.Device.Veth"/>
1891+ <allow send_destination="org.freedesktop.NetworkManager"
1892+ send_interface="org.freedesktop.NetworkManager.Device.Vlan"/>
1893+ <allow send_destination="org.freedesktop.NetworkManager"
1894+ send_interface="org.freedesktop.NetworkManager.WiMax.Nsp"/>
1895+ <allow send_destination="org.freedesktop.NetworkManager"
1896+ send_interface="org.freedesktop.NetworkManager.AccessPoint"/>
1897+
1898+ <!-- Devices (read-only, no security required) -->
1899+ <allow send_destination="org.freedesktop.NetworkManager"
1900+ send_interface="org.freedesktop.NetworkManager.Device.WiMax"/>
1901+
1902+ <!-- Devices (read/write, secured with PolicyKit) -->
1903+ <allow send_destination="org.freedesktop.NetworkManager"
1904+ send_interface="org.freedesktop.NetworkManager.Device.Wireless"/>
1905+ <allow send_destination="org.freedesktop.NetworkManager"
1906+ send_interface="org.freedesktop.NetworkManager.Device"/>
1907+
1908+ <!-- Core stuff (read-only properties, no methods) -->
1909+ <allow send_destination="org.freedesktop.NetworkManager"
1910+ send_interface="org.freedesktop.NetworkManager.Connection.Active"/>
1911+ <allow send_destination="org.freedesktop.NetworkManager"
1912+ send_interface="org.freedesktop.NetworkManager.DHCP4Config"/>
1913+ <allow send_destination="org.freedesktop.NetworkManager"
1914+ send_interface="org.freedesktop.NetworkManager.DHCP6Config"/>
1915+ <allow send_destination="org.freedesktop.NetworkManager"
1916+ send_interface="org.freedesktop.NetworkManager.IP4Config"/>
1917+ <allow send_destination="org.freedesktop.NetworkManager"
1918+ send_interface="org.freedesktop.NetworkManager.IP6Config"/>
1919+ <allow send_destination="org.freedesktop.NetworkManager"
1920+ send_interface="org.freedesktop.NetworkManager.VPN.Connection"/>
1921+
1922+ <!-- Core stuff (read/write, secured with PolicyKit) -->
1923+ <allow send_destination="org.freedesktop.NetworkManager"
1924+ send_interface="org.freedesktop.NetworkManager"/>
1925+ <allow send_destination="org.freedesktop.NetworkManager"
1926+ send_interface="org.freedesktop.NetworkManager.Settings"/>
1927+ <allow send_destination="org.freedesktop.NetworkManager"
1928+ send_interface="org.freedesktop.NetworkManager.Settings.Connection"/>
1929+
1930+ <!-- Agents; secured with PolicyKit. Any process can talk to
1931+ the AgentManager API, but only NetworkManager can talk
1932+ to the agents themselves. -->
1933+ <allow send_destination="org.freedesktop.NetworkManager"
1934+ send_interface="org.freedesktop.NetworkManager.AgentManager"/>
1935+ <deny send_interface="org.freedesktop.NetworkManager.SecretAgent"/>
1936+
1937+ <!-- Root-only functions -->
1938+ <deny send_interface="org.freedesktop.NetworkManager" send_member="SetLogging"/>
1939+ <deny send_interface="org.freedesktop.NetworkManager" send_member="Sleep"/>
1940+ <deny send_interface="org.freedesktop.NetworkManager.Settings" send_member="LoadConnections"/>
1941+ <deny send_interface="org.freedesktop.NetworkManager.Settings" send_member="ReloadConnections"/>
1942+ <deny send_interface="org.freedesktop.NetworkManager.VPN.Plugin"/>
1943+ <deny send_interface="org.freedesktop.NetworkManager.PPP"/>
1944+
1945+ <deny own="org.freedesktop.NetworkManager.dnsmasq"/>
1946+ <deny send_destination="org.freedesktop.NetworkManager.dnsmasq"/>
1947+ </policy>
1948+</busconfig>
1949+
1950
1951=== added file 'snappy/icon.svg'
1952--- snappy/icon.svg 1970-01-01 00:00:00 +0000
1953+++ snappy/icon.svg 2016-03-30 06:28:14 +0000
1954@@ -0,0 +1,2466 @@
1955+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1956+<!-- Created with Inkscape (http://www.inkscape.org/) -->
1957+<svg
1958+ xmlns:dc="http://purl.org/dc/elements/1.1/"
1959+ xmlns:cc="http://web.resource.org/cc/"
1960+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
1961+ xmlns:svg="http://www.w3.org/2000/svg"
1962+ xmlns="http://www.w3.org/2000/svg"
1963+ xmlns:xlink="http://www.w3.org/1999/xlink"
1964+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
1965+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
1966+ width="48.000000px"
1967+ height="48.000000px"
1968+ id="svg2327"
1969+ sodipodi:version="0.32"
1970+ inkscape:version="0.45"
1971+ sodipodi:docbase="/home/dobey/Projects/gnome-icon-theme/scalable/status"
1972+ sodipodi:docname="network-idle.svg"
1973+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
1974+ <defs
1975+ id="defs3">
1976+ <linearGradient
1977+ id="linearGradient7670">
1978+ <stop
1979+ style="stop-color:#3465a4;stop-opacity:1"
1980+ offset="0"
1981+ id="stop7672" />
1982+ <stop
1983+ style="stop-color:#204a87;stop-opacity:1"
1984+ offset="1"
1985+ id="stop7674" />
1986+ </linearGradient>
1987+ <linearGradient
1988+ inkscape:collect="always"
1989+ id="linearGradient2307">
1990+ <stop
1991+ style="stop-color:#5a7aa4;stop-opacity:1;"
1992+ offset="0"
1993+ id="stop2309" />
1994+ <stop
1995+ style="stop-color:#5a7aa4;stop-opacity:0;"
1996+ offset="1"
1997+ id="stop2311" />
1998+ </linearGradient>
1999+ <linearGradient
2000+ id="linearGradient11400">
2001+ <stop
2002+ id="stop11402"
2003+ offset="0"
2004+ style="stop-color:#000000;stop-opacity:1;" />
2005+ <stop
2006+ id="stop11404"
2007+ offset="1"
2008+ style="stop-color:#000000;stop-opacity:0;" />
2009+ </linearGradient>
2010+ <linearGradient
2011+ id="linearGradient6240"
2012+ inkscape:collect="always">
2013+ <stop
2014+ id="stop6242"
2015+ offset="0"
2016+ style="stop-color:#ffffff;stop-opacity:1;" />
2017+ <stop
2018+ id="stop6244"
2019+ offset="1"
2020+ style="stop-color:#ffffff;stop-opacity:0;" />
2021+ </linearGradient>
2022+ <linearGradient
2023+ id="linearGradient5137">
2024+ <stop
2025+ id="stop5139"
2026+ offset="0"
2027+ style="stop-color:#eeeeec;stop-opacity:1;" />
2028+ <stop
2029+ id="stop5141"
2030+ offset="1"
2031+ style="stop-color:#e6e6e3;stop-opacity:1;" />
2032+ </linearGradient>
2033+ <linearGradient
2034+ id="linearGradient5225"
2035+ inkscape:collect="always">
2036+ <stop
2037+ id="stop5227"
2038+ offset="0"
2039+ style="stop-color:black;stop-opacity:1;" />
2040+ <stop
2041+ id="stop5229"
2042+ offset="1"
2043+ style="stop-color:black;stop-opacity:0;" />
2044+ </linearGradient>
2045+ <linearGradient
2046+ id="linearGradient3899"
2047+ inkscape:collect="always">
2048+ <stop
2049+ id="stop3901"
2050+ offset="0"
2051+ style="stop-color:#eeeeec" />
2052+ <stop
2053+ id="stop3903"
2054+ offset="1"
2055+ style="stop-color:#d3d7cf" />
2056+ </linearGradient>
2057+ <linearGradient
2058+ id="linearGradient3907">
2059+ <stop
2060+ id="stop3909"
2061+ offset="0"
2062+ style="stop-color:#ffffff;stop-opacity:1;" />
2063+ <stop
2064+ id="stop3911"
2065+ offset="1"
2066+ style="stop-color:#ffffff;stop-opacity:0;" />
2067+ </linearGradient>
2068+ <linearGradient
2069+ id="linearGradient4196">
2070+ <stop
2071+ id="stop4198"
2072+ offset="0"
2073+ style="stop-color:black;stop-opacity:1;" />
2074+ <stop
2075+ id="stop4200"
2076+ offset="1"
2077+ style="stop-color:black;stop-opacity:0;" />
2078+ </linearGradient>
2079+ <linearGradient
2080+ inkscape:collect="always"
2081+ id="linearGradient5060">
2082+ <stop
2083+ style="stop-color:black;stop-opacity:1;"
2084+ offset="0"
2085+ id="stop5062" />
2086+ <stop
2087+ style="stop-color:black;stop-opacity:0;"
2088+ offset="1"
2089+ id="stop5064" />
2090+ </linearGradient>
2091+ <radialGradient
2092+ r="19.5"
2093+ fy="47.045319"
2094+ fx="20.913568"
2095+ cy="47.045319"
2096+ cx="20.913568"
2097+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
2098+ gradientUnits="userSpaceOnUse"
2099+ id="radialGradient3304"
2100+ xlink:href="#linearGradient3907"
2101+ inkscape:collect="always" />
2102+ <radialGradient
2103+ r="19.5"
2104+ fy="47.045319"
2105+ fx="20.913568"
2106+ cy="47.045319"
2107+ cx="20.913568"
2108+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
2109+ gradientUnits="userSpaceOnUse"
2110+ id="radialGradient3302"
2111+ xlink:href="#linearGradient3907"
2112+ inkscape:collect="always" />
2113+ <radialGradient
2114+ r="19.5"
2115+ fy="47.045319"
2116+ fx="20.913568"
2117+ cy="47.045319"
2118+ cx="20.913568"
2119+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
2120+ gradientUnits="userSpaceOnUse"
2121+ id="radialGradient3300"
2122+ xlink:href="#linearGradient3907"
2123+ inkscape:collect="always" />
2124+ <radialGradient
2125+ r="19.5"
2126+ fy="47.045319"
2127+ fx="20.913568"
2128+ cy="47.045319"
2129+ cx="20.913568"
2130+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
2131+ gradientUnits="userSpaceOnUse"
2132+ id="radialGradient3298"
2133+ xlink:href="#linearGradient3907"
2134+ inkscape:collect="always" />
2135+ <radialGradient
2136+ r="19.5"
2137+ fy="47.045319"
2138+ fx="20.913568"
2139+ cy="47.045319"
2140+ cx="20.913568"
2141+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
2142+ gradientUnits="userSpaceOnUse"
2143+ id="radialGradient3296"
2144+ xlink:href="#linearGradient3907"
2145+ inkscape:collect="always" />
2146+ <radialGradient
2147+ r="19.5"
2148+ fy="47.045319"
2149+ fx="20.913568"
2150+ cy="47.045319"
2151+ cx="20.913568"
2152+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
2153+ gradientUnits="userSpaceOnUse"
2154+ id="radialGradient3294"
2155+ xlink:href="#linearGradient3907"
2156+ inkscape:collect="always" />
2157+ <radialGradient
2158+ r="19.5"
2159+ fy="47.045319"
2160+ fx="20.913568"
2161+ cy="47.045319"
2162+ cx="20.913568"
2163+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
2164+ gradientUnits="userSpaceOnUse"
2165+ id="radialGradient3292"
2166+ xlink:href="#linearGradient3907"
2167+ inkscape:collect="always" />
2168+ <radialGradient
2169+ r="19.5"
2170+ fy="47.045319"
2171+ fx="20.913568"
2172+ cy="47.045319"
2173+ cx="20.913568"
2174+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
2175+ gradientUnits="userSpaceOnUse"
2176+ id="radialGradient3276"
2177+ xlink:href="#linearGradient3907"
2178+ inkscape:collect="always" />
2179+ <radialGradient
2180+ r="19.5"
2181+ fy="47.045319"
2182+ fx="20.913568"
2183+ cy="47.045319"
2184+ cx="20.913568"
2185+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
2186+ gradientUnits="userSpaceOnUse"
2187+ id="radialGradient3274"
2188+ xlink:href="#linearGradient3907"
2189+ inkscape:collect="always" />
2190+ <radialGradient
2191+ r="19.5"
2192+ fy="47.045319"
2193+ fx="20.913568"
2194+ cy="47.045319"
2195+ cx="20.913568"
2196+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
2197+ gradientUnits="userSpaceOnUse"
2198+ id="radialGradient3272"
2199+ xlink:href="#linearGradient3907"
2200+ inkscape:collect="always" />
2201+ <radialGradient
2202+ r="19.5"
2203+ fy="47.045319"
2204+ fx="20.913568"
2205+ cy="47.045319"
2206+ cx="20.913568"
2207+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
2208+ gradientUnits="userSpaceOnUse"
2209+ id="radialGradient3270"
2210+ xlink:href="#linearGradient3907"
2211+ inkscape:collect="always" />
2212+ <radialGradient
2213+ r="19.5"
2214+ fy="47.045319"
2215+ fx="20.913568"
2216+ cy="47.045319"
2217+ cx="20.913568"
2218+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
2219+ gradientUnits="userSpaceOnUse"
2220+ id="radialGradient3268"
2221+ xlink:href="#linearGradient3907"
2222+ inkscape:collect="always" />
2223+ <radialGradient
2224+ r="19.5"
2225+ fy="47.045319"
2226+ fx="20.913568"
2227+ cy="47.045319"
2228+ cx="20.913568"
2229+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
2230+ gradientUnits="userSpaceOnUse"
2231+ id="radialGradient3266"
2232+ xlink:href="#linearGradient3907"
2233+ inkscape:collect="always" />
2234+ <radialGradient
2235+ r="19.5"
2236+ fy="47.045319"
2237+ fx="20.913568"
2238+ cy="47.045319"
2239+ cx="20.913568"
2240+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
2241+ gradientUnits="userSpaceOnUse"
2242+ id="radialGradient3264"
2243+ xlink:href="#linearGradient3907"
2244+ inkscape:collect="always" />
2245+ <radialGradient
2246+ r="19.5"
2247+ fy="47.045319"
2248+ fx="20.913568"
2249+ cy="47.045319"
2250+ cx="20.913568"
2251+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2252+ gradientUnits="userSpaceOnUse"
2253+ id="radialGradient3155"
2254+ xlink:href="#linearGradient3907"
2255+ inkscape:collect="always" />
2256+ <radialGradient
2257+ r="19.5"
2258+ fy="47.045319"
2259+ fx="20.913568"
2260+ cy="47.045319"
2261+ cx="20.913568"
2262+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2263+ gradientUnits="userSpaceOnUse"
2264+ id="radialGradient3158"
2265+ xlink:href="#linearGradient3907"
2266+ inkscape:collect="always" />
2267+ <radialGradient
2268+ r="19.5"
2269+ fy="47.045319"
2270+ fx="20.913568"
2271+ cy="47.045319"
2272+ cx="20.913568"
2273+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2274+ gradientUnits="userSpaceOnUse"
2275+ id="radialGradient3161"
2276+ xlink:href="#linearGradient3907"
2277+ inkscape:collect="always" />
2278+ <radialGradient
2279+ r="19.5"
2280+ fy="47.045319"
2281+ fx="20.913568"
2282+ cy="47.045319"
2283+ cx="20.913568"
2284+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2285+ gradientUnits="userSpaceOnUse"
2286+ id="radialGradient3164"
2287+ xlink:href="#linearGradient3907"
2288+ inkscape:collect="always" />
2289+ <radialGradient
2290+ r="19.5"
2291+ fy="47.045319"
2292+ fx="20.913568"
2293+ cy="47.045319"
2294+ cx="20.913568"
2295+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2296+ gradientUnits="userSpaceOnUse"
2297+ id="radialGradient3167"
2298+ xlink:href="#linearGradient3907"
2299+ inkscape:collect="always" />
2300+ <radialGradient
2301+ r="19.5"
2302+ fy="47.045319"
2303+ fx="20.913568"
2304+ cy="47.045319"
2305+ cx="20.913568"
2306+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2307+ gradientUnits="userSpaceOnUse"
2308+ id="radialGradient3170"
2309+ xlink:href="#linearGradient3907"
2310+ inkscape:collect="always" />
2311+ <radialGradient
2312+ r="19.5"
2313+ fy="47.045319"
2314+ fx="20.913568"
2315+ cy="47.045319"
2316+ cx="20.913568"
2317+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2318+ gradientUnits="userSpaceOnUse"
2319+ id="radialGradient3173"
2320+ xlink:href="#linearGradient3907"
2321+ inkscape:collect="always" />
2322+ <radialGradient
2323+ r="19.5"
2324+ fy="47.045319"
2325+ fx="20.913568"
2326+ cy="47.045319"
2327+ cx="20.913568"
2328+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2329+ gradientUnits="userSpaceOnUse"
2330+ id="radialGradient3176"
2331+ xlink:href="#linearGradient3907"
2332+ inkscape:collect="always" />
2333+ <radialGradient
2334+ r="19.5"
2335+ fy="47.045319"
2336+ fx="20.913568"
2337+ cy="47.045319"
2338+ cx="20.913568"
2339+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2340+ gradientUnits="userSpaceOnUse"
2341+ id="radialGradient3182"
2342+ xlink:href="#linearGradient3907"
2343+ inkscape:collect="always" />
2344+ <radialGradient
2345+ r="19.5"
2346+ fy="47.045319"
2347+ fx="20.913568"
2348+ cy="47.045319"
2349+ cx="20.913568"
2350+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2351+ gradientUnits="userSpaceOnUse"
2352+ id="radialGradient3185"
2353+ xlink:href="#linearGradient3907"
2354+ inkscape:collect="always" />
2355+ <radialGradient
2356+ r="19.5"
2357+ fy="47.045319"
2358+ fx="20.913568"
2359+ cy="47.045319"
2360+ cx="20.913568"
2361+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2362+ gradientUnits="userSpaceOnUse"
2363+ id="radialGradient3188"
2364+ xlink:href="#linearGradient3907"
2365+ inkscape:collect="always" />
2366+ <radialGradient
2367+ r="19.5"
2368+ fy="47.045319"
2369+ fx="20.913568"
2370+ cy="47.045319"
2371+ cx="20.913568"
2372+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2373+ gradientUnits="userSpaceOnUse"
2374+ id="radialGradient3191"
2375+ xlink:href="#linearGradient3907"
2376+ inkscape:collect="always" />
2377+ <radialGradient
2378+ r="19.5"
2379+ fy="47.045319"
2380+ fx="20.913568"
2381+ cy="47.045319"
2382+ cx="20.913568"
2383+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2384+ gradientUnits="userSpaceOnUse"
2385+ id="radialGradient3194"
2386+ xlink:href="#linearGradient3907"
2387+ inkscape:collect="always" />
2388+ <radialGradient
2389+ r="19.5"
2390+ fy="47.045319"
2391+ fx="20.913568"
2392+ cy="47.045319"
2393+ cx="20.913568"
2394+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2395+ gradientUnits="userSpaceOnUse"
2396+ id="radialGradient3197"
2397+ xlink:href="#linearGradient3907"
2398+ inkscape:collect="always" />
2399+ <radialGradient
2400+ r="19.5"
2401+ fy="47.045319"
2402+ fx="20.913568"
2403+ cy="47.045319"
2404+ cx="20.913568"
2405+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2406+ gradientUnits="userSpaceOnUse"
2407+ id="radialGradient3200"
2408+ xlink:href="#linearGradient3907"
2409+ inkscape:collect="always" />
2410+ <radialGradient
2411+ r="19.5"
2412+ fy="47.045319"
2413+ fx="20.913568"
2414+ cy="47.045319"
2415+ cx="20.913568"
2416+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2417+ gradientUnits="userSpaceOnUse"
2418+ id="radialGradient3203"
2419+ xlink:href="#linearGradient3907"
2420+ inkscape:collect="always" />
2421+ <radialGradient
2422+ r="19.5"
2423+ fy="47.045319"
2424+ fx="20.913568"
2425+ cy="47.045319"
2426+ cx="20.913568"
2427+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2428+ gradientUnits="userSpaceOnUse"
2429+ id="radialGradient3206"
2430+ xlink:href="#linearGradient3907"
2431+ inkscape:collect="always" />
2432+ <radialGradient
2433+ r="19.5"
2434+ fy="47.045319"
2435+ fx="20.913568"
2436+ cy="47.045319"
2437+ cx="20.913568"
2438+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2439+ gradientUnits="userSpaceOnUse"
2440+ id="radialGradient3209"
2441+ xlink:href="#linearGradient3907"
2442+ inkscape:collect="always" />
2443+ <radialGradient
2444+ r="19.5"
2445+ fy="47.045319"
2446+ fx="20.913568"
2447+ cy="47.045319"
2448+ cx="20.913568"
2449+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2450+ gradientUnits="userSpaceOnUse"
2451+ id="radialGradient3212"
2452+ xlink:href="#linearGradient3907"
2453+ inkscape:collect="always" />
2454+ <radialGradient
2455+ r="19.5"
2456+ fy="47.045319"
2457+ fx="20.913568"
2458+ cy="47.045319"
2459+ cx="20.913568"
2460+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2461+ gradientUnits="userSpaceOnUse"
2462+ id="radialGradient3215"
2463+ xlink:href="#linearGradient3907"
2464+ inkscape:collect="always" />
2465+ <radialGradient
2466+ r="19.5"
2467+ fy="47.045319"
2468+ fx="20.913568"
2469+ cy="47.045319"
2470+ cx="20.913568"
2471+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2472+ gradientUnits="userSpaceOnUse"
2473+ id="radialGradient3218"
2474+ xlink:href="#linearGradient3907"
2475+ inkscape:collect="always" />
2476+ <radialGradient
2477+ r="19.5"
2478+ fy="47.045319"
2479+ fx="20.913568"
2480+ cy="47.045319"
2481+ cx="20.913568"
2482+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2483+ gradientUnits="userSpaceOnUse"
2484+ id="radialGradient3221"
2485+ xlink:href="#linearGradient3907"
2486+ inkscape:collect="always" />
2487+ <radialGradient
2488+ r="19.5"
2489+ fy="47.045319"
2490+ fx="20.913568"
2491+ cy="47.045319"
2492+ cx="20.913568"
2493+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2494+ gradientUnits="userSpaceOnUse"
2495+ id="radialGradient3224"
2496+ xlink:href="#linearGradient3907"
2497+ inkscape:collect="always" />
2498+ <radialGradient
2499+ r="19.5"
2500+ fy="47.045319"
2501+ fx="20.913568"
2502+ cy="47.045319"
2503+ cx="20.913568"
2504+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2505+ gradientUnits="userSpaceOnUse"
2506+ id="radialGradient3230"
2507+ xlink:href="#linearGradient3907"
2508+ inkscape:collect="always" />
2509+ <radialGradient
2510+ r="19.5"
2511+ fy="47.045319"
2512+ fx="20.913568"
2513+ cy="47.045319"
2514+ cx="20.913568"
2515+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2516+ gradientUnits="userSpaceOnUse"
2517+ id="radialGradient3233"
2518+ xlink:href="#linearGradient3907"
2519+ inkscape:collect="always" />
2520+ <radialGradient
2521+ r="19.5"
2522+ fy="47.045319"
2523+ fx="20.913568"
2524+ cy="47.045319"
2525+ cx="20.913568"
2526+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2527+ gradientUnits="userSpaceOnUse"
2528+ id="radialGradient3236"
2529+ xlink:href="#linearGradient3907"
2530+ inkscape:collect="always" />
2531+ <radialGradient
2532+ r="19.5"
2533+ fy="47.045319"
2534+ fx="20.913568"
2535+ cy="47.045319"
2536+ cx="20.913568"
2537+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2538+ gradientUnits="userSpaceOnUse"
2539+ id="radialGradient3239"
2540+ xlink:href="#linearGradient3907"
2541+ inkscape:collect="always" />
2542+ <radialGradient
2543+ r="19.5"
2544+ fy="47.045319"
2545+ fx="20.913568"
2546+ cy="47.045319"
2547+ cx="20.913568"
2548+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2549+ gradientUnits="userSpaceOnUse"
2550+ id="radialGradient3242"
2551+ xlink:href="#linearGradient3907"
2552+ inkscape:collect="always" />
2553+ <radialGradient
2554+ r="19.5"
2555+ fy="47.045319"
2556+ fx="20.913568"
2557+ cy="47.045319"
2558+ cx="20.913568"
2559+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2560+ gradientUnits="userSpaceOnUse"
2561+ id="radialGradient3245"
2562+ xlink:href="#linearGradient3907"
2563+ inkscape:collect="always" />
2564+ <radialGradient
2565+ r="19.5"
2566+ fy="47.045319"
2567+ fx="20.913568"
2568+ cy="47.045319"
2569+ cx="20.913568"
2570+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2571+ gradientUnits="userSpaceOnUse"
2572+ id="radialGradient3248"
2573+ xlink:href="#linearGradient3907"
2574+ inkscape:collect="always" />
2575+ <linearGradient
2576+ gradientTransform="matrix(0.647995,0,0,0.707655,0.734249,-1.447571)"
2577+ gradientUnits="userSpaceOnUse"
2578+ y2="37.9375"
2579+ x2="29.125"
2580+ y1="46.029419"
2581+ x1="29.5"
2582+ id="linearGradient3905"
2583+ xlink:href="#linearGradient3899"
2584+ inkscape:collect="always" />
2585+ <radialGradient
2586+ r="117.14286"
2587+ fy="486.64789"
2588+ fx="605.71429"
2589+ cy="486.64789"
2590+ cx="605.71429"
2591+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
2592+ gradientUnits="userSpaceOnUse"
2593+ id="radialGradient2309"
2594+ xlink:href="#linearGradient5060"
2595+ inkscape:collect="always" />
2596+ <radialGradient
2597+ r="117.14286"
2598+ fy="486.64789"
2599+ fx="605.71429"
2600+ cy="486.64789"
2601+ cx="605.71429"
2602+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
2603+ gradientUnits="userSpaceOnUse"
2604+ id="radialGradient2311"
2605+ xlink:href="#linearGradient5060"
2606+ inkscape:collect="always" />
2607+ <linearGradient
2608+ gradientTransform="matrix(0.664512,0,0,0.651253,9.569506e-2,-1.210023)"
2609+ gradientUnits="userSpaceOnUse"
2610+ y2="26.039215"
2611+ x2="20.156862"
2612+ y1="5.0996137"
2613+ x1="20.156862"
2614+ id="linearGradient6246"
2615+ xlink:href="#linearGradient6240"
2616+ inkscape:collect="always" />
2617+ <radialGradient
2618+ gradientUnits="userSpaceOnUse"
2619+ gradientTransform="matrix(0.836315,0,0,0.514216,-4.024721,-3.259613e-2)"
2620+ r="19.00016"
2621+ fy="32.997028"
2622+ fx="24.006104"
2623+ cy="32.997028"
2624+ cx="24.006104"
2625+ id="radialGradient5239"
2626+ xlink:href="#linearGradient7670"
2627+ inkscape:collect="always" />
2628+ <linearGradient
2629+ gradientTransform="matrix(0.648248,0,0,0.644253,0.433189,-0.740991)"
2630+ y2="38.876041"
2631+ x2="39.904388"
2632+ y1="6.3760414"
2633+ x1="17.247635"
2634+ gradientUnits="userSpaceOnUse"
2635+ id="linearGradient5147"
2636+ xlink:href="#linearGradient5137"
2637+ inkscape:collect="always" />
2638+ <linearGradient
2639+ y2="43.82579"
2640+ x2="31.86105"
2641+ y1="37.842293"
2642+ x1="31.743324"
2643+ gradientTransform="matrix(1,0,0,0.992781,0,-2.718035)"
2644+ gradientUnits="userSpaceOnUse"
2645+ id="linearGradient2308"
2646+ xlink:href="#linearGradient5137"
2647+ inkscape:collect="always" />
2648+ <linearGradient
2649+ y2="40.219608"
2650+ x2="23.529411"
2651+ y1="34.572548"
2652+ x1="23.154902"
2653+ gradientTransform="matrix(1.004187,0,0,1,-0.12454,-3.011765)"
2654+ gradientUnits="userSpaceOnUse"
2655+ id="linearGradient2310"
2656+ xlink:href="#linearGradient11400"
2657+ inkscape:collect="always" />
2658+ <linearGradient
2659+ gradientTransform="matrix(0.654255,0,0,0.654672,-0.481383,0.690637)"
2660+ gradientUnits="userSpaceOnUse"
2661+ y2="33.637787"
2662+ x2="37.295498"
2663+ y1="38.267769"
2664+ x1="37.484837"
2665+ id="linearGradient4202"
2666+ xlink:href="#linearGradient4196"
2667+ inkscape:collect="always" />
2668+ <radialGradient
2669+ r="23.75956"
2670+ fy="42.6875"
2671+ fx="23.9375"
2672+ cy="42.6875"
2673+ cx="23.9375"
2674+ gradientTransform="matrix(1,0,0,0.24763,0,32.1168)"
2675+ gradientUnits="userSpaceOnUse"
2676+ id="radialGradient2313"
2677+ xlink:href="#linearGradient5225"
2678+ inkscape:collect="always" />
2679+ <linearGradient
2680+ inkscape:collect="always"
2681+ xlink:href="#linearGradient2307"
2682+ id="linearGradient5478"
2683+ gradientTransform="scale(1.673466,0.597562)"
2684+ x1="-931.7503"
2685+ y1="148.07116"
2686+ x2="-131.23588"
2687+ y2="148.07116"
2688+ gradientUnits="userSpaceOnUse" />
2689+ <radialGradient
2690+ inkscape:collect="always"
2691+ xlink:href="#linearGradient5225"
2692+ id="radialGradient5620"
2693+ gradientUnits="userSpaceOnUse"
2694+ gradientTransform="matrix(1,0,0,0.24763,0,32.1168)"
2695+ cx="23.9375"
2696+ cy="42.6875"
2697+ fx="23.9375"
2698+ fy="42.6875"
2699+ r="23.75956" />
2700+ <linearGradient
2701+ inkscape:collect="always"
2702+ xlink:href="#linearGradient4196"
2703+ id="linearGradient5622"
2704+ gradientUnits="userSpaceOnUse"
2705+ gradientTransform="matrix(0.654255,0,0,0.654672,-0.481383,0.690637)"
2706+ x1="37.484837"
2707+ y1="38.267769"
2708+ x2="37.295498"
2709+ y2="33.637787" />
2710+ <linearGradient
2711+ inkscape:collect="always"
2712+ xlink:href="#linearGradient5137"
2713+ id="linearGradient5624"
2714+ gradientUnits="userSpaceOnUse"
2715+ gradientTransform="matrix(1,0,0,0.992781,0,-2.718035)"
2716+ x1="31.743324"
2717+ y1="37.842293"
2718+ x2="31.86105"
2719+ y2="43.82579" />
2720+ <linearGradient
2721+ inkscape:collect="always"
2722+ xlink:href="#linearGradient11400"
2723+ id="linearGradient5626"
2724+ gradientUnits="userSpaceOnUse"
2725+ gradientTransform="matrix(1.004187,0,0,1,-0.12454,-3.011765)"
2726+ x1="23.154902"
2727+ y1="34.572548"
2728+ x2="23.529411"
2729+ y2="40.219608" />
2730+ <linearGradient
2731+ inkscape:collect="always"
2732+ xlink:href="#linearGradient5137"
2733+ id="linearGradient5628"
2734+ gradientUnits="userSpaceOnUse"
2735+ gradientTransform="matrix(0.648248,0,0,0.644253,0.433189,-0.740991)"
2736+ x1="17.247635"
2737+ y1="6.3760414"
2738+ x2="39.904388"
2739+ y2="38.876041" />
2740+ <radialGradient
2741+ inkscape:collect="always"
2742+ xlink:href="#linearGradient7670"
2743+ id="radialGradient5630"
2744+ gradientUnits="userSpaceOnUse"
2745+ gradientTransform="matrix(0.836315,0,0,0.514216,-4.024721,-3.259613e-2)"
2746+ cx="24.006104"
2747+ cy="32.997028"
2748+ fx="24.006104"
2749+ fy="32.997028"
2750+ r="19.00016" />
2751+ <linearGradient
2752+ inkscape:collect="always"
2753+ xlink:href="#linearGradient6240"
2754+ id="linearGradient5632"
2755+ gradientUnits="userSpaceOnUse"
2756+ gradientTransform="matrix(0.664512,0,0,0.651253,9.569506e-2,-1.210023)"
2757+ x1="20.156862"
2758+ y1="5.0996137"
2759+ x2="20.156862"
2760+ y2="26.039215" />
2761+ <linearGradient
2762+ inkscape:collect="always"
2763+ xlink:href="#linearGradient2307"
2764+ id="linearGradient5634"
2765+ gradientUnits="userSpaceOnUse"
2766+ gradientTransform="scale(1.673466,0.597562)"
2767+ x1="-931.7503"
2768+ y1="148.07116"
2769+ x2="-131.23588"
2770+ y2="148.07116" />
2771+ <radialGradient
2772+ inkscape:collect="always"
2773+ xlink:href="#linearGradient5060"
2774+ id="radialGradient5636"
2775+ gradientUnits="userSpaceOnUse"
2776+ gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
2777+ cx="605.71429"
2778+ cy="486.64789"
2779+ fx="605.71429"
2780+ fy="486.64789"
2781+ r="117.14286" />
2782+ <radialGradient
2783+ inkscape:collect="always"
2784+ xlink:href="#linearGradient5060"
2785+ id="radialGradient5638"
2786+ gradientUnits="userSpaceOnUse"
2787+ gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
2788+ cx="605.71429"
2789+ cy="486.64789"
2790+ fx="605.71429"
2791+ fy="486.64789"
2792+ r="117.14286" />
2793+ <linearGradient
2794+ inkscape:collect="always"
2795+ xlink:href="#linearGradient3899"
2796+ id="linearGradient5640"
2797+ gradientUnits="userSpaceOnUse"
2798+ gradientTransform="matrix(0.647995,0,0,0.707655,0.734249,-1.447571)"
2799+ x1="29.5"
2800+ y1="46.029419"
2801+ x2="29.125"
2802+ y2="37.9375" />
2803+ <radialGradient
2804+ inkscape:collect="always"
2805+ xlink:href="#linearGradient3907"
2806+ id="radialGradient5642"
2807+ gradientUnits="userSpaceOnUse"
2808+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2809+ cx="20.913568"
2810+ cy="47.045319"
2811+ fx="20.913568"
2812+ fy="47.045319"
2813+ r="19.5" />
2814+ <radialGradient
2815+ inkscape:collect="always"
2816+ xlink:href="#linearGradient3907"
2817+ id="radialGradient5644"
2818+ gradientUnits="userSpaceOnUse"
2819+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2820+ cx="20.913568"
2821+ cy="47.045319"
2822+ fx="20.913568"
2823+ fy="47.045319"
2824+ r="19.5" />
2825+ <radialGradient
2826+ inkscape:collect="always"
2827+ xlink:href="#linearGradient3907"
2828+ id="radialGradient5646"
2829+ gradientUnits="userSpaceOnUse"
2830+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2831+ cx="20.913568"
2832+ cy="47.045319"
2833+ fx="20.913568"
2834+ fy="47.045319"
2835+ r="19.5" />
2836+ <radialGradient
2837+ inkscape:collect="always"
2838+ xlink:href="#linearGradient3907"
2839+ id="radialGradient5648"
2840+ gradientUnits="userSpaceOnUse"
2841+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2842+ cx="20.913568"
2843+ cy="47.045319"
2844+ fx="20.913568"
2845+ fy="47.045319"
2846+ r="19.5" />
2847+ <radialGradient
2848+ inkscape:collect="always"
2849+ xlink:href="#linearGradient3907"
2850+ id="radialGradient5650"
2851+ gradientUnits="userSpaceOnUse"
2852+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2853+ cx="20.913568"
2854+ cy="47.045319"
2855+ fx="20.913568"
2856+ fy="47.045319"
2857+ r="19.5" />
2858+ <radialGradient
2859+ inkscape:collect="always"
2860+ xlink:href="#linearGradient3907"
2861+ id="radialGradient5652"
2862+ gradientUnits="userSpaceOnUse"
2863+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2864+ cx="20.913568"
2865+ cy="47.045319"
2866+ fx="20.913568"
2867+ fy="47.045319"
2868+ r="19.5" />
2869+ <radialGradient
2870+ inkscape:collect="always"
2871+ xlink:href="#linearGradient3907"
2872+ id="radialGradient5654"
2873+ gradientUnits="userSpaceOnUse"
2874+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2875+ cx="20.913568"
2876+ cy="47.045319"
2877+ fx="20.913568"
2878+ fy="47.045319"
2879+ r="19.5" />
2880+ <radialGradient
2881+ inkscape:collect="always"
2882+ xlink:href="#linearGradient3907"
2883+ id="radialGradient5656"
2884+ gradientUnits="userSpaceOnUse"
2885+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2886+ cx="20.913568"
2887+ cy="47.045319"
2888+ fx="20.913568"
2889+ fy="47.045319"
2890+ r="19.5" />
2891+ <radialGradient
2892+ inkscape:collect="always"
2893+ xlink:href="#linearGradient3907"
2894+ id="radialGradient5658"
2895+ gradientUnits="userSpaceOnUse"
2896+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2897+ cx="20.913568"
2898+ cy="47.045319"
2899+ fx="20.913568"
2900+ fy="47.045319"
2901+ r="19.5" />
2902+ <radialGradient
2903+ inkscape:collect="always"
2904+ xlink:href="#linearGradient3907"
2905+ id="radialGradient5660"
2906+ gradientUnits="userSpaceOnUse"
2907+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2908+ cx="20.913568"
2909+ cy="47.045319"
2910+ fx="20.913568"
2911+ fy="47.045319"
2912+ r="19.5" />
2913+ <radialGradient
2914+ inkscape:collect="always"
2915+ xlink:href="#linearGradient3907"
2916+ id="radialGradient5662"
2917+ gradientUnits="userSpaceOnUse"
2918+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2919+ cx="20.913568"
2920+ cy="47.045319"
2921+ fx="20.913568"
2922+ fy="47.045319"
2923+ r="19.5" />
2924+ <radialGradient
2925+ inkscape:collect="always"
2926+ xlink:href="#linearGradient3907"
2927+ id="radialGradient5664"
2928+ gradientUnits="userSpaceOnUse"
2929+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2930+ cx="20.913568"
2931+ cy="47.045319"
2932+ fx="20.913568"
2933+ fy="47.045319"
2934+ r="19.5" />
2935+ <radialGradient
2936+ inkscape:collect="always"
2937+ xlink:href="#linearGradient3907"
2938+ id="radialGradient5666"
2939+ gradientUnits="userSpaceOnUse"
2940+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2941+ cx="20.913568"
2942+ cy="47.045319"
2943+ fx="20.913568"
2944+ fy="47.045319"
2945+ r="19.5" />
2946+ <radialGradient
2947+ inkscape:collect="always"
2948+ xlink:href="#linearGradient3907"
2949+ id="radialGradient5668"
2950+ gradientUnits="userSpaceOnUse"
2951+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2952+ cx="20.913568"
2953+ cy="47.045319"
2954+ fx="20.913568"
2955+ fy="47.045319"
2956+ r="19.5" />
2957+ <radialGradient
2958+ inkscape:collect="always"
2959+ xlink:href="#linearGradient3907"
2960+ id="radialGradient5670"
2961+ gradientUnits="userSpaceOnUse"
2962+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2963+ cx="20.913568"
2964+ cy="47.045319"
2965+ fx="20.913568"
2966+ fy="47.045319"
2967+ r="19.5" />
2968+ <radialGradient
2969+ inkscape:collect="always"
2970+ xlink:href="#linearGradient3907"
2971+ id="radialGradient5672"
2972+ gradientUnits="userSpaceOnUse"
2973+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2974+ cx="20.913568"
2975+ cy="47.045319"
2976+ fx="20.913568"
2977+ fy="47.045319"
2978+ r="19.5" />
2979+ <radialGradient
2980+ inkscape:collect="always"
2981+ xlink:href="#linearGradient3907"
2982+ id="radialGradient5674"
2983+ gradientUnits="userSpaceOnUse"
2984+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2985+ cx="20.913568"
2986+ cy="47.045319"
2987+ fx="20.913568"
2988+ fy="47.045319"
2989+ r="19.5" />
2990+ <radialGradient
2991+ inkscape:collect="always"
2992+ xlink:href="#linearGradient3907"
2993+ id="radialGradient5676"
2994+ gradientUnits="userSpaceOnUse"
2995+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
2996+ cx="20.913568"
2997+ cy="47.045319"
2998+ fx="20.913568"
2999+ fy="47.045319"
3000+ r="19.5" />
3001+ <radialGradient
3002+ inkscape:collect="always"
3003+ xlink:href="#linearGradient3907"
3004+ id="radialGradient5678"
3005+ gradientUnits="userSpaceOnUse"
3006+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3007+ cx="20.913568"
3008+ cy="47.045319"
3009+ fx="20.913568"
3010+ fy="47.045319"
3011+ r="19.5" />
3012+ <radialGradient
3013+ inkscape:collect="always"
3014+ xlink:href="#linearGradient3907"
3015+ id="radialGradient5680"
3016+ gradientUnits="userSpaceOnUse"
3017+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3018+ cx="20.913568"
3019+ cy="47.045319"
3020+ fx="20.913568"
3021+ fy="47.045319"
3022+ r="19.5" />
3023+ <radialGradient
3024+ inkscape:collect="always"
3025+ xlink:href="#linearGradient3907"
3026+ id="radialGradient5682"
3027+ gradientUnits="userSpaceOnUse"
3028+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3029+ cx="20.913568"
3030+ cy="47.045319"
3031+ fx="20.913568"
3032+ fy="47.045319"
3033+ r="19.5" />
3034+ <radialGradient
3035+ inkscape:collect="always"
3036+ xlink:href="#linearGradient3907"
3037+ id="radialGradient5684"
3038+ gradientUnits="userSpaceOnUse"
3039+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3040+ cx="20.913568"
3041+ cy="47.045319"
3042+ fx="20.913568"
3043+ fy="47.045319"
3044+ r="19.5" />
3045+ <radialGradient
3046+ inkscape:collect="always"
3047+ xlink:href="#linearGradient3907"
3048+ id="radialGradient5686"
3049+ gradientUnits="userSpaceOnUse"
3050+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3051+ cx="20.913568"
3052+ cy="47.045319"
3053+ fx="20.913568"
3054+ fy="47.045319"
3055+ r="19.5" />
3056+ <radialGradient
3057+ inkscape:collect="always"
3058+ xlink:href="#linearGradient3907"
3059+ id="radialGradient5688"
3060+ gradientUnits="userSpaceOnUse"
3061+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3062+ cx="20.913568"
3063+ cy="47.045319"
3064+ fx="20.913568"
3065+ fy="47.045319"
3066+ r="19.5" />
3067+ <radialGradient
3068+ inkscape:collect="always"
3069+ xlink:href="#linearGradient3907"
3070+ id="radialGradient5690"
3071+ gradientUnits="userSpaceOnUse"
3072+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3073+ cx="20.913568"
3074+ cy="47.045319"
3075+ fx="20.913568"
3076+ fy="47.045319"
3077+ r="19.5" />
3078+ <radialGradient
3079+ inkscape:collect="always"
3080+ xlink:href="#linearGradient3907"
3081+ id="radialGradient5692"
3082+ gradientUnits="userSpaceOnUse"
3083+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3084+ cx="20.913568"
3085+ cy="47.045319"
3086+ fx="20.913568"
3087+ fy="47.045319"
3088+ r="19.5" />
3089+ <radialGradient
3090+ inkscape:collect="always"
3091+ xlink:href="#linearGradient3907"
3092+ id="radialGradient5694"
3093+ gradientUnits="userSpaceOnUse"
3094+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3095+ cx="20.913568"
3096+ cy="47.045319"
3097+ fx="20.913568"
3098+ fy="47.045319"
3099+ r="19.5" />
3100+ <radialGradient
3101+ inkscape:collect="always"
3102+ xlink:href="#linearGradient3907"
3103+ id="radialGradient5696"
3104+ gradientUnits="userSpaceOnUse"
3105+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3106+ cx="20.913568"
3107+ cy="47.045319"
3108+ fx="20.913568"
3109+ fy="47.045319"
3110+ r="19.5" />
3111+ <radialGradient
3112+ inkscape:collect="always"
3113+ xlink:href="#linearGradient3907"
3114+ id="radialGradient5698"
3115+ gradientUnits="userSpaceOnUse"
3116+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3117+ cx="20.913568"
3118+ cy="47.045319"
3119+ fx="20.913568"
3120+ fy="47.045319"
3121+ r="19.5" />
3122+ <radialGradient
3123+ inkscape:collect="always"
3124+ xlink:href="#linearGradient3907"
3125+ id="radialGradient5700"
3126+ gradientUnits="userSpaceOnUse"
3127+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-8.729684,21.0972)"
3128+ cx="20.913568"
3129+ cy="47.045319"
3130+ fx="20.913568"
3131+ fy="47.045319"
3132+ r="19.5" />
3133+ <radialGradient
3134+ inkscape:collect="always"
3135+ xlink:href="#linearGradient3907"
3136+ id="radialGradient5702"
3137+ gradientUnits="userSpaceOnUse"
3138+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
3139+ cx="20.913568"
3140+ cy="47.045319"
3141+ fx="20.913568"
3142+ fy="47.045319"
3143+ r="19.5" />
3144+ <radialGradient
3145+ inkscape:collect="always"
3146+ xlink:href="#linearGradient3907"
3147+ id="radialGradient5704"
3148+ gradientUnits="userSpaceOnUse"
3149+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
3150+ cx="20.913568"
3151+ cy="47.045319"
3152+ fx="20.913568"
3153+ fy="47.045319"
3154+ r="19.5" />
3155+ <radialGradient
3156+ inkscape:collect="always"
3157+ xlink:href="#linearGradient3907"
3158+ id="radialGradient5706"
3159+ gradientUnits="userSpaceOnUse"
3160+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
3161+ cx="20.913568"
3162+ cy="47.045319"
3163+ fx="20.913568"
3164+ fy="47.045319"
3165+ r="19.5" />
3166+ <radialGradient
3167+ inkscape:collect="always"
3168+ xlink:href="#linearGradient3907"
3169+ id="radialGradient5708"
3170+ gradientUnits="userSpaceOnUse"
3171+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
3172+ cx="20.913568"
3173+ cy="47.045319"
3174+ fx="20.913568"
3175+ fy="47.045319"
3176+ r="19.5" />
3177+ <radialGradient
3178+ inkscape:collect="always"
3179+ xlink:href="#linearGradient3907"
3180+ id="radialGradient5710"
3181+ gradientUnits="userSpaceOnUse"
3182+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
3183+ cx="20.913568"
3184+ cy="47.045319"
3185+ fx="20.913568"
3186+ fy="47.045319"
3187+ r="19.5" />
3188+ <radialGradient
3189+ inkscape:collect="always"
3190+ xlink:href="#linearGradient3907"
3191+ id="radialGradient5712"
3192+ gradientUnits="userSpaceOnUse"
3193+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
3194+ cx="20.913568"
3195+ cy="47.045319"
3196+ fx="20.913568"
3197+ fy="47.045319"
3198+ r="19.5" />
3199+ <radialGradient
3200+ inkscape:collect="always"
3201+ xlink:href="#linearGradient3907"
3202+ id="radialGradient5714"
3203+ gradientUnits="userSpaceOnUse"
3204+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,-0.72968,21.0972)"
3205+ cx="20.913568"
3206+ cy="47.045319"
3207+ fx="20.913568"
3208+ fy="47.045319"
3209+ r="19.5" />
3210+ <radialGradient
3211+ inkscape:collect="always"
3212+ xlink:href="#linearGradient3907"
3213+ id="radialGradient5716"
3214+ gradientUnits="userSpaceOnUse"
3215+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
3216+ cx="20.913568"
3217+ cy="47.045319"
3218+ fx="20.913568"
3219+ fy="47.045319"
3220+ r="19.5" />
3221+ <radialGradient
3222+ inkscape:collect="always"
3223+ xlink:href="#linearGradient3907"
3224+ id="radialGradient5718"
3225+ gradientUnits="userSpaceOnUse"
3226+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
3227+ cx="20.913568"
3228+ cy="47.045319"
3229+ fx="20.913568"
3230+ fy="47.045319"
3231+ r="19.5" />
3232+ <radialGradient
3233+ inkscape:collect="always"
3234+ xlink:href="#linearGradient3907"
3235+ id="radialGradient5720"
3236+ gradientUnits="userSpaceOnUse"
3237+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
3238+ cx="20.913568"
3239+ cy="47.045319"
3240+ fx="20.913568"
3241+ fy="47.045319"
3242+ r="19.5" />
3243+ <radialGradient
3244+ inkscape:collect="always"
3245+ xlink:href="#linearGradient3907"
3246+ id="radialGradient5722"
3247+ gradientUnits="userSpaceOnUse"
3248+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
3249+ cx="20.913568"
3250+ cy="47.045319"
3251+ fx="20.913568"
3252+ fy="47.045319"
3253+ r="19.5" />
3254+ <radialGradient
3255+ inkscape:collect="always"
3256+ xlink:href="#linearGradient3907"
3257+ id="radialGradient5724"
3258+ gradientUnits="userSpaceOnUse"
3259+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
3260+ cx="20.913568"
3261+ cy="47.045319"
3262+ fx="20.913568"
3263+ fy="47.045319"
3264+ r="19.5" />
3265+ <radialGradient
3266+ inkscape:collect="always"
3267+ xlink:href="#linearGradient3907"
3268+ id="radialGradient5726"
3269+ gradientUnits="userSpaceOnUse"
3270+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
3271+ cx="20.913568"
3272+ cy="47.045319"
3273+ fx="20.913568"
3274+ fy="47.045319"
3275+ r="19.5" />
3276+ <radialGradient
3277+ inkscape:collect="always"
3278+ xlink:href="#linearGradient3907"
3279+ id="radialGradient5728"
3280+ gradientUnits="userSpaceOnUse"
3281+ gradientTransform="matrix(1.382603,3.581398e-5,0,0.171503,4.270316,21.0972)"
3282+ cx="20.913568"
3283+ cy="47.045319"
3284+ fx="20.913568"
3285+ fy="47.045319"
3286+ r="19.5" />
3287+ </defs>
3288+ <sodipodi:namedview
3289+ id="base"
3290+ pagecolor="#ffffff"
3291+ bordercolor="#666"
3292+ borderopacity="1"
3293+ inkscape:pageopacity="0.0"
3294+ inkscape:pageshadow="2"
3295+ inkscape:zoom="1"
3296+ inkscape:cx="47.587693"
3297+ inkscape:cy="-3.0466105"
3298+ inkscape:current-layer="layer1"
3299+ showgrid="false"
3300+ inkscape:grid-bbox="true"
3301+ inkscape:document-units="px"
3302+ inkscape:window-width="1051"
3303+ inkscape:window-height="885"
3304+ inkscape:window-x="0"
3305+ inkscape:window-y="89"
3306+ inkscape:showpageshadow="false"
3307+ inkscape:grid-points="false"
3308+ showborder="false" />
3309+ <metadata
3310+ id="metadata4">
3311+ <rdf:RDF>
3312+ <cc:Work
3313+ rdf:about="">
3314+ <dc:format>image/svg+xml</dc:format>
3315+ <dc:type
3316+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
3317+ <dc:title>Network</dc:title>
3318+ <dc:date>2005-03-08</dc:date>
3319+ <dc:creator>
3320+ <cc:Agent>
3321+ <dc:title>Lapo Calamandrei</dc:title>
3322+ </cc:Agent>
3323+ </dc:creator>
3324+ <dc:subject>
3325+ <rdf:Bag />
3326+ </dc:subject>
3327+ <cc:license
3328+ rdf:resource="http://creativecommons.org/licenses/by-sa/2.0/" />
3329+ <dc:source />
3330+ <dc:contributor>
3331+ <cc:Agent>
3332+ <dc:title>Jakub Steiner, Luca Ferretti</dc:title>
3333+ </cc:Agent>
3334+ </dc:contributor>
3335+ </cc:Work>
3336+ <cc:License
3337+ rdf:about="http://creativecommons.org/licenses/by-sa/2.0/">
3338+ <cc:permits
3339+ rdf:resource="http://web.resource.org/cc/Reproduction" />
3340+ <cc:permits
3341+ rdf:resource="http://web.resource.org/cc/Distribution" />
3342+ <cc:requires
3343+ rdf:resource="http://web.resource.org/cc/Notice" />
3344+ <cc:requires
3345+ rdf:resource="http://web.resource.org/cc/Attribution" />
3346+ <cc:permits
3347+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
3348+ <cc:requires
3349+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
3350+ </cc:License>
3351+ </rdf:RDF>
3352+ </metadata>
3353+ <g
3354+ id="layer1"
3355+ inkscape:label="Layer 1"
3356+ inkscape:groupmode="layer">
3357+ <g
3358+ id="g5480"
3359+ transform="translate(14.98536,1)">
3360+ <g
3361+ style="display:inline"
3362+ inkscape:label="Layer 1"
3363+ id="g5482" />
3364+ <g
3365+ style="display:inline"
3366+ inkscape:label="tastiera"
3367+ id="g5484">
3368+ <g
3369+ transform="translate(-54,0.18088)"
3370+ inkscape:label="Shadow"
3371+ id="g5486" />
3372+ <g
3373+ id="g5488"
3374+ inkscape:label="Shadow"
3375+ transform="translate(-54,15.24691)" />
3376+ <g
3377+ id="g5490"
3378+ inkscape:label="Lavoro"
3379+ style="display:inline"
3380+ transform="translate(-54,15.24691)" />
3381+ </g>
3382+ <g
3383+ style="display:inline"
3384+ inkscape:label="tasti"
3385+ id="g5492">
3386+ <path
3387+ transform="matrix(0.633479,0,0,0.565504,1.119993,0.201324)"
3388+ d="M 47.69706 42.6875 A 23.75956 5.8835783 0 1 1 0.17794037,42.6875 A 23.75956 5.8835783 0 1 1 47.69706 42.6875 z"
3389+ sodipodi:ry="5.8835783"
3390+ sodipodi:rx="23.75956"
3391+ sodipodi:cy="42.6875"
3392+ sodipodi:cx="23.9375"
3393+ id="path5494"
3394+ style="opacity:0.3;fill:url(#radialGradient5620);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
3395+ sodipodi:type="arc" />
3396+ <path
3397+ style="opacity:0.20786516;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient5622);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
3398+ d="M 27.082936,28.048013 C 21.663366,21.135948 31.947853,26.54939 30.855772,24.153878 C 29.785572,21.806364 17.408039,24.595241 18.709552,20.667209"
3399+ id="path5496"
3400+ sodipodi:nodetypes="czz" />
3401+ <path
3402+ sodipodi:nodetypes="czz"
3403+ id="path5498"
3404+ d="M 26.784723,27.671888 C 21.538638,20.412631 31.520563,26.487432 30.374151,23.604157 C 29.072638,20.330797 18.198646,24.276982 18.806217,20.406815"
3405+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
3406+ <g
3407+ transform="matrix(0.530612,0,0,0.53095,3.140616,3.404111)"
3408+ id="g5500"
3409+ style="display:inline">
3410+ <path
3411+ sodipodi:nodetypes="csccscc"
3412+ id="path5502"
3413+ d="M 14.375479,32.558794 C 14.375479,32.558794 15.592355,37.45777 10.51915,37.50376 C 8.0888743,37.525507 8.5866723,41.509781 8.5866723,41.509781 L 39.433139,41.478634 C 39.433139,41.478634 39.851577,37.611393 37.410922,37.566053 C 32.423455,37.474579 33.600393,32.496503 33.600393,32.496503 L 14.375479,32.558794 z "
3414+ style="opacity:1;color:black;fill:url(#linearGradient5624);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.88401449;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3415+ <path
3416+ sodipodi:nodetypes="ccccc"
3417+ id="path5504"
3418+ d="M 13.926195,33.027451 C 14.010206,35.2 13.641655,35.938894 12.285731,36.702682 L 36,38 C 35.047008,36.831372 33.660837,35.066666 34.038883,33.011765 L 13.926195,33.027451 z "
3419+ style="opacity:0.5;fill:url(#linearGradient5626);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
3420+ <path
3421+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8f;stroke-width:1.88401508px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.43902438"
3422+ d="M 10.436202,38.661601 C 17.000465,38.66357 37.562637,38.661601 37.562637,38.661601"
3423+ id="path5506"
3424+ sodipodi:nodetypes="cc" />
3425+ <path
3426+ sodipodi:nodetypes="cc"
3427+ id="path5508"
3428+ d="M 11.134219,39.660187 C 17.146756,39.662156 36.881517,39.660187 36.881517,39.660187"
3429+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.88401532px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
3430+ </g>
3431+ <path
3432+ sodipodi:nodetypes="ccccccccc"
3433+ id="path5510"
3434+ d="M 3.602229,1.4999996 L 28.319154,1.4999996 C 29.631932,1.4999996 30.588653,2.4197694 30.588653,3.8361498 L 30.595753,20.072828 C 30.595753,21.162945 30.253253,21.499994 29.276792,21.499994 L 2.7228402,21.487795 C 1.9583807,21.469246 1.414291,21.169109 1.404027,20.186855 L 1.4138652,3.7151949 C 1.4138652,2.572403 2.4117826,1.4999996 3.602229,1.4999996 z "
3435+ style="fill:url(#linearGradient5628);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
3436+ <rect
3437+ y="3.5000005"
3438+ x="3.4999971"
3439+ height="15.194118"
3440+ width="25.103695"
3441+ id="rect5512"
3442+ style="fill:url(#radialGradient5630);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:0.99999958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
3443+ <path
3444+ sodipodi:nodetypes="ccccc"
3445+ id="path5514"
3446+ d="M 4.0984042,4.0204313 L 4.0984042,15.748091 C 15.025941,14.866132 19.115514,9.1623492 28,8.5664313 L 28,4 L 4.0984042,4.0204313 z "
3447+ style="opacity:0.5;fill:url(#linearGradient5632);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
3448+ <path
3449+ sodipodi:nodetypes="cccsccscccc"
3450+ id="path5516"
3451+ d="M 4.056094,2.4999991 C 3.2398944,2.4999991 2.4960113,3.2952856 2.4960113,4.0741096 L 2.4960108,19.789734 C 2.4999206,20.160319 2.5869303,20.275382 2.6715202,20.346431 C 2.7561101,20.417479 2.9348114,20.473541 3.2370502,20.480806 L 28.783404,20.500002 C 29.189758,20.500002 29.318189,20.437946 29.368434,20.384824 C 29.418681,20.3317 29.504941,20.138678 29.504941,19.674554 L 29.504942,4.1892884 C 29.504942,3.0791795 28.874178,2.4999991 27.866855,2.4999991 L 4.056094,2.4999991 z "
3452+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:0.99999958;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
3453+ <g
3454+ id="g5518"
3455+ transform="matrix(1.543206e-2,0,0,1.215502e-2,29.57023,28.01728)"
3456+ style="display:inline">
3457+ <rect
3458+ y="-150.69685"
3459+ x="-1559.2523"
3460+ height="478.35718"
3461+ width="1339.6335"
3462+ id="rect5520"
3463+ style="opacity:0.40206185;color:black;fill:url(#linearGradient5634);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3464+ <path
3465+ sodipodi:nodetypes="cccc"
3466+ id="path5522"
3467+ d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
3468+ style="opacity:0.40206185;color:black;fill:url(#radialGradient5636);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3469+ <path
3470+ style="opacity:0.40206185;color:black;fill:url(#radialGradient5638);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3471+ d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
3472+ id="path5524"
3473+ sodipodi:nodetypes="cccc" />
3474+ </g>
3475+ <path
3476+ sodipodi:nodetypes="ccccccccc"
3477+ id="path5526"
3478+ d="M 3.643761,26.504783 L 28.921938,26.504783 C 29.226374,26.504783 29.788645,26.492665 30,27 L 31.5,30 C 31.5625,30.406064 31.487026,31.562501 30,31.562501 L 2.5,31.500001 C 1,31.562501 1.0652178,30.281064 1.0652178,30 L 3,27 C 3.2113561,26.492665 3.3393239,26.504783 3.643761,26.504783 z "
3479+ style="color:black;fill:url(#linearGradient5640);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3480+ <path
3481+ sodipodi:nodetypes="ccccccccc"
3482+ id="path5528"
3483+ d="M 4.0955909,27.111942 L 28.49679,27.10614 C 28.788541,27.10614 28.820868,27.10614 29.023418,27.449588 L 30.420658,30.150759 C 30.420658,30.341029 30.185782,30.494207 29.894029,30.494207 L 2.6782341,30.500011 C 2.3864818,30.500011 2.1516056,30.346832 2.1516056,30.156562 L 3.5689622,27.45539 C 3.7715117,27.111942 3.8038386,27.111942 4.0955909,27.111942 z "
3484+ style="opacity:1;color:black;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:0.99999964;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3485+ <path
3486+ sodipodi:nodetypes="csssssssccssssssssssssccccssscccccccccssssssssssssccsssssssssccccccc"
3487+ id="path5530"
3488+ d="M 4.9039459,26.500588 C 4.9019723,26.502459 4.9057445,26.514939 4.9039459,26.516406 C 4.89444,26.51889 4.8714034,26.528697 4.8616746,26.532224 C 4.8584281,26.533516 4.8437789,26.530815 4.840539,26.532224 C 4.8373165,26.533749 4.8225981,26.546397 4.8194034,26.548041 C 4.8130911,26.551565 4.8043634,26.559861 4.7982678,26.563859 C 4.7952901,26.565977 4.7800294,26.57744 4.7771322,26.579677 C 4.7743261,26.582033 4.7587013,26.593017 4.7559967,26.595495 C 4.7139608,26.641114 4.6696929,26.720423 4.6080475,26.816941 L 3.1646057,29.221226 C 3.1646057,29.224233 3.1644578,29.234029 3.1646057,29.237043 C 3.1648991,29.240062 3.1641691,29.249843 3.1646057,29.25286 C 3.1651831,29.255877 3.1638899,29.265668 3.1646057,29.268679 C 3.1663094,29.274683 3.1835077,29.294359 3.1857413,29.300313 C 3.1869871,29.303274 3.184369,29.31319 3.1857413,29.316132 C 3.1902312,29.324886 3.2013114,29.339269 3.2068769,29.347766 C 3.2127868,29.356161 3.2211123,29.37137 3.2280125,29.379402 C 3.230418,29.382033 3.2466397,29.392637 3.2491481,29.395219 C 3.2517571,29.39775 3.2675765,29.408562 3.2702837,29.411038 C 3.287102,29.425545 3.313719,29.446427 3.3336905,29.45849 C 3.3370984,29.460423 3.3513413,29.472456 3.3548262,29.474308 C 3.3655167,29.479116 3.3855128,29.485766 3.3970973,29.490126 C 3.4750042,29.516899 3.5780713,29.537579 3.6718601,29.537579 L 18.650036,29.537579 L 18.586629,26.500592 L 5.1153018,26.500588 C 5.0709049,26.500588 5.0221446,26.49941 4.9884883,26.500588 C 4.9806133,26.500623 4.9547729,26.500899 4.9462171,26.500588 C 4.9436075,26.500603 4.9274517,26.500458 4.9250814,26.500588 C 4.9232514,26.502034 4.9059195,26.498718 4.9039459,26.500588 z M 19.83363,26.500592 L 19.897036,27.512921 L 23.553495,27.512921 L 23.38441,26.500592 L 19.83363,26.500592 z M 24.652546,26.500592 L 25.413428,29.537579 L 28.795124,29.537579 C 28.888912,29.537579 28.991979,29.516899 29.069886,29.490126 C 29.081471,29.485766 29.101467,29.479116 29.112157,29.474308 C 29.115641,29.472456 29.129884,29.460423 29.133293,29.45849 C 29.153265,29.446427 29.179882,29.425545 29.1967,29.411038 C 29.199407,29.408562 29.215227,29.39775 29.217835,29.395219 C 29.220344,29.392637 29.236565,29.382033 29.238971,29.379402 C 29.245871,29.37137 29.254196,29.356161 29.260107,29.347766 C 29.265672,29.339269 29.276752,29.324886 29.281242,29.316132 C 29.282614,29.31319 29.279996,29.303274 29.281242,29.300313 C 29.283476,29.294359 29.300674,29.274683 29.302378,29.268679 C 29.303093,29.265668 29.3018,29.255877 29.302378,29.25286 C 29.302814,29.249843 29.302083,29.240062 29.302378,29.237043 C 29.302527,29.234029 29.302378,29.224233 29.302378,29.221226 L 28.119129,26.816941 C 28.057483,26.720424 28.013215,26.641114 27.97118,26.595495 C 27.968475,26.593017 27.95285,26.582033 27.950044,26.579677 C 27.947147,26.57744 27.931886,26.565977 27.928908,26.563859 C 27.922812,26.559861 27.914085,26.551565 27.907773,26.548041 C 27.904579,26.546397 27.88986,26.533749 27.886638,26.532224 C 27.883397,26.530815 27.868747,26.533516 27.865502,26.532224 C 27.855773,26.528697 27.832737,26.51889 27.823231,26.516406 C 27.812787,26.51452 27.796296,26.503902 27.780959,26.500588 C 27.773263,26.49907 27.745738,26.501448 27.738688,26.500588 C 27.705031,26.49941 27.656271,26.500588 27.611875,26.500588 L 24.652546,26.500592 z M 20.679054,28.525249 L 20.002715,29.537579 L 23.891664,29.537579 L 23.04624,28.525249 L 20.679054,28.525249 z "
3489+ style="color:black;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:0.99999923;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3490+ <rect
3491+ style="color:black;fill:url(#radialGradient5642);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3492+ id="rect5532"
3493+ width="1"
3494+ height="1"
3495+ x="5"
3496+ y="26"
3497+ rx="0.26516503"
3498+ ry="0.26516503" />
3499+ <rect
3500+ style="color:black;fill:url(#radialGradient5644);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3501+ id="rect5534"
3502+ width="1"
3503+ height="1"
3504+ x="7"
3505+ y="26"
3506+ rx="0.26516503"
3507+ ry="0.26516503" />
3508+ <rect
3509+ style="color:black;fill:url(#radialGradient5646);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3510+ id="rect5536"
3511+ width="1"
3512+ height="1"
3513+ x="9"
3514+ y="26"
3515+ rx="0.26516503"
3516+ ry="0.26516503" />
3517+ <rect
3518+ style="color:black;fill:url(#radialGradient5648);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3519+ id="rect5538"
3520+ width="1"
3521+ height="1"
3522+ x="11"
3523+ y="26"
3524+ rx="0.26516503"
3525+ ry="0.26516503" />
3526+ <rect
3527+ style="color:black;fill:url(#radialGradient5650);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3528+ id="rect5540"
3529+ width="1"
3530+ height="1"
3531+ x="13"
3532+ y="26"
3533+ rx="0.26516503"
3534+ ry="0.26516503" />
3535+ <rect
3536+ style="color:black;fill:url(#radialGradient5652);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3537+ id="rect5542"
3538+ width="1"
3539+ height="1"
3540+ x="15"
3541+ y="26"
3542+ rx="0.26516503"
3543+ ry="0.26516503" />
3544+ <rect
3545+ style="color:black;fill:url(#radialGradient5654);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3546+ id="rect5544"
3547+ width="1"
3548+ height="1"
3549+ x="17"
3550+ y="26"
3551+ rx="0.26516503"
3552+ ry="0.26516503" />
3553+ <rect
3554+ style="color:black;fill:url(#radialGradient5656);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3555+ id="rect5546"
3556+ width="1"
3557+ height="1"
3558+ x="4"
3559+ y="27"
3560+ rx="0.26516503"
3561+ ry="0.26516503" />
3562+ <rect
3563+ style="color:black;fill:url(#radialGradient5658);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3564+ id="rect5548"
3565+ width="1"
3566+ height="1"
3567+ x="6"
3568+ y="27"
3569+ rx="0.26516503"
3570+ ry="0.26516503" />
3571+ <rect
3572+ style="color:black;fill:url(#radialGradient5660);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3573+ id="rect5550"
3574+ width="1"
3575+ height="1"
3576+ x="8"
3577+ y="27"
3578+ rx="0.26516503"
3579+ ry="0.26516503" />
3580+ <rect
3581+ style="color:black;fill:url(#radialGradient5662);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3582+ id="rect5552"
3583+ width="1"
3584+ height="1"
3585+ x="10"
3586+ y="27"
3587+ rx="0.26516503"
3588+ ry="0.26516503" />
3589+ <rect
3590+ style="color:black;fill:url(#radialGradient5664);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3591+ id="rect5554"
3592+ width="1"
3593+ height="1"
3594+ x="12"
3595+ y="27"
3596+ rx="0.26516503"
3597+ ry="0.26516503" />
3598+ <rect
3599+ style="color:black;fill:url(#radialGradient5666);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3600+ id="rect5556"
3601+ width="1"
3602+ height="1"
3603+ x="14"
3604+ y="27"
3605+ rx="0.26516503"
3606+ ry="0.26516503" />
3607+ <rect
3608+ style="color:black;fill:url(#radialGradient5668);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3609+ id="rect5558"
3610+ width="1"
3611+ height="1"
3612+ x="16"
3613+ y="27"
3614+ rx="0.26516503"
3615+ ry="0.26516503" />
3616+ <rect
3617+ style="color:black;fill:url(#radialGradient5670);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3618+ id="rect5560"
3619+ width="1"
3620+ height="1"
3621+ x="18"
3622+ y="27"
3623+ rx="0.26516503"
3624+ ry="0.26516503" />
3625+ <rect
3626+ style="color:black;fill:url(#radialGradient5672);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3627+ id="rect5562"
3628+ width="1"
3629+ height="1"
3630+ x="5"
3631+ y="28"
3632+ rx="0.26516503"
3633+ ry="0.26516503" />
3634+ <rect
3635+ style="color:black;fill:url(#radialGradient5674);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3636+ id="rect5564"
3637+ width="1"
3638+ height="1"
3639+ x="7"
3640+ y="28"
3641+ rx="0.26516503"
3642+ ry="0.26516503" />
3643+ <rect
3644+ style="color:black;fill:url(#radialGradient5676);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3645+ id="rect5566"
3646+ width="1"
3647+ height="1"
3648+ x="9"
3649+ y="28"
3650+ rx="0.26516503"
3651+ ry="0.26516503" />
3652+ <rect
3653+ style="color:black;fill:url(#radialGradient5678);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3654+ id="rect5568"
3655+ width="1"
3656+ height="1"
3657+ x="11"
3658+ y="28"
3659+ rx="0.26516503"
3660+ ry="0.26516503" />
3661+ <rect
3662+ style="color:black;fill:url(#radialGradient5680);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3663+ id="rect5570"
3664+ width="1"
3665+ height="1"
3666+ x="13"
3667+ y="28"
3668+ rx="0.26516503"
3669+ ry="0.26516503" />
3670+ <rect
3671+ style="color:black;fill:url(#radialGradient5682);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3672+ id="rect5572"
3673+ width="1"
3674+ height="1"
3675+ x="15"
3676+ y="28"
3677+ rx="0.26516503"
3678+ ry="0.26516503" />
3679+ <rect
3680+ style="color:black;fill:url(#radialGradient5684);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3681+ id="rect5574"
3682+ width="1"
3683+ height="1"
3684+ x="17"
3685+ y="28"
3686+ rx="0.26516503"
3687+ ry="0.26516503" />
3688+ <rect
3689+ style="color:black;fill:url(#radialGradient5686);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3690+ id="rect5576"
3691+ width="1"
3692+ height="1"
3693+ x="4"
3694+ y="29"
3695+ rx="0.26516503"
3696+ ry="0.26516503" />
3697+ <rect
3698+ style="color:black;fill:url(#radialGradient5688);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3699+ id="rect5578"
3700+ width="1"
3701+ height="1"
3702+ x="6"
3703+ y="29"
3704+ rx="0.26516503"
3705+ ry="0.26516503" />
3706+ <rect
3707+ style="color:black;fill:url(#radialGradient5690);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3708+ id="rect5580"
3709+ width="1"
3710+ height="1"
3711+ x="8"
3712+ y="29"
3713+ rx="0.26516503"
3714+ ry="0.26516503" />
3715+ <rect
3716+ style="color:black;fill:url(#radialGradient5692);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3717+ id="rect5582"
3718+ width="1"
3719+ height="1"
3720+ x="10"
3721+ y="29"
3722+ rx="0.26516503"
3723+ ry="0.26516503" />
3724+ <rect
3725+ style="color:black;fill:url(#radialGradient5694);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3726+ id="rect5584"
3727+ width="1"
3728+ height="1"
3729+ x="12"
3730+ y="29"
3731+ rx="0.26516503"
3732+ ry="0.26516503" />
3733+ <rect
3734+ style="color:black;fill:url(#radialGradient5696);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3735+ id="rect5586"
3736+ width="1"
3737+ height="1"
3738+ x="14"
3739+ y="29"
3740+ rx="0.26516503"
3741+ ry="0.26516503" />
3742+ <rect
3743+ style="color:black;fill:url(#radialGradient5698);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3744+ id="rect5588"
3745+ width="1"
3746+ height="1"
3747+ x="16"
3748+ y="29"
3749+ rx="0.26516503"
3750+ ry="0.26516503" />
3751+ <rect
3752+ style="color:black;fill:url(#radialGradient5700);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3753+ id="rect5590"
3754+ width="1"
3755+ height="1"
3756+ x="18"
3757+ y="29"
3758+ rx="0.26516503"
3759+ ry="0.26516503" />
3760+ <rect
3761+ style="color:black;fill:url(#radialGradient5702);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3762+ id="rect5592"
3763+ width="1"
3764+ height="1"
3765+ x="21"
3766+ y="26"
3767+ rx="0.26516503"
3768+ ry="0.26516503" />
3769+ <rect
3770+ style="color:black;fill:url(#radialGradient5704);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3771+ id="rect5594"
3772+ width="1"
3773+ height="1"
3774+ x="20"
3775+ y="27"
3776+ rx="0.26516503"
3777+ ry="0.26516503" />
3778+ <rect
3779+ style="color:black;fill:url(#radialGradient5706);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3780+ id="rect5596"
3781+ width="1"
3782+ height="1"
3783+ x="22"
3784+ y="27"
3785+ rx="0.26516503"
3786+ ry="0.26516503" />
3787+ <rect
3788+ style="color:black;fill:url(#radialGradient5708);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3789+ id="rect5598"
3790+ width="1"
3791+ height="1"
3792+ x="21"
3793+ y="28"
3794+ rx="0.26516503"
3795+ ry="0.26516503" />
3796+ <rect
3797+ style="color:black;fill:url(#radialGradient5710);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3798+ id="rect5600"
3799+ width="1"
3800+ height="1"
3801+ x="23"
3802+ y="28"
3803+ rx="0.26516503"
3804+ ry="0.26516503" />
3805+ <rect
3806+ style="color:black;fill:url(#radialGradient5712);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3807+ id="rect5602"
3808+ width="1"
3809+ height="1"
3810+ x="20"
3811+ y="29"
3812+ rx="0.26516503"
3813+ ry="0.26516503" />
3814+ <rect
3815+ style="color:black;fill:url(#radialGradient5714);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3816+ id="rect5604"
3817+ width="1"
3818+ height="1"
3819+ x="22"
3820+ y="29"
3821+ rx="0.26516503"
3822+ ry="0.26516503" />
3823+ <rect
3824+ style="color:black;fill:url(#radialGradient5716);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3825+ id="rect5606"
3826+ width="1"
3827+ height="1"
3828+ x="26"
3829+ y="26"
3830+ rx="0.26516503"
3831+ ry="0.26516503" />
3832+ <rect
3833+ style="color:black;fill:url(#radialGradient5718);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3834+ id="rect5608"
3835+ width="1"
3836+ height="1"
3837+ x="25"
3838+ y="27"
3839+ rx="0.26516503"
3840+ ry="0.26516503" />
3841+ <rect
3842+ style="color:black;fill:url(#radialGradient5720);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3843+ id="rect5610"
3844+ width="1"
3845+ height="1"
3846+ x="27"
3847+ y="27"
3848+ rx="0.26516503"
3849+ ry="0.26516503" />
3850+ <rect
3851+ style="color:black;fill:url(#radialGradient5722);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3852+ id="rect5612"
3853+ width="1"
3854+ height="1"
3855+ x="26"
3856+ y="28"
3857+ rx="0.26516503"
3858+ ry="0.26516503" />
3859+ <rect
3860+ style="color:black;fill:url(#radialGradient5724);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3861+ id="rect5614"
3862+ width="1"
3863+ height="1"
3864+ x="28"
3865+ y="28"
3866+ rx="0.26516503"
3867+ ry="0.26516503" />
3868+ <rect
3869+ style="color:black;fill:url(#radialGradient5726);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3870+ id="rect5616"
3871+ width="1"
3872+ height="1"
3873+ x="25"
3874+ y="29"
3875+ rx="0.26516503"
3876+ ry="0.26516503" />
3877+ <rect
3878+ style="color:black;fill:url(#radialGradient5728);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
3879+ id="rect5618"
3880+ width="1"
3881+ height="1"
3882+ x="27"
3883+ y="29"
3884+ rx="0.26516503"
3885+ ry="0.26516503" />
3886+ </g>
3887+ </g>
3888+ <g
3889+ id="g5340"
3890+ transform="translate(0.985355,12)">
3891+ <g
3892+ style="display:inline"
3893+ inkscape:label="Layer 1"
3894+ id="g5342" />
3895+ <g
3896+ style="display:inline"
3897+ inkscape:label="tastiera"
3898+ id="g5344">
3899+ <g
3900+ transform="translate(-54,0.18088)"
3901+ inkscape:label="Shadow"
3902+ id="g5346" />
3903+ <g
3904+ id="g5348"
3905+ inkscape:label="Shadow"
3906+ transform="translate(-54,15.24691)" />
3907+ <g
3908+ id="g5350"
3909+ inkscape:label="Lavoro"
3910+ style="display:inline"
3911+ transform="translate(-54,15.24691)" />
3912+ </g>
3913+ <g
3914+ style="display:inline"
3915+ inkscape:label="tasti"
3916+ id="layer2">
3917+ <path
3918+ transform="matrix(0.633479,0,0,0.565504,1.119993,0.201324)"
3919+ d="M 47.69706 42.6875 A 23.75956 5.8835783 0 1 1 0.17794037,42.6875 A 23.75956 5.8835783 0 1 1 47.69706 42.6875 z"
3920+ sodipodi:ry="5.8835783"
3921+ sodipodi:rx="23.75956"
3922+ sodipodi:cy="42.6875"
3923+ sodipodi:cx="23.9375"
3924+ id="path5353"
3925+ style="opacity:0.3;fill:url(#radialGradient2313);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
3926+ sodipodi:type="arc" />
3927+ <path
3928+ style="opacity:0.20786516;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4202);stroke-width:0.99999982;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
3929+ d="M 27.082936,28.048013 C 21.663366,21.135948 31.947853,26.54939 30.855772,24.153878 C 29.785572,21.806364 17.408039,24.595241 18.709552,20.667209"
3930+ id="path5355"
3931+ sodipodi:nodetypes="czz" />
3932+ <path
3933+ sodipodi:nodetypes="czz"
3934+ id="path5357"
3935+ d="M 26.784723,27.671888 C 21.538638,20.412631 31.520563,26.487432 30.374151,23.604157 C 29.072638,20.330797 18.198646,24.276982 18.806217,20.406815"
3936+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#729fcf;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
3937+ <g
3938+ transform="matrix(0.530612,0,0,0.53095,3.140616,3.404111)"
3939+ id="g5359"
3940+ style="display:inline">
3941+ <path
3942+ sodipodi:nodetypes="csccscc"
3943+ id="path5361"
3944+ d="M 14.375479,32.558794 C 14.375479,32.558794 15.592355,37.45777 10.51915,37.50376 C 8.0888743,37.525507 8.5866723,41.509781 8.5866723,41.509781 L 39.433139,41.478634 C 39.433139,41.478634 39.851577,37.611393 37.410922,37.566053 C 32.423455,37.474579 33.600393,32.496503 33.600393,32.496503 L 14.375479,32.558794 z "
3945+ style="opacity:1;color:black;fill:url(#linearGradient2308);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.88401449;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3946+ <path
3947+ sodipodi:nodetypes="ccccc"
3948+ id="path5363"
3949+ d="M 13.926195,33.027451 C 14.010206,35.2 13.641655,35.938894 12.285731,36.702682 L 36,38 C 35.047008,36.831372 33.660837,35.066666 34.038883,33.011765 L 13.926195,33.027451 z "
3950+ style="opacity:0.5;fill:url(#linearGradient2310);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
3951+ <path
3952+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#8d8d8f;stroke-width:1.88401508px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:0.43902438"
3953+ d="M 10.436202,38.661601 C 17.000465,38.66357 37.562637,38.661601 37.562637,38.661601"
3954+ id="path5365"
3955+ sodipodi:nodetypes="cc" />
3956+ <path
3957+ sodipodi:nodetypes="cc"
3958+ id="path5367"
3959+ d="M 11.134219,39.660187 C 17.146756,39.662156 36.881517,39.660187 36.881517,39.660187"
3960+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:1.88401532px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
3961+ </g>
3962+ <path
3963+ sodipodi:nodetypes="ccccccccc"
3964+ id="path5369"
3965+ d="M 3.602229,1.4999996 L 28.319154,1.4999996 C 29.631932,1.4999996 30.588653,2.4197694 30.588653,3.8361498 L 30.595753,20.072828 C 30.595753,21.162945 30.253253,21.499994 29.276792,21.499994 L 2.7228402,21.487795 C 1.9583807,21.469246 1.414291,21.169109 1.404027,20.186855 L 1.4138652,3.7151949 C 1.4138652,2.572403 2.4117826,1.4999996 3.602229,1.4999996 z "
3966+ style="fill:url(#linearGradient5147);fill-opacity:1;fill-rule:evenodd;stroke:#888a85;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
3967+ <rect
3968+ y="3.5000005"
3969+ x="3.4999971"
3970+ height="15.194118"
3971+ width="25.103695"
3972+ id="rect5371"
3973+ style="fill:url(#radialGradient5239);fill-opacity:1;fill-rule:evenodd;stroke:#204a87;stroke-width:0.99999958px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
3974+ <path
3975+ sodipodi:nodetypes="ccccc"
3976+ id="path5373"
3977+ d="M 4.0984042,4.0204313 L 4.0984042,15.748091 C 15.025941,14.866132 19.115514,9.1623492 28,8.5664313 L 28,4 L 4.0984042,4.0204313 z "
3978+ style="opacity:0.5;fill:url(#linearGradient6246);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
3979+ <path
3980+ sodipodi:nodetypes="cccsccscccc"
3981+ id="path5375"
3982+ d="M 4.056094,2.4999991 C 3.2398944,2.4999991 2.4960113,3.2952856 2.4960113,4.0741096 L 2.4960108,19.789734 C 2.4999206,20.160319 2.5869303,20.275382 2.6715202,20.346431 C 2.7561101,20.417479 2.9348114,20.473541 3.2370502,20.480806 L 28.783404,20.500002 C 29.189758,20.500002 29.318189,20.437946 29.368434,20.384824 C 29.418681,20.3317 29.504941,20.138678 29.504941,19.674554 L 29.504942,4.1892884 C 29.504942,3.0791795 28.874178,2.4999991 27.866855,2.4999991 L 4.056094,2.4999991 z "
3983+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:white;stroke-width:0.99999958;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
3984+ <g
3985+ id="g5377"
3986+ transform="matrix(1.543206e-2,0,0,1.215502e-2,29.57023,28.01728)"
3987+ style="display:inline">
3988+ <rect
3989+ y="-150.69685"
3990+ x="-1559.2523"
3991+ height="478.35718"
3992+ width="1339.6335"
3993+ id="rect6709"
3994+ style="opacity:0.40206185;color:black;fill:url(#linearGradient5478);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
3995+ <path
3996+ sodipodi:nodetypes="cccc"
3997+ id="path5380"
3998+ d="M -219.61876,-150.68038 C -219.61876,-150.68038 -219.61876,327.65041 -219.61876,327.65041 C -76.744594,328.55086 125.78146,220.48075 125.78138,88.454235 C 125.78138,-43.572302 -33.655436,-150.68036 -219.61876,-150.68038 z "
3999+ style="opacity:0.40206185;color:black;fill:url(#radialGradient2309);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
4000+ <path
4001+ style="opacity:0.40206185;color:black;fill:url(#radialGradient2311);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4002+ d="M -1559.2523,-150.68038 C -1559.2523,-150.68038 -1559.2523,327.65041 -1559.2523,327.65041 C -1702.1265,328.55086 -1904.6525,220.48075 -1904.6525,88.454235 C -1904.6525,-43.572302 -1745.2157,-150.68036 -1559.2523,-150.68038 z "
4003+ id="path5382"
4004+ sodipodi:nodetypes="cccc" />
4005+ </g>
4006+ <path
4007+ sodipodi:nodetypes="ccccccccc"
4008+ id="path5384"
4009+ d="M 3.643761,26.504783 L 28.921938,26.504783 C 29.226374,26.504783 29.788645,26.492665 30,27 L 31.5,30 C 31.5625,30.406064 31.487026,31.562501 30,31.562501 L 2.5,31.500001 C 1,31.562501 1.0652178,30.281064 1.0652178,30 L 3,27 C 3.2113561,26.492665 3.3393239,26.504783 3.643761,26.504783 z "
4010+ style="color:black;fill:url(#linearGradient3905);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:0.99999976;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
4011+ <path
4012+ sodipodi:nodetypes="ccccccccc"
4013+ id="path5386"
4014+ d="M 4.0955909,27.111942 L 28.49679,27.10614 C 28.788541,27.10614 28.820868,27.10614 29.023418,27.449588 L 30.420658,30.150759 C 30.420658,30.341029 30.185782,30.494207 29.894029,30.494207 L 2.6782341,30.500011 C 2.3864818,30.500011 2.1516056,30.346832 2.1516056,30.156562 L 3.5689622,27.45539 C 3.7715117,27.111942 3.8038386,27.111942 4.0955909,27.111942 z "
4015+ style="opacity:1;color:black;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:0.99999964;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
4016+ <path
4017+ sodipodi:nodetypes="csssssssccssssssssssssccccssscccccccccssssssssssssccsssssssssccccccc"
4018+ id="path5388"
4019+ d="M 4.9039459,26.500588 C 4.9019723,26.502459 4.9057445,26.514939 4.9039459,26.516406 C 4.89444,26.51889 4.8714034,26.528697 4.8616746,26.532224 C 4.8584281,26.533516 4.8437789,26.530815 4.840539,26.532224 C 4.8373165,26.533749 4.8225981,26.546397 4.8194034,26.548041 C 4.8130911,26.551565 4.8043634,26.559861 4.7982678,26.563859 C 4.7952901,26.565977 4.7800294,26.57744 4.7771322,26.579677 C 4.7743261,26.582033 4.7587013,26.593017 4.7559967,26.595495 C 4.7139608,26.641114 4.6696929,26.720423 4.6080475,26.816941 L 3.1646057,29.221226 C 3.1646057,29.224233 3.1644578,29.234029 3.1646057,29.237043 C 3.1648991,29.240062 3.1641691,29.249843 3.1646057,29.25286 C 3.1651831,29.255877 3.1638899,29.265668 3.1646057,29.268679 C 3.1663094,29.274683 3.1835077,29.294359 3.1857413,29.300313 C 3.1869871,29.303274 3.184369,29.31319 3.1857413,29.316132 C 3.1902312,29.324886 3.2013114,29.339269 3.2068769,29.347766 C 3.2127868,29.356161 3.2211123,29.37137 3.2280125,29.379402 C 3.230418,29.382033 3.2466397,29.392637 3.2491481,29.395219 C 3.2517571,29.39775 3.2675765,29.408562 3.2702837,29.411038 C 3.287102,29.425545 3.313719,29.446427 3.3336905,29.45849 C 3.3370984,29.460423 3.3513413,29.472456 3.3548262,29.474308 C 3.3655167,29.479116 3.3855128,29.485766 3.3970973,29.490126 C 3.4750042,29.516899 3.5780713,29.537579 3.6718601,29.537579 L 18.650036,29.537579 L 18.586629,26.500592 L 5.1153018,26.500588 C 5.0709049,26.500588 5.0221446,26.49941 4.9884883,26.500588 C 4.9806133,26.500623 4.9547729,26.500899 4.9462171,26.500588 C 4.9436075,26.500603 4.9274517,26.500458 4.9250814,26.500588 C 4.9232514,26.502034 4.9059195,26.498718 4.9039459,26.500588 z M 19.83363,26.500592 L 19.897036,27.512921 L 23.553495,27.512921 L 23.38441,26.500592 L 19.83363,26.500592 z M 24.652546,26.500592 L 25.413428,29.537579 L 28.795124,29.537579 C 28.888912,29.537579 28.991979,29.516899 29.069886,29.490126 C 29.081471,29.485766 29.101467,29.479116 29.112157,29.474308 C 29.115641,29.472456 29.129884,29.460423 29.133293,29.45849 C 29.153265,29.446427 29.179882,29.425545 29.1967,29.411038 C 29.199407,29.408562 29.215227,29.39775 29.217835,29.395219 C 29.220344,29.392637 29.236565,29.382033 29.238971,29.379402 C 29.245871,29.37137 29.254196,29.356161 29.260107,29.347766 C 29.265672,29.339269 29.276752,29.324886 29.281242,29.316132 C 29.282614,29.31319 29.279996,29.303274 29.281242,29.300313 C 29.283476,29.294359 29.300674,29.274683 29.302378,29.268679 C 29.303093,29.265668 29.3018,29.255877 29.302378,29.25286 C 29.302814,29.249843 29.302083,29.240062 29.302378,29.237043 C 29.302527,29.234029 29.302378,29.224233 29.302378,29.221226 L 28.119129,26.816941 C 28.057483,26.720424 28.013215,26.641114 27.97118,26.595495 C 27.968475,26.593017 27.95285,26.582033 27.950044,26.579677 C 27.947147,26.57744 27.931886,26.565977 27.928908,26.563859 C 27.922812,26.559861 27.914085,26.551565 27.907773,26.548041 C 27.904579,26.546397 27.88986,26.533749 27.886638,26.532224 C 27.883397,26.530815 27.868747,26.533516 27.865502,26.532224 C 27.855773,26.528697 27.832737,26.51889 27.823231,26.516406 C 27.812787,26.51452 27.796296,26.503902 27.780959,26.500588 C 27.773263,26.49907 27.745738,26.501448 27.738688,26.500588 C 27.705031,26.49941 27.656271,26.500588 27.611875,26.500588 L 24.652546,26.500592 z M 20.679054,28.525249 L 20.002715,29.537579 L 23.891664,29.537579 L 23.04624,28.525249 L 20.679054,28.525249 z "
4020+ style="color:black;fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:#babdb6;stroke-width:0.99999923;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
4021+ <rect
4022+ style="color:black;fill:url(#radialGradient3248);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4023+ id="rect5390"
4024+ width="1"
4025+ height="1"
4026+ x="5"
4027+ y="26"
4028+ rx="0.26516503"
4029+ ry="0.26516503" />
4030+ <rect
4031+ style="color:black;fill:url(#radialGradient3245);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4032+ id="rect5392"
4033+ width="1"
4034+ height="1"
4035+ x="7"
4036+ y="26"
4037+ rx="0.26516503"
4038+ ry="0.26516503" />
4039+ <rect
4040+ style="color:black;fill:url(#radialGradient3242);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4041+ id="rect5394"
4042+ width="1"
4043+ height="1"
4044+ x="9"
4045+ y="26"
4046+ rx="0.26516503"
4047+ ry="0.26516503" />
4048+ <rect
4049+ style="color:black;fill:url(#radialGradient3239);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4050+ id="rect5396"
4051+ width="1"
4052+ height="1"
4053+ x="11"
4054+ y="26"
4055+ rx="0.26516503"
4056+ ry="0.26516503" />
4057+ <rect
4058+ style="color:black;fill:url(#radialGradient3236);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4059+ id="rect5398"
4060+ width="1"
4061+ height="1"
4062+ x="13"
4063+ y="26"
4064+ rx="0.26516503"
4065+ ry="0.26516503" />
4066+ <rect
4067+ style="color:black;fill:url(#radialGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4068+ id="rect5400"
4069+ width="1"
4070+ height="1"
4071+ x="15"
4072+ y="26"
4073+ rx="0.26516503"
4074+ ry="0.26516503" />
4075+ <rect
4076+ style="color:black;fill:url(#radialGradient3230);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4077+ id="rect5402"
4078+ width="1"
4079+ height="1"
4080+ x="17"
4081+ y="26"
4082+ rx="0.26516503"
4083+ ry="0.26516503" />
4084+ <rect
4085+ style="color:black;fill:url(#radialGradient3224);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4086+ id="rect5404"
4087+ width="1"
4088+ height="1"
4089+ x="4"
4090+ y="27"
4091+ rx="0.26516503"
4092+ ry="0.26516503" />
4093+ <rect
4094+ style="color:black;fill:url(#radialGradient3221);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4095+ id="rect5406"
4096+ width="1"
4097+ height="1"
4098+ x="6"
4099+ y="27"
4100+ rx="0.26516503"
4101+ ry="0.26516503" />
4102+ <rect
4103+ style="color:black;fill:url(#radialGradient3218);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4104+ id="rect5408"
4105+ width="1"
4106+ height="1"
4107+ x="8"
4108+ y="27"
4109+ rx="0.26516503"
4110+ ry="0.26516503" />
4111+ <rect
4112+ style="color:black;fill:url(#radialGradient3215);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4113+ id="rect5410"
4114+ width="1"
4115+ height="1"
4116+ x="10"
4117+ y="27"
4118+ rx="0.26516503"
4119+ ry="0.26516503" />
4120+ <rect
4121+ style="color:black;fill:url(#radialGradient3212);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4122+ id="rect5412"
4123+ width="1"
4124+ height="1"
4125+ x="12"
4126+ y="27"
4127+ rx="0.26516503"
4128+ ry="0.26516503" />
4129+ <rect
4130+ style="color:black;fill:url(#radialGradient3209);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4131+ id="rect5414"
4132+ width="1"
4133+ height="1"
4134+ x="14"
4135+ y="27"
4136+ rx="0.26516503"
4137+ ry="0.26516503" />
4138+ <rect
4139+ style="color:black;fill:url(#radialGradient3206);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4140+ id="rect5416"
4141+ width="1"
4142+ height="1"
4143+ x="16"
4144+ y="27"
4145+ rx="0.26516503"
4146+ ry="0.26516503" />
4147+ <rect
4148+ style="color:black;fill:url(#radialGradient3203);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4149+ id="rect5418"
4150+ width="1"
4151+ height="1"
4152+ x="18"
4153+ y="27"
4154+ rx="0.26516503"
4155+ ry="0.26516503" />
4156+ <rect
4157+ style="color:black;fill:url(#radialGradient3200);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4158+ id="rect5420"
4159+ width="1"
4160+ height="1"
4161+ x="5"
4162+ y="28"
4163+ rx="0.26516503"
4164+ ry="0.26516503" />
4165+ <rect
4166+ style="color:black;fill:url(#radialGradient3197);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4167+ id="rect5422"
4168+ width="1"
4169+ height="1"
4170+ x="7"
4171+ y="28"
4172+ rx="0.26516503"
4173+ ry="0.26516503" />
4174+ <rect
4175+ style="color:black;fill:url(#radialGradient3194);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4176+ id="rect5424"
4177+ width="1"
4178+ height="1"
4179+ x="9"
4180+ y="28"
4181+ rx="0.26516503"
4182+ ry="0.26516503" />
4183+ <rect
4184+ style="color:black;fill:url(#radialGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4185+ id="rect5426"
4186+ width="1"
4187+ height="1"
4188+ x="11"
4189+ y="28"
4190+ rx="0.26516503"
4191+ ry="0.26516503" />
4192+ <rect
4193+ style="color:black;fill:url(#radialGradient3188);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4194+ id="rect5428"
4195+ width="1"
4196+ height="1"
4197+ x="13"
4198+ y="28"
4199+ rx="0.26516503"
4200+ ry="0.26516503" />
4201+ <rect
4202+ style="color:black;fill:url(#radialGradient3185);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4203+ id="rect5430"
4204+ width="1"
4205+ height="1"
4206+ x="15"
4207+ y="28"
4208+ rx="0.26516503"
4209+ ry="0.26516503" />
4210+ <rect
4211+ style="color:black;fill:url(#radialGradient3182);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4212+ id="rect5432"
4213+ width="1"
4214+ height="1"
4215+ x="17"
4216+ y="28"
4217+ rx="0.26516503"
4218+ ry="0.26516503" />
4219+ <rect
4220+ style="color:black;fill:url(#radialGradient3176);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4221+ id="rect5434"
4222+ width="1"
4223+ height="1"
4224+ x="4"
4225+ y="29"
4226+ rx="0.26516503"
4227+ ry="0.26516503" />
4228+ <rect
4229+ style="color:black;fill:url(#radialGradient3173);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4230+ id="rect5436"
4231+ width="1"
4232+ height="1"
4233+ x="6"
4234+ y="29"
4235+ rx="0.26516503"
4236+ ry="0.26516503" />
4237+ <rect
4238+ style="color:black;fill:url(#radialGradient3170);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4239+ id="rect5438"
4240+ width="1"
4241+ height="1"
4242+ x="8"
4243+ y="29"
4244+ rx="0.26516503"
4245+ ry="0.26516503" />
4246+ <rect
4247+ style="color:black;fill:url(#radialGradient3167);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4248+ id="rect5440"
4249+ width="1"
4250+ height="1"
4251+ x="10"
4252+ y="29"
4253+ rx="0.26516503"
4254+ ry="0.26516503" />
4255+ <rect
4256+ style="color:black;fill:url(#radialGradient3164);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4257+ id="rect5442"
4258+ width="1"
4259+ height="1"
4260+ x="12"
4261+ y="29"
4262+ rx="0.26516503"
4263+ ry="0.26516503" />
4264+ <rect
4265+ style="color:black;fill:url(#radialGradient3161);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4266+ id="rect5444"
4267+ width="1"
4268+ height="1"
4269+ x="14"
4270+ y="29"
4271+ rx="0.26516503"
4272+ ry="0.26516503" />
4273+ <rect
4274+ style="color:black;fill:url(#radialGradient3158);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4275+ id="rect5446"
4276+ width="1"
4277+ height="1"
4278+ x="16"
4279+ y="29"
4280+ rx="0.26516503"
4281+ ry="0.26516503" />
4282+ <rect
4283+ style="color:black;fill:url(#radialGradient3155);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4284+ id="rect5448"
4285+ width="1"
4286+ height="1"
4287+ x="18"
4288+ y="29"
4289+ rx="0.26516503"
4290+ ry="0.26516503" />
4291+ <rect
4292+ style="color:black;fill:url(#radialGradient3264);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4293+ id="rect5450"
4294+ width="1"
4295+ height="1"
4296+ x="21"
4297+ y="26"
4298+ rx="0.26516503"
4299+ ry="0.26516503" />
4300+ <rect
4301+ style="color:black;fill:url(#radialGradient3266);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4302+ id="rect5452"
4303+ width="1"
4304+ height="1"
4305+ x="20"
4306+ y="27"
4307+ rx="0.26516503"
4308+ ry="0.26516503" />
4309+ <rect
4310+ style="color:black;fill:url(#radialGradient3268);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4311+ id="rect5454"
4312+ width="1"
4313+ height="1"
4314+ x="22"
4315+ y="27"
4316+ rx="0.26516503"
4317+ ry="0.26516503" />
4318+ <rect
4319+ style="color:black;fill:url(#radialGradient3270);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4320+ id="rect5456"
4321+ width="1"
4322+ height="1"
4323+ x="21"
4324+ y="28"
4325+ rx="0.26516503"
4326+ ry="0.26516503" />
4327+ <rect
4328+ style="color:black;fill:url(#radialGradient3272);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4329+ id="rect5458"
4330+ width="1"
4331+ height="1"
4332+ x="23"
4333+ y="28"
4334+ rx="0.26516503"
4335+ ry="0.26516503" />
4336+ <rect
4337+ style="color:black;fill:url(#radialGradient3274);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4338+ id="rect5460"
4339+ width="1"
4340+ height="1"
4341+ x="20"
4342+ y="29"
4343+ rx="0.26516503"
4344+ ry="0.26516503" />
4345+ <rect
4346+ style="color:black;fill:url(#radialGradient3276);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4347+ id="rect5462"
4348+ width="1"
4349+ height="1"
4350+ x="22"
4351+ y="29"
4352+ rx="0.26516503"
4353+ ry="0.26516503" />
4354+ <rect
4355+ style="color:black;fill:url(#radialGradient3292);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4356+ id="rect5464"
4357+ width="1"
4358+ height="1"
4359+ x="26"
4360+ y="26"
4361+ rx="0.26516503"
4362+ ry="0.26516503" />
4363+ <rect
4364+ style="color:black;fill:url(#radialGradient3294);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4365+ id="rect5466"
4366+ width="1"
4367+ height="1"
4368+ x="25"
4369+ y="27"
4370+ rx="0.26516503"
4371+ ry="0.26516503" />
4372+ <rect
4373+ style="color:black;fill:url(#radialGradient3296);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4374+ id="rect5468"
4375+ width="1"
4376+ height="1"
4377+ x="27"
4378+ y="27"
4379+ rx="0.26516503"
4380+ ry="0.26516503" />
4381+ <rect
4382+ style="color:black;fill:url(#radialGradient3298);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4383+ id="rect5470"
4384+ width="1"
4385+ height="1"
4386+ x="26"
4387+ y="28"
4388+ rx="0.26516503"
4389+ ry="0.26516503" />
4390+ <rect
4391+ style="color:black;fill:url(#radialGradient3300);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4392+ id="rect5472"
4393+ width="1"
4394+ height="1"
4395+ x="28"
4396+ y="28"
4397+ rx="0.26516503"
4398+ ry="0.26516503" />
4399+ <rect
4400+ style="color:black;fill:url(#radialGradient3302);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4401+ id="rect5474"
4402+ width="1"
4403+ height="1"
4404+ x="25"
4405+ y="29"
4406+ rx="0.26516503"
4407+ ry="0.26516503" />
4408+ <rect
4409+ style="color:black;fill:url(#radialGradient3304);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
4410+ id="rect5476"
4411+ width="1"
4412+ height="1"
4413+ x="27"
4414+ y="29"
4415+ rx="0.26516503"
4416+ ry="0.26516503" />
4417+ </g>
4418+ </g>
4419+ </g>
4420+</svg>

Subscribers

People subscribed via source and target branches