From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Pogonyshev Newsgroups: gmane.emacs.bugs Subject: bug#15465: CC-mode misaligns enums that implement an interface in Java Date: Mon, 30 Sep 2013 09:23:53 +0200 Message-ID: References: <20130928173323.GA11317@acm.acm> <20130929150345.GD3161@acm.acm> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=089e0111d0d8ec43fb04e794b730 X-Trace: ger.gmane.org 1380525856 5025 80.91.229.3 (30 Sep 2013 07:24:16 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 30 Sep 2013 07:24:16 +0000 (UTC) Cc: 15465@debbugs.gnu.org To: Alan Mackenzie Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Mon Sep 30 09:24:19 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VQXq4-0000Pb-Lh for geb-bug-gnu-emacs@m.gmane.org; Mon, 30 Sep 2013 09:24:16 +0200 Original-Received: from localhost ([::1]:47243 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VQXq4-0000z8-3H for geb-bug-gnu-emacs@m.gmane.org; Mon, 30 Sep 2013 03:24:16 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:33521) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VQXpw-0000yi-9o for bug-gnu-emacs@gnu.org; Mon, 30 Sep 2013 03:24:13 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VQXpr-0005CB-Cu for bug-gnu-emacs@gnu.org; Mon, 30 Sep 2013 03:24:08 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:37239) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VQXpr-0005C7-98 for bug-gnu-emacs@gnu.org; Mon, 30 Sep 2013 03:24:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1VQXpq-0000cK-0C for bug-gnu-emacs@gnu.org; Mon, 30 Sep 2013 03:24:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Paul Pogonyshev Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 30 Sep 2013 07:24:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 15465 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 15465-submit@debbugs.gnu.org id=B15465.13805258402365 (code B ref 15465); Mon, 30 Sep 2013 07:24:01 +0000 Original-Received: (at 15465) by debbugs.gnu.org; 30 Sep 2013 07:24:00 +0000 Original-Received: from localhost ([127.0.0.1]:45532 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VQXpn-0000c3-3n for submit@debbugs.gnu.org; Mon, 30 Sep 2013 03:23:59 -0400 Original-Received: from mail-ie0-f169.google.com ([209.85.223.169]:37912) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VQXpi-0000bq-Rr for 15465@debbugs.gnu.org; Mon, 30 Sep 2013 03:23:56 -0400 Original-Received: by mail-ie0-f169.google.com with SMTP id tp5so9597465ieb.28 for <15465@debbugs.gnu.org>; Mon, 30 Sep 2013 00:23:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=8ui9QyL8qHqmLYQB2VpkI8aIFHVU5u5MzZVnlLysQug=; b=rkg40KhYlTgZz8RprzMB+1cGUJMrN6m2UE1LCDDU626ReBVmxd4oLHZTvCs+4SYyc8 P9soGsFsYzO3TZiGmLzi8CHJq5PqJv4KdnGm/s+A951yqfcQOp8oH8XyuYLhclQm1Ex8 DuW3KFm551sbmmh8k07JtnuSYIgNPc6BRrqJ/nhR9z60+XJiCWNm5ujdz4ZSHadXUI36 UWvBiZ8N+kkHwdj2dDYn96jvOra3HgxjXnTE+2T8W0rXS+EXN3+LYKxSvmC4dO8qa69N 92S2PHi/DTlwJriA3Icml9PkxC63jee2368f/ZZINsfSwVt+nxWnmdjqWSuLJekkcLIt vX3g== X-Received: by 10.50.87.36 with SMTP id u4mr12780306igz.40.1380525833731; Mon, 30 Sep 2013 00:23:53 -0700 (PDT) Original-Received: by 10.42.240.66 with HTTP; Mon, 30 Sep 2013 00:23:53 -0700 (PDT) In-Reply-To: <20130929150345.GD3161@acm.acm> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 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.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:78819 Archived-At: --089e0111d0d8ec43fb04e794b730 Content-Type: text/plain; charset=UTF-8 Sorry, it doesn't apply. Paul On 29 September 2013 17:03, Alan Mackenzie wrote: > Hi, Paul. > > On Sat, Sep 28, 2013 at 09:15:52PM +0200, Paul Pogonyshev wrote: > > > I've committed a fix, revision #114474, to the bzr trunk. Could you > try > > > out the change, please, and either confirm it fixes the bug properly, > or > > > tell me what hasn't yet been fixed. > > > Thank you. The case I initially mentioned works properly now, also with > > multiple implemented interfaces. However, it seems to not know about > > interfaces with generics: > > > public enum X implements Y > > { > > A, > > B; > > } > > Here's a better patch than the one from last night, which was > demonstrably buggy. It should apply cleanly to the current trunk. > Please let me know how thoroughly it works. > > > > diff -r d51d11733869 cc-engine.el > --- a/cc-engine.el Sat Sep 28 16:39:26 2013 +0000 > +++ b/cc-engine.el Sun Sep 29 14:57:33 2013 +0000 > @@ -8506,6 +8506,32 @@ > (not (looking-at "="))))) > b-pos))) > > +(defun c-backward-over-enum-header () > + ;; We're at a "{". Move back to the enum-like keyword that starts this > + ;; declaration and return t, otherwise don't move and return nil. > + (let ((here (point)) > + up-sexp-pos before-identifier) > + (while > + (and > + (eq (c-backward-token-2) 0) > + (or (not (looking-at "\\s)")) > + (c-go-up-list-backward)) > + (cond > + ((and (looking-at c-symbol-key) (c-on-identifier)) > + (setq before-identifier t)) > + ((and before-identifier > + (looking-at c-postfix-decl-spec-key)) > + (setq before-identifier nil) > + t) > + ((looking-at c-brace-list-key) nil) > + ((and c-recognize-<>-arglists > + (eq (char-after) ?<) > + (looking-at "\\s(")) > + t) > + (t nil)))) > + (or (looking-at c-brace-list-key) > + (progn (goto-char here) nil)))) > + > (defun c-inside-bracelist-p (containing-sexp paren-state) > ;; return the buffer position of the beginning of the brace list > ;; statement if we're inside a brace list, otherwise return nil. > @@ -8520,22 +8546,9 @@ > ;; This function might do hidden buffer changes. > (or > ;; This will pick up brace list declarations. > - (c-safe > - (save-excursion > - (goto-char containing-sexp) > - (let (before-identifier) > - (while > - (progn > - (c-forward-sexp -1) > - (cond > - ((c-on-identifier) (setq before-identifier t)) > - ((and before-identifier > - (looking-at c-postfix-decl-spec-key)) > - (setq before-identifier nil) > - t) > - ((looking-at c-brace-list-key) nil) > - (t nil)))) > - (looking-at c-brace-list-key)))) > + (save-excursion > + (goto-char containing-sexp) > + (c-backward-over-enum-header)) > ;; this will pick up array/aggregate init lists, even if they are > nested. > (save-excursion > (let ((class-key > diff -r d51d11733869 cc-fonts.el > --- a/cc-fonts.el Sat Sep 28 16:39:26 2013 +0000 > +++ b/cc-fonts.el Sun Sep 29 14:57:33 2013 +0000 > @@ -1438,22 +1438,9 @@ > (let ((paren-state (c-parse-state))) > (and > (numberp (car paren-state)) > - (c-safe > - (save-excursion > - (goto-char (car paren-state)) > - (let (before-identifier) > - (while > - (progn > - (c-forward-sexp -1) > - (cond > - ((c-on-identifier) (setq > before-identifier t)) > - ((and before-identifier > - (looking-at > c-postfix-decl-spec-key)) > - (setq before-identifier nil) > - t) > - ((looking-at c-brace-list-key) nil) ; > "enum" > - (t nil)))) > - (looking-at c-brace-list-key))))))) > + (save-excursion > + (goto-char (car paren-state)) > + (c-backward-over-enum-header))))) > (c-forward-token-2) > nil) > > @@ -1542,22 +1529,9 @@ > (when (and > encl-pos > (eq (char-after encl-pos) ?\{) > - (c-safe > - (save-excursion > - (goto-char encl-pos) > - (let (before-identifier) > - (while > - (progn > - (c-forward-sexp -1) > - (cond > - ((c-on-identifier) (setq before-identifier t)) > - ((and before-identifier > - (looking-at c-postfix-decl-spec-key)) > - (setq before-identifier nil) > - t) > - ((looking-at c-brace-list-key) nil) ; "enum" > - (t nil)))) > - (looking-at c-brace-list-key))))) > + (save-excursion > + (goto-char encl-pos) > + (c-backward-over-enum-header))) > (c-syntactic-skip-backward "^{," nil t) > (c-put-char-property (1- (point)) 'c-type 'c-decl-id-start) > > > > > Paul > > -- > Alan Mackenzie (Nuremberg, Germany). > --089e0111d0d8ec43fb04e794b730 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj5Tb3JyeSwgaXQgZG9lc24mIzM5O3QgYXBwbHkuPGJyPjxicj48 L2Rpdj5QYXVsPGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGJyPjxkaXYg Y2xhc3M9ImdtYWlsX3F1b3RlIj5PbiAyOSBTZXB0ZW1iZXIgMjAxMyAxNzowMywgQWxhbiBNYWNr ZW56aWUgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86YWNtQG11Yy5kZSIgdGFy Z2V0PSJfYmxhbmsiPmFjbUBtdWMuZGU8L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPg0KPGJsb2Nr cXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVy LWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBjbGFzcz0iaW0iPkhp LCBQYXVsLjxicj4NCjxicj4NCk9uIFNhdCwgU2VwIDI4LCAyMDEzIGF0IDA5OjE1OjUyUE0gKzAy MDAsIFBhdWwgUG9nb255c2hldiB3cm90ZTo8YnI+DQo8L2Rpdj48ZGl2PjxkaXYgY2xhc3M9Img1 Ij4mZ3Q7IMKgJmd0OyBJJiMzOTt2ZSBjb21taXR0ZWQgYSBmaXgsIHJldmlzaW9uICMxMTQ0NzQs IHRvIHRoZSBienIgdHJ1bmsuIMKgQ291bGQgeW91IHRyeTxicj4NCiZndDsgJmd0OyBvdXQgdGhl IGNoYW5nZSwgcGxlYXNlLCBhbmQgZWl0aGVyIGNvbmZpcm0gaXQgZml4ZXMgdGhlIGJ1ZyBwcm9w ZXJseSwgb3I8YnI+DQomZ3Q7ICZndDsgdGVsbCBtZSB3aGF0IGhhc24mIzM5O3QgeWV0IGJlZW4g Zml4ZWQuPGJyPg0KPGJyPg0KJmd0OyBUaGFuayB5b3UuIFRoZSBjYXNlIEkgaW5pdGlhbGx5IG1l bnRpb25lZCB3b3JrcyBwcm9wZXJseSBub3csIGFsc28gd2l0aDxicj4NCiZndDsgbXVsdGlwbGUg aW1wbGVtZW50ZWQgaW50ZXJmYWNlcy4gSG93ZXZlciwgaXQgc2VlbXMgdG8gbm90IGtub3cgYWJv dXQ8YnI+DQomZ3Q7IGludGVyZmFjZXMgd2l0aCBnZW5lcmljczo8YnI+DQo8YnI+DQomZ3Q7IHB1 YmxpYyBlbnVtIFggaW1wbGVtZW50cyBZICZsdDtaJmd0Ozxicj4NCiZndDsgezxicj4NCiZndDsg wqAgwqAgQSw8YnI+DQomZ3Q7IMKgIMKgIMKgIMKgIEI7PGJyPg0KJmd0OyB9PGJyPg0KPGJyPg0K PC9kaXY+PC9kaXY+SGVyZSYjMzk7cyBhIGJldHRlciBwYXRjaCB0aGFuIHRoZSBvbmUgZnJvbSBs YXN0IG5pZ2h0LCB3aGljaCB3YXM8YnI+DQpkZW1vbnN0cmFibHkgYnVnZ3kuIMKgSXQgc2hvdWxk IGFwcGx5IGNsZWFubHkgdG8gdGhlIGN1cnJlbnQgdHJ1bmsuPGJyPg0KUGxlYXNlIGxldCBtZSBr bm93IGhvdyB0aG9yb3VnaGx5IGl0IHdvcmtzLjxicj4NCjxkaXYgY2xhc3M9ImltIj48YnI+DQo8 YnI+DQo8YnI+DQpkaWZmIC1yIGQ1MWQxMTczMzg2OSBjYy1lbmdpbmUuZWw8YnI+DQotLS0gYS9j Yy1lbmdpbmUuZWwgwqAgwqAgwqBTYXQgU2VwIDI4IDE2OjM5OjI2IDIwMTMgKzAwMDA8YnI+DQo8 L2Rpdj4rKysgYi9jYy1lbmdpbmUuZWwgwqAgwqAgwqBTdW4gU2VwIDI5IDE0OjU3OjMzIDIwMTMg KzAwMDA8YnI+DQpAQCAtODUwNiw2ICs4NTA2LDMyIEBAPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKG5vdCAobG9va2luZy1hdCAmcXVvdDs9JnF1b3Q7KSkpKSk8YnI+DQrC oCDCoCDCoCDCoGItcG9zKSkpPGJyPg0KPGJyPg0KKyhkZWZ1biBjLWJhY2t3YXJkLW92ZXItZW51 bS1oZWFkZXIgKCk8YnI+DQorIMKgOzsgV2UmIzM5O3JlIGF0IGEgJnF1b3Q7eyZxdW90Oy4gwqBN b3ZlIGJhY2sgdG8gdGhlIGVudW0tbGlrZSBrZXl3b3JkIHRoYXQgc3RhcnRzIHRoaXM8YnI+DQor IMKgOzsgZGVjbGFyYXRpb24gYW5kIHJldHVybiB0LCBvdGhlcndpc2UgZG9uJiMzOTt0IG1vdmUg YW5kIHJldHVybiBuaWwuPGJyPg0KKyDCoChsZXQgKChoZXJlIChwb2ludCkpPGJyPg0KKyDCoCDC oCDCoCB1cC1zZXhwLXBvcyBiZWZvcmUtaWRlbnRpZmllcik8YnI+DQorIMKgIMKgKHdoaWxlPGJy Pg0KKyDCoCDCoCDCoCAoYW5kPGJyPg0KKyDCoCDCoCDCoCDCoChlcSAoYy1iYWNrd2FyZC10b2tl bi0yKSAwKTxicj4NCisgwqAgwqAgwqAgwqAob3IgKG5vdCAobG9va2luZy1hdCAmcXVvdDtcXHMp JnF1b3Q7KSk8YnI+DQorIMKgIMKgIMKgIMKgIMKgIMKgKGMtZ28tdXAtbGlzdC1iYWNrd2FyZCkp PGJyPg0KKyDCoCDCoCDCoCDCoChjb25kPGJyPg0KKyDCoCDCoCDCoCDCoCAoKGFuZCAobG9va2lu Zy1hdCBjLXN5bWJvbC1rZXkpIChjLW9uLWlkZW50aWZpZXIpKTxicj4NCisgwqAgwqAgwqAgwqAg wqAoc2V0cSBiZWZvcmUtaWRlbnRpZmllciB0KSk8YnI+DQorIMKgIMKgIMKgIMKgICgoYW5kIGJl Zm9yZS1pZGVudGlmaWVyPGJyPg0KKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobG9va2luZy1hdCBj LXBvc3RmaXgtZGVjbC1zcGVjLWtleSkpPGJyPg0KKyDCoCDCoCDCoCDCoCDCoChzZXRxIGJlZm9y ZS1pZGVudGlmaWVyIG5pbCk8YnI+DQorIMKgIMKgIMKgIMKgIMKgdCk8YnI+DQorIMKgIMKgIMKg IMKgICgobG9va2luZy1hdCBjLWJyYWNlLWxpc3Qta2V5KSBuaWwpPGJyPg0KPGRpdiBjbGFzcz0i aW0iPisgwqAgwqAgwqAgwqAgKChhbmQgYy1yZWNvZ25pemUtJmx0OyZndDstYXJnbGlzdHM8YnI+ DQorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChlcSAoY2hhci1hZnRlcikgPyZsdDspPGJyPg0KKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCAobG9va2luZy1hdCAmcXVvdDtcXHMoJnF1b3Q7KSk8YnI+DQor IMKgIMKgIMKgIMKgIMKgdCk8YnI+DQo8L2Rpdj4rIMKgIMKgIMKgIMKgICh0IG5pbCkpKSk8YnI+ DQorIMKgIMKgKG9yIChsb29raW5nLWF0IGMtYnJhY2UtbGlzdC1rZXkpPGJyPg0KKyDCoCDCoCDC oCAocHJvZ24gKGdvdG8tY2hhciBoZXJlKSBuaWwpKSkpPGJyPg0KKzxicj4NCsKgKGRlZnVuIGMt aW5zaWRlLWJyYWNlbGlzdC1wIChjb250YWluaW5nLXNleHAgcGFyZW4tc3RhdGUpPGJyPg0KwqAg wqA7OyByZXR1cm4gdGhlIGJ1ZmZlciBwb3NpdGlvbiBvZiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBi cmFjZSBsaXN0PGJyPg0KwqAgwqA7OyBzdGF0ZW1lbnQgaWYgd2UmIzM5O3JlIGluc2lkZSBhIGJy YWNlIGxpc3QsIG90aGVyd2lzZSByZXR1cm4gbmlsLjxicj4NCkBAIC04NTIwLDIyICs4NTQ2LDkg QEA8YnI+DQrCoCDCoDs7IFRoaXMgZnVuY3Rpb24gbWlnaHQgZG8gaGlkZGVuIGJ1ZmZlciBjaGFu Z2VzLjxicj4NCsKgIMKgKG9yPGJyPg0KwqAgwqAgOzsgVGhpcyB3aWxsIHBpY2sgdXAgYnJhY2Ug bGlzdCBkZWNsYXJhdGlvbnMuPGJyPg0KLSDCoCAoYy1zYWZlPGJyPg0KLSDCoCDCoCAoc2F2ZS1l eGN1cnNpb248YnI+DQotIMKgIMKgIMKgIChnb3RvLWNoYXIgY29udGFpbmluZy1zZXhwKTxicj4N Ci0gwqAgwqAgwqAgKGxldCAoYmVmb3JlLWlkZW50aWZpZXIpPGJyPg0KLSDCoCDCoCDCoCDCoCh3 aGlsZTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAocHJvZ248YnI+DQotIMKgIMKgIMKgIMKgIMKg IMKgIMKgKGMtZm9yd2FyZC1zZXhwIC0xKTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAoY29u ZDxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgKChjLW9uLWlkZW50aWZpZXIpIChzZXRxIGJl Zm9yZS1pZGVudGlmaWVyIHQpKTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgKChhbmQgYmVm b3JlLWlkZW50aWZpZXI8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsb29r aW5nLWF0IGMtcG9zdGZpeC1kZWNsLXNwZWMta2V5KSk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgKHNldHEgYmVmb3JlLWlkZW50aWZpZXIgbmlsKTxicj4NCi0gwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB0KTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgKChsb29raW5nLWF0IGMtYnJh Y2UtbGlzdC1rZXkpIG5pbCk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgICh0IG5pbCkpKSk8 YnI+DQotIMKgIMKgIMKgIMKgKGxvb2tpbmctYXQgYy1icmFjZS1saXN0LWtleSkpKSk8YnI+DQor IMKgIChzYXZlLWV4Y3Vyc2lvbjxicj4NCisgwqAgwqAgKGdvdG8tY2hhciBjb250YWluaW5nLXNl eHApPGJyPg0KKyDCoCDCoCAoYy1iYWNrd2FyZC1vdmVyLWVudW0taGVhZGVyKSk8YnI+DQo8ZGl2 IGNsYXNzPSJpbSI+wqAgwqAgOzsgdGhpcyB3aWxsIHBpY2sgdXAgYXJyYXkvYWdncmVnYXRlIGlu aXQgbGlzdHMsIGV2ZW4gaWYgdGhleSBhcmUgbmVzdGVkLjxicj4NCjwvZGl2PsKgIMKgIChzYXZl LWV4Y3Vyc2lvbjxicj4NCsKgIMKgIMKgIChsZXQgKChjbGFzcy1rZXk8YnI+DQo8ZGl2IGNsYXNz PSJpbSI+ZGlmZiAtciBkNTFkMTE3MzM4NjkgY2MtZm9udHMuZWw8YnI+DQotLS0gYS9jYy1mb250 cy5lbCDCoCDCoCDCoCBTYXQgU2VwIDI4IDE2OjM5OjI2IDIwMTMgKzAwMDA8YnI+DQo8L2Rpdj4r KysgYi9jYy1mb250cy5lbCDCoCDCoCDCoCBTdW4gU2VwIDI5IDE0OjU3OjMzIDIwMTMgKzAwMDA8 YnI+DQpAQCAtMTQzOCwyMiArMTQzOCw5IEBAPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAobGV0ICgocGFyZW4tc3RhdGUgKGMtcGFyc2Utc3RhdGUpKSk8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoChhbmQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCAobnVtYmVycCAoY2FyIHBhcmVuLXN0YXRlKSk8YnI+DQotIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIChjLXNhZmU8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIChzYXZlLWV4Y3Vyc2lvbjxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgKGdvdG8tY2hhciAoY2FyIHBhcmVuLXN0YXRlKSk8YnI+DQotIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsZXQgKGJlZm9yZS1pZGVudGlmaWVyKTxicj4NCi0g wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHdoaWxlPGJyPg0KLSDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocHJvZ248YnI+DQotIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChjLWZvcndhcmQt c2V4cCAtMSk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIChjb25kPGJyPg0KLSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCgoYy1vbi1pZGVudGlmaWVyKSAoc2V0cSBiZWZvcmUtaWRlbnRpZmllciB0 KSk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgKChhbmQgYmVmb3JlLWlkZW50aWZpZXI8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGxvb2tpbmctYXQgYy1wb3N0Zml4 LWRlY2wtc3BlYy1rZXkpKTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgKHNldHEgYmVmb3JlLWlkZW50aWZpZXIgbmlsKTxicj4NCi0gwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdCk8YnI+DQot IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKChsb29r aW5nLWF0IGMtYnJhY2UtbGlzdC1rZXkpIG5pbCkgOyAmcXVvdDtlbnVtJnF1b3Q7PGJyPg0KLSDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCh0IG5pbCkp KSk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsb29raW5n LWF0IGMtYnJhY2UtbGlzdC1rZXkpKSkpKSkpPGJyPg0KKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCAoc2F2ZS1leGN1cnNpb248YnI+DQorIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIChnb3RvLWNoYXIgKGNhciBwYXJlbi1zdGF0ZSkpPGJyPg0KKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCAoYy1iYWNrd2FyZC1vdmVyLWVudW0taGVhZGVyKSkpKSk8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCAoYy1mb3J3YXJkLXRva2VuLTIpPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgbmlsKTxicj4NCjxicj4NCkBAIC0xNTQyLDIyICsxNTI5LDkgQEA8YnI+DQrC oCDCoCDCoCh3aGVuIChhbmQ8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoGVuY2wtcG9zPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAoZXEgKGNoYXItYWZ0ZXIgZW5jbC1wb3MpID9ceyk8YnI+DQotIMKgIMKg IMKgIMKgIMKgKGMtc2FmZTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAoc2F2ZS1leGN1cnNpb248 YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGdvdG8tY2hhciBlbmNsLXBvcyk8YnI+DQotIMKg IMKgIMKgIMKgIMKgIMKgIMKgKGxldCAoYmVmb3JlLWlkZW50aWZpZXIpPGJyPg0KLSDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCh3aGlsZTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAocHJvZ248YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChjLWZvcndhcmQt c2V4cCAtMSk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChjb25kPGJyPg0K LSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgoYy1vbi1pZGVudGlmaWVyKSAoc2V0 cSBiZWZvcmUtaWRlbnRpZmllciB0KSk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgKChhbmQgYmVmb3JlLWlkZW50aWZpZXI8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgKGxvb2tpbmctYXQgYy1wb3N0Zml4LWRlY2wtc3BlYy1rZXkp KTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHNldHEgYmVmb3JlLWlk ZW50aWZpZXIgbmlsKTxicj4NCi0gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdCk8 YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKChsb29raW5nLWF0IGMtYnJh Y2UtbGlzdC1rZXkpIG5pbCkgOyAmcXVvdDtlbnVtJnF1b3Q7PGJyPg0KLSDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCh0IG5pbCkpKSk8YnI+DQotIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgKGxvb2tpbmctYXQgYy1icmFjZS1saXN0LWtleSkpKSkpPGJyPg0KKyDCoCDCoCDCoCDCoCDC oChzYXZlLWV4Y3Vyc2lvbjxicj4NCisgwqAgwqAgwqAgwqAgwqAgwqAoZ290by1jaGFyIGVuY2wt cG9zKTxicj4NCisgwqAgwqAgwqAgwqAgwqAgwqAoYy1iYWNrd2FyZC1vdmVyLWVudW0taGVhZGVy KSkpPGJyPg0KPGRpdiBjbGFzcz0iaW0iPsKgIMKgIMKgIMKgKGMtc3ludGFjdGljLXNraXAtYmFj a3dhcmQgJnF1b3Q7XnssJnF1b3Q7IG5pbCB0KTxicj4NCjwvZGl2PsKgIMKgIMKgIMKgKGMtcHV0 LWNoYXItcHJvcGVydHkgKDEtIChwb2ludCkpICYjMzk7Yy10eXBlICYjMzk7Yy1kZWNsLWlkLXN0 YXJ0KTxicj4NCjxkaXYgY2xhc3M9IkhPRW5aYiI+PGRpdiBjbGFzcz0iaDUiPjxicj4NCjxicj4N Cjxicj4NCiZndDsgUGF1bDxicj4NCjxicj4NCi0tPGJyPg0KQWxhbiBNYWNrZW56aWUgKE51cmVt YmVyZywgR2VybWFueSkuPGJyPg0KPC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48 L2Rpdj4NCg== --089e0111d0d8ec43fb04e794b730--