From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id cFLsGZI4+GGWeQAAgWs5BA (envelope-from ) for ; Mon, 31 Jan 2022 20:29:22 +0100 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id eCo8F5I4+GFdgAEA9RJhRA (envelope-from ) for ; Mon, 31 Jan 2022 20:29:22 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id A096DBA9C for ; Mon, 31 Jan 2022 20:29:21 +0100 (CET) Received: from localhost ([::1]:38482 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nEcMa-00065C-6q for larch@yhetil.org; Mon, 31 Jan 2022 14:29:20 -0500 Received: from eggs.gnu.org ([209.51.188.92]:48264) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nEbvN-0007X5-4c for guix-patches@gnu.org; Mon, 31 Jan 2022 14:01:25 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:47906) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nEbtH-0008Oz-29 for guix-patches@gnu.org; Mon, 31 Jan 2022 13:59:28 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1nEbtH-0006Ba-2F for guix-patches@gnu.org; Mon, 31 Jan 2022 13:59:03 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#53466] [PATCH v2] home: Add redshift service. Resent-From: Andrew Tropin Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 31 Jan 2022 18:59:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 53466 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Ludovic =?UTF-8?Q?Court=C3=A8s?= , 53466@debbugs.gnu.org Cc: Ludovic =?UTF-8?Q?Court=C3=A8s?= Received: via spool by 53466-submit@debbugs.gnu.org id=B53466.164365548623612 (code B ref 53466); Mon, 31 Jan 2022 18:59:03 +0000 Received: (at 53466) by debbugs.gnu.org; 31 Jan 2022 18:58:06 +0000 Received: from localhost ([127.0.0.1]:40803 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nEbsL-00068l-Eq for submit@debbugs.gnu.org; Mon, 31 Jan 2022 13:58:06 -0500 Received: from mail-lf1-f42.google.com ([209.85.167.42]:40733) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nEbs4-000675-Ox for 53466@debbugs.gnu.org; Mon, 31 Jan 2022 13:58:04 -0500 Received: by mail-lf1-f42.google.com with SMTP id a28so28814946lfl.7 for <53466@debbugs.gnu.org>; Mon, 31 Jan 2022 10:57:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=trop-in.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version; bh=ddAFKAJ/ZZMPZGgX2eNEtUjJfNdzPea68GcYZgIOhXQ=; b=wIKtgBWcjveExzLgWcNHXRu4XhjzzGpxmLQ2k79m94gU8RxYLppSzwIyQRBQeQG7RO 4P6PV9jygXVI4Y/TjT4JNac76zCqUns0Cb14mgRbEHz6lHmxOj4AN5INKGVvi/NOwCJs yUP+wfhf79y4498mnyvEBkI07TH+M8hcxgnggDmmGxIsC235XTxtMAPr9Nqac2AMiBUl BWagPQ3NFOGmK4YsoZIwBnSU5jdMeVsOkKJYBITd197kO1/YZ0J9ImLbL2m20KEv3ku2 dsZpYzYmSJZTYs+vtf7Tbf0j1+0NeUOS1zZJswRuhxlkt74f51m5txxixvLvCoJbkWzp 1afw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version; bh=ddAFKAJ/ZZMPZGgX2eNEtUjJfNdzPea68GcYZgIOhXQ=; b=U0Lr743yyRq5yLaKQovxX6h++V/gejgDcT7MMtAVND4RZ4KRcFRWJrME/yxRPh80mL JWrf4k2EaWxkYJ9NIN41vk0C9KC2nnOyuSEhYwlN3KF3tX8JByULTo4ZkoQTI2R89lYQ 5TJGnuWzEVAJ2zyH14W16P50hS270xpQBdvLi3fYJ43IcOBTs0/czczE1gadYRlQq9Ka oW77owfSmPkVwrgoG6iAePLIsewqEJ8Xj32zFEfADqfI+KzJYO7wXD2c9PCjeT4K0ty0 pxz/jdpQFWd0IbcLimcGfhBx/tUF70UkbskdYfA5Cz3FbfS2CvIX0pK/Sr6e9OAWHLrk V00A== X-Gm-Message-State: AOAM532Py+M36/7qwhjvM8fftHmNmM3mpyAlQpufXiDo/s2cZxMYqTC6 6LORdnCtaar2ME3DekkyrBWDMg== X-Google-Smtp-Source: ABdhPJzs6av0GdxM88zKcdg3LyB+FkduoYz0bZPr+M91xEA+5j1DEuDoZKAkk+hqEDW6tuCfzm8K/w== X-Received: by 2002:a19:fc08:: with SMTP id a8mr16393855lfi.340.1643655462253; Mon, 31 Jan 2022 10:57:42 -0800 (PST) Received: from localhost (109-252-135-33.dynamic.spd-mgts.ru. [109.252.135.33]) by smtp.gmail.com with ESMTPSA id r22sm1589873ljh.28.2022.01.31.10.57.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 31 Jan 2022 10:57:41 -0800 (PST) From: Andrew Tropin In-Reply-To: <20220130151139.3857-1-ludo@gnu.org> References: <87sft8tah0.fsf@trop.in> <20220130151139.3857-1-ludo@gnu.org> Date: Mon, 31 Jan 2022 21:57:38 +0300 Message-ID: <87r18nybq5.fsf@trop.in> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1643657362; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:resent-cc:resent-from:resent-sender: resent-message-id:in-reply-to:in-reply-to:references:references: list-id:list-help:list-unsubscribe:list-subscribe:list-post: dkim-signature; bh=yLjSu/bjnzP5+4fvNXbkJe7u9hhCJnda6lzm8jB11Cw=; b=r46Lr5b2163z3O3wO/tGF3so76recYsK/F1OGOEABdMggJVDd+5OEifH5cd2WdXla0QSfg 15zTs6fR8+lUe8wfSiFKhTgkAktvIKeUmxzz6vw4prIvkdVYZ8xCqQoR43InM/0TIO7CZ4 UAeB+RrURqlwSC8GNZu1gktOhpDB8dh/Cbq/ylvqiOB8lXcQYB5ndIKLirTsMCUc4wyp2C CF/vk6oI9HGujM4CSTs9vXnY1+dJPbsQT0wl5rt/EmX+CZ6TZfx2dYy3IkHSxIR/KKQjlg c+wRHvuMqvIQBhgumKZUpYOOBCW87mt+KqsEjB1pz/wvoERj6Td1gpUUIe4vRA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1643657362; a=rsa-sha256; cv=none; b=My2omd2rZC/UgS94XAgNiXi5MIMD7tdW1OuuzSawLKUECTm83eaag4Y0bi/lvj6o2O63LL FXb1sload6gUe2dVE+Xhd6cVigFu4B2y3GE4YAZ61PLBeZFwe3h1hIwuYUr2O4pZN+vf7V fTb4i2I1h0QXxSCw0fx1ZO4zYnPIPcT1CqXQj06jLawZeOYrTQw6lCtjJlBk3r5CvNBwrf sTYveepNmtEtK2j9oBgAKnCORuJTpGLrbUmYSYD+Vq98Axon8ETHi1StBVZ9gYvdIPGrkJ qUWI3pXqvrQM2bJeimWiuAuBHgxZcFfW/P3l2T1MdcG6CteQ9hG82AV0SDc8ug== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=trop-in.20210112.gappssmtp.com header.s=20210112 header.b=wIKtgBWc; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -5.23 Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=trop-in.20210112.gappssmtp.com header.s=20210112 header.b=wIKtgBWc; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-patches-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-patches-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: A096DBA9C X-Spam-Score: -5.23 X-Migadu-Scanner: scn0.migadu.com X-TUID: ErpVP09W75N1 --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 2022-01-30 16:11, Ludovic Court=C3=A8s wrote: > * gnu/home/services/desktop.scm: New file. > * gnu/local.mk (GNU_SYSTEM_MODULES): Add it. > * doc/guix.texi (Desktop Home Services): New node. > --- > doc/guix.texi | 70 +++++++++++++++ > gnu/home/services/desktop.scm | 158 ++++++++++++++++++++++++++++++++++ > gnu/local.mk | 1 + > 3 files changed, 229 insertions(+) > create mode 100644 gnu/home/services/desktop.scm > > Hello! > > Changes compared to v1 account for Andrew=E2=80=99s suggestions: > > =E2=80=A2 add =E2=80=98redshift=E2=80=99 field to specify the package t= o use; > > =E2=80=A2 add =E2=80=98extra-content=E2=80=99 field as an escape hatch. > > We could debate about the latter; from a pragmatic standpoint, > I think it gives all the flexibility one would need in practice. > > Thoughts? Probably, I already mentioned, but combining renamed option names from the configuration record and option names in the escape hatch is inconsistent, confusing and error-prone. > > Ludo=E2=80=99. > > diff --git a/doc/guix.texi b/doc/guix.texi > index 94f8e5e481..67a5517911 100644 > --- a/doc/guix.texi > +++ b/doc/guix.texi > @@ -37461,6 +37461,7 @@ services)}. > * Shells: Shells Home Services. POSIX shells, Bash, Zsh. > * Mcron: Mcron Home Service. Scheduled User's Job Execution. > * Shepherd: Shepherd Home Service. Managing User's Daemons. > +* Desktop: Desktop Home Services. Services for graphical environm= ents. > @end menu > @c In addition to that Home Services can provide >=20=20 > @@ -37848,6 +37849,75 @@ mechanism instead (@pxref{Shepherd Services}). > @end table > @end deftp >=20=20 > +@node Desktop Home Services > +@subsection Desktop Home Services > + > +The @code{(gnu home services desktop)} module provides services that you > +may find useful on ``desktop'' systems running a graphical user > +environment such as Xorg. > + > +@defvr {Scheme Variable} home-redshift-service-type > +This is the service type for @uref{https://github.com/jonls/redshift, > +Redshift}, a program that adjusts the display color temperature > +according to the time of day. Its associated value must be a > +@code{home-redshift-configuration} record, as shown below. > + > +A typical configuration, where we manually specify the latitude and > +longitude, might look like this: > + > +@lisp > +(service home-redshift-service-type > + (home-redshift-configuration > + (location-provider 'manual) > + (latitude 35.81) ;northern hemisphere > + (longitude -0.80))) ;west of Greenwich > +@end lisp > +@end defvr > + > +@deftp {Data Type} home-redshift-configuration > +Available @code{home-redshift-configuration} fields are: > + > +@table @asis > +@item @code{redshift} (default: @code{redshift}) (type: file-like) > +Redshift package to use. > + > +@item @code{location-provider} (default: @code{geoclue2}) (type: symbol) > +Geolocation provider---@code{'manual} or @code{'geoclue2}. In the > +former case, you must also specify the @code{latitude} and > +@code{longitude} fields so Redshift can determine daytime at your place. > +In the latter case, the Geoclue system service must be running; it will > +be queried for location information. > + > +@item @code{adjustment-method} (default: @code{randr}) (type: symbol) > +Color adjustment method. > + > +@item @code{daytime-temperature} (default: @code{6500}) (type: integer) > +Daytime color temperature (kelvins). > + > +@item @code{nighttime-temperature} (default: @code{4500}) (type: integer) > +Nighttime color temperature (kelvins). > + > +@item @code{daytime-brightness} (default: @code{disabled}) (type: maybe-= inexact-number) > +Daytime screen brightness, between 0.1 and 1.0. > + > +@item @code{nighttime-brightness} (default: @code{disabled}) (type: mayb= e-inexact-number) > +Nighttime screen brightness, between 0.1 and 1.0. > + > +@item @code{latitude} (default: @code{disabled}) (type: maybe-inexact-nu= mber) > +Latitude, when @code{location-provider} is @code{'manual}. > + > +@item @code{longitude} (default: @code{disabled}) (type: maybe-inexact-n= umber) > +Longitude, when @code{location-provider} is @code{'manual}. > + > +@item @code{extra-content} (default: @code{""}) (type: raw-configuration= -string) > +Extra content appended as-is to the Redshift configuration file. Run > +@command{man redshift} for more information about the configuration file > +format. > + > +@end table > + > +@end deftp > + > @node Invoking guix home > @section Invoking @code{guix home} >=20=20 > diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm > new file mode 100644 > index 0000000000..010668550a > --- /dev/null > +++ b/gnu/home/services/desktop.scm > @@ -0,0 +1,158 @@ > +;;; GNU Guix --- Functional package management for GNU > +;;; Copyright =C2=A9 2022 Ludovic Court=C3=A8s > +;;; > +;;; This file is part of GNU Guix. > +;;; > +;;; GNU Guix 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 3 of the License, or (at > +;;; your option) any later version. > +;;; > +;;; GNU Guix 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 GNU Guix. If not, see . > + > +(define-module (gnu home services desktop) > + #:use-module (gnu home services) > + #:use-module (gnu home services shepherd) > + #:use-module (gnu services configuration) > + #:autoload (gnu packages xdisorg) (redshift) > + #:use-module (guix records) > + #:use-module (guix gexp) > + #:use-module (srfi srfi-1) > + #:use-module (ice-9 match) > + #:export (home-redshift-configuration > + home-redshift-configuration? > + > + home-redshift-service-type)) > + > + > +;;; > +;;; Redshift. > +;;; > + > +(define (serialize-integer field value) > + (string-append (match field > + ('daytime-temperature "temp-day") > + ('nighttime-temperature "temp-night") > + ('daytime-brightness "brightness-day") > + ('nighttime-brightness "brightness-night") > + ('latitude "lat") > + ('longitude "lon") > + (_ (symbol->string field))) > + "=3D" (number->string value) "\n")) > + > +(define (serialize-symbol field value) > + (string-append (symbol->string field) > + "=3D" (symbol->string value) "\n")) > + > +(define serialize-inexact-number serialize-integer) > + > +(define (inexact-number? n) > + (and (number? n) (inexact? n))) > +(define-maybe inexact-number) > + > +(define (serialize-raw-configuration-string field value) > + value) > +(define raw-configuration-string? string?) > + > +(define-configuration home-redshift-configuration > + (redshift > + (file-like redshift) > + "Redshift package to use.") > + > + (location-provider > + (symbol 'geoclue2) > + "Geolocation provider---@code{'manual} or @code{'geoclue2}. > + > +In the former case, you must also specify the @code{latitude} and > +@code{longitude} fields so Redshift can determine daytime at your place.= In > +the latter case, the Geoclue system service must be running; it will be > +queried for location information.") > + (adjustment-method > + (symbol 'randr) > + "Color adjustment method.") > + > + ;; Default values from redshift(1). > + (daytime-temperature > + (integer 6500) > + "Daytime color temperature (kelvins).") > + (nighttime-temperature > + (integer 4500) > + "Nighttime color temperature (kelvins).") > + > + (daytime-brightness > + (maybe-inexact-number 'disabled) > + "Daytime screen brightness, between 0.1 and 1.0.") > + (nighttime-brightness > + (maybe-inexact-number 'disabled) > + "Nighttime screen brightness, between 0.1 and 1.0.") > + > + (latitude > + (maybe-inexact-number 'disabled) > + "Latitude, when @code{location-provider} is @code{'manual}.") > + (longitude > + (maybe-inexact-number 'disabled) > + "Longitude, when @code{location-provider} is @code{'manual}.") > + > + (extra-content > + (raw-configuration-string "") > + "Extra content appended as-is to the Redshift configuration file. Run > +@command{man redshift} for more information about the configuration file > +format.")) > + > +(define (serialize-redshift-configuration config) > + (define location-fields > + '(latitude longitude)) > + > + (define (location-field? field) > + (memq (configuration-field-name field) location-fields)) > + > + (define (secondary-field? field) > + (or (location-field? field) > + (memq (configuration-field-name field) > + '(redshift extra-content)))) > + > + #~(string-append > + "[redshift]\n" > + #$(serialize-configuration config > + (remove secondary-field? > + home-redshift-configuration-fiel= ds)) > + "\n[manual]\n" > + #$(serialize-configuration config > + (filter location-field? > + home-redshift-configuration-fiel= ds)) > + It's very unclear where this extra-content goes and user can't know it until he check out the implementation or build the config (currently it's also almost impossible to find it on file system after build). Using such type of escape hatch is no joy at all. Seems this one is missplaced and should be go before [manual] section, otherwise it won't be possible to set values of redshift section. And doing so will lead to very ugly: (extra-content "\ dawn-time=3D5:30 dusk-time=3D18:30 [geoclue2] some-other-option=3Dvalue # Do I know that I'm in the middle of config file?") It will be especially ugly or even erroneous, when the target config has a format, which uses identation. I didn't try it for redshift, but in many ini parser it's forbidden to repeat sections with the same name. >=20 > + #$(home-redshift-configuration-extra-content config))) A little offtopic: I know a number of system services, where the extra-content goes in unexpected locations and overall behavior of escape hatch is unexpected and incosistent with other escape hatches. Some of the services has a number of escape hatches in almost every nested record with different names and behaviors. I'm relatively fresh Guix user and this part really confused me at first even having experience with NixOS module system before and it's very likely that many people just don't report it, because it really hard to get the roots of it. > + > +(define (redshift-shepherd-service config) > + (define config-file > + (computed-file "redshift.conf" > + #~(call-with-output-file #$output > + (lambda (port) > + (display #$(serialize-redshift-configuration co= nfig) > + port))))) > + > + (list (shepherd-service > + (documentation "Redshift program.") > + (provision '(redshift)) > + ;; FIXME: This fails to start if Home is first activated from a > + ;; non-X11 session. > + (start #~(make-forkexec-constructor > + (list #$(file-append redshift "/bin/redshift") > + "-c" #$config-file))) > + (stop #~(make-kill-destructor))))) > + > +(define home-redshift-service-type > + (service-type > + (name 'home-redshift) > + (extensions (list (service-extension home-shepherd-service-type > + redshift-shepherd-service))) > + (default-value (home-redshift-configuration)) > + (description > + "Run Redshift, a program that adjusts the color temperature of displ= ay > +according to time of day."))) > diff --git a/gnu/local.mk b/gnu/local.mk > index 27e7877361..80cb760132 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -79,6 +79,7 @@ GNU_SYSTEM_MODULES =3D \ > %D%/ci.scm \ > %D%/home.scm \ > %D%/home/services.scm \ > + %D%/home/services/desktop.scm \ > %D%/home/services/symlink-manager.scm \ > %D%/home/services/fontutils.scm \ > %D%/home/services/shells.scm \ > > base-commit: 27c1d58d901dcf48929bcb6f76d861fc21575dbf =2D-=20 Best regards, Andrew Tropin --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQJDBAEBCgAtFiEEKEGaxlA4dEDH6S/6IgjSCVjB3rAFAmH4MSIPHGFuZHJld0B0 cm9wLmluAAoJECII0glYwd6wQMoP/iqMv0dgHlIYxUWp4n+v9R2140n8QQhr+GFU R7zEyznIfs3LKWd5WH1UhUAhTNWZ8NPJlIjdTj14Pawpvu4CL8ZkTS+ISE44VJ7z dY/ApOYr/oK/X/ODg2xKF4bDGOFefR8TIjTcUtYJoHA4ElmXD3us4vtsjcpAgVAw AQap2bzKr70QJ169dZ4Iq4gzJqBbUq1uwn3pBXG5CkTraVJyR09EnoeRyEL3wUTh iBMobOQR2EULK42ya5oXPvgmUo5GUHVB9LbaPwLUlKPqeyNjnUYxL52lisRBn8O6 n8izHY1NMZyr0AT2PcVgxljm4XRwLaOGH6KV2eAWycYBc6J8rrT9y0KO6X6ciJoq CNxKVKfdrqvFQP/CqdgqDCOFT1U2MxRnSfDXjPcQJ/3Evks2ZSvcpwx/Rx6lppG3 vRy2O5PsrGBQtTTq9BjqyjI7Kc6psufzTp7D2uzOBIY+O+spkRBk1zkGBGN1IC4t iTLZliipBQui47EOo/byCpDkm6Sg5jSUHdoX5pjfBZiICUfrmxFv4kHXqCPMGRcl mhzUXNa2rtel0WxTQTgIZAq9C5AS0TunYLjxnchhF1d2Q8SxV6bRCMvFRI0ftbgc fLO/ULW9VqGi8BTJa3Ah74wKgxDAZfAssvsAqfhCBAGG9vL0vh8XsqqJ2ikOIev7 9BfYs/oQ =T2To -----END PGP SIGNATURE----- --=-=-=--