From 2543360be9c5bf8e1a0198b1a2c4987a256d96f1 Mon Sep 17 00:00:00 2001 From: David Bremner Date: Wed, 2 Jul 2014 07:55:57 +2100 Subject: [PATCH] Re: [PATCH 1/2] cli: S/MIME verification/decryption support --- 24/51c7ffee6a4f0607ebbff5ecd071b04c31a616 | 325 ++++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 24/51c7ffee6a4f0607ebbff5ecd071b04c31a616 diff --git a/24/51c7ffee6a4f0607ebbff5ecd071b04c31a616 b/24/51c7ffee6a4f0607ebbff5ecd071b04c31a616 new file mode 100644 index 000000000..1ae7ab0ee --- /dev/null +++ b/24/51c7ffee6a4f0607ebbff5ecd071b04c31a616 @@ -0,0 +1,325 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id 39B2F431FBF + for ; Tue, 1 Jul 2014 08:55:31 -0700 (PDT) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: 0 +X-Spam-Level: +X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none] + autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id KV6OIYpEI0+l for ; + Tue, 1 Jul 2014 08:55:27 -0700 (PDT) +Received: from mx.xen14.node3324.gplhost.com (gitolite.debian.net + [87.98.215.224]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) + (No client certificate requested) + by olra.theworths.org (Postfix) with ESMTPS id 35C43431FBC + for ; Tue, 1 Jul 2014 08:55:27 -0700 (PDT) +Received: from remotemail by mx.xen14.node3324.gplhost.com with local (Exim + 4.72) (envelope-from ) + id 1X20O6-0005or-I2; Tue, 01 Jul 2014 15:54:30 +0000 +Received: (nullmailer pid 17142 invoked by uid 1000); Tue, 01 Jul 2014 + 10:55:58 -0000 +From: David Bremner +To: Jameson Graef Rollins , Notmuch Mail + +Subject: Re: [PATCH 1/2] cli: S/MIME verification/decryption support +In-Reply-To: <1395031944-15557-2-git-send-email-jrollins@finestructure.net> +References: <1340995101-9616-1-git-send-email-jrollins@finestructure.net> + <1395031944-15557-1-git-send-email-jrollins@finestructure.net> + <1395031944-15557-2-git-send-email-jrollins@finestructure.net> +User-Agent: Notmuch/0.18.1+22~gbf82697 (http://notmuchmail.org) Emacs/24.3.1 + (x86_64-pc-linux-gnu) +Date: Tue, 01 Jul 2014 07:55:57 -0300 +Message-ID: <87wqbxic02.fsf@maritornes.cs.unb.ca> +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="=-=-=" +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Tue, 01 Jul 2014 15:55:31 -0000 + +--=-=-= +Content-Type: text/plain + +Jameson Graef Rollins writes: + +> The notmuch-show flags --decrypt and --verify will now also process +> S/MIME multiparts if encountered. Requires gmime-2.6 and gpgsm. + +I was trying to figure out how to test this. I tried a few couple signed +messages, but I got "bad" signature status in both cases. + +An example message is attached. + + http://mid.gmane.org/4F1423A1.90909@cms.hu-berlin.de + +Are we missing the signature between bad and untrusted signatures, or +does that distinction not exist for S/MIME? + + +--=-=-= +Content-Type: application/octet-stream +Content-Disposition: attachment; + filename="1326721985.H673045P22490.tesseract.cs.unb.ca:2,S" +Content-Transfer-Encoding: base64 + +UmV0dXJuLXBhdGg6IDxvcGVuc3luYy11c2Vycy1ib3VuY2VzQGxpc3RzLnNvdXJjZWZvcmdlLm5l +dD4KRW52ZWxvcGUtdG86IGJyZW1uZXJAdGVzc2VyYWN0LmNzLnVuYi5jYQpEZWxpdmVyeS1kYXRl +OiBNb24sIDE2IEphbiAyMDEyIDA5OjUzOjA1IC0wNDAwClJlY2VpdmVkOiBmcm9tIGZpZXJvLml0 +cy51bmIuY2EgKFsxMzEuMjAyLjEuMTBdKQoJYnkgdGVzc2VyYWN0LmNzLnVuYi5jYSB3aXRoIGVz +bXRwcyAoVExTMS4wOkRIRV9SU0FfQUVTXzI1Nl9DQkNfU0hBMTozMikKCShFeGltIDQuNzIpCgko +ZW52ZWxvcGUtZnJvbSA8b3BlbnN5bmMtdXNlcnMtYm91bmNlc0BsaXN0cy5zb3VyY2Vmb3JnZS5u +ZXQ+KQoJaWQgMVJtbXplLTAwMDVxZy1DegoJZm9yIGJyZW1uZXJAdGVzc2VyYWN0LmNzLnVuYi5j +YTsgTW9uLCAxNiBKYW4gMjAxMiAwOTo1MzowNSAtMDQwMApSZWNlaXZlZDogZnJvbSBteDIubmJw +ZWktZWNuLmNhIChteDIubmJwZWktZWNuLmNhIFsxOTguMTY0LjE2My4xOTVdKQoJYnkgZmllcm8u +aXRzLnVuYi5jYSAoOC4xMy44LzguMTMuOCkgd2l0aCBFU01UUCBpZCBxMEdEcXVjVzAyNjcwNgoJ +Zm9yIDxicmVtbmVyQHVuYi5jYT47IE1vbiwgMTYgSmFuIDIwMTIgMDk6NTI6NTYgLTA0MDAKUmVj +ZWl2ZWQ6IGZyb20gbXgyLm5icGVpLWVjbi5jYSAobG9jYWxob3N0LmxvY2FsZG9tYWluIFsxMjcu +MC4wLjFdKQoJYnkgbG9jYWxob3N0IChQb3N0Zml4KSB3aXRoIFNNVFAgaWQgRDI4OEE1MzQzQTcK +CWZvciA8YnJlbW5lckB1bmIuY2E+OyBNb24sIDE2IEphbiAyMDEyIDA5OjUyOjU2IC0wNDAwIChB +U1QpClJlY2VpdmVkOiBmcm9tIGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobGlzdHMuc291cmNlZm9y +Z2UubmV0IFsyMTYuMzQuMTgxLjg4XSkKCWJ5IG14Mi5uYnBlaS1lY24uY2EgKFBvc3RmaXgpIHdp +dGggRVNNVFAgaWQgNTA0RjQ1MzQzQjAKCWZvciA8YnJlbW5lckB1bmIuY2E+OyBNb24sIDE2IEph +biAyMDEyIDA5OjUyOjU2IC0wNDAwIChBU1QpClJlY2VpdmVkOiBmcm9tIGxvY2FsaG9zdCAoWzEy +Ny4wLjAuMV0gaGVsbz1zZnMtbWwtNC52MjkuY2gzLnNvdXJjZWZvcmdlLmNvbSkKCWJ5IHNmcy1t +bC00LnYyOS5jaDMuc291cmNlZm9yZ2UuY29tIHdpdGggZXNtdHAgKEV4aW0gNC43NikKCShlbnZl +bG9wZS1mcm9tIDxvcGVuc3luYy11c2Vycy1ib3VuY2VzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4p +CglpZCAxUm1telgtMDAwMHRJLTVEOyBNb24sIDE2IEphbiAyMDEyIDEzOjUyOjU1ICswMDAwClJl +Y2VpdmVkOiBmcm9tIHNvZy1teC0zLnY0My5jaDMuc291cmNlZm9yZ2UuY29tIChbMTcyLjI5LjQz +LjE5M10KCWhlbG89bXguc291cmNlZm9yZ2UubmV0KQoJYnkgc2ZzLW1sLTQudjI5LmNoMy5zb3Vy +Y2Vmb3JnZS5jb20gd2l0aCBlc210cCAoRXhpbSA0Ljc2KQoJKGVudmVsb3BlLWZyb20gPG1pY2hh +ZWwuYmVsbEBjbXMuaHUtYmVybGluLmRlPikgaWQgMVJtbXpXLTAwMDB0Qy1NMwoJZm9yIG9wZW5z +eW5jLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldDsKCU1vbiwgMTYgSmFuIDIwMTIgMTM6NTI6 +NTQgKzAwMDAKWC1BQ0wtV2FybjogClJlY2VpdmVkOiBmcm9tIGlyMS5jbXMuaHUtYmVybGluLmRl +IChbMTQxLjIwLjEuMTQ2XSkKCWJ5IHNvZy1teC0zLnY0My5jaDMuc291cmNlZm9yZ2UuY29tIHdp +dGggZXNtdHAgKEV4aW0gNC43NikKCWlkIDFSbW16US0wMDA0bHctNG0gZm9yIG9wZW5zeW5jLXVz +ZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldDsKCU1vbiwgMTYgSmFuIDIwMTIgMTM6NTI6NTQgKzAw +MDAKWC1Jcm9uUG9ydC1BVjogRT1Tb3Bob3M7aT0iNC43MSw1MTgsMTMyMDYyMDQwMCI7IAoJZD0i +cDdzJz9zY2FuJzIwOCI7YT0iODcyNjM2MzEiClJlY2VpdmVkOiBmcm9tIGJlbGx1cy5jbXMuaHUt +YmVybGluLmRlIChIRUxPIFsxNDEuMjAuMy4zNF0pIChbMTQxLjIwLjMuMzRdKQoJYnkgaXIxLXJl +bGF5LmNtcy5odS1iZXJsaW4uZGUgd2l0aCBFU01UUC9UTFMvREhFLVJTQS1DQU1FTExJQTI1Ni1T +SEE7CgkxNiBKYW4gMjAxMiAxNDoxODoyNiArMDEwMApNZXNzYWdlLUlEOiA8NEYxNDIzQTEuOTA5 +MDlAY21zLmh1LWJlcmxpbi5kZT4KRGF0ZTogTW9uLCAxNiBKYW4gMjAxMiAxNDoxODoyNSArMDEw +MApGcm9tOiBNaWNoYWVsIEJlbGwgPG1pY2hhZWwuYmVsbEBjbXMuaHUtYmVybGluLmRlPgpVc2Vy +LUFnZW50OiBNb3ppbGxhLzUuMCAoWDExOyBMaW51eCBpNjg2OwoJcnY6OS4wKSBHZWNrby8yMDEx +MTIyMiBUaHVuZGVyYmlyZC85LjAuMQpNSU1FLVZlcnNpb246IDEuMApUbzogb3BlbnN5bmMtdXNl +cnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ClJlZmVyZW5jZXM6IDxsb29tLjIwMTIwMTE2VDExNTc1 +Mi05MTNAcG9zdC5nbWFuZS5vcmc+CkluLVJlcGx5LVRvOiA8bG9vbS4yMDEyMDExNlQxMTU3NTIt +OTEzQHBvc3QuZ21hbmUub3JnPgpYLUVuaWdtYWlsLVZlcnNpb246IDEuMy40ClgtU3BhbS1TY29y +ZTogLTAuMCAoLykKWC1TcGFtLVJlcG9ydDogU3BhbSBGaWx0ZXJpbmcgcGVyZm9ybWVkIGJ5IG14 +LnNvdXJjZWZvcmdlLm5ldC4KCVNlZSBodHRwOi8vc3BhbWFzc2Fzc2luLm9yZy90YWcvIGZvciBt +b3JlIGRldGFpbHMuCgktMC4wIFRfUlBfTUFUQ0hFU19SQ1ZEIEVudmVsb3BlIHNlbmRlciBkb21h +aW4gbWF0Y2hlcyBoYW5kb3ZlciByZWxheQoJZG9tYWluClgtSGVhZGVycy1FbmQ6IDFSbW16US0w +MDA0bHctNG0KU3ViamVjdDogUmU6IFtPcGVuc3luYy11c2Vyc10gVHJvdWJsZSB3aXRoIGxpYndi +eG1sIGluc3RhbGxhdGlvbgpYLUJlZW5UaGVyZTogb3BlbnN5bmMtdXNlcnNAbGlzdHMuc291cmNl +Zm9yZ2UubmV0ClgtTWFpbG1hbi1WZXJzaW9uOiAyLjEuOQpQcmVjZWRlbmNlOiBsaXN0Ckxpc3Qt +SWQ6IDxvcGVuc3luYy11c2Vycy5saXN0cy5zb3VyY2Vmb3JnZS5uZXQ+Ckxpc3QtVW5zdWJzY3Jp +YmU6IDxodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9vcGVuc3lu +Yy11c2Vycz4sIAoJPG1haWx0bzpvcGVuc3luYy11c2Vycy1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZv +cmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgpMaXN0LUFyY2hpdmU6IDxodHRwOi8vc291cmNl +Zm9yZ2UubmV0L21haWxhcmNoaXZlL2ZvcnVtLnBocD9mb3J1bV9uYW1lPW9wZW5zeW5jLXVzZXJz +PgpMaXN0LVBvc3Q6IDxtYWlsdG86b3BlbnN5bmMtdXNlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0 +PgpMaXN0LUhlbHA6IDxtYWlsdG86b3BlbnN5bmMtdXNlcnMtcmVxdWVzdEBsaXN0cy5zb3VyY2Vm +b3JnZS5uZXQ/c3ViamVjdD1oZWxwPgpMaXN0LVN1YnNjcmliZTogPGh0dHBzOi8vbGlzdHMuc291 +cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL29wZW5zeW5jLXVzZXJzPiwgCgk8bWFpbHRvOm9w +ZW5zeW5jLXVzZXJzLXJlcXVlc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0P3N1YmplY3Q9c3Vic2Ny +aWJlPgpDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PT09PT09PT09 +PT09PTA5MzkwODMyMjQ2OTM2Mjk1ODk9PSIKRXJyb3JzLVRvOiBvcGVuc3luYy11c2Vycy1ib3Vu +Y2VzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApYLVBNWC1WZXJzaW9uOiA1LjYuMS4yMDY1NDM5LCBB +bnRpc3BhbS1FbmdpbmU6IDIuNy4yLjM3NjM3OSwgQW50aXNwYW0tRGF0YTogMjAxMi4xLjE2LjEz +NDIxNApYLVBlcmxNeC1TcGFtOiBHYXVnZT1YLCBQcm9iYWJpbGl0eT0xMCUsIFJlcG9ydD0nCiBU +T19JTl9TVUJKRUNUIDAuNSwgQk9EWVRFWFRQX1NJWkVfMzAwMF9MRVNTIDAsIF9fQU5ZX1VSSSAw +LCBfX0JPVU5DRV9DSEFMTEVOR0VfU1VCSiAwLCBfX0JPVU5DRV9ORFJfU1VCSl9FWEVNUFQgMCwg +X19DUF9VUklfSU5fQk9EWSAwLCBfX0NUIDAsIF9fQ1RZUEVfSEFTX0JPVU5EQVJZIDAsIF9fQ1RZ +UEVfTVVMVElQQVJUIDAsIF9fQ1RZUEVfTVVMVElQQVJUX01JWEVEIDAsIF9fSEFTX0xJU1RfSEVB +REVSIDAsIF9fSEFTX0xJU1RfSEVMUCAwLCBfX0hBU19MSVNUX1NVQlNDUklCRSAwLCBfX0hBU19M +SVNUX1VOU1VCU0NSSUJFIDAsIF9fSEFTX01TR0lEIDAsIF9fSU5UX1BST0RfQ09NUCAwLCBfX0xJ +TkVTX09GX1lFTExJTkcgMCwgX19NSU1FX1ZFUlNJT04gMCwgX19NT1pJTExBX01TR0lEIDAsIF9f +T0VNX1BSSUNFIDAsIF9fU0FORV9NU0dJRCAwLCBfX1NUT0NLX1BIUkFTRV83IDAsIF9fVE9fTUFM +Rk9STUVEXzIgMCwgX19UT19OT19OQU1FIDAsIF9fVVJJX05PX1dXVyAwLCBfX1VSSV9OUyAsIF9f +VVNFUl9BR0VOVCAwJwpYLVNwYW0tU2NvcmU6IC0xLjYKWC1TcGFtX2JhcjogLQoKRGllcyBpc3Qg +ZWluZSBrcnlwdG9ncmFmaXNjaCB1bnRlcnplaWNobmV0ZSBOYWNocmljaHQgaW0gTUlNRS1Gb3Jt +YXQuCgotLT09PT09PT09PT09PT09PTA5MzkwODMyMjQ2OTM2Mjk1ODk9PQpDb250ZW50LVR5cGU6 +IG11bHRpcGFydC9zaWduZWQ7IHByb3RvY29sPSJhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmUi +OwoJbWljYWxnPXNoYTE7IGJvdW5kYXJ5PSItLS0tLS0tLS0tLS1tczAzMDUwODA0MDEwNTAwMDQw +NzA1MDAwOCIKCkRpZXMgaXN0IGVpbmUga3J5cHRvZ3JhZmlzY2ggdW50ZXJ6ZWljaG5ldGUgTmFj +aHJpY2h0IGltIE1JTUUtRm9ybWF0LgoKLS0tLS0tLS0tLS0tLS1tczAzMDUwODA0MDEwNTAwMDQw +NzA1MDAwOApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMQpDb250 +ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCgpIaSwKCmNhbiB5b3UgcGxl +YXNlIHNlbmQgdGhlIGNvbXBsZXRlIG91dHB1dCBpbmNsdWRpbmcgdGhlIGNvbW1hbmQgbGluZSBp +bnB1dAp3aGljaCB5b3UgdXNlZCB0byBzdGFydCBjbWFrZT8KCkJUVyBkaWQgeW91IGluc3RhbGwg +bGliZXhwYXQxLWRldj8gKEkgdXNlIERlYmlhbiBzaWQuKQoKQmVzdCByZWdhcmRzCgpNaWNoYWVs +CgpBbSAwMS8xNi8xMiAxMjowOCwgc2NocmllYiBOaWtpdGFoIEJvYmhhdGU6Cj4gSGVsbG8KPj0y +MAo+IEkgYW0gdHJ5aW5nIHRvIGluc3RhbGwgbGlid2J4bWwgaW4gVWJ1bnR1IDExLjEwIHdpdGgg +Y21ha2UuIEkgaGF2ZT0yMAo+IGluc3RhbGxlZCBjbWFrZSBhbmQgZXhwYXQuIEhvd2V2ZXIgd2hl +biBJIHJ1biB0aGUgY29tbWFuZHMgaW4gdGhlPTIwCj4gSW5zdGFsbCB0ZXh0IGZpbGUsIEkgZ2V0 +IHRoZSBmb2xsb3dpbmcgZXJyb3I6Cj49MjAKPiAqKioqKioqKioqCj49MjAKPiBDTWFrZSBFcnJv +cjogVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gdGhpcyBwcm9qZWN0LCBidXQ9 +MjAKPiB0aGV5IGFyZSBzZXQgdG8gTk9URk9VTkQuCj4gUGxlYXNlIHNldCB0aGVtIG9yIG1ha2Ug +c3VyZSB0aGV5IGFyZSBzZXQgYW5kIHRlc3RlZCBjb3JyZWN0bHkgaW49MjAKPiB0aGUgQ01ha2Ug +ZmlsZXM6Cj4gRVhQQVRfSU5DTFVERV9ESVJTIChBRFZBTkNFRCkKPiAgICAgdXNlZCBhcyBpbmNs +dWRlIGRpcmVjdG9yeSBpbiBkaXJlY3RvcnkgL2hvbWUvLS0tL2xpYndieG1sLTAuMTEuMC9zcj0K +Ywo+ICAgICB1c2VkIGFzIGluY2x1ZGUgZGlyZWN0b3J5IGluIGRpcmVjdG9yeSAvaG9tZS8tLS0v +bGlid2J4bWwtMC4xMS4wL3RvPQpvbHMKPiBFWFBBVF9MSUJSQVJJRVMgKEFEVkFOQ0VEKQo+ICAg +ICBsaW5rZWQgYnkgdGFyZ2V0ICJ3YnhtbDIiIGluIGRpcmVjdG9yeSAvaG9tZS8tLS0vbGlid2J4 +bWwtMC4xMS4wL3NyPQpjCj49MjAKPiAtLSBDb25maWd1cmF0aW9uIGluY29tcGxldGUsIGVycm9y +cyBvY2N1cmVkIQo+PTIwCj4gKioqKioqKioqKgo+PTIwCj4gSSB3b3VsZCBhcHByZWNpYXRlIGFu +eSBoZWxwIHRyb3VibGVzaG9vdGluZyB0aGlzIQo+IFRoYW5rcyEKPj0yMAo+PTIwCj4gLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS09Ci0tLS0tLS0KPiBSU0EoUikgQ29uZmVyZW5jZSAyMDEyCj4gTWFyIDI3IC0gRmVi +IDIKPiBTYXZlICQ0MDAgYnkgSmFuLiAyNwo+IFJlZ2lzdGVyIG5vdyEKPiBodHRwOi8vcC5zZi5u +ZXQvc2Z1L3JzYS1zZmRldjJkZXYyCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX18KPiBPcGVuc3luYy11c2VycyBtYWlsaW5nIGxpc3QKPiBPcGVuc3luYy11 +c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKPiBodHRwczovL2xpc3RzLnNvdXJjZWZvcmdlLm5l +dC9saXN0cy9saXN0aW5mby9vcGVuc3luYy11c2VycwoKCi0tPTIwCl9fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KCk1pY2hh +ZWwgQmVsbCAgICAgICAgICAgICAgICAgICAgICAgIEh1bWJvbGR0LVVuaXZlcnNpdGFldCB6dSBC +ZXJsaW4KClRlbC46ICs0OSAoMCkzMC0yMDkzIDcwMTQzICAgICAgICAgIFpFIENvbXB1dGVyLSB1 +bmQgTWVkaWVuc2VydmljZQpGYXg6ICArNDkgKDApMzAtMjA5MyA3MDEzNSAgICAgICAgICBVbnRl +ciBkZW4gTGluZGVuIDYKbWljaGFlbC5iZWxsQGNtcy5odS1iZXJsaW4uZGUgICAgICAgRC0xMDA5 +OSBCZXJsaW4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fXwoKUEdQIEZpbmdlcnByaW50OiAwOUU0IDNEMjkgNDE1NiAyNzc0 +IDBGMkMgIEM2NDMgRDhCRCAxOTE4IDIwMzAgNUFBQgoKCi0tLS0tLS0tLS0tLS0tbXMwMzA1MDgw +NDAxMDUwMDA0MDcwNTAwMDgKQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1 +cmU7IG5hbWU9InNtaW1lLnA3cyIKQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CkNv +bnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPSJzbWltZS5wN3MiCkNvbnRl +bnQtRGVzY3JpcHRpb246IFMvTUlNRSBLcnlwdG9ncmFmaXNjaGUgVW50ZXJzY2hyaWZ0CgpNSUFH +Q1NxR1NJYjNEUUVIQXFDQU1JQUNBUUV4Q3pBSkJnVXJEZ01DR2dVQU1JQUdDU3FHU0liM0RRRUhB +UUFBb0lJT2d6Q0MKQkNFd2dnTUpvQU1DQVFJQ0FnREhNQTBHQ1NxR1NJYjNEUUVCQlFVQU1IRXhD +ekFKQmdOVkJBWVRBa1JGTVJ3d0dnWURWUVFLCkV4TkVaWFYwYzJOb1pTQlVaV3hsYTI5dElFRkhN +Ujh3SFFZRFZRUUxFeFpVTFZSbGJHVlRaV01nVkhKMWMzUWdRMlZ1ZEdWeQpNU013SVFZRFZRUURF +eHBFWlhWMGMyTm9aU0JVWld4bGEyOXRJRkp2YjNRZ1EwRWdNakFlRncwd05qRXlNVGt4TURJNU1E +QmEKRncweE9UQTJNekF5TXpVNU1EQmFNRm94Q3pBSkJnTlZCQVlUQWtSRk1STXdFUVlEVlFRS0V3 +cEVSazR0Vm1WeVpXbHVNUkF3CkRnWURWUVFMRXdkRVJrNHRVRXRKTVNRd0lnWURWUVFERXh0RVJr +NHRWbVZ5WldsdUlGQkRRU0JIYkc5aVlXd2dMU0JITURFdwpnZ0VpTUEwR0NTcUdTSWIzRFFFQkFR +VUFBNElCRHdBd2dnRUtBb0lCQVFEcG04Tm5oZmtOcnZXTlZNT1dVRFU5WXVsdVRPMlUKMXdCYmxT +SjAxQ0RyTkkvVzdNQXhCQXVaZ2VLbUZOSlNvQ2dqaEl0MGlRUmVXK0RpZU1GNHl4YkxLRFU1ZXky +UVJkRHRvQUI2CmZMOUtEaHNBdzRicFhDc3hFWHNNODRJa1E0d2NPSXRxYUFDYTd0eFBlS3ZTeGhP +YmRxM3UzaWJvN3dHdmRBL0JDYUwyYTg2OQowODBVTUUvMTVlT2t5R0tiZ2hvREp6QU5BbVZnVGUz +UkNTTXFsalZZSjlOMnhuRzJrQjNFN2Y4MWhuMXZNN1BiRDhVUndvcUQKb1pSZFFXdlkwaEQxVFAz +S1Vhelp2ZStTZzd2YTY0c1dWbFpEeitIVkV6Mm1IeWN3elVsVTI4a1ROSnB4ZGNWczZxY0xtUGto +Cm5TZXZQcU01T1VocWpLM0ptZnZERXZLOUFnTUJBQUdqZ2Rrd2dkWXdjQVlEVlIwZkJHa3daekJs +b0dPZ1lZWmZhSFIwY0RvdgpMM0JyYVM1MFpXeGxjMlZqTG1SbEwyTm5hUzFpYVc0dmMyVnlkbWxq +WlM5aFpsOUViM2R1Ykc5aFpFRlNUQzVqY213L0xXTnkKYkY5bWIzSnRZWFE5V0Y4MU1Ea21MV2x6 +YzNWbGNqMUVWRjlTVDA5VVgwTkJYekl3SFFZRFZSME9CQllFRkVtM3hzL29QUjkvCjZrUjdFeW4z +OFFwd1B0NWtNQjhHQTFVZEl3UVlNQmFBRkRIRGVSdTY5VlBYRitDSmVpMFhiQXF6SzUwek1BNEdB +MVVkRHdFQgovd1FFQXdJQkJqQVNCZ05WSFJNQkFmOEVDREFHQVFIL0FnRUNNQTBHQ1NxR1NJYjNE +UUVCQlFVQUE0SUJBUUE3NFZwM3dFZ1gKM0trWTdJR3ZXb253dlNpU3BzcFpHQkp3N0NqeTU2NS9s +aXpuOGwwWk1mWVRLM1M5dllDeXVmZG55VG1pZVR2aEVSSHVhM2lSCk0zNDdYeVluZFZObGpqTmo3 +czl6dzdDU0kwa2hVSFVqb1I4WTRwU0ZQVDh6NlhjZ2phSzk1cUdGS1VEMlAzTXlXQTBKYTZiYQpo +V3pBUDd1TlptUldKRTZ1RFQ4eU5RRmI2WXlDMlhKWlQ3R0doZkYwaFZibHcvaGM4NDN1UjdOVEJY +RG41VTJLYVlNbzRSTUoKaHA1ZXlPcFlIZ3dmK2FUVVdnUm8vU2craXdLMldMWDJvU3czVndCbnF5 +Tm9qV09sNzVsclhQMUxWdmFyUUljMDFCR1NiT3lICnhRb0xCek55dEc4TUhWUXMyRkhIekw4dzAw +Tnk4VEsvak01Slk2Z0E5L0ljTUlJRTlEQ0NBOXlnQXdJQkFnSUVDMkkwanpBTgpCZ2txaGtpRzl3 +MEJBUVVGQURCYU1Rc3dDUVlEVlFRR0V3SkVSVEVUTUJFR0ExVUVDaE1LUkVaT0xWWmxjbVZwYmpF +UU1BNEcKQTFVRUN4TUhSRVpPTFZCTFNURWtNQ0lHQTFVRUF4TWJSRVpPTFZabGNtVnBiaUJRUTBF +Z1IyeHZZbUZzSUMwZ1J6QXhNQjRYCkRUQTNNVEV5TURFd01qa3lNVm9YRFRFNU1EWXpNREF3TURB +d01Gb3dhREVMTUFrR0ExVUVCaE1DUkVVeEtEQW1CZ05WQkFvVApIMGgxYldKdmJHUjBMVlZ1YVha +bGNuTnBkR0ZsZENCNmRTQkNaWEpzYVc0eERqQU1CZ05WQkFNVEJVaFZMVU5CTVI4d0hRWUoKS29a +SWh2Y05BUWtCRmhCd2EybEFhSFV0WW1WeWJHbHVMbVJsTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVG +QUFPQ0FROEFNSUlCCkNnS0NBUUVBNnd4QjE3QW9qQUJ2UjdyRWtSOHYzd2ZxdUoxUkFHQng5Qmh2 +MHBRaXM5OGtDSmFhWVlPMWNzcGMwem5mRUFPYwpCazlsQmhiL3NXZlYxM0tGS0RjaWI3V2xZMXNG +QkhDSkFiR2twY05UZnFwL2VuVHREWk96WEZVelhPajUrbGNhSHduNnF0MkgKUTdvYWZtOHdmUHA5 +ZWZkM3lrUnpDV2hiWjdLM28va0NDTUh3NUR4ZTluYTRPZFFDWHF3cDZIaHBteDlDR0hxMlNQV3hy +UlpxCmRaSnptZmhtRFYzeVZZZ2hJdXlITi9qRFRvcnNoa2kzcFdGM09GSHBvazF3MDlMS1BEVVpS +ZEhaelV0N1pJWllFd2R2alZBSwpKQXNIeUtqenJBU1JmSEpnWHZKUUxFTmNCSndQR1hmSkdNU1hq +M0FjUzlDandRZHRNbHlEc1U0RDVSVjRCUUlEQVFBQm80SUIKc2pDQ0FhNHdFZ1lEVlIwVEFRSC9C +QWd3QmdFQi93SUJBVEFMQmdOVkhROEVCQU1DQVFZd0hRWURWUjBPQkJZRUZCLzFMRDczClFLc3Vr +S0JxMCtKNVh2SjJ6WU4wTUI4R0ExVWRJd1FZTUJhQUZFbTN4cy9vUFI5LzZrUjdFeW4zOFFwd1B0 +NWtNQnNHQTFVZApFUVFVTUJLQkVIQnJhVUJvZFMxaVpYSnNhVzR1WkdVd2dZZ0dBMVVkSHdTQmdE +QitNRDJnTzZBNWhqZG9kSFJ3T2k4dlkyUncKTVM1d1kyRXVaR1p1TG1SbEwyZHNiMkpoYkMxeWIy +OTBMV05oTDNCMVlpOWpjbXd2WTJGamNtd3VZM0pzTUQyZ082QTVoamRvCmRIUndPaTh2WTJSd01p +NXdZMkV1WkdadUxtUmxMMmRzYjJKaGJDMXliMjkwTFdOaEwzQjFZaTlqY213dlkyRmpjbXd1WTNK +cwpNSUdpQmdnckJnRUZCUWNCQVFTQmxUQ0JrakJIQmdnckJnRUZCUWN3QW9ZN2FIUjBjRG92TDJO +a2NERXVjR05oTG1SbWJpNWsKWlM5bmJHOWlZV3d0Y205dmRDMWpZUzl3ZFdJdlkyRmpaWEowTDJO +aFkyVnlkQzVqY25Rd1J3WUlLd1lCQlFVSE1BS0dPMmgwCmRIQTZMeTlqWkhBeUxuQmpZUzVrWm00 +dVpHVXZaMnh2WW1Gc0xYSnZiM1F0WTJFdmNIVmlMMk5oWTJWeWRDOWpZV05sY25RdQpZM0owTUEw +R0NTcUdTSWIzRFFFQkJRVUFBNElCQVFCTzNBT3pZTit6VkVQSkxKSFAxMitPYTd3emhDMmFqaTFT +R0xrUEhxWW4KbDI3ZDIrRnhYZ09vMjRwK3JDN3ZTNTN0TEdqRTQxRWZrd0VnTytjeTRKOW1VcHRU +bERxYTNndnprUjhDOTVZbDQzZm1ZZDVICkpyWitXcVFUVmRkd2h4bk9CQ1kwZitvVytSbWV5YlI2 +VFlEQVErQnlLNnJ1NkRGUEJSUXBJZWp1bnk3NWpqbTBFWnpjUHdaWgpKK2d4T2JRNjdSdE14aUZr +NklvNmpXUmRweTQwbURKMzlORjF0SnFBRnhvKzNoU0tWUlRWczFsL01MMTJsTG1UcSt0Z3JpOWIK +TEJFUUx3Tm9hQ2pHaG4yYU9NWUpCMFJkNWEzMXBiaVhFWkxWNElCeWxXZDUveTNOZmI5cTN4K2kx +bFhJMDV1K29KM3E5b3g0ClBidXVLVTNWV0luZ01JSUZZakNDQkVxZ0F3SUJBZ0lFRHl0T3JEQU5C +Z2txaGtpRzl3MEJBUVVGQURCb01Rc3dDUVlEVlFRRwpFd0pFUlRFb01DWUdBMVVFQ2hNZlNIVnRZ +bTlzWkhRdFZXNXBkbVZ5YzJsMFlXVjBJSHAxSUVKbGNteHBiakVPTUF3R0ExVUUKQXhNRlNGVXRR +MEV4SHpBZEJna3Foa2lHOXcwQkNRRVdFSEJyYVVCb2RTMWlaWEpzYVc0dVpHVXdIaGNOTURreE1U +STBNVEl5Ck56QTVXaGNOTVRJeE1USXpNVEl5TnpBNVdqQ0JvVEVMTUFrR0ExVUVCaE1DUkVVeEtE +QW1CZ05WQkFvVEgwaDFiV0p2YkdSMApMVlZ1YVhabGNuTnBkR0ZsZENCNmRTQkNaWEpzYVc0eE56 +QTFCZ05WQkFzVExscGxiblJ5WVd4bGFXNXlhV05vZEhWdVp5QkQKYjIxd2RYUmxjaTBnZFc1a0lF +MWxaR2xsYm5ObGNuWnBZMlV4R0RBV0Jnb0praWFKay9Jc1pBRUJFd2hpWld4c2JXbGphREVWCk1C +TUdBMVVFQXhNTVRXbGphR0ZsYkNCQ1pXeHNNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4 +QU1JSUJDZ0tDQVFFQQp4N2VET1lNQ2J3ektybm9EeUNCOXZIelg5bVFIMG4wSW42bUl4WmJMTDd3 +K2E3d0VzYXdLNlc1UUgyWURJSk8rc0VOWnVWOFYKeGZQNjBRL000bFRETnRVdGpBN014QVpIbTMy +bERxR2lpa0pxM0Q5ZFExWjNiQUN5WDJVWlZBUFdaRE5Pd1EvOW8zZVJzb1BFCjNQVkx0UXd5MUxq +ZU1VaEw0TUFGL0EwMWxvYUp2alVsMkxrUGJ5by9NTXBxdmYzSk5aVnBzcjZZVEFrVVdQVnBoLy9Z +YW1abgp0UEtlRS9iNXpCdUVVNjFNME0zb2hEYjdWWG4xZHo0dmtrQjBWNkZiNWJoSWE1dTBzcnVi +Z1ZTNXBsZTZUbDFFQk5CbUNnb1gKUkFFcGwxMm9DZ01lQzM4aUdHaTdDZERCdkNoSDZ0b0tXKzlm +N1lwZGZMODVvL25MQS81bnpRSURBUUFCbzRJQjJEQ0NBZFF3CkNRWURWUjBUQkFJd0FEQUxCZ05W +SFE4RUJBTUNCZUF3S1FZRFZSMGxCQ0l3SUFZSUt3WUJCUVVIQXdJR0NDc0dBUVVGQndNRQpCZ29y +QmdFRUFZSTNGQUlDTUIwR0ExVWREZ1FXQkJTMnVqRnRuemNhb0ZyRDFKcmYzZUd1SFlNK0R6QWZC +Z05WSFNNRUdEQVcKZ0JRZjlTdys5MENyTHBDZ2F0UGllVjd5ZHMyRGREQW9CZ05WSFJFRUlUQWZn +UjF0YVdOb1lXVnNMbUpsYkd4QVkyMXpMbWgxCkxXSmxjbXhwYmk1a1pUQ0Jnd1lEVlIwZkJId3dl +akE3b0RtZ040WTFhSFIwY0RvdkwyTmtjREV1Y0dOaExtUm1iaTVrWlM5bwpkUzFpWlhKc2FXNHRZ +MkV2Y0hWaUwyTnliQzlqWVdOeWJDNWpjbXd3TzZBNW9EZUdOV2gwZEhBNkx5OWpaSEF5TG5CallT +NWsKWm00dVpHVXZhSFV0WW1WeWJHbHVMV05oTDNCMVlpOWpjbXd2WTJGamNtd3VZM0pzTUlHZUJn +Z3JCZ0VGQlFjQkFRU0JrVENCCmpqQkZCZ2dyQmdFRkJRY3dBb1k1YUhSMGNEb3ZMMk5rY0RFdWNH +TmhMbVJtYmk1a1pTOW9kUzFpWlhKc2FXNHRZMkV2Y0hWaQpMMk5oWTJWeWRDOWpZV05sY25RdVkz +SjBNRVVHQ0NzR0FRVUZCekFDaGpsb2RIUndPaTh2WTJSd01pNXdZMkV1WkdadUxtUmwKTDJoMUxX +SmxjbXhwYmkxallTOXdkV0l2WTJGalpYSjBMMk5oWTJWeWRDNWpjblF3RFFZSktvWklodmNOQVFF +RkJRQURnZ0VCCkFBTjlYS0hTbnFKam5aUkZlN0xSMkdaWWtmRmtSV29Fb1JSQlRXMW9RTWVLYUZt +RnBtdnF0NFZKeW54TyszczZaK0d2K0x1eQp2Q2tZWDU4YytITThpdkZoUmFmVE5UT3R4SlRCUC9P +aml5Z3dtbWVBcnlxVm1meGtaTTlJMmV5aGRFMFdkUmIvZldrS0pzSDQKSm9WNmdXQU96VnlKZjhw +ZmJIYmdUNEJVRUVka0I0Mm15K1c2OXIzWUozM1d2NUZHTTBlbG51UzkwdlQzYlR2Yk1BekpHOVhR +CnN1aU1MWjNFaktIRFh3Q3NDUURCU09aYWttQU42TXZhQ3lqMUJDTkhiL2lyU2FpY1kvVm5HdEFZ +dDJTRzI3K0JFY2pReExnbwpMWFJyUmNlUXdvWUxlYjh6cDgxM3B5WGtmYWpZbnhXSEFBSXRNVlZE +UG9ZbEM2SnFKaDFRdlhReGdnTmVNSUlEV2dJQkFUQncKTUdneEN6QUpCZ05WQkFZVEFrUkZNU2d3 +SmdZRFZRUUtFeDlJZFcxaWIyeGtkQzFWYm1sMlpYSnphWFJoWlhRZ2VuVWdRbVZ5CmJHbHVNUTR3 +REFZRFZRUURFd1ZJVlMxRFFURWZNQjBHQ1NxR1NJYjNEUUVKQVJZUWNHdHBRR2gxTFdKbGNteHBi +aTVrWlFJRQpEeXRPckRBSkJnVXJEZ01DR2dVQW9JSUJ3ekFZQmdrcWhraUc5dzBCQ1FNeEN3WUpL +b1pJaHZjTkFRY0JNQndHQ1NxR1NJYjMKRFFFSkJURVBGdzB4TWpBeE1UWXhNekU0TWpWYU1DTUdD +U3FHU0liM0RRRUpCREVXQkJSMmF5K1d3dzZTVEI0RjBqeG9QQTl0CjVqdmxWREJmQmdrcWhraUc5 +dzBCQ1E4eFVqQlFNQXNHQ1dDR1NBRmxBd1FCQWpBS0JnZ3Foa2lHOXcwREJ6QU9CZ2dxaGtpRwo5 +dzBEQWdJQ0FJQXdEUVlJS29aSWh2Y05Bd0lDQVVBd0J3WUZLdzREQWdjd0RRWUlLb1pJaHZjTkF3 +SUNBU2d3ZndZSkt3WUIKQkFHQ054QUVNWEl3Y0RCb01Rc3dDUVlEVlFRR0V3SkVSVEVvTUNZR0Ex +VUVDaE1mU0hWdFltOXNaSFF0Vlc1cGRtVnljMmwwCllXVjBJSHAxSUVKbGNteHBiakVPTUF3R0Ex +VUVBeE1GU0ZVdFEwRXhIekFkQmdrcWhraUc5dzBCQ1FFV0VIQnJhVUJvZFMxaQpaWEpzYVc0dVpH +VUNCQThyVHF3d2dZRUdDeXFHU0liM0RRRUpFQUlMTVhLZ2NEQm9NUXN3Q1FZRFZRUUdFd0pFUlRF +b01DWUcKQTFVRUNoTWZTSFZ0WW05c1pIUXRWVzVwZG1WeWMybDBZV1YwSUhwMUlFSmxjbXhwYmpF +T01Bd0dBMVVFQXhNRlNGVXRRMEV4Ckh6QWRCZ2txaGtpRzl3MEJDUUVXRUhCcmFVQm9kUzFpWlhK +c2FXNHVaR1VDQkE4clRxd3dEUVlKS29aSWh2Y05BUUVCQlFBRQpnZ0VBcVJMTEVVL0c5RDJadnh0 +WlVnQlNSeVVQSlBpR05oS1JTZlFxdVR1YzkzSGJnLy9ZOGc0bVB2K1BkU0t0SFg4NER4eGUKdUZZ +MUNSZVZwUnpBTGt3RFIxa1NrRUNrc25sMkg4aldRc1Fkby84bys3QkxXcWVCNDNNWXlCYm5FSmZY +QXA5Wk5rdUxpaFVOCmdMRGpOUFB0MFlPNW8rUkdWek53Y1F1ak1Nc1JsSTBxdkM5eEZzNnJZbklh +UW84Y0x4am9GdTZFZHIzS280alNVZlhMUDRPNQo3U1piNVpIQk05VVIzTjJ1ZFE5RGt1OGQxSUtR +Qk5zcW1YM1ViZmg2ZS9vREtHMHM2VmVQVTlRLzR5ekU2MWR4Qmgxd3lFRzUKSnhHTlA0U1lmZ3k5 +R1M1SWR4amlmWXlaVG5tdVJyNGwyNVltN3R3dENldjVJazlTRW1oQkxRUTJVQUFBQUFBQUFBPT0K +LS0tLS0tLS0tLS0tLS1tczAzMDUwODA0MDEwNTAwMDQwNzA1MDAwOC0tCgoKLS09PT09PT09PT09 +PT09PT0wOTM5MDgzMjI0NjkzNjI5NTg5PT0KQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFy +c2V0PSJ1cy1hc2NpaSIKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UcmFuc2Zlci1FbmNvZGlu +ZzogN2JpdApDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmUKCi0tLS0tLS0tLS0tLS0tLS0tLS0t +LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t +LQpSU0EoUikgQ29uZmVyZW5jZSAyMDEyCk1hciAyNyAtIEZlYiAyClNhdmUgJDQwMCBieSBKYW4u +IDI3ClJlZ2lzdGVyIG5vdyEKaHR0cDovL3Auc2YubmV0L3NmdS9yc2Etc2ZkZXYyZGV2MgotLT09 +PT09PT09PT09PT09PTA5MzkwODMyMjQ2OTM2Mjk1ODk9PQpDb250ZW50LVR5cGU6IHRleHQvcGxh +aW47IGNoYXJzZXQ9InVzLWFzY2lpIgpNSU1FLVZlcnNpb246IDEuMApDb250ZW50LVRyYW5zZmVy +LUVuY29kaW5nOiA3Yml0CkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQoKX19fX19fX19fX19f +X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KT3BlbnN5bmMtdXNlcnMgbWFpbGlu +ZyBsaXN0Ck9wZW5zeW5jLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldApodHRwczovL2xpc3Rz +LnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9vcGVuc3luYy11c2VycwoKLS09PT09PT09 +PT09PT09PT0wOTM5MDgzMjI0NjkzNjI5NTg5PT0tLQoK +--=-=-=-- -- 2.26.2