NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: lib/50009: strptime small enhancement
The following reply was made to PR lib/50009; it has been noted by GNATS.
From: David CARLIER <devnexen%gmail.com@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc:
Subject: Re: lib/50009: strptime small enhancement
Date: Fri, 3 Jul 2015 05:42:30 +0100
--Apple-Mail=_B162FE6C-9B49-46CF-85BE-D64EE31B7CD3
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
Sorry was malformed patch
Index: time/strptime.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /cvsroot/src/lib/libc/time/strptime.c,v
retrieving revision 1.39
diff -u -r1.39 strptime.c
--- time/strptime.c 6 Apr 2015 14:38:22 -0000 1.39
+++ time/strptime.c 29 Jun 2015 21:33:46 -0000
@@ -36,6 +36,8 @@
#include "namespace.h"
#include <sys/localedef.h>
+#include <sys/types.h>
+#include <sys/clock.h>
#include <ctype.h>
#include <locale.h>
#include <string.h>
@@ -60,6 +62,12 @@
#define ALT_O 0x02
#define LEGAL_ALT(x) { if (alt_format & ~(x)) return =
NULL; }
+#define FLAG_YEAR (1 << 0)
+#define FLAG_MTH (1 << 1)
+#define FLAG_YDAY (1 << 2)
+#define FLAG_MDAY (1 << 3)
+#define FLAG_WDAY (1 << 4)
+
static char gmt[] =3D { "GMT" };
static char utc[] =3D { "UTC" };
/* RFC-822/RFC-2822 */
@@ -74,6 +82,18 @@
static const u_char *find_string(const u_char *, int *, const char * =
const *,
const char * const *, int);
+static const int mths_per_yr_kind[2][13] =3D {
+ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
+ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
+};
+
+static int
+first_wday_of(int yr)
+{
+ return ((2 * (3 - (yr / 100) % 4)) + (yr % 100) + ((yr % 100) / =
4) +
+ (is_leap_year(yr) ? 6 : 0) + 1) % 7;
+}
+
char *
strptime(const char *buf, const char *fmt, struct tm *tm)
{
@@ -85,7 +105,7 @@
{
unsigned char c;
const unsigned char *bp, *ep;
- int alt_format, i, split_year =3D 0, neg =3D 0, offs;
+ int alt_format, i, split_year =3D 0, neg =3D 0, flags =3D 0, =
doff =3D -1, woff =3D 0, offs;
const char *new_fmt;
bp =3D (const u_char *)buf;
@@ -133,16 +153,19 @@
*/
case 'c': /* Date and time, using the locale's =
format. */
new_fmt =3D _TIME_LOCALE(loc)->d_t_fmt;
+ flags |=3D FLAG_WDAY | FLAG_MTH | FLAG_MDAY | =
FLAG_YEAR;
goto recurse;
case 'D': /* The date as "%m/%d/%y". */
new_fmt =3D "%m/%d/%y";
LEGAL_ALT(0);
+ flags |=3D FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
goto recurse;
case 'F': /* The date as "%Y-%m-%d". */
new_fmt =3D "%Y-%m-%d";
LEGAL_ALT(0);
+ flags |=3D FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
goto recurse;
case 'R': /* The time as "%H:%M". */
@@ -166,6 +189,7 @@
case 'x': /* The date, using the locale's format. =
*/
new_fmt =3D _TIME_LOCALE(loc)->d_fmt;
+ flags |=3D FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
recurse:
bp =3D (const u_char *)strptime((const char =
*)bp,
new_fmt, =
tm);
@@ -180,6 +204,7 @@
bp =3D find_string(bp, &tm->tm_wday,
_TIME_LOCALE(loc)->day, =
_TIME_LOCALE(loc)->abday, 7);
LEGAL_ALT(0);
+ flags |=3D FLAG_WDAY;
continue;
case 'B': /* The month, using the locale's form. =
*/
@@ -189,6 +214,7 @@
_TIME_LOCALE(loc)->mon, =
_TIME_LOCALE(loc)->abmon,
12);
LEGAL_ALT(0);
+ flags |=3D FLAG_MTH;
continue;
case 'C': /* The century number. */
@@ -201,12 +227,14 @@
split_year =3D 1;
tm->tm_year =3D i;
LEGAL_ALT(ALT_E);
+ flags |=3D FLAG_YEAR;
continue;
case 'd': /* The day of month. */
case 'e':
bp =3D conv_num(bp, &tm->tm_mday, 1, 31);
LEGAL_ALT(ALT_O);
+ flags |=3D FLAG_MDAY;
continue;
case 'k': /* The hour (24-hour clock =
representation). */
@@ -232,6 +260,7 @@
bp =3D conv_num(bp, &i, 1, 366);
tm->tm_yday =3D i - 1;
LEGAL_ALT(0);
+ flags |=3D FLAG_YDAY;
continue;
case 'M': /* The minute. */
@@ -244,6 +273,7 @@
bp =3D conv_num(bp, &i, 1, 12);
tm->tm_mon =3D i - 1;
LEGAL_ALT(ALT_O);
+ flags |=3D FLAG_MTH;
continue;
case 'p': /* The locale's equivalent of AM/PM. */
@@ -287,6 +317,8 @@
if (localtime_r(&sse, tm) =3D=3D NULL)
bp =3D NULL;
+ else
+ flags |=3D FLAG_YDAY | FLAG_WDAY =
| FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
}
continue;
@@ -300,11 +332,17 @@
*/
bp =3D conv_num(bp, &i, 0, 53);
LEGAL_ALT(ALT_O);
+ if (c =3D=3D 'U')
+ doff =3D TM_SUNDAY;
+ else
+ doff =3D TM_MONDAY;
+ woff =3D i;
continue;
case 'w': /* The day of week, beginning on sunday. =
*/
bp =3D conv_num(bp, &tm->tm_wday, 0, 6);
LEGAL_ALT(ALT_O);
+ flags |=3D FLAG_WDAY;
continue;
case 'u': /* The day of week, monday =3D 1. */
@@ -336,6 +374,7 @@
bp =3D conv_num(bp, &i, 0, 9999);
tm->tm_year =3D i - TM_YEAR_BASE;
LEGAL_ALT(ALT_E);
+ flags |=3D FLAG_YEAR;
continue;
case 'y': /* The year within 100 years of the =
epoch. */
@@ -353,6 +392,7 @@
i =3D i + 1900 - TM_YEAR_BASE;
}
tm->tm_year =3D i;
+ flags |=3D FLAG_YEAR;
continue;
case 'Z':
@@ -425,6 +465,7 @@
continue;
case '+':
neg =3D 0;
+ flags |=3D FLAG_WDAY | FLAG_MTH | =
FLAG_MDAY | FLAG_YEAR;
break;
case '-':
neg =3D 1;
@@ -529,6 +570,52 @@
}
}
+ if (!(flags & FLAG_YDAY) && (flags & FLAG_YEAR)) {
+ int isleap =3D is_leap_year(tm->tm_year + TM_YEAR_BASE);
+ if ((flags & (FLAG_MTH | FLAG_MDAY)) =3D=3D (FLAG_MTH | =
FLAG_MDAY)) {
+ tm->tm_yday =3D =
mths_per_yr_kind[isleap][tm->tm_mon] + (tm->tm_mday - 1);
+ flags |=3D FLAG_YDAY;
+ } else if (doff !=3D -1) {
+ if (!(flags & FLAG_WDAY)) {
+ tm->tm_wday =3D doff;
+ flags |=3D FLAG_WDAY;
+ }
+ tm->tm_yday =3D (7 - first_wday_of(tm->tm_year + =
TM_YEAR_BASE) +
+ doff) % 7 + (woff - 1) * 7 + tm->tm_wday =
- doff;
+ flags |=3D FLAG_YDAY;
+ }
+ }
+
+ if ((flags & (FLAG_YEAR | FLAG_YDAY)) =3D=3D (FLAG_YEAR | =
FLAG_YDAY)) {
+ int isleap =3D is_leap_year(tm->tm_year + TM_YEAR_BASE);
+ if (!(flags & FLAG_MTH)) {
+ i =3D 0;
+ while (tm->tm_yday >=3D =
mths_per_yr_kind[isleap][i])
+ i ++;
+ if (i > 12) {
+ i =3D 1;
+ tm->tm_yday -=3D =
mths_per_yr_kind[isleap][12];
+ tm->tm_year ++;
+ }
+ tm->tm_mon =3D i - 1;
+ flags |=3D FLAG_MTH;
+ }
+ if (!(flags & FLAG_MDAY)) {
+ tm->tm_mday =3D tm->tm_yday - =
mths_per_yr_kind[isleap][tm->tm_mon] + 1;
+ flags |=3D FLAG_MDAY;
+ }
+ if (!(flags & FLAG_WDAY)) {
+ i =3D 0;
+ woff =3D first_wday_of(tm->tm_year);
+ while (i ++ <=3D tm->tm_yday) {
+ if (woff ++ >=3D 6)
+ woff =3D 0;
+ }
+ tm->tm_wday =3D woff;
+ flags |=3D FLAG_WDAY;
+ }
+ }
+
return __UNCONST(bp);
}
> On 29 Jun 2015, at 22:45, David CARLIER <devnexen%gmail.com@localhost> wrote:
>=20
> The following reply was made to PR lib/50009; it has been noted by =
GNATS.
>=20
> From: David CARLIER <devnexen%gmail.com@localhost>
> To: gnats-bugs%NetBSD.org@localhost
> Cc:
> Subject: Re: lib/50009: strptime small enhancement
> Date: Mon, 29 Jun 2015 22:41:14 +0100
>=20
> --Apple-Mail=3D_65474D83-214C-489E-822A-D2420A0A27D0
> Content-Transfer-Encoding: quoted-printable
> Content-Type: text/plain;
> charset=3Dutf-8
>=20
>=20
> Here another version based on FreeBSD=3DE2=3D80=3D99s implementation =
pretty =3D
> much, works on more use cases than the first version and =
=3DE2=3D80=3D98U=3DE2=3D80=3D99=3D
> and =3DE2=3D80=3D98W=3DE2=3D80=3D99 flags work better.
>=20
> Index: time/strptime.c
> =
=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3=
D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D
> =
=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3=
D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D
> =3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D3D=3D=
3D=3D3D=3D3D
> RCS file: /cvsroot/src/lib/libc/time/strptime.c,v
> retrieving revision 1.39
> diff -u -r1.39 strptime.c
> --- time/strptime.c 6 Apr 2015 14:38:22 -0000 1.39
> +++ time/strptime.c 29 Jun 2015 21:33:46 -0000
> @@ -36,6 +36,8 @@
>=20
> #include "namespace.h"
> #include <sys/localedef.h>
> +#include <sys/types.h>
> +#include <sys/clock.h>
> #include <ctype.h>
> #include <locale.h>
> #include <string.h>
> @@ -60,6 +62,12 @@
> #define ALT_O 0x02
> #define LEGAL_ALT(x) { if (alt_format & ~(x)) return =
=3D
> NULL; }
>=20
> +#define FLAG_YEAR (1 << 0)
> +#define FLAG_MTH (1 << 1)
> +#define FLAG_YDAY (1 << 2)
> +#define FLAG_MDAY (1 << 3)
> +#define FLAG_WDAY (1 << 4)
> +
> static char gmt[] =3D3D { "GMT" };
> static char utc[] =3D3D { "UTC" };
> /* RFC-822/RFC-2822 */
> @@ -74,6 +82,18 @@
> static const u_char *find_string(const u_char *, int *, const char * =
=3D
> const *,
> const char * const *, int);
>=20
> +static const int mths_per_yr_kind[2][13] =3D3D {
> + { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
> + { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
> +};
> +
> +static int
> +first_wday_of(int yr)
> +{
> + return ((2 * (3 - (yr / 100) % 4)) + (yr % 100) + ((yr % 100) / =
=3D
> 4) +
> + (is_leap_year(yr) ? 6 : 0) + 1) % 7;
> +}
> +
> char *
> strptime(const char *buf, const char *fmt, struct tm *tm)
> {
> @@ -85,7 +105,7 @@
> {
> unsigned char c;
> const unsigned char *bp, *ep;
> - int alt_format, i, split_year =3D3D 0, neg =3D3D 0, offs;
> + int alt_format, i, split_year =3D3D 0, neg =3D3D 0, flags =3D3D =
0, =3D
> doff =3D3D -1, woff =3D3D 0, offs;
> const char *new_fmt;
>=20
> bp =3D3D (const u_char *)buf;
> @@ -133,16 +153,19 @@
> */
> case 'c': /* Date and time, using the locale's =3D
> format. */
> new_fmt =3D3D _TIME_LOCALE(loc)->d_t_fmt;
> + flags |=3D3D FLAG_WDAY | FLAG_MTH | FLAG_MDAY | =
=3D
> FLAG_YEAR;
> goto recurse;
>=20
> case 'D': /* The date as "%m/%d/%y". */
> new_fmt =3D3D "%m/%d/%y";
> LEGAL_ALT(0);
> + flags |=3D3D FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
> goto recurse;
>=20
> case 'F': /* The date as "%Y-%m-%d". */
> new_fmt =3D3D "%Y-%m-%d";
> LEGAL_ALT(0);
> + flags |=3D3D FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
> goto recurse;
>=20
> case 'R': /* The time as "%H:%M". */
> @@ -166,6 +189,7 @@
>=20
> case 'x': /* The date, using the locale's format. =
=3D
> */
> new_fmt =3D3D _TIME_LOCALE(loc)->d_fmt;
> + flags |=3D3D FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
> recurse:
> bp =3D3D (const u_char *)strptime((const char =3D
> *)bp,
> new_fmt, =3D
> tm);
> @@ -180,6 +204,7 @@
> bp =3D3D find_string(bp, &tm->tm_wday,
> _TIME_LOCALE(loc)->day, =3D
> _TIME_LOCALE(loc)->abday, 7);
> LEGAL_ALT(0);
> + flags |=3D3D FLAG_WDAY;
> continue;
>=20
> case 'B': /* The month, using the locale's form. =3D=
> */
> @@ -189,6 +214,7 @@
> _TIME_LOCALE(loc)->mon, =3D
> _TIME_LOCALE(loc)->abmon,
> 12);
> LEGAL_ALT(0);
> + flags |=3D3D FLAG_MTH;
> continue;
>=20
> case 'C': /* The century number. */
> @@ -201,12 +227,14 @@
> split_year =3D3D 1;
> tm->tm_year =3D3D i;
> LEGAL_ALT(ALT_E);
> + flags |=3D3D FLAG_YEAR;
> continue;
>=20
> case 'd': /* The day of month. */
> case 'e':
> bp =3D3D conv_num(bp, &tm->tm_mday, 1, 31);
> LEGAL_ALT(ALT_O);
> + flags |=3D3D FLAG_MDAY;
> continue;
>=20
> case 'k': /* The hour (24-hour clock =3D
> representation). */
> @@ -232,6 +260,7 @@
> bp =3D3D conv_num(bp, &i, 1, 366);
> tm->tm_yday =3D3D i - 1;
> LEGAL_ALT(0);
> + flags |=3D3D FLAG_YDAY;
> continue;
>=20
> case 'M': /* The minute. */
> @@ -244,6 +273,7 @@
> bp =3D3D conv_num(bp, &i, 1, 12);
> tm->tm_mon =3D3D i - 1;
> LEGAL_ALT(ALT_O);
> + flags |=3D3D FLAG_MTH;
> continue;
>=20
> case 'p': /* The locale's equivalent of AM/PM. */
> @@ -287,6 +317,8 @@
>=20
> if (localtime_r(&sse, tm) =3D3D=3D3D =
NULL)
> bp =3D3D NULL;
> + else
> + flags |=3D3D FLAG_YDAY | =
FLAG_WDAY =3D
> | FLAG_MTH | FLAG_MDAY | FLAG_YEAR;
> }
> continue;
>=20
> @@ -300,11 +332,17 @@
> */
> bp =3D3D conv_num(bp, &i, 0, 53);
> LEGAL_ALT(ALT_O);
> + if (c =3D3D=3D3D 'U')
> + doff =3D3D TM_SUNDAY;
> + else
> + doff =3D3D TM_MONDAY;
> + woff =3D3D i;
> continue;
>=20
> case 'w': /* The day of week, beginning on sunday. =
=3D
> */
> bp =3D3D conv_num(bp, &tm->tm_wday, 0, 6);
> LEGAL_ALT(ALT_O);
> + flags |=3D3D FLAG_WDAY;
> continue;
>=20
> case 'u': /* The day of week, monday =3D3D 1. */
> @@ -336,6 +374,7 @@
> bp =3D3D conv_num(bp, &i, 0, 9999);
> tm->tm_year =3D3D i - TM_YEAR_BASE;
> LEGAL_ALT(ALT_E);
> + flags |=3D3D FLAG_YEAR;
> continue;
>=20
> case 'y': /* The year within 100 years of the =3D
> epoch. */
> @@ -353,6 +392,7 @@
> i =3D3D i + 1900 - TM_YEAR_BASE;
> }
> tm->tm_year =3D3D i;
> + flags |=3D3D FLAG_YEAR;
> continue;
>=20
> case 'Z':
> @@ -425,6 +465,7 @@
> continue;
> case '+':
> neg =3D3D 0;
> + flags |=3D3D FLAG_WDAY | FLAG_MTH | =3D
> FLAG_MDAY | FLAG_YEAR;
> break;
> case '-':
> neg =3D3D 1;
> @@ -529,6 +570,52 @@
> }
> }
>=20
> + if (!(flags & FLAG_YDAY) && (flags & FLAG_YEAR)) {
> + int isleap =3D3D is_leap_year(tm->tm_year + =
TM_YEAR_BASE);
> + if ((flags & (FLAG_MTH | FLAG_MDAY)) =3D3D=3D3D =
(FLAG_MTH | =3D
> FLAG_MDAY)) {
> + tm->tm_yday =3D3D =3D
> mths_per_yr_kind[isleap][tm->tm_mon] + (tm->tm_mday - 1);
> + flags |=3D3D FLAG_YDAY;
> + } else if (doff !=3D3D -1) {
> + if (!(flags & FLAG_WDAY)) {
> + tm->tm_wday =3D3D doff;
> + flags |=3D3D FLAG_WDAY;
> + }
> + tm->tm_yday =3D3D (7 - first_wday_of(tm->tm_year =
+ =3D
> TM_YEAR_BASE) +
> + doff) % 7 + (woff - 1) * 7 + tm->tm_wday =
=3D
> - doff;
> + flags |=3D3D FLAG_YDAY;
> + }
> + }
> +
> + if ((flags & (FLAG_YEAR | FLAG_YDAY)) =3D3D=3D3D (FLAG_YEAR | =3D
> FLAG_YDAY)) {
> + int isleap =3D3D is_leap_year(tm->tm_year + =
TM_YEAR_BASE);
> + if (!(flags & FLAG_MTH)) {
> + i =3D3D 0;
> + while (tm->tm_yday >=3D3D =3D
> mths_per_yr_kind[isleap][i])
> + i ++;
> + if (i > 12) {
> + i =3D3D 1;
> + tm->tm_yday -=3D3D =3D
> mths_per_yr_kind[isleap][12];
> + tm->tm_year ++;
> + }
> + tm->tm_mon =3D3D i - 1;
> + flags |=3D3D FLAG_MTH;
> + }
> + if (!(flags & FLAG_MDAY)) {
> + tm->tm_mday =3D3D tm->tm_yday - =3D
> mths_per_yr_kind[isleap][tm->tm_mon] + 1;
> + flags |=3D3D FLAG_MDAY;
> + }
> + if (!(flags & FLAG_WDAY)) {
> + i =3D3D 0;
> + woff =3D3D first_wday_of(tm->tm_year);
> + while (i ++ <=3D3D tm->tm_yday) {
> + if (woff ++ >=3D3D 6)
> + woff =3D3D 0;
> + }
> + tm->tm_wday =3D3D woff;
> + flags |=3D3D FLAG_WDAY;
> + }
> + }
> +
> return __UNCONST(bp);
> }
>=20
>=20
>=20
>> On 29 Jun 2015, at 19:55, Christos Zoulas <christos%zoulas.com@localhost> =
wrote:
>> =3D20
>> The following reply was made to PR lib/50009; it has been noted by =3D
> GNATS.
>> =3D20
>> From: christos%zoulas.com@localhost (Christos Zoulas)
>> To: gnats-bugs%NetBSD.org@localhost, lib-bug-people%netbsd.org@localhost,
>> gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost, =3D
> devnexen%gmail.com@localhost
>> Cc:
>> Subject: Re: lib/50009: strptime small enhancement
>> Date: Mon, 29 Jun 2015 14:53:59 -0400
>> =3D20
>> On Jun 29, 6:50pm, devnexen%gmail.com@localhost (David CARLIER) wrote:
>> -- Subject: Re: lib/50009: strptime small enhancement
>> =3D20
>> | Well, it's closer to OpenBSD version but I m not against following
>> | FreeBSD's path personally. If it s better I can provide a newer =3D
> version?
>> =3D20
>> Sure, why don't you look at them both and make a recommendation?
>> =3D20
>> Thanks,
>> =3D20
>> christos
>> =3D20
>=20
>=20
> --Apple-Mail=3D_65474D83-214C-489E-822A-D2420A0A27D0
> Content-Transfer-Encoding: 7bit
> Content-Disposition: attachment;
> filename=3Dsignature.asc
> Content-Type: application/pgp-signature;
> name=3Dsignature.asc
> Content-Description: Message signed with OpenPGP using GPGMail
>=20
> -----BEGIN PGP SIGNATURE-----
> Comment: GPGTools - https://gpgtools.org
>=20
> iQEcBAEBCgAGBQJVkbt/AAoJECNxxoUnxrf44tUH/1jH39r64I3xXXlZhLA9HHLx
> LIN+YXIxB3lVHNYjnM63W6YnEzUrlG4o3OTbtHn6PDk1D7zyg/SI0cVo95Gk9C+r
> ryKAfnyhmnCi34jdU4FQ79u4yqDxJawGZBeiiIYANg1od+cNfC2t8j4U4qDm53nO
> BoVhjTE1c978h1TShdaB66+LDJiLwIpL8X7JUU4UmskgJ65Knysa/91ZD36iUUxM
> O7iZAdOiQMENVKMC/LPL8FF6I/BaRYpcfNhuqGh6kmYuF3AA1wZnwWjQNpv70f5U
> Zmz34/4pjFuHDgBC3Gx6slukYl9IWY+yFXEIOdfDiK53Ejrtw9SzhoIrIxdkVCs=3D
> =3Djl1Z
> -----END PGP SIGNATURE-----
>=20
> --Apple-Mail=3D_65474D83-214C-489E-822A-D2420A0A27D0--
>=20
--Apple-Mail=_B162FE6C-9B49-46CF-85BE-D64EE31B7CD3
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename=signature.asc
Content-Type: application/pgp-signature;
name=signature.asc
Content-Description: Message signed with OpenPGP using GPGMail
-----BEGIN PGP SIGNATURE-----
Comment: GPGTools - https://gpgtools.org
iQEcBAEBCgAGBQJVlhK6AAoJECNxxoUnxrf4uzQIAJrjyYxZ5bEVO8GuglCygOsc
Mx5/mUf9HWl9IYN+hJbL62cLMA2aLxMPEQ/cUgEfcEjJrcRidi8Q/vcM/Vskdm7X
mVG7Sdm9NpryG52MWUHNhu5g2a+2heTipNCxazo+IMWIU8mOwB6LyhnzWbyHmDpc
5+Z8MLWzZvjCLwCcbU+S5rUbNn1EFvNx7Yl5aQ6v8MjyvZm14o3B/ZIGGdn8mj4c
be0isx8Pnhvfr8Cmr+7f7L2zndiX4ma44zkKU0lYNa/zYxH/6uZaxMOPten7QxwR
6tcri8Gz8gZAnUDqL6g6eDSZ/uL8y9BIFi8HC2UbTMCzD0ZPOmfj15XCtao54oQ=
=H8E5
-----END PGP SIGNATURE-----
--Apple-Mail=_B162FE6C-9B49-46CF-85BE-D64EE31B7CD3--
Home |
Main Index |
Thread Index |
Old Index