Compare commits

...

314 Commits

Author SHA1 Message Date
Jonathan White
42cfe01ad2 Fix WIX packaging with beta builds 2019-01-30 22:26:33 -05:00
Jonathan White
5a34f90319 Update translations
* Corrected use of QCoreApplication::translate -> QObject::tr
* Corrected plural usage in EntryAttachmentsWidget.cpp
2019-01-30 20:54:35 -05:00
Jonathan White
8bfc539234 Merge pull request #2659 from keepassxreboot/cmake_cleanup
Cleanup CMakeFiles and revert Dockerfile changes
2019-01-30 19:45:41 -05:00
Jonathan White
b56ef2b758 Fix typo in release-tool 2019-01-30 16:25:45 -05:00
Jonathan White
37f63406c4 Softer warning message for pre-release builds 2019-01-30 15:17:50 -05:00
Jonathan White
c8a99ee3a4 Revert commit c682b4 because it broke appimages 2019-01-30 15:03:07 -05:00
Jonathan White
21d1e981ca Cleanup CMakeFiles prior to release
* Remove Git revision finding code in favor of a simple command call: git rev-parse --short=7 HEAD
* Added GIT_HEAD_OVERRIDE to explicitly define the hash for the current commit in case git is not available 
* Made WIX default over NSIS in release tool 
* Rename version.h to git-info.h
2019-01-30 15:03:03 -05:00
Jonathan White
7f3ce65d96 Merge pull request #2610 from brainplot/performance-fixes
Performance fixes
2019-01-30 10:26:37 -05:00
Gianluca Recchia
0dac53df54 Restore formatting 2019-01-30 09:50:11 -05:00
Gianluca Recchia
c01e14c879 Wrap static literal strings with QStringLiteral
The strings in the deprecation map are never modified in the program and
they're known at compile time. An internal resizable buffer is not
needed for these strings so we can allocate them statically.
2019-01-30 09:50:11 -05:00
Gianluca Recchia
2cf837801d Avoid creation of temporary containers 2019-01-30 09:50:10 -05:00
Gianluca Recchia
39b96c13e8 Avoid copying QSharedPointers when not needed 2019-01-30 09:50:10 -05:00
Gianluca Recchia
6df9c6f9b2 Remove unused variable 2019-01-30 09:50:10 -05:00
Gianluca Recchia
ffea029001 Replace QMap with QHash when the key is a pointer
QHash gives faster lookups than QMap when the key is a pointer.
2019-01-30 09:50:10 -05:00
Gianluca Recchia
9a5bbea2e4 Use QFileInfo's exists() static method
The exists() static method is documented to be faster than its
equivalent member method.

See https://doc.qt.io/qt-5/qfileinfo.html#exists-1
2019-01-30 09:50:06 -05:00
Sami Vänttinen
891f67a1cd Select group when adding credentials from browser extension (#2637) 2019-01-30 09:48:22 -05:00
Weslly
779b529da2 Update checking feature (#2648)
* Check on startup (toggleable setting) and manually
* Option to check for pre-releases (eg, 2.4.0-beta1)
* Only included if WITH_XC_NETWORKING is enabled
2019-01-30 09:11:50 -05:00
Jonathan White
5c9b062f13 Remove redundant issue templates 2019-01-28 23:29:33 -05:00
Jonathan White
1989b86c60 Add release preview bug report & revert previous commit 2019-01-28 23:25:46 -05:00
Jonathan White
f8b21d8d16 Add release preview bug report template 2019-01-28 23:18:55 -05:00
Constantine Grantcharov
c682b48fb9 Refactoring of Dockerfile
- reorganized the libraries for better readability
- added logic to clean-up apt-cache after fetch inorder to shrink layer
size; in-line with Docker best practices
2019-01-28 22:46:42 -05:00
Louis-Bertrand Varin
d74c8a30db Update README after KeePassHTTP deprecation. 2019-01-28 22:40:44 -05:00
Jonathan White
1d24b52fa6 Allow for KDF seeds between 8 and 32 bytes
Correcting undocumented feature from KeePass2
Fixes #2581
2019-01-28 22:40:11 -05:00
Jonathan White
f446774605 Prevent use of wayland theme on Linux
* Wayland theme is buggy yet enforced by default
on Qt 5.11+ on Gnome desktop environment
* Resolves #2006
2019-01-28 22:39:20 -05:00
Jonathan White
7e1b16250c Performed project-wide code formatting
* Updated format CMake command to properly
ignore new directories and files
* Added output when command is run
* Resolves #2623
2019-01-28 22:38:59 -05:00
Jonathan White
c74664097b Fix crash when canceling save of new database (#2601)
* Fix crash when canceling save of new database
* Standardize use of DatabaseWidget::save() function
* Close new database tabs that are "discarded"
* Fixes #2604. autoSaveOnExit setting
* Re-implement autosave functionality
2019-01-25 07:20:39 -05:00
Sami Vänttinen
d66299260c Clearer error messages for KeePassXC-Browser (#2622) 2019-01-24 22:45:30 -05:00
Gianluca Recchia
395a88a5ef Prevent post-compilation Qt downgrades (#2576)
* Abort the app if a Qt downgrade is detected

The app will now exit immediately if it was compiled with a Qt version
higher than the one present on the machine.

* Add function for checking the Qt version at runtime

* Re-register global D-Bus menu only if DE is Unity
2019-01-24 22:45:05 -05:00
Jonathan White
b21936f94d Correct issues with issue templates 2019-01-21 20:54:45 -05:00
Jonathan White
1bb5a5794d Split issue templates into bug & feature request 2019-01-21 20:50:32 -05:00
AlexJoss
cbf92598e2 Add gui dialog when merge makes no changes (#2551)
* Add gui dialog when merge makes no changes
* Add gui dialog when merge makes changes
2019-01-21 14:28:37 -05:00
Sami Vänttinen
0da9efdbd4 Fix updating reference passwords from KeePassXC-Browser (#2218)
* Allow updating reference passwords

* Fix function change after refactor
2019-01-21 14:24:57 -05:00
Carlo Teubner
94430c300b CLI: fix missing check for correct credentials (#2629)
* CLI: fix missing check for correct credentials

Before this fix, most/all CLI commands had incorrect behaviour when bad
credentials were supplied: they would carry on regardless, with
potentially catastrophic results.  In particular, the "add" subcommand
seemed to corrupt the database.  "ls" would always report an empty
database.  Haven't tested any others.

Also fixed a related missing check specific to the "merge" subcommand.
2019-01-21 14:24:29 -05:00
Jonathan White
b59fd6d06a Merge pull request #2109 from hicknhack-software/feature/sharing_groups
Implement group synchronization feature
2019-01-19 10:03:21 -05:00
Jonathan White
18e234aefc Fixed storing trust of share and persistent message 2019-01-19 09:31:27 -05:00
Jonathan White
8c5da624e5 KeeShare code formatting and spelling correction 2019-01-18 23:22:04 -05:00
Jonathan White
9b4a680f7e Merge branch 'develop' into feature/sharing_groups 2019-01-16 22:54:36 -05:00
Jonathan White
a8e266129a Corrected formatting and cleanup 2019-01-16 22:53:29 -05:00
louib
726bbb2d94 We should output to stderr on EXIT_FAILURE (#2558)
Making sure we use stderr to output the help
message when there is an invalid number of
arguments, or when there's any error related
to the arguments.
2019-01-16 12:32:06 -05:00
boppybibbles
d09ca076dc Toolbar and tool buttons style. (#2357)
* Toolbar and tool buttons style.

- Add ability to change toolbar state and tool buttons style via
application settings widget.
- Save/restore toolbar state on app start/finish.
- Resolves #2343.

* Implicitly convert enum to QVariant
2019-01-16 11:04:32 -05:00
Sami Vänttinen
f8c6c9f72c Fix native hiding of macOS windows (#2583) 2019-01-16 11:03:54 -05:00
Carlo Teubner
d6ce6b85d5 Edit entry widget: password generator: fix flicker (#2584)
When using the password generator inside the Edit Entry screen and
clicking the 'Accept' button, a new password would briefly be shown
before the password generator was hidden (even though the original
generated password would be applied to the entry).

This issue was only visible when passwords were shown in plain text.

Note that this is purely a cosmetic issue.
2019-01-16 11:03:33 -05:00
Sami Vänttinen
b6bb2ca06a Fix macOS makefiles for cli and proxy (#2580) 2019-01-16 11:03:11 -05:00
sajolida
16d32c59ba Give visual feedback while starting (#2593)
Adds  StartupNotify to the .desktop file to provide proper launch feedback.
See freedesktop spec https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
2019-01-11 09:26:51 +01:00
Jonathan White
d11bb247b3 Simplify CMakeLists 2019-01-10 07:57:13 -07:00
Christian Kieschnick
c954c95da4 Fixed BulkFileWatcher multi signal problem
BulkFileWatcher emitted multiple file change signals (like
QFileSystemWatcher) for the watched files. Introduced a delay by waiting
until the end of the event loop to aggregate signals emitted by
QFileSystemWatcher before emitting custom signals.
2019-01-09 16:25:35 +01:00
Christian Kieschnick
a978880b0b Fixed QuaZip for windows, renaming
QuaZip should now usable under windows (fixed include in FindQuaZip)

Renamed the representation from secure and unsecure to signed and
unsigned
2019-01-07 12:02:21 +01:00
Christian Kieschnick
383b8b77eb Implemented feedback regarding build and ui
Changed build options to use only WITH_XC_KEESHARE and
WITH_XC_KEESHARE_SECURE - WITH_XC_KEESHARE_INSECURE remains as internal
variable to highlight differences (may allow to build schemes later)

Message widget in KeeShare settings for groups is not closeable anymore
2019-01-07 10:38:38 +01:00
Jonathan White
f46062cc4a Minor bug fixes and formatting 2019-01-06 11:06:41 -05:00
Christian Kieschnick
2bfe66e840 Another attempt to make GCC happy 2019-01-04 12:38:34 +01:00
Christian Kieschnick
51d63f0e83 Fixed GCC issues for const initialization
Fixed issues reported by GCC for initialization of const variables
2019-01-04 12:28:36 +01:00
Christian Kieschnick
b204451d06 More ci issues (missing initialize for const)
Fixed issues detected in TestSharing
2019-01-04 12:11:20 +01:00
Christian Kieschnick
6e25da6a19 Fixed issues detected by test suite and ci
Fixed serialization for KeeShareSettings::ScopedCertificate
Fixed tests for KeeShareSettings serialization
Fixed tests Cli features - tests translation for recycle bin since the
tests are executed with the system locale
Fixed initialization issue in ShareObserver
2019-01-04 12:04:46 +01:00
Christian Kieschnick
ba604390d2 Fixed ci builds
ubuntu:14.04 does not have quazip5 libraries in the standard repository, therefore only insecure builds are created using the ci server
2019-01-04 11:03:15 +01:00
Christian Kieschnick
080b02e9d5 KeeShare uses only one flag - checks for QuaZip
Changed flag for KeeShare to
* enable insecure sharing in all cases
* enable secure sharing if QuaZip was found
2019-01-04 09:33:00 +01:00
Christian Kieschnick
3d02013513 Changed KeeShareSettings to explicitly ask
KeeShareSettings now allow to trust, untrust or ask on next import from
a specific publisher with a specific container
2019-01-03 18:22:41 +01:00
Christian Kieschnick
2e18388825 Fixed bug in FileWatcher, improved unsafe sharing
BulkFileWatcher didn't recognize added files in observed directory

Improved UI for unsecured sharing only (hide certificate ui, added
warnings and adjusted indicators)
2019-01-03 17:50:36 +01:00
Christian Kieschnick
d4c391deb2 Splitted KeeShare into secure and insecure parts
KeeShare is now supported in a secure and insecure flavor (set
CMake-Flags accordingly to allow or disallow the corresponding import
and exports)
2019-01-03 10:05:08 +01:00
Christian Kieschnick
52dcc2855e Fixed signal slot connections
Fixed connection to renamed CustomData::customDataModified() signal
Fixed connection to renamed Database::databaseModified() signal
Fixed connection to renamed Group::groupModified() signal
2019-01-02 09:14:34 -05:00
Jonathan White
21de6f6163 Merge branch 'develop'
Conflicts:
	src/core/Tools.cpp
	src/sshagent/SSHAgent.cpp
2018-12-30 16:32:57 -05:00
JTL
dd5665c656 Multiple macOS fixes and include keepassxc-cli in DMG (#2165)
* Fixes including keepassxc-cli when building KeePassXC dmg on Mac.
resolves #1697
* Fix Qt search path and Properties display on macOS
* Simplify packaging POST_BUILD fixups
* Various fixes to get cli to run on macos
* Correct cli tests on macOS
* Several macOS related GUI test fixes
2018-12-28 18:32:25 -05:00
Jonathan White
b96b86bfa7 Cleanup and replumb back to functional state 2018-12-28 17:54:52 -05:00
George Shakhnazaryan
b1ff346f63 Allow Enter key to select recent DB on OS X
* Override `keyPressEvent`on WelcomeWidget on OS X to `openDatabaseFromFile`.

openDatabaseFromFile is already invoked via the QListWidget::itemActivated signal,
  but this signal doesn't fire on OS X for Enter.
QListWidget::itemActivated activates on an OS specific activation key. [1]
On Windows/X11, this is Enter, which lets the user easily
  navigate with just the keyboard.
On OS X, this is Ctrl+O, which is already bound to Open Database. This means that itemActivated cannot fire via the keyboard.

Per StackOverflow [2], the recommended solution is to catch
the enter/return key press manually.

This seems like a common problem with Qt. [3] [4]

[1] https://doc.qt.io/archives/qt-4.8/qlistwidget.html#itemActivated
[2] https://stackoverflow.com/questions/31650780/when-does-a-qtreeview-emit-the-activated-signal-on-mac
[3] https://forum.qt.io/topic/36147/pyside-itemactivated-not-triggered-on-mac-os-x-with-return-key
[4] https://github.com/dolphin-emu/dolphin/pull/6099
2018-12-25 16:00:02 -05:00
Toni Spets
c34b0069ff SSH Agent: Add support for OpenSSH for Windows (#1994)
* Fixed missing includes in Bootstrap.cpp
2018-12-25 14:28:02 -05:00
varjolintu
5488f1bfc3 Switch browser integration to use native raising of windows 2018-12-24 18:17:56 -05:00
Wojtek Gumuła
c630214915 Warn user if deleting entries that are referenced. (#1744)
On warning, references can be replaced with original values or ignored.
Removal process can be also skipped for each conflicting entry. Resolves #852.
2018-12-24 18:15:46 -05:00
Kyle Kneitinger
4d4c839afa Customize buttons on MessageBox and confirm before recycling (#2376)
* Add confirmation prompt before moving groups to the recycling bin

Spawn a yes/no QMessage box when "Delete Group" is selected on a group
that is not already in the recycle bin (note: the prompt for deletion
from the recycle bin was already implemented).  This follows the same
pattern and language as entry deletion.

Fixes #2125

* Make prompts for destructive operations use action words on buttons

Replace yes/no, yes/cancel (and other such buttons on prompts that cause
data to be destroyed) use language that indicates the action that it is
going to take. This makes destructive/unsafe and/or irreversible operations
more clear to the user.

Address feedback on PR #2376

* Refactor MessageBox class to allow for custom buttons

Replaces arguments and return values of type QMessageBox::StandardButton(s)
with MessageBox::Button(s), which reimplements the entire set of
QMessageBox::StandardButton and allows for custom KeePassXC buttons,
such as "Skip". Modifies all calls to MessageBox functions to use
MessageBox::Button(s).

Addresses feedback on #2376

* Remove MessageBox::addButton in favor of map lookup

Replaced the switch statement mechanism in MessageBox::addButton with
a map lookup to address CodeFactor Complex Method issue. This has a
side-effect of a small performance/cleanliness increase, as an
extra QPushButton is no longer created/destroyed (to obtain it's label
text) everytime a MessageBox button based on QMessageBox::StandardButton
is created; now the text is obtained once, at application start up.
2018-12-19 23:14:11 -05:00
louib
8ac9d0a131 Add create command to keepassxc-cli (#2540)
* Add tests for CLI::Create
2018-12-19 23:10:46 -05:00
Jonathan White
9e2be34897 Merge branch 'develop'
Conflicts:
	CMakeLists.txt
	cmake/CLangFormat.cmake
	snapcraft.yaml
	src/CMakeLists.txt
	src/core/Database.cpp
	src/core/Database.h
	src/core/Tools.cpp
	src/crypto/CryptoHash.h
	src/crypto/ssh/ASN1Key.h
	src/crypto/ssh/OpenSSHKey.cpp
	src/format/Kdbx4Reader.cpp
	src/gui/DatabaseTabWidget.cpp
	src/gui/DatabaseTabWidget.h
	src/gui/DatabaseWidget.cpp
	src/gui/DatabaseWidget.h
	src/gui/DetailsWidget.cpp
	src/gui/DetailsWidget.ui
	src/gui/EditWidgetProperties.cpp
	src/gui/EntryPreviewWidget.cpp
	src/gui/EntryPreviewWidget.ui
	src/gui/FileDialog.cpp
	src/gui/dbsettings/DatabaseSettingsDialog.cpp
	src/gui/dbsettings/DatabaseSettingsDialog.h
	src/gui/group/EditGroupWidget.cpp
	src/gui/group/EditGroupWidget.h
	src/sshagent/ASN1Key.h
	src/sshagent/OpenSSHKey.cpp
	src/sshagent/SSHAgent.cpp
	tests/CMakeLists.txt
2018-12-18 22:28:56 -05:00
varjolintu
a070f1bce7 Handle retrieving credentials from HTTP Basic Auth 2018-12-11 15:34:32 -05:00
louib
cb3c4893dc Move unlockDatabase to CLI/Utils (#2539)
Move unlockDatabase from Database to to cli/Utils
2018-12-11 16:49:51 +01:00
Carlo Teubner
b6eeabab5e KeePass2Reader: fix error message logic (#2523) 2018-12-02 10:05:54 -05:00
Carlo Teubner
bdee748a6a Make Entry::m_tmpHistoryItem a QScopedPointer (#2524)
* Make m_tmpHistoryItem a QScopedPointer

Most of the time, `m_tmpHistoryItem` should be null by the time an
`Entry` is destroyed. However, if a caller ever calls `beginUpdate()`
without later calling `endUpdate()` -- perhaps because an exception was
throw in the meantime -- it may not be null. This change avoids a memory 
leak in that case.

Found via https://lgtm.com/projects/g/keepassxreboot/keepassxc/alerts
2018-12-01 16:08:55 -05:00
Carlo Teubner
1af293847c LayeredStream dtor: fully qualify 'close()' call
`close()` is a virtual function. Since we are calling it from a
destructor, make it clear that we are specifically calling the base
class (`QIODevice`) implementation, as opposed to an implementation in
any derived class.

[Found by lgtm.com](https://lgtm.com/projects/g/keepassxreboot/keepassxc/alerts)
2018-12-01 14:07:10 -05:00
Janek Bevendorff
9be538a5f6 Update translations from Transifex 2018-12-01 10:54:55 +01:00
Jonathan White
294188dea1 Fix typo in EditEntryWidget after code cleanup #2 2018-11-28 21:51:57 -05:00
Jonathan White
c66f293f1e Merge pull request #2443 from brainplot/code-cleanup
Code cleanup and performance improvements - Part 2
2018-11-28 20:03:33 -05:00
Gianluca Recchia
e81841550b Correct checks for containers' emptiness 2018-11-28 18:29:15 -05:00
Gianluca Recchia
fc930bae69 Restore correct formatting
Many lines were not conformant with the project's formatting rules.
This patch should fix all formatting and whitespace issues in the code
base.
A clang-format directive was put around the connect() calls containing
SIGNALs and SLOTs whose signatures would be denormalized because of the
formatting rules.
2018-11-28 18:29:15 -05:00
Gianluca Recchia
f9625189cb Fix typo in parameter name
A typo in a parameter name caused an inconsistency between declaration
and definition of a function.
2018-11-28 18:29:14 -05:00
Gianluca Recchia
a9fa8915d9 Use QVariant::toUrl() instead of QVariant::value<QUrl>() 2018-11-28 18:29:14 -05:00
Gianluca Recchia
9d106d6bfc Remove unused variables 2018-11-28 18:29:13 -05:00
Gianluca Recchia
b39522f874 Avoid allocating temporary containers 2018-11-28 18:29:05 -05:00
louib
49b82ea6a2 Global const for KeyFileOption (CLI) (#2505) 2018-11-28 16:15:15 -05:00
Jonathan White
1a2721529d Correct simultaneous saving with Yubikey
* Move mutex lock to right before challenge call and wait for up to 1 second for unlock
* Fix bug where ALREADY_RUNNING was interpreted as success and causing database corruption
2018-11-28 16:14:17 -05:00
Jonathan White
d84ba23c81 Correct refactor issues with entry selection and search (#2518)
* Align entryview selection change signals with groupview
* Eliminate redundent and confusing signals/slots
* Correct group selection canceling search
2018-11-28 16:13:56 -05:00
louib
fff0f11b33 Adding --quiet option to the CLI. (#2507) 2018-11-28 11:24:12 -05:00
Lantizia
4e49de1afb Ability to set 7-digit TOTP codes from the UI (#2517) 2018-11-28 11:23:06 -05:00
Jonathan White
a67cac1322 Address comments 2018-11-24 17:31:20 -05:00
Jonathan White
4aab93084a Update Github templates 2018-11-24 17:31:20 -05:00
Kyle Kneitinger
a90a577ee1 Add favicon fetch button next to entry's url edit textbox (#2439)
When WITH_XC_NETWORKING is defined, create a QToolButton beside the Edit Entry -> Entry -> URL, which when pressed, acts as though the Edit Entry -> Icon -> Download Favicon button is pressed.  This button is disabled (grayed-out) when the URL text is empty, and enabled when the text is present.

Fixes #936

* Add favicon download button 
* Remove the progress dialog that appears when
downloading an entry's URL's favicon since (when working correctly) it disappears before it can be read. When downloading icons from the button
located next to the URL text box, display a message panel that confirms the download was a success.

* Do not show successful icon download msg if icon alread exists
2018-11-24 17:30:55 -05:00
Janek Bevendorff
3c362ac822 Refactor DatabaseOpenWidget/Dialog and Auto-Type Database unlocking.
This patch removes redundant lock widget members of the DatabaseWidget
and consolidates all unlocking functionality into a single
DatabaseOpenWidget (with the exception of KeePass1OpenWidget).
Distinction between different unlock actions is now done via a dedicated
Intent enum class instead of using individual widgets.

Further, the DatabaseUnlockDialog has been generalized so that it is
usable for unlock intents other than just Auto-Type and is now also
used for merging databases which is less confusing to the user.

The KeePassXC main window is no longer a parent of the
DatabaseUnlockDialog and has the Qt::ForeignWindow flag set, which
should cause fewer issues with Auto-Type trying to type into KeePassXC
after unlock instead of the intended target window.

In addition, its instance has been moved into the DatabaseTabWidget
class so that it is no longer bound to individual DatabaseWidgets,
potentially allowing for database selection during Auto-Type. The actual
selection has not yet been implemented, but Auto-Type has been adjusted
to use the currently selected tab instead of the first one as an
intermediary improvement.
2018-11-24 15:51:05 +01:00
Jonathan White
ff7191eef3 Re-implement AutoOpen functionality after refactor (#2504)
The database refactor in #2491 removed auto-open functionality.
2018-11-23 19:24:59 +01:00
Janek Bevendorff
785a64cc3b Fix bugs introduced by database refactor #2491 (#2503)
* Fix SSHAgent identity removal on database lock
* Refactor storage and manipulation of SSHAgent keys to streamline process with multiple db's
* Clear password field when widget is hidden, resolves #2502
2018-11-23 07:49:55 -05:00
Janek Bevendorff
d612cad09a Refactor Database and Database widgets (#2491)
The Database, DatabaseWidget, and DatabaseTabWidget classes share many responsibilities in inconsistent ways resulting in impenetrable and unmaintainable code and a diverse set of bugs and architecture restrictions. This patch reworks the architecture, responsibilities of, and dependencies between these classes.

The core changes are:

* Move loading and saving logic from widgets into the Database class
* Get rid of the DatabaseManagerStruct and move all the information contained in it into the Database
* Let database objects keep track of modifications and dirty/clean state instead of handing this to external widgets
* Move GUI interactions for loading and saving from the DatabaseTabWidget into the DatabaseWidget (resolves #2494 as a side-effect)
* Heavily clean up DatabaseTabWidget and degrade it to a slightly glorified QTabWidget
* Use QSharedPointers for all Database objects
* Remove the modifiedImmediate signal and replace it with a markAsModified() method
* Implement proper tabName() method instead of reading back titles from GUI widgets (resolves #1389 and its duplicates #2146 #855)
* Fix unwanted AES-KDF downgrade if database uses Argon2 and has CustomData
* Improve code

This patch is also the first major step towards solving issues #476 and #2322.
2018-11-22 11:47:31 +01:00
Jonathan White
917c4cc18b Merge pull request #1797 from keepassxreboot/feature/better-search
Implement advanced search
2018-11-17 11:51:27 -05:00
Jonathan White
340076974e Correct logic error in EntrySearcher and add more tests 2018-11-17 09:55:57 -05:00
Jonathan White
880c3aeb34 Add search help pop-up
* Support ! modifier (same as '-')
* Create reusable PopupHelpWidget as self-contained popup that can
be positioned around a parent widget and will follow the movement
and sizing of the window
* Eliminated KEEPASSXC_MAIN_WINDOW macro and replaced with
getMainWindow() function
* Add tests to cover search help show/hide
2018-11-17 09:04:15 -05:00
Jonathan White
d6ffee5e99 Implement search auto-clear and goto group
* Search clears if the search box does not have focus for 5 minutes (fixes #2178)
* Goto group from search results after double clicking the group name (fixes #2043)
2018-11-17 09:02:36 -05:00
Jonathan White
4b983251cb Add advanced search term parser
* Support quoted strings & per-field searching
* Support regex and exact matching
* Simplify search sequence
* Make search widget larger
* Add regex converter to Tools namespace
2018-11-17 08:49:50 -05:00
Jonathan White
4b57fcb563 Clean up Entry Model/View code 2018-11-17 08:49:47 -05:00
Jonathan White
d8d758f0e1 Streamlined searcher code
* Remove searching of group title and notes
* End search when selecting a new group
* Correct entry searcher tests to align with new code
2018-11-17 08:49:02 -05:00
Jonathan White
a5e7da67d8 Correct CI badges in readme 2018-11-17 08:28:23 -05:00
Jonathan White
ee9c71e11e Fix multiple issues with entries and keyboard shortcuts (#2431)
* Cleanup entry change notification with entryview focus in/out
* Change Open URL shortcut to CTRL+SHIFT+U to conform with an "action" 
including SHIFT
* Change Copy URL shortcut to CTRL+U to conform with "copy" without SHIFT
* Entry specific toolbar and menu items are disabled unless the entry
row has focus (prevents unintended actions)
* Reword security setting for password visibility in entry edit view
* Add shortcut to hide/unhide usernames (CTRL+SHIFT+B)
* Organize entry menu

* Fix #1588 - show keyboard shortcuts in context menu
* Fix #2403 - Change auto-type shortcut to CTRL + SHIFT + V
* Fix #2096 - Add (CTRL+F) to search bar background
* Fix #2031 & Fix #2266 - add shortcut to hide/unhide passwords (CTRL+SHIFT+C)
* Fix #2166 - Add reveal password button to entry preview
2018-11-16 10:00:59 -05:00
louib
f06742cf41 CLI Merge: Only save database file when modified. (#2466)
* Merge: detect if database was changed.
* Adding unit test.
* Only saving on change.
2018-11-09 21:59:16 -05:00
Felix Fontein
a7dd9f19f4 CLI: add commands to show and copy TOTP to clipboard (#2454)
* Add CLI commands show --totp and totp-clip for handling TOTPs, resolves #2429.
* Adding tests for new CLI TOTP commands
* Update keepassxc-cli man page.
2018-11-09 21:58:42 -05:00
varjolintu
91bccf75d5 Include older settings type to conversion 2018-11-09 19:17:28 -05:00
louib
c339470496 Updating CLI man page authorship (#2456) 2018-11-09 19:15:50 -05:00
louis
b1d481893e Adding tests for modified signal on merge. 2018-11-09 19:15:15 -05:00
Weslly
d7f5a15f68 Add missing header to cmakelists when building without YubiKey 2018-11-09 19:14:43 -05:00
louib
91160c5f36 Document list -R option. 2018-11-09 19:10:16 -05:00
louis
156b480f93 Better error message for invalid db file 2018-11-09 19:09:55 -05:00
Jonathan White
82bf00de73 Merge pull request #2433 from brainplot/code-cleanup
* Remove redundant headers from the build system
* Pin AutoTypeAction's vtable to a translation unit
* Remove redundant check for the version flag
* Improve performance of a few for-loops
* Replace old for-loops with range-based for-loops
* Remove redundant null-checks for pointer deletion 
* Reduce QString::arg function call overhead
* Reduce number of unneeded copies when calling functions
* Enhance readability when accessing static members 
* Convert to nullptrs where necessary
* Reduce unnecessary copies using std::move
* Normalize signature of SIGNAL() and SLOT()
* Add missing `override` keyword for some member functions which override functions of their base class
2018-10-31 13:32:21 -04:00
Gianluca Recchia
e06eae423e Add missing 'override' for overridden functions 2018-10-31 15:16:04 +01:00
Gianluca Recchia
0f604aa8c7 Normalize signature of SIGNAL() and SLOT()
See https://stackoverflow.com/q/18091058/6335279
2018-10-31 15:16:04 +01:00
Gianluca Recchia
379c41d20c Reduce unnecessary copies using move semantics 2018-10-31 15:16:04 +01:00
Gianluca Recchia
896a66e6d8 Improve readability and type-safety
Use nullptr instead of 0 or NULL to initialize a null pointer. In some
cases, readability was enhanced by replacing 0 with more meaningful
values according to the type of the pointer being initialized.
2018-10-31 15:16:04 +01:00
Gianluca Recchia
7208635502 Enhance readability when accessing static members
The sole purpose of a few objects was calling a static member of the
class they belonged to. This is not needed, as you can access a static
member with the <class_name>::<member_name> notation.
2018-10-31 15:16:04 +01:00
Gianluca Recchia
da9afd3f6f Reduce number of unneeded copies
This patch aims at reducing the number of copies for obejcts that could
be referenced rather than copied, because they're not modified during
the computation.
2018-10-31 15:16:04 +01:00
Gianluca Recchia
a67a574b89 Reduce function call overhead
The arg() function of the QString class has a variable length argument
which allows to reduce the number of chained calls to the same function.
With proper formatting, readability is not affected.
2018-10-31 14:23:06 +01:00
Gianluca Recchia
18fd20f898 Remove redundant null-checks for pointer deletion
Deleting a null pointer is defined behavior and results in a no-op at
the assembly level, so it's perfectly safe.
2018-10-31 14:23:06 +01:00
Gianluca Recchia
4ac1601696 Replace old for-loops with range-based for-loops 2018-10-31 14:23:06 +01:00
Gianluca Recchia
4876beabed Improve performance of a few for-loops
Some for-loops needlessly copied the collection they were looping over.
2018-10-31 14:23:06 +01:00
Gianluca Recchia
e2ee82169c Remove redundant check for the version flag
Just a couple lines above, the application would already exit if the
version option is set. This extra check is not needed.
2018-10-31 14:19:01 +01:00
Gianluca Recchia
7a823e8dc7 Pin AutoTypeAction's vtable to a translation unit
AutoTypeAction class had no out-of-line definitions and because of this
the compiler would place its vtable everywhere the class is used.
By simply defining the virtual destructor in the .cpp file, the issue
goes away.

Also, a few classes derived from AutoTypeAction had missing 'override'
qualifiers, which have now been added.
2018-10-31 14:19:01 +01:00
Gianluca Recchia
09fbb6d35a Remove redundant headers from the build system
Headers are not to be placed amongst the source files in the CMake
script. The preprocessor and the linker will take care of glue all the
files together. Also, the "include_directories()" statement at the top
of the file already tells CMake where to look for all the needed
header files.
2018-10-31 14:19:01 +01:00
st-sloth
4ae5ddf80f Add more expiration presets 2018-10-30 11:09:08 -04:00
hidden by cloudflare
2ad8036823 Added Linux, MacOS, and Windows support for Tor Browser. (#2387)
Add path for native-messaging-hosts on Linux, Windows, and macOS for Tor Browser
2018-10-30 11:07:59 -04:00
Darwin Shameran
5bf4f51389 Don't obscure password field after invalid password attempt if setting is off (#2353) 2018-10-30 09:16:49 -04:00
Gianluca Recchia
4e1d3bfd73 Extract the OS event filter implementation (#2422) 2018-10-30 08:46:12 -04:00
Jonathan White
fa687f246e Fix issues with group functions (#2410) 2018-10-30 08:42:35 -04:00
Janek Bevendorff
7263dcddfe Fix stdin/stdout encoding on Windows. (#2425)
QTextStream uses the system default locale, but this breaks in
various situations: (1) It does not work on the native Windows shell
(cmd.exe, Powershell), since the default Windows locale is Windows-1252,
but the shell uses Windows-850. (2) It also breaks on *nix systems where
the locale is Latin1 or C, which is the case for most CI systems or
build servers.

We allow overriding the detected codec by setting the ENCODING_OVERRIDE
environment variable, but otherwise prefer Windows-850 on Windows and
UTF-8 on any other system, even if LANG is set to something else.

This resolves #2413
2018-10-28 19:55:00 +01:00
Nathan Merritt
c9cab250c7 Only check for scheme matches when an entry has a scheme (#2426) 2018-10-28 13:51:20 -04:00
Gianluca Recchia
f31d65bdaf Replace deprecated parts of the code (#2419)
Performing a dev build against the latest version of Qt failed
because of some deprecated members. They have been replaced
according to the Qt documentation.

Further, Q_OS_MACOS is now the only macro available to identify a
machine running macOS, the others are now deprecated.
See https://doc.qt.io/qt-5/qtglobal.html#Q_OS_OSX and
https://doc.qt.io/qt-5/qtglobal.html#Q_OS_MAC.
2018-10-26 15:19:04 +02:00
Sami Vänttinen
efdb43dc53 Browser connection keys and rules are stored in custom data instead of attributes (#1497) 2018-10-24 10:49:53 -04:00
Kyle Kneitinger
cfa1eca249 Make preview panel expiration date use local time (#2382)
Adds call to toLocalTime() to convert expiration date string
to correct timezone instead of UTC, which matches the date string
in the database view.
2018-10-24 08:11:58 -04:00
Kyle Kneitinger
d990f12f56 Convert preview panel close button from checkbox to momentary (#2384)
The {group,entry}CloseButton QToolButton, had the "checkable" property set.
This caused it to act like a toggle flip flop instead of a momentary push
button.  After removing that property, the signal it was changed to use
was clicked() instead of toggled(bool).  Trigger upon click is
consistent with the rest of the UI's momentary buttons.
2018-10-24 08:11:18 -04:00
Gianluca Recchia
1d9f46ebc5 Fix the position of the Q_REQUIRED_RESULT macro (#2411)
The Q_REQUIRED_RESULT macro was appended to a few method declarations.
It should've been prepended instead.
2018-10-24 08:09:12 -04:00
Chih-Hsuan Yen
6ea869bb18 Replace all .svgz in paths to .svg (#2405) 2018-10-24 08:08:37 -04:00
Sami Vänttinen
5c92082f7c Add warning message to browser integration settings when keepassxc-proxy is not found (#2396) 2018-10-23 09:03:18 -04:00
Janek Bevendorff
b45f0e3e46 Enable high-DPI scaling to support 4k screens.
This enables coordinate system scaling for high-DPI
displays, which enforces correct proportions even
on small 4k displays. The icons are scaled up without
interpolation, which makes them crisp, but a bit
pixelated. A new scalable icon set will solve this
problem, but is not scope of this patch.

Resolves #548, #1381, #1710, #1888

In addition, this patch enforces the KeePassXC icon
theme for the KMessageBox close icon, since using
the system theme produces very ugly icons on some
Linux systems.
2018-10-21 20:34:46 +02:00
Jonathan White
a44138dd5c Multiple fixes to MainWindow and some cleanup
* Fix MainWindow startup when minimize to tray was enabled
* Reduce duplicate code in DatabaseWidget.cpp
* Fix snapcraft build dependencies
* Add support for CTRL+TAB, CTRL+PGUP, CTRL+SHIFT+TAB, CTRL+PGDN to control database tabs from any focus location
* Add CTRL+SHIFT+M shortcut to minimize to tray
* Allow minimize instead of app exit without tray icon
2018-10-20 15:30:48 +02:00
Jonathan White
c749f7018e Merge pull request #2351 from keepassxreboot/feature/coverage
Improve test coverage, reformat CMakeFiles, and cleanup CLI
2018-10-19 19:44:36 -04:00
Janek Bevendorff
77adbef401 Reformat CMakeLists.txt files 2018-10-19 22:16:44 +02:00
Janek Bevendorff
0ca7fd369a Implement review feedback 2018-10-19 22:16:44 +02:00
Janek Bevendorff
bea31f9bcc Rename TestClock to MockClock and move it to the mock directory 2018-10-19 21:49:55 +02:00
Janek Bevendorff
108e4efc8a Fix tests on Windows 2018-10-19 21:49:55 +02:00
Janek Bevendorff
113c8eb702 Add CLI tests and improve coding style and i18n
The CLI module was lacking unit test coverage and showed some severe
coding style violations, which this patch addresses.

In addition, all uses of qCritical() with untranslatble raw char*
sequences were removed in favor of proper locale strings. These are
written to STDERR through QTextStreams and support output
redirection for testing purposes. With this change, error messages don't
depend on the global Qt logging settings and targets anymore and go
directly to the terminal or into a file if needed.

This patch also fixes a bug discovered during unit test development,
where the extract command would just dump the raw XML contents without
decrypting embedded Salsa20-protected values first, making the XML
export mostly useless, since passwords are scrambled.

Lastly, all CLI commands received a dedicated -h/--help option.
2018-10-19 21:49:54 +02:00
Janek Bevendorff
18b22834c1 Update and fix test coverage report generation
Generation of unit test coverage reports used to be quite complicated
and required a lot of different settings, including a custom CMake
build type. This patch updates the coverage CMake module to only
require -DWITH_COVERAGE=ON to be set on a normal Debug build in order
to create a coverage target.

This patch also moves away from lcov in favor of gcovr, since lcov appears
to be broken in GCC 8. However, the routines for generating lcov reports
still exist, so provided lcov receives updates and there is sufficient
reason to switch back, it is easy to do so.
2018-10-19 21:45:53 +02:00
Sami Vänttinen
b8d2d5d877 Choose database for saving or updating entries from KeePassXC-Browser (#2391) 2018-10-19 14:44:08 -04:00
Adolfo E. García
bb16dc6d01 Add QR code generator for TOTP export (#1167)
* Resolves #764
* Add libqrencode and qtsvg dependencies 
* Ensure QR code remains square
* Auto-close QR code dialog when database is locked
* Add databaseLocked() Signal to databaseWidget
* Correct otpauth URI output in Totp::writeSettings(...)
2018-10-19 14:42:49 -04:00
varjolintu
80749958b7 Fix checking subdomains 2018-10-18 08:14:42 -04:00
林博仁(Buo-ren, Lin)
d3069eb734 Add Git tracking ignore rules for snapcraft
This patch implements gitignore(5) rules for snapcraft, this prevents
snap build artifacts from listed as untracked files.

[ci skip]
2018-10-16 14:27:31 -04:00
Jake Howard
ca328242bc Don't show application if we're only showing the help / version 2018-10-14 16:20:28 -04:00
Kyle Kneitinger
265325057a Create config file deprecation mechanism & rename Details->Preview (#2371)
Rename UI elements involved with the bottom preview panel to use the
terminology "entry preview panel" instead of "details view" or "preview
panel". Change all associated variables, widgets, and classes to
reference EntryPreviewPanel. Create Config::upgrade() function and
deprecation mapping to help rename/remove previous config settings in a
clean manner.

Fixes #2327
2018-10-08 21:11:44 -04:00
vi-n
4ff63c2bf5 Add a CLI option to list elements recursively (#2345) 2018-10-03 19:18:34 +02:00
Jonathan White
66a36b3af1 Add WITH_APP_BUNDLE to INSTALL.md 2018-10-03 10:12:19 -04:00
Sami Vänttinen
aa7216b9d9 Fix TouchID compiling on macOS (#2332)
Pull request #1952 introduced a compilation error on macOS due to missing header includes.
2018-10-03 14:16:32 +02:00
Christian Kieschnick
28e7540096 Update ci files
* Removed libquazip-headers from trusty ci images
Trusty does not provide libquazip-headers (they are part of
libquazip-dev most likely)
* Bump rebuild counter
2018-10-01 10:51:13 -04:00
Michael Starke
1a42c58975 Add documentation for sharing groups
* Add Sharing section to Quickstart Guide
* Add pictures and text in quickstart to match extended functionality
2018-10-01 10:39:53 -04:00
Christian Kieschnick
eca9c658f4 Add sharing of groups between databases
* Add source folder keeshare for sharing with corresponding define WITH_XC_KEESHARE
* Move common crypto parts to src/crypto/ssh
* Extended OpenSSHKey
* Move filewatching to own file (currently in two related classes DelayedFileWatcher and BulkFileWatcher)
* Small improvements for style and code in several classes
* Sharing is secured using RSA-Keys which are generated on demand
* Publisher signs the container using their private key
* Client can verify the signed container and choose to decline an import,
import only once or trust the publisher and automatically import all
data of this source henceforth
* Integration of settings into Group-Settings, Database-Settings and Application-Settings
* Introduced dependency QuaZip as dependency to allow combined export of
key container and the (custom format) certificate
2018-10-01 10:39:37 -04:00
Jonathan White
c1e9f45df9 Introduce synchronize merge method
* Create history-based merging that keeps older data in history instead of discarding or deleting it
* Extract merge logic into the Merger class
* Allows special merge behavior
* Improve handling of deletion and changes on groups
* Enable basic change tracking while merging
* Prevent unintended timestamp changes while merging
* Handle differences in timestamp precision
* Introduce comparison operators to allow for more sophisticated comparisons (ignore special properties, ...)
* Introduce Clock class to handle datetime across the app

Merge Strategies:
* Default (use inherited/fallback method)
* Duplicate (duplicate conflicting nodes, apply all deletions)
* KeepLocal (use local values, but apply all deletions)
* KeepRemote (use remote values, but apply all deletions)
* KeepNewer (merge history only)
* Synchronize (merge history, newest value stays on top, apply all deletions)
2018-09-30 09:36:39 -04:00
Darwin Shameran
b40e5686dc Add option to not show password placeholder when field is empty (#2333)
* Add option to not show password placeholder when field is empty
* Set the option to show an empty passwd field instead of dots to true by default
2018-09-29 07:44:23 -04:00
Janek Bevendorff
a4c6529d60 Migrate to linuxdeploy for building AppImages
AppImage recipes are the legacy method for building AppImages, whereas
linuxdeploy is meant to replace them. It takes care of finding and
deploying all needed libraries and Qt plugins automagically, but it's
still under heavy development, so some manual work using appimagetool
and a few fixes are required to make it work for KeePassXC.

This patch moves building of AppImages directly into the release-tool,
both as a separate module (release-tool appimage) as well as a flag
(--appimage) for the build module. The release and CI Dockerfiles were
updated accordingly to support the new build process. The release
Dockerfile also received a Qt update to version 5.10.1.

In theory, it is now possible to use release-tool appsign for embedding
PGP signatures into AppImages, but it fails in practice due to ELF
header size limitations.
2018-09-29 13:12:09 +02:00
vasporig
61d7e6bc6c Do polling based file watching for NFS on linux, resolves #1799 2018-09-25 21:25:52 -04:00
Weslly
44c9469221 Remove obsolete database repair feature 2018-09-25 21:20:47 -04:00
Kyle Kneitinger
d4112fe2bf Use length of existing password for the password generator (#2318)
Add optional length parameter to PasswordGeneratorWidget::reset()
(default=0), which when >0 sets the legth SpinBox's value to the value
passed in. The EditEntryWidget already called reset() when the password
was known, so the current length was just added to this call (accounts
for empty passwords)

If entry edit is cancelled, return the password generator length to the
application default or last committed length if available. This is done
by calling reseting the password generator in EditEntryWidget::cancel()
when the edit page is being closed

Fixes #2180
2018-09-25 20:44:19 -04:00
William Gathoye
e7c5e17a8e Convert all svgz to svg (#2113) 2018-09-25 16:12:47 -04:00
Janek Bevendorff
5295a68906 Enable color output in Docker images 2018-09-25 21:12:47 +02:00
Janek Bevendorff
e443cde452 Add a new database settings wizard
This patch implements a new database wizard to guide users through the process
of setting up a new database and choosing sane encryption settings.

It also reimplements the master key settings to be more
user-friendly. Users can now add, change, or remove individual composite
key components instead of having to set all components at once. This
avoids confusion about a password being reset if the user only wants to
add a key file.

With these changes comes a major refactor of how database composite keys and key
components are handled. Copying of keys is prohibited and each key
exists only once in memory and is referenced via shared pointers. GUI
components for changing individual keys are encapsulated into separate
classes to be more reusable. The password edit and generator widgets
have also been refactored to be more reusable.
2018-09-25 21:12:47 +02:00
Janek Bevendorff
e4ded388b4 Merge pull request #2317 from fishman/develop
Fix icons not using default theme
2018-09-23 18:43:04 +02:00
Reza Jelveh
cbe81d2d1b Fix icons not using default theme
KeepassXC tries to load the theme icon first and then falls back to the internal icon unless the check is explicitely disabled. Remove the check from most icons

Fixes #756
2018-09-22 21:29:09 +02:00
Weslly
f8b997bcf4 Add support for opening file:// urls (#2311)
* Add support for opening file:// urls
* Open file urls without file:// scheme
2018-09-20 23:49:56 -04:00
Kyle Kneitinger
341635f6bd Replace Google with DuckDuckGo as the optional fallback favicon fetcher (#2309)
* Replace Google with DuckDuckGo for optional fallback favicon fetch URL
Modify the work initially done in #36, and most recently modified in #1786,
to use DuckDuckGo's https://icons.duckduckgo.com/ip3/www.example.com.ico
favicon endpoint.

Fixes #2258

* Close failed favicon fetch progress bars

Name the UrlFetchProgressDialog() with the corresponding URL in order to
be identified by name by its parent when the failed request is handeled
in EditWidgetIcons::fetchFinished(). fetchFinished() retrieves the
relevant UrlFetchProgressDialog() and calls close() on it.

Fixes: #2265
2018-09-20 21:52:51 -04:00
Jonathan White
a64d2ec716 Revert appveyor addition and DeployQt cmake 2018-09-19 12:25:39 -04:00
Gianluca Recchia
f1a13a1f2b Remove duplicate statement from CMakeLists.txt 2018-09-18 22:50:56 -04:00
mosin
1a9511da29 Update INSTALL.md (#2299)
* add build option for SSH Agent
2018-09-18 22:45:44 -04:00
brad2014
32456e1b24 Fix typo in Group::findGroupByPath found by sonarcloud (#2233)
* Group::findGroupByPath now limited to search from root (matching current usage)
* Factors out Group::findGroupByPathRecursion (on prenormalized strings).
2018-09-18 22:44:39 -04:00
Max Kolhagen
d9fcdd2920 Add TouchID support on macOS 2018-09-18 22:42:05 -04:00
Jonathan White
5aeb30e845 Merge pull request #2249 from keepassxreboot/fix/snapcraft-build
Snapcraft update and bump to 2.4.0-preview
2018-09-18 10:43:04 -04:00
Jonathan White
c8f18e49f1 Disable Wayland due to Qt bug
https://forum.snapcraft.io/t/problem-launching-qt-snaps-in-wayland/7055/5
2018-09-16 10:28:39 -04:00
Jonathan White
4ce42fa6d4 Bumped version number to 2.4.0-preview 2018-09-16 10:28:39 -04:00
Jonathan White
c88390e3be Support building snaps on Ubuntu 18.04 and Launchpad 2018-09-16 10:28:34 -04:00
Jonathan White
c0aa1ef145 Merge pull request #2284 from keepassxreboot/refactor/static-init
Refactor browser settings and TOTP
2018-09-16 08:29:51 -04:00
Jonathan White
823a916220 Fix TOTP epoch time; add null checks for settings 2018-09-15 17:08:39 -04:00
Jonathan White
1dc9f10c7f Complete refactor of TOTP integration
* Eliminate TOTP logic from GUI elements
* Consolidate TOTP functionality under the Totp namespace
* Eliminate guessing about state and encoders
* Increased test cases
* Add entry view column for TOTP [#2132]
* General code cleanup, reduction of unnecessary steps, separation of concerns
* Rename SetupTotpDialog to TotpSetupDialog for consistency
2018-09-15 12:10:26 -04:00
Jonathan White
b74fb3e208 Convert private static vars into member vars
* CSV Import and Entry Model
2018-09-15 12:10:25 -04:00
Jonathan White
53a17c2355 Reduce use of static vars in browser plugin
* Convert BrowserSettings into instanced class
* Moved HostInstaller init into class constructor
2018-09-15 12:10:15 -04:00
varjolintu
57e60681f2 Fix Match URL scheme setting 2018-09-11 09:49:33 -04:00
Michal
7592f40de2 Some Python code improvements (#2264)
* Usage of "enumerate()" with start parameter
* Use the with keyword when dealing with file objects
According to: https://docs.python.org/3.6/tutorial/inputoutput.html
* String format using ".format()"
* Chained comparisons are faster than using the "and" operator
2018-09-02 18:31:00 -04:00
TheZ3ro
08a36b4d40 Prevent Klipper from storing secrets in clipboard history (#1969) 2018-08-29 11:13:55 -04:00
Jonathan White
ca27fb06d5 Merge branch 'master'
Conflicts:
	INSTALL.md
	release-tool
	src/browser/BrowserOptionDialog.cpp
	src/browser/BrowserService.cpp
	src/browser/BrowserService.h
	src/browser/NativeMessagingBase.h
	src/browser/NativeMessagingHost.h
	src/core/Uuid.cpp
	src/gui/DatabaseTabWidget.cpp
	src/gui/DatabaseWidget.cpp
	src/gui/EditWidget.cpp
	src/gui/MainWindow.cpp
	src/gui/MainWindow.ui
	src/proxy/NativeMessagingHost.h
	src/sshagent/ASN1Key.cpp
2018-08-24 09:42:38 -04:00
Janek Bevendorff
8b5530d2ba Merge pull request #2229 from keepassxreboot/feature/fix-release-tool-build
Fix --snapcraft flag
2018-08-23 20:41:23 +02:00
Janek Bevendorff
a19895850c Fix --snapcraft flag 2018-08-23 19:14:52 +02:00
Jonathan White
6fe821c30e Release 2.3.4
- Show all URL schemes in entry view [#1768]
- Disable merge when database is locked [#1975]
- Fix intermittent crashes with favorite icon downloads [#1980]
- Provide potential crash warning to Qt 5.5.x users [#2211]
- Disable apply button when creating new entry/group to prevent data loss [#2204]
- Allow for 12 hour timeout to lock idle database [#2173]
- Multiple SSH Agent fixes [#1981, #2117]
- Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185]
- Fix browser proxy application not closing properly [#2142]
- Add real names and Patreon supporters to about dialog [#2214]
- Add settings button to toolbar, Donate button, and Report a Bug button to help menu [#2214]
- Enhancements to release-tool to appsign intermediate build products [#2101]
2018-08-22 11:25:04 -04:00
Jonathan White
b0812c2235 Update translations 2018-08-22 11:24:55 -04:00
Jonathan White
d6cae74176 Release 2.3.4 version bump
* Corrects INSTALL.md build instructions for Windows (#2126)
* Rephrase Qt 5.5.x warning to include on-screen keyboard combo
2018-08-22 11:23:18 -04:00
Jonathan White
67304c71a0 Enhancements to About dialog and add settings button to toolbar
* Added Patreon contributors
* Added real names to project maintainers
* Cleaned up layout
* Added settings button to main toolbar
* Added actions for "Donate" and "Report a Bug" to help menu
2018-08-20 21:27:37 -04:00
Jonathan White
bb73df5d77 Provide warning to users with Qt 5.5.x about potential crash 2018-08-19 23:39:14 -04:00
varjolintu
95a60087f9 Add browser extension links to settings page 2018-08-19 23:36:59 -04:00
varjolintu
38e48e7591 Use Chrome registry settings with Vivaldi 2018-08-19 22:45:29 -04:00
varjolintu
1d80bddde3 Quit the proxy when reading zero or less from stdin 2018-08-19 22:43:33 -04:00
Jacob Sachs
1d71059580 allow 12 hour timeout for lockDatabaseIdle 2018-08-19 22:42:24 -04:00
Jonathan White
8db604e787 Fix occasional divide by zero crash 2018-08-18 10:31:40 -04:00
Jonathan White
3b1e15ea1a Disable apply button when creating new entry/group
* Workaround to prevent data loss if apply is hit but not OK or Cancel
* Refactor required to fix this issue
2018-08-18 10:31:40 -04:00
varjolintu
d70a474bac Allows a separate ID key for browser extension association 2018-08-13 16:31:05 -04:00
Jonathan White
41ebc10c03 Corrects ordering of command/opts in cli manpage 2018-07-25 12:59:55 +02:00
Toni Spets
07efabed03 SSH Agent: Show MD5 fingerprint of keys
Fixes #2050
2018-07-16 18:45:20 -04:00
varjolintu
057cf6aed3 Handle URL port and scheme when requesting credentials 2018-07-14 17:09:41 -04:00
Jonathan White
add4ba21fa Show all url schemas in entry view (#1768)
* Show all url schemas in entry view
* Fix UUID being built improperly with invalid user input
2018-07-14 17:08:04 -04:00
Toni Spets
3727d37101 SSH Agent: Expect passphrases to be in UTF-8
The previous default was to expect passphrases to be ASCII or
rather Latin-1. It would be reasonable to expect modern keys to
use UTF-8 instead.

This is a non-breaking change if passphrases only use characters
that fall within ASCII.

Fixes #2102
2018-07-14 17:07:07 -04:00
varjolintu
c67f7afa49 Deny expired credentials 2018-07-13 09:15:22 -04:00
Jonathan White
ded0aab586 Fix typos in release tool 2018-07-10 21:43:01 -04:00
Jonathan White
4b51b39a83 Add exe signing support to release-tool
* Add automatic portable zip building
* Cleanup build variables
* Align command line parameters between modes
2018-07-09 14:06:19 -04:00
Jonathan White
470a74ee24 Merge pull request #1770 from pasdam/feature/useQuuid
Replaced Uuid with QUuid
2018-07-08 20:32:54 -04:00
Tarquin Winot
0142e070cc Add tab delimiter in CSV import. (#1842)
* Add tab delimiter in CSV import. Closes #1798
* Corrected several code style issues
2018-07-08 20:31:12 -04:00
Jonathan White
d06819eb6c Merge pull request #1881 from louib/disable_merge_when_locked
Disable merge button when db is locked.
2018-07-08 19:52:58 -04:00
Nick Fox
c19df0130b Allows printing version with -v when an instance is already running
Fixes #1362 by checking if the -v argument was used when deciding
whether to print the "keepassxc is already running" error message
2018-07-08 19:51:11 -04:00
seatedscribe
c5cd4b6783 Hotfix for #570. Select password locking if an empty password is entered 2018-07-08 19:49:01 -04:00
Jonathan White
a025bcd7db Build snaps using custom Docker image
* Added --snapcraft option to release-tool build command
2018-07-08 11:42:34 -04:00
Jonathan White
c47882b887 Fixed regression 2018-07-06 22:32:44 -04:00
pasdam
b4d806ad41 Fixed issues with initial commit 2018-07-06 22:23:52 -04:00
pasdam
ad4423d226 Replaced Uuid with QUuid 2018-07-06 22:23:49 -04:00
TheZ3ro
dcece140a0 Merge pull request #1819 from vsvyatski/develop
Remove empty context menu from the main menu
2018-07-03 22:05:46 +02:00
Vladimir Svyatski
5d3b6953af Merge remote-tracking branch 'upstream/develop' into develop 2018-06-27 23:40:20 +03:00
Toni Spets
8c70856a82 SSH Agent: Fix invalid iqmp output for RSA keys
This fixes loading RSA keys to Pageant.
2018-06-26 22:52:47 -04:00
Jonathan White
9805f2331d Add support for SonarCloud analysis 2018-06-24 19:47:24 -04:00
Jonathan White
4e7aeca3b7 Add support for SonarCloud analysis 2018-06-20 20:37:50 -04:00
Jonathan White
f9eef6d986 Merge pull request #2011 from keepassxreboot/fix/favicon-multiselect
Allow multiple image selections when adding favicons
2018-06-20 20:32:40 -04:00
Janek Bevendorff
5df8ddfc3f Merge pull request #2055 from varjolintu/title_match_removal
Remove title matching
2018-06-18 13:54:33 +02:00
varjolintu
0ad598119f Fix macOS build 2018-06-16 11:03:18 -04:00
varjolintu
fc8e0e7b19 Remove title matching 2018-06-16 08:44:08 +03:00
varjolintu
e825b55a99 Fix entry sorting by title 2018-06-15 19:52:28 -04:00
Jonathan White
f4f8be56ce Added AppVeyor and CodeCov badges 2018-06-10 23:24:02 -04:00
seregaxvm
e124f17c64 Add advanced password generator features (#1841)
* Split between simple and advanced features
* Finetune password character groups
* Support for hex passwords
2018-06-10 22:37:09 -04:00
Adolfo E. García
83917299db Add AppVeyor support (#1380) 2018-06-10 18:16:30 -04:00
Jonathan White
76102ee9f0 Correct plurals and logic gate 2018-06-09 16:58:46 -04:00
Jonathan White
2e292699b7 Add more comprehensive messages when adding custom icons
* Error messages now display for 15 seconds and are closable
* Add button is always enabled
2018-06-09 16:58:46 -04:00
Jonathan White
b07d4efe5f Allow multiple image selections when adding favicons 2018-06-09 16:58:41 -04:00
Corentin Dancette
959acb7988 update link in readme 2018-06-03 11:41:13 -04:00
Janek Bevendorff
558cb3d0b5 Merge pull request #1957 from michalkaptur/improved_tools_coverage
improved unit test coverage in Tools
2018-05-23 09:48:32 +02:00
Vladimir Svyatski
28d949fa5f Merge remote-tracking branch 'upstream/develop' into develop 2018-05-22 21:42:53 +03:00
Michal Kaptur
486b99b39d Add some unit tests to Tools
Clean up and test 3 methods from Tools:
- humanReadableFileSize
- isHex
- isBase64
2018-05-22 09:28:54 +02:00
Jonathan White
b16447b13d Fix occasional crash when favicon progress dialog is closed (#1980)
* Changed progress dialog to a true percentage calculation
* Removed some unnecessary code
2018-05-20 21:12:06 -04:00
Janek Bevendorff
b9fa06c890 Merge pull request #1975 from keepassxreboot/hotfix/prevent-locked-merge
Disable merge when database is locked
2018-05-19 07:37:45 +02:00
Jonathan White
2eb3159f8a Disable merge when database is locked 2018-05-18 17:06:38 -04:00
Janek Bevendorff
8a0aae775a Merge pull request #1971 from keepassxreboot/fix/snapcraft
Build snaps using custom Docker image
2018-05-18 10:09:27 +02:00
Jonathan White
dbc7593328 Build snaps using custom Docker image
* Added --snapcraft option to release-tool build command
2018-05-16 22:40:36 -04:00
Janek Bevendorff
e5e6e8cbd5 Merge pull request #1964 from maggu2810/qt-5.11
fix missing include for Qt 5.11
2018-05-16 10:32:49 +02:00
Markus Rathgeb
3bbc6ac0e6 fix missing include for Qt 5.11
Qt 5.11 cleanes up the internal headers and so consumers could fail by
missing includes.

See: https://bugs.gentoo.org/655844
Signed-off-by: Markus Rathgeb <maggu2810@gmail.com>
2018-05-16 10:15:30 +02:00
TheZ3ro
a6486f0adc Merge pull request #1818 from varjolintu/unix_socket_location
Change Unix socket location
2018-05-16 09:41:44 +02:00
varjolintu
bf5f82ff27 Change Unix socket location 2018-05-16 07:37:25 +03:00
Janek Bevendorff
98131c3e5e Merge pull request #1948 from yan12125/issue1909
SSH Agent: Don't mark the entry dirty when the public key is changed
2018-05-15 09:18:22 +02:00
Chih-Hsuan Yen
1d499d2f29 SSH Agent: Don't mark the entry dirty when the public key is changed
That occurs when the key is decrypted and/or added to the agent, and
neither of them indicates changes in entry data.

Fixes #1909
2018-05-12 23:01:01 +08:00
Vladimir Svyatski
30ccc102d2 Merge remote-tracking branch 'upstream/develop' into develop 2018-05-10 22:34:38 +03:00
Janek Bevendorff
dee7572c5d Merge pull request #1927 from keepassxreboot/hotfix/snapcraft
Update snapcraft to use ppa packages
2018-05-09 22:46:02 +02:00
Jonathan White
f524d51624 Update snapcraft to use ppa packages 2018-05-09 13:45:12 -04:00
Janek Bevendorff
b02bd59e0c Merge branch 'master' into develop 2018-05-09 19:25:58 +02:00
Jonathan White
aae6d09fd3 Merge branch 'master' into develop
Conflicts:
	src/CMakeLists.txt
	src/autotype/xcb/AutoTypeXCB.cpp
	src/browser/BrowserAction.cpp
	src/browser/BrowserService.cpp
	src/browser/BrowserService.h
	src/browser/BrowserSettings.h
	src/browser/NativeMessagingHost.cpp
	src/browser/NativeMessagingHost.h
	src/gui/EditWidgetIcons.cpp
	src/gui/EditWidgetIcons.h
	src/gui/MainWindow.cpp
	src/proxy/NativeMessagingHost.cpp
	tests/TestOpenSSHKey.cpp
2018-05-07 23:24:30 -04:00
louib
f25c8d3d2a Adding a GUI test. 2018-04-30 17:07:07 -04:00
TheZ3ro
5c7aaf5754 Merge pull request #1850 from varjolintu/create_totp_attribute
Pass TOTP with credential data to KeePassXC-Browser
2018-04-29 18:12:11 +02:00
louib
64917bd9fb Disable merge button when db is locked. 2018-04-27 21:29:00 -04:00
varjolintu
2110ae4d33 Create KPH attribute for browser integration 2018-04-27 11:19:02 +03:00
Vladimir Svyatski
bbfac92672 Add requested changes to PR #1819. 2018-04-10 08:27:23 +03:00
Vladimir Svyatski
2df6fd03fb Merge branch 'feature/hide-toolbar' into develop 2018-04-09 22:39:21 +03:00
Vladimir Svyatski
214f4b7dc2 Merge remote-tracking branch 'upstream/develop' into develop 2018-04-09 22:38:02 +03:00
Vladimir Svyatski
57860fc33c Fix to apply "Hide toolbar" without restart 2018-04-09 22:33:08 +03:00
Vladimir Svyatski
d843ad414a Use the "Hide toolbar" setting 2018-04-09 22:07:55 +03:00
Vladimir Svyatski
677b8caa63 Add UI setting "Hide toolbar (icons)" 2018-04-09 21:43:41 +03:00
TheZ3ro
5a84978dab Merge pull request #1814 from keepassxreboot/fix/mac-build-error
Fix build error on macOS
2018-04-06 23:12:16 +02:00
Vladimir Svyatski
ddc4b9b7d5 Remove empty context menu from the main menu 2018-04-06 23:23:52 +03:00
Weslly
586961013d Disable clang-format on Tools.cpp include order 2018-04-05 08:59:42 -03:00
Weslly
9b6c589b9c Fix build error on mac introduced on 8324d03f0a 2018-04-04 23:09:02 -03:00
TheZ3ro
ea55a2ad29 Merge pull request #1811 from varjolintu/macos_socket_location
Change socket location in macOS to temporary dir
2018-04-04 21:55:19 +02:00
varjolintu
c773d85876 Change socket location in macOS to temporary dir 2018-04-04 11:16:00 +03:00
Jonathan Hult
72bbf12747 Update link to note about HTTP in README [ci skip] (#1637) 2018-04-02 22:11:50 -04:00
TheZ3ro
dd246f1ff0 Merge pull request #1191 from louib/code_formatting
Code formatting
2018-04-02 15:52:05 +02:00
Louis-Bertrand Varin
8324d03f0a Formatting the code. 2018-03-31 16:01:30 -04:00
Louis-Bertrand Varin
74efc57369 Removed http/ from excluded dirs. 2018-03-31 12:15:51 -04:00
Louis-Bertrand Varin
3eb917055e Add ClangFormat exceptions 2018-03-31 12:15:09 -04:00
Janek Bevendorff
0b6eb3b30e Use xargs to avoid long command lines 2018-03-31 12:15:09 -04:00
Louis-Bertrand Varin
07bc9a7b4b Add ClangFormat rules 2018-03-31 12:15:09 -04:00
Jonathan White
410d88bf99 Remove KeePassHttp plugin and qhttp (#1752)
Remove KeePassHttp plugin and qhttp
2018-03-31 11:36:18 -04:00
Janek Bevendorff
bd654ea1db Merge pull request #1702 from dwilches/hotfix/1313-grey-out-apply-button
Grey out Apply button when there are no changes
2018-03-31 13:54:43 +02:00
Daniel Wilches
240939ce3b Request confirmation to discard unsaved changes
Solves #1181
2018-03-29 18:35:08 -07:00
Daniel Wilches
78ef6f0d04 Grey out Apply button when there are no changes
Resolves #1313

What this commit does:
* Whenever the Apply button is pressed, and if the save was successful, then the Apply button is disabled.
* Each subwidget used by EditEntryWidget has now a signal called `widgetUpdated` that is emitted when the widgets' internal content changes. The EditEntryWidget subscribes to that signal to know when to enable the Apply button (by calling `entryUpdated()`).
* There are some views that are not isolated in their own widgets (`m_advancedUi`, for example) so in those cases I invoked `entryUpdated()` directly whenever I detected an update:
  * some updates occur directly in a Qt widget like when editing the text of a QLineItem, so in that case I connected the widget's signals directly to the `entryUpdated()` slot.
  * some updates occur in EditEntryWidget, so in those cases the invocation to `entryUpdated()` is made as soon as the change is detected (for example when the user has confirmed an action in a dialog).

A known problem: there are some situations when the Apply button will get enabled even if there are no changes, this is because the app changes the value of a field by itself so it's considered an update (for example, clicking on the "Reveal" button changes the text shown in a text field).
The solution to this can be a bit complicated: disabling temporarily the `entryUpdated()` whenever the app is going to do an action with such side-effects.
So I preferred to let the Apply button get enabled in those cases.
2018-03-29 18:35:08 -07:00
Janek Bevendorff
e92d5e80ee Merge branch 'release/2.3.2' into develop 2018-03-18 01:14:42 +01:00
dinony
7e75d04055 Docs (#1749)
Update build instructions
2018-03-18 01:10:00 +01:00
Janek Bevendorff
ed2da34d7a Merge pull request #1725 from Throne3d/fix/1647-translations
Improve translation base strings
2018-03-18 00:01:27 +01:00
Edward Jones
963a7802d1 Fix pluralization of confirmation prompts 2018-03-13 20:41:16 +00:00
Edward Jones
e66adfbf68 Make more strings translatable
Includes making certain modifiers (like "[locked]") positionable, in
case languages put this before the word
2018-03-13 20:41:12 +00:00
Edward Jones
3def6a3bc4 Fix weird base strings and reduce concatenation 2018-03-13 20:40:39 +00:00
Edward Jones
e718e9f5e5 Fix file dialog filter translations 2018-03-13 19:55:37 +00:00
Thomas Luzat
46e8e3dbbc Test speedup (#1678)
* Tests: Speed up AutoType testing

Decrease default autotype delay to 1 to improve test suite speed by
seconds. This shaves multiple seconds off the whole test suite. In some
cases, the largest part.

Also, initialize config just creating the test instance, just in case
that it ever depends on the configuration values at that point already.

* Tests: Speed up Kdbx4 testing

This speeds up the Kdbx4 tests by using parameters optimized for speed
for the key derivation functions. On an i7-6700K the tests run close to
50% faster with this change (about 1.5s vs. 3s).
2018-03-08 10:20:25 +01:00
Janek Bevendorff
aa6327716f Merge branch 'master' into develop 2018-03-06 22:56:18 +01:00
Janek Bevendorff
83974732f3 Merge pull request #1641 from tycho/lto-fixup
KdbxReader::readDatabase: abort if reading magic numbers fails
2018-03-05 20:31:51 +01:00
Steven Noonan
cdd6852709 KdbxReader::readDatabase: abort if reading magic numbers fails
Building with -flto caught the fact that we were ignoring the return
value of readMagicNumbers(), which potentially left the value of 'sig2'
uninitialized.

Signed-off-by: Steven Noonan <steven@uplinklabs.net>
2018-03-05 09:12:22 -08:00
Janek Bevendorff
a06e85f6ce Merge branch 'release/2.3.1' into develop 2018-03-03 13:33:47 +01:00
Janek Bevendorff
c0cb0f9487 Merge branch 'release/2.3.1' into develop 2018-03-03 02:34:48 +01:00
Janek Bevendorff
f08a49fd0c Merge branch 'release/2.3.1' into develop 2018-03-01 18:00:11 +01:00
Thomas Klausner
3f7f1aa47f Fix build on NetBSD. (#1557)
* Fix build on NetBSD.
2018-02-28 16:31:21 +01:00
Janek Bevendorff
c167a0d190 Merge pull request #1544 from keepassxreboot/fix/compile-time
Correct compile time issues with 2.3.0
2018-02-28 11:38:23 +01:00
Jonathan White
5a90993938 Force snapcraft builds to be release builds 2018-02-27 21:42:57 -05:00
Jonathan White
e17bee8e31 Properly rename argon2 symbols on Win32 builds 2018-02-27 21:34:54 -05:00
Janek Bevendorff
3c274135ce Merge branch 'master' into develop 2018-02-27 22:41:57 +01:00
Janek Bevendorff
9bb8dd7a7a Merge branch 'release/2.3.0' into develop 2018-02-26 01:58:38 +01:00
Janek Bevendorff
70c13f919a Merge branch 'release/2.3.0' into develop 2018-02-22 14:26:24 +01:00
Janek Bevendorff
1b95efd1fa Merge branch 'release/2.3.0' into develop 2018-02-21 22:21:44 +01:00
Janek Bevendorff
0237b21aad Merge branch 'release/2.3.0' into develop 2018-02-21 17:55:08 +01:00
Janek Bevendorff
148dbc5d41 Merge branch 'release/2.3.0' into develop 2018-02-21 13:23:45 +01:00
Janek Bevendorff
d0c583b5e2 Merge branch 'release/2.3.0' into develop 2018-02-21 09:41:20 +01:00
Janek Bevendorff
b80ddef274 Merge branch 'release/2.3.0' into develop 2018-02-11 15:43:01 +01:00
Janek Bevendorff
a5745eee5d Merge branch 'release/2.3.0' into develop 2018-02-04 23:06:23 +01:00
Janek Bevendorff
c4b9d54085 Merge branch 'release/2.3.0' into develop 2018-02-04 14:10:20 +01:00
768 changed files with 287195 additions and 71414 deletions

View File

@@ -30,7 +30,7 @@ BraceWrapping:
BeforeCatch: false BeforeCatch: false
BeforeElse: false BeforeElse: false
IndentBraces: false IndentBraces: false
BreakBeforeBinaryOperators: None BreakBeforeBinaryOperators: NonAssignment
BreakBeforeBraces: Custom BreakBeforeBraces: Custom
BreakBeforeTernaryOperators: true BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true BreakConstructorInitializersBeforeComma: true

View File

@@ -94,7 +94,7 @@ The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successf
* **master** points to the latest public release * **master** points to the latest public release
* **develop** points to the development of the next release, contains tested and reviewed code * **develop** points to the development of the next release, contains tested and reviewed code
* **feature/**[name] points to a branch with a new feature, one which is candidate for merge into develop (subject to rebase) * **feature/**[name] points to a branch with a new feature, one which is candidate for merge into develop (subject to rebase)
* **hotfix/**[id]-[description] points to a branch with a fix for a particular issue ID * **hotfix/**[name] points to a branch with a fix for a particular issue ID
### Git commit messages ### Git commit messages
@@ -103,14 +103,16 @@ The Branch Strategy is based on [git-flow-lite](http://nvie.com/posts/a-successf
* Use the imperative mood ("Move cursor to…" not "Moves cursor to…") * Use the imperative mood ("Move cursor to…" not "Moves cursor to…")
* Limit the first line to 72 characters or less * Limit the first line to 72 characters or less
* Reference issues and pull requests liberally * Reference issues and pull requests liberally
* If your pull request fixes an existing issue, add "…, resolves #ISSUENUMBER" to your main commit * If your pull request fixes an existing issue, add "Fixes #ISSUENUMBER" to your pull request description
* When only changing documentation, include `[ci skip]` in the commit description
### Coding styleguide ### Coding styleguide
This project follows the [Qt Coding Style](https://wiki.qt.io/Qt_Coding_Style). All submissions are expected to follow this style. The coding style of the project is enforced using llvm's `clang-format` formatting tool. A thorough description
of the coding style can be found in the `.clang-format` file, but the main conventions are presented here.
In particular, code must stick to the following rules: Formatting can be performed automatically by calling `make format` from the `build/` directory.
Note that [formatting can be disabled on a piece of code](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#disabling-formatting-on-a-piece-of-code) if manual formatting is deemed more readable.
#### Naming convention #### Naming convention
`lowerCamelCase` `lowerCamelCase`
@@ -122,15 +124,67 @@ For names made of multiple concatenated words, the first letter of the whole is
For **C++ files** (*.cpp .h*): 4 spaces For **C++ files** (*.cpp .h*): 4 spaces
For **Qt-UI files** (*.ui*): 2 spaces For **Qt-UI files** (*.ui*): 2 spaces
#### Pointers #### Includes
```c
// Class includes
#include "MyWidget.h"
#include "ui_MyWidget.h"
// Application includes
#include "core/Config.h"
#include "core/FilePath.h"
// Global includes
#include <QWidget>
#include <stdin>
```
#### Classes
```c
// Note: order is important, stay organized!
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget* parent);
~MyWidget() override;
signals:
void alert();
public slots:
void processEvent(Event* event);
private slots:
void myEvent(Event* event);
private:
const QScopedPointer<Ui::MyWidget> m_ui;
int m_counter;
};
// Note: alignment of variable initialization
MyWidget::MyWidget(QWidget* parent)
: QWidget(parent)
, m_ui(new Ui::MyWidget())
{
}
```
#### Pointers / References
```c ```c
int* count; int* count;
const QString& string;
``` ```
#### Braces #### Braces
```c ```c
if (condition) { if (condition) {
doSomething(); doSomething();
} else {
doSomethingElse();
} }
void ExampleClass::exampleFunction() void ExampleClass::exampleFunction()
@@ -141,15 +195,18 @@ void ExampleClass::exampleFunction()
#### Switch statement #### Switch statement
```c ```c
// Note: avoid declaring variables in a switch statement
switch (a) { switch (a) {
case 1: case 1:
doSomething(); doSomething();
break; break;
default: // Note: use braces if necessary
default: {
doSomethingElse(); doSomethingElse();
break; break;
} }
}
``` ```
#### Member variables #### Member variables

View File

@@ -1,40 +0,0 @@
<!--- Provide a general summary of the issue in the title above -->
## Expected Behavior
<!--- If you're describing a bug, tell us what should happen -->
<!--- If you're suggesting a change/improvement, tell us how it should work -->
## Current Behavior
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
<!--- If suggesting a change/improvement, explain the difference from the current behavior -->
## Possible Solution
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
<!--- or ideas how to implement the addition or change -->
## Steps to Reproduce (for bugs)
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.
## Context
<!--- How has this issue affected you? What are you trying to accomplish? -->
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
## Debug Info
<!--- Paste debug info from Help → About here -->
KeePassXC - VERSION
Revision: REVISION
Libraries:
- LIBS
Operating system: OS
CPU architecture: ARCH
Kernel: KERNEL
Enabled extensions:
- EXTENSIONS

49
.github/ISSUE_TEMPLATE/bug-report.md vendored Normal file
View File

@@ -0,0 +1,49 @@
---
name: Bug Report
about: provide information about a problem
title:
labels: bug
assignees: ''
---
[TIP]: # ( Provide a general summary of the issue in the title above ^^ )
[TIP]: # ( DO NOT include screenshots of your actual database! )
## Expected Behavior
[NOTE]: # ( Tell us what you expected to happen )
## Current Behavior
[NOTE]: # ( Tell us what actually happens )
## Possible Solution
[NOTE]: # ( Not required, but suggest a fix/reason for the bug )
## Steps to Reproduce
[NOTE]: # ( Provide a link to a live example, or an unambiguous set of steps to )
[NOTE]: # ( reproduce this bug. Include code to reproduce, if relevant )
1.
2.
3.
## Context
[NOTE]: # ( How has this issue affected you? What unique circumstances do you have? )
## Debug Info
[NOTE]: # ( Paste debug info from Help → About here )
KeePassXC - VERSION
Revision: REVISION
Libraries:
- LIBS
Operating system: OS
CPU architecture: ARCH
Kernel: KERNEL
Enabled extensions:
- EXTENSIONS

View File

@@ -0,0 +1,26 @@
---
name: Feature Request
about: tell us about a new capability you want to see
title:
labels: new feature
assignees: ''
---
[TIP]: # ( Provide a general summary of the feature in the title above ^^ )
[TIP]: # ( DO NOT include screenshots of your actual database! )
## Summary
[NOTE]: # ( Provide a brief overview of what the new feature is all about )
## Desired Behavior
[NOTE]: # ( Tell us how the new feature should work, be specific )
## Possible Solution
[NOTE]: # ( Not required, but suggest ideas on how to implement the addition or change )
## Context
[NOTE]: # ( Why does this feature matter to you? What unique circumstances do you have? )

View File

@@ -0,0 +1,49 @@
---
name: Release Preview Bug report
about: report a bug with a release preview (eg, 2.4.0-beta1)
title: "[PRE-RELEASE] "
labels: PRE-RELEASE BUG
assignees: droidmonkey
---
[TIP]: # ( Provide a general summary of the issue in the title above ^^ )
[TIP]: # ( DO NOT include screenshots of your actual database! )
## Expected Behavior
[NOTE]: # ( Tell us what you expected to happen )
## Current Behavior
[NOTE]: # ( Tell us what actually happens )
## Possible Solution
[NOTE]: # ( Not required, but suggest a fix/reason for the bug )
## Steps to Reproduce
[NOTE]: # ( Provide a link to a live example, or an unambiguous set of steps to )
[NOTE]: # ( reproduce this bug. Include code to reproduce, if relevant )
1.
2.
3.
## Context
[NOTE]: # ( How has this issue affected you? What unique circumstances do you have? )
## Debug Info
[NOTE]: # ( Paste debug info from Help → About here )
KeePassXC - VERSION
Revision: REVISION
Libraries:
- LIBS
Operating system: OS
CPU architecture: ARCH
Kernel: KERNEL
Enabled extensions:
- EXTENSIONS

View File

@@ -1,34 +1,36 @@
<!--- Provide a general summary of your changes in the title above --> [TIP]: # ( Provide a general summary of your changes in the title above ^^ )
## Description ## Type of change
<!--- Describe your changes in detail --> [NOTE]: # ( Please remove all lines which don't apply. )
## Motivation and context
<!--- Why is this change required? What problem does it solve? -->
<!--- If it fixes an open issue, please link to the issue here. -->
## How has this been tested?
<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran to -->
<!--- see how your change affects other areas of the code, etc. -->
## Screenshots (if appropriate):
## Types of changes
<!--- What types of changes does your code introduce? -->
<!--- Please remove all lines which don't apply. -->
- ✅ Bug fix (non-breaking change which fixes an issue) - ✅ Bug fix (non-breaking change which fixes an issue)
- ✅ Refactor (significant modification to existing code)
- ✅ New feature (non-breaking change which adds functionality) - ✅ New feature (non-breaking change which adds functionality)
- ✅ Breaking change (fix or feature that would cause existing functionality to change) - ✅ Breaking change (fix or feature that would cause existing functionality to change)
- ✅ Documentation (non-code change)
## Description and Context
[NOTE]: # ( Describe your changes in detail, why is this change required? )
[NOTE]: # ( Describe the context of your change. Explain large code modifications. )
[NOTE]: # ( If it fixes an open issue, please add "Fixes #XXX" as necessary )
## Screenshots
[TIP]: # ( Do not include screenshots of your actual database! )
## Testing strategy
[NOTE]: # ( Please describe in detail how you tested your changes. )
[TIP]: # ( We expect new code to be covered by unit tests and documented with doc blocks! )
## Checklist: ## Checklist:
<!--- Please go over all the following points. --> [NOTE]: # ( Please go over all the following points. )
<!--- Again, remove any lines which don't apply. --> [NOTE]: # ( Again, remove any lines which don't apply. )
<!--- Pull Requests that don't fulfill all [REQUIRED] requisites are likely --> [NOTE]: # ( Pull Requests that don't fulfill all [REQUIRED] requisites are likely )
<!--- to be sent back to you for correction or will be rejected. --> [NOTE]: # ( to be sent back to you for correction or will be rejected. )
- ✅ I have read the **CONTRIBUTING** document. **[REQUIRED]** - ✅ I have read the **CONTRIBUTING** document. **[REQUIRED]**
- ✅ My code follows the code style of this project. **[REQUIRED]** - ✅ My code follows the code style of this project. **[REQUIRED]**
- ✅ All new and existing tests passed. **[REQUIRED]** - ✅ All new and existing tests passed. **[REQUIRED]**
- ✅ I have compiled and verified my code with `-DWITH_ASAN=ON`. **[REQUIRED]** - ✅ I have compiled and verified my code with `-DWITH_ASAN=ON`. **[REQUIRED]**
- ✅ My change requires a change to the documentation and I have updated it accordingly. - ✅ My change requires a change to the documentation, and I have updated it accordingly.
- ✅ I have added tests to cover my changes. - ✅ I have added tests to cover my changes.

11
.gitignore vendored
View File

@@ -10,4 +10,13 @@ release*/
*.swp *.swp
.DS_Store .DS_Store
.version .version
\.scannerwork/
/snap/.snapcraft/
/parts/
/stage/
/prime/
/*.snap
/*_source.tar.bz2

View File

@@ -1,114 +0,0 @@
#!/usr/bin/env bash
#
# KeePassXC AppImage Recipe
# Copyright (C) 2017-2018 KeePassXC team <https://keepassxc.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or (at your option)
# version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
if [ "$1" == "" ] || [ "$2" == "" ]; then
echo "Usage: $(basename $0) APP_NAME RELEASE_VERSION" >&2
exit 1
fi
if [ -f CHANGELOG ]; then
echo "This recipe must not be run from the sources root." >&2
exit 1
fi
if [ ! -d ../bin-release ]; then
echo "../bin-release does not exist." >&2
exit 1
fi
APP="$1"
LOWERAPP="$(echo "$APP" | tr '[:upper:]' '[:lower:]')"
VERSION="$2"
export ARCH=x86_64
mkdir -p $APP.AppDir
wget -q https://github.com/AppImage/AppImages/raw/master/functions.sh -O ./functions.sh
. ./functions.sh
LIB_DIR=./usr/lib
if [ -d ./usr/lib/x86_64-linux-gnu ]; then
LIB_DIR=./usr/lib/x86_64-linux-gnu
elif [ -d ./usr/lib/i386-linux-gnu ]; then
LIB_DIR=./usr/lib/i386-linux-gnu
elif [ -d ./usr/lib64 ]; then
LIB_DIR=./usr/lib64
fi
cd $APP.AppDir
cp -a ../../bin-release/* .
cp -a ./usr/local/* ./usr
rm -R ./usr/local
rmdir ./opt 2> /dev/null
# bundle Qt platform plugins and themes
QXCB_PLUGIN="$(find /usr/lib* -name 'libqxcb.so' 2> /dev/null)"
if [ "$QXCB_PLUGIN" == "" ]; then
QXCB_PLUGIN="$(find /opt/qt*/plugins -name 'libqxcb.so' 2> /dev/null)"
fi
QT_PLUGIN_PATH="$(dirname $(dirname $QXCB_PLUGIN))"
mkdir -p ".${QT_PLUGIN_PATH}/platforms"
cp -a "$QXCB_PLUGIN" ".${QT_PLUGIN_PATH}/platforms/"
cp -a "${QT_PLUGIN_PATH}/platforminputcontexts/" ".${QT_PLUGIN_PATH}/platforminputcontexts/"
cp -a "${QT_PLUGIN_PATH}/imageformats/" ".${QT_PLUGIN_PATH}/imageformats/"
get_apprun
copy_deps
# protect our libgpg-error from being deleted
mv ./opt/keepassxc-libs/lib/x86_64-linux-gnu/libgpg-error.so.0 ./protected.so
delete_blacklisted
mv ./protected.so ./opt/keepassxc-libs/lib/x86_64-linux-gnu/libgpg-error.so.0
get_desktop
get_icon
cat << EOF > ./usr/bin/keepassxc_env
#!/usr/bin/env bash
export LD_LIBRARY_PATH="..$(dirname ${QT_PLUGIN_PATH})/lib:\${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH="../opt/keepassxc-libs/lib/x86_64-linux-gnu:\${LD_LIBRARY_PATH}"
export QT_PLUGIN_PATH="..${QT_PLUGIN_PATH}:\${KPXC_QT_PLUGIN_PATH}"
# unset XDG_DATA_DIRS to make tray icon work in Ubuntu Unity
# see https://github.com/AppImage/AppImageKit/issues/351
unset XDG_DATA_DIRS
if [ "\${1}" == "cli" ]; then
shift
exec keepassxc-cli "\$@"
elif [ "\${1}" == "proxy" ]; then
shift
exec keepassxc-proxy "\$@"
elif [ -v CHROME_WRAPPER ] || [ -v MOZ_LAUNCHED_CHILD ]; then
exec keepassxc-proxy "\$@"
else
exec keepassxc "\$@"
fi
EOF
chmod +x ./usr/bin/keepassxc_env
sed -i 's/Exec=keepassxc/Exec=keepassxc_env/' org.${LOWERAPP}.${APP}.desktop
get_desktopintegration "org.${LOWERAPP}.${APP}"
cd ..
GLIBC_NEEDED=$(glibc_needed)
NO_GLIBC_VERSION=true
generate_type2_appimage -u "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-${ARCH}.AppImage.zsync"
mv ../out/*.AppImage* ../
rm -rf ../out

View File

@@ -1,3 +1,26 @@
2.4.0-preview (TBD)
=========================
This is a pre-release build, view merged PR's at
https://github.com/keepassxreboot/keepassxc/pulls?q=is%3Apr+milestone%3Av2.4.0+is%3Aclosed
2.3.4 (2018-08-21)
=========================
- Show all URL schemes in entry view [#1768]
- Disable merge when database is locked [#1975]
- Fix intermittent crashes with favorite icon downloads [#1980]
- Provide potential crash warning to Qt 5.5.x users [#2211]
- Disable apply button when creating new entry/group to prevent data loss [#2204]
- Allow for 12 hour timeout to lock idle database [#2173]
- Multiple SSH Agent fixes [#1981, #2117]
- Multiple Browser Integration enhancements [#1993, #2003, #2055, #2116, #2159, #2174, #2185]
- Fix browser proxy application not closing properly [#2142]
- Add real names and Patreon supporters to about dialog [#2214]
- Add settings button to toolbar, Donate button, and Report a Bug button to help menu [#2214]
- Enhancements to release-tool to appsign intermediate build products [#2101]
2.3.3 (2018-05-09) 2.3.3 (2018-05-09)
========================= =========================

View File

@@ -1,4 +1,4 @@
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org> # Copyright (C) 2018 KeePassXC Team <team@keepassxc.org>
# Copyright (C) 2010 Felix Geyer <debfx@fobos.de> # Copyright (C) 2010 Felix Geyer <debfx@fobos.de>
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
@@ -19,9 +19,9 @@ cmake_minimum_required(VERSION 3.1.0)
project(KeePassXC) project(KeePassXC)
if(NOT CMAKE_BUILD_TYPE) if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
"Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel." "Choose the type of build, options are: None Debug Release RelWithDebInfo Debug DebugFull Profile MinSizeRel."
FORCE) FORCE)
endif() endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
@@ -45,70 +45,92 @@ set(WITH_XC_ALL OFF CACHE BOOLEAN "Build in all available plugins")
option(WITH_XC_AUTOTYPE "Include Auto-Type." ON) option(WITH_XC_AUTOTYPE "Include Auto-Type." ON)
option(WITH_XC_NETWORKING "Include networking code (e.g. for downlading website icons)." OFF) option(WITH_XC_NETWORKING "Include networking code (e.g. for downlading website icons)." OFF)
option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF) option(WITH_XC_BROWSER "Include browser integration with keepassxc-browser." OFF)
option(WITH_XC_HTTP "Include KeePassHTTP-compatible browser integration (deprecated, implies WITH_NETWORKING)." OFF)
option(WITH_XC_YUBIKEY "Include YubiKey support." OFF) option(WITH_XC_YUBIKEY "Include YubiKey support." OFF)
option(WITH_XC_SSHAGENT "Include SSH agent support." OFF) option(WITH_XC_SSHAGENT "Include SSH agent support." OFF)
option(WITH_XC_KEESHARE "Sharing integration with KeeShare" OFF)
if(WITH_XC_HTTP) option(WITH_XC_KEESHARE_SECURE "Sharing integration with secured KeeShare containers" OFF)
message(WARNING "KeePassHTTP support has been deprecated and will be removed in a future version. Please use WITH_XC_BROWSER instead!\n" if(APPLE)
"For enabling / disabling network access code, WITH_XC_HTTP has been replaced by WITH_XC_NETWORKING.") option(WITH_XC_TOUCHID "Include TouchID support for macOS." OFF)
set(WITH_XC_NETWORKING ON CACHE BOOL "Include networking code (e.g. for downlading website icons)." FORCE)
endif() endif()
if(WITH_XC_ALL) if(WITH_XC_ALL)
# Enable all options # Enable all options
set(WITH_XC_AUTOTYPE ON) set(WITH_XC_AUTOTYPE ON)
set(WITH_XC_NETWORKING ON) set(WITH_XC_NETWORKING ON)
set(WITH_XC_BROWSER ON) set(WITH_XC_BROWSER ON)
set(WITH_XC_HTTP ON) # Deprecated set(WITH_XC_YUBIKEY ON)
set(WITH_XC_YUBIKEY ON) set(WITH_XC_SSHAGENT ON)
set(WITH_XC_SSHAGENT ON) set(WITH_XC_KEESHARE ON)
if(APPLE)
set(WITH_XC_TOUCHID ON)
endif()
endif() endif()
# Process ui files automatically from source files if(WITH_XC_KEESHARE_SECURE)
set(CMAKE_AUTOUIC ON) set(WITH_XC_KEESHARE ON)
endif()
if(WITH_XC_SSHAGENT OR WITH_XC_KEESHARE)
set(WITH_XC_CRYPTO_SSH ON)
else()
set(WITH_XC_CRYPTO_SSH OFF)
endif()
set(KEEPASSXC_VERSION_MAJOR "2") set(KEEPASSXC_VERSION_MAJOR "2")
set(KEEPASSXC_VERSION_MINOR "3") set(KEEPASSXC_VERSION_MINOR "4")
set(KEEPASSXC_VERSION_PATCH "3") set(KEEPASSXC_VERSION_PATCH "0")
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION_MAJOR}.${KEEPASSXC_VERSION_MINOR}.${KEEPASSXC_VERSION_PATCH}")
set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots") set(KEEPASSXC_BUILD_TYPE "Snapshot" CACHE STRING "Set KeePassXC build type to distinguish between stable releases and snapshots")
set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease) set_property(CACHE KEEPASSXC_BUILD_TYPE PROPERTY STRINGS Snapshot Release PreRelease)
# Retrieve git HEAD revision hash
set(GIT_HEAD_OVERRIDE "" CACHE STRING "Manually set the Git HEAD hash when missing (eg, when no .git folder exists)")
execute_process(COMMAND git rev-parse --short=7 HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_HEAD
ERROR_QUIET)
string(STRIP "${GIT_HEAD}" GIT_HEAD)
if(GIT_HEAD STREQUAL "")
string(SUBSTRING "${GIT_HEAD_OVERRIDE}" 0 7 GIT_HEAD)
endif()
message(STATUS "Found Git HEAD Revision: ${GIT_HEAD}\n")
# Check if on a tag, if so build as a release # Check if on a tag, if so build as a release
execute_process(COMMAND git tag --points-at HEAD execute_process(COMMAND git tag --points-at HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_TAG) OUTPUT_VARIABLE GIT_TAG
ERROR_QUIET)
if(GIT_TAG) if(GIT_TAG)
set(OVERRIDE_VERSION ${GIT_TAG}) string(STRIP "${GIT_TAG}" GIT_TAG)
set(OVERRIDE_VERSION ${GIT_TAG})
elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version) elseif(EXISTS ${CMAKE_SOURCE_DIR}/.version)
file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION) file(READ ${CMAKE_SOURCE_DIR}/.version OVERRIDE_VERSION)
endif() endif()
string(REGEX REPLACE "(\r?\n)+" "" OVERRIDE_VERSION "${OVERRIDE_VERSION}") string(REGEX REPLACE "(\r?\n)+" "" OVERRIDE_VERSION "${OVERRIDE_VERSION}")
if(OVERRIDE_VERSION) if(OVERRIDE_VERSION)
if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$") if(OVERRIDE_VERSION MATCHES "^[\\.0-9]+-(alpha|beta)[0-9]+$")
set(KEEPASSXC_BUILD_TYPE PreRelease) set(KEEPASSXC_BUILD_TYPE PreRelease)
set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) set(KEEPASSXC_VERSION ${OVERRIDE_VERSION})
elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$") elseif(OVERRIDE_VERSION MATCHES "^[\\.0-9]+$")
set(KEEPASSXC_BUILD_TYPE Release) set(KEEPASSXC_BUILD_TYPE Release)
set(KEEPASSXC_VERSION ${OVERRIDE_VERSION}) set(KEEPASSXC_VERSION ${OVERRIDE_VERSION})
endif() endif()
endif() endif()
if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease" AND NOT OVERRIDE_VERSION) if(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease" AND NOT OVERRIDE_VERSION)
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-preview")
elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot") elseif(KEEPASSXC_BUILD_TYPE STREQUAL "Snapshot")
set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot") set(KEEPASSXC_VERSION "${KEEPASSXC_VERSION}-snapshot")
endif() endif()
if(KEEPASSXC_BUILD_TYPE STREQUAL "Release") if(KEEPASSXC_BUILD_TYPE STREQUAL "Release")
set(KEEPASSXC_BUILD_TYPE_RELEASE ON) set(KEEPASSXC_BUILD_TYPE_RELEASE ON)
elseif(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease") elseif(KEEPASSXC_BUILD_TYPE STREQUAL "PreRelease")
set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON) set(KEEPASSXC_BUILD_TYPE_PRE_RELEASE ON)
else() else()
set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON) set(KEEPASSXC_BUILD_TYPE_SNAPSHOT ON)
endif() endif()
message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n") message(STATUS "Setting up build for KeePassXC v${KEEPASSXC_VERSION}\n")
@@ -118,46 +140,46 @@ set(KEEPASSXC_DIST ON)
set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution Type") set(KEEPASSXC_DIST_TYPE "Other" CACHE STRING "KeePassXC Distribution Type")
set_property(CACHE KEEPASSXC_DIST_TYPE PROPERTY STRINGS Snap AppImage Other) set_property(CACHE KEEPASSXC_DIST_TYPE PROPERTY STRINGS Snap AppImage Other)
if(KEEPASSXC_DIST_TYPE STREQUAL "Snap") if(KEEPASSXC_DIST_TYPE STREQUAL "Snap")
set(KEEPASSXC_DIST_SNAP ON) set(KEEPASSXC_DIST_SNAP ON)
elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage") elseif(KEEPASSXC_DIST_TYPE STREQUAL "AppImage")
set(KEEPASSXC_DIST_APPIMAGE ON) set(KEEPASSXC_DIST_APPIMAGE ON)
elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other") elseif(KEEPASSXC_DIST_TYPE STREQUAL "Other")
unset(KEEPASSXC_DIST) unset(KEEPASSXC_DIST)
endif() endif()
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
set(IS_32BIT TRUE) set(IS_32BIT TRUE)
endif() endif()
if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANG 1) set(CMAKE_COMPILER_IS_CLANG 1)
endif() endif()
if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_COMPILER_IS_CLANGXX 1) set(CMAKE_COMPILER_IS_CLANGXX 1)
endif() endif()
macro(add_gcc_compiler_cxxflags FLAGS) macro(add_gcc_compiler_cxxflags FLAGS)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}")
endif() endif()
endmacro(add_gcc_compiler_cxxflags) endmacro(add_gcc_compiler_cxxflags)
macro(add_gcc_compiler_cflags FLAGS) macro(add_gcc_compiler_cflags FLAGS)
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}")
endif() endif()
endmacro(add_gcc_compiler_cflags) endmacro(add_gcc_compiler_cflags)
macro(add_gcc_compiler_flags FLAGS) macro(add_gcc_compiler_flags FLAGS)
add_gcc_compiler_cxxflags("${FLAGS}") add_gcc_compiler_cxxflags("${FLAGS}")
add_gcc_compiler_cflags("${FLAGS}") add_gcc_compiler_cflags("${FLAGS}")
endmacro(add_gcc_compiler_flags) endmacro(add_gcc_compiler_flags)
add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) add_definitions(-DQT_NO_EXCEPTIONS -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII)
if(WITH_APP_BUNDLE) if(WITH_APP_BUNDLE)
add_definitions(-DWITH_APP_BUNDLE) add_definitions(-DWITH_APP_BUNDLE)
endif() endif()
add_gcc_compiler_flags("-fno-common") add_gcc_compiler_flags("-fno-common")
@@ -167,7 +189,7 @@ add_gcc_compiler_flags("-fvisibility=hidden")
add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden") add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden")
if(CMAKE_BUILD_TYPE STREQUAL "Debug") if(CMAKE_BUILD_TYPE STREQUAL "Debug")
add_gcc_compiler_flags("-Werror") add_gcc_compiler_flags("-Werror")
endif() endif()
if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX) if((CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.999) OR CMAKE_COMPILER_IS_CLANGXX)
@@ -181,152 +203,159 @@ add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virt
add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings") add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings")
if(WITH_ASAN) if(WITH_ASAN)
if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)) if(NOT (CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE))
message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.") message(FATAL_ERROR "WITH_ASAN is only supported on Linux / macOS at the moment.")
endif() endif()
add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN") add_gcc_compiler_flags("-fsanitize=address -DWITH_ASAN")
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)) if(NOT (CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9))
add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN") add_gcc_compiler_flags("-fsanitize=leak -DWITH_LSAN")
endif()
endif() endif()
endif()
endif() endif()
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
if (CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)") if(CMAKE_BUILD_TYPE_LOWER MATCHES "(release|relwithdebinfo|minsizerel)")
add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2") add_gcc_compiler_flags("-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2")
endif() endif()
check_c_compiler_flag("-Werror=format-security -Werror=implicit-function-declaration" WERROR_C_AVAILABLE) check_c_compiler_flag("-Werror=format-security -Werror=implicit-function-declaration" WERROR_C_AVAILABLE)
check_cxx_compiler_flag("-Werror=format-security" WERROR_CXX_AVAILABLE) check_cxx_compiler_flag("-Werror=format-security" WERROR_CXX_AVAILABLE)
if(WERROR_C_AVAILABLE AND WERROR_CXX_AVAILABLE) if(WERROR_C_AVAILABLE AND WERROR_CXX_AVAILABLE)
add_gcc_compiler_flags("-Werror=format-security") add_gcc_compiler_flags("-Werror=format-security")
add_gcc_compiler_cflags("-Werror=implicit-function-declaration") add_gcc_compiler_cflags("-Werror=implicit-function-declaration")
endif() endif()
if(CMAKE_COMPILER_IS_GNUCXX) if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align")
if(WITH_COVERAGE)
# Include code coverage, use with -DCMAKE_BUILD_TYPE=Coverage
include(CodeCoverage)
setup_target_for_coverage(kp_coverage "make test" coverage)
endif()
endif() endif()
if(CMAKE_COMPILER_IS_GNUCC) if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align")
endif() endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
if (CMAKE_COMPILER_IS_CLANGXX) if(CMAKE_COMPILER_IS_CLANGXX)
add_gcc_compiler_flags("-Qunused-arguments") add_gcc_compiler_flags("-Qunused-arguments")
endif() endif()
add_gcc_compiler_flags("-pie -fPIE") add_gcc_compiler_flags("-pie -fPIE")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro,-z,now")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro,-z,now")
endif() endif()
add_gcc_compiler_cflags("-std=c99") add_gcc_compiler_cflags("-std=c99")
add_gcc_compiler_cxxflags("-std=c++11") add_gcc_compiler_cxxflags("-std=c++11")
if(APPLE) if(APPLE)
add_gcc_compiler_cxxflags("-stdlib=libc++") add_gcc_compiler_cxxflags("-stdlib=libc++")
endif() endif()
if(WITH_DEV_BUILD) if(WITH_DEV_BUILD)
add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED) add_definitions(-DQT_DEPRECATED_WARNINGS -DGCRYPT_NO_DEPRECATED)
endif() endif()
if(MINGW) if(MINGW)
set(CMAKE_RC_COMPILER_INIT windres) set(CMAKE_RC_COMPILER_INIT windres)
enable_language(RC) enable_language(RC)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>") set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")) if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
# Enable DEP and ASLR # Enable DEP and ASLR
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--nxcompat -Wl,--dynamicbase")
# Enable high entropy ASLR for 64-bit builds # Enable high entropy ASLR for 64-bit builds
if(NOT IS_32BIT) if(NOT IS_32BIT)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--high-entropy-va")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--high-entropy-va")
endif()
endif() endif()
endif()
endif() endif()
if(APPLE AND WITH_APP_BUNDLE OR MINGW) if(APPLE AND WITH_APP_BUNDLE OR MINGW)
set(PROGNAME KeePassXC) set(PROGNAME KeePassXC)
else() else()
set(PROGNAME keepassxc) set(PROGNAME keepassxc)
endif()
if(APPLE AND WITH_APP_BUNDLE AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local")
set(CMAKE_INSTALL_PREFIX "/Applications")
set(CMAKE_INSTALL_MANDIR "/usr/local/share/man")
endif() endif()
if(MINGW) if(MINGW)
set(CLI_INSTALL_DIR ".") set(CLI_INSTALL_DIR ".")
set(PROXY_INSTALL_DIR ".") set(PROXY_INSTALL_DIR ".")
set(BIN_INSTALL_DIR ".") set(BIN_INSTALL_DIR ".")
set(PLUGIN_INSTALL_DIR ".") set(PLUGIN_INSTALL_DIR ".")
set(DATA_INSTALL_DIR "share") set(DATA_INSTALL_DIR "share")
elseif(APPLE AND WITH_APP_BUNDLE) elseif(APPLE AND WITH_APP_BUNDLE)
set(CLI_INSTALL_DIR "/usr/local/bin") set(CMAKE_INSTALL_MANDIR "${PROGNAME}.app/Contents/Resources/man")
set(PROXY_INSTALL_DIR "/usr/local/bin") set(CLI_INSTALL_DIR "${PROGNAME}.app/Contents/MacOS")
set(BIN_INSTALL_DIR ".") set(PROXY_INSTALL_DIR "${PROGNAME}.app/Contents/MacOS")
set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns") set(BIN_INSTALL_DIR "${PROGNAME}.app/Contents/MacOS")
set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources") set(PLUGIN_INSTALL_DIR "${PROGNAME}.app/Contents/PlugIns")
set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources")
else() else()
include(GNUInstallDirs) include(GNUInstallDirs)
set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") set(CLI_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}")
set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") set(PROXY_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}")
set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}")
set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc") set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassxc")
set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc") set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassxc")
endif() endif()
if(WITH_TESTS) if(WITH_TESTS)
enable_testing() enable_testing()
endif(WITH_TESTS) endif(WITH_TESTS)
if(WITH_COVERAGE)
# Include code coverage, use with -DCMAKE_BUILD_TYPE=Debug
include(CodeCoverage)
set(COVERAGE_GCOVR_EXCLUDES
"\\(.+/\\)?tests/.\\*"
".\\*/moc_\\[^/\\]+\\.cpp"
".\\*/ui_\\[^/\\]+\\.h"
"\\(.+/\\)?zxcvbn/.\\*")
append_coverage_compiler_flags()
setup_target_for_coverage_gcovr_html(
NAME coverage
EXECUTABLE $(MAKE) && $(MAKE) test
)
endif()
include(CLangFormat)
set(QT_COMPONENTS Core Network Concurrent Gui Svg Widgets Test LinguistTools)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
find_package(Qt5 COMPONENTS Core Network Concurrent Widgets Test LinguistTools DBus REQUIRED) find_package(Qt5 COMPONENTS ${QT_COMPONENTS} DBus REQUIRED)
elseif(APPLE) elseif(APPLE)
find_package(Qt5 COMPONENTS Core Network Concurrent Widgets Test LinguistTools REQUIRED find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH)
HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH find_package(Qt5 COMPONENTS MacExtras HINTS /usr/local/opt/qt/lib/cmake /usr/local/Cellar/qt/*/lib/cmake ENV PATH)
)
find_package(Qt5 COMPONENTS MacExtras
HINTS /usr/local/Cellar/qt/*/lib/cmake ENV PATH
)
else() else()
find_package(Qt5 COMPONENTS Core Network Concurrent Widgets Test LinguistTools REQUIRED) find_package(Qt5 COMPONENTS ${QT_COMPONENTS} REQUIRED)
endif() endif()
if(Qt5Core_VERSION VERSION_LESS "5.2.0") if(Qt5Core_VERSION VERSION_LESS "5.2.0")
message(FATAL_ERROR "Qt version 5.2.0 or higher is required") message(FATAL_ERROR "Qt version 5.2.0 or higher is required")
endif() endif()
get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH) get_filename_component(Qt5_PREFIX ${Qt5_DIR}/../../.. REALPATH)
# Process moc automatically
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
# Process .ui files automatically
set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOUIC ON)
# Process .qrc files automatically
set(CMAKE_AUTORCC ON) set(CMAKE_AUTORCC ON)
if(APPLE) if(APPLE)
set(CMAKE_MACOSX_RPATH TRUE) set(CMAKE_MACOSX_RPATH TRUE)
find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH) find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ENV PATH)
if(NOT MACDEPLOYQT_EXE) if(NOT MACDEPLOYQT_EXE)
message(FATAL_ERROR "macdeployqt is required to build in macOS") message(FATAL_ERROR "macdeployqt is required to build in macOS")
else() else()
message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}") message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}")
endif() endif()
endif() endif()
# Debian sets the the build type to None for package builds. # Debian sets the the build type to None for package builds.
@@ -336,28 +365,43 @@ set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG)
find_package(LibGPGError REQUIRED) find_package(LibGPGError REQUIRED)
find_package(Gcrypt 1.7.0 REQUIRED) find_package(Gcrypt 1.7.0 REQUIRED)
find_package(Argon2 REQUIRED) find_package(Argon2 REQUIRED)
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
find_package(QREncode REQUIRED)
set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR}) set(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0") if(ZLIB_VERSION_STRING VERSION_LESS "1.2.0")
message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format") message(FATAL_ERROR "zlib 1.2.0 or higher is required to use the gzip format")
endif()
include_directories(SYSTEM ${ARGON2_INCLUDE_DIR})
# Optional
if(WITH_XC_KEESHARE)
set(WITH_XC_KEESHARE_INSECURE ON)
if(WITH_XC_KEESHARE_SECURE)
# ZLIB is needed and already required
find_package(QuaZip REQUIRED)
include_directories(SYSTEM ${QUAZIP_INCLUDE_DIR})
endif()
else()
set(WITH_XC_KEESHARE_INSECURE OFF)
set(WITH_XC_KEESHARE_SECURE OFF)
endif() endif()
# Optional # Optional
if(WITH_XC_YUBIKEY) if(WITH_XC_YUBIKEY)
find_package(YubiKey REQUIRED) find_package(YubiKey REQUIRED)
include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS}) include_directories(SYSTEM ${YUBIKEY_INCLUDE_DIRS})
endif() endif()
if(UNIX) if(UNIX)
check_cxx_source_compiles("#include <sys/prctl.h> check_cxx_source_compiles("#include <sys/prctl.h>
int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }" int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }"
HAVE_PR_SET_DUMPABLE) HAVE_PR_SET_DUMPABLE)
check_cxx_source_compiles("#include <sys/resource.h> check_cxx_source_compiles("#include <sys/resource.h>
int main() { int main() {
struct rlimit limit; struct rlimit limit;
limit.rlim_cur = 0; limit.rlim_cur = 0;
@@ -366,12 +410,12 @@ if(UNIX)
return 0; return 0;
}" HAVE_RLIMIT_CORE) }" HAVE_RLIMIT_CORE)
if(APPLE) if(APPLE)
check_cxx_source_compiles("#include <sys/types.h> check_cxx_source_compiles("#include <sys/types.h>
#include <sys/ptrace.h> #include <sys/ptrace.h>
int main() { ptrace(PT_DENY_ATTACH, 0, 0, 0); return 0; }" int main() { ptrace(PT_DENY_ATTACH, 0, 0, 0); return 0; }"
HAVE_PT_DENY_ATTACH) HAVE_PT_DENY_ATTACH)
endif() endif()
endif() endif()
include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
@@ -381,14 +425,14 @@ include(FeatureSummary)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(share) add_subdirectory(share)
if(WITH_TESTS) if(WITH_TESTS)
add_subdirectory(tests) add_subdirectory(tests)
endif(WITH_TESTS) endif(WITH_TESTS)
if(PRINT_SUMMARY) if(PRINT_SUMMARY)
# This will print ENABLED, REQUIRED and DISABLED # This will print ENABLED, REQUIRED and DISABLED
feature_summary(WHAT ALL) feature_summary(WHAT ALL)
else() else()
# This will only print ENABLED and DISABLED feature # This will only print ENABLED and DISABLED feature
feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:") feature_summary(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:") feature_summary(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
endif() endif()

22
COPYING
View File

@@ -56,15 +56,15 @@ Copyright: 2015 halex2005 <akharlov@gmail.com>
License: MIT License: MIT
Files: share/icons/application/*/apps/keepassxc.png Files: share/icons/application/*/apps/keepassxc.png
share/icons/application/scalable/apps/keepassxc.svgz share/icons/application/scalable/apps/keepassxc.svg
share/icons/application/*/apps/keepassxc-dark.png share/icons/application/*/apps/keepassxc-dark.png
share/icons/application/scalable/apps/keepassxc-dark.svgz share/icons/application/scalable/apps/keepassxc-dark.svg
share/icons/application/*/apps/keepassxc-locked.png share/icons/application/*/apps/keepassxc-locked.png
share/icons/application/scalable/apps/keepassxc-locked.svgz share/icons/application/scalable/apps/keepassxc-locked.svg
share/icons/application/*/apps/keepassxc-unlocked.png share/icons/application/*/apps/keepassxc-unlocked.png
share/icons/application/scalable/apps/keepassxc-unlocked.svgz share/icons/application/scalable/apps/keepassxc-unlocked.svg
share/icons/application/*/mimetypes/application-x-keepassxc.png share/icons/application/*/mimetypes/application-x-keepassxc.png
share/icons/application/scalable/mimetypes/application-x-keepassxc.svgz share/icons/application/scalable/mimetypes/application-x-keepassxc.svg
Copyright: 2016, Lorenzo Stella <lorenzo.stl@gmail.com> Copyright: 2016, Lorenzo Stella <lorenzo.stl@gmail.com>
License: LGPL-2 License: LGPL-2
@@ -151,6 +151,12 @@ Copyright: 2003-2004, David Vignoni <david@icon-king.com>
License: LGPL-2.1 License: LGPL-2.1
Comment: based on Nuvola icon theme Comment: based on Nuvola icon theme
Files: share/icons/application/*/actions/favicon-download.png
Copyright: 2003-2004, David Vignoni <david@icon-king.com>
2018, Kyle Kneitinger <kyle@kneit.in>
License: LGPL-2.1
Comment: based on Nuvola icon theme
Files: share/icons/application/*/actions/application-exit.png Files: share/icons/application/*/actions/application-exit.png
share/icons/application/*/actions/chronometer.png share/icons/application/*/actions/chronometer.png
share/icons/application/*/actions/configure.png share/icons/application/*/actions/configure.png
@@ -181,7 +187,7 @@ Files: share/icons/application/*/actions/application-exit.png
share/icons/application/*/status/dialog-information.png share/icons/application/*/status/dialog-information.png
share/icons/application/*/status/dialog-warning.png share/icons/application/*/status/dialog-warning.png
share/icons/application/*/status/security-high.png share/icons/application/*/status/security-high.png
share/icons/svg/*.svgz share/icons/svg/*.svg
Copyright: 2007, Nuno Pinheiro <nuno@oxygen-icons.org> Copyright: 2007, Nuno Pinheiro <nuno@oxygen-icons.org>
2007, David Vignoni <david@icon-king.com> 2007, David Vignoni <david@icon-king.com>
2007, David Miller <miller@oxygen-icons.org> 2007, David Miller <miller@oxygen-icons.org>
@@ -226,10 +232,6 @@ Files: src/zxcvbn/zxcvbn.*
Copyright: 2015-2017, Tony Evans Copyright: 2015-2017, Tony Evans
License: MIT License: MIT
Files: src/http/qhttp/*
Copyright: 2014, Amir Zamani
License: MIT
Files: src/gui/KMessageWidget.h Files: src/gui/KMessageWidget.h
src/gui/KMessageWidget.cpp src/gui/KMessageWidget.cpp
Copyright: 2011 Aurélien Gâteau <agateau@kde.org> Copyright: 2011 Aurélien Gâteau <agateau@kde.org>

View File

@@ -16,17 +16,18 @@
FROM ubuntu:14.04 FROM ubuntu:14.04
ENV REBUILD_COUNTER=8 ENV REBUILD_COUNTER=10
ENV QT5_VERSION=59 ENV QT5_VERSION=qt510
ENV QT5_PPA_VERSION=${QT5_VERSION}4 ENV QT5_PPA_VERSION=qt-5.10.1
ENV TERM=xterm-256color
RUN set -x \ RUN set -x \
&& apt-get update -y \ && apt-get update -y \
&& apt-get -y install software-properties-common && apt-get -y install software-properties-common
RUN set -x \ RUN set -x \
&& add-apt-repository ppa:beineri/opt-qt${QT5_PPA_VERSION}-trusty \ && add-apt-repository ppa:beineri/opt-${QT5_PPA_VERSION}-trusty \
&& add-apt-repository ppa:phoerious/keepassxc && add-apt-repository ppa:phoerious/keepassxc
RUN set -x \ RUN set -x \
@@ -37,39 +38,55 @@ RUN set -x \
RUN set -x \ RUN set -x \
&& apt-get install -y \ && apt-get install -y \
cmake3 \ cmake3 \
curl \
g++ \ g++ \
git \ git \
libgcrypt20-18-dev \ libgcrypt20-18-dev \
libargon2-0-dev \ libargon2-0-dev \
libsodium-dev \ libsodium-dev \
libcurl-no-gcrypt-dev \ libcurl-no-gcrypt-dev \
qt${QT5_VERSION}base \ ${QT5_VERSION}base \
qt${QT5_VERSION}tools \ ${QT5_VERSION}tools \
qt${QT5_VERSION}x11extras \ ${QT5_VERSION}x11extras \
qt${QT5_VERSION}translations \ ${QT5_VERSION}translations \
qt${QT5_VERSION}imageformats \ ${QT5_VERSION}imageformats \
${QT5_VERSION}svg \
zlib1g-dev \ zlib1g-dev \
libxi-dev \ libxi-dev \
libxtst-dev \ libxtst-dev \
# ubuntu:14.04 has no quazip (it's optional)
# libquazip5-dev \
mesa-common-dev \ mesa-common-dev \
libyubikey-dev \ libyubikey-dev \
libykpers-1-dev libykpers-1-dev \
libqrencode-dev \
xclip \
xvfb
ENV CMAKE_PREFIX_PATH="/opt/qt${QT5_VERSION}/lib/cmake" ENV PATH="/opt/${QT5_VERSION}/bin:${PATH}"
ENV CMAKE_PREFIX_PATH="/opt/${QT5_VERSION}/lib/cmake"
ENV CMAKE_INCLUDE_PATH="/opt/keepassxc-libs/include" ENV CMAKE_INCLUDE_PATH="/opt/keepassxc-libs/include"
ENV CMAKE_LIBRARY_PATH="/opt/keepassxc-libs/lib/x86_64-linux-gnu" ENV CMAKE_LIBRARY_PATH="/opt/keepassxc-libs/lib/x86_64-linux-gnu"
ENV CPATH="${CMAKE_INCLUDE_PATH}" ENV CPATH="${CMAKE_INCLUDE_PATH}"
ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/qt${QT5_VERSION}/lib" ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/${QT5_VERSION}/lib"
RUN set -x \ RUN set -x \
&& echo "/opt/qt${QT5_VERSION}/lib" > /etc/ld.so.conf.d/qt${QT5_VERSION}.conf \ && echo "/opt/${QT5_VERSION}/lib" > /etc/ld.so.conf.d/${QT5_VERSION}.conf \
&& echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf && echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf
# AppImage dependencies # AppImage dependencies
RUN set -x \ RUN set -x \
&& apt-get install -y \ && apt-get install -y \
libfuse2 \ curl \
wget libfuse2
RUN set -x \
&& curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > /usr/bin/linuxdeploy \
&& curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > /usr/bin/linuxdeploy-plugin-qt \
&& curl -L "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > /usr/bin/appimagetool \
&& chmod +x /usr/bin/linuxdeploy \
&& chmod +x /usr/bin/linuxdeploy-plugin-qt \
&& chmod +x /usr/bin/appimagetool
RUN set -x \ RUN set -x \
&& apt-get autoremove --purge \ && apt-get autoremove --purge \

View File

@@ -28,7 +28,6 @@ The following libraries are required:
* libsodium (>= 1.0.12, optional for KeePassXC-Browser support) * libsodium (>= 1.0.12, optional for KeePassXC-Browser support)
* libargon2 * libargon2
Prepare the Building Environment Prepare the Building Environment
================================ ================================
@@ -38,6 +37,7 @@ Prepare the Building Environment
Build Steps Build Steps
=========== ===========
We recommend using the release tool to perform builds, please read up-to-date instructions [on our wiki](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#building-using-the-release-tool).
To compile from source, open a **Terminal (on Linux/MacOS)** or a **MSYS2-MinGW shell (on Windows)**<br/> To compile from source, open a **Terminal (on Linux/MacOS)** or a **MSYS2-MinGW shell (on Windows)**<br/>
**Note:** on Windows make sure you are using a **MINGW shell** by checking the label before the current path **Note:** on Windows make sure you are using a **MINGW shell** by checking the label before the current path
@@ -59,15 +59,24 @@ To update the project from within the project's folder, you can run the followin
git pull git pull
``` ```
For a stable build, it is recommended to checkout the master branch.
```bash
git checkout master
```
Navigate to the directory where you have downloaded KeePassXC and type these commands: Navigate to the directory where you have downloaded KeePassXC and type these commands:
``` ```
cd directory-where-sources-live cd directory-where-sources-live
mkdir build mkdir build
cd build cd build
cmake -DWITH_TESTS=OFF ...and other options - see below... cmake -DWITH_XC_ALL=ON ..
make make
``` ```
If you are on Windows, you may have to add ```-G "MSYS Makefiles"``` to the beginning of the cmake command. See the [Windows Build Instructions](https://github.com/keepassxreboot/keepassxc/wiki/Building-KeePassXC#windows) for more information.
These steps place the compiled KeePassXC binary inside the `./build/src/` directory. These steps place the compiled KeePassXC binary inside the `./build/src/` directory.
(Note the cmake notes/options below.) (Note the cmake notes/options below.)
@@ -86,15 +95,20 @@ These steps place the compiled KeePassXC binary inside the `./build/src/` direct
``` ```
-DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON) -DWITH_XC_AUTOTYPE=[ON|OFF] Enable/Disable Auto-Type (default: ON)
-DWITH_XC_HTTP=[ON|OFF] Enable/Disable KeePassHTTP and custom icon downloads (default: OFF)
-DWITH_XC_YUBIKEY=[ON|OFF] Enable/Disable YubiKey HMAC-SHA1 authentication support (default: OFF) -DWITH_XC_YUBIKEY=[ON|OFF] Enable/Disable YubiKey HMAC-SHA1 authentication support (default: OFF)
-DWITH_XC_BROWSER=[ON|OFF] Enable/Disable KeePassXC-Browser extension support (default: OFF) -DWITH_XC_BROWSER=[ON|OFF] Enable/Disable KeePassXC-Browser extension support (default: OFF)
-DWITH_XC_NETWORKING=[ON|OFF] Enable/Disable Networking support (favicon download) (default: OFF)
-DWITH_XC_SSHAGENT=[ON|OFF] Enable/Disable SSHAgent support (default: OFF)
-DWITH_XC_KEESHARE=[ON|OFF] Enable/Disable KeeShare group syncronization extension (default: OFF)
-DWITH_XC_TOUCHID=[ON|OFF] (macOS Only) Enable/Disable Touch ID unlock (default:OFF)
-DWITH_XC_ALL=[ON|OFF] Enable/Disable compiling all plugins above (default: OFF)
-DWITH_XC_KEESHARE_SECURE=[ON|OFF] Enable/Disable KeeShare secure containers, requires libquazip5 (default: OFF)
-DWITH_TESTS=[ON|OFF] Enable/Disable building of unit tests (default: ON) -DWITH_TESTS=[ON|OFF] Enable/Disable building of unit tests (default: ON)
-DWITH_GUI_TESTS=[ON|OFF] Enable/Disable building of GUI tests (default: OFF) -DWITH_GUI_TESTS=[ON|OFF] Enable/Disable building of GUI tests (default: OFF)
-DWITH_DEV_BUILD=[ON|OFF] Enable/Disable deprecated method warnings (default: OFF) -DWITH_DEV_BUILD=[ON|OFF] Enable/Disable deprecated method warnings (default: OFF)
-DWITH_ASAN=[ON|OFF] Enable/Disable address sanitizer checks (Linux / macOS only) (default: OFF) -DWITH_ASAN=[ON|OFF] Enable/Disable address sanitizer checks (Linux / macOS only) (default: OFF)
-DWITH_COVERAGE=[ON|OFF] Enable/Disable coverage tests (GCC only) (default: OFF) -DWITH_COVERAGE=[ON|OFF] Enable/Disable coverage tests (GCC only) (default: OFF)
-DWITH_APP_BUNDLE=[ON|OFF] Enable Application Bundle for macOS (default: ON)
``` ```
* If you are on MacOS you must add this parameter to **Cmake**, with the Qt version you have installed<br/> `-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.2/lib/cmake/` * If you are on MacOS you must add this parameter to **Cmake**, with the Qt version you have installed<br/> `-DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.6.2/lib/cmake/`

View File

@@ -1,5 +1,5 @@
# <img src="https://keepassxc.org/logo.png" width="40" height="40"/> KeePassXC # <img src="https://keepassxc.org/logo.png" width="40" height="40"/> KeePassXC
[![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(id:KeepassXC_TeamCityCi\)/statusIcon?guest=1)](https://ci.keepassxc.org/viewType.html?buildTypeId=KeepassXC_TeamCityCi&guest=1) [![Coverage Status](https://coveralls.io/repos/github/keepassxreboot/keepassxc/badge.svg)](https://coveralls.io/github/keepassxreboot/keepassxc) [![TeamCity Build Status](https://ci.keepassxc.org/app/rest/builds/buildType:\(project:KeepassXC\)/statusIcon)](https://ci.keepassxc.org/?guest=1) [![codecov](https://codecov.io/gh/keepassxreboot/keepassxc/branch/develop/graph/badge.svg)](https://codecov.io/gh/keepassxreboot/keepassxc)
## About KeePassXC ## About KeePassXC
[KeePassXC](https://keepassxc.org) is a cross-platform community fork of [KeePassXC](https://keepassxc.org) is a cross-platform community fork of
@@ -29,11 +29,8 @@ so please check out your distribution's package list to see if KeePassXC is avai
- Using website favicons as entry icons - Using website favicons as entry icons
- Merging of databases - Merging of databases
- Automatic reload when the database changed on disk - Automatic reload when the database changed on disk
- Browser integration with KeePassHTTP-Connector for
[Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepasshttp-connector/) and
[Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepasshttp-connector/dafgdjggglmmknipkhngniifhplpcldb), and
[passafari](https://github.com/mmichaa/passafari.safariextension/) in Safari. [[See note about KeePassHTTP]](#Note_about_KeePassHTTP)
- Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk) - Browser integration with KeePassXC-Browser using [native messaging](https://developer.chrome.com/extensions/nativeMessaging) for [Mozilla Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) and [Google Chrome or Chromium](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk)
- Synchronize passwords using KeeShare. See [Using Sharing](./docs/QUICKSTART.md#using-sharing) for more details.
- Many bug fixes - Many bug fixes
For a full list of features and changes, read the [CHANGELOG](CHANGELOG) document. For a full list of features and changes, read the [CHANGELOG](CHANGELOG) document.
@@ -54,15 +51,6 @@ You can of course also directly contribute your own code. We are happy to accept
Please read the [CONTRIBUTING document](.github/CONTRIBUTING.md) for further information. Please read the [CONTRIBUTING document](.github/CONTRIBUTING.md) for further information.
### Note about KeePassHTTP ## License
The KeePassHTTP protocol is not a highly secure protocol.
It has a certain flaw which could allow an attacker to decrypt your passwords
should they manage to impersonate the web browser extension from a remote address.
<!--intercept communication between a KeePassHTTP server
and PassIFox/chromeIPass over a network connection -->
(See [here](https://github.com/pfn/keepasshttp/issues/258) and [here](https://github.com/keepassxreboot/keepassxc/issues/147)).
To minimize the risk, KeePassXC strictly limits communication between itself GPL-2 or GPL-3
and the browser plugin to your local computer (localhost).
This makes your passwords quite safe,
but as with all open source software, use it at your own risk!

View File

@@ -18,53 +18,75 @@
FROM ubuntu:14.04 FROM ubuntu:14.04
ENV REBUILD_COUNTER=4 ENV REBUILD_COUNTER=5
ENV QT5_VERSION=53 ENV QT5_VERSION=qt53
ENV QT5_PPA_VERSION=${QT5_VERSION}2 ENV QT5_PPA_VERSION=${QT5_VERSION}2
ENV TERM=xterm-256color
RUN set -x \ RUN set -x \
&& apt-get update -y \ && apt-get update -y \
&& apt-get -y install software-properties-common && apt-get -y install software-properties-common
RUN set -x \ RUN set -x \
&& add-apt-repository ppa:beineri/opt-qt${QT5_PPA_VERSION}-trusty \ && add-apt-repository ppa:beineri/opt-${QT5_PPA_VERSION}-trusty \
&& add-apt-repository ppa:phoerious/keepassxc && add-apt-repository ppa:phoerious/keepassxc
RUN set -x \ RUN set -x \
&& apt-get -y update \ && apt-get -y update \
&& apt-get -y --no-install-recommends install \ && apt-get -y --no-install-recommends install \
build-essential \ build-essential \
clang-3.6 \ clang-3.6 \
libclang-common-3.6-dev \ libclang-common-3.6-dev \
clang-format-3.6 \ clang-format-3.6 \
cmake3 \ llvm-3.6 \
make \ cmake3 \
libgcrypt20-18-dev \ make \
libargon2-0-dev \ libgcrypt20-18-dev \
libsodium-dev \ libargon2-0-dev \
libcurl-no-gcrypt-dev \ libsodium-dev \
qt${QT5_VERSION}base \ libcurl-no-gcrypt-dev \
qt${QT5_VERSION}tools \ ${QT5_VERSION}base \
qt${QT5_VERSION}x11extras \ ${QT5_VERSION}tools \
qt${QT5_VERSION}translations \ ${QT5_VERSION}x11extras \
zlib1g-dev \ ${QT5_VERSION}translations \
libyubikey-dev \ ${QT5_VERSION}svg \
libykpers-1-dev \ zlib1g-dev \
libxi-dev \ libyubikey-dev \
libxtst-dev \ libykpers-1-dev \
xvfb # ubuntu:14.04 has no quazip (it's optional)
# libquazip5-dev \
libxi-dev \
libxtst-dev \
libqrencode-dev \
xclip \
xvfb
ENV CMAKE_PREFIX_PATH="/opt/qt${QT5_VERSION}/lib/cmake" ENV PATH="/opt/${QT5_VERSION}/bin:${PATH}"
ENV CMAKE_PREFIX_PATH="/opt/${QT5_VERSION}/lib/cmake"
ENV CMAKE_INCLUDE_PATH="/opt/keepassxc-libs/include" ENV CMAKE_INCLUDE_PATH="/opt/keepassxc-libs/include"
ENV CMAKE_LIBRARY_PATH="/opt/keepassxc-libs/lib/x86_64-linux-gnu" ENV CMAKE_LIBRARY_PATH="/opt/keepassxc-libs/lib/x86_64-linux-gnu"
ENV CPATH="${CMAKE_INCLUDE_PATH}" ENV CPATH="${CMAKE_INCLUDE_PATH}"
ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/qt${QT5_VERSION}/lib" ENV LD_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}:/opt/${QT5_VERSION}/lib"
RUN set -x \ RUN set -x \
&& echo "/opt/qt${QT5_VERSION}/lib" > /etc/ld.so.conf.d/qt${QT5_VERSION}.conf \ && echo "/opt/${QT5_VERSION}/lib" > /etc/ld.so.conf.d/${QT5_VERSION}.conf \
&& echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf && echo "/opt/keepassxc-libs/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/keepassxc.conf
# AppImage dependencies
RUN set -x \
&& apt-get install -y \
curl \
libfuse2
RUN set -x \
&& curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > /usr/bin/linuxdeploy \
&& curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > /usr/bin/linuxdeploy-plugin-qt \
&& curl -L "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > /usr/bin/appimagetool \
&& chmod +x /usr/bin/linuxdeploy \
&& chmod +x /usr/bin/linuxdeploy-plugin-qt \
&& chmod +x /usr/bin/appimagetool
RUN set -x \ RUN set -x \
&& apt-get autoremove --purge \ && apt-get autoremove --purge \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*

64
cmake/CLangFormat.cmake Normal file
View File

@@ -0,0 +1,64 @@
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or (at your option)
# version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set(EXCLUDED_DIRS
# third-party directories
src/zxcvbn/
# objective-c directories
src/touchid/
src/autotype/mac/
src/gui/macutils/)
set(EXCLUDED_FILES
# third-party files
streams/qtiocompressor.cpp
streams/qtiocompressor.h
gui/KMessageWidget.h
gui/KMessageWidget.cpp
gui/MainWindowAdaptor.h
gui/MainWindowAdaptor.cpp
crypto/ssh/bcrypt_pbkdf.cpp
crypto/ssh/blf.h
crypto/ssh/blowfish.c
tests/modeltest.cpp
tests/modeltest.h
# objective-c files
core/ScreenLockListenerMac.h
core/ScreenLockListenerMac.cpp)
file(GLOB_RECURSE ALL_SOURCE_FILES RELATIVE ${CMAKE_SOURCE_DIR} src/*.cpp src/*.h tests/*.cpp tests/*.h)
foreach(SOURCE_FILE ${ALL_SOURCE_FILES})
foreach(EXCLUDED_DIR ${EXCLUDED_DIRS})
string(FIND ${SOURCE_FILE} ${EXCLUDED_DIR} SOURCE_FILE_EXCLUDED)
if(NOT ${SOURCE_FILE_EXCLUDED} EQUAL -1)
list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE})
endif()
endforeach()
foreach(EXCLUDED_FILE ${EXCLUDED_FILES})
if(${SOURCE_FILE} MATCHES ".*${EXCLUDED_FILE}$")
list(REMOVE_ITEM ALL_SOURCE_FILES ${SOURCE_FILE})
endif()
endforeach()
endforeach()
add_custom_target(format)
foreach(SOURCE_FILE ${ALL_SOURCE_FILES})
add_custom_command(
TARGET format
PRE_BUILD
COMMAND echo Formatting ${SOURCE_FILE}
COMMAND clang-format -style=file -i \"${SOURCE_FILE}\"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
endforeach()

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2012 - 2015, Lars Bilke # Copyright (c) 2012 - 2017, Lars Bilke
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without modification, # Redistribution and use in source and binary forms, with or without modification,
@@ -26,7 +26,7 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# #
# # CHANGES:
# #
# 2012-01-31, Lars Bilke # 2012-01-31, Lars Bilke
# - Enable Code Coverage # - Enable Code Coverage
@@ -35,163 +35,269 @@
# - Added support for Clang. # - Added support for Clang.
# - Some additional usage instructions. # - Some additional usage instructions.
# #
# 2016-02-03, Lars Bilke
# - Refactored functions to use named parameters
#
# 2017-06-02, Lars Bilke
# - Merged with modified version from github.com/ufz/ogs
#
#
# USAGE: # USAGE:
# 0. (Mac only) If you use Xcode 5.1 make sure to patch geninfo as described here:
# http://stackoverflow.com/a/22404544/80480
# #
# 1. Copy this file into your cmake modules path. # 1. Copy this file into your cmake modules path.
# #
# 2. Add the following line to your CMakeLists.txt: # 2. Add the following line to your CMakeLists.txt:
# INCLUDE(CodeCoverage) # include(CodeCoverage)
# #
# 3. Set compiler flags to turn off optimization and enable coverage: # 3. Append necessary compiler flags:
# SET(CMAKE_CXX_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage") # APPEND_COVERAGE_COMPILER_FLAGS()
# SET(CMAKE_C_FLAGS "-g -O0 -fprofile-arcs -ftest-coverage")
# #
# 3. Use the function SETUP_TARGET_FOR_COVERAGE to create a custom make target # 4. If you need to exclude additional directories from the report, specify them
# which runs your test executable and produces a lcov code coverage report: # using the COVERAGE_LCOV_EXCLUDES variable before calling SETUP_TARGET_FOR_COVERAGE_LCOV.
# Example: # Example:
# SETUP_TARGET_FOR_COVERAGE( # set(COVERAGE_LCOV_EXCLUDES 'dir1/*' 'dir2/*')
# my_coverage_target # Name for custom target.
# test_driver # Name of the test driver executable that runs the tests.
# # NOTE! This should always have a ZERO as exit code
# # otherwise the coverage generation will not complete.
# coverage # Name of output directory.
# )
# #
# 4. Build a Debug build: # 5. Use the functions described below to create a custom make target which
# cmake -DCMAKE_BUILD_TYPE=Debug .. # runs your test executable and produces a code coverage report.
# make
# make my_coverage_target
# #
# 6. Build a Debug build:
# cmake -DCMAKE_BUILD_TYPE=Debug ..
# make
# make my_coverage_target
# #
include(CMakeParseArguments)
# Check prereqs # Check prereqs
FIND_PROGRAM( GCOV_PATH gcov ) find_program( GCOV_PATH gcov )
FIND_PROGRAM( LCOV_PATH lcov ) find_program( LCOV_PATH NAMES lcov lcov.bat lcov.exe lcov.perl)
FIND_PROGRAM( GENHTML_PATH genhtml ) find_program( GENHTML_PATH NAMES genhtml genhtml.perl genhtml.bat )
FIND_PROGRAM( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/tests) find_program( GCOVR_PATH gcovr PATHS ${CMAKE_SOURCE_DIR}/scripts/test)
find_program( SIMPLE_PYTHON_EXECUTABLE python )
IF(NOT GCOV_PATH) if(NOT GCOV_PATH)
MESSAGE(FATAL_ERROR "gcov not found! Aborting...") message(FATAL_ERROR "gcov not found! Aborting...")
ENDIF() # NOT GCOV_PATH endif() # NOT GCOV_PATH
IF("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang") if("${CMAKE_CXX_COMPILER_ID}" MATCHES "(Apple)?[Cc]lang")
IF("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3) if("${CMAKE_CXX_COMPILER_VERSION}" VERSION_LESS 3)
MESSAGE(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...") message(FATAL_ERROR "Clang version must be 3.0.0 or greater! Aborting...")
ENDIF() endif()
ELSEIF(NOT CMAKE_COMPILER_IS_GNUCXX) elseif(NOT CMAKE_COMPILER_IS_GNUCXX)
MESSAGE(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...")
ENDIF() # CHECK VALID COMPILER endif()
SET(CMAKE_CXX_FLAGS_COVERAGE set(COVERAGE_COMPILER_FLAGS "-g -O0 --coverage -fprofile-arcs -ftest-coverage"
"-g -O0 --coverage -fprofile-arcs -ftest-coverage" CACHE INTERNAL "")
set(CMAKE_CXX_FLAGS_COVERAGE
${COVERAGE_COMPILER_FLAGS}
CACHE STRING "Flags used by the C++ compiler during coverage builds." CACHE STRING "Flags used by the C++ compiler during coverage builds."
FORCE ) FORCE )
SET(CMAKE_C_FLAGS_COVERAGE set(CMAKE_C_FLAGS_COVERAGE
"-g -O0 --coverage -fprofile-arcs -ftest-coverage" ${COVERAGE_COMPILER_FLAGS}
CACHE STRING "Flags used by the C compiler during coverage builds." CACHE STRING "Flags used by the C compiler during coverage builds."
FORCE ) FORCE )
SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE set(CMAKE_EXE_LINKER_FLAGS_COVERAGE
"" ""
CACHE STRING "Flags used for linking binaries during coverage builds." CACHE STRING "Flags used for linking binaries during coverage builds."
FORCE ) FORCE )
SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE
"" ""
CACHE STRING "Flags used by the shared libraries linker during coverage builds." CACHE STRING "Flags used by the shared libraries linker during coverage builds."
FORCE ) FORCE )
MARK_AS_ADVANCED( mark_as_advanced(
CMAKE_CXX_FLAGS_COVERAGE CMAKE_CXX_FLAGS_COVERAGE
CMAKE_C_FLAGS_COVERAGE CMAKE_C_FLAGS_COVERAGE
CMAKE_EXE_LINKER_FLAGS_COVERAGE CMAKE_EXE_LINKER_FLAGS_COVERAGE
CMAKE_SHARED_LINKER_FLAGS_COVERAGE ) CMAKE_SHARED_LINKER_FLAGS_COVERAGE )
IF ( NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "Coverage")) if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
MESSAGE( WARNING "Code coverage results with an optimized (non-Debug) build may be misleading" ) message(WARNING "Code coverage results with an optimised (non-Debug) build may be misleading")
ENDIF() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug" endif() # NOT CMAKE_BUILD_TYPE STREQUAL "Debug"
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
link_libraries(gcov)
else()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage")
endif()
# Param _targetname The name of new the custom make target # Defines a target for running and collection code coverage information
# Param _testrunner The name of the target which runs the tests. # Builds dependencies, runs the given executable and outputs reports.
# MUST return ZERO always, even on errors. # NOTE! The executable should always have a ZERO as exit code otherwise
# If not, no coverage report will be created! # the coverage generation will not complete.
# Param _outputname lcov output is generated as _outputname.info #
# HTML report is generated in _outputname/index.html # SETUP_TARGET_FOR_COVERAGE_LCOV(
# Optional fourth parameter is passed as arguments to _testrunner # NAME testrunner_coverage # New target name
# Pass them in list form, e.g.: "-j;2" for -j 2 # EXECUTABLE testrunner -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
FUNCTION(SETUP_TARGET_FOR_COVERAGE _targetname _testrunner _outputname) # DEPENDENCIES testrunner # Dependencies to build first
# )
function(SETUP_TARGET_FOR_COVERAGE_LCOV)
IF(NOT LCOV_PATH) set(options NONE)
MESSAGE(FATAL_ERROR "lcov not found! Aborting...") set(oneValueArgs NAME)
ENDIF() # NOT LCOV_PATH set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
IF(NOT GENHTML_PATH) if(NOT LCOV_PATH)
MESSAGE(FATAL_ERROR "genhtml not found! Aborting...") message(FATAL_ERROR "lcov not found! Aborting...")
ENDIF() # NOT GENHTML_PATH endif() # NOT LCOV_PATH
SET(coverage_info "${CMAKE_BINARY_DIR}/${_outputname}.info") if(NOT GENHTML_PATH)
SET(coverage_cleaned "${coverage_info}.cleaned") message(FATAL_ERROR "genhtml not found! Aborting...")
endif() # NOT GENHTML_PATH
SEPARATE_ARGUMENTS(test_command UNIX_COMMAND "${_testrunner}") # Setup target
add_custom_target(${Coverage_NAME}
# Setup target # Cleanup lcov
ADD_CUSTOM_TARGET(${_targetname} COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -directory . --zerocounters
# Create baseline to make sure untouched files show up in the report
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -c -i -d . -o ${Coverage_NAME}.base
# Cleanup lcov # Run tests
${LCOV_PATH} --directory . --zerocounters COMMAND ${Coverage_EXECUTABLE}
# Run tests # Capturing lcov counters and generating report
COMMAND ${test_command} ${ARGV3} COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --directory . --capture --output-file ${Coverage_NAME}.info
# add baseline counters
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} -a ${Coverage_NAME}.base -a ${Coverage_NAME}.info --output-file ${Coverage_NAME}.total
COMMAND ${LCOV_PATH} --gcov-tool ${GCOV_PATH} --remove ${Coverage_NAME}.total ${COVERAGE_LCOV_EXCLUDES} --output-file ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned
COMMAND ${GENHTML_PATH} -o ${Coverage_NAME} ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned
COMMAND ${CMAKE_COMMAND} -E remove ${Coverage_NAME}.base ${Coverage_NAME}.total ${PROJECT_BINARY_DIR}/${Coverage_NAME}.info.cleaned
# Capturing lcov counters and generating report WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMAND ${LCOV_PATH} --directory . --capture --output-file ${coverage_info} DEPENDS ${Coverage_DEPENDENCIES}
COMMAND ${LCOV_PATH} --remove ${coverage_info} 'tests/*' '/usr/*' --output-file ${coverage_cleaned} COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report."
COMMAND ${GENHTML_PATH} -o ${_outputname} ${coverage_cleaned} )
COMMAND ${CMAKE_COMMAND} -E remove ${coverage_info} ${coverage_cleaned}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} # Show where to find the lcov info report
COMMENT "Resetting code coverage counters to zero.\nProcessing code coverage counters and generating report." add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
) COMMAND ;
COMMENT "Lcov code coverage info report saved in ${Coverage_NAME}.info."
)
# Show info where to find the report # Show info where to find the report
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
COMMAND ; COMMAND ;
COMMENT "Open ./${_outputname}/index.html in your browser to view the coverage report." COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
) )
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE endfunction() # SETUP_TARGET_FOR_COVERAGE_LCOV
# Param _targetname The name of new the custom make target # Defines a target for running and collection code coverage information
# Param _testrunner The name of the target which runs the tests # Builds dependencies, runs the given executable and outputs reports.
# Param _outputname cobertura output is generated as _outputname.xml # NOTE! The executable should always have a ZERO as exit code otherwise
# Optional fourth parameter is passed as arguments to _testrunner # the coverage generation will not complete.
# Pass them in list form, e.g.: "-j;2" for -j 2 #
FUNCTION(SETUP_TARGET_FOR_COVERAGE_COBERTURA _targetname _testrunner _outputname) # SETUP_TARGET_FOR_COVERAGE_GCOVR_XML(
# NAME ctest_coverage # New target name
# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
# DEPENDENCIES executable_target # Dependencies to build first
# )
function(SETUP_TARGET_FOR_COVERAGE_GCOVR_XML)
IF(NOT PYTHON_EXECUTABLE) set(options NONE)
MESSAGE(FATAL_ERROR "Python not found! Aborting...") set(oneValueArgs NAME)
ENDIF() # NOT PYTHON_EXECUTABLE set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
IF(NOT GCOVR_PATH) if(NOT SIMPLE_PYTHON_EXECUTABLE)
MESSAGE(FATAL_ERROR "gcovr not found! Aborting...") message(FATAL_ERROR "python not found! Aborting...")
ENDIF() # NOT GCOVR_PATH endif() # NOT SIMPLE_PYTHON_EXECUTABLE
ADD_CUSTOM_TARGET(${_targetname} if(NOT GCOVR_PATH)
message(FATAL_ERROR "gcovr not found! Aborting...")
endif() # NOT GCOVR_PATH
# Run tests # Combine excludes to several -e arguments
${_testrunner} ${ARGV3} set(GCOVR_EXCLUDES "")
foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES})
list(APPEND GCOVR_EXCLUDES "-e")
list(APPEND GCOVR_EXCLUDES "${EXCLUDE}")
endforeach()
# Running gcovr add_custom_target(${Coverage_NAME}
COMMAND ${GCOVR_PATH} -x -r ${CMAKE_SOURCE_DIR} -e '${CMAKE_SOURCE_DIR}/tests/' -o ${_outputname}.xml # Run tests
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} ${Coverage_EXECUTABLE}
COMMENT "Running gcovr to produce Cobertura code coverage report."
)
# Show info where to find the report # Running gcovr
ADD_CUSTOM_COMMAND(TARGET ${_targetname} POST_BUILD COMMAND ${GCOVR_PATH} --xml
COMMAND ; -r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES}
COMMENT "Cobertura code coverage report saved in ${_outputname}.xml." --object-directory=${PROJECT_BINARY_DIR}
) -o ${Coverage_NAME}.xml
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${Coverage_DEPENDENCIES}
COMMENT "Running gcovr to produce Cobertura code coverage report."
)
ENDFUNCTION() # SETUP_TARGET_FOR_COVERAGE_COBERTURA # Show info where to find the report
add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
COMMAND ;
COMMENT "Cobertura code coverage report saved in ${Coverage_NAME}.xml."
)
endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_XML
# Defines a target for running and collection code coverage information
# Builds dependencies, runs the given executable and outputs reports.
# NOTE! The executable should always have a ZERO as exit code otherwise
# the coverage generation will not complete.
#
# SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML(
# NAME ctest_coverage # New target name
# EXECUTABLE ctest -j ${PROCESSOR_COUNT} # Executable in PROJECT_BINARY_DIR
# DEPENDENCIES executable_target # Dependencies to build first
# )
function(SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML)
set(options NONE)
set(oneValueArgs NAME)
set(multiValueArgs EXECUTABLE EXECUTABLE_ARGS DEPENDENCIES)
cmake_parse_arguments(Coverage "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT SIMPLE_PYTHON_EXECUTABLE)
message(FATAL_ERROR "python not found! Aborting...")
endif() # NOT SIMPLE_PYTHON_EXECUTABLE
if(NOT GCOVR_PATH)
message(FATAL_ERROR "gcovr not found! Aborting...")
endif() # NOT GCOVR_PATH
# Combine excludes to several -e arguments
set(GCOVR_EXCLUDES "")
foreach(EXCLUDE ${COVERAGE_GCOVR_EXCLUDES})
list(APPEND GCOVR_EXCLUDES "-e")
list(APPEND GCOVR_EXCLUDES "${EXCLUDE}")
endforeach()
add_custom_target(${Coverage_NAME}
# Run tests
${Coverage_EXECUTABLE}
# Create folder
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/${Coverage_NAME}
# Running gcovr
COMMAND ${GCOVR_PATH} --html --html-details
-r ${PROJECT_SOURCE_DIR} ${GCOVR_EXCLUDES}
--object-directory=${PROJECT_BINARY_DIR}
-o ${Coverage_NAME}/index.html
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${Coverage_DEPENDENCIES}
COMMENT "Running gcovr to produce HTML code coverage report."
)
# Show info where to find the report
add_custom_command(TARGET ${Coverage_NAME} POST_BUILD
COMMAND ;
COMMENT "Open ./${Coverage_NAME}/index.html in your browser to view the coverage report."
)
endfunction() # SETUP_TARGET_FOR_COVERAGE_GCOVR_HTML
function(APPEND_COVERAGE_COMPILER_FLAGS)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COVERAGE_COMPILER_FLAGS}" PARENT_SCOPE)
message(STATUS "Appending code coverage compiler flags: ${COVERAGE_COMPILER_FLAGS}")
endfunction() # APPEND_COVERAGE_COMPILER_FLAGS

View File

@@ -14,21 +14,21 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
find_path(ARGON2_INCLUDE_DIR argon2.h) find_path(ARGON2_INCLUDE_DIR argon2.h)
if (MINGW) if(MINGW)
# find static library on Windows, and redefine used symbols to # find static library on Windows, and redefine used symbols to
# avoid definition name conflicts with libsodium # avoid definition name conflicts with libsodium
find_library(ARGON2_SYS_LIBRARIES libargon2.a) find_library(ARGON2_SYS_LIBRARIES libargon2.a)
message(STATUS "Patching libargon2...\n") message(STATUS "Patching libargon2...\n")
execute_process(COMMAND objcopy execute_process(COMMAND objcopy
--redefine-sym argon2_hash=libargon2_argon2_hash --redefine-sym argon2_hash=libargon2_argon2_hash
--redefine-sym _argon2_hash=_libargon2_argon2_hash --redefine-sym _argon2_hash=_libargon2_argon2_hash
--redefine-sym argon2_error_message=libargon2_argon2_error_message --redefine-sym argon2_error_message=libargon2_argon2_error_message
--redefine-sym _argon2_error_message=_libargon2_argon2_error_message --redefine-sym _argon2_error_message=_libargon2_argon2_error_message
${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a ${ARGON2_SYS_LIBRARIES} ${CMAKE_BINARY_DIR}/libargon2_patched.a
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) find_library(ARGON2_LIBRARIES libargon2_patched.a PATHS ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH)
else() else()
find_library(ARGON2_LIBRARIES argon2) find_library(ARGON2_LIBRARIES argon2)
endif() endif()
mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR) mark_as_advanced(ARGON2_LIBRARIES ARGON2_INCLUDE_DIR)

View File

@@ -22,7 +22,7 @@ mark_as_advanced(GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR)
if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h") if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h")
file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$") file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$")
string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}") string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}")
string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}")
string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}") string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}")
set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}") set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}")
endif() endif()

22
cmake/FindQREncode.cmake Normal file
View File

@@ -0,0 +1,22 @@
# Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or (at your option)
# version 3 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
find_path(QRENCODE_INCLUDE_DIR qrencode.h)
find_library(QRENCODE_LIBRARY qrencode)
mark_as_advanced(QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(QREncode DEFAULT_MSG QRENCODE_LIBRARY QRENCODE_INCLUDE_DIR)

41
cmake/FindQuaZip.cmake Normal file
View File

@@ -0,0 +1,41 @@
# QUAZIP_FOUND - QuaZip library was found
# QUAZIP_INCLUDE_DIR - Path to QuaZip include dir
# QUAZIP_INCLUDE_DIRS - Path to QuaZip and zlib include dir (combined from QUAZIP_INCLUDE_DIR + ZLIB_INCLUDE_DIR)
# QUAZIP_LIBRARIES - List of QuaZip libraries
# QUAZIP_ZLIB_INCLUDE_DIR - The include dir of zlib headers
IF(QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES)
# in cache already
SET(QUAZIP_FOUND TRUE)
ELSE(QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES)
IF(Qt5Core_FOUND)
set(QUAZIP_LIB_VERSION_SUFFIX 5)
ENDIF()
IF(WIN32)
FIND_PATH(QUAZIP_LIBRARY_DIR
WIN32_DEBUG_POSTFIX d
NAMES libquazip${QUAZIP_LIB_VERSION_SUFFIX}.dll
HINTS "C:/Programme/" "C:/Program Files"
PATH_SUFFIXES QuaZip/lib
)
FIND_LIBRARY(QUAZIP_LIBRARIES NAMES libquazip${QUAZIP_LIB_VERSION_SUFFIX}.dll HINTS ${QUAZIP_LIBRARY_DIR})
FIND_PATH(QUAZIP_INCLUDE_DIR NAMES quazip.h HINTS ${QUAZIP_LIBRARY_DIR}/../ PATH_SUFFIXES include/quazip5)
FIND_PATH(QUAZIP_ZLIB_INCLUDE_DIR NAMES zlib.h)
ELSE(WIN32)
FIND_PACKAGE(PkgConfig)
pkg_check_modules(PC_QUAZIP quazip)
FIND_LIBRARY(QUAZIP_LIBRARIES
WIN32_DEBUG_POSTFIX d
NAMES quazip${QUAZIP_LIB_VERSION_SUFFIX}
HINTS /usr/lib /usr/lib64
)
FIND_PATH(QUAZIP_INCLUDE_DIR quazip.h
HINTS /usr/include /usr/local/include
PATH_SUFFIXES quazip${QUAZIP_LIB_VERSION_SUFFIX}
)
FIND_PATH(QUAZIP_ZLIB_INCLUDE_DIR zlib.h HINTS /usr/include /usr/local/include)
ENDIF(WIN32)
INCLUDE(FindPackageHandleStandardArgs)
SET(QUAZIP_INCLUDE_DIRS ${QUAZIP_INCLUDE_DIR} ${QUAZIP_ZLIB_INCLUDE_DIR})
find_package_handle_standard_args(QUAZIP DEFAULT_MSG QUAZIP_LIBRARIES QUAZIP_INCLUDE_DIR QUAZIP_ZLIB_INCLUDE_DIR QUAZIP_INCLUDE_DIRS)
ENDIF(QUAZIP_INCLUDE_DIRS AND QUAZIP_LIBRARIES)

View File

@@ -91,7 +91,7 @@ function(generate_product_version outfiles)
set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}") set(PRODUCT_COMPANY_COPYRIGHT "Copyright (C) ${PRODUCT_CURRENT_YEAR} ${PRODUCT_COMPANY_NAME}")
endif() endif()
if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "") if (NOT PRODUCT_COMMENTS OR "${PRODUCT_COMMENTS}" STREQUAL "")
set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}") set(PRODUCT_COMMENTS "${PRODUCT_NAME} v${PRODUCT_VERSION_MAJOR}.${PRODUCT_VERSION_MINOR}.${PRODUCT_VERSION_PATCH}")
endif() endif()
if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "") if (NOT PRODUCT_ORIGINAL_FILENAME OR "${PRODUCT_ORIGINAL_FILENAME}" STREQUAL "")
set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}") set(PRODUCT_ORIGINAL_FILENAME "${PRODUCT_NAME}")

View File

@@ -1,130 +0,0 @@
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
# git_describe(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
# git_get_exact_tag(<var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.BOOST-1.0 or copy at
# http://www.boost.org/LICENSE_1_0.txt)
if(__get_git_revision_description)
return()
endif()
set(__get_git_revision_description YES)
# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(get_git_head_revision _refspecvar _hashvar)
set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories
set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
# We have reached the root directory, we are not in git
set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
return()
endif()
set(GIT_DIR "${GIT_PARENT_DIR}/.git")
endwhile()
# check if this is a submodule
if(NOT IS_DIRECTORY ${GIT_DIR})
file(READ ${GIT_DIR} submodule)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
endif()
set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
if(NOT EXISTS "${GIT_DATA}")
file(MAKE_DIRECTORY "${GIT_DATA}")
endif()
if(NOT EXISTS "${GIT_DIR}/HEAD")
return()
endif()
set(HEAD_FILE "${GIT_DATA}/HEAD")
configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
"${GIT_DATA}/grabRef.cmake"
@ONLY)
include("${GIT_DATA}/grabRef.cmake")
set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()
function(git_describe _var)
if(NOT GIT_FOUND)
find_package(Git QUIET)
endif()
get_git_head_revision(refspec hash)
if(NOT GIT_FOUND)
set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
return()
endif()
if(NOT hash)
set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
return()
endif()
# TODO sanitize
#if((${ARGN}" MATCHES "&&") OR
# (ARGN MATCHES "||") OR
# (ARGN MATCHES "\\;"))
# message("Please report the following error to the project!")
# message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
#endif()
#message(STATUS "Arguments to execute_process: ${ARGN}")
execute_process(COMMAND
"${GIT_EXECUTABLE}"
describe
${hash}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE
res
OUTPUT_VARIABLE
out
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT res EQUAL 0)
set(out "${out}-${res}-NOTFOUND")
endif()
set(${_var} "${out}" PARENT_SCOPE)
endfunction()
function(git_get_exact_tag _var)
git_describe(out --exact-match ${ARGN})
set(${_var} "${out}" PARENT_SCOPE)
endfunction()

View File

@@ -1,41 +0,0 @@
#
# Internal file for GetGitRevisionDescription.cmake
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.BOOST-1.0 or copy at
# http://www.boost.org/LICENSE_1_0.txt)
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
if(HEAD_CONTENTS MATCHES "ref")
# named branch
string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
if(EXISTS "@GIT_DIR@/${HEAD_REF}")
configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
else()
configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
set(HEAD_HASH "${CMAKE_MATCH_1}")
endif()
endif()
else()
# detached HEAD
configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
endif()
if(NOT HEAD_HASH)
file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
string(STRIP "${HEAD_HASH}" HEAD_HASH)
endif()

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -24,17 +24,18 @@ for all your websites, programs, etc.
## Setting up Browser Integration with KeePassXC ## Setting up Browser Integration with KeePassXC
* *Within KeePassXC*, go to **Tools->Settings** (on macOS, go to **KeePassXC->Preferences**.) * *Within KeePassXC*, go to **Tools->Settings** (on macOS, go to **KeePassXC->Preferences**.)
* In **Browser Integration**, check **Enable KeePassHTTP server** * In **Browser Integration**, check **Enable KeePassXC browser integration**
* Right below that, click the checkbox for the browser(s) you use
Leave the other options at their defaults. Leave the other options at their defaults.
* *In your default web browser,* install the KeePassHTTP-Connector extension/add-on. Instructions for [Firefox](https://addons.mozilla.org/en-US/firefox/addon/keepasshttp-connector/?src=api) or [Chrome](https://chrome.google.com/webstore/detail/keepasshttp-connector/dafgdjggglmmknipkhngniifhplpcldb?utm_source=chrome-app-launcher-info-dialog) * *In your default web browser,* install the KeePassXC Browser extension/add-on. Instructions for [Firefox or Tor Browser](https://addons.mozilla.org/en-US/firefox/addon/keepassxc-browser/) or [Chrome](https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk)
* Click the KeePassXC icon in the upper-right corner. You'll see the dialog below. * Click the KeePassXC icon in the upper-right corner. You'll see the dialog below.
* Click the blue Connect button to make the browser extension connect to the KeePassXC application. * Click the blue Connect button to make the browser extension connect to the KeePassXC application.
<img src="./KeePassXC-Connect.png" height="200" alt="KeePassXC Connect dialog"> <img src="./KeePassHTTP/KeePassXC-Connect.png" height="200" alt="KeePassXC Connect dialog">
* *Switch back to KeePassXC.* You'll see a dialog (below) indicating that a request to connect has arrived. * *Switch back to KeePassXC.* You'll see a dialog (below) indicating that a request to connect has arrived.
* Give the connection a name (perhaps *Keepass-Browsername*, any unique name will suffice) and click OK to accept it. * Give the connection a name (perhaps *Keepass-Browsername*, any unique name will suffice) and click OK to accept it.
* This one-time operation connects KeePassXC and your browser. * This one-time operation connects KeePassXC and your browser.
<img src="./KeePassXC-Accept-Button.png" height="200" alt="KeePassXC accept connection dialog"> <img src="./KeePassHTTP/KeePassXC-Accept-Button.png" height="200" alt="KeePassXC accept connection dialog">
## Using Browser Integration ## Using Browser Integration
@@ -44,4 +45,87 @@ or select it and type Ctrl+U (Cmd+U on macOS).
* If there are username/password fields on that page, you will see the dialog below. * If there are username/password fields on that page, you will see the dialog below.
Click *Allow* to confirm that KeePassXC may access the credentials to auto-fill the fields. Click *Allow* to confirm that KeePassXC may access the credentials to auto-fill the fields.
* Check *Remember this decision* to allow this each time you visit the page. * Check *Remember this decision* to allow this each time you visit the page.
<img src="./KeePassXC-Confirm.png" height="200" alt="KeePassCX Confirm Access dialog"> <img src="./KeePassHTTP/KeePassXC-Confirm.png" height="200" alt="KeePassCX Confirm Access dialog">
## Using Sharing
Sharing allows you to share a subset of your credentials with others and vice versa.
### Enable Sharing
To use sharing, you need to enable for the application.
1. Go to Tools &rarr; Settings
2. Select the category KeeShare
3. Check _Allow import_ if you want to import shared credentials
4. Check _Allow export_ if you want to share credentials
To make sure that your data is valid when im imported by another client, please _generate_ (or _import_) a public/private key pair and enter your _signer_ name. This way your client may verify that the imported data is valid. When Importing, you'll see the known sources with names and fingerprint in the list at the bottom. This is the place to _trust_ or _untrust_ signers. It is only possible to trust someone on application level.
<img src="./KeeShare/AppSettings.png" height="600" width="800" alt="KeeShare Application Settings">
### Sharing Credentials
If you checked _Allow export_ in the Sharing settings you now are good to go to share some passwords with others. Sharing always is defined on a group. If you enable sharing on a group, every entry under this group or it's children is shared. If you enable sharing on the root node, **every password** inside your database gets shared!
1. Open the edit sheet on a group you want to share
1. Select the sharing section
1. Choose _Export to path_ as the sharing method
1. Choose a path to store the shared credentials to
1. Generate a password for this share container
The export file will not be generated automatically. Instead, each time the database is saved, the file gets written (so please deactivate the autosafe feature). If an old file is present, the old file will be overwritten! The file should be written to a location that is accessible by others. An easy setup is a network share or storing the file inside the cloud.
<img src="./KeeShare/GroupSettings_Export.png" height="600" width="800" alt="KeeShare Group Sharing Settings">
### Using Shared Credentials
Checking _Allow import_ in the Sharing settings of the database enables you to receive credentials from others. KeePass will watch sharing sources and import any changes immediately into your database using the synchronization feature.
1. Create a group for import
1. Open the edit sheet on that group
1. Select the sharing section
1. Choose _Import from path_ as the sharing method
1. Choose a share container that is shared with you
1. Enter the password for the shared container
KeeShare observes the container for changes and merges them into your database when necessary. Importing merges in time order, so older data is moved to the history, which should have a sufficient size to prevent loss of needed data.
Please note, that the import currently is not restricted to the configured group. Every entry which was imported and moved outside the import group will be updated regardless of it's location!
<img src="./KeeShare/GroupSettings_Import.png" height="600" width="800" alt="KeeShare Group Import Settings">
### Using Synchronized Credentials
Instead of using different groups for sharing and importing you can use a single group that acts as both. This way you can synchronize a number of credentials easily across many users without a lot of hassle.
1. Open the edit sheet on a group you want to synchronize
1. Select the sharing section
1. Choose _Synchronize with path_ as the sharing method
1. Choose a database that you want to use a synchronization file
1. Enter the password for the database
<img src="./KeeShare/GroupSettings_Sync.png" height="600" width="800" alt="KeeShare Group Synchronization Settings">
### Disable Sharing for Credentials
In case you don't want to share (import or export) some credentials, it is possible to you can
* use the application settings and uncheck the options or
* instead of selecting _Import from path_, _Export to path_ or _Synchronize with path_ you'll select _Inactive_ while leaving the path and the password untouched
### Sharing overview
There is a simple overview of shared groups to keep track of your data.
1. Open the Database Settings
1. Select the KeeShare category
<img src="./KeeShare/DatabaseSettings.png" height="600" width="800" alt="KeeShare Group Sharing Ovewview">
## Technical Details and Limitations of Sharing
Sharing relies on the combination of file exports and imports as well as the synchronization mechanism provided by KeePassXC. Since the merge algorithm uses the history of entries to prevent data loss, this history must be enabled and have a sufficient size. Furthermore, the merge algorithm is location independend, therefore it does not matter if entries are moved outside of an import group. These entries will be updated none the less. Moving entries outside of export groups will prevent a further export of the entry, but it will not ensure that the already shared data will be removed from any client.
KeeShare uses a custom certification mechanism to ensure that the source of the data is the expected one. This ensures that the data was exported by the signer but it is not possible to detect if someone replaced the data with an older version from a valid signer. To prevent this, the container could be placed at a location which is only writeable for valid signers.

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# #
# KeePassXC Release Preparation Helper # KeePassXC Release Preparation Helper
# Copyright (C) 2017 KeePassXC team <https://keepassxc.org/> # Copyright (C) 2017 KeePassXC team <https://keepassxc.org/>
# #
@@ -35,12 +35,11 @@ TAG_NAME=""
DOCKER_IMAGE="" DOCKER_IMAGE=""
DOCKER_CONTAINER_NAME="keepassxc-build-container" DOCKER_CONTAINER_NAME="keepassxc-build-container"
CMAKE_OPTIONS="" CMAKE_OPTIONS=""
CPACK_GENERATORS="WIX;ZIP"
COMPILER="g++" COMPILER="g++"
MAKE_OPTIONS="-j8" MAKE_OPTIONS="-j8"
BUILD_PLUGINS="all" BUILD_PLUGINS="all"
INSTALL_PREFIX="/usr/local" INSTALL_PREFIX="/usr/local"
BUILD_SOURCE_TARBALL=true
BUILD_SNAPSHOT=false
ORIG_BRANCH="" ORIG_BRANCH=""
ORIG_CWD="$(pwd)" ORIG_CWD="$(pwd)"
@@ -51,7 +50,8 @@ printUsage() {
local cmd local cmd
if [ "" == "$1" ] || [ "help" == "$1" ]; then if [ "" == "$1" ] || [ "help" == "$1" ]; then
cmd="COMMAND" cmd="COMMAND"
elif [ "check" == "$1" ] || [ "merge" == "$1" ] || [ "build" == "$1" ] || [ "gpgsign" == "$1" ] || [ "appsign" == "$1" ]; then elif [ "check" == "$1" ] || [ "merge" == "$1" ] || [ "build" == "$1" ] \
|| [ "gpgsign" == "$1" ] || [ "appsign" == "$1" ] || [ "appimage" == "$1" ]; then
cmd="$1" cmd="$1"
else else
logError "Unknown command: '$1'\n" logError "Unknown command: '$1'\n"
@@ -59,7 +59,7 @@ printUsage() {
fi fi
printf "\e[1mUsage:\e[0m $(basename $0) $cmd [options]\n" printf "\e[1mUsage:\e[0m $(basename $0) $cmd [options]\n"
if [ "COMMAND" == "$cmd" ]; then if [ "COMMAND" == "$cmd" ]; then
cat << EOF cat << EOF
@@ -80,7 +80,7 @@ Options:
-v, --version Release version number or name (required) -v, --version Release version number or name (required)
-a, --app-name Application name (default: '${APP_NAME}') -a, --app-name Application name (default: '${APP_NAME}')
-s, --source-dir Source directory (default: '${SRC_DIR}') -s, --source-dir Source directory (default: '${SRC_DIR}')
-g, --gpg-key GPG key used to sign the merge commit and release tag, -k, --key GPG key used to sign the merge commit and release tag,
leave empty to let Git choose your default key leave empty to let Git choose your default key
(default: '${GPG_GIT_KEY}') (default: '${GPG_GIT_KEY}')
-r, --release-branch Source release branch to merge from (default: 'release/VERSION') -r, --release-branch Source release branch to merge from (default: 'release/VERSION')
@@ -106,9 +106,16 @@ Options:
This option has no effect if --build is not set. This option has no effect if --build is not set.
--container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}') --container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}')
The container must not exist already The container must not exist already
--snapcraft Create and use docker image to build snapcraft distribution.
This option has no effect if --docker-image is not set.
--appimage Build a Linux AppImage after compilation.
If this option is set, --install-prefix has no effect
--appsign Perform platform specific App Signing before packaging
-k, --key Specify the App Signing Key/Identity
-c, --cmake-options Additional CMake options for compiling the sources -c, --cmake-options Additional CMake options for compiling the sources
--compiler Compiler to use (default: '${COMPILER}') --compiler Compiler to use (default: '${COMPILER}')
-m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}') -m, --make-options Make options for compiling sources (default: '${MAKE_OPTIONS}')
-g, --generators Additional CPack generators (default: '${CPACK_GENERATORS}')
-i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}') -i, --install-prefix Install prefix (default: '${INSTALL_PREFIX}')
-p, --plugins Space-separated list of plugins to build -p, --plugins Space-separated list of plugins to build
(default: ${BUILD_PLUGINS}) (default: ${BUILD_PLUGINS})
@@ -123,7 +130,7 @@ Sign previously compiled release packages with GPG
Options: Options:
-f, --files Files to sign (required) -f, --files Files to sign (required)
-g, --gpg-key GPG key used to sign the files (default: '${GPG_KEY}') -k, --key GPG key used to sign the files (default: '${GPG_KEY}')
-h, --help Show this help -h, --help Show this help
EOF EOF
elif [ "appsign" == "$cmd" ]; then elif [ "appsign" == "$cmd" ]; then
@@ -133,9 +140,27 @@ Sign binaries with code signing certificates on Windows and macOS
Options: Options:
-f, --files Files to sign (required) -f, --files Files to sign (required)
-k, --signtool-key Key to be used with signtool (required for Windows EXE) -k, --key Signing Key or Apple Developer ID
-i, --identity Apple Developer ID to be used with codesign (required for macOS APP and DMG)
-h, --help Show this help -h, --help Show this help
EOF
elif [ "appimage" == "$cmd" ]; then
cat << EOF
Generate Linux AppImage from 'make install' AppDir
Options:
-a, --appdir Input AppDir (required)
-v, --version KeePassXC version
-o, --output-dir Output directory where to build the AppImage
(default: '${OUTPUT_DIR}')
-d, --docker-image Use the specified Docker image to build the AppImage.
The image must have all required build dependencies installed.
--container-name Docker container name (default: '${DOCKER_CONTAINER_NAME}')
The container must not exist already
--appsign Embed a PGP signature into the AppImage
-k, --key The PGP Signing Key
--verbosity linuxdeploy verbosity (default: 3)
-h, --help Show this help
EOF EOF
fi fi
} }
@@ -158,7 +183,7 @@ init() {
if [ "" == "$TAG_NAME" ]; then if [ "" == "$TAG_NAME" ]; then
TAG_NAME="$RELEASE_NAME" TAG_NAME="$RELEASE_NAME"
fi fi
if [ "" == "$SOURCE_BRANCH" ]; then if [ "" == "$SOURCE_BRANCH" ]; then
SOURCE_BRANCH="release/${RELEASE_NAME}" SOURCE_BRANCH="release/${RELEASE_NAME}"
fi fi
@@ -189,6 +214,10 @@ exitTrap() {
exitError "Existing upon user request..." exitError "Existing upon user request..."
} }
cmdExists() {
command -v "$1" &> /dev/null
}
checkSourceDirExists() { checkSourceDirExists() {
if [ ! -d "$SRC_DIR" ]; then if [ ! -d "$SRC_DIR" ]; then
exitError "Source directory '${SRC_DIR}' does not exist!" exitError "Source directory '${SRC_DIR}' does not exist!"
@@ -268,7 +297,7 @@ checkChangeLog() {
if [ ! -f CHANGELOG ]; then if [ ! -f CHANGELOG ]; then
exitError "No CHANGELOG file found!" exitError "No CHANGELOG file found!"
fi fi
grep -qPzo "${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n=+\n" CHANGELOG grep -qPzo "${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n=+\n" CHANGELOG
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
exitError "'CHANGELOG' has not been updated to the '${RELEASE_NAME}' release!" exitError "'CHANGELOG' has not been updated to the '${RELEASE_NAME}' release!"
@@ -299,38 +328,32 @@ checkSnapcraft() {
} }
checkTransifexCommandExists() { checkTransifexCommandExists() {
command -v tx > /dev/null if ! cmdExists tx; then
if [ 0 -ne $? ]; then
exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'." exitError "Transifex tool 'tx' not installed! Please install it using 'pip install transifex-client'."
fi fi
} }
checkOsslsigncodeCommandExists() { checkOsslsigncodeCommandExists() {
command -v osslsigncode > /dev/null if ! cmdExists osslsigncode; then
if [ 0 -ne $? ]; then
exitError "osslsigncode command not found on the PATH! Please install it using 'pacman -S mingw-w64-osslsigncode'." exitError "osslsigncode command not found on the PATH! Please install it using 'pacman -S mingw-w64-osslsigncode'."
fi fi
} }
checkSigntoolCommandExists() { checkSigntoolCommandExists() {
command -v signtool > /dev/null if ! cmdExists signtool; then
if [ 0 -ne $? ]; then
exitError "signtool command not found on the PATH! Add the Windows SDK binary folder to your PATH." exitError "signtool command not found on the PATH! Add the Windows SDK binary folder to your PATH."
fi fi
} }
checkCodesignCommandExists() { checkCodesignCommandExists() {
command -v codesign > /dev/null if ! cmdExists codesign; then
if [ 0 -ne $? ]; then
exitError "codesign command not found on the PATH! Please check that you have correctly installed Xcode." exitError "codesign command not found on the PATH! Please check that you have correctly installed Xcode."
fi fi
} }
checkQt5LUpdateExists() { checkQt5LUpdateExists() {
command -v lupdate > /dev/null if cmdExists lupdate && ! $(lupdate -version | grep -q "lupdate version 5\."); then
if [ 0 -eq $? ] && ! $(lupdate -version | grep -q "lupdate version 5\."); then if ! cmdExists lupdate-qt5; then
command -v lupdate-qt5 > /dev/null
if [ 0 -ne $? ]; then
exitError "Qt Linguist tool (lupdate-qt5) is not installed! Please install using 'apt install qttools5-dev-tools'" exitError "Qt Linguist tool (lupdate-qt5) is not installed! Please install using 'apt install qttools5-dev-tools'"
fi fi
fi fi
@@ -338,12 +361,12 @@ checkQt5LUpdateExists() {
performChecks() { performChecks() {
logInfo "Performing basic checks..." logInfo "Performing basic checks..."
checkSourceDirExists checkSourceDirExists
logInfo "Changing to source directory..." logInfo "Changing to source directory..."
cd "${SRC_DIR}" cd "${SRC_DIR}"
logInfo "Validating toolset and repository..." logInfo "Validating toolset and repository..."
checkTransifexCommandExists checkTransifexCommandExists
@@ -353,23 +376,23 @@ performChecks() {
checkWorkingTreeClean checkWorkingTreeClean
checkSourceBranchExists checkSourceBranchExists
checkTargetBranchExists checkTargetBranchExists
logInfo "Checking out '${SOURCE_BRANCH}'..." logInfo "Checking out '${SOURCE_BRANCH}'..."
git checkout "$SOURCE_BRANCH" git checkout "$SOURCE_BRANCH"
logInfo "Attempting to find '${RELEASE_NAME}' in various files..." logInfo "Attempting to find '${RELEASE_NAME}' in various files..."
checkVersionInCMake checkVersionInCMake
checkChangeLog checkChangeLog
checkAppStreamInfo checkAppStreamInfo
checkSnapcraft checkSnapcraft
logInfo "\e[1m\e[32mAll checks passed!\e[0m" logInfo "\e[1m\e[32mAll checks passed!\e[0m"
} }
# re-implement realpath for OS X (thanks mschrag) # re-implement realpath for OS X (thanks mschrag)
# https://superuser.com/questions/205127/ # https://superuser.com/questions/205127/
if ! $(command -v realpath > /dev/null); then if ! cmdExists realpath; then
realpath() { realpath() {
pushd . > /dev/null pushd . > /dev/null
if [ -d "$1" ]; then if [ -d "$1" ]; then
@@ -378,7 +401,7 @@ if ! $(command -v realpath > /dev/null); then
else else
cd "$(dirname "$1")" cd "$(dirname "$1")"
cur_dir=$(dirs -l +0) cur_dir=$(dirs -l +0)
if [ "$cur_dir" == "/" ]; then if [ "$cur_dir" == "/" ]; then
echo "$cur_dir$(basename "$1")" echo "$cur_dir$(basename "$1")"
else else
@@ -418,42 +441,42 @@ check() {
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# merge command # merge command
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
merge() { merge() {
while [ $# -ge 1 ]; do while [ $# -ge 1 ]; do
local arg="$1" local arg="$1"
case "$arg" in case "$arg" in
-v|--version) -v|--version)
RELEASE_NAME="$2" RELEASE_NAME="$2"
shift ;; shift ;;
-a|--app-name) -a|--app-name)
APP_NAME="$2" APP_NAME="$2"
shift ;; shift ;;
-s|--source-dir) -s|--source-dir)
SRC_DIR="$2" SRC_DIR="$2"
shift ;; shift ;;
-g|--gpg-key) -k|--key|-g|--gpg-key)
GPG_GIT_KEY="$2" GPG_GIT_KEY="$2"
shift ;; shift ;;
-r|--release-branch) -r|--release-branch)
SOURCE_BRANCH="$2" SOURCE_BRANCH="$2"
shift ;; shift ;;
--target-branch) --target-branch)
TARGET_BRANCH="$2" TARGET_BRANCH="$2"
shift ;; shift ;;
-t|--tag-name) -t|--tag-name)
TAG_NAME="$2" TAG_NAME="$2"
shift ;; shift ;;
-h|--help) -h|--help)
printUsage "merge" printUsage "merge"
exit ;; exit ;;
*) *)
logError "Unknown option '$arg'\n" logError "Unknown option '$arg'\n"
printUsage "merge" printUsage "merge"
@@ -465,7 +488,7 @@ merge() {
init init
performChecks performChecks
logInfo "Updating language files..." logInfo "Updating language files..."
./share/translations/update.sh update ./share/translations/update.sh update
./share/translations/update.sh pull ./share/translations/update.sh pull
@@ -486,10 +509,10 @@ merge() {
CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n)=+\n\n?(?:.|\n)+?\n(?=\n)" \ CHANGELOG=$(grep -Pzo "(?<=${RELEASE_NAME} \(\d{4}-\d{2}-\d{2}\)\n)=+\n\n?(?:.|\n)+?\n(?=\n)" \
CHANGELOG | grep -Pzo '(?<=\n\n)(.|\n)+' | tr -d \\0) CHANGELOG | grep -Pzo '(?<=\n\n)(.|\n)+' | tr -d \\0)
COMMIT_MSG="Release ${RELEASE_NAME}" COMMIT_MSG="Release ${RELEASE_NAME}"
logInfo "Checking out target branch '${TARGET_BRANCH}'..." logInfo "Checking out target branch '${TARGET_BRANCH}'..."
git checkout "$TARGET_BRANCH" git checkout "$TARGET_BRANCH"
logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..." logInfo "Merging '${SOURCE_BRANCH}' into '${TARGET_BRANCH}'..."
git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY" git merge "$SOURCE_BRANCH" --no-ff -m "$COMMIT_MSG" -m "${CHANGELOG}" "$SOURCE_BRANCH" -S"$GPG_GIT_KEY"
@@ -500,79 +523,293 @@ merge() {
else else
git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY" git tag -a "$TAG_NAME" -m "$COMMIT_MSG" -m "${CHANGELOG}" -s -u "$GPG_GIT_KEY"
fi fi
cleanup cleanup
logInfo "All done!" logInfo "All done!"
logInfo "Please merge the release branch back into the develop branch now and then push your changes." logInfo "Please merge the release branch back into the develop branch now and then push your changes."
logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m." logInfo "Don't forget to also push the tags using \e[1mgit push --tags\e[0m."
} }
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# build command # appimage command
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
build() { appimage() {
local appdir
local build_appsign=false
local build_key
local verbosity="1"
while [ $# -ge 1 ]; do while [ $# -ge 1 ]; do
local arg="$1" local arg="$1"
case "$arg" in case "$arg" in
-v|--version) -v|--version)
RELEASE_NAME="$2" RELEASE_NAME="$2"
shift ;; shift ;;
-a|--app-name) -a|--appdir)
APP_NAME="$2" appdir="$2"
shift ;; shift ;;
-s|--source-dir)
SRC_DIR="$2"
shift ;;
-o|--output-dir) -o|--output-dir)
OUTPUT_DIR="$2" OUTPUT_DIR="$2"
shift ;; shift ;;
-t|--tag-name)
TAG_NAME="$2"
shift ;;
-d|--docker-image) -d|--docker-image)
DOCKER_IMAGE="$2" DOCKER_IMAGE="$2"
shift ;; shift ;;
--container-name) --container-name)
DOCKER_CONTAINER_NAME="$2" DOCKER_CONTAINER_NAME="$2"
shift ;; shift ;;
--appsign)
build_appsign=true ;;
--verbosity)
verbosity=$2
shift ;;
-k|--key)
build_key="$2"
shift ;;
-h|--help)
printUsage "appimage"
exit ;;
*)
logError "Unknown option '$arg'\n"
printUsage "appimage"
exit 1 ;;
esac
shift
done
if [ -z "${appdir}" ]; then
logError "Missing arguments, --appdir is required!\n"
printUsage "appimage"
exit 1
fi
if [ ! -d "${appdir}" ]; then
logError "AppDir does not exist, please create one with 'make install'!\n"
exit 1
elif [ -e "${appdir}/AppRun" ]; then
logError "AppDir has already been run through linuxdeploy, please create a fresh AppDir with 'make install'.\n"
exit 1
fi
appdir="$(realpath "$appdir")"
local out="${OUTPUT_DIR}"
if [ "" == "$out" ]; then
out="."
fi
mkdir -p "$out"
local out_real="$(realpath "$out")"
cd "$out"
local linuxdeploy="linuxdeploy"
local linuxdeploy_cleanup
local linuxdeploy_plugin_qt="linuxdeploy-plugin-qt"
local linuxdeploy_plugin_qt_cleanup
local appimagetool="appimagetool"
local appimagetool_cleanup
logInfo "Testing for AppImage tools..."
local docker_test_cmd
if [ "" != "$DOCKER_IMAGE" ]; then
docker_test_cmd="docker run --rm ${DOCKER_IMAGE}"
fi
# Test if linuxdeploy and linuxdeploy-plugin-qt are installed
# on the system or inside the Docker container
if ! ${docker_test_cmd} which ${linuxdeploy} &> /dev/null; then
logInfo "Downloading linuxdeploy..."
linuxdeploy="./linuxdeploy"
linuxdeploy_cleanup="rm -f ${linuxdeploy}"
curl -L "https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage" > "$linuxdeploy"
chmod +x "$linuxdeploy"
fi
if ! ${docker_test_cmd} which ${linuxdeploy_plugin_qt} &> /dev/null; then
logInfo "Downloading linuxdeploy-plugin-qt..."
linuxdeploy_plugin_qt="./linuxdeploy-plugin-qt"
linuxdeploy_plugin_qt_cleanup="rm -f ${linuxdeploy_plugin_qt}"
curl -L "https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage" > "$linuxdeploy_plugin_qt"
chmod +x "$linuxdeploy_plugin_qt"
fi
# appimagetool is always run outside a Docker container, so we can access our GPG keys
if ! cmdExists ${appimagetool}; then
logInfo "Downloading appimagetool..."
appimagetool="./appimagetool"
appimagetool_cleanup="rm -f ${appimagetool}"
curl -L "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" > "$appimagetool"
chmod +x "$appimagetool"
fi
# Create custom AppRun wrapper
cat << EOF > "${out_real}/KeePassXC-AppRun"
#!/usr/bin/env bash
export PATH="\$(dirname \$0)/usr/bin:\${PATH}"
export LD_LIBRARY_PATH="\$(dirname \$0)/usr/lib:\${LD_LIBRARY_PATH}"
if [ "\${1}" == "cli" ]; then
shift
exec keepassxc-cli "\$@"
elif [ "\${1}" == "proxy" ]; then
shift
exec keepassxc-proxy "\$@"
elif [ -v CHROME_WRAPPER ] || [ -v MOZ_LAUNCHED_CHILD ]; then
exec keepassxc-proxy "\$@"
else
exec keepassxc "\$@"
fi
EOF
chmod +x "${out_real}/KeePassXC-AppRun"
# Find .desktop files, icons, and binaries to deploy
local desktop_file="$(find "$appdir" -name "org.keepassxc.KeePassXC.desktop" | head -n1)"
local icon="$(find "$appdir" -name 'keepassxc.png' | grep -P 'application/256x256/apps/keepassxc.png$' | head -n1)"
local executables="$(IFS=$'\n' find "$appdir" | grep -P '/usr/bin/keepassxc[^/]*$' | xargs -i printf " --executable={}")"
logInfo "Collecting libs and patching binaries..."
if [ "" == "$DOCKER_IMAGE" ]; then
"$linuxdeploy" --verbosity=${verbosity} --plugin=qt --appdir="$appdir" --desktop-file="$desktop_file" \
--custom-apprun="${out_real}/KeePassXC-AppRun" --icon-file="$icon" ${executables} \
--library=$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)
else
desktop_file="${desktop_file//${appdir}/\/keepassxc\/AppDir}"
icon="${icon//${appdir}/\/keepassxc\/AppDir}"
executables="${executables//${appdir}/\/keepassxc\/AppDir}"
docker run --name "$DOCKER_CONTAINER_NAME" --rm \
--cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \
-v "${appdir}:/keepassxc/AppDir:rw" \
-v "${out_real}:/keepassxc/out:rw" \
"$DOCKER_IMAGE" \
bash -c "cd /keepassxc/out && ${linuxdeploy} --verbosity=${verbosity} --plugin=qt --appdir=/keepassxc/AppDir \
--custom-apprun="/keepassxc/out/KeePassXC-AppRun" --desktop-file=${desktop_file} --icon-file=${icon} ${executables} \
--library=\$(ldconfig -p | grep x86-64 | grep -oP '/[^\s]+/libgpg-error\.so\.\d+$' | head -n1)"
fi
logInfo "Creating AppImage..."
local appsign_flag=""
local appsign_key_flag=""
if ${build_appsign}; then
appsign_flag="--sign"
appsign_key_flag="--sign-key ${build_key}"
fi
local appimage_name="KeePassXC-x86_64.AppImage"
if [ "" != "$RELEASE_NAME" ]; then
appimage_name="KeePassXC-${RELEASE_NAME}-x86_64.AppImage"
fi
# Run appimagetool to package (and possibly sign) AppImage
# --no-appstream is required, since it may crash on newer systems
# see: https://github.com/AppImage/AppImageKit/issues/856
"$appimagetool" --updateinformation "gh-releases-zsync|keepassxreboot|keepassxc|latest|KeePassXC-*-x86_64.AppImage.zsync" \
${appsign_flag} ${appsign_key_flag} --no-appstream "$appdir" "${out_real}/${appimage_name}"
logInfo "Cleaning up temporary files..."
${linuxdeploy_cleanup}
${linuxdeploy_plugin_qt_cleanup}
${appimagetool_cleanup}
rm -f "${out_real}/KeePassXC-AppRun"
}
# -----------------------------------------------------------------------
# build command
# -----------------------------------------------------------------------
build() {
local build_source_tarball=true
local build_snapshot=false
local build_snapcraft=false
local build_appimage=false
local build_generators=""
local build_appsign=false
local build_key=""
while [ $# -ge 1 ]; do
local arg="$1"
case "$arg" in
-v|--version)
RELEASE_NAME="$2"
shift ;;
-a|--app-name)
APP_NAME="$2"
shift ;;
-s|--source-dir)
SRC_DIR="$2"
shift ;;
-o|--output-dir)
OUTPUT_DIR="$2"
shift ;;
-t|--tag-name)
TAG_NAME="$2"
shift ;;
-d|--docker-image)
DOCKER_IMAGE="$2"
shift ;;
--container-name)
DOCKER_CONTAINER_NAME="$2"
shift ;;
--appsign)
build_appsign=true ;;
-k|--key)
build_key="$2"
shift ;;
--snapcraft)
build_snapcraft=true ;;
--appimage)
build_appimage=true ;;
-c|--cmake-options) -c|--cmake-options)
CMAKE_OPTIONS="$2" CMAKE_OPTIONS="$2"
shift ;; shift ;;
--compiler) --compiler)
COMPILER="$2" COMPILER="$2"
shift ;; shift ;;
-m|--make-options) -m|--make-options)
MAKE_OPTIONS="$2" MAKE_OPTIONS="$2"
shift ;; shift ;;
-g|--generators)
build_generators="$2"
shift ;;
-i|--install-prefix) -i|--install-prefix)
INSTALL_PREFIX="$2" INSTALL_PREFIX="$2"
shift ;; shift ;;
-p|--plugins) -p|--plugins)
BUILD_PLUGINS="$2" BUILD_PLUGINS="$2"
shift ;; shift ;;
-n|--no-source-tarball) -n|--no-source-tarball)
BUILD_SOURCE_TARBALL=false ;; build_source_tarball=false ;;
--snapshot) --snapshot)
BUILD_SNAPSHOT=true ;; build_snapshot=true ;;
-h|--help) -h|--help)
printUsage "build" printUsage "build"
exit ;; exit ;;
*) *)
logError "Unknown option '$arg'\n" logError "Unknown option '$arg'\n"
printUsage "build" printUsage "build"
@@ -585,7 +822,7 @@ build() {
OUTPUT_DIR="$(realpath "$OUTPUT_DIR")" OUTPUT_DIR="$(realpath "$OUTPUT_DIR")"
if ${BUILD_SNAPSHOT}; then if ${build_snapshot}; then
TAG_NAME="HEAD" TAG_NAME="HEAD"
local branch=`git rev-parse --abbrev-ref HEAD` local branch=`git rev-parse --abbrev-ref HEAD`
logInfo "Using current branch ${branch} to build..." logInfo "Using current branch ${branch} to build..."
@@ -611,7 +848,7 @@ build() {
exitError "Failed to create output directory!" exitError "Failed to create output directory!"
fi fi
if ${BUILD_SOURCE_TARBALL}; then if ${build_source_tarball}; then
logInfo "Creating source tarball..." logInfo "Creating source tarball..."
local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')" local app_name_lower="$(echo "$APP_NAME" | tr '[:upper:]' '[:lower:]')"
local prefix="${app_name_lower}-${RELEASE_NAME}" local prefix="${app_name_lower}-${RELEASE_NAME}"
@@ -619,7 +856,7 @@ build() {
git archive --format=tar "$TAG_NAME" --prefix="${prefix}/" --output="${OUTPUT_DIR}/${tarball_name}" git archive --format=tar "$TAG_NAME" --prefix="${prefix}/" --output="${OUTPUT_DIR}/${tarball_name}"
if ! ${BUILD_SNAPSHOT}; then if ! ${build_snapshot}; then
# add .version file to tar # add .version file to tar
mkdir "${prefix}" mkdir "${prefix}"
echo -n ${RELEASE_NAME} > "${prefix}/.version" echo -n ${RELEASE_NAME} > "${prefix}/.version"
@@ -631,7 +868,7 @@ build() {
xz -6 "${OUTPUT_DIR}/${tarball_name}" xz -6 "${OUTPUT_DIR}/${tarball_name}"
fi fi
if ! ${BUILD_SNAPSHOT} && [ -e "${OUTPUT_DIR}/build-release" ]; then if ! ${build_snapshot} && [ -e "${OUTPUT_DIR}/build-release" ]; then
logInfo "Cleaning existing build directory..." logInfo "Cleaning existing build directory..."
rm -r "${OUTPUT_DIR}/build-release" 2> /dev/null rm -r "${OUTPUT_DIR}/build-release" 2> /dev/null
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
@@ -642,19 +879,24 @@ build() {
logInfo "Creating build directory..." logInfo "Creating build directory..."
mkdir -p "${OUTPUT_DIR}/build-release" mkdir -p "${OUTPUT_DIR}/build-release"
cd "${OUTPUT_DIR}/build-release" cd "${OUTPUT_DIR}/build-release"
logInfo "Configuring sources..." logInfo "Configuring sources..."
for p in ${BUILD_PLUGINS}; do for p in ${BUILD_PLUGINS}; do
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On" CMAKE_OPTIONS="${CMAKE_OPTIONS} -DWITH_XC_$(echo $p | tr '[:lower:]' '[:upper:]')=On"
done done
if [ "$(uname -o)" == "GNU/Linux" ] && ${build_appimage}; then
CMAKE_OPTIONS="${CMAKE_OPTIONS} -DKEEPASSXC_DIST_TYPE=AppImage"
# linuxdeploy requires /usr as install prefix
INSTALL_PREFIX="/usr"
fi
if [ "$COMPILER" == "g++" ]; then if [ "$COMPILER" == "g++" ]; then
export CC=gcc export CC=gcc
elif [ "$COMPILER" == "clang++" ]; then elif [ "$COMPILER" == "clang++" ]; then
export CC=clang export CC=clang
fi fi
export CXX="$COMPILER" export CXX="$COMPILER"
if [ "" == "$DOCKER_IMAGE" ]; then if [ "" == "$DOCKER_IMAGE" ]; then
if [ "$(uname -s)" == "Darwin" ]; then if [ "$(uname -s)" == "Darwin" ]; then
# Building on macOS # Building on macOS
@@ -668,71 +910,115 @@ build() {
logInfo "Compiling and packaging sources..." logInfo "Compiling and packaging sources..."
make ${MAKE_OPTIONS} package make ${MAKE_OPTIONS} package
# Appsign the executables if desired
if [[ ${build_appsign} && ! -z ${build_key} ]]; then
logInfo "Signing executable files"
appsign "-f" "./${APP_NAME}-${RELEASE_NAME}.dmg" "-k" "${build_key}"
fi
mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../ mv "./${APP_NAME}-${RELEASE_NAME}.dmg" ../
elif [ "$(uname -o)" == "Msys" ]; then elif [ "$(uname -o)" == "Msys" ]; then
# Building on Windows with Msys2 # Building on Windows with Msys2
logInfo "Configuring build..." logInfo "Configuring build..."
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off -G"MSYS Makefiles" \ cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off -G"MSYS Makefiles" \
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" $CMAKE_OPTIONS "$SRC_DIR" -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" ${CMAKE_OPTIONS} "$SRC_DIR"
logInfo "Compiling and packaging sources..." logInfo "Compiling and packaging sources..."
mingw32-make ${MAKE_OPTIONS} preinstall mingw32-make ${MAKE_OPTIONS} preinstall
# Appsign the executables if desired
if [[ ${build_appsign} && ! -z ${build_key} ]]; then
logInfo "Signing executable files"
appsign "-f" $(find src | grep '\.exe') "-k" "${build_key}"
fi
# Call cpack directly instead of calling make package. # Call cpack directly instead of calling make package.
# This is important because we want to build the MSI when making a # This is important because we want to build the MSI when making a
# release. # release.
cpack -G "NSIS;ZIP;${CPACK_GENERATORS}" cpack -G "${CPACK_GENERATORS};${build_generators}"
mv "./${APP_NAME}-"*.* ../ # Inject the portable config into the zip build and rename
for filename in ${APP_NAME}-*.zip; do
logInfo "Creating portable zip file"
local folder=$(echo ${filename} | sed -r 's/(.*)\.zip/\1/')
python -c 'import zipfile,sys ; zipfile.ZipFile(sys.argv[1],"a").write(sys.argv[2],sys.argv[3])' \
${filename} ${SRC_DIR}/share/keepassxc.ini ${folder}/keepassxc.ini
mv ${filename} ${folder}-portable.zip
done
mv "${APP_NAME}-"*.* ../
else else
mkdir -p "${OUTPUT_DIR}/bin-release" mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir"
# Building on Linux without Docker container # Building on Linux without Docker container
logInfo "Configuring build..." logInfo "Configuring build..."
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \ cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off ${CMAKE_OPTIONS} \
-DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" \ -DCMAKE_INSTALL_PREFIX="${INSTALL_PREFIX}" "$SRC_DIR"
-DKEEPASSXC_DIST_TYPE=AppImage "$SRC_DIR"
logInfo "Compiling sources..." logInfo "Compiling sources..."
make $MAKE_OPTIONS make ${MAKE_OPTIONS}
logInfo "Installing to bin dir..." logInfo "Installing to bin dir..."
make DESTDIR="${OUTPUT_DIR}/bin-release" install/strip make DESTDIR="${OUTPUT_DIR}/KeePassXC.AppDir" install/strip
logInfo "Creating AppImage..."
${SRC_DIR}/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME"
fi fi
else else
mkdir -p "${OUTPUT_DIR}/bin-release" if ${build_snapcraft}; then
logInfo "Building snapcraft docker image..."
logInfo "Launching Docker container to compile sources..."
sudo docker image build -t "$DOCKER_IMAGE" "$(realpath "$SRC_DIR")/ci/snapcraft"
docker run --name "$DOCKER_CONTAINER_NAME" --rm \
--cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \ logInfo "Launching Docker contain to compile snapcraft..."
-e "CC=${CC}" -e "CXX=${CXX}" \
-v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \ sudo docker run --name "$DOCKER_CONTAINER_NAME" --rm \
-v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \ -v "$(realpath "$SRC_DIR"):/keepassxc" -w "/keepassxc" \
"$DOCKER_IMAGE" \ "$DOCKER_IMAGE" snapcraft
bash -c "cd /keepassxc/out/build-release && \ else
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off $CMAKE_OPTIONS \ mkdir -p "${OUTPUT_DIR}/KeePassXC.AppDir"
-DCMAKE_INSTALL_PREFIX=\"${INSTALL_PREFIX}\" \
-DKEEPASSXC_DIST_TYPE=AppImage /keepassxc/src && \ logInfo "Launching Docker container to compile sources..."
make $MAKE_OPTIONS && make DESTDIR=/keepassxc/out/bin-release install/strip && \
/keepassxc/src/AppImage-Recipe.sh "$APP_NAME" "$RELEASE_NAME"" docker run --name "$DOCKER_CONTAINER_NAME" --rm \
--cap-add SYS_ADMIN --security-opt apparmor:unconfined --device /dev/fuse \
-e "CC=${CC}" -e "CXX=${CXX}" \
-v "$(realpath "$SRC_DIR"):/keepassxc/src:ro" \
-v "$(realpath "$OUTPUT_DIR"):/keepassxc/out:rw" \
"$DOCKER_IMAGE" \
bash -c "cd /keepassxc/out/build-release && \
cmake -DCMAKE_BUILD_TYPE=Release -DWITH_TESTS=Off ${CMAKE_OPTIONS} \
-DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} /keepassxc/src && \
make ${MAKE_OPTIONS} && make DESTDIR=/keepassxc/out/KeePassXC.AppDir install/strip"
fi
if [ 0 -ne $? ]; then if [ 0 -ne $? ]; then
exitError "Docker build failed!" exitError "Docker build failed!"
fi fi
logInfo "Build finished, Docker container terminated." logInfo "Build finished, Docker container terminated."
fi fi
if [ "$(uname -o)" == "GNU/Linux" ] && ${build_appimage}; then
local appsign_flag=""
local appsign_key_flag=""
local docker_image_flag=""
local docker_container_name_flag=""
if ${build_appsign}; then
appsign_flag="--appsign"
appsign_key_flag="-k ${build_key}"
fi
if [ "" != "${DOCKER_IMAGE}" ]; then
docker_image_flag="-d ${DOCKER_IMAGE}"
docker_container_name_flag="--container-name ${DOCKER_CONTAINER_NAME}"
fi
appimage "-a" "${OUTPUT_DIR}/KeePassXC.AppDir" "-o" "${OUTPUT_DIR}" \
${appsign_flag} ${appsign_key_flag} ${docker_image_flag} ${docker_container_name_flag}
fi
cleanup cleanup
logInfo "All done!" logInfo "All done!"
} }
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# gpgsign command # gpgsign command
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
@@ -748,7 +1034,7 @@ gpgsign() {
shift shift
done ;; done ;;
-g|--gpg-key) -k|--key|-g|--gpg-key)
GPG_KEY="$2" GPG_KEY="$2"
shift ;; shift ;;
@@ -763,7 +1049,7 @@ gpgsign() {
esac esac
shift shift
done done
if [ -z "${sign_files}" ]; then if [ -z "${sign_files}" ]; then
logError "Missing arguments, --files is required!\n" logError "Missing arguments, --files is required!\n"
printUsage "gpgsign" printUsage "gpgsign"
@@ -777,7 +1063,7 @@ gpgsign() {
logInfo "Signing file '${f}' using release key..." logInfo "Signing file '${f}' using release key..."
gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f" gpg --output "${f}.sig" --armor --local-user "$GPG_KEY" --detach-sig "$f"
if [ 0 -ne $? ]; then if [ 0 -ne $? ]; then
exitError "Signing failed!" exitError "Signing failed!"
fi fi
@@ -787,19 +1073,16 @@ gpgsign() {
local bname="$(basename "$f")" local bname="$(basename "$f")"
(cd "$(dirname "$rp")"; sha256sum "$bname" > "${bname}.DIGEST") (cd "$(dirname "$rp")"; sha256sum "$bname" > "${bname}.DIGEST")
done done
logInfo "All done!" logInfo "All done!"
} }
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# appsign command # appsign command
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
appsign() { appsign() {
local sign_files=() local sign_files=()
local signtool_key local key
local codesign_identity
while [ $# -ge 1 ]; do while [ $# -ge 1 ]; do
local arg="$1" local arg="$1"
@@ -810,12 +1093,8 @@ appsign() {
shift shift
done ;; done ;;
-k|--signtool-key) -k|--key|-i|--identity)
signtool_key="$2" key="$2"
shift ;;
-i|--identity)
codesign_identity="$2"
shift ;; shift ;;
-h|--help) -h|--help)
@@ -830,6 +1109,12 @@ appsign() {
shift shift
done done
if [ -z "${key}" ]; then
logError "Missing arguments, --key is required!\n"
printUsage "appsign"
exit 1
fi
if [ -z "${sign_files}" ]; then if [ -z "${sign_files}" ]; then
logError "Missing arguments, --files is required!\n" logError "Missing arguments, --files is required!\n"
printUsage "appsign" printUsage "appsign"
@@ -843,12 +1128,6 @@ appsign() {
done done
if [ "$(uname -s)" == "Darwin" ]; then if [ "$(uname -s)" == "Darwin" ]; then
if [ -z "${codesign_identity}" ]; then
logError "Missing arguments, --identity is required on macOS!\n"
printUsage "appsign"
exit 1
fi
checkCodesignCommandExists checkCodesignCommandExists
local orig_dir="$(pwd)" local orig_dir="$(pwd)"
@@ -868,7 +1147,7 @@ appsign() {
fi fi
logInfo "Signing app using codesign..." logInfo "Signing app using codesign..."
codesign --sign "${codesign_identity}" --verbose --deep ./app/KeePassXC.app codesign --sign "${key}" --verbose --deep ./app/KeePassXC.app
if [ 0 -ne $? ]; then if [ 0 -ne $? ]; then
cd "${orig_dir}" cd "${orig_dir}"
@@ -893,15 +1172,9 @@ appsign() {
done done
elif [ "$(uname -o)" == "Msys" ]; then elif [ "$(uname -o)" == "Msys" ]; then
if [ -z "${signtool_key}" ]; then
logError "Missing arguments, --signtool-key is required on Windows!\n"
printUsage "appsign"
exit 1
fi
checkOsslsigncodeCommandExists checkOsslsigncodeCommandExists
if [[ ! -f "${signtool_key}" ]]; then if [[ ! -f "${key}" ]]; then
exitError "Key file was not found!" exitError "Key file was not found!"
fi fi
@@ -912,7 +1185,7 @@ appsign() {
if [[ ${f: -4} == ".exe" ]]; then if [[ ${f: -4} == ".exe" ]]; then
logInfo "Signing file '${f}' using osslsigncode..." logInfo "Signing file '${f}' using osslsigncode..."
# output a signed exe; we have to use a different name due to osslsigntool limitations # output a signed exe; we have to use a different name due to osslsigntool limitations
osslsigncode sign -pkcs12 "${signtool_key}" -pass "${password}" -n "KeePassXC" \ osslsigncode sign -pkcs12 "${key}" -pass "${password}" -n "KeePassXC" \
-t "http://timestamp.comodoca.com/authenticode" -in "${f}" -out "${f}.signed" -t "http://timestamp.comodoca.com/authenticode" -in "${f}" -out "${f}.signed"
if [ 0 -ne $? ]; then if [ 0 -ne $? ]; then
@@ -928,9 +1201,9 @@ appsign() {
# osslsigncode does not succeed at signing MSI files at this time... # osslsigncode does not succeed at signing MSI files at this time...
logInfo "Signing file '${f}' using Microsoft signtool..." logInfo "Signing file '${f}' using Microsoft signtool..."
signtool sign -f "${signtool_key}" -p "${password}" -d "KeePassXC" \ signtool sign -f "${key}" -p "${password}" -d "KeePassXC" \
-t "http://timestamp.comodoca.com/authenticode" "${f}" -t "http://timestamp.comodoca.com/authenticode" "${f}"
if [ 0 -ne $? ]; then if [ 0 -ne $? ]; then
exitError "Signing failed!" exitError "Signing failed!"
fi fi
@@ -946,7 +1219,6 @@ appsign() {
logInfo "All done!" logInfo "All done!"
} }
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
# parse global command line # parse global command line
# ----------------------------------------------------------------------- # -----------------------------------------------------------------------
@@ -959,7 +1231,8 @@ if [ "" == "$MODE" ]; then
elif [ "help" == "$MODE" ]; then elif [ "help" == "$MODE" ]; then
printUsage "$1" printUsage "$1"
exit exit
elif [ "check" == "$MODE" ] || [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] || [ "gpgsign" == "$MODE" ] || [ "appsign" == "$MODE" ]; then elif [ "check" == "$MODE" ] || [ "merge" == "$MODE" ] || [ "build" == "$MODE" ] \
|| [ "gpgsign" == "$MODE" ] || [ "appsign" == "$MODE" ] || [ "appimage" == "$MODE" ]; then
${MODE} "$@" ${MODE} "$@"
else else
printUsage "$MODE" printUsage "$MODE"

View File

@@ -25,10 +25,10 @@ install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE)
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svgz" FILES_MATCHING PATTERN "keepassx*.png" PATTERN "keepassx*.svg"
PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE)
install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor
FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svgz" FILES_MATCHING PATTERN "application-x-keepassxc.png" PATTERN "application-x-keepassxc.svg"
PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE) PATTERN "status" EXCLUDE PATTERN "actions" EXCLUDE PATTERN "categories" EXCLUDE)
install(FILES linux/org.keepassxc.KeePassXC.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) install(FILES linux/org.keepassxc.KeePassXC.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
install(FILES linux/org.keepassxc.KeePassXC.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) install(FILES linux/org.keepassxc.KeePassXC.appdata.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo)
@@ -39,85 +39,87 @@ if(APPLE)
install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR}) install(FILES macosx/keepassxc.icns DESTINATION ${DATA_INSTALL_DIR})
endif() endif()
install(DIRECTORY wizard/ DESTINATION ${DATA_INSTALL_DIR}/wizard FILES_MATCHING PATTERN "*.png")
install(DIRECTORY icons/application/ DESTINATION ${DATA_INSTALL_DIR}/icons/application install(DIRECTORY icons/application/ DESTINATION ${DATA_INSTALL_DIR}/icons/application
FILES_MATCHING PATTERN "*.png" PATTERN "*.svgz") FILES_MATCHING PATTERN "*.png" PATTERN "*.svg")
add_custom_target(icons add_custom_target(icons
# SVGZ to PNGs for KeePassXC # SVGZ to PNGs for KeePassXC
COMMAND inkscape -z -w 16 -h 16 COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/apps/keepassxc.svgz -e icons/application/16x16/apps/keepassxc.png icons/application/scalable/apps/keepassxc.svg -e icons/application/16x16/apps/keepassxc.png
COMMAND inkscape -z -w 24 -h 24 COMMAND inkscape -z -w 24 -h 24
icons/application/scalable/apps/keepassxc.svgz -e icons/application/24x24/apps/keepassxc.png icons/application/scalable/apps/keepassxc.svg -e icons/application/24x24/apps/keepassxc.png
COMMAND inkscape -z -w 32 -h 32 COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/apps/keepassxc.svgz -e icons/application/32x32/apps/keepassxc.png icons/application/scalable/apps/keepassxc.svg -e icons/application/32x32/apps/keepassxc.png
COMMAND inkscape -z -w 48 -h 48 COMMAND inkscape -z -w 48 -h 48
icons/application/scalable/apps/keepassxc.svgz -e icons/application/48x48/apps/keepassxc.png icons/application/scalable/apps/keepassxc.svg -e icons/application/48x48/apps/keepassxc.png
COMMAND inkscape -z -w 64 -h 64 COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/apps/keepassxc.svgz -e icons/application/64x64/apps/keepassxc.png icons/application/scalable/apps/keepassxc.svg -e icons/application/64x64/apps/keepassxc.png
COMMAND inkscape -z -w 128 -h 128 COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/apps/keepassxc.svgz -e icons/application/128x128/apps/keepassxc.png icons/application/scalable/apps/keepassxc.svg -e icons/application/128x128/apps/keepassxc.png
COMMAND inkscape -z -w 256 -h 256 COMMAND inkscape -z -w 256 -h 256
icons/application/scalable/apps/keepassxc.svgz -e icons/application/256x256/apps/keepassxc.png icons/application/scalable/apps/keepassxc.svg -e icons/application/256x256/apps/keepassxc.png
# SVGZ to PNGs for KeePassXC # SVGZ to PNGs for KeePassXC
COMMAND inkscape -z -w 16 -h 16 COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/16x16/apps/keepassxc-dark.png icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/16x16/apps/keepassxc-dark.png
COMMAND inkscape -z -w 24 -h 24 COMMAND inkscape -z -w 24 -h 24
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/24x24/apps/keepassxc-dark.png icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/24x24/apps/keepassxc-dark.png
COMMAND inkscape -z -w 32 -h 32 COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/32x32/apps/keepassxc-dark.png icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/32x32/apps/keepassxc-dark.png
COMMAND inkscape -z -w 48 -h 48 COMMAND inkscape -z -w 48 -h 48
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/48x48/apps/keepassxc-dark.png icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/48x48/apps/keepassxc-dark.png
COMMAND inkscape -z -w 64 -h 64 COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/64x64/apps/keepassxc-dark.png icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/64x64/apps/keepassxc-dark.png
COMMAND inkscape -z -w 128 -h 128 COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/128x128/apps/keepassxc-dark.png icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/128x128/apps/keepassxc-dark.png
COMMAND inkscape -z -w 256 -h 256 COMMAND inkscape -z -w 256 -h 256
icons/application/scalable/apps/keepassxc-dark.svgz -e icons/application/256x256/apps/keepassxc-dark.png icons/application/scalable/apps/keepassxc-dark.svg -e icons/application/256x256/apps/keepassxc-dark.png
# SVGZ to PNGs for KeePassXC # SVGZ to PNGs for KeePassXC
COMMAND inkscape -z -w 16 -h 16 COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/16x16/apps/keepassxc-locked.png icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/16x16/apps/keepassxc-locked.png
COMMAND inkscape -z -w 24 -h 24 COMMAND inkscape -z -w 24 -h 24
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/24x24/apps/keepassxc-locked.png icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/24x24/apps/keepassxc-locked.png
COMMAND inkscape -z -w 32 -h 32 COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/32x32/apps/keepassxc-locked.png icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/32x32/apps/keepassxc-locked.png
COMMAND inkscape -z -w 48 -h 48 COMMAND inkscape -z -w 48 -h 48
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/48x48/apps/keepassxc-locked.png icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/48x48/apps/keepassxc-locked.png
COMMAND inkscape -z -w 64 -h 64 COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/64x64/apps/keepassxc-locked.png icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/64x64/apps/keepassxc-locked.png
COMMAND inkscape -z -w 128 -h 128 COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/128x128/apps/keepassxc-locked.png icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/128x128/apps/keepassxc-locked.png
COMMAND inkscape -z -w 256 -h 256 COMMAND inkscape -z -w 256 -h 256
icons/application/scalable/apps/keepassxc-locked.svgz -e icons/application/256x256/apps/keepassxc-locked.png icons/application/scalable/apps/keepassxc-locked.svg -e icons/application/256x256/apps/keepassxc-locked.png
# SVGZ to PNGs for KeePassXC # SVGZ to PNGs for KeePassXC
COMMAND inkscape -z -w 16 -h 16 COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/16x16/apps/keepassxc-unlocked.png icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/16x16/apps/keepassxc-unlocked.png
COMMAND inkscape -z -w 24 -h 24 COMMAND inkscape -z -w 24 -h 24
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/24x24/apps/keepassxc-unlocked.png icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/24x24/apps/keepassxc-unlocked.png
COMMAND inkscape -z -w 32 -h 32 COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/32x32/apps/keepassxc-unlocked.png icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/32x32/apps/keepassxc-unlocked.png
COMMAND inkscape -z -w 48 -h 48 COMMAND inkscape -z -w 48 -h 48
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/48x48/apps/keepassxc-unlocked.png icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/48x48/apps/keepassxc-unlocked.png
COMMAND inkscape -z -w 64 -h 64 COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/64x64/apps/keepassxc-unlocked.png icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/64x64/apps/keepassxc-unlocked.png
COMMAND inkscape -z -w 128 -h 128 COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/128x128/apps/keepassxc-unlocked.png icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/128x128/apps/keepassxc-unlocked.png
COMMAND inkscape -z -w 256 -h 256 COMMAND inkscape -z -w 256 -h 256
icons/application/scalable/apps/keepassxc-unlocked.svgz -e icons/application/256x256/apps/keepassxc-unlocked.png icons/application/scalable/apps/keepassxc-unlocked.svg -e icons/application/256x256/apps/keepassxc-unlocked.png
# SVGZ to PNGs for KeePassXC MIME-Type # SVGZ to PNGs for KeePassXC MIME-Type
COMMAND inkscape -z -w 16 -h 16 COMMAND inkscape -z -w 16 -h 16
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/16x16/mimetypes/application-x-keepassxc.png icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/16x16/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 22 -h 22 COMMAND inkscape -z -w 22 -h 22
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/22x22/mimetypes/application-x-keepassxc.png icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/22x22/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 32 -h 32 COMMAND inkscape -z -w 32 -h 32
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/32x32/mimetypes/application-x-keepassxc.png icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/32x32/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 64 -h 64 COMMAND inkscape -z -w 64 -h 64
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/64x64/mimetypes/application-x-keepassxc.png icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/64x64/mimetypes/application-x-keepassxc.png
COMMAND inkscape -z -w 128 -h 128 COMMAND inkscape -z -w 128 -h 128
icons/application/scalable/mimetypes/application-x-keepassxc.svgz -e icons/application/128x128/mimetypes/application-x-keepassxc.png icons/application/scalable/mimetypes/application-x-keepassxc.svg -e icons/application/128x128/mimetypes/application-x-keepassxc.png
# ICNS for MacOS # ICNS for MacOS
COMMAND png2icns macosx/keepassxc.icns COMMAND png2icns macosx/keepassxc.icns

View File

@@ -0,0 +1,54 @@
<h3>VIP Patreon Supporters:</h3>
<ul>
<li>John Cook</li>
<li>Max Anderson</li>
</ul>
<h3>Notable Code Contributions:</h3>
<ul>
<li>droidmonkey</li>
<li>phoerious</li>
<li>TheZ3ro</li>
<li>louib</li>
<li>weslly</li>
<li>varjolintu (KeePassXC-Browser)</li>
<li>hifi (SSH Agent)</li>
<li>frostasm</li>
<li>fonic (Entry Table View)</li>
<li>kylemanna (YubiKey)</li>
<li>keithbennett (KeePassHTTP)</li>
<li>Typz (KeePassHTTP)</li>
<li>denk-mal (KeePassHTTP)</li>
<li>angelsl (KDBX 4)</li>
<li>seatedscribe (CSV Import)</li>
<li>debfx (KeePassX)</li>
<li>BlueIce (KeePassX)</li>
</ul>
<h3>Patreon Supporters:</h3>
<ul>
<li>Ashura</li>
<li>Alexanderjb</li>
<li>Andreas Kollmann</li>
<li>Richard Ames</li>
</ul>
<h3>Translations:</h3>
<ul>
<li><strong>Basque</strong>: azken_tximinoa, Hey_neken</li>
<li><strong>Catalan</strong>: capitantrueno, dsoms, mcus, raulua, ZJaume</li>
<li><strong>Chinese (China)</strong>: Biggulu, Brandon_c, hoilc, ligyxy, vc5, Small_Ku</li>
<li><strong>Chinese (Taiwan)</strong>: BestSteve, MiauLightouch, Small_Ku, yan12125, ymhuang0808</li>
<li><strong>Czech</strong>: DanielMilde, JosefVitu, pavelb, tpavelek</li>
<li><strong>Danish</strong>: nlkl</li>
<li><strong>Dutch</strong>: apie, bartlibert, evanoosten, fvw, KnooL, srgvg, Vistaus, wanderingidea</li>
<li><strong>Finnish</strong>: artnay, Jarppi, MawKKe</li>
<li><strong>French</strong>: A1RO, aghilas.messara, bisaloo, frgnca, ggtr1138, gilbsgilbs, gtalbot, Gui13, iannick, jlutran, kyodev, logut, MartialBis, narzb, pBouillon, plunkets, Raphi111, Scrat15, tl_pierre, wilfriedroset</li>
<li><strong>German</strong>: antsas, BasicBaer, Calyrx, codejunky, DavidHamburg, eth0, for1real, jensrutschmann, joe776, kflesch, MarcEdinger, marcbone, mcliquid, mfernau77, montilo, nursoda, omnisome4, origin_de, pcrcoding, phoerious, rgloor, transi_222, vlenzer, waster</li>
<li><strong>Greek</strong>: magkopian, nplatis, tassos.b, xinomilo</li>
<li><strong>Hungarian</strong>: bubu, meskobalazs, urbalazs</li>
<li><strong>Indonesian</strong>: zk</li>
<li><strong>Italian</strong>: amaxis, bovirus, duncanmid, FranzMari, lucaim, Mte90, Peo, TheZ3ro, tosky, VosaxAlo</li>
<li><strong>Japanese</strong>: masoo, metalic_cat, p2635, Shinichirou_Yamada, vargas.peniel, vmemjp, yukinakato</li>
<li><strong>Korean</strong>: cancantun, peremen</li>
<li><strong>Lithuanian</strong>: Moo</li>
<li><strong>Polish</strong>: keypress, konradmb, mrerexx, psobczak</li>
<li><strong>Portuguese (Brazil)</strong>: danielbibit, fabiom, flaviobn, vitor895, weslly</li>
</ul>

14
share/about.html Normal file
View File

@@ -0,0 +1,14 @@
<p>Website: <a href="https://keepassxc.org/" style="text-decoration: underline">https://keepassxc.org</a></p>
<p>Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues">https://github.com</a></p>
<p>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</p>
<h3>Project Maintainers:</h3>
<ul>
<li>Jonathan White (<a href="https://github.com/droidmonkey">droidmonkey</a>)</li>
<li>Janek Bevendorff (<a href="https://github.com/phoerious">phoerious</a>)</li>
<li><a href="https://github.com/TheZ3ro">TheZ3ro</a></li>
<li>Louis-Bertrand (<a href="https://github.com/louib">louib</a>)</li>
<li>Weslly Honorato (<a href="https://github.com/weslly">weslly</a>)</li>
<li>Toni Spets (<a href="https://github.com/hifi">hifi</a>)</li>
<li>Sami V&auml;nttinen (<a href="https://github.com/varjolintu">varjolintu</a>)</li>
</ul>
<p>Special thanks from the KeePassXC team go to <a href="https://github.com/debfx">debfx</a> for creating the original KeePassX.</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 755 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 897 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="100"
height="100"
viewBox="0 0 99.999997 100"
id="svg2"
version="1.1">
<defs
id="defs4">
<linearGradient
id="linearGradient4257">
<stop
style="stop-color:#808080;stop-opacity:1"
offset="0"
id="stop4259" />
<stop
style="stop-color:#4d4d4d;stop-opacity:1"
offset="1"
id="stop4261" />
</linearGradient>
<linearGradient
id="linearGradient4153"
osb:paint="solid">
<stop
style="stop-color:#b3b3b3;stop-opacity:1;"
offset="0"
id="stop4155" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient4257"
id="linearGradient4263"
x1="50.09866"
y1="86.831215"
x2="49.526104"
y2="8.6772995"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<circle
cy="50"
cx="50"
id="path5201"
style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
r="45.934067" />
<circle
r="42.32143"
cy="50.000023"
cx="50"
id="path3336"
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path4264"
d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3336-3-2-7"
d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
style="opacity:0.94;fill:url(#linearGradient4263);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="100"
height="100"
viewBox="0 0 99.999997 100"
id="svg2"
version="1.1">
<defs
id="defs4">
<linearGradient
id="linearGradient5771"
osb:paint="solid">
<stop
style="stop-color:#ff4300;stop-opacity:1;"
offset="0"
id="stop5773" />
</linearGradient>
<linearGradient
id="linearGradient4321"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop4323" />
</linearGradient>
<linearGradient
id="linearGradient4257">
<stop
style="stop-color:#808080;stop-opacity:1"
offset="0"
id="stop4259" />
<stop
style="stop-color:#4d4d4d;stop-opacity:1"
offset="1"
id="stop4261" />
</linearGradient>
<linearGradient
id="linearGradient4153"
osb:paint="solid">
<stop
style="stop-color:#b3b3b3;stop-opacity:1;"
offset="0"
id="stop4155" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient4257"
id="linearGradient4263"
x1="50.09866"
y1="86.831215"
x2="49.526104"
y2="8.6772995"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<circle
cy="50"
cx="50"
id="path5201"
style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
r="45.934067" />
<circle
r="42.32143"
cy="50.000023"
cx="50"
id="path3336"
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path4264"
d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3336-3-2-7"
d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
style="opacity:0.94;fill:url(#linearGradient4263);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="clip-rule:evenodd;fill:#ff6600;fill-rule:evenodd;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke:none;stroke-opacity:1;stroke-linejoin:round;opacity:0.99999999"
d="m 92.663118,96.834263 -27.995661,0 c -1.93315,0 -3.498582,-1.568935 -3.498582,-3.503838 l 0,-17.520917 c 0,-1.934902 1.567183,-3.505586 3.498582,-3.505586 l 1.749292,0 0,-5.254878 c 0,-6.77303 5.484262,-12.264297 12.248534,-12.264297 6.764282,0 12.248545,5.491267 12.248545,12.264297 l 0,5.254878 1.74929,0 c 1.933144,0 3.498575,1.568932 3.498575,3.505586 l 0,17.520917 c 0,1.93315 -1.567175,3.503838 -3.498575,3.503838 z M 85.664201,67.049044 c 0,-3.869803 -3.134367,-7.00767 -6.998918,-7.00767 -3.864549,0 -6.998909,3.137867 -6.998909,7.00767 l 0,5.254878 13.997827,0 0,-5.254878 z"
id="path3" />
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
id="svg2"
viewBox="0 0 99.999997 100"
height="100"
width="100">
<defs
id="defs4">
<linearGradient
id="linearGradient4316">
<stop
id="stop4318"
offset="0"
style="stop-color:#226e23;stop-opacity:1" />
<stop
id="stop4320"
offset="1"
style="stop-color:#63ab3a;stop-opacity:1" />
</linearGradient>
<linearGradient
osb:paint="solid"
id="linearGradient4153">
<stop
id="stop4155"
offset="0"
style="stop-color:#b3b3b3;stop-opacity:1;" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient4316"
id="linearGradient5199"
x1="53.238865"
y1="12.753036"
x2="53.238865"
y2="86.356995"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<circle
r="45.934067"
style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
id="path5201"
cx="50"
cy="50" />
<circle
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3336"
cx="50"
cy="50.000023"
r="42.32143" />
<path
style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
id="path4264" />
<path
style="opacity:0.94;fill:url(#linearGradient5199);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
id="path3336-3-2-7" />
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.1"
id="svg2"
viewBox="0 0 99.999997 100"
height="100"
width="100">
<defs
id="defs4">
<linearGradient
id="linearGradient4316">
<stop
id="stop4318"
offset="0"
style="stop-color:#226e23;stop-opacity:1" />
<stop
id="stop4320"
offset="1"
style="stop-color:#63ab3a;stop-opacity:1" />
</linearGradient>
<linearGradient
osb:paint="solid"
id="linearGradient4153">
<stop
id="stop4155"
offset="0"
style="stop-color:#b3b3b3;stop-opacity:1;" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient4316"
id="linearGradient5199"
x1="53.238865"
y1="12.753036"
x2="53.238865"
y2="86.356995"
gradientUnits="userSpaceOnUse" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<circle
r="45.934067"
style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
id="path5201"
cx="50"
cy="50" />
<circle
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path3336"
cx="50"
cy="50.000023"
r="42.32143" />
<path
style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
id="path4264" />
<path
style="opacity:0.94;fill:url(#linearGradient5199);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
id="path3336-3-2-7" />
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,433 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2"
height="128"
width="128">
<defs
id="defs4">
<linearGradient
id="linearGradient3021">
<stop
id="stop3023"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
style="stop-color:#000000;stop-opacity:0.15636364;"
offset="0.5"
id="stop3029" />
<stop
id="stop3031"
offset="0.62264121"
style="stop-color:#000000;stop-opacity:0.68727273;" />
<stop
id="stop3025"
offset="1"
style="stop-color:#000000;stop-opacity:0.36363637;" />
</linearGradient>
<linearGradient
id="linearGradient2990">
<stop
id="stop2992"
offset="0"
style="stop-color:#cccccc;stop-opacity:1;" />
<stop
id="stop2994"
offset="1"
style="stop-color:#f1f1f1;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3237">
<stop
id="stop3239"
offset="0"
style="stop-color:#ffeb8b;stop-opacity:1;" />
<stop
id="stop3241"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient6674">
<stop
id="stop6676"
offset="0"
style="stop-color:#bf0000;stop-opacity:1;" />
<stop
id="stop6678"
offset="1"
style="stop-color:#ff1111;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient6666">
<stop
style="stop-color:#ff5900;stop-opacity:1;"
offset="0"
id="stop6668" />
<stop
style="stop-color:#8d0000;stop-opacity:1;"
offset="1"
id="stop6670" />
</linearGradient>
<linearGradient
id="linearGradient6643">
<stop
id="stop6645"
offset="0"
style="stop-color:#ff6565;stop-opacity:1;" />
<stop
id="stop6647"
offset="1"
style="stop-color:#ffdfbf;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient6631">
<stop
id="stop6633"
offset="0"
style="stop-color:#703700;stop-opacity:1;" />
<stop
id="stop6635"
offset="1"
style="stop-color:#bf5e00;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient6446">
<stop
id="stop6448"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop6450"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient6404">
<stop
id="stop6406"
offset="0"
style="stop-color:#770000;stop-opacity:1;" />
<stop
id="stop6408"
offset="1"
style="stop-color:#c10000;stop-opacity:1;" />
</linearGradient>
<radialGradient
r="42.559486"
fy="103.5803"
fx="42.700352"
cy="103.5803"
cx="42.700352"
spreadMethod="pad"
gradientTransform="matrix(1.1890799,0,0,1.1890799,-114.77413,-31.375729)"
gradientUnits="userSpaceOnUse"
id="radialGradient9692"
xlink:href="#linearGradient6666" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="13.006452"
x2="11.458064"
y1="113.54839"
x1="39.741936"
id="linearGradient6410"
xlink:href="#linearGradient6404" />
<linearGradient
gradientTransform="translate(-7.5870968,-7.3806452)"
spreadMethod="reflect"
gradientUnits="userSpaceOnUse"
y2="27.007854"
x2="15.189133"
y1="21.101994"
x1="21.094994"
id="linearGradient6452"
xlink:href="#linearGradient6446" />
<filter
id="filter6458">
<feGaussianBlur
id="feGaussianBlur6460"
stdDeviation="0.28444187" />
</filter>
<linearGradient
y2="27.070099"
x2="15.126888"
y1="21.101994"
x1="21.094994"
spreadMethod="reflect"
gradientTransform="translate(0.4129032,0.6193548)"
gradientUnits="userSpaceOnUse"
id="linearGradient6464"
xlink:href="#linearGradient6446" />
<linearGradient
y2="28.235947"
x2="13.96104"
y1="21.101994"
x1="21.094994"
spreadMethod="reflect"
gradientTransform="translate(0.4129032,0.6193548)"
gradientUnits="userSpaceOnUse"
id="linearGradient6470"
xlink:href="#linearGradient6446" />
<linearGradient
y2="28.235947"
x2="13.96104"
y1="21.101994"
x1="21.094994"
spreadMethod="reflect"
gradientTransform="translate(0.4129032,0.6193548)"
gradientUnits="userSpaceOnUse"
id="linearGradient6472"
xlink:href="#linearGradient6446" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="74.913147"
x2="55.329033"
y1="112"
x1="55.329033"
id="linearGradient6637"
xlink:href="#linearGradient6631" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="50.728985"
x2="62.038712"
y1="15.91371"
x1="62.038712"
id="linearGradient6649"
xlink:href="#linearGradient6643" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="66.897575"
x2="80.047699"
y1="50.580647"
x1="19.096775"
id="linearGradient6680"
xlink:href="#linearGradient6674" />
<linearGradient
y2="98.167175"
x2="59.225807"
y1="-31.712746"
x1="59.225807"
gradientUnits="userSpaceOnUse"
id="linearGradient2816"
xlink:href="#linearGradient6446" />
<linearGradient
y2="46.228859"
x2="59.225807"
y1="7.8973217"
x1="59.225807"
gradientTransform="translate(0.2623629,1)"
gradientUnits="userSpaceOnUse"
id="linearGradient3231"
xlink:href="#linearGradient6446" />
<linearGradient
y2="21.03125"
x2="31.376678"
y1="71.084908"
x1="115.76678"
gradientTransform="translate(0.2332229,1.9150941)"
gradientUnits="userSpaceOnUse"
id="linearGradient3233"
xlink:href="#linearGradient6446" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="45.631207"
x2="-59.415245"
y1="105.83054"
x1="-60.945251"
id="linearGradient3243"
xlink:href="#linearGradient3237" />
<filter
id="filter3281">
<feGaussianBlur
id="feGaussianBlur3283"
stdDeviation="0.32872878" />
</filter>
<linearGradient
y2="-20.962214"
x2="60.402065"
y1="64.076149"
x1="60.402065"
gradientUnits="userSpaceOnUse"
id="linearGradient3289"
xlink:href="#linearGradient6674" />
<filter
id="filter3319">
<feGaussianBlur
id="feGaussianBlur3321"
stdDeviation="1.6179775" />
</filter>
<filter
id="filter3033">
<feGaussianBlur
id="feGaussianBlur3035"
stdDeviation="0.33295155" />
</filter>
<filter
id="filter3045">
<feGaussianBlur
id="feGaussianBlur3047"
stdDeviation="0.46608189" />
</filter>
<clipPath
id="clipPath3049"
clipPathUnits="userSpaceOnUse">
<path
id="path3051"
d="M -213.6585,29.550642 C -214.94322,28.26592 -217.01417,28.26592 -218.29889,29.550642 L -241.43454,52.686292 L -264.57019,29.550642 C -265.85491,28.26592 -267.92586,28.26592 -269.21058,29.550642 L -275.8839,36.223962 C -277.16862,37.508683 -277.16862,39.579629 -275.8839,40.86435 L -252.74825,64 L -275.8839,87.13565 C -277.16862,88.420371 -277.16862,90.491317 -275.8839,91.776038 L -269.21058,98.449358 C -267.92586,99.73408 -265.85491,99.73408 -264.57019,98.449358 L -241.43454,75.313708 L -218.29889,98.449358 C -217.01417,99.73408 -214.94322,99.73408 -213.6585,98.449358 L -206.98518,91.776038 C -205.70046,90.491317 -205.70046,88.420371 -206.98518,87.13565 L -230.12083,64 L -206.98518,40.86435 C -205.70046,39.579629 -205.70046,37.508683 -206.98518,36.223962 L -213.6585,29.550642 z"
style="opacity:1;fill:url(#radialGradient3053);fill-opacity:1;stroke:none;stroke-width:0.13749999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4.15;stroke-opacity:1" />
</clipPath>
<radialGradient
r="35.412899"
fy="76.905693"
fx="-9.1320477"
cy="64"
cx="-20"
gradientTransform="translate(-221.43454,-2.5852934e-6)"
gradientUnits="userSpaceOnUse"
id="radialGradient3053"
xlink:href="#linearGradient2990" />
<clipPath
id="clipPath3055"
clipPathUnits="userSpaceOnUse">
<path
style="opacity:1;fill:url(#radialGradient3059);fill-opacity:1;stroke:none;stroke-width:0.13749999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4.15;stroke-opacity:1"
d="M -121.2809,29.550642 C -122.56562,28.26592 -124.63657,28.26592 -125.92129,29.550642 L -149.05694,52.686292 L -172.19259,29.550642 C -173.47731,28.26592 -175.54826,28.26592 -176.83298,29.550642 L -183.5063,36.223962 C -184.79102,37.508683 -184.79102,39.579629 -183.5063,40.86435 L -160.37065,64 L -183.5063,87.13565 C -184.79102,88.420371 -184.79102,90.491317 -183.5063,91.776038 L -176.83298,98.449358 C -175.54826,99.73408 -173.47731,99.73408 -172.19259,98.449358 L -149.05694,75.313708 L -125.92129,98.449358 C -124.63657,99.73408 -122.56562,99.73408 -121.2809,98.449358 L -114.60758,91.776038 C -113.32286,90.491317 -113.32286,88.420371 -114.60758,87.13565 L -137.74323,64 L -114.60758,40.86435 C -113.32286,39.579629 -113.32286,37.508683 -114.60758,36.223962 L -121.2809,29.550642 z"
id="path3057" />
</clipPath>
<radialGradient
r="35.412899"
fy="76.905693"
fx="-9.1320477"
cy="64"
cx="-20"
gradientTransform="translate(-129.05694,-2.5852934e-6)"
gradientUnits="userSpaceOnUse"
id="radialGradient3059"
xlink:href="#linearGradient2990" />
<radialGradient
r="35.412899"
fy="76.905693"
fx="-9.1320477"
cy="64"
cx="-20"
gradientTransform="translate(-40.754823,-2.5852934e-6)"
gradientUnits="userSpaceOnUse"
id="radialGradient3066"
xlink:href="#linearGradient2990" />
<linearGradient
y2="176"
x2="-236"
y1="104"
x1="-236"
gradientTransform="translate(0,-86.232834)"
gradientUnits="userSpaceOnUse"
id="linearGradient3068"
xlink:href="#linearGradient3021" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
id="rect3287"
d="M 18.083601,8 L 109.9164,8 C 115.50271,8 120,12.497286 120,18.083601 L 120,109.9164 C 120,115.50271 115.50271,120 109.9164,120 L 18.083601,120 C 12.497286,120 8,115.50271 8,109.9164 L 8,18.083601 C 8,12.497286 12.497286,8 18.083601,8 z"
style="fill:url(#linearGradient3289);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter3319)" />
<path
id="rect8666"
d="M 18.083601,8 L 109.9164,8 C 115.50271,8 120,12.497286 120,18.083601 L 120,109.9164 C 120,115.50271 115.50271,120 109.9164,120 L 18.083601,120 C 12.497286,120 8,115.50271 8,109.9164 L 8,18.083601 C 8,12.497286 12.497286,8 18.083601,8 z"
style="fill:url(#linearGradient6410);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
id="rect6672"
d="M 18.083601,8 L 109.9164,8 C 115.50271,8 120,12.497286 120,18.083601 L 120,109.9164 C 120,115.50271 115.50271,120 109.9164,120 L 18.083601,120 C 12.497286,120 8,115.50271 8,109.9164 L 8,18.083601 C 8,12.497286 12.497286,8 18.083601,8 z"
style="opacity:0.08290154;fill:url(#linearGradient6680);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
id="rect9641"
d="M -109.38386,12.614708 L -19.616139,12.614708 C -15.737346,12.614708 -12.614708,15.737346 -12.614708,19.616139 L -12.614708,108.38386 C -12.614708,112.26265 -15.737346,115.38529 -19.616139,115.38529 L -109.38386,115.38529 C -113.26265,115.38529 -116.38529,112.26265 -116.38529,108.38386 L -116.38529,19.616139 C -116.38529,15.737346 -113.26265,12.614708 -109.38386,12.614708 z"
style="fill:url(#radialGradient9692);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
transform="scale(-1,1)" />
<path
id="rect6433"
d="M 17.906944,8.299378 C 13.216769,8.299378 8.509435,11.867379 8.509435,17.698118 L 12.77674,17.639205 C 13.229113,15.50937 15.628704,13.368243 17.303345,13.03582 L 17.906944,8.299378 z"
style="opacity:0.8876405;fill:url(#linearGradient6452);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6458)" />
<path
transform="matrix(-1,0,0,1,135.86741,-8)"
style="opacity:0.8689139;fill:url(#linearGradient6464);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6458)"
d="M 25.397509,16.46919 C 20.707334,16.46919 16.429601,20.123899 16.429601,25.954638 L 20.77674,25.639205 C 21.229113,23.50937 23.628704,21.368243 25.303345,21.03582 L 25.397509,16.46919 z"
id="path6462" />
<path
id="rect6626"
d="M 8,105.875 L 8,109.90625 C 8,115.49256 12.507435,120 18.09375,120 L 109.90625,120 C 115.49256,120 120,115.49257 120,109.90625 L 120,105.875 C 120,111.46131 115.49256,115.96875 109.90625,115.96875 L 18.09375,115.96875 C 12.507435,115.96875 8,111.46131 8,105.875 z"
style="opacity:0.08290155;fill:url(#linearGradient6637);fill-opacity:1.0;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
transform="matrix(1,0,0,-1,-8,136.08786)"
style="opacity:0.32642487;fill:url(#linearGradient6470);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6458)"
d="M 26.246568,16.978625 C 21.556393,16.978625 16.769225,20.633334 16.769225,26.464073 L 20.77674,25.639205 C 21.229113,23.50937 23.628704,21.368243 25.303345,21.03582 L 26.246568,16.978625 z"
id="path6466" />
<path
id="path6468"
d="M 26.246568,16.978625 C 21.556393,16.978625 16.769225,20.633334 16.769225,26.464073 L 20.77674,25.639205 C 21.229113,23.50937 23.628704,21.368243 25.303345,21.03582 L 26.246568,16.978625 z"
style="opacity:0.17616583;fill:url(#linearGradient6472);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6458)"
transform="matrix(-1,0,0,-1,135.86741,136.08786)" />
<path
style="opacity:0.38860103;fill:url(#linearGradient6649);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8,22.03871 L 8,18.00746 C 8,12.42115 12.507435,7.91371 18.09375,7.91371 L 109.90625,7.91371 C 115.49256,7.91371 120,12.42114 120,18.00746 L 120,22.03871 C 120,16.4524 115.49256,11.94496 109.90625,11.94496 L 18.09375,11.94496 C 12.507435,11.94496 8,16.4524 8,22.03871 z"
id="path6639" />
<g
transform="translate(0,-1)"
id="g3227">
<path
style="opacity:1;fill:url(#linearGradient3231);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 19.441303,13.28125 C 15.451078,13.28125 12.253803,16.478525 12.253803,20.46875 L 12.253803,21.46875 C 12.253803,17.478525 15.451078,14.28125 19.441303,14.28125 L 109.0663,14.28125 C 113.05653,14.28125 116.2538,17.478525 116.2538,21.46875 L 116.2538,20.46875 C 116.2538,16.478525 113.05653,13.28125 109.0663,13.28125 L 19.441303,13.28125 z"
id="path3207" />
<path
style="opacity:1;fill:url(#linearGradient3233);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 112.21077,14.946344 C 113.80613,16.261139 114.83577,18.233092 114.83577,20.477594 L 114.83577,54.977594 C 114.6424,55.305632 114.39903,55.644913 114.11702,55.977594 C 86.869243,66.464121 40.804813,69.465921 12.242023,62.602594 L 12.242023,63.165094 C 41.223093,70.471727 87.827513,67.54278 115.52327,56.883844 C 115.80529,56.551161 116.04865,56.211882 116.24202,55.883844 L 116.24202,21.383844 C 116.24202,18.530833 114.60098,16.10976 112.21077,14.946344 z"
id="path3215" />
</g>
<path
id="rect3235"
d="M -109.38386,13.614708 L -19.616139,13.614708 C -15.737346,13.614708 -12.614708,16.737346 -12.614708,20.616139 L -12.614708,108.38386 C -12.614708,112.26265 -15.737346,115.38529 -19.616139,115.38529 L -109.38386,115.38529 C -113.26265,115.38529 -116.38529,112.26265 -116.38529,108.38386 L -116.38529,20.616139 C -116.38529,16.737346 -113.26265,13.614708 -109.38386,13.614708 z"
style="fill:none;fill-opacity:1;stroke:url(#linearGradient3243);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter3281)"
transform="scale(-1,1)" />
<path
id="rect9679"
d="M 19.1875,12.28125 C 15.197275,12.28125 12,15.478525 12,19.46875 L 12,61.25 C 40.981077,68.556633 87.585499,65.627686 115.28125,54.96875 C 115.56327,54.636067 115.80663,54.296788 116,53.96875 L 116,19.46875 C 116,15.478525 112.80273,12.28125 108.8125,12.28125 L 19.1875,12.28125 z"
style="opacity:1;fill:url(#linearGradient2816);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<g
transform="matrix(1.129772,0,0,1.129772,132.6354,-8.3054093)"
id="g3061">
<path
style="opacity:1;fill:url(#radialGradient3066);fill-opacity:1;stroke:none;stroke-width:0.13749999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4.15;stroke-opacity:1"
d="M -32.978785,29.550642 C -34.263506,28.26592 -36.334452,28.26592 -37.619173,29.550642 L -60.754823,52.686292 L -83.890473,29.550642 C -85.175194,28.26592 -87.24614,28.26592 -88.530861,29.550642 L -95.204181,36.223962 C -96.488903,37.508683 -96.488903,39.579629 -95.204181,40.86435 L -72.068531,64 L -95.204181,87.13565 C -96.488903,88.420371 -96.488903,90.491317 -95.204181,91.776038 L -88.530861,98.449358 C -87.24614,99.73408 -85.175194,99.73408 -83.890473,98.449358 L -60.754823,75.313708 L -37.619173,98.449358 C -36.334452,99.73408 -34.263506,99.73408 -32.978785,98.449358 L -26.305465,91.776038 C -25.020743,90.491317 -25.020743,88.420371 -26.305465,87.13565 L -49.441114,64 L -26.305465,40.86435 C -25.020743,39.579629 -25.020743,37.508683 -26.305465,36.223962 L -32.978785,29.550642 z"
id="rect2396" />
<path
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.13749999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4.15;stroke-opacity:1;filter:url(#filter3033)"
d="M -183.09375,39.246364 C -183.73474,40.481924 -183.53875,42.020114 -182.5,43.058864 L -160.875,64.715114 L -159.375,63.215114 L -182.5,40.058864 C -182.74981,39.809054 -182.94109,39.544064 -183.09375,39.246364 z M -115.03125,39.246364 C -115.18344,39.541254 -115.34605,39.811164 -115.59375,40.058864 L -138.75,63.215114 L -137.25,64.715114 L -115.59375,43.058864 C -114.55322,42.018334 -114.38628,40.482954 -115.03125,39.246364 z M -149.0625,73.527614 L -172.1875,96.652614 C -173.47222,97.937334 -175.55903,97.937334 -176.84375,96.652614 L -183.5,89.965114 C -183.74981,89.715304 -183.94109,89.450314 -184.09375,89.152614 C -184.73474,90.388174 -184.53875,91.926364 -183.5,92.965114 L -176.84375,99.652614 C -175.55903,100.93733 -173.47222,100.93733 -172.1875,99.652614 L -149.0625,76.527614 L -125.90625,99.652614 C -124.62153,100.93733 -122.56597,100.93733 -121.28125,99.652614 L -114.59375,92.965114 C -113.55322,91.924594 -113.38628,90.389204 -114.03125,89.152614 C -114.18344,89.447504 -114.34605,89.717414 -114.59375,89.965114 L -121.28125,96.652614 C -122.56597,97.937334 -124.62153,97.937334 -125.90625,96.652614 L -149.0625,73.527614 z"
id="path2994"
clip-path="url(#clipPath3055)"
transform="translate(88.315386,0)" />
<path
style="opacity:1;fill:url(#linearGradient3068);fill-opacity:1;stroke:none;stroke-width:0.13749999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4.15;stroke-opacity:1;filter:url(#filter3045)"
d="M -266.875,27.360916 C -267.71392,27.360916 -268.57639,27.687306 -269.21875,28.329666 L -275.875,35.017166 C -276.9099,36.052076 -277.1012,37.596346 -276.46875,38.829666 C -276.31697,38.537086 -276.12097,38.263136 -275.875,38.017166 L -269.21875,31.329666 C -267.93403,30.044936 -265.84722,30.044936 -264.5625,31.329666 L -241.4375,54.485916 L -218.3125,31.329666 C -217.02778,30.044936 -214.94098,30.044936 -213.65625,31.329666 L -207,38.017166 C -206.75581,38.261356 -206.55761,38.539456 -206.40625,38.829666 C -205.76912,37.595106 -205.96298,36.054186 -207,35.017166 L -213.65625,28.329666 C -214.94098,27.044936 -217.02778,27.044936 -218.3125,28.329666 L -241.4375,51.485916 L -264.5625,28.329666 C -265.20486,27.687306 -266.03608,27.360916 -266.875,27.360916 z M -253.65,63.898416 L -275.275,85.523416 C -276.3099,86.558336 -276.5012,88.102596 -275.86875,89.335916 C -275.71697,89.043336 -275.52097,88.769386 -275.275,88.523416 L -252.15,65.398416 L -253.65,63.898416 z M -228.725,63.798416 L -230.225,65.298416 L -207.1,88.423416 C -206.85581,88.667616 -206.65761,88.945706 -206.50625,89.235916 C -205.86912,88.001366 -206.06298,86.460446 -207.1,85.423416 L -228.725,63.798416 z"
id="path2996"
clip-path="url(#clipPath3049)"
transform="translate(180.67317,0)" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -0,0 +1,312 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2606"
height="128"
width="128">
<defs
id="defs2608">
<linearGradient
id="linearGradient6131">
<stop
style="stop-color:#fcfcfc;stop-opacity:1"
offset="0"
id="stop6133" />
<stop
id="stop6135"
offset="0.52275378"
style="stop-color:#f8f8f8;stop-opacity:1" />
<stop
style="stop-color:#f0efef;stop-opacity:1;"
offset="0.77457333"
id="stop6141" />
<stop
style="stop-color:#e3e1e1;stop-opacity:1;"
offset="0.90122044"
id="stop6139" />
<stop
style="stop-color:#cecbcb;stop-opacity:1"
offset="1"
id="stop6137" />
</linearGradient>
<linearGradient
y2="102.34375"
x2="95.460213"
y1="93.621468"
x1="86.73793"
gradientTransform="matrix(1.0119858,0,0,1.0119858,-0.89554075,-0.9871566)"
gradientUnits="userSpaceOnUse"
id="linearGradient3893"
xlink:href="#linearGradient6131" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3067347,0,0,1.3067347,-27.83617,-33.818441)"
r="18.750002"
fy="110.25299"
fx="90.75"
cy="110.25299"
cx="90.75"
id="radialGradient3919-5"
xlink:href="#linearGradient3913-5" />
<linearGradient
id="linearGradient3913-5">
<stop
id="stop3915-4"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3917-7"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<clipPath
id="clipPath3889-6"
clipPathUnits="userSpaceOnUse">
<path
style="fill:url(#linearGradient3893);fill-opacity:1;stroke:none"
d="m 112,82.502986 c 0,4.465301 -2.79749,6.409952 -5.27972,8.093625 -5.10854,3.46508 -14.939114,3.32536 -20.720284,3.40638 -0.081,5.781159 0.16586,15.504599 -3.29922,20.613139 -1.68367,2.48224 -5.29051,5.38687 -8.20078,5.38687 2.31803,0 4.74284,-1.33476 7.58402,-4.08481 9.14197,-8.84873 17.36714,-16.13535 25.673154,-25.297529 C 109.67612,88.503916 112,86.97878 112,82.502986 z"
id="path3891-5" />
</clipPath>
<filter
id="filter3909-6"
color-interpolation-filters="sRGB">
<feGaussianBlur
id="feGaussianBlur3911-9"
stdDeviation="0.43040059" />
</filter>
<linearGradient
y2="102.18401"
x2="94.220871"
y1="90.381706"
x1="82.15696"
gradientTransform="matrix(1.4094273,0,0,1.4111689,-46.598939,-46.228314)"
gradientUnits="userSpaceOnUse"
id="linearGradient3895-3"
xlink:href="#linearGradient3897-7" />
<linearGradient
id="linearGradient3897-7">
<stop
id="stop3899-4"
offset="0"
style="stop-color:#fcfcfc;stop-opacity:1" />
<stop
style="stop-color:#f8f8f8;stop-opacity:1"
offset="0.52275378"
id="stop3901-5" />
<stop
id="stop3903-2"
offset="0.72337759"
style="stop-color:#f0efef;stop-opacity:1;" />
<stop
id="stop3905-5"
offset="0.89024991"
style="stop-color:#e3e1e1;stop-opacity:1;" />
<stop
id="stop3907-4"
offset="1"
style="stop-color:#cecbcb;stop-opacity:1" />
</linearGradient>
<clipPath
id="clipPath6093-7"
clipPathUnits="userSpaceOnUse">
<path
style="fill:#ffffff;fill-opacity:1"
d="m 17.000001,8 0.782827,110 57.5,0 c 1.675283,0 3.119418,0.18058 4.9,-1.6 C 88.980763,107.60206 99.94047,96.548195 107.19904,89.224043 109.6396,86.761431 110,84.752873 110,82.5 L 110,8 z"
id="path6095-4" />
</clipPath>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.689423,-0.08280186,0.06907651,1.3515102,-50.111719,-17.641619)"
r="47.5"
fy="47.274845"
fx="63.793392"
cy="64.004021"
cx="64"
id="radialGradient5988-0"
xlink:href="#linearGradient5982-7" />
<linearGradient
id="linearGradient5982-7">
<stop
id="stop5984-8"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop5986-6"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<filter
height="2.0255013"
y="-0.51275069"
width="1.9574188"
x="-0.47870937"
id="filter6171-8"
color-interpolation-filters="sRGB">
<feGaussianBlur
id="feGaussianBlur6173-8"
stdDeviation="10.140743" />
</filter>
<linearGradient
gradientTransform="matrix(1.003095,0,0,0.98228452,-1.7655502,0.69098836)"
gradientUnits="userSpaceOnUse"
y2="116.40091"
x2="72"
y1="0"
x1="72"
id="linearGradient4524-4"
xlink:href="#linearGradient4518-3" />
<linearGradient
id="linearGradient4518-3">
<stop
id="stop4520-1"
offset="0"
style="stop-color:#eeecec;stop-opacity:1" />
<stop
style="stop-color:#f4f4f4;stop-opacity:1"
offset="0.40000001"
id="stop5969-4" />
<stop
id="stop4522-9"
offset="1"
style="stop-color:#f6f5f5;stop-opacity:1" />
</linearGradient>
<filter
id="filter4123">
<feGaussianBlur
id="feGaussianBlur4125"
stdDeviation="2.028" />
</filter>
<filter
height="1.408259"
y="-0.2041295"
width="1.3293014"
x="-0.16465071"
id="filter4087">
<feGaussianBlur
id="feGaussianBlur4089"
stdDeviation="4.2234282" />
</filter>
<filter
id="filter3814">
<feGaussianBlur
id="feGaussianBlur3816"
stdDeviation="1.8077645" />
</filter>
<linearGradient
xlink:href="#linearGradient3255"
id="linearGradient5199"
x1="53.238865"
y1="12.753036"
x2="53.238865"
y2="86.356995"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient3255">
<stop
style="stop-color:#226e23;stop-opacity:1;"
offset="0"
id="stop3257" />
<stop
id="stop3267"
offset="1"
style="stop-color:#63ab3a;stop-opacity:1;" />
</linearGradient>
</defs>
<metadata
id="metadata2611">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
transform="matrix(1.003095,0,0,0.98228452,-1.7655506,0.69098557)"
id="path5990"
d="m 13.333,5.3364 0,118.3304 49.8545,-0.0668 c 2.115554,-0.003 4.528919,-1.77169 7,-4.25 0.71234,-0.71442 1.440746,-1.39395 2.15625,-2.09375 0.415612,-0.40649 0.832187,-0.81443 1.25,-1.21875 7.773958,-7.40962 26.98341,-25.122599 34.21875,-33.099999 0.42065,-0.42064 0.81207,-0.8111 1.15625,-1.1875 1.46444,-1.49766 2.76158,-2.8378 2.99375,-5.8625 L 112,75.156251 111.9972,5.3364 z"
style="opacity:0.45606695;fill:#000000;fill-opacity:1;filter:url(#filter4123)" />
<path
transform="matrix(1.003095,0,0,0.98228452,-1.7655506,0.69098557)"
d="m 13.09375,3.5 a 1.0280226,1.0280226 0 0 0 -0.125,0.03125 C 12.083764,3.7185227 11.496893,4.4391709 11.5,5.34375 l 0,118.3125 a 1.0280226,1.0280226 0 0 0 0,0.0313 c 0.01849,1.02971 0.782949,1.79389 1.8125,1.8125 a 1.0280226,1.0280226 0 0 0 0.03125,0 l 48.8125,0 c 1.665878,0 4.022349,0.23675 7.09375,-1.84375 a 1.0280226,1.0280226 0 0 0 0.28125,-0.21875 c 0.0578,-0.0515 0.139644,-0.12864 0.25,-0.21875 0.220712,-0.18022 0.516774,-0.41745 0.78125,-0.625 0.264476,-0.20755 0.495635,-0.39648 0.65625,-0.53125 0.04015,-0.0337 0.07966,-0.051 0.125,-0.0937 0.02267,-0.0214 0.04798,-0.0408 0.09375,-0.0937 0.02288,-0.0265 0.04727,-0.051 0.09375,-0.125 0.0081,-0.013 0.01807,-0.0366 0.03125,-0.0625 9.780644,-9.33282 27.440979,-28.680919 38.5,-39.875 1.71105,-1.711053 3.78125,-3.862728 3.78125,-8.5 l 0,-67.96875 a 1.0280226,1.0280226 0 0 0 0,-0.03125 C 113.82509,4.2829723 113.06085,3.5186039 112.03125,3.5 A 1.0280226,1.0280226 0 0 0 112,3.5 l -98.5625,0 c -0.03179,-0.00301 -0.06191,0.00137 -0.09375,0 -0.08491,-0.00365 -0.165226,-0.00803 -0.25,0 z"
id="path3314"
style="fill:#000000;fill-opacity:1;filter:url(#filter3814)" />
<path
id="path34"
d="m 11.608716,5.836076 0,116.330904 49.485099,0 c 1.680486,0 3.926459,-0.55989 7.021752,-3.56934 8.897609,-8.6509 32.175353,-31.250103 39.456483,-38.511869 2.44813,-2.441635 3.01026,-4.433083 3.01026,-6.66676 l -0.003,-67.582935 z"
style="fill:#ffffff;fill-opacity:1" />
<path
id="path3967"
d="m 17.07938,10.744349 c -0.340895,0 -0.501546,0.230461 -0.501546,0.491142 l 0,104.549779 c 0,0.80702 0.681425,1.474 1.504643,1.47343 l 44.496615,-0.0308 c 0.05324,-4e-5 0.812893,0.0229 1.504643,0.0308 1.783165,-0.0393 3.141667,-0.74038 4.369516,-1.56504 1.055122,-0.28588 25.815399,-23.810974 34.964739,-32.837827 1.36662,-1.348301 2.19223,-3.878226 2.19223,-4.808882 l 0,-66.81146 c 0,-0.317 -0.16372,-0.491143 -0.50156,-0.491143 z"
style="fill:url(#linearGradient4524-4);fill-opacity:1" />
<path
style="opacity:0.84653476;fill:url(#radialGradient5988-0);fill-opacity:1"
d="m 17.07938,10.744349 c -0.340895,0 -0.501546,0.230461 -0.501546,0.491142 l 0,104.549779 c 0,0.80703 0.68144,1.46853 1.504643,1.47343 l 46.36344,0.27591 c 0.05324,3.2e-4 3.284015,-0.008 3.975766,5e-5 6.561216,-4.42387 26.757215,-26.379267 35.730127,-35.221607 0.65937,-0.724227 0.45902,-0.363513 1.45841,-1.578984 l 0,-69.498578 c 0,-0.317 -0.16372,-0.491143 -0.50156,-0.491143 z"
id="path5980" />
<g
id="g3346"
transform="matrix(0.96214533,0,0,0.96214533,12.392737,5.3927324)">
<circle
cy="50"
cx="50"
id="path5201"
style="opacity:0.87099998;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.13186812;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.78431373"
r="45.934067" />
<circle
r="42.32143"
cy="50.000023"
cx="50"
id="path3336"
style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path4264"
d="M 50,6.3242189 A 43.676472,43.676472 0 0 0 6.3242189,50 43.676472,43.676472 0 0 0 50,93.675781 43.676472,43.676472 0 0 0 93.675781,50 43.676472,43.676472 0 0 0 50,6.3242189 Z m 0,6.7109371 c 2.26423,0.0083 4.523397,0.224904 6.748047,0.646485 0.10716,0.48368 0.167969,0.98402 0.167969,1.5 0,3.82265 -3.097269,6.918015 -6.917969,6.916015 -3.82069,0.0022 -6.916016,-3.091382 -6.916016,-6.914062 0,-0.5181 0.06204,-1.02034 0.169922,-1.50586 C 45.476743,13.257569 47.7359,13.042035 50,13.035156 Z m -18.994141,5.298828 c -0.24053,1.21916 -0.371333,2.474142 -0.371093,3.763672 0,7.71966 4.528393,14.367959 11.064453,17.480469 l 0,35.089844 8.298828,8.298828 8.300781,-8.300781 -0.476562,-7.34961 3.914062,-3.912109 -3.914062,-3.912109 5.871093,-5.867188 -5.871093,-5.871094 0.476562,-8.177734 c 6.53802,-3.11057 11.066406,-9.758856 11.066406,-17.478516 0,-1.28696 -0.133397,-2.540982 -0.373046,-3.757812 C 80.124647,25.007387 86.946634,37.023584 86.964844,50 86.964304,70.414588 70.41459,86.964292 50,86.964844 29.58541,86.964292 13.035701,70.414589 13.035156,50 13.050706,37.021755 19.872279,25.003208 31.005859,18.333984 Z m 13.458985,25.898438 2.767578,0 0,27.666016 -2.765625,0 -0.002,-27.664063 0,-0.002 z"
style="opacity:1;fill:#f9f9f9;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3336-3-2-7"
d="m 56.747561,13.681815 c 0.107159,0.48368 0.16838,0.98465 0.16838,1.50063 0,3.822651 -3.097351,6.917921 -6.91805,6.915921 -3.82069,0.0022 -6.91594,-3.09115 -6.91594,-6.913831 0,-0.5181 0.0626,-1.02142 0.17048,-1.50694 C 45.477221,13.25743 47.7359,13.042554 50,13.035675 c 2.26423,0.0083 4.52291,0.224559 6.74756,0.64614 z m -26.11261,8.416551 c 0,7.71966 4.528179,14.36677 11.064239,17.47928 l 0,35.091179 8.2987,8.2987 8.30082,-8.3008 -0.47566,-7.3495 3.91258,-3.9126 -3.91258,-3.9126 5.86992,-5.867799 -5.86992,-5.8699 0.47565,-8.17878 c 6.53802,-3.11057 11.06635,-9.75752 11.06635,-17.47718 0,-1.28696 -0.13288,-2.54209 -0.37253,-3.75892 11.132459,6.667543 17.953549,18.684164 17.97176,31.66058 C 86.96374,70.414615 70.414591,86.963775 50,86.964325 29.58541,86.963775 13.03626,70.414615 13.03572,50.000026 c 0.0155,-12.978245 6.83607,-24.997676 17.96965,-31.6669 -0.24053,1.21916 -0.37066,2.47571 -0.37042,3.76524 z m 13.829769,22.13472 2.76764,0 0,27.665839 -2.76554,0 -0.002,-27.663749 0,-0.002 z"
style="opacity:0.93999999;fill:url(#linearGradient5199);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
<path
id="path2197"
d=""
style="fill:#000000" />
<path
transform="matrix(1.258302,0,0,1.2610357,-31.355772,-28.164007)"
id="path6153"
d="m 114.4,82.502986 c 0,4.465301 -9.3766,4.299815 -11.85883,5.983488 -5.108537,3.46508 -16.574334,-0.810699 -22.355504,-0.729679 -0.081,5.781159 0.365076,18.386735 0.365076,24.536755 0,2.97817 -3.440475,11.20945 -6.350745,11.20945 -2.091359,1.5337 3.488204,8.21101 6.734971,5.31989 9.501888,-8.46107 35.131682,-30.022701 43.350822,-39.262886 2.04044,-2.29392 -4.90514,-9.844666 -9.88579,-7.057018 z"
style="opacity:0.6056338;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter6171-8)"
clip-path="url(#clipPath6093-7)" />
<path
transform="matrix(1.3586765,0,0,1.3616521,-42.382653,-40.155635)"
clip-path="url(#clipPath6093-7)"
style="opacity:0.64319249;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter4087)"
d="m 113.9,82.502986 c 0,4.465301 -7.96273,7.457662 -10.95287,7.881439 -6.394981,0.906328 -15.304541,-0.844131 -21.085711,-0.763111 -0.081,5.781159 3.397918,20.001056 -0.06716,25.109596 -1.68367,2.48224 -3.883991,8.07209 -6.794261,8.07209 -2.091359,1.5337 3.488204,11.21101 6.734971,8.31989 9.501888,-8.46107 45.998943,-30.20138 54.218083,-39.441569 2.04044,-2.29392 -17.0724,-11.965986 -22.05305,-9.178335 z"
id="path6081" />
<path
id="path6011"
d="m 110.63455,70.194961 c 0,6.22666 -3.89615,8.938389 -7.35324,11.28619 -7.11485,4.831902 -21.758838,3.808851 -29.810472,3.92183 -0.112812,8.061568 0.720236,21.530529 -4.105701,28.654139 -2.344905,3.46138 -6.904898,8.42993 -10.95813,8.42993 3.228399,0 6.605514,-1.86127 10.562523,-5.69609 12.732335,-12.33915 24.187814,-22.50002 35.75589,-35.27627 2.67259,-2.951702 5.90913,-5.078441 5.90913,-11.319729 z"
style="fill:url(#linearGradient3895-3);fill-opacity:1;stroke:none" />
<path
id="path6122"
d="m 110.66063,69.760596 c -0.44065,5.437134 -4.51314,7.338042 -6.73057,8.843942 -5.25734,3.570397 -12.241076,3.279514 -34.154353,3.279514 0,19.761338 0.513212,28.553598 -3.305002,33.382518 -2.272989,2.87466 -6.824021,6.07997 -10.532933,6.90254 5.082113,0 8.629228,-1.08751 11.949253,-4.30502 0.472301,-0.5418 1.415698,-1.55003 2.15657,-2.69493 3.94064,-5.81684 3.837814,-17.294735 3.837814,-29.263474 8.051633,-0.11295 22.202451,1.162156 29.317291,-3.669742 0.64822,-0.440215 2.63774,-2.020759 3.2183,-2.58944 3.22475,-3.158721 3.92397,-5.17219 4.24363,-9.885908 z M 55.937772,122.16911 c -0.219575,0.0485 -0.436533,0.0579 -0.652846,0.087 0.218648,-0.0234 0.432367,-0.0468 0.652846,-0.087 z"
style="fill:#ffffff;fill-opacity:1;stroke:none" />
<path
transform="matrix(1.3927341,0,0,1.3944553,-45.351691,-44.851769)"
clip-path="url(#clipPath3889-6)"
id="path3873"
d="M 108.97651,89.508691 79.934895,118.21077"
style="fill:none;stroke:url(#radialGradient3919-5);stroke-width:1.82707405;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter3909-6)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,714 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg1307"
height="128"
width="128">
<defs
id="defs1309">
<linearGradient
id="linearGradient6184">
<stop
id="stop6186"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop6188"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2648">
<stop
id="stop2650"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop2652"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient34264">
<stop
id="stop34266"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop34268"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient26369">
<stop
id="stop26371"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop26373"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient25485">
<stop
id="stop25487"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop25489"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient23722">
<stop
id="stop23724"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop23726"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient22831">
<stop
id="stop22833"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop22835"
offset="1"
style="stop-color:#888a85;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient17579">
<stop
id="stop17581"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop17583"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient15825">
<stop
id="stop15827"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop15829"
offset="1"
style="stop-color:#555753;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient13184">
<stop
id="stop13186"
offset="0"
style="stop-color:#000000;stop-opacity:0.66666669;" />
<stop
id="stop13188"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient11428">
<stop
id="stop11430"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop11432"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient10539">
<stop
id="stop10541"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop10543"
offset="1"
style="stop-color:#888a85;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient6818">
<stop
id="stop6820"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop6822"
offset="1"
style="stop-color:#3e3e3e;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5928">
<stop
id="stop5930"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop5932"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4174">
<stop
id="stop4176"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4178"
offset="1"
style="stop-color:#3e3e3e;stop-opacity:0;" />
</linearGradient>
<radialGradient
r="11.547417"
fy="33.309246"
fx="154.17799"
cy="33.309246"
cx="154.17799"
gradientTransform="matrix(1,0,0,0.931884,3.581214,-10.16833)"
gradientUnits="userSpaceOnUse"
id="radialGradient9655"
xlink:href="#linearGradient5928" />
<radialGradient
r="7.125"
fy="29.473955"
fx="173.35292"
cy="29.473955"
cx="173.35292"
gradientTransform="matrix(5.093182,3.710751e-2,-3.342812e-2,4.588167,-711.6483,-118.8231)"
gradientUnits="userSpaceOnUse"
id="radialGradient9657"
xlink:href="#linearGradient4174" />
<radialGradient
r="4.6959705"
fy="56.316689"
fx="150.17821"
cy="56.316689"
cx="150.17821"
gradientTransform="matrix(7.899763,-0.133352,0.10295,6.09874,-1031.154,-297.761)"
gradientUnits="userSpaceOnUse"
id="radialGradient9659"
xlink:href="#linearGradient6818" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.3781044,-0.3075006,1.0402511,6.8677766,-436.02391,108.90546)"
r="16.390625"
fy="1.2351388"
fx="222.09877"
cy="1.2351388"
cx="222.09877"
id="radialGradient10545"
xlink:href="#linearGradient10539" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.581247,5.817117e-3,-7.455762e-2,9.383173,36.03053,-309.6658)"
r="6.8733773"
fy="38.927982"
fx="94.138443"
cy="38.927982"
cx="94.138443"
id="radialGradient12309"
xlink:href="#linearGradient11428" />
<linearGradient
gradientTransform="matrix(0.737301,-6.658052e-7,1.272726e-7,1.016243,23.72264,1.031887)"
gradientUnits="userSpaceOnUse"
y2="48.538783"
x2="95"
y1="48.538783"
x1="79.735275"
id="linearGradient13190"
xlink:href="#linearGradient13184" />
<radialGradient
r="6.8733773"
fy="38.927982"
fx="94.138443"
cy="38.927982"
cx="94.138443"
gradientTransform="matrix(0.566041,4.976245e-3,-7.260836e-2,8.025401,38.46269,-251.3652)"
gradientUnits="userSpaceOnUse"
id="radialGradient14940"
xlink:href="#linearGradient11428" />
<linearGradient
y2="48.538783"
x2="95"
y1="48.538783"
x1="79.735275"
gradientTransform="matrix(0.718011,5.475357e-7,-1.861064e-8,0.869189,26.47674,14.37374)"
gradientUnits="userSpaceOnUse"
id="linearGradient14942"
xlink:href="#linearGradient13184" />
<radialGradient
r="6.8733773"
fy="38.927982"
fx="94.138443"
cy="38.927982"
cx="94.138443"
gradientTransform="matrix(0.602777,4.958538e-3,-7.732142e-2,7.998709,33.70512,-255.1298)"
gradientUnits="userSpaceOnUse"
id="radialGradient14946"
xlink:href="#linearGradient11428" />
<linearGradient
y2="48.538783"
x2="95"
y1="48.538783"
x1="79.735275"
gradientTransform="matrix(0.764612,-9.213433e-7,-8.915483e-8,0.866298,20.94123,9.725384)"
gradientUnits="userSpaceOnUse"
id="linearGradient14948"
xlink:href="#linearGradient13184" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.71884,5.195072e-2,0.124003,10.14631,11.77238,-600.3243)"
r="4.1422901"
fy="64.803642"
fx="77.371063"
cy="64.803642"
cx="77.371063"
id="radialGradient15831"
xlink:href="#linearGradient15825" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.35411,-4.17141,5.032558,-1.51988,-331.3648,448.8406)"
r="8.072001"
fy="72.25351"
fx="64.035408"
cy="72.25351"
cx="64.035408"
id="radialGradient19335"
xlink:href="#linearGradient17579" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0280267,-0.1270725,0.1309176,0.9349125,-10.479426,16.042145)"
r="59.06985"
fy="47.896503"
fx="78.344902"
cy="47.896503"
cx="78.344902"
id="radialGradient22837"
xlink:href="#linearGradient22831" />
<linearGradient
gradientTransform="matrix(1.0692341,-0.1321662,0.1338966,0.9561867,-15.573128,15.396338)"
gradientUnits="userSpaceOnUse"
y2="11.270861"
x2="120.06922"
y1="11.270861"
x1="105.58075"
id="linearGradient23728"
xlink:href="#linearGradient23722" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2857021,-9.6936986e-2,0.3403616,0.8738542,19.958746,76.364594)"
r="59.073312"
fy="-10.284327"
fx="302.08856"
cy="-10.284327"
cx="302.08856"
id="radialGradient25491"
xlink:href="#linearGradient25485" />
<linearGradient
gradientTransform="matrix(1.0280267,-0.1270725,0.1338966,0.9561867,-10.625435,14.784763)"
gradientUnits="userSpaceOnUse"
y2="13.184787"
x2="141.67282"
y1="51.131916"
x1="114.74419"
id="linearGradient26375"
xlink:href="#linearGradient26369" />
<radialGradient
r="59.073312"
fy="-10.284327"
fx="302.08856"
cy="-10.284327"
cx="302.08856"
gradientTransform="matrix(0.2857021,-9.6936986e-2,0.3403616,0.8738542,20.206674,76.333938)"
gradientUnits="userSpaceOnUse"
id="radialGradient27252"
xlink:href="#linearGradient25485" />
<radialGradient
r="16.390625"
fy="-4.2258649"
fx="224.46358"
cy="-4.2258649"
cx="224.46358"
gradientTransform="matrix(2.3781044,-0.3075006,1.0402511,6.8677766,-437.14482,108.10564)"
gradientUnits="userSpaceOnUse"
id="radialGradient27256"
xlink:href="#linearGradient10539" />
<radialGradient
r="4.6031745"
fy="99.120925"
fx="19.006332"
cy="99.120925"
cx="19.006332"
gradientTransform="matrix(-1.0334476,7.8972655e-2,-0.1160692,-1.3576785,44.296126,247.80777)"
gradientUnits="userSpaceOnUse"
id="radialGradient34276"
xlink:href="#linearGradient34264" />
<radialGradient
r="7.125"
fy="28.159636"
fx="174.07651"
cy="28.159636"
cx="174.07651"
gradientTransform="matrix(4.9443389,-0.2853475,0.2841705,4.3388229,-752.28517,-40.172841)"
gradientUnits="userSpaceOnUse"
id="radialGradient34303"
xlink:href="#linearGradient4174" />
<radialGradient
r="4.9090158"
fy="99.099475"
fx="18.988296"
cy="99.099475"
cx="18.988296"
gradientTransform="matrix(1.0280267,-0.1270725,0.1779489,1.2707731,-14.990972,-16.390537)"
gradientUnits="userSpaceOnUse"
id="radialGradient8645"
xlink:href="#linearGradient6184" />
<radialGradient
r="4.9090158"
fy="99.099475"
fx="18.988296"
cy="99.099475"
cx="18.988296"
gradientTransform="matrix(1.0280267,-0.1270725,0.1779489,1.2707731,-14.990972,-16.390537)"
gradientUnits="userSpaceOnUse"
id="radialGradient8648"
xlink:href="#linearGradient6184" />
<radialGradient
r="33.898299"
fy="66.948593"
fx="22.596113"
cy="66.948593"
cx="22.596113"
gradientTransform="matrix(1.0280267,-0.1270725,0.1208309,0.8628811,4.8158744,36.952411)"
gradientUnits="userSpaceOnUse"
id="radialGradient8652"
xlink:href="#linearGradient2648" />
<filter
id="filter3737">
<feGaussianBlur
id="feGaussianBlur3739"
stdDeviation="0.30086486" />
</filter>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.218502,-6.8178502e-2,0.7665978,2.4568331,-46.677697,-138.76422)"
r="54.613575"
fy="118.94362"
fx="27.96059"
cy="118.94362"
cx="27.96059"
id="radialGradient3758"
xlink:href="#linearGradient11428" />
<filter
id="filter3933">
<feGaussianBlur
id="feGaussianBlur3935"
stdDeviation="1.4820941" />
</filter>
<radialGradient
r="11.547417"
fy="33.309246"
fx="154.17799"
cy="33.309246"
cx="154.17799"
gradientTransform="matrix(0.9702732,-6.2911785e-2,6.4304453e-2,0.8808136,-50.713809,19.652164)"
gradientUnits="userSpaceOnUse"
id="radialGradient3937"
xlink:href="#linearGradient5928" />
<filter
id="filter3985">
<feGaussianBlur
id="feGaussianBlur3987"
stdDeviation="0.18706947" />
</filter>
<filter
id="filter3989">
<feGaussianBlur
id="feGaussianBlur3991"
stdDeviation="0.086425096" />
</filter>
<filter
id="filter3995">
<feGaussianBlur
id="feGaussianBlur3997"
stdDeviation="0.17395735" />
</filter>
<radialGradient
r="33.898299"
fy="65.784782"
fx="56.312855"
cy="77.167572"
cx="62.261757"
gradientTransform="matrix(0.4649621,1.0036473,-0.2853745,0.1958414,69.723794,-13.486394)"
gradientUnits="userSpaceOnUse"
id="radialGradient4005"
xlink:href="#linearGradient2648" />
</defs>
<metadata
id="metadata1312">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
id="path3762"
d="M 99.787,3.875 C 99.39939,3.8764701 99.02302,3.8857118 98.630751,3.90625 C 98.589641,3.908401 98.546791,3.9038904 98.505751,3.90625 C 98.277071,3.9193845 97.422076,3.9611684 97.349501,3.96875 C 97.286512,3.9753282 97.196706,3.9638568 97.130751,3.96875 C 97.059567,3.9768414 96.982921,3.9912842 96.912001,4 C 96.270952,4.0787755 95.623431,4.184325 95.005751,4.3125 C 87.238445,5.7446718 81.339829,10.949229 80.162001,17.21875 C 80.11042,17.484203 80.071393,17.762208 80.037001,18.03125 C 80.015628,18.208056 79.988305,18.384285 79.974501,18.5625 C 79.969399,18.595075 79.948075,18.654883 79.943251,18.6875 C 79.943251,18.6875 76.56192,39.397017 72.568251,44.96875 C 72.470298,45.105407 72.336142,45.300374 72.130751,45.53125 C 70.690596,47.039735 67.417427,50.203326 63.349501,54.125 C 47.462844,69.213469 16.166651,97.89234 8.443251,106.125 C 8.352861,106.20983 7.380751,107.125 7.380751,107.125 L 7.787001,106.84375 C 7.257251,107.4306 6.857761,107.88611 6.693251,108.15625 C 5.947931,109.38015 5.468051,110.66568 5.224501,111.96875 C 5.220661,111.98874 5.228231,112.01125 5.224501,112.03125 C 5.169221,112.33645 5.129501,112.63152 5.099501,112.9375 C 5.096311,112.96766 5.102451,113.00109 5.099501,113.03125 C 5.071911,113.33799 5.040091,113.66267 5.037001,113.96875 C 5.036841,113.97923 5.037131,113.98952 5.037001,114 C 5.034741,114.30496 5.047031,114.6033 5.068251,114.90625 C 5.069611,114.92713 5.066781,114.94788 5.068251,114.96875 C 5.091061,115.27169 5.116571,115.57548 5.162001,115.875 C 5.165011,115.89547 5.158891,115.91705 5.162001,115.9375 C 5.208941,116.23668 5.280821,116.51814 5.349501,116.8125 C 5.400691,117.03878 5.473381,117.24591 5.537001,117.46875 C 5.563781,117.56064 5.570651,117.65878 5.599501,117.75 C 5.606461,117.77239 5.623671,117.79015 5.630751,117.8125 C 5.647921,117.86578 5.675381,117.91572 5.693251,117.96875 C 5.867111,118.49369 6.047501,119.0342 6.287001,119.53125 C 6.296861,119.55146 6.308281,119.57359 6.318251,119.59375 C 8.331711,123.71516 12.534091,126.70803 17.443251,126.28125 C 17.705351,126.26383 17.989601,126.22483 18.255751,126.1875 C 18.265621,126.18589 18.277131,126.18914 18.287001,126.1875 C 18.358921,126.17721 18.433551,126.16803 18.505751,126.15625 C 19.634131,125.97219 20.797271,125.57593 21.974501,125 C 22.702501,124.66124 23.424701,124.2545 24.162001,123.75 C 31.939259,118.42833 78.913552,59.757649 85.255751,55.65625 C 85.391451,55.568495 85.585293,55.466499 85.755751,55.375 C 93.10175,52.164452 100.1564,51.727272 107.537,49.1875 C 109.92589,48.64112 111.537,48.28125 111.537,48.28125 C 111.54208,48.282391 111.56354,48.280706 111.56825,48.28125 C 111.57261,48.2812 111.5955,48.281885 111.5995,48.28125 C 111.60279,48.27945 111.62781,48.252376 111.63075,48.25 C 111.63266,48.245918 111.66043,48.223389 111.662,48.21875 C 111.66323,48.213557 111.66111,48.193248 111.662,48.1875 C 111.6625,48.181834 111.66342,48.16559 111.662,48.15625 C 111.66549,48.155505 111.787,48.125 111.787,48.125 C 111.94932,48.161461 111.92626,47.917501 111.75575,47.40625 C 116.04476,45.18063 121.57642,39.132599 123.662,30.375 C 123.76301,29.950881 123.46756,27.026211 123.3495,26.84375 C 123.36414,26.77961 123.39759,26.720536 123.412,26.65625 L 110.0995,32.9375 L 101.88075,27.46875 C 100.99343,25.729942 100.16922,24.149251 99.662,23.0625 C 99.66204,18.934634 99.65871,18.584442 100.037,14.84375 C 105.11167,12.845988 114.06825,9.40625 114.06825,9.40625 C 114.05779,9.3961679 114.0475,9.385059 114.037,9.375 C 114.04962,9.370182 114.31825,9.28125 114.31825,9.28125 C 110.85113,5.9411151 105.6011,3.8529483 99.787,3.875 z M 16.943251,106.71875 C 19.399991,106.66051 21.780761,108.27892 23.099501,110.625 C 23.208581,110.82385 23.318691,111.01018 23.412001,111.21875 C 23.421911,111.24032 23.433521,111.25958 23.443251,111.28125 C 23.535345,111.49169 23.618382,111.71849 23.693251,111.9375 C 23.70086,111.95909 23.717067,111.97833 23.724501,112 C 23.845629,112.36439 23.936651,112.74151 24.005751,113.125 C 24.037521,113.29159 24.047073,113.45535 24.068251,113.625 C 24.091192,113.82192 24.122702,114.0185 24.130751,114.21875 C 24.257785,117.37917 21.391951,120.65453 18.130751,121.375 C 17.966181,121.39747 17.796351,121.39758 17.630751,121.40625 C 13.978331,121.59747 10.265401,117.94106 10.037001,114.125 C 9.879641,111.49587 11.301811,108.86423 13.818251,107.5 C 14.429421,107.19963 15.123891,106.95086 15.849501,106.8125 C 15.910131,106.80397 15.975421,106.81928 16.037001,106.8125 C 16.332181,106.76731 16.632181,106.7356 16.943251,106.71875 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient3937);stroke-width:1.57810318;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3933)" />
<g
transform="matrix(0.9702732,-6.2911785e-2,6.9004783e-2,0.9451966,-53.4637,27.488536)"
id="g8758">
<path
style="opacity:1;fill:#888a85;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient9655);stroke-width:1.64400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 181.67604,9.099418 L 167.54392,14.798884 L 159.38892,8.405838 C 158.31752,9.823263 157.50262,30.099195 162.49085,29.926445 C 171.6228,29.610191 178.29658,20.600703 181.67604,9.099418 z"
id="path3285" />
<path
style="opacity:0.51376145;fill:url(#radialGradient9657);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.14400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 181.16095,9.7597789 L 167.7547,15.166029 L 166.91095,24.603529 L 168.4422,28.759779 C 174.28842,25.536422 178.63786,18.346591 181.16095,9.7597789 z"
id="path3293" />
<path
style="opacity:0.51376145;fill:url(#radialGradient9659);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.64400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 159.31603,8.5972985 C 159.31184,8.6028355 159.28896,8.6224385 159.28478,8.6285485 C 159.27644,8.6419055 159.26183,8.6754455 159.25353,8.6910485 C 158.21496,10.788359 157.51898,30.297924 162.40978,30.128548 C 163.49063,30.091117 164.55544,29.930513 165.56603,29.659798 L 166.25353,14.066048 L 159.31603,8.5972985 z"
id="path5936" />
</g>
<path
id="path2388"
d="M 96.407112,2.0934337 C 87.400435,3.2002237 80.553383,9.3215913 79.99305,16.555727 C 79.987948,16.588302 79.97259,16.657792 79.967766,16.690409 C 79.967766,16.690409 76.594971,37.409882 72.601302,42.981615 C 69.466808,47.354653 9.5446446,101.51954 6.721579,106.15531 C 0.75898169,115.9465 11.878434,129.90919 23.675213,121.83713 C 31.452476,116.51545 78.410046,57.861397 84.752245,53.759998 C 89.039149,50.987716 111.30722,46.241085 111.30722,46.241085 C 112.60573,46.532776 102.02853,27.250272 99.18238,21.152217 C 99.18242,17.010295 99.1734,16.674286 99.55563,12.897588 C 104.58292,10.915815 113.83648,7.3822007 113.83648,7.3822007 C 110.13822,3.8193887 104.41262,1.6742877 98.13631,2.0028986 C 98.0952,2.0050496 98.04436,2.0075025 98.00332,2.0098607 C 97.77464,2.0229959 96.94524,2.0614781 96.872666,2.0690583 C 96.809677,2.0756372 96.705844,2.0763528 96.639888,2.0812467 C 96.568703,2.0893381 96.478032,2.0847179 96.407112,2.0934337 z M 16.792733,104.64842 C 20.445192,104.45719 23.978542,108.00384 24.147653,112.21109 C 24.287558,115.69175 20.806853,119.32082 17.154407,119.51205 C 13.501973,119.70328 9.7798416,116.03165 9.5514386,112.2156 C 9.3319636,108.54859 12.176541,104.89011 16.792733,104.64842 z"
style="opacity:1;fill:#888a85;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.14400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="opacity:1;fill:url(#radialGradient22837);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.14400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 96.920143,1.9928089 C 87.913471,3.0995969 81.066421,9.2209652 80.506086,16.4551 C 80.500985,16.487675 80.485626,16.557166 80.480803,16.589783 C 80.480803,16.589783 77.108008,37.309255 73.114339,42.880989 C 69.979841,47.254027 10.057688,101.41891 7.2346165,106.05468 C 1.2720192,115.84586 12.391471,129.80855 24.188251,121.73649 C 31.965506,116.41482 78.923082,57.76077 85.265281,53.659371 C 89.552186,50.887089 111.82025,46.14046 111.82025,46.14046 C 113.11876,46.43215 102.54156,27.149647 99.69541,21.051592 C 99.69545,16.90967 99.68643,16.57366 100.06866,12.796963 C 105.09595,10.81519 114.34951,7.2815751 114.34951,7.2815751 C 110.65125,3.7187646 104.92565,1.5736628 98.64934,1.9022737 C 98.60823,1.9044247 98.55739,1.906877 98.51635,1.9092366 C 98.28767,1.9223711 97.458271,1.9608519 97.385696,1.9684335 C 97.322708,1.9750117 97.218874,1.975728 97.152919,1.9806212 C 97.081734,1.9887126 96.991063,1.9840931 96.920143,1.9928089 z M 17.30577,104.5478 C 20.958222,104.35657 24.491585,107.9032 24.66069,112.11045 C 24.800596,115.59111 21.319891,119.22018 17.667437,119.41142 C 14.01501,119.60264 10.292873,115.93102 10.064477,112.11496 C 9.8450006,108.44796 12.689584,104.78949 17.30577,104.5478 z"
id="path21956" />
<path
id="path9661"
d="M 82.022813,17.158216 L 89.499546,33.402558 L 92.683456,32.045387 L 97.96604,43.874891 L 95.347596,45.117855 L 98.94601,49.818983 C 104.89,48.328706 111.30116,45.784053 111.30116,45.784053 C 111.30583,45.784602 111.32926,45.782412 111.33358,45.782367 C 111.33755,45.781735 111.36238,45.781901 111.36601,45.780683 C 111.36859,45.777738 111.39435,45.751779 111.39659,45.748267 C 111.39814,45.743631 111.39352,45.722729 111.39473,45.717537 C 111.3965,45.706043 111.42302,45.668071 111.42346,45.654391 C 111.39794,43.875567 101.88636,26.444802 99.21683,20.702838 C 99.21383,16.561291 99.22042,16.228451 99.59786,12.452345 C 104.59727,10.474019 113.82695,7.3443503 113.82695,7.3443503 C 110.14548,3.7794616 102.58604,2.2249011 96.949357,3.270741 C 88.095754,4.9134527 82.839455,10.203925 82.022813,17.158216 z"
style="opacity:1;fill:url(#radialGradient10545);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.14400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path23730"
d="M 95.37965,2.3079607 C 86.892997,3.7422551 80.538502,9.6902535 80.000071,16.641803 C 79.99498,16.674375 79.989506,16.732679 79.984683,16.765297 C 79.984672,16.7653 76.613697,37.486263 72.620017,43.057997 C 69.48553,47.431034 9.5448466,101.58825 6.7217699,106.22402 C 0.75917259,116.0152 11.89367,129.98146 23.690442,121.90941 C 31.467705,116.58773 78.441285,57.936701 84.783485,53.835302 C 89.070378,51.063022 111.31189,46.300446 111.31189,46.300446 C 111.31697,46.301585 111.34349,46.325811 111.3482,46.326356 C 111.35256,46.326308 111.37633,46.32302 111.38033,46.322385 C 111.38362,46.320585 111.40533,46.290908 111.40827,46.288533 C 111.41018,46.284454 111.43464,46.25932 111.43621,46.254681 C 111.43744,46.249486 111.43114,46.230548 111.43203,46.2248 C 111.4337,46.205911 111.42075,46.158913 111.41947,46.135158 C 111.23997,44.115282 101.86289,26.922081 99.20574,21.228975 C 99.20577,17.087054 99.20368,16.75121 99.58591,12.974512 C 104.6132,10.992742 113.84494,7.4426208 113.84494,7.4426208 C 110.14668,3.8798089 104.43551,1.7573663 98.15921,2.0859765 C 98.1181,2.0881268 98.06756,2.0696212 98.02652,2.0719794 C 97.79784,2.0851146 96.966323,2.1436227 96.893748,2.1512036 C 96.830749,2.1577825 96.730638,2.1442266 96.664683,2.1491198 C 96.602392,2.1562014 96.505638,2.1718525 96.439803,2.1769168 C 96.087977,2.2201515 95.724638,2.2496562 95.37965,2.3079607 z M 96.735676,3.3562663 C 102.34044,2.3942942 109.68053,3.5746661 113.30447,7.0838539 C 113.30447,7.0838539 104.14124,10.625504 99.14182,12.603833 C 98.76438,16.379939 98.75865,16.716749 98.76165,20.858296 C 101.41033,26.555401 110.77187,43.762527 110.94326,45.768449 C 110.94365,45.775874 110.94735,45.791381 110.94744,45.79833 C 110.94229,45.809657 110.92917,45.851283 110.92369,45.862063 C 110.92393,45.864824 110.92747,45.888716 110.92787,45.891943 C 110.92083,45.89924 110.90122,45.924324 110.89993,45.925796 C 110.89277,45.925986 110.86979,45.92945 110.8678,45.929766 C 110.86431,45.930009 110.8386,45.933609 110.83568,45.933738 C 110.83568,45.933738 103.72659,47.151257 97.78259,48.641536 L 96.000978,46.055871 L 99.49838,43.760695 L 93.103661,31.367651 L 88.691484,32.898992 L 81.562893,17.299771 C 82.379526,10.345481 87.62926,5.0606258 96.482854,3.4179147 C 96.570925,3.4015742 96.646713,3.3715356 96.735676,3.3562663 z M 15.64722,104.84718 C 16.016936,104.77811 16.411234,104.75487 16.807931,104.73411 C 20.460379,104.54288 24.002329,108.06732 24.171444,112.27457 C 24.311351,115.75523 20.808011,119.39494 17.155555,119.58618 C 13.503114,119.77741 9.7927316,116.1027 9.5643256,112.28664 C 9.3637216,108.93477 11.714792,105.58188 15.64722,104.84718 z"
style="opacity:1;fill:url(#radialGradient25491);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.14400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="opacity:1;fill:url(#radialGradient27252);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 95.627579,2.2773147 C 87.140931,3.7116079 80.786436,9.6596062 80.248005,16.611157 C 80.242915,16.643728 80.23744,16.702033 80.232617,16.73465 C 80.232606,16.734654 76.861627,37.455617 72.867947,43.027351 C 69.733461,47.400388 9.7927726,101.5576 6.9696971,106.19338 C 1.0070949,115.98455 12.1416,129.9508 23.938372,121.87875 C 31.715635,116.55707 78.689216,57.906055 85.031418,53.804656 C 89.318313,51.032375 111.55982,46.2698 111.55982,46.2698 C 111.5649,46.270939 111.59142,46.295166 111.59613,46.29571 C 111.60049,46.295662 111.62426,46.292374 111.62826,46.291739 C 111.63155,46.28994 111.65326,46.260263 111.6562,46.257887 C 111.65811,46.253807 111.68257,46.228674 111.68414,46.224035 C 111.68537,46.21884 111.67907,46.199902 111.67996,46.194154 C 111.68163,46.175266 111.66868,46.128268 111.6674,46.104512 C 111.4879,44.084636 102.11082,26.891435 99.45367,21.19833 C 99.4537,17.056409 99.45161,16.720564 99.83383,12.943866 C 104.86112,10.962095 114.09287,7.4119748 114.09287,7.4119748 C 110.39461,3.8491621 104.68344,1.7267196 98.40714,2.0553298 C 98.36602,2.0574815 98.31549,2.0389751 98.27445,2.0413341 C 98.04577,2.0544679 97.214252,2.1129767 97.141677,2.1205569 C 97.078678,2.1271365 96.978566,2.1135806 96.912612,2.118473 C 96.850322,2.1255554 96.753569,2.1412065 96.687731,2.1462708 C 96.335905,2.1895055 95.972568,2.2190095 95.627579,2.2773147 z M 96.983605,3.3256196 C 102.58837,2.3636468 109.92846,3.5440201 113.5524,7.0532086 C 113.5524,7.0532086 104.38916,10.594859 99.38974,12.573186 C 99.01231,16.349293 99.00658,16.686103 99.00958,20.82765 C 101.65825,26.524755 111.0198,43.731881 111.19119,45.737803 C 111.19158,45.745228 111.19528,45.760735 111.19537,45.767683 C 111.19022,45.779011 111.1771,45.820636 111.17162,45.831416 C 111.17186,45.834178 111.1754,45.858071 111.1758,45.861298 C 111.16876,45.868594 111.14915,45.893678 111.14786,45.895149 C 111.1407,45.89534 111.11772,45.898804 111.11573,45.89912 C 111.11224,45.899363 111.08653,45.902962 111.08361,45.903092 C 111.08361,45.903092 103.97452,47.120611 98.03052,48.610889 L 96.152029,45.33341 L 99.92966,43.238192 L 94.063095,31.014461 L 89.090472,32.145885 L 81.810827,17.269124 C 82.627461,10.314834 87.877194,5.0299786 96.730783,3.3872687 C 96.818854,3.3709274 96.894643,3.3408888 96.983605,3.3256196 z M 15.895147,104.81653 C 16.26487,104.74745 16.65916,104.72423 17.055864,104.70345 C 20.708308,104.51223 24.250259,108.03667 24.419373,112.24391 C 24.559281,115.72457 21.055941,119.36428 17.403484,119.55552 C 13.751044,119.74676 10.040662,116.07204 9.8122556,112.25599 C 9.6116536,108.90412 11.962719,105.55124 15.895147,104.81653 z"
id="path27250" />
<g
transform="matrix(1.0280267,-0.1270725,0.1338966,0.9561867,-10.625435,14.784763)"
id="g22839">
<rect
style="opacity:1;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient19335);stroke-width:1.54412687;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10551"
width="13.399776"
height="13.094864"
x="68.625313"
y="58"
transform="matrix(0.956291,-0.292417,0.309707,0.950832,0,0)" />
<rect
transform="matrix(0.967683,-0.25217,0.307423,0.951573,0,0)"
y="55.691086"
x="71.562981"
height="11.043238"
width="7.7254124"
id="rect14950"
style="opacity:1;fill:url(#radialGradient15831);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.64400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="opacity:1;fill:url(#radialGradient12309);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient13190);stroke-width:0.38432986;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect10553"
width="11.254695"
height="1.2325668"
x="82.51152"
y="49.742821"
ry="0"
transform="matrix(0.98605,-0.16645,8.671967e-2,0.996233,0,0)" />
<rect
transform="matrix(0.989282,-0.14602,9.906172e-2,0.995081,0,0)"
ry="0"
y="56.036003"
x="83.72757"
height="1.0542099"
width="10.960242"
id="rect14938"
style="opacity:1;fill:url(#radialGradient14940);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient14942);stroke-width:0.35075644;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="opacity:1;fill:url(#radialGradient14946);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient14948);stroke-width:0.36135769;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect14944"
width="11.671585"
height="1.0507048"
x="81.907768"
y="51.249149"
ry="0"
transform="matrix(0.990631,-0.136567,0.105988,0.994367,0,0)" />
</g>
<path
id="rect22846"
d="M 99.2677,12.983285 L 113.51524,7.483389 L 114.15971,9.1734733 L 99.22846,15.089652 L 99.2677,12.983285 z"
style="fill:url(#linearGradient23728);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.44400000999999967;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter3737)" />
<path
id="rect25493"
d="M 110.6256,44.083197 C 114.78576,43.29433 121.28563,34.610988 123.36506,24.859296 C 123.45757,24.425528 123.7907,27.917213 123.68001,28.382001 C 121.53531,37.387863 115.75073,43.534606 111.41621,45.599184 C 111.15981,45.721306 111.44603,47.325286 110.6256,44.083197 z"
style="fill:url(#linearGradient26375);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
style="opacity:1;fill:url(#radialGradient27256);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.14400004999999982;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3985)"
d="M 82.637435,16.143859 L 89.18703,32.971995 L 93.211608,32.214698 L 98.70983,43.782952 L 95.444472,45.809669 L 97.82512,49.019149 C 103.76911,47.528871 110.18027,44.984218 110.18027,44.984218 C 110.18494,44.984768 110.20838,44.982578 110.2127,44.982533 C 110.21667,44.9819 110.2415,44.982066 110.24512,44.980848 C 110.2477,44.977904 110.27347,44.951945 110.2757,44.948432 C 110.27725,44.943796 110.27264,44.922895 110.27385,44.917702 C 110.27562,44.906209 110.30213,44.868236 110.30257,44.854557 C 110.27705,43.075732 100.76548,25.644967 98.09595,19.903004 C 98.09295,15.761457 98.09954,15.428616 98.47698,11.65251 C 103.47639,9.6741848 111.66159,6.2601247 111.66159,6.2601247 C 107.98012,2.6952353 101.65891,2.8086948 96.022224,3.8545354 C 87.168617,5.4972474 83.454078,9.1895676 82.637435,16.143859 z"
id="path27254" />
<path
id="rect30766"
d="M 7.3940916,105.13388 C 7.3940916,105.13388 68.999956,47.335047 72.989302,42.623978 C 76.820021,38.100235 80.168501,17.54004 80.168501,17.54004 C 80.168501,17.54004 82.267897,16.117612 81.866782,17.350962 C 81.317191,19.040841 75.973894,39.788229 74.66237,41.80284 C 71.674566,46.392359 54.716167,61.534229 54.716167,61.534229 L 13.281724,100.89827 L 7.3940916,105.13388 z"
style="opacity:0.3853211;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
id="path34274"
d="M 17.910823,120.66107 C 17.910823,120.66107 13.152011,120.73594 10.64529,117.58595 C 8.1385626,114.43595 7.9289766,109.6253 7.9289766,109.6253 L 8.4793546,108.80087 C 8.4793546,108.80087 8.9745086,113.62701 11.232718,116.67617 C 13.534196,119.78373 18.471051,119.9607 18.394111,120.08926 L 17.910823,120.66107 z"
style="opacity:0.89449541;fill:url(#radialGradient34276);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
id="path34280"
d="M 109.06927,30.29602 C 108.9859,30.565387 109.33167,38.632745 109.38181,38.917879 C 109.50191,43.347557 110.55255,43.61543 110.668,44.409441 C 111.5244,44.083627 110.9433,44.489886 111.71376,44.013376 C 111.64006,43.626079 110.55012,40.925552 110.09993,39.957131 C 110.13851,37.753997 110.14567,31.574543 110.15475,30.9883 C 109.73913,30.710191 109.57953,30.599269 109.06927,30.29602 z"
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.57810318;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path34301"
d="M 122.85659,25.194942 L 110.22192,31.148323 L 110.05449,40.121698 L 111.82702,43.953838 C 117.27702,40.539336 121.00104,33.4699 122.85659,25.194942 z"
style="opacity:0.51376145;fill:url(#radialGradient34303);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.14400005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -228.9185,-67.271774 L -228.9185,-70.066483 L -228.9185,-67.271774 z "
id="path2276" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 65.6909,-129.46266 L 65.6909,-132.25737 L 65.6909,-129.46266 z "
id="path2191" />
<path
id="path2860"
d="M -52.477129,-94.134134 C -57.816729,-94.134134 -62.133379,-89.817481 -62.133379,-84.477884 L -62.133379,-76.102884 L -110.38338,-76.102884 C -115.72298,-76.102884 -120.03963,-71.817477 -120.03963,-66.477884 L -120.03963,-25.727876 C -120.03963,-20.388286 -115.72298,-16.102876 -110.38338,-16.102876 L -52.477129,-16.102876 L -14.91463,-16.102876 L -13.85213,-16.102876 C -8.51253,-16.102876 -4.22713,-20.388276 -4.22713,-25.727876 L -4.22713,-84.477884 C -4.22713,-89.817479 -8.51254,-94.134134 -13.85213,-94.134134 L -52.477129,-94.134134 z "
style="opacity:0.06147539;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -91.3174,-199.09776 L -91.3174,-201.89247 L -91.3174,-199.09776 z "
id="path2985" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -210.8196,-285.72801 L -210.8196,-288.52272 L -210.8196,-285.72801 z "
id="path3206" />
<g
transform="translate(-27.868,-141.1464)"
style="display:inline"
id="layer4" />
<g
transform="translate(-27.868,-141.1464)"
style="display:inline"
id="layer5" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 35.7718,-219.97274 L 35.7718,-222.76745 L 35.7718,-219.97274 z "
id="path3946" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -56.852646,-146.07906 L -56.852646,-147.6058 L -56.852646,-146.07906 z "
id="path1561" />
<rect
y="-202.67905"
x="-114.33738"
height="0"
width="1"
id="rect1327"
style="opacity:0.57786889;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.63199997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<rect
y="-230.20667"
x="-149.4642"
height="0"
width="1"
id="rect2482"
style="opacity:0.57786889;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.63199997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -308.40162,-303.42273 L -308.40162,-306.21744 L -308.40162,-303.42273 z "
id="path2494" />
<g
id="g4640"
transform="matrix(-0.782995,0,0,0.650879,-2631.26,383.0949)"
style="opacity:0.40163933" />
<g
style="opacity:0.40163933"
transform="matrix(-0.782995,0,0,0.650879,-2631.26,383.0949)"
id="g4646" />
<g
style="opacity:0.40163933"
transform="matrix(1,0,0,0.650879,569.7028,390.4227)"
id="g4730" />
<g
id="g4748"
transform="matrix(1,0,0,0.650879,569.7028,390.4227)"
style="opacity:0.40163933" />
<path
id="path3752"
d="M 95.627579,2.2773147 C 87.140931,3.7116079 80.786436,9.6596062 80.248005,16.611157 C 80.242915,16.643728 80.23744,16.702033 80.232617,16.73465 C 80.232606,16.734654 76.861627,37.455617 72.867947,43.027351 C 69.733461,47.400388 9.7927726,101.5576 6.9696971,106.19338 C 1.0070949,115.98455 12.1416,129.9508 23.938372,121.87875 C 31.715635,116.55707 78.689216,57.906055 85.031418,53.804656 C 89.318313,51.032375 111.55982,46.2698 111.55982,46.2698 C 111.5649,46.270939 111.59142,46.295166 111.59613,46.29571 C 111.60049,46.295662 111.62426,46.292374 111.62826,46.291739 C 111.63155,46.28994 111.65326,46.260263 111.6562,46.257887 C 111.65811,46.253807 111.68257,46.228674 111.68414,46.224035 C 111.68537,46.21884 111.67907,46.199902 111.67996,46.194154 C 111.68163,46.175266 111.66868,46.128268 111.6674,46.104512 C 111.4879,44.084636 102.11082,26.891435 99.45367,21.19833 C 99.4537,17.056409 99.45161,16.720564 99.83383,12.943866 C 104.86112,10.962095 114.09287,7.4119748 114.09287,7.4119748 C 110.39461,3.8491621 104.68344,1.7267196 98.40714,2.0553298 C 98.36602,2.0574815 98.31549,2.0389751 98.27445,2.0413341 C 98.04577,2.0544679 97.214252,2.1129767 97.141677,2.1205569 C 97.078678,2.1271365 96.978566,2.1135806 96.912612,2.118473 C 96.850322,2.1255554 96.753569,2.1412065 96.687731,2.1462708 C 96.335905,2.1895055 95.972568,2.2190095 95.627579,2.2773147 z M 96.983605,3.3256196 C 102.58837,2.3636468 109.92846,3.5440201 113.5524,7.0532086 C 113.5524,7.0532086 104.38916,10.594859 99.38974,12.573186 C 99.01231,16.349293 99.00658,16.686103 99.00958,20.82765 C 101.65825,26.524755 111.0198,43.731881 111.19119,45.737803 C 111.19158,45.745228 111.19528,45.760735 111.19537,45.767683 C 111.19022,45.779011 111.1771,45.820636 111.17162,45.831416 C 111.17186,45.834178 111.1754,45.858071 111.1758,45.861298 C 111.16876,45.868594 111.14915,45.893678 111.14786,45.895149 C 111.1407,45.89534 111.11772,45.898804 111.11573,45.89912 C 111.11224,45.899363 111.08653,45.902962 111.08361,45.903092 C 111.08361,45.903092 103.97452,47.120611 98.03052,48.610889 L 96.152029,45.33341 L 99.92966,43.238192 L 94.063095,31.014461 L 89.090472,32.145885 L 81.810827,17.269124 C 82.627461,10.314834 87.877194,5.0299786 96.730783,3.3872687 C 96.818854,3.3709274 96.894643,3.3408888 96.983605,3.3256196 z M 15.895147,104.81653 C 16.26487,104.74745 16.65916,104.72423 17.055864,104.70345 C 20.708308,104.51223 24.250259,108.03667 24.419373,112.24391 C 24.559281,115.72457 21.055941,119.36428 17.403484,119.55552 C 13.751044,119.74676 10.040662,116.07204 9.8122556,112.25599 C 9.6116536,108.90412 11.962719,105.55124 15.895147,104.81653 z"
style="opacity:1;fill:url(#radialGradient3758);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path30758"
d="M 16.232154,102.01072 C 21.775145,100.70575 28.08237,106.92142 26.866658,112.78154 C 31.015247,109.34654 78.755592,56.103242 79.745567,53.541147 C 81.261533,49.617765 77.167485,46.072731 73.273471,47.743777 C 70.557413,48.909322 15.871363,102.09566 16.232154,102.01072 z"
style="fill:#888a85;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path7295"
d="M 16.232154,102.01072 C 21.775145,100.70575 28.08237,106.92142 26.866658,112.78154 C 31.015247,109.34654 78.755592,56.103242 79.745567,53.541147 C 81.261533,49.617765 77.167485,46.072731 73.273471,47.743777 C 70.557413,48.909322 15.871363,102.09566 16.232154,102.01072 z"
style="opacity:0.8;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path4003"
d="M 16.232154,102.01072 C 21.775145,100.70575 28.08237,106.92142 26.866658,112.78154 C 31.015247,109.34654 78.755592,56.103242 79.745567,53.541147 C 81.261533,49.617765 77.167485,46.072731 73.273471,47.743777 C 70.557413,48.909322 15.871363,102.09566 16.232154,102.01072 z"
style="opacity:0.27722772;fill:url(#radialGradient4005);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="opacity:0.5;fill:url(#radialGradient8652);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 16.232154,102.01072 C 21.775145,100.70575 28.08237,106.92142 26.866658,112.78154 C 31.015247,109.34654 78.755592,56.103242 79.745567,53.541147 C 81.261533,49.617765 77.167485,46.072731 73.273471,47.743777 C 70.557413,48.909322 15.871363,102.09566 16.232154,102.01072 z"
id="path1773" />
<path
id="path2271"
d="M 73.187648,47.861864 C 73.491805,47.674482 76.063389,46.391829 78.437823,48.481458 C 80.464665,50.26519 80.191453,52.111169 79.626736,53.772773 C 79.35402,54.575203 57.436591,79.427426 53.502075,83.949271 C 51.567371,86.17278 44.946822,93.409301 38.872306,100.09385 C 32.743701,106.83792 26.988342,112.68787 26.988342,112.68787 C 26.988342,112.68787 78.917665,54.799922 79.231327,53.220658 C 79.691138,50.905549 78.742881,50.168695 77.961335,49.429157 C 77.164816,48.675454 75.763312,47.833113 73.855752,48.220252 C 71.225202,48.754119 17.354037,101.5522 16.334657,101.93961 C 16.334657,101.93961 29.27099,89.130531 42.923257,75.956695 C 56.575524,62.78286 70.943728,49.244268 73.187648,47.861864 z"
style="opacity:0.40366971;fill:#2e3436;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
style="fill:url(#radialGradient8648);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
d="M 16.748453,101.47356 C 16.748453,101.47356 21.04421,100.44245 24.714842,103.88237 C 28.729161,107.64437 27.508091,112.12407 27.508091,112.12407 L 26.862528,112.89493 C 26.862528,112.89493 27.215577,111.18054 26.798234,109.49869 C 26.380892,107.81683 25.494254,106.08882 23.98318,104.69772 C 22.494113,103.32688 21.082584,102.44431 19.548953,102.11602 C 18.015322,101.78774 16.271942,102.02457 16.3069,101.95858 L 16.748453,101.47356 z"
id="path2660" />
<path
id="path6192"
d="M 16.748453,101.47356 C 16.748453,101.47356 21.04421,100.44245 24.714842,103.88237 C 28.729161,107.64437 27.508091,112.12407 27.508091,112.12407 L 26.862528,112.89493 C 26.862528,112.89493 27.215577,111.18054 26.798234,109.49869 C 26.380892,107.81683 25.494254,106.08882 23.98318,104.69772 C 22.494113,103.32688 21.082584,102.44431 19.548953,102.11602 C 18.015322,101.78774 16.271942,102.02457 16.3069,101.95858 L 16.748453,101.47356 z"
style="fill:url(#radialGradient8645);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
id="path3939"
d="M 104.608,3.1939149 C 92.616145,2.2045921 83.866393,6.3602734 82.450397,15.463498 C 84.09662,8.5060072 91.399094,2.8573689 104.608,3.1939149 z"
style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;filter:url(#filter3989)" />
<path
style="fill:#ffffff;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;filter:url(#filter3995);opacity:0.77722772"
d="M 104.608,3.1939149 C 92.465413,1.4810786 82.871562,5.8477846 82.450397,15.463498 C 84.759841,8.6265928 91.399094,3.1286865 104.608,3.1939149 z"
id="path3993" />
<path
d="M 99.8125,3.15625 C 95.030559,3.1270396 90.873659,4.1277516 87.875,6.15625 C 85.320259,7.8844517 83.588312,10.335174 82.96875,13.46875 C 85.459504,8.2885294 90.739238,4.1767978 99.8125,3.15625 z"
id="path4001"
style="opacity:0.77722772;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3995)" />
<path
id="path3741"
d="M 75.434671,47.3125 C 74.728777,47.290955 74.008549,47.436679 73.278421,47.75 C 70.562363,48.915544 15.88638,102.08494 16.247171,102 C 16.624176,101.91124 16.990703,101.8654 17.372171,101.84375 C 23.203624,95.959625 70.735686,49.841166 73.278421,48.75 C 76.395443,47.412386 79.634993,49.415759 80.028421,52.28125 C 80.285898,49.617689 78.084616,47.393381 75.434671,47.3125 z M 26.997171,111.6875 C 26.977939,112.05461 26.948153,112.41499 26.872171,112.78125 C 26.89551,112.76193 26.971089,112.70996 26.997171,112.6875 C 26.99772,112.67701 26.996666,112.66674 26.997171,112.65625 C 27.012822,112.33112 27.022956,112.01037 26.997171,111.6875 z"
style="opacity:0.50000000000000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.44400001000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

View File

@@ -0,0 +1,238 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2"
height="128"
width="128">
<defs
id="defs4">
<linearGradient
id="linearGradient4296">
<stop
style="stop-color:#ff0000;stop-opacity:1;"
offset="0"
id="stop4298" />
<stop
style="stop-color:#650000;stop-opacity:1;"
offset="1"
id="stop4300" />
</linearGradient>
<linearGradient
id="linearGradient6740">
<stop
id="stop6742"
offset="0"
style="stop-color:#4d0000;stop-opacity:0;" />
<stop
style="stop-color:#4d0000;stop-opacity:1;"
offset="0.5"
id="stop6748" />
<stop
id="stop6744"
offset="1"
style="stop-color:#4d0000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5958"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-12.0029"
y2="-383.9971"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
<stop
offset="0"
style="stop-color:#8c0000;stop-opacity:1;"
id="stop5960" />
<stop
offset="1"
style="stop-color:#bf0000;stop-opacity:1;"
id="stop5962" />
</linearGradient>
<linearGradient
id="linearGradient4770"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-12.0029"
y2="-383.9971"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
<stop
offset="0"
style="stop-color:#ffbe00;stop-opacity:1"
id="stop4772" />
<stop
offset="1"
style="stop-color:#f5d600;stop-opacity:0;"
id="stop4774" />
</linearGradient>
<linearGradient
id="linearGradient3711"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-23.516129"
y2="-383.9975"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
<stop
offset="0"
style="stop-color:white;stop-opacity:1;"
id="stop3713" />
<stop
offset="1"
style="stop-color:white;stop-opacity:0;"
id="stop3715" />
</linearGradient>
<clipPath
id="clipPath5163"
clipPathUnits="userSpaceOnUse">
<circle
id="circle5165"
ry="8.0010004"
cy="92"
cx="343.99899"
rx="8.0010004"
r="36"
style="fill:url(#linearGradient5167);fill-opacity:1" />
</clipPath>
<filter
id="filter5943">
<feGaussianBlur
id="feGaussianBlur5945"
stdDeviation="1.04" />
</filter>
<filter
id="filter7317">
<feGaussianBlur
id="feGaussianBlur7319"
stdDeviation="2.8805897" />
</filter>
<linearGradient
y2="-131.93112"
x2="-45.096584"
y1="-131.93112"
x1="-80.00296"
gradientTransform="matrix(0,1.3460321,-1.3460321,0,-112.6741,119.24399)"
gradientUnits="userSpaceOnUse"
id="linearGradient3003"
xlink:href="#linearGradient3711" />
<linearGradient
y2="76.633896"
x2="90.537666"
y1="103.01254"
x1="117.81589"
gradientTransform="translate(20.000035,-56.000003)"
gradientUnits="userSpaceOnUse"
id="linearGradient3008"
xlink:href="#linearGradient6740" />
<linearGradient
y2="87.759453"
x2="336.98077"
y1="120.81158"
x1="328.12448"
gradientUnits="userSpaceOnUse"
id="linearGradient3010"
xlink:href="#linearGradient4296" />
<radialGradient
gradientTransform="matrix(0.6662862,-0.6560105,0.9893764,1.0048737,31.05592,226.43791)"
r="36"
fy="85.250488"
fx="345.80753"
cy="85.250488"
cx="345.80753"
gradientUnits="userSpaceOnUse"
id="radialGradient3012"
xlink:href="#linearGradient4770" />
<linearGradient
y2="-373.1243"
x2="-56.357521"
y1="-381.09921"
x1="-86.120354"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
gradientUnits="userSpaceOnUse"
id="linearGradient3014"
xlink:href="#linearGradient5958" />
<filter
id="filter3138">
<feGaussianBlur
id="feGaussianBlur3140"
stdDeviation="5.6513927" />
</filter>
<filter
id="filter3162">
<feGaussianBlur
id="feGaussianBlur3164"
stdDeviation="0.96794009" />
</filter>
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
transform="matrix(0.5662048,0,0,0.5662048,55.73989,54.555422)"
d="M 115.5,20 A 100,100 0 1 1 -84.5,20 A 100,100 0 1 1 115.5,20 z"
id="path2396"
style="opacity:0.50271737999999999;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.13749998999999999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4.15000000000000036;stroke-opacity:1;filter:url(#filter3138)" />
<circle
transform="matrix(-1.5639433,0.4190574,-0.4190574,-1.5639433,641.54821,62.027543)"
id="circle3581_2_"
ry="8.0010004"
cy="92"
cx="343.99899"
rx="8.0010004"
r="36"
style="fill:url(#linearGradient3014);fill-opacity:1" />
<circle
style="fill:url(#radialGradient3012);fill-opacity:1;filter:url(#filter3162)"
r="36"
rx="8.0010004"
cx="343.99899"
cy="92"
ry="8.0010004"
id="circle4383"
transform="matrix(-1.1729576,0.3142929,-0.3142929,-1.1729576,497.41122,62.095683)" />
<circle
style="opacity:0.8;fill:none;fill-opacity:1;stroke:url(#linearGradient3010);stroke-width:6.75138187;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7317)"
r="36"
rx="8.0010004"
cx="343.99899"
cy="92"
ry="8.0010004"
id="circle4776"
transform="matrix(-1.5639433,-0.4190574,-0.4190574,1.5639433,641.54821,62.572542)"
clip-path="url(#clipPath5163)" />
<path
id="circle16776"
d="M 65.000079,11.557516 C 44.329599,11.557516 27.057531,26.153664 22.894511,45.586895 C 31.192535,53.322386 46.937604,58.542449 65.000079,58.542449 C 83.062575,58.542449 98.807623,53.322386 107.10564,45.586895 C 102.94264,26.153664 85.670553,11.557516 65.000079,11.557516 z"
style="opacity:0.8;fill:url(#linearGradient3003);fill-opacity:1" />
<g
transform="matrix(1.2882604,1.2882604,-1.2882604,1.2882604,-45.790405,-141.24514)"
id="g6850">
<path
id="path4123"
d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3008);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5943)" />
<path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
id="rect3232" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

View File

@@ -0,0 +1,474 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2"
height="128"
width="128">
<defs
id="defs4">
<linearGradient
id="linearGradient5252">
<stop
id="stop5254"
offset="0"
style="stop-color:#ff0000;stop-opacity:1;" />
<stop
id="stop5256"
offset="1"
style="stop-color:#ff0000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5225">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop5227" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop5229" />
</linearGradient>
<linearGradient
id="linearGradient5215">
<stop
style="stop-color:#e16e00;stop-opacity:1;"
offset="0"
id="stop5217" />
<stop
style="stop-color:#803f00;stop-opacity:0"
offset="1"
id="stop5219" />
</linearGradient>
<linearGradient
id="linearGradient5187">
<stop
id="stop5189"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
id="stop5191"
offset="1"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient5132">
<stop
id="stop5134"
offset="0"
style="stop-color:#ff7e00;stop-opacity:1" />
<stop
id="stop5136"
offset="1"
style="stop-color:#ff7e00;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient5116">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop5118" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop5120" />
</linearGradient>
<linearGradient
id="linearGradient5097">
<stop
id="stop5099"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
id="stop5101"
offset="1"
style="stop-color:#ffbebe;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient5080">
<stop
id="stop5082"
offset="0"
style="stop-color:#ffb5b5;stop-opacity:1" />
<stop
id="stop5084"
offset="1"
style="stop-color:#ffbfbf;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient5031">
<stop
id="stop5033"
offset="0"
style="stop-color:#ffffff;stop-opacity:1" />
<stop
id="stop5035"
offset="1"
style="stop-color:#ffffff;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient5015">
<stop
id="stop5017"
offset="0"
style="stop-color:#ff1212;stop-opacity:1" />
<stop
id="stop5019"
offset="1"
style="stop-color:#750000;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient4997">
<stop
style="stop-color:#8c0000;stop-opacity:1"
offset="0"
id="stop4999" />
<stop
style="stop-color:#470000;stop-opacity:1"
offset="1"
id="stop5001" />
</linearGradient>
<linearGradient
gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
spreadMethod="pad"
gradientUnits="userSpaceOnUse"
y2="105.08932"
x2="61.211941"
y1="15.015407"
x1="61.211941"
id="linearGradient3146"
xlink:href="#linearGradient4997" />
<radialGradient
gradientTransform="matrix(2.0783306,-9.927972e-8,6.9726035e-8,1.4596512,-69.013166,-26.914)"
gradientUnits="userSpaceOnUse"
r="39.999996"
fy="77.237541"
fx="64"
cy="73.475296"
cx="64.000008"
id="radialGradient5023"
xlink:href="#linearGradient5015" />
<linearGradient
gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
gradientUnits="userSpaceOnUse"
y2="89.444931"
x2="77.450546"
y1="17.868132"
x1="77.450546"
id="linearGradient5086"
xlink:href="#linearGradient5080" />
<linearGradient
gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
gradientUnits="userSpaceOnUse"
y2="38.609497"
x2="101.99058"
y1="76.386581"
x1="113.41915"
id="linearGradient5103"
xlink:href="#linearGradient5097" />
<linearGradient
gradientTransform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
y2="67.763039"
x2="77.450546"
y1="17.868132"
x1="77.450546"
gradientUnits="userSpaceOnUse"
id="linearGradient5114"
xlink:href="#linearGradient5116" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="35.43399"
x2="82.550011"
y1="108.25001"
x1="82.550011"
id="linearGradient5138"
xlink:href="#linearGradient5132" />
<radialGradient
gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
gradientUnits="userSpaceOnUse"
r="5.96875"
fy="26.03125"
fx="26.03125"
cy="26.03125"
cx="26.03125"
id="radialGradient5193"
xlink:href="#linearGradient5187" />
<filter
id="filter5199"
height="1.24"
y="-0.12"
width="1.24"
x="-0.12">
<feGaussianBlur
id="feGaussianBlur5201"
stdDeviation="0.596875" />
</filter>
<radialGradient
r="5.96875"
fy="26.03125"
fx="26.03125"
cy="26.03125"
cx="26.03125"
gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
gradientUnits="userSpaceOnUse"
id="radialGradient5205"
xlink:href="#linearGradient5215" />
<radialGradient
r="5.96875"
fy="26.03125"
fx="26.03125"
cy="26.03125"
cx="26.03125"
gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
gradientUnits="userSpaceOnUse"
id="radialGradient5209"
xlink:href="#linearGradient5215" />
<radialGradient
r="5.96875"
fy="26.03125"
fx="26.03125"
cy="26.03125"
cx="26.03125"
gradientTransform="matrix(4.0188417,4.0188417,-0.7071068,0.7071068,-60.177349,-96.991095)"
gradientUnits="userSpaceOnUse"
id="radialGradient5213"
xlink:href="#linearGradient5187" />
<radialGradient
gradientTransform="matrix(1.1954201,0,0,0.2784785,-12.506884,12.187875)"
gradientUnits="userSpaceOnUse"
r="43.999996"
fy="26.931658"
fx="64.000008"
cy="26.931658"
cx="64.000008"
id="radialGradient5223"
xlink:href="#linearGradient5225" />
<radialGradient
gradientTransform="matrix(3.3075569,0,0,0.427102,-147.68366,4.135353)"
gradientUnits="userSpaceOnUse"
r="43.999996"
fy="21.660604"
fx="64.000008"
cy="21.660604"
cx="64.000008"
id="radialGradient5231"
xlink:href="#linearGradient5031" />
<radialGradient
gradientUnits="userSpaceOnUse"
r="37.816799"
fy="82.000008"
fx="64.000008"
cy="82.000008"
cx="64.000008"
id="radialGradient5258"
xlink:href="#linearGradient5252" />
<filter
id="filter5312"
height="1.2692683"
y="-0.13463415"
width="1.2692683"
x="-0.13463415">
<feGaussianBlur
id="feGaussianBlur5314"
stdDeviation="4.2428604" />
</filter>
<filter
id="filter5316">
<feGaussianBlur
id="feGaussianBlur5318"
stdDeviation="0.40209128" />
</filter>
<filter
id="filter5366">
<feGaussianBlur
id="feGaussianBlur5368"
stdDeviation="0.52066799" />
</filter>
<filter
id="filter3576">
<feGaussianBlur
stdDeviation="0.576875"
id="feGaussianBlur3578" />
</filter>
<filter
id="filter3550">
<feGaussianBlur
stdDeviation="1.23375"
id="feGaussianBlur3552" />
</filter>
<linearGradient
id="linearGradient3530">
<stop
style="stop-color:#590000;stop-opacity:1;"
offset="0"
id="stop3532" />
<stop
style="stop-color:#590000;stop-opacity:0;"
offset="1"
id="stop3534" />
</linearGradient>
<linearGradient
id="linearGradient3554">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3556" />
<stop
style="stop-color:#dfdfdf;stop-opacity:1"
offset="1"
id="stop3558" />
</linearGradient>
<linearGradient
gradientTransform="translate(0.5625,0.25)"
y2="103.40701"
x2="68.9375"
y1="38.90625"
x1="68.9375"
gradientUnits="userSpaceOnUse"
id="linearGradient5530"
xlink:href="#linearGradient3554" />
<radialGradient
r="29.84375"
fy="77.980095"
fx="62.78125"
cy="66.175667"
cx="62.78125"
gradientTransform="matrix(1.3513697,0,0,1.3513697,-21.49693,-22.68578)"
gradientUnits="userSpaceOnUse"
id="radialGradient5539"
xlink:href="#linearGradient3530" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<rect
ry="6.0052505"
rx="6.0052505"
y="16.183208"
x="16.183208"
height="95.633598"
width="95.633598"
id="rect5320"
style="opacity:0.75;fill:#9c0f0f;fill-opacity:1;stroke:#9c0f0f;stroke-width:8.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5366)" />
<rect
ry="6.0052505"
rx="6.0052505"
y="16.183208"
x="16.183208"
height="95.633598"
width="95.633598"
id="rect5221"
style="opacity:1;fill:none;fill-opacity:1;stroke:url(#radialGradient5223);stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
ry="6.0052505"
rx="6.0052505"
y="16.183208"
x="16.183208"
height="95.633598"
width="95.633598"
id="rect2160"
style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient3146);stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
style="opacity:0.72682927;fill:none;fill-opacity:1;stroke:url(#radialGradient5231);stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect5029"
width="95.633598"
height="95.633598"
x="16.183208"
y="16.183208"
rx="6.0052505"
ry="6.0052505" />
<path
transform="matrix(-1.0246293e-7,1.1954199,-1.1954199,-1.0246293e-7,140.50776,-12.509486)"
style="opacity:0.6;fill:url(#radialGradient5213);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)"
d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
id="path5211" />
<path
id="path5207"
d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
style="opacity:0.51707315;fill:url(#radialGradient5209);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)"
transform="matrix(-1.1954199,-1.0246293e-7,1.0246293e-7,-1.1954199,140.51037,140.50515)" />
<path
transform="matrix(1.0246293e-7,-1.1954199,1.1954199,1.0246293e-7,-12.504272,140.50777)"
style="opacity:0.51707315;fill:url(#radialGradient5205);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)"
d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
id="path5203" />
<path
transform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
id="path5176"
d="M 28.03125,20.0625 C 23.891924,20.536087 20.536087,23.891924 20.0625,28.03125 L 32,32 L 28.03125,20.0625 z "
style="opacity:0.75;fill:url(#radialGradient5193);fill-opacity:1;stroke:none;stroke-width:8;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5199)" />
<rect
style="opacity:1;fill:url(#radialGradient5023);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2164"
width="95.633598"
height="95.633598"
x="16.183207"
y="16.183207"
rx="6.2454605"
ry="6.2454605" />
<rect
transform="matrix(1.1322164,0,0,1.0793299,-8.4618486,-3.0771092)"
ry="25.501919"
rx="25.501919"
y="26.183207"
x="26.183207"
height="75.633598"
width="75.633598"
id="rect5248"
style="opacity:1;fill:url(#radialGradient5258);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5312)" />
<path
id="rect5073"
d="M 22.421796,16.183197 C 18.96181,16.183197 16.183197,18.961809 16.183197,22.421796 L 16.183197,64.522996 C 28.725605,67.255005 42.447721,68.781679 56.827479,68.781679 C 76.921976,68.781679 95.717949,65.830284 111.8168,60.712594 L 111.8168,22.421796 C 111.8168,18.96181 109.03818,16.183197 105.5782,16.183197 L 22.421796,16.183197 z "
style="opacity:1;fill:url(#linearGradient5086);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5088"
d="M 110.88288,19.171747 C 111.06703,19.767205 111.14438,20.418868 111.14438,21.076948 L 111.14438,59.9281 C 94.81393,65.119411 75.754132,68.109254 55.370561,68.109256 C 41.547513,68.109256 28.357379,66.690869 16.183197,64.186784 L 16.183197,64.522996 C 28.725605,67.255005 42.447721,68.781679 56.827479,68.781679 C 76.921976,68.781679 95.717949,65.830284 111.8168,60.712594 L 111.8168,22.421796 C 111.8168,21.22492 111.46104,20.118746 110.88288,19.171747 z "
style="opacity:1;fill:url(#linearGradient5103);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path5105"
d="M 22.421796,16.183197 C 18.96181,16.183197 16.183197,18.961809 16.183197,22.421796 L 16.183197,64.522996 C 16.664686,64.627875 17.155179,64.720542 17.640115,64.821851 L 17.640115,24.028141 C 17.640115,20.599758 20.336233,17.864257 23.691929,17.864257 L 104.30807,17.864257 C 107.66376,17.864257 110.35988,20.599758 110.35988,24.028141 L 110.35988,61.160877 C 110.84354,61.012486 111.33788,60.86484 111.8168,60.712594 L 111.8168,22.421796 C 111.8168,18.96181 109.03818,16.183197 105.5782,16.183197 L 22.421796,16.183197 z "
style="opacity:1;fill:url(#linearGradient5114);fill-opacity:1;stroke:none;stroke-width:0.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<rect
transform="matrix(1.1954201,0,0,1.1954201,-12.506884,-12.506884)"
ry="5.2244902"
rx="5.2244902"
y="24.000008"
x="24.000008"
height="79.999992"
width="79.999992"
id="rect5122"
style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient5138);stroke-width:0.41826302;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5316)" />
<path
style="fill:none;fill-opacity:1;stroke:url(#radialGradient5539);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3550)"
d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 34.5,81.6875 L 46.3125,93.5 L 63.34375,76.4375 L 80.40625,93.5 L 92.1875,81.6875 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
id="path3528" />
<path
id="rect3376"
d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 34.5,81.6875 L 46.3125,93.5 L 63.34375,76.4375 L 80.40625,93.5 L 92.1875,81.6875 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
style="fill:url(#linearGradient5530);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 34.5,81.6875 L 46.3125,93.5 L 63.34375,76.4375 L 80.40625,93.5 L 92.1875,81.6875 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
id="path3381" />
<path
id="path3566"
d="M 46.3125,35.8125 L 34.5,47.59375 L 51.5625,64.65625 L 48.59375,67.625 C 53.63521,68.40189 58.99498,68.8125 64.5625,68.8125 C 69.35411,68.8125 73.99127,68.48802 78.40625,67.90625 L 75.15625,64.65625 L 92.1875,47.59375 L 80.40625,35.8125 L 63.34375,52.84375 L 46.3125,35.8125 z "
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3576)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -0,0 +1,390 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
enable-background="new"
version="1.0"
id="svg2"
height="128"
width="128">
<defs
id="defs4">
<linearGradient
id="linearGradient2996">
<stop
style="stop-color:#a8dde0;stop-opacity:1"
offset="0"
id="stop2998" />
<stop
style="stop-color:#a8dde0;stop-opacity:0.20571429"
offset="1"
id="stop3001" />
</linearGradient>
<linearGradient
id="linearGradient3436">
<stop
id="stop3438"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3440"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3415">
<stop
id="stop3417"
offset="0"
style="stop-color:#00c4cc;stop-opacity:1" />
<stop
id="stop3419"
offset="1"
style="stop-color:#00c4cc;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient2998">
<stop
id="stop3000"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3002"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2981">
<stop
id="stop2983"
offset="0"
style="stop-color:#001400;stop-opacity:1;" />
<stop
id="stop2985"
offset="1"
style="stop-color:#001400;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2971">
<stop
id="stop2973"
offset="0"
style="stop-color:#c2e2f4;stop-opacity:1" />
<stop
id="stop2975"
offset="1"
style="stop-color:#c0e0f2;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient2956">
<stop
id="stop2958"
offset="0"
style="stop-color:#0c1f39;stop-opacity:1" />
<stop
id="stop2960"
offset="1"
style="stop-color:#204d90;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient2948">
<stop
id="stop2950"
offset="0"
style="stop-color:#9abcee;stop-opacity:1" />
<stop
id="stop2952"
offset="1"
style="stop-color:#092042;stop-opacity:1" />
</linearGradient>
<foreignObject
id="foreignObject7"
height="1"
width="1"
y="0"
x="0"
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
<i:pgfRef
xlink:href="#adobe_illustrator_pgf" />
</foreignObject>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.8464424,0,0,0.6348316,8.4693722,28.372944)"
r="48.000004"
fy="108.21593"
fx="54.537575"
cy="85.87426"
cx="54.537575"
id="radialGradient2954"
xlink:href="#linearGradient2948" />
<linearGradient
gradientTransform="translate(0,4)"
gradientUnits="userSpaceOnUse"
y2="30.849478"
x2="89.090881"
y1="103.89701"
x1="89.090881"
id="linearGradient2962"
xlink:href="#linearGradient2956" />
<linearGradient
gradientTransform="translate(-2.3931686e-5,4)"
gradientUnits="userSpaceOnUse"
y2="89.99453"
x2="83.324677"
y1="24.0625"
x1="83.324677"
id="linearGradient2977"
xlink:href="#linearGradient2971" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.0122143,7.8518053e-2,-7.0968649e-2,0.9148913,7.5716186,-3.7388379)"
r="52.000004"
fy="87.08094"
fx="53.15992"
cy="95.459297"
cx="52.791927"
id="radialGradient2987"
xlink:href="#linearGradient2981" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-96.241137,-146.14811)"
r="3.015625"
fy="29.374895"
fx="99.765625"
cy="29.374895"
cx="99.765625"
id="radialGradient3004"
xlink:href="#linearGradient2998" />
<radialGradient
r="3.015625"
fy="29.374895"
fx="99.765625"
cy="29.374895"
cx="99.765625"
gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-96.241137,-146.14811)"
gradientUnits="userSpaceOnUse"
id="radialGradient3256"
xlink:href="#linearGradient2998" />
<radialGradient
r="3.015625"
fy="29.374895"
fx="99.765625"
cy="29.374895"
cx="99.765625"
gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-167.24116,-126.14811)"
gradientUnits="userSpaceOnUse"
id="radialGradient3288"
xlink:href="#linearGradient2998" />
<radialGradient
r="3.015625"
fy="29.374895"
fx="99.765625"
cy="29.374895"
cx="99.765625"
gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-96.241137,-146.14811)"
gradientUnits="userSpaceOnUse"
id="radialGradient3292"
xlink:href="#linearGradient2998" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="47.378731"
x2="71.603867"
y1="96.884026"
x1="71.603867"
id="linearGradient3421"
xlink:href="#linearGradient2996" />
<filter
id="filter3423">
<feGaussianBlur
id="feGaussianBlur3425"
stdDeviation="0.425" />
</filter>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="46.277084"
x2="77.137749"
y1="74.838577"
x1="87.533279"
id="linearGradient3442"
xlink:href="#linearGradient3436" />
<linearGradient
y2="69.837845"
x2="83.324677"
y1="24.0625"
x1="83.324677"
gradientTransform="translate(0,4)"
gradientUnits="userSpaceOnUse"
id="linearGradient3453"
xlink:href="#linearGradient3436" />
<radialGradient
r="3.015625"
fy="29.374895"
fx="99.765625"
cy="29.374895"
cx="99.765625"
gradientTransform="matrix(1.9646726,3.4242959e-7,-1.0414508e-6,5.9752716,-167.24116,-126.14811)"
gradientUnits="userSpaceOnUse"
id="radialGradient3457"
xlink:href="#linearGradient3415" />
<filter
id="filter3505">
<feGaussianBlur
id="feGaussianBlur3507"
stdDeviation="0.4605" />
</filter>
<radialGradient
r="52.000004"
fy="51.919601"
fx="53.633381"
cy="51.919601"
cx="53.633381"
gradientTransform="matrix(1.0961401,8.7912098e-2,-0.1002304,1.2497316,1.0599334,-18.687387)"
gradientUnits="userSpaceOnUse"
id="radialGradient3511"
xlink:href="#linearGradient2998" />
<filter
id="filter3521">
<feBlend
id="feBlend3523"
in2="BackgroundImage"
mode="lighten" />
</filter>
<filter
height="1.2057828"
y="-0.10289138"
width="1.3646584"
x="-0.18232919"
id="filter3525">
<feGaussianBlur
id="feGaussianBlur3527"
stdDeviation="0.45819706" />
</filter>
<filter
height="1.2057828"
y="-0.10289138"
width="1.3646584"
x="-0.18232919"
id="filter3529">
<feGaussianBlur
id="feGaussianBlur3531"
stdDeviation="0.45819706" />
</filter>
<filter
height="1.3702595"
y="-0.18512974"
width="1.2076595"
x="-0.10382974"
id="filter3533">
<feGaussianBlur
id="feGaussianBlur3535"
stdDeviation="0.45819702" />
</filter>
<filter
height="1.2057828"
y="-0.10289138"
width="1.3646584"
x="-0.18232919"
id="filter3537">
<feGaussianBlur
id="feGaussianBlur3539"
stdDeviation="0.45819706" />
</filter>
<filter
height="1.3702595"
y="-0.18512974"
width="1.2076595"
x="-0.10382974"
id="filter3541">
<feGaussianBlur
id="feGaussianBlur3543"
stdDeviation="0.45819702" />
</filter>
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<g
transform="translate(2.3931686e-5,0)"
id="g2358"
style="overflow:visible">
<path
d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z"
id="path3503"
style="fill:none;stroke:#081c39;stroke-width:8.09999999999999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3505)" />
<path
style="fill:none;stroke:url(#linearGradient2962);stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path2365"
d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z" />
<path
style="fill:none;stroke:url(#radialGradient3511);stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.28571428999999998;filter:url(#filter3521)"
id="path3509"
d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z" />
<path
transform="matrix(1,0,0,-1,26,147.74979)"
id="path3455"
d="M 28.406226,44.03125 C 28.256338,44.028846 28.119644,44.047827 27.968726,44.0625 C 27.141534,44.144551 26.373396,44.489582 25.749976,45.03125 L 27.437476,54.71875 C 27.548391,54.605074 28.287843,53.870571 28.374976,53.78125 L 28.749976,54.15625 L 31.781226,45.8125 L 31.218726,45.25 C 30.477376,44.490406 29.455436,44.048081 28.406226,44.03125 z"
style="opacity:0.40952380999999999;fill:url(#radialGradient3457);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3525)" />
<path
id="path3290"
transform="matrix(-0.3420202,0.9396927,0.9396927,0.3420202,24.20981,-42.203299)"
d="M 99.40625,24.03125 C 99.256362,24.028846 99.119668,24.047827 98.96875,24.0625 C 98.141558,24.144551 97.37342,24.489582 96.75,25.03125 L 98.4375,34.71875 C 98.548415,34.605074 99.287867,33.870571 99.375,33.78125 L 99.75,34.15625 L 102.78125,25.8125 L 102.21875,25.25 C 101.4774,24.490406 100.45546,24.048081 99.40625,24.03125 z"
style="opacity:0.23809524000000001;fill:url(#radialGradient3292);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3533)" />
<path
style="opacity:0.77619048000000002;fill:url(#radialGradient3288);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3529)"
d="M 28.406226,44.03125 C 28.256338,44.028846 28.119644,44.047827 27.968726,44.0625 C 27.141534,44.144551 26.373396,44.489582 25.749976,45.03125 L 27.437476,54.71875 C 27.548391,54.605074 28.287843,53.870571 28.374976,53.78125 L 28.749976,54.15625 L 31.781226,45.8125 L 31.218726,45.25 C 30.477376,44.490406 29.455436,44.048081 28.406226,44.03125 z"
id="path3286" />
<path
style="opacity:0.37142857000000001;fill:url(#radialGradient3256);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3541)"
d="M 99.40625,24.03125 C 99.256362,24.028846 99.119668,24.047827 98.96875,24.0625 C 98.141558,24.144551 97.37342,24.489582 96.75,25.03125 L 98.4375,34.71875 C 98.548415,34.605074 99.287867,33.870571 99.375,33.78125 L 99.75,34.15625 L 102.78125,25.8125 L 102.21875,25.25 C 101.4774,24.490406 100.45546,24.048081 99.40625,24.03125 z"
transform="matrix(0.3420202,0.9396927,-0.9396927,0.3420202,104.53338,-62.203299)"
id="path3254" />
<path
id="path2989"
transform="translate(-2.3931686e-5,0)"
d="M 99.40625 24.03125 C 99.256362 24.028846 99.119668 24.047827 98.96875 24.0625 C 98.141558 24.144551 97.37342 24.489582 96.75 25.03125 L 98.4375 34.71875 C 98.548415 34.605074 99.287867 33.870571 99.375 33.78125 L 99.75 34.15625 L 102.78125 25.8125 L 102.21875 25.25 C 101.4774 24.490406 100.45546 24.048081 99.40625 24.03125 z "
style="fill:url(#radialGradient3004);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3537);opacity:0.87142856999999985" />
<path
d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z"
id="path2979"
style="fill:none;stroke:url(#radialGradient2987);stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:1" />
<path
d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z"
id="path24"
style="fill:url(#radialGradient2954);fill-opacity:1" />
<path
id="path2964"
d="M 99.374976,28.0625 C 99.374973,28.0625 64.117655,64.202251 54.406226,74.15625 C 46.258227,65.805965 28.624976,47.75 28.624976,47.75 L 15.999976,60.6875 L 32.468726,77.5625 C 32.657637,77.562987 32.842103,77.5625 33.031226,77.5625 C 50.561025,77.5625 67.167517,75.469361 82.062476,71.71875 L 111.99998,41 L 99.374976,28.0625 z"
style="fill:url(#linearGradient2977);fill-opacity:1" />
<path
style="fill:none;fill-opacity:1;stroke:url(#linearGradient3421);stroke-opacity:1;filter:url(#filter3423)"
id="path3413"
d="M 54.393966,74.154282 C 46.245967,65.803997 28.630827,47.75 28.630827,47.75 L 15.999972,60.697999 L 54.393966,100.05285 L 111.99998,41 L 99.367397,28.05286 C 99.367397,28.05286 64.105395,64.200283 54.393966,74.154282 z" />
<path
id="path3427"
transform="translate(-2.3931686e-5,0)"
d="M 99.375,28.0625 C 99.375,28.0625 98.974759,28.493841 98.96875,28.5 L 111.15625,40.78125 L 81.15625,71 C 66.229051,74.687634 50.098993,77.218746 32.53125,77.21875 C 32.404895,77.21875 32.281159,77.218749 32.15625,77.21875 L 32.46875,77.5625 C 32.657661,77.562987 32.842127,77.5625 33.03125,77.5625 C 50.561049,77.5625 67.167541,75.469361 82.0625,71.71875 L 112,41 L 99.375,28.0625 z"
style="fill:url(#linearGradient3442);fill-opacity:1;opacity:1" />
<path
id="path3444"
transform="translate(-2.3931686e-5,0)"
d="M 99.375 28.0625 C 99.374997 28.0625 64.117679 64.202251 54.40625 74.15625 C 46.258251 65.805965 28.625 47.75 28.625 47.75 L 16 60.6875 L 16.5 61.1875 L 28.625 48.75 C 28.625 48.75 46.258251 66.805965 54.40625 75.15625 C 64.117679 65.202251 99.374997 29.0625 99.375 29.0625 L 111.5 41.5 L 112 41 L 99.375 28.0625 z "
style="fill:url(#linearGradient3453);fill-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

View File

@@ -0,0 +1,383 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2"
height="128"
width="128">
<defs
id="defs4">
<linearGradient
id="linearGradient3400">
<stop
id="stop3402"
offset="0"
style="stop-color:#ffff00;stop-opacity:1;" />
<stop
id="stop3404"
offset="1"
style="stop-color:#ffff00;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3377">
<stop
id="stop3379"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3381"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3320">
<stop
id="stop3322"
offset="0"
style="stop-color:#ea3b18;stop-opacity:1;" />
<stop
id="stop3324"
offset="1"
style="stop-color:#ea3b18;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3282">
<stop
id="stop3284"
offset="0"
style="stop-color:#ac4311;stop-opacity:1;" />
<stop
id="stop3286"
offset="1"
style="stop-color:#ea5418;stop-opacity:1" />
</linearGradient>
<linearGradient
id="linearGradient3252">
<stop
style="stop-color:#ffffff;stop-opacity:1"
offset="0"
id="stop3254" />
<stop
style="stop-color:#ffffff;stop-opacity:0"
offset="1"
id="stop3256" />
</linearGradient>
<linearGradient
id="linearGradient4193">
<stop
id="stop4195"
offset="0"
style="stop-color:#ffc404;stop-opacity:1;" />
<stop
id="stop4197"
offset="1"
style="stop-color:#ffc404;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4068">
<stop
id="stop4070"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop4072"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient4056">
<stop
id="stop4058"
offset="0"
style="stop-color:#ffd500;stop-opacity:1" />
<stop
id="stop4060"
offset="1"
style="stop-color:#ffff99;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient3971">
<stop
id="stop3973"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3975"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3954">
<stop
id="stop3956"
offset="0"
style="stop-color:#ffffbf;stop-opacity:1" />
<stop
id="stop3958"
offset="1"
style="stop-color:#ffffbf;stop-opacity:0" />
</linearGradient>
<linearGradient
id="linearGradient3932">
<stop
style="stop-color:#ffff00;stop-opacity:1"
offset="0"
id="stop3934" />
<stop
style="stop-color:#ff7e00;stop-opacity:1"
offset="1"
id="stop3936" />
</linearGradient>
<linearGradient
id="linearGradient3851">
<stop
id="stop3853"
offset="0"
style="stop-color:#ffdd00;stop-opacity:1" />
<stop
id="stop3855"
offset="1"
style="stop-color:#e15800;stop-opacity:1" />
</linearGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.125192,-0.4335743,0.1499795,1.4269598,-211.59742,-0.8510997)"
r="48.004357"
fy="85.945168"
fx="63.683678"
cy="85.945168"
cx="63.683678"
id="radialGradient3849"
xlink:href="#linearGradient3932" />
<linearGradient
gradientTransform="matrix(1.0003186,0,0,1.0920256,4.8948421e-3,-2.1497485)"
gradientUnits="userSpaceOnUse"
y2="108.00891"
x2="74.685875"
y1="37.71302"
x1="74.685875"
id="linearGradient3857"
xlink:href="#linearGradient3851" />
<filter
id="filter3950">
<feGaussianBlur
id="feGaussianBlur3952"
stdDeviation="0.45503695" />
</filter>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="42.471062"
x2="72.742889"
y1="102.71508"
x1="72.742889"
id="linearGradient3960"
xlink:href="#linearGradient3954" />
<linearGradient
gradientTransform="matrix(1.0152964,0,0,1.0920256,-1.3711972,-2.1497485)"
gradientUnits="userSpaceOnUse"
y2="82.910049"
x2="67.189468"
y1="15.087444"
x1="65.980019"
id="linearGradient3977"
xlink:href="#linearGradient3971" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(8.2879791,-4.7852502,0.5464445,0.9465058,-219.3366,117.99253)"
r="5.9950326"
fy="102"
fx="22.004967"
cy="102"
cx="22.004967"
id="radialGradient4062"
xlink:href="#linearGradient4056" />
<radialGradient
r="5.9950326"
fy="102"
fx="22.004967"
cy="102"
cx="22.004967"
gradientTransform="matrix(-8.2879791,-4.7852502,-0.5464445,0.9465058,347.61812,117.99253)"
gradientUnits="userSpaceOnUse"
id="radialGradient4066"
xlink:href="#linearGradient4056" />
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1,0,0,-12.343127,128,293.46933)"
r="4.21875"
fy="21.994045"
fx="64"
cy="21.994045"
cx="64"
id="radialGradient4076"
xlink:href="#linearGradient4068" />
<filter
id="filter4102"
height="1.143004"
y="-0.071501976"
width="1.2035852"
x="-0.1017926">
<feGaussianBlur
id="feGaussianBlur4104"
stdDeviation="0.35786462" />
</filter>
<linearGradient
y2="77.707237"
x2="72.923073"
y1="22.873119"
x1="56.87429"
gradientTransform="matrix(1.0229652,0,0,1.0920256,-1.4644437,-1.8338916)"
gradientUnits="userSpaceOnUse"
id="linearGradient4179"
xlink:href="#linearGradient3252" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="149.0795"
x2="82.169357"
y1="20.939892"
x1="64.653976"
id="linearGradient4199"
xlink:href="#linearGradient4193" />
<filter
id="filter3274">
<feGaussianBlur
id="feGaussianBlur3276"
stdDeviation="1.4432763" />
</filter>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4073524,-4.9145829e-2,3.3701767e-2,0.9650923,-26.955636,5.4114576)"
r="52.025275"
fy="25.956657"
fx="64.025276"
cy="25.956657"
cx="64.025276"
id="radialGradient3326"
xlink:href="#linearGradient3320" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="46.195744"
x2="61.264969"
y1="82.805801"
x1="85.398132"
id="linearGradient3383"
xlink:href="#linearGradient3377" />
<linearGradient
y2="105.4052"
x2="67.096779"
y1="35.311508"
x1="67.096779"
gradientUnits="userSpaceOnUse"
id="linearGradient3391"
xlink:href="#linearGradient3282" />
<filter
id="filter3396"
height="1.0607916"
y="-0.030395781"
width="1.2281187"
x="-0.11405937">
<feGaussianBlur
id="feGaussianBlur3398"
stdDeviation="0.8554453" />
</filter>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.5093795,0,0,4.2142344,-223.72294,-220.10349)"
r="9"
fy="68.477737"
fx="63.75"
cy="68.477737"
cx="63.75"
id="radialGradient3406"
xlink:href="#linearGradient3400" />
<radialGradient
r="9"
fy="74.355972"
fx="63.75"
cy="74.355972"
cx="63.75"
gradientTransform="matrix(4.5093795,0,0,1.3282315,-223.72294,-5.5119394)"
gradientUnits="userSpaceOnUse"
id="radialGradient3410"
xlink:href="#linearGradient3400" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
transform="matrix(1.0967227,0,0,1.1002593,-6.1902535,-2.2094077)"
id="path4137"
d="M 63.594525,15.80685 C 61.088483,15.954871 58.821624,17.466363 57.570338,19.823647 L 16.791222,96.142808 C 15.466493,98.629922 15.467558,101.69401 16.794017,104.18005 C 18.120475,106.66607 20.570634,108.19604 23.220884,108.1932 L 104.77911,108.1932 C 107.42937,108.19604 109.87952,106.66607 111.20598,104.18005 C 112.53244,101.69401 112.5335,98.629922 111.20877,96.142808 L 70.429661,19.823647 C 69.033862,17.19393 66.390069,15.640255 63.594525,15.80685 z "
style="opacity:1;fill:#ffc404;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4199);stroke-width:1.82068181;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3274)" />
<path
id="path3833"
d="M 63.58764,15.32266 C 60.8828,15.483628 58.436118,17.127313 57.085569,19.690763 L 13.071555,102.6847 C 11.641738,105.38934 11.642888,108.72141 13.074571,111.42487 C 14.506254,114.12833 17.150778,115.7921 20.011265,115.78901 L 108.0393,115.78901 C 110.89979,115.7921 113.5443,114.12833 114.97599,111.42487 C 116.40766,108.72141 116.40881,105.38934 114.979,102.6847 L 70.964989,19.690763 C 69.458464,16.831053 66.604947,15.141495 63.58764,15.32266 z "
style="fill:url(#linearGradient3857);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:url(#radialGradient3326);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.36734694"
d="M 63.58764,15.32266 C 60.8828,15.483628 58.436118,17.127313 57.085569,19.690763 L 13.071555,102.6847 C 11.641738,105.38934 11.642888,108.72141 13.074571,111.42487 C 14.506254,114.12833 17.150778,115.7921 20.011265,115.78901 L 108.0393,115.78901 C 110.89979,115.7921 113.5443,114.12833 114.97599,111.42487 C 116.40766,108.72141 116.40881,105.38934 114.979,102.6847 L 70.964989,19.690763 C 69.458464,16.831053 66.604947,15.141495 63.58764,15.32266 z "
id="path3318" />
<path
transform="matrix(1.0919838,0,0,1.0920256,-7.2516225,-2.1497485)"
id="path4051"
d="M 63.59375,16 C 62.204553,16.082054 60.889465,16.602887 59.78125,17.4375 L 64,28 L 68.21875,17.4375 C 66.88987,16.43384 65.2712,15.900036 63.59375,16 z "
style="opacity:0.92195123;fill:url(#radialGradient4076);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter4102)" />
<path
id="path4041"
d="M 25.323922,102.6847 L 12.493113,104.83463 C 11.963856,107.03044 12.235578,109.40323 13.312101,111.42091 C 14.754514,114.12437 17.425695,115.7921 20.307621,115.78901 L 23.139955,115.78901 L 25.323922,102.6847 z "
style="opacity:0.80102041;fill:url(#radialGradient4062);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="opacity:0.71938776;fill:url(#radialGradient4066);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:16;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 102.9576,102.6847 L 115.78841,104.83463 C 116.31767,107.03044 116.04595,109.40323 114.96942,111.42091 C 113.52701,114.12437 110.85583,115.7921 107.9739,115.78901 L 105.14157,115.78901 L 102.9576,102.6847 z "
id="path4064" />
<path
id="path3831"
d="M 63.78127,20.006639 C 62.429404,20.087352 61.206563,20.911554 60.531566,22.196957 L 16.535558,105.42905 C 15.820943,106.78523 15.821517,108.45607 16.537067,109.81166 C 17.252613,111.16727 18.574334,112.00154 20.003992,112 L 107.996,112 C 109.42567,112.00154 110.7474,111.16727 111.46293,109.81166 C 112.17849,108.45607 112.17905,106.78523 111.46444,105.42905 L 67.468436,22.196957 C 66.715482,20.762999 65.289306,19.915795 63.78127,20.006639 L 63.78127,20.006639 z "
style="fill:url(#radialGradient3849);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="font-size:83.71386719px;font-style:normal;font-weight:normal;fill:none;fill-opacity:1;stroke:url(#radialGradient3406);stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Liberation Sans;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3396);opacity:0.75"
d="M 63.40625,36.71875 C 60.266222,36.913888 57.331988,39.264296 57.875,44 L 61.4375,79.71875 C 62.189089,79.591351 62.962322,79.5 63.75,79.5 C 64.69875,79.5 65.636426,79.597988 66.53125,79.78125 L 70.09375,44 C 70.784031,39.043508 66.964948,36.497594 63.40625,36.71875 z "
id="path3394" />
<path
transform="matrix(0.9982143,0,0,1.0992242,-0.2503837,-2.6968261)"
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3960);stroke-width:0.95465171;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3950)"
d="M 63.78125,20 C 62.429261,20.073701 61.206309,20.826287 60.53125,22 L 16.53125,98 C 15.816569,99.238357 15.817144,100.764 16.532758,102.00181 C 17.248371,103.23963 18.570212,104.00141 20,104 L 108,104 C 109.42979,104.00141 110.75163,103.23963 111.46724,102.00181 C 112.18286,100.764 112.18343,99.238357 111.46875,98 L 67.46875,22 C 66.715728,20.69064 65.289423,19.917051 63.78125,20 L 63.78125,20 z "
id="path3948" />
<path
id="path3962"
d="M 63.385681,19.690763 C 62.013012,19.771246 60.771353,20.593089 60.085969,21.874814 L 34.100723,70.162819 L 34.132451,70.162819 L 60.085969,23.137469 C 60.771353,21.888035 62.013012,21.100125 63.385681,21.021668 C 64.916924,20.933369 66.365047,21.743636 67.129587,23.137469 L 92.35336,68.797787 C 92.363486,68.795622 92.374963,68.799955 92.385087,68.797787 L 67.129587,21.874814 C 66.365047,20.444959 64.916924,19.60018 63.385681,19.690763 z "
style="fill:url(#linearGradient3977);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3408"
d="M 63.75,86.25 C 59.886,86.25 56.75,89.386 56.75,93.25 C 56.75,97.114 59.886,100.25 63.75,100.25 C 67.614,100.25 70.75,97.114 70.75,93.25 C 70.75,89.386 67.614,86.25 63.75,86.25 z "
style="font-size:83.71386719px;font-style:normal;font-weight:normal;fill:none;fill-opacity:1;stroke:url(#radialGradient3410);stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Liberation Sans;stroke-miterlimit:4;stroke-dasharray:none;filter:url(#filter3396);opacity:0.75" />
<path
id="text3278"
d="M 63.40625 36.71875 C 60.266222 36.913888 57.331988 39.264296 57.875 44 L 61.4375 79.71875 C 62.189089 79.591351 62.962322 79.5 63.75 79.5 C 64.69875 79.5 65.636426 79.597988 66.53125 79.78125 L 70.09375 44 C 70.784031 39.043508 66.964948 36.497594 63.40625 36.71875 z M 63.75 86.25 C 59.886 86.25 56.75 89.386 56.75 93.25 C 56.75 97.114 59.886 100.25 63.75 100.25 C 67.614 100.25 70.75 97.114 70.75 93.25 C 70.75 89.386 67.614 86.25 63.75 86.25 z "
style="font-size:83.71386719px;font-style:normal;font-weight:normal;fill:url(#linearGradient3391);fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Liberation Sans" />
<path
id="path3895"
d="M 63.781556,20.00662 C 62.398518,20.087103 61.147481,20.908946 60.456919,22.190671 L 34.275402,70.478676 C 42.305309,71.743881 50.929542,72.423846 59.913469,72.423846 C 71.74643,72.423846 82.957077,71.247715 93,69.113644 L 67.55374,22.190671 C 66.783425,20.760816 65.324364,19.916037 63.781556,20.00662 z "
style="opacity:0.86734697;fill:url(#linearGradient4179);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3368"
d="M 64.34375 20.03125 C 65.551601 20.210711 66.627874 20.975908 67.25 22.125 L 92.125 67.75 C 82.312377 69.824859 71.342862 70.968751 59.78125 70.96875 C 51.106743 70.96875 42.798082 70.296099 35.03125 69.09375 L 34.28125 70.46875 C 42.311157 71.733955 50.922323 72.4375 59.90625 72.4375 C 71.739213 72.437503 82.957077 71.259071 93 69.125 L 67.5625 22.1875 C 66.888473 20.936376 65.667116 20.151811 64.34375 20.03125 z "
style="opacity:1;fill:url(#linearGradient3383);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

View File

@@ -0,0 +1,426 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
style="overflow:visible"
xml:space="preserve"
id="Layer_1"
viewBox="0 0 128 128"
height="128"
width="128"
version="1.0"><metadata
id="metadata100"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs105"><filter
id="filter4292"><feGaussianBlur
stdDeviation="2.1604423"
id="feGaussianBlur4294" /></filter><linearGradient
gradientUnits="userSpaceOnUse"
xlink:href="#XMLID_9_"
id="linearGradient2291"
y2="94.536598"
x2="86.535599"
y1="102.3447"
x1="94.343803" /><linearGradient
gradientUnits="userSpaceOnUse"
xlink:href="#XMLID_10_"
id="linearGradient2293"
y2="94.586502"
x2="86.586502"
y1="103"
x1="95" /><linearGradient
gradientUnits="userSpaceOnUse"
xlink:href="#XMLID_11_"
id="linearGradient2295"
y2="95.292999"
x2="87.292999"
y1="103"
x1="95" /><linearGradient
gradientUnits="userSpaceOnUse"
xlink:href="#XMLID_12_"
id="linearGradient2297"
y2="96.000198"
x2="88.000198"
y1="104"
x1="96" /><radialGradient
gradientTransform="matrix(0.9787234,0,0,0.9818182,1.3617045,1.1636364)"
gradientUnits="userSpaceOnUse"
xlink:href="#XMLID_8_"
id="radialGradient2272"
r="139.55859"
cy="112.3047"
cx="102" /><radialGradient
gradientTransform="translate(2.4e-6,0)"
gradientUnits="userSpaceOnUse"
xlink:href="#XMLID_7_"
id="radialGradient2275"
r="139.5585"
cy="112.3047"
cx="102" /><filter
id="filter3241"><feGaussianBlur
stdDeviation="1.0394514"
id="feGaussianBlur3243" /></filter><linearGradient
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
gradientUnits="userSpaceOnUse"
id="linearGradient5958-4"
y2="-383.9971"
x2="-12.0029"
y1="-383.9971"
x1="-84.002403"><stop
offset="0"
style="stop-color:#8c0000;stop-opacity:1"
id="stop5960-6" /><stop
offset="1"
style="stop-color:#bf0000;stop-opacity:1"
id="stop5962-2" /></linearGradient><linearGradient
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
gradientUnits="userSpaceOnUse"
id="linearGradient4770-5"
y2="-383.9971"
x2="-12.0029"
y1="-383.9971"
x1="-84.002403"><stop
offset="0"
style="stop-color:#ffbe00;stop-opacity:1"
id="stop4772-8" /><stop
offset="1"
style="stop-color:#f5d600;stop-opacity:0"
id="stop4774-6" /></linearGradient><filter
id="filter3162"><feGaussianBlur
stdDeviation="0.96794009"
id="feGaussianBlur3164" /></filter><linearGradient
id="linearGradient4296-2"><stop
offset="0"
style="stop-color:#ff0000;stop-opacity:1"
id="stop4298-8" /><stop
offset="1"
style="stop-color:#650000;stop-opacity:1"
id="stop4300-4" /></linearGradient><clipPath
id="clipPath5163-7"><circle
style="fill:url(#linearGradient5167);fill-opacity:1"
id="circle5165-2"
r="36"
cy="92"
cx="343.99899" /></clipPath><filter
id="filter7317-4"><feGaussianBlur
stdDeviation="2.8805897"
id="feGaussianBlur7319-0" /></filter><linearGradient
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
gradientUnits="userSpaceOnUse"
id="linearGradient3711-6"
y2="-383.9975"
x2="-23.516129"
y1="-383.9971"
x1="-84.002403"><stop
offset="0"
style="stop-color:#ffffff;stop-opacity:1"
id="stop3713-2" /><stop
offset="1"
style="stop-color:#ffffff;stop-opacity:0"
id="stop3715-9" /></linearGradient><linearGradient
id="linearGradient6740-9"><stop
offset="0"
style="stop-color:#4d0000;stop-opacity:0"
id="stop6742-0" /><stop
offset="0.5"
style="stop-color:#4d0000;stop-opacity:1"
id="stop6748-8" /><stop
offset="1"
style="stop-color:#4d0000;stop-opacity:0"
id="stop6744-1" /></linearGradient><filter
id="filter5943-3"><feGaussianBlur
stdDeviation="1.04"
id="feGaussianBlur5945-1" /></filter><linearGradient
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient5958-4"
id="linearGradient3219"
y2="-373.1243"
x2="-56.357521"
y1="-381.09921"
x1="-86.120354" /><radialGradient
gradientTransform="matrix(0.6662862,-0.6560105,0.9893764,1.0048737,31.05592,226.43791)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient4770-5"
id="radialGradient3221"
fy="85.250488"
fx="345.80753"
r="36"
cy="85.250488"
cx="345.80753" /><linearGradient
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient4296-2"
id="linearGradient3223"
y2="87.759453"
x2="336.98077"
y1="120.81158"
x1="328.12448" /><linearGradient
gradientTransform="translate(20.000035,-56.000003)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient6740-9"
id="linearGradient3227"
y2="76.633896"
x2="90.537666"
y1="103.01254"
x1="117.81589" /><linearGradient
gradientTransform="matrix(0,0.73957696,-0.73957696,0,-1.6559147,63.320784)"
gradientUnits="userSpaceOnUse"
xlink:href="#linearGradient3711-6"
id="linearGradient3253"
y2="-131.93112"
x2="-45.096584"
y1="-131.93112"
x1="-80.00296" /></defs>
<radialGradient
gradientUnits="userSpaceOnUse"
id="XMLID_7_"
r="139.5585"
cy="112.3047"
cx="102">
<stop
offset="0"
style="stop-color:#00537d;stop-opacity:1"
id="stop16" />
<stop
offset="0.0151"
style="stop-color:#186389;stop-opacity:1"
id="stop18" />
<stop
offset="0.0558"
style="stop-color:#558ca8;stop-opacity:1"
id="stop20" />
<stop
offset="0.0964"
style="stop-color:#89afc3;stop-opacity:1"
id="stop22" />
<stop
offset="0.1357"
style="stop-color:#b3ccd8;stop-opacity:1"
id="stop24" />
<stop
offset="0.1737"
style="stop-color:#d4e2e9;stop-opacity:1"
id="stop26" />
<stop
offset="0.20990001"
style="stop-color:#ecf2f5;stop-opacity:1"
id="stop28" />
<stop
offset="0.24349999"
style="stop-color:#fafcfd;stop-opacity:1"
id="stop30" />
<stop
offset="0.27219999"
style="stop-color:#ffffff;stop-opacity:1"
id="stop32" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
id="XMLID_8_"
r="139.55859"
cy="112.3047"
cx="102">
<stop
offset="0"
style="stop-color:#535557;stop-opacity:1"
id="stop37" />
<stop
offset="0.11366145"
style="stop-color:#898a8c;stop-opacity:1"
id="stop41" />
<stop
offset="0.20296688"
style="stop-color:#ececec;stop-opacity:1"
id="stop47" />
<stop
offset="0.23630001"
style="stop-color:#fafafa;stop-opacity:1"
id="stop49" />
<stop
offset="0.27219999"
style="stop-color:#ffffff;stop-opacity:1"
id="stop51" />
<stop
offset="0.53130001"
style="stop-color:#fafafa;stop-opacity:1"
id="stop53" />
<stop
offset="0.84490001"
style="stop-color:#ebecec;stop-opacity:1"
id="stop55" />
<stop
offset="1"
style="stop-color:#e1e2e3;stop-opacity:1"
id="stop57" />
</radialGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
id="XMLID_9_"
y2="94.536598"
x2="86.535599"
y1="102.3447"
x1="94.343803">
<stop
offset="0"
style="stop-color:#ffffff;stop-opacity:1"
id="stop62" />
<stop
offset="1"
style="stop-color:#555753;stop-opacity:1"
id="stop64" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
id="XMLID_10_"
y2="94.586502"
x2="86.586502"
y1="103"
x1="95">
<stop
offset="0"
style="stop-color:#ffffff;stop-opacity:1"
id="stop69" />
<stop
offset="1"
style="stop-color:#555753;stop-opacity:1"
id="stop71" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
id="XMLID_11_"
y2="95.292999"
x2="87.292999"
y1="103"
x1="95">
<stop
offset="0"
style="stop-color:#ffffff;stop-opacity:1"
id="stop76" />
<stop
offset="1"
style="stop-color:#393b38;stop-opacity:1"
id="stop78" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
id="XMLID_12_"
y2="96.000198"
x2="88.000198"
y1="104"
x1="96">
<stop
offset="0"
style="stop-color:#888a85;stop-opacity:1"
id="stop83" />
<stop
offset="0.0072"
style="stop-color:#8c8e89;stop-opacity:1"
id="stop85" />
<stop
offset="0.0673"
style="stop-color:#abaca9;stop-opacity:1"
id="stop87" />
<stop
offset="0.1347"
style="stop-color:#c5c6c4;stop-opacity:1"
id="stop89" />
<stop
offset="0.2115"
style="stop-color:#dbdbda;stop-opacity:1"
id="stop91" />
<stop
offset="0.3012"
style="stop-color:#ebebeb;stop-opacity:1"
id="stop93" />
<stop
offset="0.4122"
style="stop-color:#f7f7f6;stop-opacity:1"
id="stop95" />
<stop
offset="0.5679"
style="stop-color:#fdfdfd;stop-opacity:1"
id="stop97" />
<stop
offset="1"
style="stop-color:#ffffff;stop-opacity:1"
id="stop99" />
</linearGradient>
<path
style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter3241)"
id="path6594"
transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)"
d="m 23,9 0.04082,112 61.131184,0 c 0.53,0 1.039,-0.211 1.414,-0.586 L 118.414,87.586 C 118.789,87.211 119,86.702 119,86.172 L 119,9 23,9 z" /><path
style="fill:url(#radialGradient2275)"
id="path34"
d="m 16.000002,8 0,112 61.172,0 c 0.53,0 1.039,-0.211 1.414,-0.586 L 111.414,86.586 C 111.789,86.211 112,85.702 112,85.172 L 112,8 16.000002,8 z" /><path
style="fill:url(#radialGradient2272);fill-opacity:1"
id="path59"
d="m 18.978725,10 c -0.539276,0 -0.978723,0.440836 -0.978723,0.981818 l 0,106.036362 c 0,0.54197 0.439447,0.98182 0.978723,0.98182 l 57.913022,0 c 0.257404,0 0.509915,-0.10407 0.691957,-0.28767 L 109.71323,85.4812 C 109.89626,85.2976 110,85.045273 110,84.787055 l 0,-73.805237 C 110,10.440836 109.56153,10 109.02128,10 l -90.042555,0 z" /><g
id="g1973"
transform="translate(2.4e-6,0)"><path
style="opacity:0.1;fill:url(#linearGradient2291)"
id="path66"
d="M 111.414,86.586 C 111.664,86.336 93.035,93 88,93 c -1.654,0 -3,1.346 -3,3 0,5.035 -6.664,23.664 -6.414,23.414 l 32.828,-32.828 z" /><path
style="opacity:0.1;fill:url(#linearGradient2293)"
id="path73"
d="M 111.414,86.586 C 111.789,86.211 97.444,94 88,94 c -1.103,0 -2,0.897 -2,2 0,9.444 -7.789,23.789 -7.414,23.414 l 32.828,-32.828 z" /><path
style="opacity:0.1;fill:url(#linearGradient2295)"
id="path80"
d="M 111.414,86.586 C 111.653,86.347 97.807,95 88,95 c -0.553,0 -1,0.447 -1,1 0,9.807 -8.653,23.653 -8.414,23.414 l 32.828,-32.828 z" /><path
style="fill:url(#linearGradient2297)"
id="path101"
d="m 78.586,119.414 c 0,0 11.914,-9.914 17.414,-15.414 5.5,-5.5 15.414,-17.414 15.414,-17.414 0,0 -13.164,9.414 -23.414,9.414 0,10.25 -9.414,23.414 -9.414,23.414 z" /></g>
<g
id="g3258"><circle
style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter4292)"
id="circle4274"
transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45865,35.850447)"
r="36"
cy="92"
cx="343.99899" /><circle
style="fill:url(#linearGradient3219);fill-opacity:1"
id="circle3581_2_-1"
transform="matrix(-0.85930821,0.23025097,-0.23025097,-0.85930821,412.75132,31.883223)"
r="36"
cy="92"
cx="343.99899" /><circle
style="fill:url(#radialGradient3221);fill-opacity:1;filter:url(#filter3162)"
id="circle4383-0"
transform="matrix(-0.64448122,0.17268815,-0.17268815,-0.64448122,333.55529,31.920663)"
r="36"
cy="92"
cx="343.99899" /><circle
style="opacity:0.8;fill:none;stroke:url(#linearGradient3223);stroke-width:6.75138187;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter7317-4)"
id="circle4776-3"
clip-path="url(#clipPath5163-7)"
transform="matrix(-0.85930821,-0.23025097,-0.23025097,0.85930821,412.75132,32.182673)"
r="36"
cy="92"
cx="343.99899" /><path
style="opacity:0.8;fill:url(#linearGradient3253);fill-opacity:1"
id="circle16776-4"
d="m 95.967113,4.1524808 c -11.357389,0 -20.847522,8.0198492 -23.134892,18.6974332 4.559347,4.250263 13.21047,7.118425 23.134892,7.118425 9.924437,0 18.575547,-2.868162 23.134887,-7.118425 C 116.81464,12.17233 107.3245,4.1524808 95.967113,4.1524808 z" /><g
id="g6850-0"
transform="matrix(0.70783432,0.70783432,-0.70783432,0.70783432,35.093313,-79.804896)"><path
style="fill:none;stroke:url(#linearGradient3227);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5943-3)"
id="path4123-3"
d="m 118.00003,15.999997 0,16 -16,0 0,8 16,0 0,16 8,0 0,-16 16,0 0,-8 -16,0 0,-16 -8,0 z" /><path
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
id="rect3232-9"
d="m 118.00003,15.999997 0,16 -16,0 0,8 16,0 0,16 8,0 0,-16 16,0 0,-8 -16,0 0,-16 -8,0 z" /></g></g></svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

View File

@@ -0,0 +1,634 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve"
enable-background="new 0 0 128 128"
overflow="visible"
viewBox="0 0 128 128"
height="128"
width="128"
id="Layer_1"
version="1.1"><defs
id="defs105"><linearGradient
id="linearGradient3235"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3237" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3239" /></linearGradient><linearGradient
id="linearGradient3207"><stop
id="stop3209"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" /><stop
id="stop3211"
offset="1"
style="stop-color:#252525;stop-opacity:0;" /></linearGradient><linearGradient
id="linearGradient3325"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3327" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3329" /></linearGradient><linearGradient
id="linearGradient3303"><stop
id="stop3305"
offset="0"
style="stop-color:#ffffff;stop-opacity:0.68345326;" /><stop
id="stop3307"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" /></linearGradient><linearGradient
id="linearGradient3058"><stop
style="stop-color:#9a7600;stop-opacity:1;"
offset="0"
id="stop3060" /><stop
id="stop3066"
offset="0.09292036"
style="stop-color:#e3ad00;stop-opacity:1;" /><stop
style="stop-color:#ffcd2c;stop-opacity:1;"
offset="0.5043171"
id="stop3070" /><stop
style="stop-color:#e3ad00;stop-opacity:1;"
offset="0.91571385"
id="stop3068" /><stop
style="stop-color:#b98d00;stop-opacity:1;"
offset="1"
id="stop3062" /></linearGradient><linearGradient
id="linearGradient2598"><stop
style="stop-color:#252525;stop-opacity:1;"
offset="0"
id="stop2600" /><stop
id="stop2606"
offset="0.5"
style="stop-color:#252525;stop-opacity:1;" /><stop
style="stop-color:#252525;stop-opacity:1;"
offset="0.75"
id="stop2608" /><stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop2602" /></linearGradient><linearGradient
id="linearGradient2257"><stop
id="stop2259"
offset="0"
style="stop-color:#b4942a;stop-opacity:1;" /><stop
id="stop2261"
offset="1"
style="stop-color:#e4dcc9;stop-opacity:1" /></linearGradient><linearGradient
id="linearGradient3291"><stop
id="stop3293"
offset="0"
style="stop-color:black;stop-opacity:1" /><stop
id="stop3295"
offset="1"
style="stop-color:black;stop-opacity:0" /></linearGradient><foreignObject
id="foreignObject7"
height="1"
width="1"
y="0"
x="0"
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
<i:pgfRef
xlink:href="#adobe_illustrator_pgf">
</i:pgfRef>
</foreignObject><linearGradient
y2="94.5366"
x2="86.5356"
y1="102.3447"
x1="94.3438"
gradientUnits="userSpaceOnUse"
id="linearGradient2291"
xlink:href="#XMLID_9_" /><linearGradient
y2="94.5865"
x2="86.5865"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="linearGradient2293"
xlink:href="#XMLID_10_" /><linearGradient
y2="95.293"
x2="87.293"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="linearGradient2295"
xlink:href="#XMLID_11_" /><linearGradient
y2="96.0002"
x2="88.0002"
y1="104"
x1="96"
gradientUnits="userSpaceOnUse"
id="linearGradient2297"
xlink:href="#XMLID_12_" /><radialGradient
r="139.55859"
cy="112.3047"
cx="102"
gradientTransform="matrix(0.9787234,0,0,0.9818182,1.3617045,1.1636364)"
gradientUnits="userSpaceOnUse"
id="radialGradient2272"
xlink:href="#XMLID_8_" /><radialGradient
r="139.5585"
cy="112.3047"
cx="102"
gradientTransform="translate(2.4e-6,0)"
gradientUnits="userSpaceOnUse"
id="radialGradient2275"
xlink:href="#XMLID_7_" /><filter
id="filter3241"><feGaussianBlur
id="feGaussianBlur3243"
stdDeviation="1.0394514" /></filter><filter
id="filter3772"><feGaussianBlur
id="feGaussianBlur3774"
stdDeviation="0.50063244" /></filter><radialGradient
xlink:href="#linearGradient3207"
id="radialGradient6054"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.5495914,0,0,0.1876849,-193.24041,-23.535874)"
cx="49.011971"
cy="2.6743078"
fx="49.011971"
fy="2.6743078"
r="1.7246193" /><radialGradient
xlink:href="#linearGradient3207"
id="radialGradient6052"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.550633,0,0,0.1873121,21.621938,-31.864287)"
cx="49.011971"
cy="2.6743078"
fx="49.011971"
fy="2.6743078"
r="1.7246193" /><radialGradient
xlink:href="#linearGradient3207"
id="radialGradient6050"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.2600183,0,0,0.2752449,-2.2590409,-25.415382)"
cx="49.011971"
cy="2.6743078"
fx="49.011971"
fy="2.6743078"
r="1.7246193" /><linearGradient
xlink:href="#linearGradient5433"
id="linearGradient6048"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9973012,0,0,0.9997782,0.28069,1.0645897e-2)"
x1="92.226158"
y1="54.119438"
x2="96.579895"
y2="57.15118" /><linearGradient
xlink:href="#linearGradient3235"
id="linearGradient6046"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.6732108,1.5189394,-1.5009523,1.6928488,18.675678,-24.465565)"
x1="48.498562"
y1="0.81150496"
x2="48.732723"
y2="2.3657269" /><linearGradient
xlink:href="#linearGradient2922"
id="linearGradient6044"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.6182226,0,0,0.6232687,24.10803,47.993844)"
x1="33.342377"
y1="117.83894"
x2="24.450998"
y2="107.35519" /><radialGradient
xlink:href="#linearGradient3325"
id="radialGradient6042"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-1.5103,2.641273e-3,-1.167078e-4,-9.110224e-3,87.0522,7.438666)"
cx="34.677639"
cy="7.4622769"
fx="34.677639"
fy="7.4622769"
r="47.595196" /><linearGradient
xlink:href="#linearGradient3303"
id="linearGradient6040"
gradientUnits="userSpaceOnUse"
x1="-12.817558"
y1="7.4622769"
x2="82.172836"
y2="7.4622769" /><linearGradient
xlink:href="#linearGradient5826"
id="linearGradient6038"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9992082,0,0,0.9993395,0.1083622,-9.0374942e-2)"
x1="114.92793"
y1="-22.560064"
x2="100.65602"
y2="-22.052734" /><linearGradient
xlink:href="#linearGradient3058"
id="linearGradient6036"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.2875994,1.1737414,-0.5465891,0.6213041,81.686465,27.89447)"
x1="11.326384"
y1="57.383999"
x2="14.493531"
y2="57.383999" /><linearGradient
xlink:href="#linearGradient7364"
id="linearGradient6034"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9986497,0,0,0.9998891,0.1404398,5.3232436e-3)"
x1="76.708534"
y1="83.325729"
x2="80.579521"
y2="87.154587" /><linearGradient
xlink:href="#linearGradient2598"
id="linearGradient6032"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.9986497,0,0,0.9998891,0.1404398,5.3232436e-3)"
x1="75.848022"
y1="72.804123"
x2="81.452583"
y2="77.047241" /><radialGradient
xlink:href="#linearGradient2257"
id="radialGradient6030"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.909059,1.8392116,-8.6222515,7.5766472,1009.8522,-881.36145)"
cx="42.617531"
cy="120.64188"
fx="42.617531"
fy="120.64188"
r="3.406888" /><linearGradient
xlink:href="#linearGradient3291"
id="linearGradient6028"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.3755238,0,0,1.8570645,-22.548199,-92.562977)"
x1="63.911137"
y1="79.998817"
x2="87.757362"
y2="93.999413" /><linearGradient
id="linearGradient7364"><stop
style="stop-color:#d4a100;stop-opacity:0.97647059;"
offset="0"
id="stop7366" /><stop
style="stop-color:#ffc712;stop-opacity:1;"
offset="1"
id="stop7368" /></linearGradient><linearGradient
id="linearGradient5826"><stop
id="stop5828"
offset="0"
style="stop-color:#980000;stop-opacity:1;" /><stop
id="stop5830"
offset="1"
style="stop-color:#db5c5c;stop-opacity:1;" /></linearGradient><linearGradient
id="linearGradient2922"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop2924" /><stop
style="stop-color:#515151;stop-opacity:1;"
offset="1"
id="stop2926" /></linearGradient><linearGradient
id="linearGradient5433"><stop
style="stop-color:#ea3838;stop-opacity:1;"
offset="0"
id="stop5435" /><stop
style="stop-color:#c40000;stop-opacity:1;"
offset="1"
id="stop5437" /></linearGradient><filter
id="filter3849"><feGaussianBlur
id="feGaussianBlur3851"
stdDeviation="0.31468463" /></filter><filter
id="filter12295"><feGaussianBlur
id="feGaussianBlur12297"
stdDeviation="1.4758613" /></filter></defs>
<metadata
id="metadata3">
<ns:sfw>
<ns:slices>
<ns:slice
sliceID="1316743234"
width="128"
height="128"
x="0"
y="0" />
</ns:slices>
<ns:sliceSourceBounds
bottomLeftOrigin="true"
width="128"
height="128"
x="0"
y="0" />
<ns:optimizationSettings>
<ns:targetSettings
fileFormat="PNG24Format"
targetSettingsID="0">
<ns:PNG24Format
interlaced="false"
noMatteColor="false"
matteColor="#FFFFFF"
filtered="false"
transparency="true">
</ns:PNG24Format>
</ns:targetSettings>
<ns:targetSettings
fileFormat="PNG24Format"
targetSettingsID="1696735251">
<ns:PNG24Format
interlaced="false"
noMatteColor="false"
matteColor="#FFFFFF"
filtered="false"
transparency="true">
</ns:PNG24Format>
</ns:targetSettings>
</ns:optimizationSettings>
</ns:sfw>
<rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
<radialGradient
gradientUnits="userSpaceOnUse"
r="139.5585"
cy="112.3047"
cx="102"
id="XMLID_7_">
<stop
id="stop16"
style="stop-color:#00537D"
offset="0" />
<stop
id="stop18"
style="stop-color:#186389"
offset="0.0151" />
<stop
id="stop20"
style="stop-color:#558CA8"
offset="0.0558" />
<stop
id="stop22"
style="stop-color:#89AFC3"
offset="0.0964" />
<stop
id="stop24"
style="stop-color:#B3CCD8"
offset="0.1357" />
<stop
id="stop26"
style="stop-color:#D4E2E9"
offset="0.1737" />
<stop
id="stop28"
style="stop-color:#ECF2F5"
offset="0.2099" />
<stop
id="stop30"
style="stop-color:#FAFCFD"
offset="0.2435" />
<stop
id="stop32"
style="stop-color:#FFFFFF"
offset="0.2722" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
r="139.55859"
cy="112.3047"
cx="102"
id="XMLID_8_">
<stop
id="stop37"
style="stop-color:#535557"
offset="0" />
<stop
id="stop41"
style="stop-color:#898A8C"
offset="0.11366145" />
<stop
id="stop47"
style="stop-color:#ECECEC"
offset="0.20296688" />
<stop
id="stop49"
style="stop-color:#FAFAFA"
offset="0.2363" />
<stop
id="stop51"
style="stop-color:#FFFFFF"
offset="0.2722" />
<stop
id="stop53"
style="stop-color:#FAFAFA"
offset="0.5313" />
<stop
id="stop55"
style="stop-color:#EBECEC"
offset="0.8449" />
<stop
id="stop57"
style="stop-color:#E1E2E3"
offset="1" />
</radialGradient>
<linearGradient
y2="94.5366"
x2="86.5356"
y1="102.3447"
x1="94.3438"
gradientUnits="userSpaceOnUse"
id="XMLID_9_">
<stop
id="stop62"
style="stop-color:#FFFFFF"
offset="0" />
<stop
id="stop64"
style="stop-color:#555753"
offset="1" />
</linearGradient>
<linearGradient
y2="94.5865"
x2="86.5865"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="XMLID_10_">
<stop
id="stop69"
style="stop-color:#FFFFFF"
offset="0" />
<stop
id="stop71"
style="stop-color:#555753"
offset="1" />
</linearGradient>
<linearGradient
y2="95.293"
x2="87.293"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="XMLID_11_">
<stop
id="stop76"
style="stop-color:#FFFFFF"
offset="0" />
<stop
id="stop78"
style="stop-color:#393B38"
offset="1" />
</linearGradient>
<linearGradient
y2="96.0002"
x2="88.0002"
y1="104"
x1="96"
gradientUnits="userSpaceOnUse"
id="XMLID_12_">
<stop
id="stop83"
style="stop-color:#888A85"
offset="0" />
<stop
id="stop85"
style="stop-color:#8C8E89"
offset="0.0072" />
<stop
id="stop87"
style="stop-color:#ABACA9"
offset="0.0673" />
<stop
id="stop89"
style="stop-color:#C5C6C4"
offset="0.1347" />
<stop
id="stop91"
style="stop-color:#DBDBDA"
offset="0.2115" />
<stop
id="stop93"
style="stop-color:#EBEBEB"
offset="0.3012" />
<stop
id="stop95"
style="stop-color:#F7F7F6"
offset="0.4122" />
<stop
id="stop97"
style="stop-color:#FDFDFD"
offset="0.5679" />
<stop
id="stop99"
style="stop-color:#FFFFFF"
offset="1" />
</linearGradient>
<path
id="path3726"
d="M 24.919999,10.931136 L 24.919999,119.06907 L 83.596,119.06897 C 84.126,119.06897 84.635,118.85797 85.01,118.48297 L 116.494,86.717034 C 116.869,86.342034 117.08,85.833034 117.08,85.303034 L 117.08,10.931136 L 24.919999,10.931136 z"
style="opacity:0.89589041000000003;fill:#000000;fill-opacity:1;filter:url(#filter3772)"
transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)" /><path
transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)"
style="opacity:0.30684932;fill:#000000;fill-opacity:1;filter:url(#filter3241)"
d="M 23,9.9655172 L 23.040816,121 L 84.172,121 C 84.702,121 85.211,120.789 85.586,120.414 L 118.414,87.586 C 118.789,87.211 119,86.702 119,86.172 L 119,9.9655172 L 23,9.9655172 z"
id="path6594" /><path
id="path34"
d="M 16.000002,8 L 16.000002,120 L 77.172002,120 C 77.702002,120 78.211002,119.789 78.586002,119.414 L 111.414,86.586 C 111.789,86.211 112,85.702 112,85.172 L 112,8 L 16.000002,8 z "
style="fill:url(#radialGradient2275)" /><path
id="path59"
d="M 18.978725,10 C 18.439449,10 18.000002,10.440836 18.000002,10.981818 L 18.000002,117.01818 C 18.000002,117.56015 18.439449,118 18.978725,118 L 76.891747,118 C 77.149151,118 77.401662,117.89593 77.583704,117.71233 L 109.71323,85.4812 C 109.89626,85.2976 110,85.045273 110,84.787055 L 110,10.981818 C 110,10.440836 109.56153,10 109.02128,10 L 18.978725,10 z "
style="fill:url(#radialGradient2272);fill-opacity:1" /><g
transform="translate(2.4e-6,0)"
id="g1973"><path
d="M 111.414,86.586 C 111.664,86.336 93.035,93 88,93 C 86.346,93 85,94.346 85,96 C 85,101.035 78.336,119.664 78.586,119.414 L 111.414,86.586 z "
id="path66"
style="opacity:0.1;fill:url(#linearGradient2291)" /><path
d="M 111.414,86.586 C 111.789,86.211 97.444,94 88,94 C 86.897,94 86,94.897 86,96 C 86,105.444 78.211,119.789 78.586,119.414 L 111.414,86.586 z "
id="path73"
style="opacity:0.1;fill:url(#linearGradient2293)" /><path
d="M 111.414,86.586 C 111.653,86.347 97.807,95 88,95 C 87.447,95 87,95.447 87,96 C 87,105.807 78.347,119.653 78.586,119.414 L 111.414,86.586 z "
id="path80"
style="opacity:0.1;fill:url(#linearGradient2295)" /><path
d="M 78.586,119.414 C 78.586,119.414 90.5,109.5 96,104 C 101.5,98.5 111.414,86.586 111.414,86.586 C 111.414,86.586 98.25,96 88,96 C 88,106.25 78.586,119.414 78.586,119.414 z "
id="path101"
style="fill:url(#linearGradient2297)" /></g>
<g
transform="matrix(1.4512107,0,0,1.4512107,-23.107793,-69.65492)"
id="g4356"><path
style="fill:#bf0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 90.067703,48.28801 C 90.681345,47.595885 94.71636,47.924953 99.011956,51.824487 C 103.34968,55.762246 104.22203,59.572602 103.45335,60.439512 C 102.95305,61.003796 102.45274,61.568078 101.95243,62.132363 C 97.490516,58.081862 93.02863,54.031361 88.566739,49.98086 C 89.067048,49.416577 89.567363,48.852295 90.067703,48.28801 C 90.067703,48.28801 90.067703,48.28801 90.067703,48.28801"
id="path3180" /><path
id="path3299"
d="M 36.000762,124 L 56.247762,114.57347 L 56.341932,114.46575 L 43.072928,102.18129 L 42.945256,102.32719 L 36.000762,124 z"
style="fill:#b3925d;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
style="fill:url(#linearGradient6028);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter12295)"
d="M 97.750257,56.002191 C 96.724436,55.957168 95.868244,56.616733 95.08462,56.988757 C 90.909708,60.687543 73.515347,78.642185 73.084223,79.157465 L 55.810891,99.817304 L 55.704264,99.93337 L 46.022008,117.56677 L 69.620535,112.30505 L 99.562892,76.255802 L 103.15262,71.961341 C 103.79988,70.761527 104.39123,64.147868 101.41107,59.194021 C 99.958078,56.778752 98.776081,56.047215 97.750257,56.002191 z M 103.15262,71.961341 C 103.12605,72.010581 103.10807,72.105165 103.08153,72.135439 C 103.0686,72.150198 104.574,71.086043 103.75683,71.264941 L 103.15262,71.961341 z"
id="path7753" /><path
style="fill:url(#radialGradient6030);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 37.004018,123.01573 L 55.889189,114.23554 L 55.983351,114.12785 L 43.431509,102.51919 L 43.303819,102.66511 L 37.004018,123.01573 z"
id="path2247" /><path
style="fill:url(#linearGradient6032);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 49.164276,108.94499 C 50.813237,110.44605 51.919724,110.45553 52.509156,110.99209 C 52.60441,111.0788 52.684468,111.1806 52.752951,111.28376 L 97.392942,60.017302 L 90.912418,54.117987 L 46.187555,105.48147 C 46.402303,105.53791 46.60341,105.61601 46.78984,105.78571 C 47.328607,106.27616 47.507653,107.43695 49.164276,108.94499 z"
id="rect2192" /><path
id="path2233"
d="M 54.219542,109.12044 L 52.46936,111.12212 C 53.008112,111.65304 52.901013,112.58765 53.891336,113.48914 C 54.958597,114.4607 55.521514,113.94763 56.213033,114.57361 L 57.984415,112.54762 L 54.219542,109.12044 z"
style="opacity:0.35348834;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
style="fill:url(#linearGradient6034);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 97.156354,59.801933 L 52.550305,111.02955 C 53.091888,111.56309 53.067746,112.40697 54.063129,113.31308 C 55.135841,114.2896 55.618173,113.86936 56.313217,114.49855 L 100.94048,63.246681 L 97.156354,59.801933 z"
id="rect2190" /><path
id="path2231"
d="M 47.641192,104.81388 L 46.74339,105.8407 L 46.708893,105.87829 C 47.156405,106.29847 47.104617,107.26834 48.587189,108.73915 L 48.669479,108.81407 L 49.255813,109.3478 L 49.338111,109.42272 C 50.954363,110.77284 51.884791,110.58998 52.474206,111.12652 L 53.421861,110.03067 L 47.641192,104.81388 z"
style="opacity:0.38604653;fill:#252525;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
id="path2229"
d="M 43.884886,101.37497 L 42.944085,102.33028 C 42.964725,102.34902 42.890972,102.43498 42.911712,102.45386 C 43.334717,102.83895 43.324536,103.82211 44.101499,104.65577 L 44.173503,104.7213 L 44.492381,105.01159 L 44.533531,105.04903 C 45.459298,105.77059 46.235875,105.51261 46.708893,105.87829 L 47.649765,104.8022 L 43.884886,101.37497 z"
style="opacity:0.35348834;fill:#131313;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
style="fill:url(#linearGradient6036);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 44.501995,104.6749 C 45.534224,105.60412 46.240222,105.2854 46.78984,105.78571 L 91.395905,54.558106 L 87.571444,51.076654 L 42.944168,102.32853 C 42.965129,102.34756 42.985792,102.36642 43.006856,102.38561 C 43.436566,102.77677 43.462001,103.73855 44.501995,104.6749 z"
id="rect1315" /><rect
style="fill:url(#linearGradient6038);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
id="rect2069"
width="18.073059"
height="4.2522693"
x="99.380959"
y="-24.64492"
transform="matrix(0.7409346,0.6715772,-0.6655662,0.7463388,0,0)" /><path
style="fill:url(#linearGradient6040);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3849)"
id="path5963"
d="M 82.172836,7.4622769 A 47.495197,0.97142172 0 0 1 34.677639,8.4336987 47.495197,0.97142172 0 0 1 -12.817558,7.4622769 47.495197,0.97142172 0 0 1 34.677639,6.4908552 47.495197,0.97142172 0 0 1 82.172836,7.4622769 Z"
transform="matrix(0.3854946,-0.4403693,-1.7345162,-1.5764895,62.874028,110.46407)" /><path
transform="matrix(0.3184879,-0.3665274,-1.2576415,-1.1452705,66.925762,101.47904)"
d="M 106.56087,7.4622769 A 71.883232,0.4230493 0 0 1 35.242273,7.8853132 71.883232,0.4230493 0 0 1 -37.196723,7.4689227 71.883232,0.4230493 0 0 1 32.983878,7.0393451 71.883232,0.4230493 0 0 1 106.52539,7.448987"
id="path3321"
style="fill:url(#radialGradient6042);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><path
style="fill:url(#linearGradient6044);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 44.721041,119.98334 C 42.826109,119.20518 40.251669,116.04726 38.933132,114.90497 L 36.000001,123.99468 L 44.721041,119.98334 z"
id="path2265" /><path
style="fill:url(#linearGradient6046);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 97.676422,50.957862 C 100.44976,53.115733 102.43124,56.09451 102.54031,56.38058 C 102.64935,56.666651 99.953435,53.334215 97.662066,51.808239 C 95.38822,50.293913 92.211149,50.25601 91.976373,50.071645 C 91.741591,49.887284 90.153759,48.19437 91.594163,48.256871 C 93.100759,48.322243 95.534293,49.292702 97.676422,50.957862 z"
id="path3233" /><path
id="path5045"
d="M 93.653015,51.592952 L 90.879271,54.810988 L 97.361729,60.684685 L 100.13547,57.497892 L 93.653015,51.592952 z"
style="fill:url(#linearGradient6048);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><rect
style="fill:url(#radialGradient6050);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
id="rect3205"
width="7.795228"
height="1.7080779"
x="104.60918"
y="-25.364759"
transform="matrix(0.7404161,0.6721488,-0.6634233,0.7482443,0,0)" /><rect
transform="matrix(0.6942228,0.7197602,-0.7693435,0.6388354,0,0)"
y="-31.829779"
x="94.946716"
height="1.162492"
width="5.3484583"
id="rect2956"
style="fill:url(#radialGradient6052);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /><rect
style="fill:url(#radialGradient6054);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
id="rect2961"
width="5.3448997"
height="1.1647878"
x="-119.96733"
y="-23.501301"
transform="matrix(-0.7514575,-0.6597815,-0.5893147,0.8079036,0,0)" /></g></svg>

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

View File

@@ -0,0 +1,477 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve"
enable-background="new 0 0 128 128"
overflow="visible"
viewBox="0 0 128 128"
height="128"
width="128"
id="Layer_1"
version="1.1"><defs
id="defs105"><filter
id="filter5943"><feGaussianBlur
id="feGaussianBlur5945"
stdDeviation="1.04" /></filter><linearGradient
id="linearGradient6740"><stop
id="stop6742"
offset="0"
style="stop-color:#004d00;stop-opacity:0;" /><stop
style="stop-color:#004d00;stop-opacity:1;"
offset="0.5"
id="stop6748" /><stop
id="stop6744"
offset="1"
style="stop-color:#004d00;stop-opacity:0;" /></linearGradient><linearGradient
y2="65.932846"
x2="102"
y1="118"
x1="102"
gradientTransform="translate(20.000035,-56.000003)"
gradientUnits="userSpaceOnUse"
id="linearGradient6930"
xlink:href="#linearGradient6740" /><linearGradient
id="linearGradient3711"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-23.516129"
y2="-383.9975"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"><stop
offset="0"
style="stop-color:white;stop-opacity:1;"
id="stop3713" /><stop
offset="1"
style="stop-color:white;stop-opacity:0;"
id="stop3715" /></linearGradient><linearGradient
y2="-131.93112"
x2="-45.096584"
y1="-131.93112"
x1="-80.00296"
gradientTransform="matrix(0,0.7388168,-0.7388168,0,-1.5226652,63.255682)"
gradientUnits="userSpaceOnUse"
id="linearGradient8927"
xlink:href="#linearGradient3711" /><filter
id="filter7317"><feGaussianBlur
id="feGaussianBlur7319"
stdDeviation="2.8805897" /></filter><clipPath
id="clipPath5163"
clipPathUnits="userSpaceOnUse"><circle
id="circle5165"
ry="8.0010004"
cy="92"
cx="343.99899"
rx="8.0010004"
r="36"
style="fill:url(#linearGradient5167);fill-opacity:1" /></clipPath><linearGradient
id="linearGradient4296"><stop
style="stop-color:#00ff00;stop-opacity:1"
offset="0"
id="stop4298" /><stop
style="stop-color:#006500;stop-opacity:1"
offset="1"
id="stop4300" /></linearGradient><linearGradient
y2="87.759453"
x2="336.98077"
y1="120.81158"
x1="328.12448"
gradientUnits="userSpaceOnUse"
id="linearGradient4272"
xlink:href="#linearGradient4296" /><linearGradient
id="linearGradient4770"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-12.0029"
y2="-383.9971"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"><stop
offset="0"
style="stop-color:#e5ff00;stop-opacity:1"
id="stop4772" /><stop
offset="1"
style="stop-color:#bff500;stop-opacity:0;"
id="stop4774" /></linearGradient><radialGradient
r="36"
fy="92"
fx="343.99899"
cy="92"
cx="343.99899"
gradientUnits="userSpaceOnUse"
id="radialGradient8920"
xlink:href="#linearGradient4770" /><linearGradient
id="linearGradient5958"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-12.0029"
y2="-383.9971"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"><stop
offset="0"
style="stop-color:#008c00;stop-opacity:1"
id="stop5960" /><stop
offset="1"
style="stop-color:#00bf00;stop-opacity:1"
id="stop5962" /></linearGradient><linearGradient
y2="-373.1243"
x2="-56.357521"
y1="-381.09921"
x1="-86.120354"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"
gradientUnits="userSpaceOnUse"
id="linearGradient8916"
xlink:href="#linearGradient5958" /><filter
id="filter4292"><feGaussianBlur
id="feGaussianBlur4294"
stdDeviation="2.1604423" /></filter><linearGradient
y2="94.5366"
x2="86.5356"
y1="102.3447"
x1="94.3438"
gradientUnits="userSpaceOnUse"
id="linearGradient2291"
xlink:href="#XMLID_9_" /><linearGradient
y2="94.5865"
x2="86.5865"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="linearGradient2293"
xlink:href="#XMLID_10_" /><linearGradient
y2="95.293"
x2="87.293"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="linearGradient2295"
xlink:href="#XMLID_11_" /><linearGradient
y2="96.0002"
x2="88.0002"
y1="104"
x1="96"
gradientUnits="userSpaceOnUse"
id="linearGradient2297"
xlink:href="#XMLID_12_" /><radialGradient
r="139.55859"
cy="112.3047"
cx="102"
gradientTransform="matrix(0.9787234,0,0,0.9818182,1.3617045,1.1636364)"
gradientUnits="userSpaceOnUse"
id="radialGradient2272"
xlink:href="#XMLID_8_" /><radialGradient
r="139.5585"
cy="112.3047"
cx="102"
gradientTransform="translate(2.4e-6,0)"
gradientUnits="userSpaceOnUse"
id="radialGradient2275"
xlink:href="#XMLID_7_" /><filter
id="filter3241"><feGaussianBlur
id="feGaussianBlur3243"
stdDeviation="1.0394514" /></filter></defs>
<metadata
id="metadata3">
<ns:sfw>
<ns:slices>
<ns:slice
sliceID="1316743234"
width="128"
height="128"
x="0"
y="0" />
</ns:slices>
<ns:sliceSourceBounds
bottomLeftOrigin="true"
width="128"
height="128"
x="0"
y="0" />
<ns:optimizationSettings>
<ns:targetSettings
fileFormat="PNG24Format"
targetSettingsID="0">
<ns:PNG24Format
interlaced="false"
noMatteColor="false"
matteColor="#FFFFFF"
filtered="false"
transparency="true">
</ns:PNG24Format>
</ns:targetSettings>
<ns:targetSettings
fileFormat="PNG24Format"
targetSettingsID="1696735251">
<ns:PNG24Format
interlaced="false"
noMatteColor="false"
matteColor="#FFFFFF"
filtered="false"
transparency="true">
</ns:PNG24Format>
</ns:targetSettings>
</ns:optimizationSettings>
</ns:sfw>
<rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
<radialGradient
gradientUnits="userSpaceOnUse"
r="139.5585"
cy="112.3047"
cx="102"
id="XMLID_7_">
<stop
id="stop16"
style="stop-color:#00537D"
offset="0" />
<stop
id="stop18"
style="stop-color:#186389"
offset="0.0151" />
<stop
id="stop20"
style="stop-color:#558CA8"
offset="0.0558" />
<stop
id="stop22"
style="stop-color:#89AFC3"
offset="0.0964" />
<stop
id="stop24"
style="stop-color:#B3CCD8"
offset="0.1357" />
<stop
id="stop26"
style="stop-color:#D4E2E9"
offset="0.1737" />
<stop
id="stop28"
style="stop-color:#ECF2F5"
offset="0.2099" />
<stop
id="stop30"
style="stop-color:#FAFCFD"
offset="0.2435" />
<stop
id="stop32"
style="stop-color:#FFFFFF"
offset="0.2722" />
</radialGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
r="139.55859"
cy="112.3047"
cx="102"
id="XMLID_8_">
<stop
id="stop37"
style="stop-color:#535557"
offset="0" />
<stop
id="stop41"
style="stop-color:#898A8C"
offset="0.11366145" />
<stop
id="stop47"
style="stop-color:#ECECEC"
offset="0.20296688" />
<stop
id="stop49"
style="stop-color:#FAFAFA"
offset="0.2363" />
<stop
id="stop51"
style="stop-color:#FFFFFF"
offset="0.2722" />
<stop
id="stop53"
style="stop-color:#FAFAFA"
offset="0.5313" />
<stop
id="stop55"
style="stop-color:#EBECEC"
offset="0.8449" />
<stop
id="stop57"
style="stop-color:#E1E2E3"
offset="1" />
</radialGradient>
<linearGradient
y2="94.5366"
x2="86.5356"
y1="102.3447"
x1="94.3438"
gradientUnits="userSpaceOnUse"
id="XMLID_9_">
<stop
id="stop62"
style="stop-color:#FFFFFF"
offset="0" />
<stop
id="stop64"
style="stop-color:#555753"
offset="1" />
</linearGradient>
<linearGradient
y2="94.5865"
x2="86.5865"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="XMLID_10_">
<stop
id="stop69"
style="stop-color:#FFFFFF"
offset="0" />
<stop
id="stop71"
style="stop-color:#555753"
offset="1" />
</linearGradient>
<linearGradient
y2="95.293"
x2="87.293"
y1="103"
x1="95"
gradientUnits="userSpaceOnUse"
id="XMLID_11_">
<stop
id="stop76"
style="stop-color:#FFFFFF"
offset="0" />
<stop
id="stop78"
style="stop-color:#393B38"
offset="1" />
</linearGradient>
<linearGradient
y2="96.0002"
x2="88.0002"
y1="104"
x1="96"
gradientUnits="userSpaceOnUse"
id="XMLID_12_">
<stop
id="stop83"
style="stop-color:#888A85"
offset="0" />
<stop
id="stop85"
style="stop-color:#8C8E89"
offset="0.0072" />
<stop
id="stop87"
style="stop-color:#ABACA9"
offset="0.0673" />
<stop
id="stop89"
style="stop-color:#C5C6C4"
offset="0.1347" />
<stop
id="stop91"
style="stop-color:#DBDBDA"
offset="0.2115" />
<stop
id="stop93"
style="stop-color:#EBEBEB"
offset="0.3012" />
<stop
id="stop95"
style="stop-color:#F7F7F6"
offset="0.4122" />
<stop
id="stop97"
style="stop-color:#FDFDFD"
offset="0.5679" />
<stop
id="stop99"
style="stop-color:#FFFFFF"
offset="1" />
</linearGradient>
<path
transform="matrix(1.0416667,0,0,1.0357143,-9.9583333,-3.3215342)"
style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter3241)"
d="M 23,9 L 23.040816,121 L 84.172,121 C 84.702,121 85.211,120.789 85.586,120.414 L 118.414,87.586 C 118.789,87.211 119,86.702 119,86.172 L 119,9 L 23,9 z "
id="path6594" /><path
id="path34"
d="M 16.000002,8 L 16.000002,120 L 77.172002,120 C 77.702002,120 78.211002,119.789 78.586002,119.414 L 111.414,86.586 C 111.789,86.211 112,85.702 112,85.172 L 112,8 L 16.000002,8 z "
style="fill:url(#radialGradient2275)" /><path
id="path59"
d="M 18.978725,10 C 18.439449,10 18.000002,10.440836 18.000002,10.981818 L 18.000002,117.01818 C 18.000002,117.56015 18.439449,118 18.978725,118 L 76.891747,118 C 77.149151,118 77.401662,117.89593 77.583704,117.71233 L 109.71323,85.4812 C 109.89626,85.2976 110,85.045273 110,84.787055 L 110,10.981818 C 110,10.440836 109.56153,10 109.02128,10 L 18.978725,10 z "
style="fill:url(#radialGradient2272);fill-opacity:1" /><g
transform="translate(2.4e-6,0)"
id="g1973"><path
d="M 111.414,86.586 C 111.664,86.336 93.035,93 88,93 C 86.346,93 85,94.346 85,96 C 85,101.035 78.336,119.664 78.586,119.414 L 111.414,86.586 z "
id="path66"
style="opacity:0.1;fill:url(#linearGradient2291)" /><path
d="M 111.414,86.586 C 111.789,86.211 97.444,94 88,94 C 86.897,94 86,94.897 86,96 C 86,105.444 78.211,119.789 78.586,119.414 L 111.414,86.586 z "
id="path73"
style="opacity:0.1;fill:url(#linearGradient2293)" /><path
d="M 111.414,86.586 C 111.653,86.347 97.807,95 88,95 C 87.447,95 87,95.447 87,96 C 87,105.807 78.347,119.653 78.586,119.414 L 111.414,86.586 z "
id="path80"
style="opacity:0.1;fill:url(#linearGradient2295)" /><path
d="M 78.586,119.414 C 78.586,119.414 90.5,109.5 96,104 C 101.5,98.5 111.414,86.586 111.414,86.586 C 111.414,86.586 98.25,96 88,96 C 88,106.25 78.586,119.414 78.586,119.414 z "
id="path101"
style="fill:url(#linearGradient2297)" /></g>
<g
transform="translate(9.545815e-6,1.710865e-5)"
id="g3640"><circle
transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45864,35.85043)"
id="circle4274"
ry="8.0010004"
cy="92"
cx="343.99899"
rx="8.0010004"
r="36"
style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter4292)" /><circle
style="fill:url(#linearGradient8916);fill-opacity:1"
r="36"
rx="8.0010004"
cx="343.99899"
cy="92"
ry="8.0010004"
id="circle3581_2_"
transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45864,31.85043)" /><circle
transform="matrix(-0.6438188,0.1725107,-0.1725107,-0.6438188,333.34401,31.887831)"
id="circle4383"
ry="8.0010004"
cy="92"
cx="343.99899"
rx="8.0010004"
r="36"
style="fill:url(#radialGradient8920);fill-opacity:1" /><circle
clip-path="url(#clipPath5163)"
transform="matrix(-0.858425,-0.2300143,-0.2300143,0.858425,412.45864,32.149572)"
id="circle4776"
ry="8.0010004"
cy="92"
cx="343.99899"
rx="8.0010004"
r="36"
style="opacity:0.8;fill:none;fill-opacity:1;stroke:url(#linearGradient4272);stroke-width:6.75138187;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7317)" /><path
style="opacity:0.8;fill:url(#linearGradient8927);fill-opacity:1"
d="M 96.000027,4.1481901 C 84.654311,4.1481901 75.173932,12.159796 72.888913,22.826405 C 77.443574,27.0723 86.085806,29.937514 96.000027,29.937514 C 105.91426,29.937514 114.55648,27.0723 119.11114,22.826405 C 116.82613,12.159796 107.34574,4.1481901 96.000027,4.1481901 z"
id="circle16776" /><g
id="g6850"
transform="translate(-26.000031,-3.999996)"><path
style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6930);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5943)"
d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
id="path4123" /><path
id="rect3232"
d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" /></g></g></svg>

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1000 KiB

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.1 MiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

View File

@@ -0,0 +1,391 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2"
height="128"
width="128">
<defs
id="defs4">
<linearGradient
id="linearGradient3227">
<stop
id="stop3229"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop3231"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3207">
<stop
style="stop-color:#ffffff;stop-opacity:0.48"
offset="0"
id="stop3209" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3211" />
</linearGradient>
<linearGradient
id="linearGradient3195">
<stop
id="stop3197"
offset="0"
style="stop-color:#d3d3d3;stop-opacity:1;" />
<stop
id="stop3199"
offset="1"
style="stop-color:#d3d3d3;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3159">
<stop
id="stop3161"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3163"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2974">
<stop
id="stop2976"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop2978"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient26907"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-12.0029"
y2="-383.9971"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
<stop
offset="0"
style="stop-color:#888a85;stop-opacity:1;"
id="stop26909" />
<stop
offset="1"
style="stop-color:#000000;stop-opacity:1;"
id="stop26911" />
</linearGradient>
<linearGradient
gradientTransform="matrix(-1,0,0,1,127.99347,0)"
gradientUnits="userSpaceOnUse"
y2="64"
x2="72"
y1="-16"
x1="72"
id="linearGradient2963"
xlink:href="#linearGradient26907" />
<radialGradient
r="56"
fy="114.95621"
fx="79.339813"
cy="114.95621"
cx="79.339813"
gradientTransform="matrix(-1,-3.8781302e-8,-2.0820407e-8,0.5714285,127.33328,38.310745)"
gradientUnits="userSpaceOnUse"
id="radialGradient2965"
xlink:href="#linearGradient26907" />
<linearGradient
gradientTransform="matrix(-1,0,0,1,252.99347,0)"
gradientUnits="userSpaceOnUse"
y2="88"
x2="205"
y1="-32"
x1="181"
id="linearGradient2980"
xlink:href="#linearGradient2974" />
<filter
id="filter3550">
<feGaussianBlur
stdDeviation="1.23375"
id="feGaussianBlur3552" />
</filter>
<linearGradient
id="linearGradient3554">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3556" />
<stop
style="stop-color:#dfdfdf;stop-opacity:1"
offset="1"
id="stop3558" />
</linearGradient>
<linearGradient
gradientTransform="matrix(-1,0,0,1,114.56528,2.3017641)"
y2="103.40701"
x2="68.9375"
y1="38.90625"
x1="68.9375"
gradientUnits="userSpaceOnUse"
id="linearGradient3124"
xlink:href="#linearGradient3554" />
<radialGradient
r="29.84375"
fy="66.175667"
fx="62.78125"
cy="66.175667"
cx="62.78125"
gradientTransform="matrix(1.3513697,0,0,1.3513697,-8.6312401,-20.634014)"
gradientUnits="userSpaceOnUse"
id="radialGradient3133"
xlink:href="#linearGradient3207" />
<linearGradient
gradientTransform="matrix(-1,0,0,1,127.99347,0)"
gradientUnits="userSpaceOnUse"
y2="44"
x2="72"
y1="68"
x1="80"
id="linearGradient3165"
xlink:href="#linearGradient3159" />
<linearGradient
y2="88"
x2="205"
y1="-8"
x1="185.04645"
gradientTransform="matrix(-1,0,0,1,253.03992,0)"
gradientUnits="userSpaceOnUse"
id="linearGradient3189"
xlink:href="#linearGradient2974" />
<linearGradient
y2="31"
x2="142.0327"
y1="95"
x1="270.03271"
gradientTransform="matrix(-1,0,0,1,253.05565,0)"
gradientUnits="userSpaceOnUse"
id="linearGradient3191"
xlink:href="#linearGradient2974" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="60"
x2="72"
y1="108"
x1="72"
id="linearGradient3201"
xlink:href="#linearGradient3195" />
<filter
id="filter3221">
<feGaussianBlur
id="feGaussianBlur3223"
stdDeviation="0.2125" />
</filter>
<linearGradient
gradientTransform="translate(0,0.8)"
gradientUnits="userSpaceOnUse"
y2="-8"
x2="88"
y1="112"
x1="88"
id="linearGradient3233"
xlink:href="#linearGradient3227" />
<filter
id="filter3243">
<feGaussianBlur
id="feGaussianBlur3245"
stdDeviation="1.3800491" />
</filter>
<filter
height="1.7275585"
y="-0.36377926"
width="1.8915753"
x="-0.44578766"
id="filter3383">
<feGaussianBlur
id="feGaussianBlur3385"
stdDeviation="1.0041831" />
</filter>
<filter
height="1.8118028"
y="-0.4059014"
width="1.9291719"
x="-0.46458594"
id="filter3387">
<feGaussianBlur
id="feGaussianBlur3389"
stdDeviation="1.0041831" />
</filter>
<filter
height="1.5508662"
y="-0.27543309"
width="1.6885827"
x="-0.34429136"
id="filter3391">
<feGaussianBlur
id="feGaussianBlur3393"
stdDeviation="1.0041831" />
</filter>
<filter
height="1.535564"
y="-0.26778201"
width="1.6765023"
x="-0.33825116"
id="filter3395">
<feGaussianBlur
id="feGaussianBlur3397"
stdDeviation="1.0041831" />
</filter>
<clipPath
id="clipPath3405"
clipPathUnits="userSpaceOnUse">
<path
style="fill:url(#linearGradient3409);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 142.8125,65.03125 C 141.97272,65.789734 141.49347,66.868398 141.49347,68 C 141.49347,69.131602 141.97272,70.210266 142.8125,70.96875 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 185.5,28 z"
id="path3407" />
</clipPath>
<linearGradient
y2="64"
x2="72"
y1="-16"
x1="72"
gradientTransform="translate(129.5,0)"
gradientUnits="userSpaceOnUse"
id="linearGradient3409"
xlink:href="#linearGradient26907" />
<radialGradient
r="3.5625"
fy="31.163853"
fx="185.8528"
cy="31.163853"
cx="185.8528"
gradientTransform="matrix(0.9135171,-0.4068004,1,2.2456148,-16.006057,35.372984)"
gradientUnits="userSpaceOnUse"
id="radialGradient3411"
xlink:href="#linearGradient3159" />
<radialGradient
r="3.5"
fy="31.512632"
fx="241.76289"
cy="31.512632"
cx="241.76289"
gradientTransform="matrix(0.8076259,0.5896951,-1.6428571,2.25,99.016782,-182.84482)"
gradientUnits="userSpaceOnUse"
id="radialGradient3413"
xlink:href="#linearGradient3159" />
<radialGradient
r="2.59375"
fy="105.53125"
fx="243.40625"
cy="105.53125"
cx="243.40625"
gradientTransform="matrix(0.7165883,-0.6974964,1.9764912,2.0305916,-139.5974,61.015368)"
gradientUnits="userSpaceOnUse"
id="radialGradient3415"
xlink:href="#linearGradient3195" />
<radialGradient
r="2.703125"
fy="105.38967"
fx="184.82086"
cy="105.38967"
cx="184.82086"
gradientTransform="matrix(0.7757118,0.6310874,-3.3294798,4.0924865,391.47818,-441.38143)"
gradientUnits="userSpaceOnUse"
id="radialGradient3417"
xlink:href="#linearGradient3195" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
transform="matrix(-1,0,0,1,127.99347,0)"
style="fill:url(#linearGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3243)"
d="M 56,28.8 C 55.00724,28.798369 54.049339,29.165936 53.3125,29.83125 L 13.3125,65.83125 C 12.472723,66.589734 11.993466,67.668398 11.993466,68.8 C 11.993466,69.931602 12.472723,71.010266 13.3125,71.76875 L 53.3125,107.76875 C 54.049339,108.43406 55.00724,108.80163 56,108.8 L 112,108.8 C 114.20905,108.79978 115.99978,107.00905 116,104.8 L 116,32.8 C 115.99978,30.590952 114.20905,28.800221 112,28.8 L 56,28.8 z "
id="path3225" />
<path
id="path2941"
d="M 71.993466,28 C 72.986226,27.998369 73.944127,28.365936 74.680966,29.03125 L 114.68097,65.03125 C 115.52074,65.789734 116,66.868398 116,68 C 116,69.131602 115.52074,70.210266 114.68097,70.96875 L 74.680966,106.96875 C 73.944127,107.63406 72.986226,108.00163 71.993466,108 L 15.993466,108 C 13.784416,107.99978 11.993686,106.20905 11.993466,104 L 11.993466,32 C 11.993686,29.790952 13.784416,28.000221 15.993466,28 L 71.993466,28 z "
style="fill:url(#linearGradient2963);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<g
style="stroke:none"
transform="matrix(-1,0,0,1,257.49347,0)"
clip-path="url(#clipPath3405)"
id="g3399">
<path
style="fill:url(#radialGradient3411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3395)"
d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 181.875,29.875 L 188,36 L 188,28 L 185.5,28 z "
id="path3251" />
<path
style="fill:url(#radialGradient3413);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3391)"
d="M 240,28 L 239.5,35.75 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 240,28 z "
id="path3253" />
<path
style="fill:url(#radialGradient3415);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3387)"
d="M 241.3125,103.0625 L 241.375,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,103.09375 L 241.3125,103.0625 z "
id="path3255" />
<path
style="fill:url(#radialGradient3417);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3383)"
d="M 186.15625,102.375 L 181.75,106 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 185.53125,108 L 186.15625,102.375 z "
id="path3257" />
</g>
<path
id="rect1969"
d="M 71.993466,32 L 111.99347,68 L 71.993466,104 L 15.993466,104 L 15.993466,32 L 71.993466,32 z "
style="fill:url(#radialGradient2965);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
id="path2967"
d="M 71.993466,32 L 111.99347,68 L 107.08722,72.40625 C 99.926016,72.9539 92.539626,73.25 84.993466,73.25 C 59.303776,73.25 35.520926,69.930267 15.993466,64.28125 L 15.993466,32 L 71.993466,32 z "
style="fill:url(#linearGradient2980);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
transform="matrix(-1,0,0,1,127.99347,0)"
style="fill:none;fill-opacity:1;stroke:url(#radialGradient3133);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3550)"
d="M 59.17819,37.864264 L 47.36569,49.645514 L 64.42819,66.708014 L 47.36569,83.739264 L 59.17819,95.551764 L 76.20944,78.489264 L 93.27194,95.551764 L 105.05319,83.739264 L 88.02194,66.708014 L 105.05319,49.645514 L 93.27194,37.864264 L 76.20944,54.895514 L 59.17819,37.864264 z "
id="path3528" />
<path
id="rect3376"
d="M 68.815276,37.864264 L 80.627776,49.645514 L 63.565276,66.708014 L 80.627776,83.739264 L 68.815276,95.551764 L 51.784026,78.489264 L 34.721526,95.551764 L 22.940276,83.739264 L 39.971526,66.708014 L 22.940276,49.645514 L 34.721526,37.864264 L 51.784026,54.895514 L 68.815276,37.864264 z "
style="fill:url(#linearGradient3124);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3152"
d="M 68.805966,37.875 L 80.618466,49.65625 L 63.555966,66.71875 L 69.712216,72.84375 C 58.400522,72.251707 47.563106,71.012655 37.462216,69.21875 L 39.962216,66.71875 L 22.930966,49.65625 L 34.712216,37.875 L 51.774716,54.90625 L 68.805966,37.875 z "
style="fill:url(#linearGradient3165);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3169"
d="M 72.040986,32 L 112.04099,68 L 72.040986,33 L 16.040986,33 L 16.040986,32 L 72.040986,32 z "
style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
id="path3177"
d="M 16.960436,63.28125 C 36.487899,68.930267 60.270749,72.25 85.960439,72.25 C 93.506599,72.25 100.89299,71.9539 108.05419,71.40625 L 111.96044,67.90625 L 112.05419,68 L 107.14794,72.40625 C 99.986739,72.9539 92.600349,73.25 85.054189,73.25 C 59.364499,73.25 35.581649,69.930267 16.054186,64.28125 L 16.054186,32 L 16.960436,63.28125 z "
style="fill:url(#linearGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
transform="matrix(-1,0,0,1,127.99347,0)"
style="opacity:0.60399996;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3201);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3221)"
d="M 56,32 L 16,68 L 56,104 L 112,104 L 112,32 L 56,32 z "
id="path3193" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2"
height="128"
width="128">
<defs
id="defs4">
<linearGradient
id="linearGradient3227">
<stop
id="stop3229"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop3231"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3207">
<stop
style="stop-color:#ffffff;stop-opacity:0.48"
offset="0"
id="stop3209" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop3211" />
</linearGradient>
<linearGradient
id="linearGradient3195">
<stop
id="stop3197"
offset="0"
style="stop-color:#d3d3d3;stop-opacity:1;" />
<stop
id="stop3199"
offset="1"
style="stop-color:#d3d3d3;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3159">
<stop
id="stop3161"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3163"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient2974">
<stop
id="stop2976"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop2978"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient26907"
gradientUnits="userSpaceOnUse"
x1="-84.002403"
y1="-383.9971"
x2="-12.0029"
y2="-383.9971"
gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)">
<stop
offset="0"
style="stop-color:#888a85;stop-opacity:1;"
id="stop26909" />
<stop
offset="1"
style="stop-color:#000000;stop-opacity:1;"
id="stop26911" />
</linearGradient>
<linearGradient
gradientUnits="userSpaceOnUse"
y2="64"
x2="72"
y1="-16"
x1="72"
id="linearGradient2963"
xlink:href="#linearGradient26907" />
<radialGradient
r="56"
fy="114.95621"
fx="79.339813"
cy="114.95621"
cx="79.339813"
gradientTransform="matrix(1,-3.8781302e-8,2.0820407e-8,0.5714285,0.6601855,38.310745)"
gradientUnits="userSpaceOnUse"
id="radialGradient2965"
xlink:href="#linearGradient26907" />
<linearGradient
gradientTransform="translate(-125,0)"
gradientUnits="userSpaceOnUse"
y2="88"
x2="205"
y1="-32"
x1="181"
id="linearGradient2980"
xlink:href="#linearGradient2974" />
<filter
id="filter3550">
<feGaussianBlur
stdDeviation="1.23375"
id="feGaussianBlur3552" />
</filter>
<linearGradient
id="linearGradient3554">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3556" />
<stop
style="stop-color:#dfdfdf;stop-opacity:1"
offset="1"
id="stop3558" />
</linearGradient>
<linearGradient
gradientTransform="translate(13.42819,2.3017641)"
y2="103.40701"
x2="68.9375"
y1="38.90625"
x1="68.9375"
gradientUnits="userSpaceOnUse"
id="linearGradient3124"
xlink:href="#linearGradient3554" />
<radialGradient
r="29.84375"
fy="66.175667"
fx="62.78125"
cy="66.175667"
cx="62.78125"
gradientTransform="matrix(1.3513697,0,0,1.3513697,-8.6312401,-20.634014)"
gradientUnits="userSpaceOnUse"
id="radialGradient3133"
xlink:href="#linearGradient3207" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="44"
x2="72"
y1="68"
x1="80"
id="linearGradient3165"
xlink:href="#linearGradient3159" />
<linearGradient
y2="88"
x2="205"
y1="-8"
x1="185.04645"
gradientTransform="translate(-125.04645,0)"
gradientUnits="userSpaceOnUse"
id="linearGradient3189"
xlink:href="#linearGradient2974" />
<linearGradient
y2="31"
x2="142.0327"
y1="95"
x1="270.03271"
gradientTransform="translate(-125.06218,0)"
gradientUnits="userSpaceOnUse"
id="linearGradient3191"
xlink:href="#linearGradient2974" />
<linearGradient
gradientUnits="userSpaceOnUse"
y2="60"
x2="72"
y1="108"
x1="72"
id="linearGradient3201"
xlink:href="#linearGradient3195" />
<filter
id="filter3221">
<feGaussianBlur
id="feGaussianBlur3223"
stdDeviation="0.2125" />
</filter>
<linearGradient
gradientTransform="translate(0,0.8)"
gradientUnits="userSpaceOnUse"
y2="-8"
x2="88"
y1="112"
x1="88"
id="linearGradient3233"
xlink:href="#linearGradient3227" />
<filter
id="filter3243">
<feGaussianBlur
id="feGaussianBlur3245"
stdDeviation="1.3800491" />
</filter>
<filter
height="1.7275585"
y="-0.36377926"
width="1.8915753"
x="-0.44578766"
id="filter3383">
<feGaussianBlur
id="feGaussianBlur3385"
stdDeviation="1.0041831" />
</filter>
<filter
height="1.8118028"
y="-0.4059014"
width="1.9291719"
x="-0.46458594"
id="filter3387">
<feGaussianBlur
id="feGaussianBlur3389"
stdDeviation="1.0041831" />
</filter>
<filter
height="1.5508662"
y="-0.27543309"
width="1.6885827"
x="-0.34429136"
id="filter3391">
<feGaussianBlur
id="feGaussianBlur3393"
stdDeviation="1.0041831" />
</filter>
<filter
height="1.535564"
y="-0.26778201"
width="1.6765023"
x="-0.33825116"
id="filter3395">
<feGaussianBlur
id="feGaussianBlur3397"
stdDeviation="1.0041831" />
</filter>
<clipPath
id="clipPath3405"
clipPathUnits="userSpaceOnUse">
<path
style="fill:url(#linearGradient3409);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 142.8125,65.03125 C 141.97272,65.789734 141.49347,66.868398 141.49347,68 C 141.49347,69.131602 141.97272,70.210266 142.8125,70.96875 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 185.5,28 z"
id="path3407" />
</clipPath>
<linearGradient
y2="64"
x2="72"
y1="-16"
x1="72"
gradientTransform="translate(129.5,0)"
gradientUnits="userSpaceOnUse"
id="linearGradient3409"
xlink:href="#linearGradient26907" />
<radialGradient
r="3.5625"
fy="31.163853"
fx="185.8528"
cy="31.163853"
cx="185.8528"
gradientTransform="matrix(0.9135171,-0.4068004,1,2.2456148,-16.006057,35.372984)"
gradientUnits="userSpaceOnUse"
id="radialGradient3411"
xlink:href="#linearGradient3159" />
<radialGradient
r="3.5"
fy="31.512632"
fx="241.76289"
cy="31.512632"
cx="241.76289"
gradientTransform="matrix(0.8076259,0.5896951,-1.6428571,2.25,99.016782,-182.84482)"
gradientUnits="userSpaceOnUse"
id="radialGradient3413"
xlink:href="#linearGradient3159" />
<radialGradient
r="2.59375"
fy="105.53125"
fx="243.40625"
cy="105.53125"
cx="243.40625"
gradientTransform="matrix(0.7165883,-0.6974964,1.9764912,2.0305916,-139.5974,61.015368)"
gradientUnits="userSpaceOnUse"
id="radialGradient3415"
xlink:href="#linearGradient3195" />
<radialGradient
r="2.703125"
fy="105.38967"
fx="184.82086"
cy="105.38967"
cx="184.82086"
gradientTransform="matrix(0.7757118,0.6310874,-3.3294798,4.0924865,391.47818,-441.38143)"
gradientUnits="userSpaceOnUse"
id="radialGradient3417"
xlink:href="#linearGradient3195" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
style="fill:url(#linearGradient3233);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3243)"
d="M 56,28.8 C 55.00724,28.798369 54.049339,29.165936 53.3125,29.83125 L 13.3125,65.83125 C 12.472723,66.589734 11.993466,67.668398 11.993466,68.8 C 11.993466,69.931602 12.472723,71.010266 13.3125,71.76875 L 53.3125,107.76875 C 54.049339,108.43406 55.00724,108.80163 56,108.8 L 112,108.8 C 114.20905,108.79978 115.99978,107.00905 116,104.8 L 116,32.8 C 115.99978,30.590952 114.20905,28.800221 112,28.8 L 56,28.8 z"
id="path3225" />
<path
id="path2941"
d="M 56,28 C 55.00724,27.998369 54.049339,28.365936 53.3125,29.03125 L 13.3125,65.03125 C 12.472723,65.789734 11.993466,66.868398 11.993466,68 C 11.993466,69.131602 12.472723,70.210266 13.3125,70.96875 L 53.3125,106.96875 C 54.049339,107.63406 55.00724,108.00163 56,108 L 112,108 C 114.20905,107.99978 115.99978,106.20905 116,104 L 116,32 C 115.99978,29.790952 114.20905,28.000221 112,28 L 56,28 z"
style="fill:url(#linearGradient2963);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<g
style="stroke:none"
transform="translate(-129.5,0)"
clip-path="url(#clipPath3405)"
id="g3399">
<path
style="fill:url(#radialGradient3411);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3395)"
d="M 185.5,28 C 184.50724,27.998369 183.54934,28.365936 182.8125,29.03125 L 181.875,29.875 L 188,36 L 188,28 L 185.5,28 z"
id="path3251" />
<path
style="fill:url(#radialGradient3413);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3391)"
d="M 240,28 L 239.5,35.75 L 245.5,32 C 245.49978,29.790952 243.70905,28.000221 241.5,28 L 240,28 z"
id="path3253" />
<path
style="fill:url(#radialGradient3415);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3387)"
d="M 241.3125,103.0625 L 241.375,108 L 241.5,108 C 243.70905,107.99978 245.49978,106.20905 245.5,104 L 245.5,103.09375 L 241.3125,103.0625 z"
id="path3255" />
<path
style="fill:url(#radialGradient3417);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3383)"
d="M 186.15625,102.375 L 181.75,106 L 182.8125,106.96875 C 183.54934,107.63406 184.50724,108.00163 185.5,108 L 185.53125,108 L 186.15625,102.375 z"
id="path3257" />
</g>
<path
id="rect1969"
d="M 56,32 L 16,68 L 56,104 L 112,104 L 112,32 L 56,32 z"
style="fill:url(#radialGradient2965);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
id="path2967"
d="M 56,32 L 16,68 L 20.90625,72.40625 C 28.06745,72.9539 35.45384,73.25 43,73.25 C 68.68969,73.25 92.47254,69.930267 112,64.28125 L 112,32 L 56,32 z"
style="fill:url(#linearGradient2980);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:1;stroke:url(#radialGradient3133);stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter3550)"
d="M 59.17819,37.864264 L 47.36569,49.645514 L 64.42819,66.708014 L 47.36569,83.739264 L 59.17819,95.551764 L 76.20944,78.489264 L 93.27194,95.551764 L 105.05319,83.739264 L 88.02194,66.708014 L 105.05319,49.645514 L 93.27194,37.864264 L 76.20944,54.895514 L 59.17819,37.864264 z"
id="path3528" />
<path
id="rect3376"
d="M 59.17819,37.864264 L 47.36569,49.645514 L 64.42819,66.708014 L 47.36569,83.739264 L 59.17819,95.551764 L 76.20944,78.489264 L 93.27194,95.551764 L 105.05319,83.739264 L 88.02194,66.708014 L 105.05319,49.645514 L 93.27194,37.864264 L 76.20944,54.895514 L 59.17819,37.864264 z"
style="fill:url(#linearGradient3124);fill-opacity:1;stroke:none;stroke-width:0.88499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3152"
d="M 59.1875 37.875 L 47.375 49.65625 L 64.4375 66.71875 L 58.28125 72.84375 C 69.592944 72.251707 80.43036 71.012655 90.53125 69.21875 L 88.03125 66.71875 L 105.0625 49.65625 L 93.28125 37.875 L 76.21875 54.90625 L 59.1875 37.875 z "
style="fill:url(#linearGradient3165);fill-opacity:1;stroke:none;stroke-width:0.88499998999999985;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
id="path3169"
d="M 55.95248,32 L 15.95248,68 L 55.95248,33 L 111.95248,33 L 111.95248,32 L 55.95248,32 z"
style="fill:url(#linearGradient3189);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
id="path3177"
d="M 111.03303,63.28125 C 91.505567,68.930267 67.722717,72.25 42.033027,72.25 C 34.486867,72.25 27.100477,71.9539 19.939277,71.40625 L 16.033027,67.90625 L 15.939277,68 L 20.845527,72.40625 C 28.006727,72.9539 35.393117,73.25 42.939277,73.25 C 68.628967,73.25 92.411817,69.930267 111.93928,64.28125 L 111.93928,32 L 111.03303,63.28125 z"
style="fill:url(#linearGradient3191);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3201);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1;filter:url(#filter3221);opacity:0.604"
d="M 56,32 L 16,68 L 56,104 L 112,104 L 112,32 L 56,32 z"
id="path3193" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 648 KiB

View File

@@ -0,0 +1,265 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg1307"
height="128"
width="128">
<defs
id="defs1309">
<linearGradient
id="linearGradient3588">
<stop
id="stop3590"
offset="0"
style="stop-color:#171717;stop-opacity:1;" />
<stop
id="stop3592"
offset="1"
style="stop-color:#171717;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3578">
<stop
id="stop3580"
offset="0"
style="stop-color:#a2a2a2;stop-opacity:1;" />
<stop
id="stop3582"
offset="1"
style="stop-color:#e0e0e0;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3552">
<stop
id="stop3554"
offset="0"
style="stop-color:#f9f9f9;stop-opacity:1;" />
<stop
id="stop3556"
offset="1"
style="stop-color:#f9f9f9;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3513">
<stop
id="stop3515"
offset="0"
style="stop-color:#f9f9f9;stop-opacity:1;" />
<stop
id="stop3517"
offset="1"
style="stop-color:#d1d1d1;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3148">
<stop
id="stop3150"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop3152"
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.222464,0,0,0.133333,-18.14476,131.7138)"
r="80.225449"
fy="156.53989"
fx="81.921944"
cy="151.97745"
cx="81.562538"
id="radialGradient3154"
xlink:href="#linearGradient3148" />
<linearGradient
y2="96.644386"
x2="95.164795"
y1="49.883904"
x1="98.85305"
gradientTransform="matrix(1.435673,0,0,1.435673,-52.80851,-23.00559)"
gradientUnits="userSpaceOnUse"
id="linearGradient2424"
xlink:href="#linearGradient3578" />
<radialGradient
r="8.5"
fy="31.89937"
fx="-56.712421"
cy="33.918919"
cx="-56.591835"
gradientTransform="matrix(3.575392,2.760544e-6,-4.86208e-6,6.29725,322.2336,-134.8612)"
gradientUnits="userSpaceOnUse"
id="radialGradient2426"
xlink:href="#linearGradient3552" />
<radialGradient
r="17.497653"
fy="72.53923"
fx="100.57152"
cy="72.53923"
cx="100.57152"
gradientTransform="matrix(1.435673,0,0,1.792563,-52.80851,-49.67405)"
gradientUnits="userSpaceOnUse"
id="radialGradient2430"
xlink:href="#linearGradient3588" />
<radialGradient
r="11.0625"
fy="34.71875"
fx="-68.375"
cy="34.71875"
cx="-68.375"
gradientTransform="matrix(3.183957,0,0,4.324271,313.471,-67.08613)"
gradientUnits="userSpaceOnUse"
id="radialGradient2432"
xlink:href="#linearGradient3513" />
<radialGradient
r="12.268356"
fy="65.021912"
fx="-190.90878"
cy="65.021912"
cx="-190.90878"
gradientTransform="matrix(0.444461,0.444461,-1.29637,1.296386,192.5244,112.5809)"
gradientUnits="userSpaceOnUse"
id="radialGradient3324"
xlink:href="#linearGradient3552" />
</defs>
<metadata
id="metadata1312">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
transform="matrix(-0.621085,0,0,0.560668,114.8089,37.21709)"
d="M 179.63529 151.97745 A 98.072754 98.072754 0 1 1 -16.510216,151.97745 A 98.072754 98.072754 0 1 1 179.63529 151.97745 z"
id="path3146"
style="opacity:0.2213115;fill:url(#radialGradient3154);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -228.9185,-67.271774 L -228.9185,-70.066483 L -228.9185,-67.271774 z "
id="path2276" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 65.6909,-129.46266 L 65.6909,-132.25737 L 65.6909,-129.46266 z "
id="path2191" />
<path
id="path2860"
d="M -52.477129,-94.134134 C -57.816729,-94.134134 -62.133379,-89.817481 -62.133379,-84.477884 L -62.133379,-76.102884 L -110.38338,-76.102884 C -115.72298,-76.102884 -120.03963,-71.817477 -120.03963,-66.477884 L -120.03963,-25.727876 C -120.03963,-20.388286 -115.72298,-16.102876 -110.38338,-16.102876 L -52.477129,-16.102876 L -14.91463,-16.102876 L -13.85213,-16.102876 C -8.51253,-16.102876 -4.22713,-20.388276 -4.22713,-25.727876 L -4.22713,-84.477884 C -4.22713,-89.817479 -8.51254,-94.134134 -13.85213,-94.134134 L -52.477129,-94.134134 z "
style="opacity:0.06147539;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -91.3174,-199.09776 L -91.3174,-201.89247 L -91.3174,-199.09776 z "
id="path2985" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -210.8196,-285.72801 L -210.8196,-288.52272 L -210.8196,-285.72801 z "
id="path3206" />
<g
transform="translate(-27.868,-141.1464)"
style="display:inline"
id="layer4" />
<g
transform="translate(-27.868,-141.1464)"
style="display:inline"
id="layer5" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 35.7718,-219.97274 L 35.7718,-222.76745 L 35.7718,-219.97274 z "
id="path3946" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -56.852646,-146.07906 L -56.852646,-147.6058 L -56.852646,-146.07906 z "
id="path1561" />
<rect
y="-202.67905"
x="-114.33738"
height="0"
width="1"
id="rect1327"
style="opacity:0.57786889;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.63199997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<rect
y="-230.20667"
x="-149.4642"
height="0"
width="1"
id="rect2482"
style="opacity:0.57786889;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.63199997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M -308.40162,-303.42273 L -308.40162,-306.21744 L -308.40162,-303.42273 z "
id="path2494" />
<g
id="g4640"
transform="matrix(-0.782995,0,0,0.650879,-2631.26,383.0949)"
style="opacity:0.40163933" />
<g
style="opacity:0.40163933"
transform="matrix(-0.782995,0,0,0.650879,-2631.26,383.0949)"
id="g4646" />
<g
style="opacity:0.40163933"
transform="matrix(1,0,0,0.650879,569.7028,390.4227)"
id="g4730" />
<g
id="g4748"
transform="matrix(1,0,0,0.650879,569.7028,390.4227)"
style="opacity:0.40163933" />
<g
transform="matrix(1.829328,0,0,1.829328,-108.7592,-94.62028)"
id="g2416">
<path
id="path3332"
d="M 95.60444,53.400757 C 93.029991,53.400757 90.991837,55.438908 90.991837,58.013354 L 90.991837,81.583386 L 75.548932,81.583386 C 72.974484,81.583386 70.86537,83.621536 70.86537,86.195981 L 70.86537,111.51942 C 70.86537,114.09387 72.974496,116.13202 75.548932,116.13202 L 116.49461,116.13202 C 119.06904,116.13202 121.10719,114.09387 121.10719,111.51942 L 121.10719,88.2436 L 121.10719,58.013354 C 121.10719,55.438908 119.06904,53.400757 116.49461,53.400757 L 95.60444,53.400757 z "
style="opacity:0.09426228;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:3.27989292;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="opacity:0.15573772;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:2.1865952;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 95.60444,53.182097 C 93.029991,53.182097 90.991837,55.220248 90.991837,57.794694 L 90.991837,81.364726 L 75.548932,81.364726 C 72.974484,81.364726 70.86537,83.402876 70.86537,85.977321 L 70.86537,111.30078 C 70.86537,113.87523 72.974496,115.91338 75.548932,115.91338 L 116.49461,115.91338 C 119.06904,115.91338 121.10719,113.87523 121.10719,111.30078 L 121.10719,88.02494 L 121.10719,57.794694 C 121.10719,55.220248 119.06904,53.182097 116.49461,53.182097 L 95.60444,53.182097 z "
id="path3330" />
<path
id="path3328"
d="M 95.60444,53.127432 C 93.029991,53.127432 90.991837,55.165583 90.991837,57.740029 L 90.991837,81.310061 L 75.548932,81.310061 C 72.974484,81.310061 70.86537,83.348211 70.86537,85.922656 L 70.86537,111.24612 C 70.86537,113.82057 72.974496,115.85872 75.548932,115.85872 L 116.49461,115.85872 C 119.06904,115.85872 121.10719,113.82057 121.10719,111.24612 L 121.10719,87.970275 L 121.10719,57.740029 C 121.10719,55.165583 119.06904,53.127432 116.49461,53.127432 L 95.60444,53.127432 z "
style="opacity:0.20901639;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:1.0932976;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="opacity:0.29098361;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:0.5466488;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 95.60444,53.018102 C 93.029991,53.018102 90.991837,55.056253 90.991837,57.630699 L 90.991837,81.200731 L 75.548932,81.200731 C 72.974484,81.200731 70.86537,83.238881 70.86537,85.813326 L 70.86537,111.1368 C 70.86537,113.71125 72.974496,115.7494 75.548932,115.7494 L 116.49461,115.7494 C 119.06904,115.7494 121.10719,113.71125 121.10719,111.1368 L 121.10719,87.860945 L 121.10719,57.630699 C 121.10719,55.056253 119.06904,53.018102 116.49461,53.018102 L 95.60444,53.018102 z "
id="path3326" />
<path
id="path3525"
d="M 95.60444,52.908772 C 93.029991,52.908772 90.991837,54.946923 90.991837,57.521369 L 90.991837,81.091401 L 75.548932,81.091401 C 72.974484,81.091401 70.86537,83.129551 70.86537,85.703996 L 70.86537,111.02748 C 70.86537,113.60193 72.974496,115.64008 75.548932,115.64008 L 116.49461,115.64008 C 119.06904,115.64008 121.10719,113.60193 121.10719,111.02748 L 121.10719,87.751615 L 121.10719,57.521369 C 121.10719,54.946923 119.06904,52.908772 116.49461,52.908772 L 95.60444,52.908772 z "
style="opacity:1;fill:url(#linearGradient2424);fill-opacity:1;fill-rule:nonzero;stroke:#2f2f2f;stroke-width:0.2081726;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="opacity:1;fill:url(#radialGradient2426);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.745;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 120.65928,55.532284 C 103.85922,64.2518 86.297674,73.384954 86.297674,73.384954 L 119.31553,114.65726 C 120.3972,113.81813 121.10719,112.50586 121.10719,111.00993 L 121.10719,87.78227 L 121.10719,57.515915 C 121.10719,56.797214 120.94429,56.134719 120.65928,55.532284 z "
id="path3529" />
<path
id="path3560"
transform="matrix(0.546649,0,0,0.546649,59.45309,51.72406)"
d="M 20.875 90.46875 L 20.875 108.5 C 20.874999 113.20951 24.728012 116.9375 29.4375 116.9375 L 41.9375 116.9375 L 41.9375 92.53125 C 41.9375 91.397541 41.03996 90.46875 39.90625 90.46875 L 20.875 90.46875 z "
style="opacity:1;fill:url(#radialGradient3324);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.20680515;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
<path
style="opacity:0.50819672;fill:url(#radialGradient2430);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.145;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 95.60444,52.908772 C 93.029991,52.908772 90.991837,54.946923 90.991837,57.521369 L 90.991837,81.091401 L 75.548932,81.091401 C 72.974484,81.091401 70.86537,83.129551 70.86537,85.703996 C 71.093814,111.23269 104.35932,108.60489 121.10719,109.28671 L 121.10719,57.521369 C 121.10719,54.946923 119.06904,52.908772 116.49461,52.908772 L 95.60444,52.908772 z "
id="path3586" />
<path
style="opacity:1;fill:url(#radialGradient2432);fill-opacity:1;fill-rule:nonzero;stroke:white;stroke-width:0.50166649;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
d="M 97.559913,55.482264 C 95.238516,55.482264 93.400696,57.320085 93.400696,59.641487 L 93.400696,83.459018 L 78.200754,83.459018 C 75.87935,83.459018 73.977541,85.296838 73.977541,87.618243 L 73.977541,107.17066 C 73.977541,109.49206 75.87936,111.32989 78.200754,111.32989 L 113.25551,111.32989 C 115.57691,111.32989 117.41471,109.49206 117.41471,107.17066 L 117.41471,59.641487 C 117.41471,57.320085 115.57689,55.482264 113.25551,55.482264 L 97.559913,55.482264 z "
id="rect2615" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:black;stroke-width:1.59176552px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
d="M 108.68474,81.504901 L 108.68474,101.7286 L 96.638326,101.7286 L 101.92463,98.336426 L 96.676687,101.7286 L 101.92114,105.06131"
id="path3521" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg6"
version="1.1"
viewBox="0 0 16 16">
<metadata
id="metadata10">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs3051">
<style
id="current-color-scheme"
type="text/css">
.ColorScheme-Text {
color:#f2f2f2;
}
.ColorScheme-NegativeText {
color:#da4453;
}
</style>
</defs>
<path
id="path4"
d="M 8,2 A 6,6 0 0 0 2,8 6,6 0 0 0 8,14 6,6 0 0 0 14,8 6,6 0 0 0 8,2 Z M 5.70703,5 8,7.29297 10.29297,5 11,5.70703 8.70703,8 11,10.29297 10.29297,11 8,8.70703 5.70703,11 5,10.29297 7.29297,8 5,5.70703 5.70703,5 Z"
class="ColorScheme-NegativeText"
style="fill:#ffffff;fill-opacity:1;stroke:none" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

View File

@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0"
id="svg2"
height="88"
width="88">
<defs
id="defs4">
<linearGradient
id="linearGradient3291">
<stop
id="stop3293"
offset="0"
style="stop-color:#000000;stop-opacity:1;" />
<stop
id="stop3295"
offset="1"
style="stop-color:#7c7c7c;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient3283">
<stop
id="stop3285"
offset="0"
style="stop-color:#ffffff;stop-opacity:1;" />
<stop
id="stop3287"
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
id="linearGradient3186">
<stop
id="stop3188"
offset="0"
style="stop-color:#c8c8c8;stop-opacity:1" />
<stop
id="stop3190"
offset="1"
style="stop-color:#e4e4e4;stop-opacity:1" />
</linearGradient>
<linearGradient
gradientTransform="matrix(1.3450524,0,0,1.3258599,-12.632831,-10.71217)"
spreadMethod="pad"
gradientUnits="userSpaceOnUse"
y2="16.733448"
x2="28"
y1="66.467087"
x1="28"
id="linearGradient3192"
xlink:href="#linearGradient3186" />
<radialGradient
spreadMethod="reflect"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.2144523,0,0,1.5150244,-147.16712,-16.340984)"
r="18"
fy="26.616402"
fx="45.310146"
cy="26.616402"
cx="45.310146"
id="radialGradient3289"
xlink:href="#linearGradient3283" />
<radialGradient
spreadMethod="reflect"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.6061249,0,0,1.8181818,-27.881746,-36)"
r="22"
fy="44"
fx="46"
cy="44"
cx="46"
id="radialGradient3297"
xlink:href="#linearGradient3291" />
</defs>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<path
style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient3297);stroke-width:12;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;opacity:0.6"
d="M 62,40 L 62,63 C 62,83 30,83 30,63 L 30,22 C 30,6 54,6 54,22 L 54,49 C 46,61 46,61 38,49 L 38,41.5"
id="path3279" />
<path
id="path2160"
d="M 62,40 L 62,63 C 62,83 30,83 30,63 L 30,22 C 30,6 54,6 54,22 L 54,49 C 46,61 46,61 38,49 L 38,42"
style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient3192);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<path
style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient3289);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 62,40 L 62,63 C 62,83 30,83 30,63 L 30,22 C 30,6 54,6 54,22 L 54,49 C 46,61 46,61 38,49 L 38,42"
id="path3281" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

Some files were not shown because too many files have changed in this diff Show More