From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?UTF-8?Q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9_?= =?UTF-8?Q?=D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2?= via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#63757: 29.0.91 order of package paths changed: random old versions of packages in load-path Date: Sun, 4 Jun 2023 22:14:54 +1000 Message-ID: References: <83y1l7gzqw.fsf@gnu.org> <87ilcb2p1l.fsf@posteo.net> <87sfb8g85v.fsf@posteo.net> <83a5xf7pi5.fsf@gnu.org> <87ttvnoehl.fsf@posteo.net> <8335377iyo.fsf@gnu.org> <87h6rnoa8v.fsf@posteo.net> <83v8g35ybo.fsf@gnu.org> <87cz2bo3qu.fsf@posteo.net> <83pm6b5t1i.fsf@gnu.org> Reply-To: =?UTF-8?Q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9_?= =?UTF-8?Q?=D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2?= Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="0000000000008aebbf05fd4cbcd9" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2421"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Philip Kaludercic , 63757@debbugs.gnu.org, monnier@iro.umontreal.ca To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Jun 04 14:16:14 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q5mec-0000Qi-Gq for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 04 Jun 2023 14:16:14 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q5meU-0000sR-9V; Sun, 04 Jun 2023 08:16:06 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q5meR-0000rd-1d for bug-gnu-emacs@gnu.org; Sun, 04 Jun 2023 08:16:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q5meQ-0005St-EQ for bug-gnu-emacs@gnu.org; Sun, 04 Jun 2023 08:16:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q5meQ-0007X1-AR for bug-gnu-emacs@gnu.org; Sun, 04 Jun 2023 08:16:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: =?UTF-8?Q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9_?= =?UTF-8?Q?=D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 04 Jun 2023 12:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 63757 X-GNU-PR-Package: emacs Original-Received: via spool by 63757-submit@debbugs.gnu.org id=B63757.168588091728883 (code B ref 63757); Sun, 04 Jun 2023 12:16:02 +0000 Original-Received: (at 63757) by debbugs.gnu.org; 4 Jun 2023 12:15:17 +0000 Original-Received: from localhost ([127.0.0.1]:45216 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5mdg-0007Vm-BD for submit@debbugs.gnu.org; Sun, 04 Jun 2023 08:15:17 -0400 Original-Received: from smtp41.i.mail.ru ([95.163.41.64]:43100) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5mdd-0007VX-QM for 63757@debbugs.gnu.org; Sun, 04 Jun 2023 08:15:15 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=list.ru; s=mail4; h=Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version:From:Subject:Content-Type:Content-Transfer-Encoding:To:Cc; bh=V8Grvuhh9ovl0msbEf1d24F+l1NLTtPoePRyFLB51Qk=; t=1685880913;x=1685970913; b=Lo2MFxP5PdW45+g5z32SSM3Y6BdWsTnO3/Y0+N0si2fJaM7NDJ2bEyaEUKUufS7UDZh6KWcUXgxz4nI2/swypWO6f35+vsCdHaKgISPue6Ly5io2uWGPrvzm/L91XgkXoNCsWwPkaNFmIIqNwBCplxSB1xLUT9xWDLZdc6MP0r4j4V7GPr4JNkIJpEAgcTGNxowTwOs9Y7l5ixIHySbPi8G8tJR+/Uiad1Md+eeAZn8/KKsKbKw1PrxOeGpEUZuijBrIQBKkyL9GNUmKQuuxKocjQlWKPrKgVgzaDbucgHD13aNHWxjxo4+RjqTdGXpkOMZrIRVUuMo6ri8tzT/dLQ==; Original-Received: by smtp41.i.mail.ru with esmtpa (envelope-from ) id 1q5mdW-00AX5m-Qx for 63757@debbugs.gnu.org; Sun, 04 Jun 2023 15:15:07 +0300 Original-Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-3f7a8089709so642225e9.1 for <63757@debbugs.gnu.org>; Sun, 04 Jun 2023 05:15:06 -0700 (PDT) X-Gm-Message-State: AC+VfDxwYBnxoIp1rw29gVHsqKiGQhV9pI/Nqmhm5BycjcqwJoGP1Ca8 sHAv7ldnKlc6LBy/ef61iabNIfiQhrdjDjIWZAs= X-Google-Smtp-Source: ACHHUZ7HpKpHW/eNB/gJxFF4Vl012MkO8o+DxyVW6YPe81wB8fITzUVeoOCt05coCsZLAHZTl+EnaqyTQ+RTeyBMow4= X-Received: by 2002:a05:600c:2146:b0:3f7:3636:358c with SMTP id v6-20020a05600c214600b003f73636358cmr1707789wml.11.1685880906114; Sun, 04 Jun 2023 05:15:06 -0700 (PDT) In-Reply-To: <83pm6b5t1i.fsf@gnu.org> X-Gmail-Original-Message-ID: Authentication-Results: smtp41.i.mail.ru; auth=pass smtp.auth=artscan@list.ru smtp.mailfrom=artscan@list.ru X-Mailru-Src: smtp X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD988F25420CCA9469ABF45951B91126D7E05B93CEDF3339C25182A05F5380850405ABDB99FA157303806BD22C2B9C7D29D95C1D890B8B3193D44EF450D7C4C83F2 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE78AC0750F3304E924EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006370BEBC60587DC626C8638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8D450DB2B8261931B455099EE5E580D546F9789CCF6C18C3F8528715B7D10C86878DA827A17800CE71AE4D56B06699BBC9FA2833FD35BB23D27C277FBC8AE2E8B60DAA957BE55B71CA471835C12D1D977C4224003CC836476EB9C4185024447017B076A6E789B0E975F5C1EE8F4F765FC56A390B5305F35C83AA81AA40904B5D9CF19DD082D7633A078D18283394535A93AA81AA40904B5D98AA50765F7900637A75C02CE4B73796CD81D268191BDAD3D3666184CF4C3C14F3FC91FA280E0CE3D1A620F70A64A45A98AA50765F79006372E808ACE2090B5E1725E5C173C3A84C3C5EA940A35A165FF2DBA43225CD8A89F83C798A30B85E16B262FEC7FBD7D1F5BB5C8C57E37DE458BEDA766A37F9254B7 X-C1DE0DAB: 0D63561A33F958A546B910333165E30302348822272779F01D03DB261DD22C55F87CCE6106E1FC07E67D4AC08A07B9B065B78C30F681404DCB5012B2E24CD356 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF77DD89D51EBB7742D3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CFB04BB38CB3F770B984D385E2BCAD1A8CE1616A8AD7D4828810BDFDDD7379C010698455FC0CD9C182F4BC53521BD43B01E5CB14C679924D28A31C62C391426DE6CAACD699CDC6F98202C26D483E81D6BE1362B2BFE906F14DEF4373B74A18CF49CC2E138FFB4ACBED X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojZIfw4O47JkLjXj/Pek++uQ== X-Mailru-Sender: 4C235FE2E5D2D89056C959CA05ACF41DA827FB47F222B55579416AC0E4CA6B42B6D7C204EFE07EBBA3C36B4D8423ABA5C77752E0C033A69EC36ED9D1848BBC3A06988B367FA93C37B4A721A3011E896F X-Mras: Ok X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:262940 Archived-At: --0000000000008aebbf05fd4cbcd9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable I've tested two other variants. The simplest fix diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index ba0e3618f28..6eaf261f5f4 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -922,11 +922,13 @@ correspond to previously loaded files." (v2 (package-desc-version p2))) (or ;; Prefer VC packages. - (package-vc-p p1) - (package-vc-p p2) + (and + (package-vc-p p1) + (not (package-vc-p p2))) ;; Prefer builtin packages. - (package-disabled-p p1 v1) - (not (package-disabled-p p2 v2)))))))) + (and + (package-built-in-p p1 v1) + (not (package-built-in-p p2 v2))))))))) ;; Check if PACKAGE is available in `package-alist'. (while (when pkg-descs "Move to package-process-define-package" variant diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index ba0e3618f28..c184625d754 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el @@ -686,7 +686,7 @@ Convert EXP into a `package-desc' object using the If there already exists a package by the same name in `package-alist', insert this object there such that the packages -are sorted with the highest version first." +are sorted with VC and builtin packages first and the highest version second." (when (eq (car-safe exp) 'define-package) (let* ((new-pkg-desc (apply #'package-desc-from-define (cdr exp))) (name (package-desc-name new-pkg-desc)) @@ -696,13 +696,29 @@ are sorted with the highest version first." ;; If there's no old package, just add this to `package-alist'. (push (list name new-pkg-desc) package-alist) ;; If there is, insert the new package at the right place in the list. - (while - (if (and (cdr old-pkgs) - (version-list-< version - (package-desc-version (cadr old-pkgs)))) - (setq old-pkgs (cdr old-pkgs)) - (push new-pkg-desc (cdr old-pkgs)) - nil))) + (progn + ;; Prefer newer packages + (while + (if (and (cdr old-pkgs) + (version-list-< version + (package-desc-version (cadr old-pkgs)))) + (setq old-pkgs (cdr old-pkgs)) + (push new-pkg-desc (cdr old-pkgs)) + nil)) + (let ((pkg-desc (sort (cdr (assq name package-alist)) + (lambda (p1 p2) + (let ((v1 (package-desc-version p1)) + (v2 (package-desc-version p2))) + (or + (and + ;; Prefer VC packages. + (package-vc-p p1) + (not (package-vc-p p2))) + ;; Prefer builtin packages. + (and + (package-built-in-p p1 v1) + (not (package-built-in-p p2 v2))))))))) + (setq new-pkg-desc (car pkg-desc))))) new-pkg-desc))) (declare-function package-vc-commit "package-vc" (pkg)) @@ -916,17 +932,7 @@ correspond to previously loaded files." (defun package--get-activatable-pkg (pkg-name) ;; Is "activatable" a word? - (let ((pkg-descs (sort (cdr (assq pkg-name package-alist)) - (lambda (p1 p2) - (let ((v1 (package-desc-version p1)) - (v2 (package-desc-version p2))) - (or - ;; Prefer VC packages. - (package-vc-p p1) - (package-vc-p p2) - ;; Prefer builtin packages. - (package-disabled-p p1 v1) - (not (package-disabled-p p2 v2)))))))) + (let ((pkg-descs (cdr (assq pkg-name package-alist)))) ;; Check if PACKAGE is available in `package-alist'. (while (when pkg-descs On Sun, Jun 4, 2023 at 10:07=E2=80=AFPM Eli Zaretskii wrote: > > From: Philip Kaludercic > > Cc: artscan@list.ru, monnier@iro.umontreal.ca, 63757@debbugs.gnu.org > > Date: Sun, 04 Jun 2023 11:39:53 +0000 > > > > Eli Zaretskii writes: > > > > > Is that a reverse diff or something? The code we have now already > > > does sort the list... > > > > No, the current code passes a non-nil NOSORT flag to `directory-files', > > which inhibits sorting? > > I'm confused. The code which the patch adds, viz.: > > > (defun package--get-activatable-pkg (pkg-name) > > ;; Is "activatable" a word? > > - (let ((pkg-descs (cdr (assq pkg-name package-alist)))) > > + (let ((pkg-descs (sort (cdr (assq pkg-name package-alist)) > > + (lambda (p1 p2) > > + (let ((v1 (package-desc-version p1)) > > + (v2 (package-desc-version p2))) > > + (or > > + ;; Prefer source packages. > > + (eq (package-desc-kind p1) 'vc) > > + (not (eq (package-desc-kind p2) 'vc)) > > + ;; Prefer builtin packages. > > + (package-disabled-p p1 v1) > > + (not (package-disabled-p p2 v2)))))))) > > ;; Check if PACKAGE is available in `package-alist'. > > is already in the version of package.el on the emacs-29 branch. And > the code which the patch removes, viz.: > > > ;; Check if PACKAGE is available in `package-alist'. > > (while > > (when pkg-descs > > (let ((available-version (package-desc-version (car > pkg-descs)))) > > - (or (package-disabled-p pkg-name available-version) > > - ;; Prefer a builtin package. > > - (package-built-in-p pkg-name available-version)))) > > + (package-disabled-p pkg-name available-version))) > > (setq pkg-descs (cdr pkg-descs))) > > (car pkg-descs))) > > is already removed on the emacs-29 branch. > > What am I missing here? > --=20 __________________________ =D0=A1 =D1=83=D0=B2=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC, =D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2 =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8= =D0=B9 =D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B5=D0=B2=D0=B8=D1=87 =D1=81=D0=BE=D1=82. 8-924-202-25-65 e-mail: artscan@list.ru --0000000000008aebbf05fd4cbcd9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+SSYjMzk7dmUgdGVzdGVkIHR3byBvdGhlciB2YXJpYW50cy48YnI+PGJy PlRoZSBzaW1wbGVzdCBmaXg8YnI+PGRpdj48ZGl2PjxkaXY+PGRpdj48ZGl2PjxkaXY+PGJyPmRp ZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbCBiL2xpc3AvZW1hY3MtbGlzcC9w YWNrYWdlLmVsPGJyPmluZGV4IGJhMGUzNjE4ZjI4Li42ZWFmMjYxZjVmNCAxMDA2NDQ8YnI+LS0t IGEvbGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWw8YnI+KysrIGIvbGlzcC9lbWFjcy1saXNwL3Bh Y2thZ2UuZWw8YnI+QEAgLTkyMiwxMSArOTIyLDEzIEBAIGNvcnJlc3BvbmQgdG8gcHJldmlvdXNs eSBsb2FkZWQgZmlsZXMuJnF1b3Q7PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgICh2MiAocGFja2FnZS1kZXNjLXZlcnNpb24gcDIpKSk8YnI+wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG9yPGJyPsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgUHJlZmVyIFZDIHBhY2th Z2VzLjxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHBh Y2thZ2UtdmMtcCBwMSk8YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoChwYWNrYWdlLXZjLXAgcDIpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAoYW5kPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKHBhY2thZ2UtdmMtcCBwMSk8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobm90IChwYWNrYWdlLXZjLXAgcDIpKSk8YnI+wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBQcmVmZXIgYnVp bHRpbiBwYWNrYWdlcy48YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoChwYWNrYWdlLWRpc2FibGVkLXAgcDEgdjEpPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobm90IChwYWNrYWdlLWRpc2FibGVkLXAgcDIgdjIp KSkpKSkpKTxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KGFuZDxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChw YWNrYWdlLWJ1aWx0LWluLXAgcDEgdjEpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgKG5vdCAocGFja2FnZS1idWlsdC1pbi1wIHAyIHYyKSkpKSkpKSkp PGJyPsKgIMKgIMKgOzsgQ2hlY2sgaWYgUEFDS0FHRSBpcyBhdmFpbGFibGUgaW4gYHBhY2thZ2Ut YWxpc3QmIzM5Oy48YnI+wqAgwqAgwqAod2hpbGU8YnI+wqAgwqAgwqAgwqAgwqAod2hlbiBwa2ct ZGVzY3M8YnI+PGJyPjxicj48YnI+PC9kaXY+PGRpdj4mcXVvdDtNb3ZlIHRvIHBhY2thZ2UtcHJv Y2Vzcy1kZWZpbmUtcGFja2FnZSZxdW90OyB2YXJpYW50PGJyPjwvZGl2PjxkaXY+PGJyPmRpZmYg LS1naXQgYS9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbCBiL2xpc3AvZW1hY3MtbGlzcC9wYWNr YWdlLmVsPGJyPmluZGV4IGJhMGUzNjE4ZjI4Li5jMTg0NjI1ZDc1NCAxMDA2NDQ8YnI+LS0tIGEv bGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWw8YnI+KysrIGIvbGlzcC9lbWFjcy1saXNwL3BhY2th Z2UuZWw8YnI+QEAgLTY4Niw3ICs2ODYsNyBAQCBDb252ZXJ0IEVYUCBpbnRvIGEgYHBhY2thZ2Ut ZGVzYyYjMzk7IG9iamVjdCB1c2luZyB0aGU8YnI+wqA8YnI+wqBJZiB0aGVyZSBhbHJlYWR5IGV4 aXN0cyBhIHBhY2thZ2UgYnkgdGhlIHNhbWUgbmFtZSBpbjxicj7CoGBwYWNrYWdlLWFsaXN0JiMz OTssIGluc2VydCB0aGlzIG9iamVjdCB0aGVyZSBzdWNoIHRoYXQgdGhlIHBhY2thZ2VzPGJyPi1h cmUgc29ydGVkIHdpdGggdGhlIGhpZ2hlc3QgdmVyc2lvbiBmaXJzdC4mcXVvdDs8YnI+K2FyZSBz b3J0ZWQgd2l0aCBWQyBhbmQgYnVpbHRpbiBwYWNrYWdlcyBmaXJzdCBhbmQgdGhlIGhpZ2hlc3Qg dmVyc2lvbiBzZWNvbmQuJnF1b3Q7PGJyPsKgIMKgKHdoZW4gKGVxIChjYXItc2FmZSBleHApICYj Mzk7ZGVmaW5lLXBhY2thZ2UpPGJyPsKgIMKgIMKgKGxldCogKChuZXctcGtnLWRlc2MgKGFwcGx5 ICMmIzM5O3BhY2thZ2UtZGVzYy1mcm9tLWRlZmluZSAoY2RyIGV4cCkpKTxicj7CoCDCoCDCoCDC oCDCoCDCoCAobmFtZSAocGFja2FnZS1kZXNjLW5hbWUgbmV3LXBrZy1kZXNjKSk8YnI+QEAgLTY5 NiwxMyArNjk2LDI5IEBAIGFyZSBzb3J0ZWQgd2l0aCB0aGUgaGlnaGVzdCB2ZXJzaW9uIGZpcnN0 LiZxdW90Ozxicj7CoCDCoCDCoCDCoCDCoCDCoDs7IElmIHRoZXJlJiMzOTtzIG5vIG9sZCBwYWNr YWdlLCBqdXN0IGFkZCB0aGlzIHRvIGBwYWNrYWdlLWFsaXN0JiMzOTsuPGJyPsKgIMKgIMKgIMKg IMKgIMKgKHB1c2ggKGxpc3QgbmFtZSBuZXctcGtnLWRlc2MpIHBhY2thZ2UtYWxpc3QpPGJyPsKg IMKgIMKgIMKgIMKgOzsgSWYgdGhlcmUgaXMsIGluc2VydCB0aGUgbmV3IHBhY2thZ2UgYXQgdGhl IHJpZ2h0IHBsYWNlIGluIHRoZSBsaXN0Ljxicj4tIMKgIMKgIMKgIMKgKHdoaWxlPGJyPi0gwqAg wqAgwqAgwqAgwqAgwqAoaWYgKGFuZCAoY2RyIG9sZC1wa2dzKTxicj4tIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgICh2ZXJzaW9uLWxpc3QtJmx0OyB2ZXJzaW9uPGJyPi0gwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHBhY2thZ2UtZGVz Yy12ZXJzaW9uIChjYWRyIG9sZC1wa2dzKSkpKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KHNldHEgb2xkLXBrZ3MgKGNkciBvbGQtcGtncykpPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAo cHVzaCBuZXctcGtnLWRlc2MgKGNkciBvbGQtcGtncykpPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAg wqBuaWwpKSk8YnI+KyDCoCDCoCDCoCDCoChwcm9nbjxicj4rIMKgIMKgIMKgIMKgIMKgOzsgUHJl ZmVyIG5ld2VyIHBhY2thZ2VzPGJyPisgwqAgwqAgwqAgwqAgwqAod2hpbGU8YnI+KyDCoCDCoCDC oCDCoCDCoCDCoCDCoChpZiAoYW5kIChjZHIgb2xkLXBrZ3MpPGJyPisgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgKHZlcnNpb24tbGlzdC0mbHQ7IHZlcnNpb248YnI+KyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocGFja2Fn ZS1kZXNjLXZlcnNpb24gKGNhZHIgb2xkLXBrZ3MpKSkpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAoc2V0cSBvbGQtcGtncyAoY2RyIG9sZC1wa2dzKSk8YnI+KyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoChwdXNoIG5ldy1wa2ctZGVzYyAoY2RyIG9sZC1wa2dzKSk8YnI+KyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoG5pbCkpPGJyPisgwqAgwqAgwqAgwqAgwqAobGV0ICgocGtnLWRlc2Mg KHNvcnQgKGNkciAoYXNzcSBuYW1lIHBhY2thZ2UtYWxpc3QpKTxicj4rIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGxhbWJkYSAocDEgcDIpPGJyPisgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobGV0ICgodjEg KHBhY2thZ2UtZGVzYy12ZXJzaW9uIHAxKSk8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh2MiAocGFja2FnZS1kZXNjLXZlcnNp b24gcDIpKSk8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoChvcjxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIChhbmQ8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IFByZWZlciBWQyBwYWNrYWdlcy48YnI+KyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChwYWNr YWdlLXZjLXAgcDEpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAobm90IChwYWNrYWdlLXZjLXAgcDIpKSk8YnI+KyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA7OyBQcmVmZXIgYnVp bHRpbiBwYWNrYWdlcy48YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAoYW5kPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAocGFja2FnZS1idWlsdC1pbi1wIHAxIHYxKTxicj4r IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KG5vdCAocGFja2FnZS1idWlsdC1pbi1wIHAyIHYyKSkpKSkpKSkpPGJyPisgwqAgwqAgwqAgwqAg wqAgwqAoc2V0cSBuZXctcGtnLWRlc2MgKGNhciBwa2ctZGVzYykpKSkpPGJyPsKgIMKgIMKgIMKg bmV3LXBrZy1kZXNjKSkpPGJyPsKgPGJyPsKgKGRlY2xhcmUtZnVuY3Rpb24gcGFja2FnZS12Yy1j b21taXQgJnF1b3Q7cGFja2FnZS12YyZxdW90OyAocGtnKSk8YnI+QEAgLTkxNiwxNyArOTMyLDcg QEAgY29ycmVzcG9uZCB0byBwcmV2aW91c2x5IGxvYWRlZCBmaWxlcy4mcXVvdDs8YnI+wqA8YnI+ wqAoZGVmdW4gcGFja2FnZS0tZ2V0LWFjdGl2YXRhYmxlLXBrZyAocGtnLW5hbWUpPGJyPsKgIMKg OzsgSXMgJnF1b3Q7YWN0aXZhdGFibGUmcXVvdDsgYSB3b3JkPzxicj4tIMKgKGxldCAoKHBrZy1k ZXNjcyAoc29ydCAoY2RyIChhc3NxIHBrZy1uYW1lIHBhY2thZ2UtYWxpc3QpKTxicj4tIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsYW1iZGEgKHAxIHAyKTxicj4tIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsZXQgKCh2MSAocGFja2FnZS1kZXNj LXZlcnNpb24gcDEpKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgICh2MiAocGFja2FnZS1kZXNjLXZlcnNpb24gcDIpKSk8YnI+LSDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAob3I8YnI+LSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDs7IFByZWZlciBWQyBwYWNrYWdlcy48YnI+LSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChwYWNrYWdlLXZjLXAg cDEpPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAocGFj a2FnZS12Yy1wIHAyKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgOzsgUHJlZmVyIGJ1aWx0aW4gcGFja2FnZXMuPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAocGFja2FnZS1kaXNhYmxlZC1wIHAxIHYxKTxicj4t IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG5vdCAocGFja2Fn ZS1kaXNhYmxlZC1wIHAyIHYyKSkpKSkpKSk8YnI+KyDCoChsZXQgKChwa2ctZGVzY3MgKGNkciAo YXNzcSBwa2ctbmFtZSBwYWNrYWdlLWFsaXN0KSkpKTxicj7CoCDCoCDCoDs7IENoZWNrIGlmIFBB Q0tBR0UgaXMgYXZhaWxhYmxlIGluIGBwYWNrYWdlLWFsaXN0JiMzOTsuPGJyPsKgIMKgIMKgKHdo aWxlPGJyPsKgIMKgIMKgIMKgIMKgKHdoZW4gcGtnLWRlc2NzPGJyPjwvZGl2PjwvZGl2PjwvZGl2 PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRp diBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIFN1biwgSnVuIDQsIDIwMjMgYXQgMTA6 MDfigK9QTSBFbGkgWmFyZXRza2lpICZsdDs8YSBocmVmPSJtYWlsdG86ZWxpekBnbnUub3JnIiB0 YXJnZXQ9Il9ibGFuayI+ZWxpekBnbnUub3JnPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9j a3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhl eDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4 Ij4mZ3Q7IEZyb206IFBoaWxpcCBLYWx1ZGVyY2ljICZsdDs8YSBocmVmPSJtYWlsdG86cGhpbGlw a0Bwb3N0ZW8ubmV0IiB0YXJnZXQ9Il9ibGFuayI+cGhpbGlwa0Bwb3N0ZW8ubmV0PC9hPiZndDs8 YnI+DQomZ3Q7IENjOiA8YSBocmVmPSJtYWlsdG86YXJ0c2NhbkBsaXN0LnJ1IiB0YXJnZXQ9Il9i bGFuayI+YXJ0c2NhbkBsaXN0LnJ1PC9hPizCoCA8YSBocmVmPSJtYWlsdG86bW9ubmllckBpcm8u dW1vbnRyZWFsLmNhIiB0YXJnZXQ9Il9ibGFuayI+bW9ubmllckBpcm8udW1vbnRyZWFsLmNhPC9h PizCoCA8YSBocmVmPSJtYWlsdG86NjM3NTdAZGViYnVncy5nbnUub3JnIiB0YXJnZXQ9Il9ibGFu ayI+NjM3NTdAZGViYnVncy5nbnUub3JnPC9hPjxicj4NCiZndDsgRGF0ZTogU3VuLCAwNCBKdW4g MjAyMyAxMTozOTo1MyArMDAwMDxicj4NCiZndDsgPGJyPg0KJmd0OyBFbGkgWmFyZXRza2lpICZs dDs8YSBocmVmPSJtYWlsdG86ZWxpekBnbnUub3JnIiB0YXJnZXQ9Il9ibGFuayI+ZWxpekBnbnUu b3JnPC9hPiZndDsgd3JpdGVzOjxicj4NCiZndDsgPGJyPg0KJmd0OyAmZ3Q7IElzIHRoYXQgYSBy ZXZlcnNlIGRpZmYgb3Igc29tZXRoaW5nP8KgIFRoZSBjb2RlIHdlIGhhdmUgbm93IGFscmVhZHk8 YnI+DQomZ3Q7ICZndDsgZG9lcyBzb3J0IHRoZSBsaXN0Li4uPGJyPg0KJmd0OyA8YnI+DQomZ3Q7 IE5vLCB0aGUgY3VycmVudCBjb2RlIHBhc3NlcyBhIG5vbi1uaWwgTk9TT1JUIGZsYWcgdG8gYGRp cmVjdG9yeS1maWxlcyYjMzk7LDxicj4NCiZndDsgd2hpY2ggaW5oaWJpdHMgc29ydGluZz88YnI+ DQo8YnI+DQpJJiMzOTttIGNvbmZ1c2VkLsKgIFRoZSBjb2RlIHdoaWNoIHRoZSBwYXRjaCBhZGRz LCB2aXouOjxicj4NCjxicj4NCiZndDvCoCAoZGVmdW4gcGFja2FnZS0tZ2V0LWFjdGl2YXRhYmxl LXBrZyAocGtnLW5hbWUpPGJyPg0KJmd0O8KgIMKgIDs7IElzICZxdW90O2FjdGl2YXRhYmxlJnF1 b3Q7IGEgd29yZD88YnI+DQomZ3Q7IC3CoCAobGV0ICgocGtnLWRlc2NzIChjZHIgKGFzc3EgcGtn LW5hbWUgcGFja2FnZS1hbGlzdCkpKSk8YnI+DQomZ3Q7ICvCoCAobGV0ICgocGtnLWRlc2NzIChz b3J0IChjZHIgKGFzc3EgcGtnLW5hbWUgcGFja2FnZS1hbGlzdCkpPGJyPg0KJmd0OyArwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAobGFtYmRhIChwMSBwMik8YnI+DQomZ3Q7 ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChsZXQgKCh2MSAocGFj a2FnZS1kZXNjLXZlcnNpb24gcDEpKTxicj4NCiZndDsgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHYyIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBwMikp KTxicj4NCiZndDsgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KG9yPGJyPg0KJmd0OyArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgOzsgUHJlZmVyIHNvdXJjZSBwYWNrYWdlcy48YnI+DQomZ3Q7ICvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoZXEgKHBhY2thZ2UtZGVzYy1raW5kIHAxKSAm IzM5O3ZjKTxicj4NCiZndDsgK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIChub3QgKGVxIChwYWNrYWdlLWRlc2Mta2luZCBwMikgJiMzOTt2YykpPGJyPg0KJmd0 OyArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgUHJlZmVy IGJ1aWx0aW4gcGFja2FnZXMuPGJyPg0KJmd0OyArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgKHBhY2thZ2UtZGlzYWJsZWQtcCBwMSB2MSk8YnI+DQomZ3Q7ICvC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobm90IChwYWNrYWdl LWRpc2FibGVkLXAgcDIgdjIpKSkpKSkpKTxicj4NCiZndDvCoCDCoCDCoCA7OyBDaGVjayBpZiBQ QUNLQUdFIGlzIGF2YWlsYWJsZSBpbiBgcGFja2FnZS1hbGlzdCYjMzk7Ljxicj4NCjxicj4NCmlz IGFscmVhZHkgaW4gdGhlIHZlcnNpb24gb2YgcGFja2FnZS5lbCBvbiB0aGUgZW1hY3MtMjkgYnJh bmNoLsKgIEFuZDxicj4NCnRoZSBjb2RlIHdoaWNoIHRoZSBwYXRjaCByZW1vdmVzLCB2aXouOjxi cj4NCjxicj4NCiZndDvCoCDCoCDCoCA7OyBDaGVjayBpZiBQQUNLQUdFIGlzIGF2YWlsYWJsZSBp biBgcGFja2FnZS1hbGlzdCYjMzk7Ljxicj4NCiZndDvCoCDCoCDCoCAod2hpbGU8YnI+DQomZ3Q7 wqAgwqAgwqAgwqAgwqAgKHdoZW4gcGtnLWRlc2NzPGJyPg0KJmd0O8KgIMKgIMKgIMKgIMKgIMKg IChsZXQgKChhdmFpbGFibGUtdmVyc2lvbiAocGFja2FnZS1kZXNjLXZlcnNpb24gKGNhciBwa2ct ZGVzY3MpKSkpPGJyPg0KJmd0OyAtwqAgwqAgwqAgwqAgwqAgwqAgKG9yIChwYWNrYWdlLWRpc2Fi bGVkLXAgcGtnLW5hbWUgYXZhaWxhYmxlLXZlcnNpb24pPGJyPg0KJmd0OyAtwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgOzsgUHJlZmVyIGEgYnVpbHRpbiBwYWNrYWdlLjxicj4NCiZndDsgLcKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIChwYWNrYWdlLWJ1aWx0LWluLXAgcGtnLW5hbWUgYXZhaWxhYmxl LXZlcnNpb24pKSkpPGJyPg0KJmd0OyArwqAgwqAgwqAgwqAgwqAgwqAgKHBhY2thZ2UtZGlzYWJs ZWQtcCBwa2ctbmFtZSBhdmFpbGFibGUtdmVyc2lvbikpKTxicj4NCiZndDvCoCDCoCDCoCDCoCAo c2V0cSBwa2ctZGVzY3MgKGNkciBwa2ctZGVzY3MpKSk8YnI+DQomZ3Q7wqAgwqAgwqAgKGNhciBw a2ctZGVzY3MpKSk8YnI+DQo8YnI+DQppcyBhbHJlYWR5IHJlbW92ZWQgb24gdGhlIGVtYWNzLTI5 IGJyYW5jaC48YnI+DQo8YnI+DQpXaGF0IGFtIEkgbWlzc2luZyBoZXJlPzxicj4NCjwvYmxvY2tx dW90ZT48L2Rpdj48YnIgY2xlYXI9ImFsbCI+PGJyPjxzcGFuIGNsYXNzPSJnbWFpbF9zaWduYXR1 cmVfcHJlZml4Ij4tLSA8L3NwYW4+PGJyPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9zaWdu YXR1cmUiPjxmb250IGNvbG9yPSIjODg4ODg4Ij5fX19fX19fX19fX19fX19fX19fX19fX19fXzxi cj4NCjxicj4NCtChINGD0LLQsNC20LXQvdC40LXQvCw8YnI+DQrQkdC+0LnQutC+0LIg0JXQstCz 0LXQvdC40Lkg0JDQu9C10LrRgdC10LXQstC40Yc8YnI+DQrRgdC+0YIuIDgtOTI0LTIwMi0yNS02 NTxicj4NCmUtbWFpbDogPGEgaHJlZj0ibWFpbHRvOmFydHNjYW5AbGlzdC5ydSIgdGFyZ2V0PSJf YmxhbmsiPmFydHNjYW5AbGlzdC5ydTwvYT48L2ZvbnQ+PC9kaXY+DQo= --0000000000008aebbf05fd4cbcd9--