Commit 4ceb8da2 authored by dmorley's avatar dmorley
Browse files

Cleanup for release

parent 8f8aeb32
# Changelog
The format is based on [Keep a Changelog] and this project adheres to [Semantic Versioning].
## [Unreleased]
### Added
### Changed
### Deprecated
### Removed
### Fixed
### Security
## [2.4.1] - 2018-10-18
:exclamation: DB migrations required! (see [SQL migration script][2.4.1-sql-migration])
### Changed
- Pod wizard switch from language to users (#195)
- Files renamed to change wording from pull to update to be more clear (#190)
- Use SVG for icons
### Removed
- userurl remove from table in DB, was unused
### Fixed
- Users chart fix (#194)
- Dev branch detection (#185) (#193)
- User deletion fixed (#198)
- Jump to domain fixed (#192)
- Updated yarn and composer packages - update both on git pull
## [2.4.0] - 2018-09-03
:exclamation: DB migrations required! (see [SQL migration script][2.4.0-sql-migration])
:exclimation: config.php rewritten - requires migration
:exclamation: `config.php` rewritten - requires migration
### Added
- Added bootstrapping to simplify initialisation of config and database
- Config syntax has changed to array style (#155)
......@@ -28,12 +51,10 @@ The format is based on [Keep a Changelog] and this project adheres to [Semantic
- Backup script rewrite
- Store services as json array
- Paging can be changed to some or all on advanced view
### Deprecated
### Removed
### Fixed
- Notify podmins just once at 50 when pod failing (#186)
- Add missing meta and PHP module requirements to `composer.json`
### Security
## [2.3.1] - 2018-08-05
### Added
......@@ -89,11 +110,14 @@ The format is based on [Keep a Changelog] and this project adheres to [Semantic
### Fixed
- Fix ipv6
[2.4.1-sql-migration]: https://git.feneas.org/diasporg/Poduptime/blob/master/db/migrations/2.4.0-2.4.1.sql
[2.4.0-sql-migration]: https://git.feneas.org/diasporg/Poduptime/blob/master/db/migrations/2.3.0-2.4.0.sql
[2.3.0-sql-migration]: https://git.feneas.org/diasporg/Poduptime/blob/master/db/migrations/2.2.0-2.3.0.sql
[2.2.0-sql-migration]: https://git.feneas.org/diasporg/Poduptime/blob/master/db/migrations/2.1.4-2.2.0.sql
[Unreleased]: https://git.feneas.org/diasporg/Poduptime/compare/master...develop
[2.4.1]: https://git.feneas.org/diasporg/Poduptime/compare/2.4.0...2.4.1
[2.4.0]: https://git.feneas.org/diasporg/Poduptime/compare/2.3.1...2.4.0
[2.3.1]: https://git.feneas.org/diasporg/Poduptime/compare/2.3.0...2.3.1
[2.3.0]: https://git.feneas.org/diasporg/Poduptime/compare/v2.2.0...2.3.0
[2.2.0]: https://git.feneas.org/diasporg/Poduptime/compare/2.1.3...v2.2.0
......
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "fda17d0424e9e1c45facb411a5473f27",
"content-hash": "1ce82c5590f5a4ce2bf5a2b8812da707",
"packages": [
{
"name": "commerceguys/enum",
......@@ -46,16 +46,16 @@
},
{
"name": "composer/ca-bundle",
"version": "1.1.2",
"version": "1.1.3",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "46afded9720f40b9dc63542af4e3e43a1177acb0"
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/46afded9720f40b9dc63542af4e3e43a1177acb0",
"reference": "46afded9720f40b9dc63542af4e3e43a1177acb0",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/8afa52cd417f4ec417b4bfe86b68106538a87660",
"reference": "8afa52cd417f4ec417b4bfe86b68106538a87660",
"shasum": ""
},
"require": {
......@@ -98,20 +98,20 @@
"ssl",
"tls"
],
"time": "2018-08-08T08:57:40+00:00"
"time": "2018-10-18T06:09:13+00:00"
},
{
"name": "detectlanguage/detectlanguage",
"version": "2.2.0",
"version": "v2.2.1",
"source": {
"type": "git",
"url": "https://github.com/detectlanguage/detectlanguage-php.git",
"reference": "a410dc1cfb31a9e332bd779c1cb27b1af2ab9b18"
"reference": "6d989413821a6a1eade40f3d6bfeddf82a29aa7f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/detectlanguage/detectlanguage-php/zipball/a410dc1cfb31a9e332bd779c1cb27b1af2ab9b18",
"reference": "a410dc1cfb31a9e332bd779c1cb27b1af2ab9b18",
"url": "https://api.github.com/repos/detectlanguage/detectlanguage-php/zipball/6d989413821a6a1eade40f3d6bfeddf82a29aa7f",
"reference": "6d989413821a6a1eade40f3d6bfeddf82a29aa7f",
"shasum": ""
},
"require": {
......@@ -119,7 +119,7 @@
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
"phpunit/phpunit": "~4.0"
},
"type": "library",
"autoload": {
......@@ -145,7 +145,7 @@
"detection",
"language"
],
"time": "2018-03-28T20:56:36+00:00"
"time": "2018-10-02T21:09:56+00:00"
},
{
"name": "gabordemooij/redbean",
......@@ -242,16 +242,16 @@
},
{
"name": "jaybizzle/crawler-detect",
"version": "v1.2.66",
"version": "v1.2.71",
"source": {
"type": "git",
"url": "https://github.com/JayBizzle/Crawler-Detect.git",
"reference": "55ad4b140d821c19dbaf1a6ea9d9e5ca6444ecc1"
"reference": "bfb7d00c70d0ad59037bed7f08a2b6c10b1ed2ba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/55ad4b140d821c19dbaf1a6ea9d9e5ca6444ecc1",
"reference": "55ad4b140d821c19dbaf1a6ea9d9e5ca6444ecc1",
"url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/bfb7d00c70d0ad59037bed7f08a2b6c10b1ed2ba",
"reference": "bfb7d00c70d0ad59037bed7f08a2b6c10b1ed2ba",
"shasum": ""
},
"require": {
......@@ -287,7 +287,7 @@
"crawlerdetect",
"php crawler detect"
],
"time": "2018-07-30T20:23:10+00:00"
"time": "2018-10-16T18:51:19+00:00"
},
{
"name": "longman/ip-tools",
......@@ -493,16 +493,16 @@
},
{
"name": "nesbot/carbon",
"version": "1.33.0",
"version": "1.34.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "55667c1007a99e82030874b1bb14d24d07108413"
"reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/55667c1007a99e82030874b1bb14d24d07108413",
"reference": "55667c1007a99e82030874b1bb14d24d07108413",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
"reference": "1dbd3cb01c5645f3e7deda7aa46ef780d95fcc33",
"shasum": ""
},
"require": {
......@@ -544,7 +544,7 @@
"datetime",
"time"
],
"time": "2018-08-07T08:39:47+00:00"
"time": "2018-09-20T19:36:25+00:00"
},
{
"name": "noplanman/xec",
......@@ -599,29 +599,32 @@
"time": "2017-03-12T19:16:23+00:00"
},
{
"name": "rinvex/country",
"version": "v3.1.0",
"name": "rinvex/countries",
"version": "v5.0.0",
"source": {
"type": "git",
"url": "https://github.com/rinvex/country.git",
"reference": "e32228ef43f26d3b02296be9454f842c52d492f3"
"url": "https://github.com/rinvex/countries.git",
"reference": "ba4d10faf5d0d25f9aab646e80a381ae828fb268"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rinvex/country/zipball/e32228ef43f26d3b02296be9454f842c52d492f3",
"reference": "e32228ef43f26d3b02296be9454f842c52d492f3",
"url": "https://api.github.com/repos/rinvex/countries/zipball/ba4d10faf5d0d25f9aab646e80a381ae828fb268",
"reference": "ba4d10faf5d0d25f9aab646e80a381ae828fb268",
"shasum": ""
},
"require": {
"php": "^7.0.0"
"php": "^7.1.3"
},
"require-dev": {
"phpunit/phpunit": "^5.4.0"
"codedungeon/phpunit-result-printer": "^0.22.0",
"phpunit/phpunit": "^7.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.0-dev"
"laravel": {
"providers": [
"Rinvex\\Country\\Providers\\CountryServiceProvider"
]
}
},
"autoload": {
......@@ -649,11 +652,11 @@
"role": "Project Lead"
},
{
"name": "The Generous Laravel Community",
"homepage": "https://github.com/rinvex/country/contributors"
"name": "The Generous PHP Community",
"homepage": "https://github.com/rinvex/countries/contributors"
}
],
"description": "Rinvex Country is a simple and lightweight package for retrieving country details with flexibility. A whole bunch of data including name, demonym, capital, iso codes, dialling codes, geo data, currencies, flags, emoji, and other attributes for all 250 countries worldwide at your fingertips.",
"description": "Rinvex Countries is a simple and lightweight package for retrieving country details with flexibility. A whole bunch of data including name, demonym, capital, iso codes, dialling codes, geo data, currencies, flags, emoji, and other attributes for all 250 countries worldwide at your fingertips.",
"homepage": "https://rinvex.com",
"keywords": [
"Flexible",
......@@ -670,7 +673,7 @@
"rinvex",
"svg"
],
"time": "2017-03-07T18:40:20+00:00"
"time": "2018-10-05T07:34:25+00:00"
},
{
"name": "symfony/polyfill-mbstring",
......@@ -733,16 +736,16 @@
},
{
"name": "symfony/translation",
"version": "v4.1.4",
"version": "v4.1.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f"
"reference": "9f0b61e339160a466ebcde167a6c5521c810e304"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/fa2182669f7983b7aa5f1a770d053f79f0ef144f",
"reference": "fa2182669f7983b7aa5f1a770d053f79f0ef144f",
"url": "https://api.github.com/repos/symfony/translation/zipball/9f0b61e339160a466ebcde167a6c5521c810e304",
"reference": "9f0b61e339160a466ebcde167a6c5521c810e304",
"shasum": ""
},
"require": {
......@@ -798,22 +801,22 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
"time": "2018-08-07T12:45:11+00:00"
"time": "2018-10-02T16:36:10+00:00"
}
],
"packages-dev": [
{
"name": "squizlabs/php_codesniffer",
"version": "3.3.1",
"version": "3.3.2",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
"reference": "628a481780561150481a9ec74709092b9759b3ec"
"reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/628a481780561150481a9ec74709092b9759b3ec",
"reference": "628a481780561150481a9ec74709092b9759b3ec",
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6ad28354c04b364c3c71a34e4a18b629cc3b231e",
"reference": "6ad28354c04b364c3c71a34e4a18b629cc3b231e",
"shasum": ""
},
"require": {
......@@ -851,7 +854,7 @@
"phpcs",
"standards"
],
"time": "2018-07-26T23:47:18+00:00"
"time": "2018-09-23T23:08:17+00:00"
}
],
"aliases": [],
......
ALTER TABLE ratingcomments DROP COLUMN userurl;
UPDATE pods SET date_updated=null;
......@@ -3,14 +3,14 @@
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"
FLAG_FILE="/tmp/poduptime.pulling"
FLAG_FILE="/tmp/poduptime.updating"
HOUR=$(date +%H)
DAY=$(date +%d)
HAPPY=" :-)"
SAD=" :-("
if [ -f "$FLAG_FILE" ]; then
echo "Already running pull"
echo "Already running update"
exit 1
fi
touch "$FLAG_FILE"
......@@ -26,20 +26,20 @@ fi
echo "$HAPPY"
if [ "$HOUR" = 23 ] || [ "$1" = 'init' ]; then
printf "%s" "Pulling in master versions..."
if php pull-masterversions.php; then
printf "%s" "Updating master versions..."
if php update-masterversions.php; then
echo "$HAPPY"
else
echo "$SAD"
fi
printf "%s" "Updating Monthy Stats Table..."
if php monthly_stats.php; then
if php update-monthly-stats.php; then
echo "$HAPPY"
else
echo "$SAD"
fi
printf "%s" "Crawling the federation..."
if php podcrawler.php; then
printf "%s" "Crawling and updating from the federation..."
if php update-remote-data.php; then
echo "$HAPPY"
else
echo "$SAD"
......@@ -62,10 +62,10 @@ if [ "$HOUR" = 23 ] || [ "$1" = 'init' ]; then
fi
fi
echo "Pulling in new pod data...";
php pull.php $@
echo "Updating in new pod data...";
php update.php $@
touch last.data
echo "Finished pull!"
echo "Finished update!"
echo "Backing up..."
php backup.php
......
......@@ -10,7 +10,6 @@ use RedBeanPHP\R;
// Required parameters.
($_username = $_POST['username'] ?? null) || die('Name is required');
//($_userurl = $_POST['userurl'] ?? null) || die('no userurl given');//lets not annoy people on this for now
($_domain = $_POST['domain'] ?? null) || die('no pod domain given');
($_comment = $_POST['comment'] ?? null) || die('A comment is required');
($_rating = $_POST['rating'] ?? null) || die('A rating is required');
......@@ -23,7 +22,6 @@ try {
$r['comment'] = $_comment;
$r['rating'] = $_rating;
$r['username'] = $_username;
//$r['userurl'] = $_userurl;
R::store($r);
} catch (\RedBeanPHP\RedException $e) {
die('Error in SQL query: ' . $e->getMessage());
......
......@@ -54,7 +54,6 @@ CREATE TABLE ratingcomments (
pod_id int,
rating int,
username text,
userurl text,
date_created timestamp DEFAULT current_timestamp
);
......
......@@ -193,18 +193,18 @@ foreach ($pods as $pod) {
try {
$lastpodupdates = R::getRow('
SELECT DISTINCT ON (shortversion, date_checked) shortversion, date_checked
SELECT DISTINCT ON (version, date_checked) version, date_checked
FROM checks
WHERE domain = ?
AND shortversion IS NOT NULL
ORDER BY shortversion DESC, date_checked
AND version IS NOT NULL
ORDER BY version DESC, date_checked
LIMIT 1
', [$domain]);
} catch (\RedBeanPHP\RedException $e) {
die('Error in SQL query: ' . $e->getMessage());
}
$lastdatechecked = ($lastpodupdates['date_checked'] ?? date('Y-m-d H:i:s'));
$lastdatechecked = ($lastpodupdates['date_checked'] ?? date('Y-m-d H:i:s.u'));
$devlastdays = $devlastcommit ? date_diff(new DateTime($devlastcommit), new DateTime())->format('%a') : 30;//tmp//if no dev branch then what?
debug('Dev last commit was ', $devlastdays);
......@@ -214,9 +214,9 @@ foreach ($pods as $pod) {
if (strpos($version, 'dev') !== false || strpos($version, 'rc') !== false || $shortversioncheck > $masterversioncheck) {
//tmp//if pod is on the development branch - see when you last updated your pod and when the last commit was made to dev branch - if the repo is active and your not updating every 120 days why are you on dev branch?
if ($updategap + $devlastdays > 400) {
if ($updategap + $devlastdays > 200) {
debug('Outdated More than 400 days', 'Yes');
debug('Outdated More than 200 days', 'Yes');
$podminhelp = 'Your code base seems too out of date to be used. Last time you updated was ' . $updategap;
$score -= 2;
......@@ -230,9 +230,9 @@ foreach ($pods as $pod) {
$updategap = date_diff(new DateTime($lastdatechecked), new DateTime($releasedate))->format('%a');
$podminhelp = 'Your code base seems too out of date to be used. Current version is ' . $masterversion . ' and you are running ' . $shortversion;
} elseif ($updategap - date_diff(new DateTime($releasedate), new DateTime())->format('%a') > 400) {
} elseif ($updategap - date_diff(new DateTime($releasedate), new DateTime())->format('%a') > 200) {
debug('Outdated more than 400 days since x ', 'Yes');
debug('Outdated more than 200 days since x ', 'Yes');
$score -= 2;
$updategap = date_diff(new DateTime($lastdatechecked), new DateTime($releasedate))->format('%a');
......@@ -361,12 +361,15 @@ foreach ($pods as $pod) {
debug('Mail Notice', 'sent to ' . $email);
}
$weightedscore = ($uptime + $score - (10 - $weight)) / 2;
if ($score > 100) {
$score = 100;
} elseif ($score < 1) {
$weightedscore = 0;
} elseif ($score < -6000) {
$status = PodStatus::SYSTEM_DELETED;
}
$weightedscore = ($uptime + $score - (10 - $weight)) / 2;
debug('Score', $score);
debug('Weighted Score', $weightedscore);
......@@ -379,8 +382,8 @@ foreach ($pods as $pod) {
$p['monthsmonitored'] = $months;
$p['uptime_alltime'] = $uptime;
$p['status'] = $status;
$p['date_laststats'] = $statslastdate;
$p['date_updated'] = date('Y-m-d H:i:s');
$p['date_laststats'] = date('Y-m-d H:i:s.u');
$p['date_updated'] = $lastpodupdates['date_checked'];
$p['latency'] = $avglatency;
$p['score'] = $score;
$p['country'] = $country;
......@@ -403,7 +406,7 @@ foreach ($pods as $pod) {
$p['active_users_monthly'] = $active_users_monthly;
$p['local_posts'] = $local_posts;
$p['name'] = $name;
$p['detectedlanguage'] = $detectedlanguage;
$p['detectedlanguage'] = $detectedlanguage;
$p['comment_counts'] = $comment_counts;
$p['service_xmpp'] = $service_xmpp;
$p['services'] = $services;
......
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 511.984 511.984" style="enable-background:new 0 0 511.984 511.984;" xml:space="preserve">
<g>
<g>
<path d="M510.992,358.154l-0.544-4.512c-0.928-8.096-7.776-13.952-16.096-14.112l-52.544,0.832
c-4.192,0.064-9.696,3.264-12.672,6.304c-17.504,17.952-24.384,13.408-26.56,11.936c-5.76-3.808-16.992-15.872-29.28-54.144
l78.4-223.072c3.968-9.728,5.28-17.632,4.096-24.864c-2.08-12.96-11.456-21.76-27.936-23.712l-68.48,0.416
c-6.752,0.032-12.736,4.32-14.976,10.656l-32.288,92.352c-9.344-17.472-18.976-32.512-29.12-45.536
c-21.728-27.84-46.144-46.24-72.512-54.72c-0.288-0.064-2.912-0.704-3.2-0.8c-53.76-8.384-98.272,0.928-132.064,27.904
C38.256,92.618,14.448,141.706,2.16,214.954c-4.608,57.088-1.856,103.008,8.384,140.448c11.744,42.912,33.76,74.208,65.056,92.896
c45.76,29.088,90.944,37.408,134.272,24.8c31.712-9.216,61.696-29.12,91.264-60.544c12.448,18.688,26.496,33.6,41.824,44.48
c21.216,15.04,45.312,22.752,73.6,22.752c4.768,0,9.664-0.224,14.688-0.64c0.608-0.16,2.688-0.736,3.296-0.992
c27.712-11.136,48.416-26.976,61.44-47.104C509.264,410.474,514.32,385.93,510.992,358.154z M469.104,413.674
c-9.152,14.112-24.32,25.632-45.12,34.208c-23.52,1.504-44.192-3.968-62.528-16.96c-16.288-11.52-31.04-29.344-43.776-52.896
c-2.528-4.672-7.2-7.776-12.48-8.288c-0.544-0.064-1.056-0.096-1.6-0.096c-4.704,0-9.248,2.08-12.288,5.728
c-29.696,35.648-60.128,58.208-90.368,66.976c-34.592,10.048-69.984,3.168-108.576-21.312
c-24.672-14.72-41.344-38.944-50.976-74.08c-9.12-33.344-11.584-76.864-7.456-128.448c10.56-62.464,31.168-106.368,61.248-130.432
c26.848-21.408,61.92-28.352,105.504-21.632c20.448,6.56,39.104,20.96,57.056,43.936c14.784,18.944,28.544,43.136,42.112,73.952
c2.656,6.016,8.736,9.632,15.296,9.504c6.56-0.224,12.32-4.48,14.464-10.688l41.28-118.048l52.736-0.352
c-0.352,1.248-0.96,2.976-1.856,5.248L341.36,298.826c-1.12,3.232-1.216,6.72-0.224,9.984c12.224,40.064,26.56,65.12,43.84,76.512
c13.408,8.864,35.008,13.504,63.68-13.056l31.296-0.544C480.432,387.914,476.816,401.706,469.104,413.674z"/>
</g>
</g>
<g>
<g>
<path d="M295.76,274.282c-15.36-61.536-31.968-102.208-52.416-127.936c-21.728-27.36-48.64-40.192-84.704-40.288
c-0.128,0-0.224,0-0.288,0c-28.032,0.32-53.088,18.08-70.528,49.984C76.4,176.874,68.496,202.89,65.04,231.306
c-3.488,28.32-2.24,56.64,3.616,81.824c10.816,46.56,36.48,78.048,72.224,88.672c0.8,0.224,2.368,0.576,3.2,0.672
c5.984,0.8,11.808,1.216,17.568,1.216c24.416,0,46.72-7.2,66.528-21.536c26.112-18.944,47.904-49.92,66.624-94.72
c0.64-1.6,1.28-6.4,1.408-8.128C296.336,277.61,296.176,275.946,295.76,274.282z M209.424,356.17
c-17.824,12.96-37.792,17.728-59.392,14.944c-31.104-9.216-44.448-40.576-50.208-65.248c-4.928-21.248-6.016-46.368-3.04-70.688
c2.944-24.064,9.728-46.688,19.104-63.776c8.224-15.04,22.336-33.024,42.784-33.344c26.208,0.096,44.032,8.544,59.616,28.192
c17.344,21.824,32,58.176,45.44,112.448C247.952,315.466,229.68,341.514,209.424,356.17z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="160"
height="180.00002"
id="svg3872"
version="1.1"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="libertree.svg">
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.49497475"
inkscape:cx="244.48024"
inkscape:cy="67.610615"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="511"
inkscape:window-height="434"
inkscape:window-x="0"
inkscape:window-y="59"
inkscape:window-maximized="0" />
<defs
id="defs3874">
<clipPath
id="clipPath3179"
clipPathUnits="userSpaceOnUse">
<rect
inkscape:export-ydpi="120"
inkscape:export-xdpi="120"
inkscape:export-filename="/home/jackie/libertree-project/libertree/cropped-logo.png"
y="932.36218"
x="80"
height="120"
width="120"
id="rect3181"
style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline;opacity:1" />
</clipPath>
</defs>
<metadata
id="metadata3877">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type