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 15:37:31 +1000 Message-ID: References: <83y1l7gzqw.fsf@gnu.org> <87ilcb2p1l.fsf@posteo.net> <87sfb8g85v.fsf@posteo.net> 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="00000000000064545405fd472fea" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="1851"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Philip Kaludercic , 63757@debbugs.gnu.org, Eli Zaretskii To: Stefan Monnier Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Jun 04 10:10:37 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 1q5iov-0000Fr-8G for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 04 Jun 2023 10:10:37 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q5ioS-0005W2-3u; Sun, 04 Jun 2023 04:10:08 -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 1q5ioQ-0005VD-5b for bug-gnu-emacs@gnu.org; Sun, 04 Jun 2023 04:10:06 -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 1q5ioP-0007uo-Sv for bug-gnu-emacs@gnu.org; Sun, 04 Jun 2023 04:10:05 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q5ioP-0001cN-NQ for bug-gnu-emacs@gnu.org; Sun, 04 Jun 2023 04:10:05 -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 08:10:05 +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.16858661776070 (code B ref 63757); Sun, 04 Jun 2023 08:10:05 +0000 Original-Received: (at 63757) by debbugs.gnu.org; 4 Jun 2023 08:09:37 +0000 Original-Received: from localhost ([127.0.0.1]:44860 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5inw-0001Zj-Ba for submit@debbugs.gnu.org; Sun, 04 Jun 2023 04:09:37 -0400 Original-Received: from smtp36.i.mail.ru ([95.163.41.77]:44992) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5gR4-00033k-Ra for 63757@debbugs.gnu.org; Sun, 04 Jun 2023 01:37:53 -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=i8J5/Sh8qJ87b49ZXAtKYeX8lkTbed1MTHXkYy1SWoY=; t=1685857070;x=1685947070; b=PgHO3jAl63a4Wn/dYl97MDAI0l0Z/HeL9DgwpJhzNqDNh6ouG3on/60t2M2bra4Vk058ndxFuYdCm/OXpNveN6/9wSwn+pnhSE+dYPzjV1Pkr5yLGtd1xGu6nYkK6Rkq7l7/QTaZS3SQ/Zlrh1onfZ8jz5w4uUVUiGDBhACw/7jmfIybzKVMkE5FAb9YDuECurw+JvWKtC8cbHxiFSwzTbuHjZz/u0dBov4diQSb3Le/RGQCxQeR+k7dSK7v7/2jvXqIJFSP1XVPrfaFDX08xA/x4lcb9RO8H1AN8th6j3UwTmDKazwICF23+CuD4Y1EjKoLWVHaJFTy+erbUEU/2Q==; Original-Received: by smtp36.i.mail.ru with esmtpa (envelope-from ) id 1q5gQx-009bpl-Hk for 63757@debbugs.gnu.org; Sun, 04 Jun 2023 08:37:44 +0300 Original-Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-4f4bdcde899so4483667e87.0 for <63757@debbugs.gnu.org>; Sat, 03 Jun 2023 22:37:43 -0700 (PDT) X-Gm-Message-State: AC+VfDyQNOH9cGw0oYy3TIazSbFDmoDL5ULbRLKpzwXrIezqnF0ilmRW vztYbjmnrXHcALY5nkPJm3mzMngpzdZToioyXhY= X-Google-Smtp-Source: ACHHUZ5GTo94sbisGq/rr2nkiwHh5mhfVoYSHOJsMnx1c33XdTcqxa5wSej5nq/6BTvN4X1Ofa3C62RdLDbezkjPZ0E= X-Received: by 2002:a2e:9c4a:0:b0:2b1:b7d0:bd5e with SMTP id t10-20020a2e9c4a000000b002b1b7d0bd5emr1967977ljj.6.1685857063161; Sat, 03 Jun 2023 22:37:43 -0700 (PDT) In-Reply-To: X-Gmail-Original-Message-ID: Authentication-Results: smtp36.i.mail.ru; auth=pass smtp.auth=artscan@list.ru smtp.mailfrom=artscan@list.ru X-Mailru-Src: smtp X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD988F25420CCA9469A21EDFAB76D1A971DC4DCEC6961D2C287182A05F538085040E866C6E79B5ED3B8665360A253A0A40228A38FC1449AB524ABBBBEFFC0DFE10B X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE77633BACAB33B9508C2099A533E45F2D0395957E7521B51C2CFCAF695D4D8E9FCEA1F7E6F0F101C6778DA827A17800CE79961E86438F5BDAEEA1F7E6F0F101C6723150C8DA25C47586E58E00D9D99D84E1BDDB23E98D2D38BE5CCB53A13BC8DBABE386BBF16E1942B1DFCA14B6C4FF61D20879F7C8C5043D14489FFFB0AA5F4BF176DF2183F8FC7C0618001F51B5FD3F9D2E47CDBA5A9658378DA827A17800CE799D163CBB856DBA69FA2833FD35BB23DF004C90652538430302FCEF25BFAB3454AD6D5ED66289B5278DA827A17800CE7DA7435228AA74D327B076A6E789B0E97A8DF7F3B2552694A1E7802607F20496D49FD398EE364050F9647ADFADE5905B1452896749CDDA0A6B3661434B16C20ACC84D3B47A649675FE827F84554CEF5019E625A9149C048EE9ECD01F8117BC8BEE2021AF6380DFAD18AA50765F790063735872C767BF85DA227C277FBC8AE2E8B9F5955FECEF5819E75ECD9A6C639B01B4E70A05D1297E1BBCB5012B2E24CD356 X-C1DE0DAB: 0D63561A33F958A5F01B7B195E27D1D151E9F0F28558962B3B662CCC852C3333F87CCE6106E1FC07E67D4AC08A07B9B01F9513A7CA91E555CB5012B2E24CD356 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF77DD89D51EBB7742D3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CFC6B224D16B735345F515A0D28F56FF336886BB5D45CD41271104D77A86AE4C76E125D5F9813FCCC5F4BC53521BD43B01ECEC2286D0A10E9BF1C02188836F48C6CAACD699CDC6F98202C26D483E81D6BE1362B2BFE906F14DEF4373B74A18CF49CC2E138FFB4ACBED X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojZIfw4O47JkL10949RUJQnA== X-Mailru-Sender: 4C235FE2E5D2D8909BFF31224E395B76E259BDB5DD0130E6E3FB35001B6CD05893919BC5FB8A4F5AA3C36B4D8423ABA5C77752E0C033A69EC36ED9D1848BBC3A06988B367FA93C37B4A721A3011E896F X-Mras: Ok X-Mailman-Approved-At: Sun, 04 Jun 2023 04:09:27 -0400 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:262909 Archived-At: --00000000000064545405fd472fea Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Excuse me for extra messages, I've already found a bug in the previous patch. I need a review, especially with in-place operations. move "Prefer VC packages" to `package-process-define-package` drop `package-disabled-p` and "Prefer builtin packages" comment diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index ba0e3618f28..87c57990705 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 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)) + ;; Prefer VC packages with greater priority than newer packages + (let* ((pkg-desc + (apply 'append + (cl-reduce + (lambda (p1 p2) + (if (package-vc-p p1) + (push p1 (cl-first p2)) + (push p1 (cl-second p2))) + p2) + (cdr (assq name package-alist)) + :initial-value (list nil nil) + :from-end t)))) + (setf (cdr (assq name package-alist)) pkg-desc) + (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 2:46=E2=80=AFPM =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8= =D0=B9 =D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2 wrote: > move "Prefer VC packages" to `package-process-define-package` > drop `package-disabled-p` and "Prefer builtin packages" comment > > > diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el > index ba0e3618f28..65ec07b945a 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 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,30 @@ 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)) > + ;; Prefer VC packages > + (let* ((pkg-desc0 (cdr (assq name package-alist))) > + (pkg-desc > + (apply 'append > + (cl-reduce > + (lambda (p1 p2) > + (if (package-vc-p p1) > + (push p1 (cl-first p2)) > + (push p1 (cl-second p2))) > + p2) > + pkg-desc0 > + :initial-value (list nil nil) > + :from-end t)))) > + (setf pkg-desc0 pkg-desc) > + (setq new-pkg-desc (car pkg-desc))))) > new-pkg-desc))) > > (declare-function package-vc-commit "package-vc" (pkg)) > @@ -916,17 +933,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 12:06=E2=80=AFAM Stefan Monnier > wrote: > >> >> Won't this work: >> >> >> >> diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el >> >> index 01826da273d..7eb185e7042 100644 >> >> --- a/lisp/emacs-lisp/package.el >> >> +++ b/lisp/emacs-lisp/package.el >> >> @@ -927,7 +927,9 @@ package--get-activatable-pkg >> >> (package-vc-p p2) >> >> ;; Prefer builtin packages. >> >> (package-disabled-p p1 v1) >> >> - (not (package-disabled-p p2 v2)))))))) >> >> + (not (package-disabled-p p2 v2)) >> >> + ;; Prever newer packages >> >> + (version-list-< v2 v1))))))) >> >> ;; Check if PACKAGE is available in `package-alist'. >> >> (while >> >> (when pkg-descs >> > >> > Ping? >> >> The packages should already be sorted by version in `package-alist`, so >> at best this will paper over the problem. This said, the `sort` call's >> predicate looks weird indeed: >> >> (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)))))))) >> >> - If both p1 and p2 are VC, then it will return non-nil, so >> they're both "strictly less than" the other :-( >> - If neither is VC nor disabled, we return non-nil, which again means >> they're >> both "strictly less than" the other. >> - The comment says "Prefer builtin packages" but the code checks >> `package-disabled-p`. >> >> And now that I look more carefully, maybe this `sort` is the culprit >> after all, because it operates directly on the list contained in >> `packages-alist`, modifying it in-place :-( >> >> I think we should *not* sort here: we should instead sort when we >> populate `package-alist` (like we already do). So the "Prefer VC" part >> of the sorting should be moved to `package-process-define-package` >> (and the `package-disabled-p` can be dropped because it's already taken >> care of by the loop that follows the above code). >> >> >> Stefan >> >> > > -- > __________________________ > > =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 > --=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 --00000000000064545405fd472fea Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5FeGN1c2UgbWUgZm9yIGV4dHJhIG1lc3NhZ2VzLCBJJiMzOTt2 ZSBhbHJlYWR5IGZvdW5kIGEgYnVnIGluIHRoZSBwcmV2aW91cyBwYXRjaC48YnI+PC9kaXY+PGRp dj48ZGl2PkkgbmVlZCBhIHJldmlldywgZXNwZWNpYWxseSB3aXRoIGluLXBsYWNlIG9wZXJhdGlv bnMuPGJyPjwvZGl2PjxkaXY+PGJyPm1vdmUgJnF1b3Q7UHJlZmVyIFZDIHBhY2thZ2VzJnF1b3Q7 IHRvIGBwYWNrYWdlLXByb2Nlc3MtZGVmaW5lLXBhY2thZ2VgPGJyPmRyb3AgYHBhY2thZ2UtZGlz YWJsZWQtcGAgYW5kICZxdW90O1ByZWZlciBidWlsdGluIHBhY2thZ2VzJnF1b3Q7IGNvbW1lbnQ8 YnI+PGJyPmRpZmYgLS1naXQgYS9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbCBiL2xpc3AvZW1h Y3MtbGlzcC9wYWNrYWdlLmVsPGJyPmluZGV4IGJhMGUzNjE4ZjI4Li44N2M1Nzk5MDcwNSAxMDA2 NDQ8YnI+LS0tIGEvbGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWw8YnI+KysrIGIvbGlzcC9lbWFj cy1saXNwL3BhY2thZ2UuZWw8YnI+QEAgLTY4Niw3ICs2ODYsNyBAQCBDb252ZXJ0IEVYUCBpbnRv IGEgYHBhY2thZ2UtZGVzYyYjMzk7IG9iamVjdCB1c2luZyB0aGU8YnI+wqA8YnI+wqBJZiB0aGVy ZSBhbHJlYWR5IGV4aXN0cyBhIHBhY2thZ2UgYnkgdGhlIHNhbWUgbmFtZSBpbjxicj7CoGBwYWNr YWdlLWFsaXN0JiMzOTssIGluc2VydCB0aGlzIG9iamVjdCB0aGVyZSBzdWNoIHRoYXQgdGhlIHBh Y2thZ2VzPGJyPi1hcmUgc29ydGVkIHdpdGggdGhlIGhpZ2hlc3QgdmVyc2lvbiBmaXJzdC4mcXVv dDs8YnI+K2FyZSBzb3J0ZWQgd2l0aCBWQyBwYWNrYWdlcyBmaXJzdCBhbmQgdGhlIGhpZ2hlc3Qg 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 oCDCoCDCoCDCoCDCoCDCoG5pbCkpPGJyPisgwqAgwqAgwqAgwqAgwqA7OyBQcmVmZXIgVkMgcGFj a2FnZXMgd2l0aCBncmVhdGVyIHByaW9yaXR5IHRoYW4gbmV3ZXIgcGFja2FnZXM8YnI+KyDCoCDC oCDCoCDCoCDCoChsZXQqICgocGtnLWRlc2M8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oChhcHBseSAmIzM5O2FwcGVuZDxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIChjbC1yZWR1Y2U8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oChsYW1iZGEgKHAxIHAyKTxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgKGlmIChwYWNrYWdlLXZjLXAgcDEpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAocHVzaCBwMSAoY2wtZmlyc3QgcDIpKTxicj4rIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHB1c2ggcDEgKGNsLXNlY29u ZCBwMikpKTxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcDIp PGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoY2RyIChhc3NxIG5h bWUgcGFja2FnZS1hbGlzdCkpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqA6aW5pdGlhbC12YWx1ZSAobGlzdCBuaWwgbmlsKTxicj4rIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgOmZyb20tZW5kIHQpKSkpPGJyPisgwqAgwqAgwqAgwqAgwqAg wqAoc2V0ZiAoY2RyIChhc3NxIG5hbWUgcGFja2FnZS1hbGlzdCkpIHBrZy1kZXNjKTxicj4rIMKg IMKgIMKgIMKgIMKgIMKgKHNldHEgbmV3LXBrZy1kZXNjIChjYXIgcGtnLWRlc2MpKSkpKTxicj7C oCDCoCDCoCDCoG5ldy1wa2ctZGVzYykpKTxicj7CoDxicj7CoChkZWNsYXJlLWZ1bmN0aW9uIHBh Y2thZ2UtdmMtY29tbWl0ICZxdW90O3BhY2thZ2UtdmMmcXVvdDsgKHBrZykpPGJyPkBAIC05MTYs MTcgKzkzMiw3IEBAIGNvcnJlc3BvbmQgdG8gcHJldmlvdXNseSBsb2FkZWQgZmlsZXMuJnF1b3Q7 PGJyPsKgPGJyPsKgKGRlZnVuIHBhY2thZ2UtLWdldC1hY3RpdmF0YWJsZS1wa2cgKHBrZy1uYW1l KTxicj7CoCDCoDs7IElzICZxdW90O2FjdGl2YXRhYmxlJnF1b3Q7IGEgd29yZD88YnI+LSDCoChs ZXQgKChwa2ctZGVzY3MgKHNvcnQgKGNkciAoYXNzcSBwa2ctbmFtZSBwYWNrYWdlLWFsaXN0KSk8 YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobGFtYmRhIChwMSBwMik8 YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobGV0ICgodjEgKHBh Y2thZ2UtZGVzYy12ZXJzaW9uIHAxKSk8YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAodjIgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIHAyKSkpPGJyPi0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKG9yPGJyPi0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA7OyBQcmVmZXIgVkMgcGFja2Fn ZXMuPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAocGFj a2FnZS12Yy1wIHAxKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgKHBhY2thZ2UtdmMtcCBwMik8YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoDs7IFByZWZlciBidWlsdGluIHBhY2thZ2VzLjxicj4tIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHBhY2thZ2UtZGlzYWJsZWQtcCBw MSB2MSk8YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChu b3QgKHBhY2thZ2UtZGlzYWJsZWQtcCBwMiB2MikpKSkpKSkpPGJyPisgwqAobGV0ICgocGtnLWRl c2NzIChjZHIgKGFzc3EgcGtnLW5hbWUgcGFja2FnZS1hbGlzdCkpKSk8YnI+wqAgwqAgwqA7OyBD aGVjayBpZiBQQUNLQUdFIGlzIGF2YWlsYWJsZSBpbiBgcGFja2FnZS1hbGlzdCYjMzk7Ljxicj7C oCDCoCDCoCh3aGlsZTxicj7CoCDCoCDCoCDCoCDCoCh3aGVuIHBrZy1kZXNjczxicj48L2Rpdj48 L2Rpdj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNs YXNzPSJnbWFpbF9hdHRyIj5PbiBTdW4sIEp1biA0LCAyMDIzIGF0IDI6NDbigK9QTSDQldCy0LPQ tdC90LjQuSDQkdC+0LnQutC+0LIgJmx0OzxhIGhyZWY9Im1haWx0bzphcnRzY2FuQGxpc3QucnUi PmFydHNjYW5AbGlzdC5ydTwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBjbGFz cz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MHB4IDBweCAwcHggMC44ZXg7Ym9yZGVyLWxl ZnQ6MXB4IHNvbGlkIHJnYigyMDQsMjA0LDIwNCk7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9 Imx0ciI+bW92ZSAmcXVvdDtQcmVmZXIgVkMgcGFja2FnZXMmcXVvdDsgdG8gYHBhY2thZ2UtcHJv Y2Vzcy1kZWZpbmUtcGFja2FnZWA8YnI+ZHJvcCBgcGFja2FnZS1kaXNhYmxlZC1wYCBhbmQgJnF1 b3Q7UHJlZmVyIGJ1aWx0aW4gcGFja2FnZXMmcXVvdDsgY29tbWVudDxicj48YnI+PGJyPmRpZmYg LS1naXQgYS9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbCBiL2xpc3AvZW1hY3MtbGlzcC9wYWNr YWdlLmVsPGJyPmluZGV4IGJhMGUzNjE4ZjI4Li42NWVjMDdiOTQ1YSAxMDA2NDQ8YnI+LS0tIGEv bGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWw8YnI+KysrIGIvbGlzcC9lbWFjcy1saXNwL3BhY2th Z2UuZWw8YnI+QEAgLTY4Niw3ICs2ODYsNyBAQCBDb252ZXJ0IEVYUCBpbnRvIGEgYHBhY2thZ2Ut ZGVzYyYjMzk7IG9iamVjdCB1c2luZyB0aGU8YnI+wqA8YnI+wqBJZiB0aGVyZSBhbHJlYWR5IGV4 aXN0cyBhIHBhY2thZ2UgYnkgdGhlIHNhbWUgbmFtZSBpbjxicj7CoGBwYWNrYWdlLWFsaXN0JiMz OTssIGluc2VydCB0aGlzIG9iamVjdCB0aGVyZSBzdWNoIHRoYXQgdGhlIHBhY2thZ2VzPGJyPi1h cmUgc29ydGVkIHdpdGggdGhlIGhpZ2hlc3QgdmVyc2lvbiBmaXJzdC4mcXVvdDs8YnI+K2FyZSBz b3J0ZWQgd2l0aCBWQyBwYWNrYWdlcyBmaXJzdCBhbmQgdGhlIGhpZ2hlc3QgdmVyc2lvbiBzZWNv bmQuJnF1b3Q7PGJyPsKgIMKgKHdoZW4gKGVxIChjYXItc2FmZSBleHApICYjMzk7ZGVmaW5lLXBh Y2thZ2UpPGJyPsKgIMKgIMKgKGxldCogKChuZXctcGtnLWRlc2MgKGFwcGx5ICMmIzM5O3BhY2th Z2UtZGVzYy1mcm9tLWRlZmluZSAoY2RyIGV4cCkpKTxicj7CoCDCoCDCoCDCoCDCoCDCoCAobmFt ZSAocGFja2FnZS1kZXNjLW5hbWUgbmV3LXBrZy1kZXNjKSk8YnI+QEAgLTY5NiwxMyArNjk2LDMw IEBAIGFyZSBzb3J0ZWQgd2l0aCB0aGUgaGlnaGVzdCB2ZXJzaW9uIGZpcnN0LiZxdW90Ozxicj7C oCDCoCDCoCDCoCDCoCDCoDs7IElmIHRoZXJlJiMzOTtzIG5vIG9sZCBwYWNrYWdlLCBqdXN0IGFk ZCB0aGlzIHRvIGBwYWNrYWdlLWFsaXN0JiMzOTsuPGJyPsKgIMKgIMKgIMKgIMKgIMKgKHB1c2gg KGxpc3QgbmFtZSBuZXctcGtnLWRlc2MpIHBhY2thZ2UtYWxpc3QpPGJyPsKgIMKgIMKgIMKgIMKg OzsgSWYgdGhlcmUgaXMsIGluc2VydCB0aGUgbmV3IHBhY2thZ2UgYXQgdGhlIHJpZ2h0IHBsYWNl IGluIHRoZSBsaXN0Ljxicj4tIMKgIMKgIMKgIMKgKHdoaWxlPGJyPi0gwqAgwqAgwqAgwqAgwqAg wqAoaWYgKGFuZCAoY2RyIG9sZC1wa2dzKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgICh2ZXJzaW9uLWxpc3QtJmx0OyB2ZXJzaW9uPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIChj YWRyIG9sZC1wa2dzKSkpKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHNldHEgb2xkLXBr Z3MgKGNkciBvbGQtcGtncykpPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAocHVzaCBuZXctcGtn LWRlc2MgKGNkciBvbGQtcGtncykpPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAgwqBuaWwpKSk8YnI+ KyDCoCDCoCDCoCDCoChwcm9nbjxicj4rIMKgIMKgIMKgIMKgIMKgOzsgUHJlZmVyIG5ld2VyIHBh Y2thZ2VzPGJyPisgwqAgwqAgwqAgwqAgwqAod2hpbGU8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDC oChpZiAoYW5kIChjZHIgb2xkLXBrZ3MpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgKHZlcnNpb24tbGlzdC0mbHQ7IHZlcnNpb248YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocGFja2FnZS1kZXNjLXZlcnNp b24gKGNhZHIgb2xkLXBrZ3MpKSkpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoc2V0 cSBvbGQtcGtncyAoY2RyIG9sZC1wa2dzKSk8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChw dXNoIG5ldy1wa2ctZGVzYyAoY2RyIG9sZC1wa2dzKSk8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoG5pbCkpPGJyPisgwqAgwqAgwqAgwqAgwqA7OyBQcmVmZXIgVkMgcGFja2FnZXM8YnI+KyDC oCDCoCDCoCDCoCDCoChsZXQqICgocGtnLWRlc2MwIChjZHIgKGFzc3EgbmFtZSBwYWNrYWdlLWFs aXN0KSkpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHBrZy1kZXNjPGJyPisgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAoYXBwbHkgJiMzOTthcHBlbmQ8YnI+KyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoY2wtcmVkdWNlPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAobGFtYmRhIChwMSBwMik8YnI+KyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChpZiAocGFja2FnZS12Yy1wIHAxKTxicj4rIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKHB1c2ggcDEgKGNsLWZp cnN0IHAyKSk8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oChwdXNoIHAxIChjbC1zZWNvbmQgcDIpKSk8YnI+KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoHAyKTxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgcGtnLWRlc2MwPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqA6aW5pdGlhbC12YWx1ZSAobGlzdCBuaWwgbmlsKTxicj4rIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgOmZyb20tZW5kIHQpKSkpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAo c2V0ZiBwa2ctZGVzYzAgcGtnLWRlc2MpPGJyPisgwqAgwqAgwqAgwqAgwqAgwqAoc2V0cSBuZXct cGtnLWRlc2MgKGNhciBwa2ctZGVzYykpKSkpPGJyPsKgIMKgIMKgIMKgbmV3LXBrZy1kZXNjKSkp PGJyPsKgPGJyPsKgKGRlY2xhcmUtZnVuY3Rpb24gcGFja2FnZS12Yy1jb21taXQgJnF1b3Q7cGFj a2FnZS12YyZxdW90OyAocGtnKSk8YnI+QEAgLTkxNiwxNyArOTMzLDcgQEAgY29ycmVzcG9uZCB0 byBwcmV2aW91c2x5IGxvYWRlZCBmaWxlcy4mcXVvdDs8YnI+wqA8YnI+wqAoZGVmdW4gcGFja2Fn ZS0tZ2V0LWFjdGl2YXRhYmxlLXBrZyAocGtnLW5hbWUpPGJyPsKgIMKgOzsgSXMgJnF1b3Q7YWN0 aXZhdGFibGUmcXVvdDsgYSB3b3JkPzxicj4tIMKgKGxldCAoKHBrZy1kZXNjcyAoc29ydCAoY2Ry IChhc3NxIHBrZy1uYW1lIHBhY2thZ2UtYWxpc3QpKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIChsYW1iZGEgKHAxIHAyKTxicj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIChsZXQgKCh2MSAocGFja2FnZS1kZXNjLXZlcnNpb24gcDEpKTxi cj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICh2MiAo cGFja2FnZS1kZXNjLXZlcnNpb24gcDIpKSk8YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAob3I8YnI+LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoDs7IFByZWZlciBWQyBwYWNrYWdlcy48YnI+LSDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChwYWNrYWdlLXZjLXAgcDEpPGJyPi0gwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAocGFja2FnZS12Yy1wIHAyKTxi cj4tIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOzsgUHJlZmVy IGJ1aWx0aW4gcGFja2FnZXMuPGJyPi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAocGFja2FnZS1kaXNhYmxlZC1wIHAxIHYxKTxicj4tIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKG5vdCAocGFja2FnZS1kaXNhYmxlZC1wIHAy IHYyKSkpKSkpKSk8YnI+KyDCoChsZXQgKChwa2ctZGVzY3MgKGNkciAoYXNzcSBwa2ctbmFtZSBw YWNrYWdlLWFsaXN0KSkpKTxicj7CoCDCoCDCoDs7IENoZWNrIGlmIFBBQ0tBR0UgaXMgYXZhaWxh YmxlIGluIGBwYWNrYWdlLWFsaXN0JiMzOTsuPGJyPsKgIMKgIMKgKHdoaWxlPGJyPsKgIMKgIMKg IMKgIMKgKHdoZW4gcGtnLWRlc2NzPGJyPjxicj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxf cXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBTdW4sIEp1biA0LCAy MDIzIGF0IDEyOjA24oCvQU0gU3RlZmFuIE1vbm5pZXIgJmx0OzxhIGhyZWY9Im1haWx0bzptb25u aWVyQGlyby51bW9udHJlYWwuY2EiIHRhcmdldD0iX2JsYW5rIj5tb25uaWVyQGlyby51bW9udHJl YWwuY2E8L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1 b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xp ZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPiZndDsmZ3Q7IFdvbiYjMzk7dCB0 aGlzIHdvcms6PGJyPg0KJmd0OyZndDs8YnI+DQomZ3Q7Jmd0OyBkaWZmIC0tZ2l0IGEvbGlzcC9l bWFjcy1saXNwL3BhY2thZ2UuZWwgYi9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbDxicj4NCiZn dDsmZ3Q7IGluZGV4IDAxODI2ZGEyNzNkLi43ZWIxODVlNzA0MiAxMDA2NDQ8YnI+DQomZ3Q7Jmd0 OyAtLS0gYS9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbDxicj4NCiZndDsmZ3Q7ICsrKyBiL2xp c3AvZW1hY3MtbGlzcC9wYWNrYWdlLmVsPGJyPg0KJmd0OyZndDsgQEAgLTkyNyw3ICs5MjcsOSBA QCBwYWNrYWdlLS1nZXQtYWN0aXZhdGFibGUtcGtnPGJyPg0KJmd0OyZndDvCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocGFja2FnZS12Yy1wIHAyKTxicj4N CiZndDsmZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg OzsgUHJlZmVyIGJ1aWx0aW4gcGFja2FnZXMuPGJyPg0KJmd0OyZndDvCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocGFja2FnZS1kaXNhYmxlZC1wIHAxIHYx KTxicj4NCiZndDsmZ3Q7IC3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAobm90IChwYWNrYWdlLWRpc2FibGVkLXAgcDIgdjIpKSkpKSkpKTxicj4NCiZndDsmZ3Q7 ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobm90IChwYWNr YWdlLWRpc2FibGVkLXAgcDIgdjIpKTxicj4NCiZndDsmZ3Q7ICvCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCA7OyBQcmV2ZXIgbmV3ZXIgcGFja2FnZXM8YnI+DQom Z3Q7Jmd0OyArwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHZl cnNpb24tbGlzdC0mbHQ7IHYyIHYxKSkpKSkpKTxicj4NCiZndDsmZ3Q7wqAgwqAgwqAgOzsgQ2hl Y2sgaWYgUEFDS0FHRSBpcyBhdmFpbGFibGUgaW4gYHBhY2thZ2UtYWxpc3QmIzM5Oy48YnI+DQom Z3Q7Jmd0O8KgIMKgIMKgICh3aGlsZTxicj4NCiZndDsmZ3Q7wqAgwqAgwqAgwqAgwqAgKHdoZW4g cGtnLWRlc2NzPGJyPg0KJmd0Ozxicj4NCiZndDsgUGluZz88YnI+DQo8YnI+DQpUaGUgcGFja2Fn ZXMgc2hvdWxkIGFscmVhZHkgYmUgc29ydGVkIGJ5IHZlcnNpb24gaW4gYHBhY2thZ2UtYWxpc3Rg LCBzbzxicj4NCmF0IGJlc3QgdGhpcyB3aWxsIHBhcGVyIG92ZXIgdGhlIHByb2JsZW0uwqAgVGhp cyBzYWlkLCB0aGUgYHNvcnRgIGNhbGwmIzM5O3M8YnI+DQpwcmVkaWNhdGUgbG9va3Mgd2VpcmQg aW5kZWVkOjxicj4NCjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg KGxhbWJkYSAocDEgcDIpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAobGV0ICgodjEgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIHAxKSk8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh2MiAocGFja2FnZS1kZXNj LXZlcnNpb24gcDIpKSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoChvcjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIDs7IFByZWZlciBWQyBwYWNrYWdlcy48YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAocGFja2FnZS12Yy1wIHAxKTxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChwYWNrYWdlLXZjLXAgcDIpPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgUHJlZmVyIGJ1aWx0 aW4gcGFja2FnZXMuPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgKHBhY2thZ2UtZGlzYWJsZWQtcCBwMSB2MSk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobm90IChwYWNrYWdlLWRpc2FibGVkLXAgcDIgdjIp KSkpKSkpKTxicj4NCjxicj4NCi0gSWYgYm90aCBwMSBhbmQgcDIgYXJlIFZDLCB0aGVuIGl0IHdp bGwgcmV0dXJuIG5vbi1uaWwsIHNvPGJyPg0KwqAgdGhleSYjMzk7cmUgYm90aCAmcXVvdDtzdHJp Y3RseSBsZXNzIHRoYW4mcXVvdDsgdGhlIG90aGVyIDotKDxicj4NCi0gSWYgbmVpdGhlciBpcyBW QyBub3IgZGlzYWJsZWQsIHdlIHJldHVybiBub24tbmlsLCB3aGljaCBhZ2FpbiBtZWFucyB0aGV5 JiMzOTtyZTxicj4NCsKgIMKgYm90aCAmcXVvdDtzdHJpY3RseSBsZXNzIHRoYW4mcXVvdDsgdGhl IG90aGVyLjxicj4NCi0gVGhlIGNvbW1lbnQgc2F5cyAmcXVvdDtQcmVmZXIgYnVpbHRpbiBwYWNr YWdlcyZxdW90OyBidXQgdGhlIGNvZGUgY2hlY2tzPGJyPg0KwqAgYHBhY2thZ2UtZGlzYWJsZWQt cGAuPGJyPg0KPGJyPg0KQW5kIG5vdyB0aGF0IEkgbG9vayBtb3JlIGNhcmVmdWxseSwgbWF5YmUg dGhpcyBgc29ydGAgaXMgdGhlIGN1bHByaXQ8YnI+DQphZnRlciBhbGwsIGJlY2F1c2UgaXQgb3Bl cmF0ZXMgZGlyZWN0bHkgb24gdGhlIGxpc3QgY29udGFpbmVkIGluPGJyPg0KYHBhY2thZ2VzLWFs aXN0YCwgbW9kaWZ5aW5nIGl0IGluLXBsYWNlIDotKDxicj4NCjxicj4NCkkgdGhpbmsgd2Ugc2hv dWxkICpub3QqIHNvcnQgaGVyZTogd2Ugc2hvdWxkIGluc3RlYWQgc29ydCB3aGVuIHdlPGJyPg0K cG9wdWxhdGUgYHBhY2thZ2UtYWxpc3RgIChsaWtlIHdlIGFscmVhZHkgZG8pLsKgIFNvIHRoZSAm cXVvdDtQcmVmZXIgVkMmcXVvdDsgcGFydDxicj4NCm9mIHRoZSBzb3J0aW5nIHNob3VsZCBiZSBt b3ZlZCB0byBgcGFja2FnZS1wcm9jZXNzLWRlZmluZS1wYWNrYWdlYDxicj4NCihhbmQgdGhlIGBw YWNrYWdlLWRpc2FibGVkLXBgIGNhbiBiZSBkcm9wcGVkIGJlY2F1c2UgaXQmIzM5O3MgYWxyZWFk eSB0YWtlbjxicj4NCmNhcmUgb2YgYnkgdGhlIGxvb3AgdGhhdCBmb2xsb3dzIHRoZSBhYm92ZSBj b2RlKS48YnI+DQo8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCBTdGVmYW48YnI+DQo8YnI+DQo8L2Js b2NrcXVvdGU+PC9kaXY+PGJyIGNsZWFyPSJhbGwiPjxicj48c3BhbiBjbGFzcz0iZ21haWxfc2ln bmF0dXJlX3ByZWZpeCI+LS0gPC9zcGFuPjxicj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21haWxf c2lnbmF0dXJlIj48Zm9udCBjb2xvcj0iIzg4ODg4OCI+X19fX19fX19fX19fX19fX19fX19fX19f X188YnI+DQo8YnI+DQrQoSDRg9Cy0LDQttC10L3QuNC10LwsPGJyPg0K0JHQvtC50LrQvtCyINCV 0LLQs9C10L3QuNC5INCQ0LvQtdC60YHQtdC10LLQuNGHPGJyPg0K0YHQvtGCLiA4LTkyNC0yMDIt MjUtNjU8YnI+DQplLW1haWw6IDxhIGhyZWY9Im1haWx0bzphcnRzY2FuQGxpc3QucnUiIHRhcmdl dD0iX2JsYW5rIj5hcnRzY2FuQGxpc3QucnU8L2E+PC9mb250PjwvZGl2Pg0KPC9ibG9ja3F1b3Rl PjwvZGl2PjxiciBjbGVhcj0iYWxsIj48YnI+PHNwYW4gY2xhc3M9ImdtYWlsX3NpZ25hdHVyZV9w cmVmaXgiPi0tIDwvc3Bhbj48YnI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX3NpZ25hdHVy ZSI+PGZvbnQgY29sb3I9IiM4ODg4ODgiPl9fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPg0K PGJyPg0K0KEg0YPQstCw0LbQtdC90LjQtdC8LDxicj4NCtCR0L7QudC60L7QsiDQldCy0LPQtdC9 0LjQuSDQkNC70LXQutGB0LXQtdCy0LjRhzxicj4NCtGB0L7Rgi4gOC05MjQtMjAyLTI1LTY1PGJy Pg0KZS1tYWlsOiA8YSBocmVmPSJtYWlsdG86YXJ0c2NhbkBsaXN0LnJ1IiB0YXJnZXQ9Il9ibGFu ayI+YXJ0c2NhbkBsaXN0LnJ1PC9hPjwvZm9udD48L2Rpdj4NCg== --00000000000064545405fd472fea--