From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.devel Subject: Re: Problems with move_it_in_display_line_to X when tabs exist. Date: Mon, 15 Jan 2018 20:41:52 -0800 Message-ID: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Mon_Jan_15_20:41:52_2018-1" X-Trace: blaine.gmane.org 1516077623 18857 195.159.176.226 (16 Jan 2018 04:40:23 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 16 Jan 2018 04:40:23 +0000 (UTC) Cc: emacs-devel@gnu.org To: Eli Zaretskii Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Jan 16 05:40:19 2018 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ebJ2g-0003vu-3o for ged-emacs-devel@m.gmane.org; Tue, 16 Jan 2018 05:40:11 +0100 Original-Received: from localhost ([::1]:34873 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ebJ4f-000542-FM for ged-emacs-devel@m.gmane.org; Mon, 15 Jan 2018 23:42:13 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46256) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ebJ4R-000528-AJ for emacs-devel@gnu.org; Mon, 15 Jan 2018 23:42:00 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ebJ4O-0002Ok-6k for emacs-devel@gnu.org; Mon, 15 Jan 2018 23:41:59 -0500 Original-Received: from gateway31.websitewelcome.com ([192.185.144.91]:20970) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ebJ4N-0002OH-Qz for emacs-devel@gnu.org; Mon, 15 Jan 2018 23:41:56 -0500 Original-Received: from cm17.websitewelcome.com (cm17.websitewelcome.com [100.42.49.20]) by gateway31.websitewelcome.com (Postfix) with ESMTP id BAC3649739 for ; Mon, 15 Jan 2018 22:41:54 -0600 (CST) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id bJ4MeqfYZuMnybJ4Meb67U; Mon, 15 Jan 2018 22:41:54 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lawlist.com ; s=default; h=Content-Type:MIME-Version:Subject:Cc:To:From:Message-ID:Date: Sender:Reply-To:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=l46CLP/pymbl5e1fVIhA5t8EFmO8UTi8kbt0vWTcxgQ=; b=cYQIPLhw93vNa/5eYIvfs40s1/ M89k4EZYptRJu00LI9nep0L7cY43Bc+qIddPpahoKCh/K18oNMjRVkciTE+2WWeKSaFFxp5aC1puI 0tA+NZcPVL4eN0mzmIDyQWH3hXmWkFAVYwkdjFh41B9BNKtqxFAUxxcqf1mhijWMnLoGW9gFXdR81 jor1XV8SKpnemHgR9Vapb1qNyUsdW4sZiooxnCUvS5mTY5GsiYn//fbx69e4pRqlWdD60qLzA1Bhr j1gd2C9NA/YykvsIzuaj+cSN9Zf5EJwXSKw/LlnmQSQvkyNAFbgI4oqIcK2m+w6K4jKzgfyPWKR/7 BJbCSFYw==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:53486 helo=server.private) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.89) (envelope-from ) id 1ebJ4L-000s8K-Mo; Mon, 15 Jan 2018 22:41:53 -0600 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3053.hostgator.com X-AntiAbuse: Original Domain - gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lawlist.com X-BWhitelist: no X-Source-IP: 45.48.239.195 X-Source-L: No X-Exim-ID: 1ebJ4L-000s8K-Mo X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.private) [45.48.239.195]:53486 X-Source-Auth: lawlist X-Email-Count: 2 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 192.185.144.91 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:222001 Archived-At: --Multipart_Mon_Jan_15_20:41:52_2018-1 Content-Type: text/plain; charset=US-ASCII Thank you, Eli, for teaching me about "integer division". I have added that concept to my learning "todo list" and anticipate having a handle on that in the next couple of days. GOAL: The goal is to interactively call (scroll-left 1) -- one or more times in a row -- and obtain the beginning _visible_ X and HPOS of the STRETCH tab; and, also obtain its _visible_ pixel-width. The following screenshots with stderr results were obtained by calling the function debug-tab-pixel-width, which is contained in the attached patch.diff. I saw that x_produce_glyphs is able to achieve the correct it->pixel_width for the STRETCH tab when x0 >= it->lnum_pixel_width; however, it is run subsequent in time to when we call move_it_in_display_line_to. 0. Opening screenshot -- just setting up the test buffer. https://www.lawlist.com/images/tab_width_bug_00.png 1. Place the cursor on the line that begins with a tab, and press the f5 key once. https://www.lawlist.com/images/tab_width_bug_01.png OBSERVATIONS (w->hscroll == 1): The expected result is that the STRETCH tab will have an it.pixel_width of 42. The third (3rd) iteration/loop has the wrong value; i.e., 49. The fourth (4th) iteration/loop has the correct value; i.e., 42. x_produce_glyphs runs subsequent in time and contains the desired value of 42 when x0 >= it->lnum_pixel_width. 2. With the cursor still on the line that began with a tab, Press the f5 key once. https://www.lawlist.com/images/tab_width_bug_02.png OBSERVATIONS (w->hscroll == 2): The expected result is that the STRETCH tab will have an it.pixel_width of 35; however, it has a value of 49 instead. x_produce_glyphs runs subsequent in time and contains the desired value of 35 when x0 >= it->lnum_pixel_width. 3. With the cursor still on the line that began with a tab, Press the f5 key once. https://www.lawlist.com/images/tab_width_bug_03.png OBSERVATIONS (w->hscroll == 3): The expected result is that the STRETCH tab will have an it.pixel_width of 28; however, it has a value of 49 instead. x_produce_glyphs runs subsequent in time and contains the desired value of 28 when x0 >= it->lnum_pixel_width. LISP CODE (buffer-local): (setq display-line-numbers t) (setq buffer-display-table (make-display-table)) (aset buffer-display-table ?\t (vector (make-glyph-code ?\u00BB 'font-lock-warning-face) (make-glyph-code ?\t 'highlight))) (setq tab-width 8) (global-set-key [f5] (lambda () (interactive) (debug-tab-pixel-width))) TEST TEXT (a tab, followed by some arbitrary letters such Hello-world) -- the text begins on line 13: Hello-world. C CODE: Apply the attached patch.diff to Emacs 26 as of 01/15/2018 bearing last commit 9f22b7d2317eff65897355dcf68ba10d521cfa5a. --Multipart_Mon_Jan_15_20:41:52_2018-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy94ZGlzcC5jIGIvc3JjL3hkaXNwLmMKaW5kZXggOTAzODE1Yy4uZTVj MzEyMiAxMDA2NDQKLS0tIGEvc3JjL3hkaXNwLmMKKysrIGIvc3JjL3hkaXNwLmMKQEAgLTI4MjQ4 LDYgKzI4MjQ4LDIzIEBAIHhfcHJvZHVjZV9nbHlwaHMgKHN0cnVjdCBpdCAqaXQpCiAJCQkJICAl IHRhYl93aWR0aCkpOwogCiAJICAgICAgaXQtPnBpeGVsX3dpZHRoID0gbmV4dF90YWJfeCAtIHgw OworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogRGVidWcgdGhlIHBpeGVsLXdpZHRo IG9mIGEgc3RyZXRjaCB0YWIuICovCisKKyAgaWYgKCFOSUxQIChWZGlzcGxheV9saW5lX251bWJl cnMpCisgICAgICAmJiBpdC0+dy0+aHNjcm9sbCA+IDAKKyAgICAgICYmIHgwID49IGl0LT5sbnVt X3BpeGVsX3dpZHRoKQorICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG54X3Byb2R1Y2VfZ2x5cGhz OlxuXAorICAgIGl0LT5jICglZClcblwKKyAgICBpdC0+cGl4ZWxfd2lkdGggKCVkKVxuXAorICAg IGl0LT5jdXJyZW50X3ggKCVkKVxuIiwKKyAgICBpdC0+YywgaXQtPnBpeGVsX3dpZHRoLCBpdC0+ Y3VycmVudF94KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogCSAgICAgIGl0LT5u Z2x5cGhzID0gMTsKIAkgICAgICBpZiAoRk9OVF9UT09fSElHSCAoZm9udCkpCiAJCXsKQEAgLTMy MjUxLDkgKzMyMjY4LDE4NSBAQCB4X2ludGVyc2VjdF9yZWN0YW5nbGVzIChYUmVjdGFuZ2xlICpy MSwgWFJlY3RhbmdsZSAqcjIsIFhSZWN0YW5nbGUgKnJlc3VsdCkKIAkJCSAgICBJbml0aWFsaXph dGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLwogCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyog RGVidWcgdGhlIHBpeGVsLXdpZHRoIG9mIGEgc3RyZXRjaCB0YWIuICovCisKK0RFRlVOICgiZGVi dWctdGFiLXBpeGVsLXdpZHRoIiwgRmRlYnVnX3RhYl9waXhlbF93aWR0aCwgU2RlYnVnX3RhYl9w aXhlbF93aWR0aCwgMCwgMCwgMCwKKyAgICAgICBkb2M6IC8qIERlYnVnIHRoZSBwaXhlbC13aWR0 aCBvZiBhIHN0cmV0Y2ggdGFiLiAqLykKKyAgKHZvaWQpCit7CisgIEZzY3JvbGxfbGVmdCAobWFr ZV9udW1iZXIgKDEpLCBRbmlsKTsKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dp bmRvdyAoc2VsZWN0ZWRfd2luZG93KTsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5m cmFtZSk7CisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVDS19CVUZGRVIg KGJ1Zik7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICBzdHJ1Y3QgaXQg aXQ7CisgIHZvaWQgKml0ZGF0YSA9IGJpZGlfc2hlbHZlX2NhY2hlICgpOworICBzdHJ1Y3QgaXQg c2F2ZWRfaXRfZm9yX3dpbmRvd19zdGFydDsKKyAgdm9pZCAqc2F2ZWRfaXRkYXRhX2Zvcl93aW5k b3dfc3RhcnQgPSBOVUxMOworICBlbnVtIG1vdmVfaXRfcmVzdWx0IHJjID0gTU9WRV9YX1JFQUNI RUQ7CisgIHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90ZXh0X3Bvc2l0aW9uOworICBwdHJkaWZmX3Qg aXRfc3RhcnQ7CisgIGludCBmaXJzdF94LCBsYXN0X3g7CisgIGludCBsbnVtX3dpZHRoID0gMDsK KyAgaW50IGxudW1fcGl4ZWxfd2lkdGggPSAwOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZS QU1FX0NPTFVNTl9XSURUSCAoZik7CisgIGJvb2wgaHNjbCA9ICghdy0+c3VzcGVuZF9hdXRvX2hz Y3JvbGwKKyAgICAgICAgICAgICAgICYmIEVRIChGYnVmZmVyX2xvY2FsX3ZhbHVlIChRYXV0b19o c2Nyb2xsX21vZGUsIGJ1ZiksIFFjdXJyZW50X2xpbmUpCisgICAgICAgICAgICAgICAmJiB3LT5o c2Nyb2xsID4gMCk7CisgIGludCB3X2hzY3JvbGwgPSB3LT5oc2Nyb2xsOworICBpbnQgaHNjbF9m aXJzdF9ocG9zID0gd2luZG93X2hzY3JvbGxfbGltaXRlZCAodywgZik7CisgIGludCBoc2NsX2Zp cnN0X3ggPSBoc2NsX2ZpcnN0X2hwb3MgKiBmcmFtZV9jaGFyX3dpZHRoOworICBpbnQgdGV4dF9h cmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsKKyAgaW50IGhlYWRl cl9saW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBpbnQgcmVs YXRpdmVfeCwgaHBvcywgdnBvczsKKyAgaW50IG9wb2ludF94ID0gdy0+b3V0cHV0X2N1cnNvci54 OworICBpbnQgb3BvaW50X3kgPSB3LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBv cyA9IHctPm91dHB1dF9jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+b3V0cHV0 X2N1cnNvci52cG9zOworICBpbnQgY291bnQgPSAxOworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq CisgICAgICAgICAgICAgICAgICAgICAgU1RBUlQgRElTUExBWSBBTkQgUFJJTUUgSVQKKyoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworICAvKiBCZWdpbiB0aGUgam91cm5leSBhdCB3LT5zdGFydC4g Ki8KKyAgU0VUX1RFWFRfUE9TX0ZST01fTUFSS0VSIChzdGFydF90ZXh0X3Bvc2l0aW9uLCB3LT5z dGFydCk7CisgIHN0YXJ0X2Rpc3BsYXkgKCZpdCwgdywgc3RhcnRfdGV4dF9wb3NpdGlvbik7Cisg IGZpcnN0X3ggPSBpdC5maXJzdF92aXNpYmxlX3g7CisgIGxhc3RfeCA9IGl0Lmxhc3RfdmlzaWJs ZV94OworICBpdF9zdGFydCA9IElUX0NIQVJQT1MgKGl0KTsKKyAgU0FWRV9JVCAoc2F2ZWRfaXRf Zm9yX3dpbmRvd19zdGFydCwgaXQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAg LyogRmluaXNoIHByaW1pbmcgdGhlIElUIGZvciBwb3RlbnRpYWwgbGluZSBudW1iZXJzLiAqLwor ICBpZiAoIU5JTFAgKFZkaXNwbGF5X2xpbmVfbnVtYmVycykKKyAgICAgICYmICFFUSAoVmRpc3Bs YXlfbGluZV9udW1iZXJzLCBRdmlzdWFsKSkKKyAgICB7CisgICAgICBpdC5maXJzdF92aXNpYmxl X3ggPSAwOworICAgICAgbW92ZV9pdF9ieV9saW5lcyAoJml0LCAxKTsKKyAgICAgIGxudW1fd2lk dGggPSBpdC5sbnVtX3dpZHRoOworICAgICAgbG51bV9waXhlbF93aWR0aCA9IGl0LmxudW1fcGl4 ZWxfd2lkdGg7CisgICAgICBSRVNUT1JFX0lUICgmaXQsICZzYXZlZF9pdF9mb3Jfd2luZG93X3N0 YXJ0LCBzYXZlZF9pdGRhdGFfZm9yX3dpbmRvd19zdGFydCk7CisgICAgICBpdC5maXJzdF92aXNp YmxlX3ggPSBmaXJzdF94OworICAgICAgaXQubGFzdF92aXNpYmxlX3ggPSBsYXN0X3g7CisgICAg ICBpdC5sbnVtX3dpZHRoID0gbG51bV93aWR0aDsKKyAgICAgIGl0LmxudW1fcGl4ZWxfd2lkdGgg PSBsbnVtX3BpeGVsX3dpZHRoOworICAgICAgU0FWRV9JVCAoc2F2ZWRfaXRfZm9yX3dpbmRvd19z dGFydCwgaXQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgICB9CisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBHT1RPIExJTkUg QkVHSU4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworICAvKiBQbGFjZSB0aGUgSVQgb24gdGhl IGN1cnJlbnQgbGluZSBjb250YWluaW5nIFBULiAqLworICBpbnQgdm9mZnNldCA9IChoZWFkZXJf bGluZV9oZWlnaHQgPiAwCisgICAgICAgICAgICAgICAgICYmIG9wb2ludF92cG9zID4gMCkKKyAg ICAgICAgICAgICAgICAgID8gb3BvaW50X3Zwb3MgLSAxCisgICAgICAgICAgICAgICAgICA6IG9w b2ludF92cG9zOworICBpZiAodm9mZnNldCA+IDApCisgICAgbW92ZV9pdF9ieV9saW5lcyAoJml0 LCB2b2Zmc2V0KTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAg ICAgICAgRklSU1QgWCA9PiBQRU5VTFRJTUFURSBFT0wKKyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBpZiAoaHNjbCkKKyAgICAgICAgeworICAg ICAgICAgIHJlbGF0aXZlX3ggPSBpdC5jdXJyZW50X3ggLSAoaHNjbF9maXJzdF9ocG9zICogZnJh bWVfY2hhcl93aWR0aCk7CisgICAgICAgICAgaHBvcyA9IGl0Lmhwb3MgLSBoc2NsX2ZpcnN0X2hw b3M7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJl bGF0aXZlX3ggPSBpdC5jdXJyZW50X3ggLSBmaXJzdF94OworICAgICAgICAgICAgaHBvcyA9IGl0 Lmhwb3M7CisgICAgICAgICAgfQorICAgICAgaWYgKGhlYWRlcl9saW5lX2hlaWdodCA+IDApCisg ICAgICAgIHZwb3MgPSBpdC52cG9zICsgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHZwb3Mg PSBpdC52cG9zOworICAgICAgYm9vbCBmaW5hbF9sb29wX3AgPSAoSVRFUkFUT1JfQVRfRU5EX09G X0xJTkVfUCAoJml0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgRkVUQ0hfQllURSAo SVRfQllURVBPUyAoaXQpKSA9PSAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBy YyA9PSBNT1ZFX1BPU19NQVRDSF9PUl9aVik7CisgICAgICBib29sIG5vdGhpbmdfcCA9IChpdC5j ID09IDApOworICAgICAgYm9vbCB0YWJfaW52aXNpYmxlX3AgPSAoaXQuYyA9PSAnXHQnKTsKKyAg ICAgIGJvb2wgdGFiX3Zpc2libGVfcCA9IChpdC5jID09IDE4Nyk7CisgICAgICBzdHJ1Y3QgZmFj ZSAqZmFjZSA9IEZBQ0VfRlJPTV9JRCAoaXQuZiwgaXQuZmFjZV9pZCk7CisgICAgICBzdHJ1Y3Qg Zm9udCAqZm9udCA9IGZhY2UtPmZvbnQ7CisgICAgICBpZiAobm90aGluZ19wCisgICAgICAgICAg JiYgdy0+aHNjcm9sbCA+IDApCisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuJWQuICBOT1RI SU5HIGl0LmMgKCVkKVxuXAorICAgIGl0LmN1cnJlbnRfeCAoJWQpXG5cCisgICAgaXQucGl4ZWxf d2lkdGggKCVkKVxuXAorICAgIHctPmhzY3JvbGwgKCVkKVxuXAorICAgIGZpcnN0X3ggKCVkKVxu XAorICAgIGxudW1fcGl4ZWxfd2lkdGg6ICglZClcbiIsCisgICAgICAgICAgICAgICAgIGNvdW50 LAorICAgICAgICAgICAgICAgICBpdC5jLAorICAgICAgICAgICAgICAgICBpdC5jdXJyZW50X3gs CisgICAgICAgICAgICAgICAgIGl0LnBpeGVsX3dpZHRoLAorICAgICAgICAgICAgICAgICB3X2hz Y3JvbGwsCisgICAgICAgICAgICAgICAgIGZpcnN0X3gsCisgICAgICAgICAgICAgICAgIGxudW1f cGl4ZWxfd2lkdGgpOworICAgICAgaWYgKHRhYl92aXNpYmxlX3AKKyAgICAgICAgICAmJiB3LT5o c2Nyb2xsID4gMCkKKyAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4lZC4gIENIQVJBQ1RFUiBp dC5jICglZClcblwKKyAgICBpdC5jdXJyZW50X3ggKCVkKVxuXAorICAgIGl0LnBpeGVsX3dpZHRo ICglZClcblwKKyAgICB3LT5oc2Nyb2xsICglZClcblwKKyAgICBmaXJzdF94ICglZClcblwKKyAg ICBsbnVtX3BpeGVsX3dpZHRoOiAoJWQpXG4iLAorICAgICAgICAgICAgICAgICBjb3VudCwKKyAg ICAgICAgICAgICAgICAgaXQuYywKKyAgICAgICAgICAgICAgICAgaXQuY3VycmVudF94LAorICAg ICAgICAgICAgICAgICBpdC5waXhlbF93aWR0aCwKKyAgICAgICAgICAgICAgICAgd19oc2Nyb2xs LAorICAgICAgICAgICAgICAgICBmaXJzdF94LAorICAgICAgICAgICAgICAgICBsbnVtX3BpeGVs X3dpZHRoKTsKKyAgICAgIGlmICh0YWJfaW52aXNpYmxlX3AKKyAgICAgICAgICAmJiB3LT5oc2Ny b2xsID4gMCkKKyAgICAgIGZwcmludGYgKHN0ZGVyciwgIlxuJWQuICBTVFJFVENIIGl0LmMgKCVk KVxuXAorICAgIGl0LmN1cnJlbnRfeCAoJWQpXG5cCisgICAgaXQucGl4ZWxfd2lkdGggKCVkKVxu XAorICAgIHctPmhzY3JvbGwgKCVkKVxuXAorICAgIGZpcnN0X3ggKCVkKVxuXAorICAgIGxudW1f cGl4ZWxfd2lkdGg6ICglZClcbiIsCisgICAgICAgICAgICAgICBjb3VudCwKKyAgICAgICAgICAg ICAgICAgaXQuYywKKyAgICAgICAgICAgICAgICAgaXQuY3VycmVudF94LAorICAgICAgICAgICAg ICAgICBpdC5waXhlbF93aWR0aCwKKyAgICAgICAgICAgICAgICAgd19oc2Nyb2xsLAorICAgICAg ICAgICAgICAgICBmaXJzdF94LAorICAgICAgICAgICAgICAgICBsbnVtX3BpeGVsX3dpZHRoKTsK KyAgICAgIGlmIChmaW5hbF9sb29wX3ApCisgICAgICAgIGJyZWFrOworICAgICAgcmMgPSBtb3Zl X2l0X2luX2Rpc3BsYXlfbGluZV90byAoJml0LCBaViwgaXQuY3VycmVudF94ICsgaXQucGl4ZWxf d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNT1ZFX1RPX1BP UyB8IE1PVkVfVE9fWCk7CisgICAgICBjb3VudCA9IGNvdW50ICsgMTsKKyAgICAgIGlmIChyYyA9 PSBNT1ZFX0xJTkVfQ09OVElOVUVEKQorICAgICAgICBicmVhazsKKyAgICAgIHJlbGF0aXZlX3gg PSAoaHNjbCkKKyAgICAgICAgICAgICAgICAgICA/IGl0LmN1cnJlbnRfeCAtIChoc2NsX2ZpcnN0 X2hwb3MgKiBmcmFtZV9jaGFyX3dpZHRoKQorICAgICAgICAgICAgICAgICAgIDogaXQuY3VycmVu dF94IC0gZmlyc3RfeDsKKyAgICAgIGlmIChyZWxhdGl2ZV94ICsgZnJhbWVfY2hhcl93aWR0aCA+ PSB0ZXh0X2FyZWFfd2lkdGgpCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgYmlkaV91bnNoZWx2 ZV9jYWNoZSAoaXRkYXRhLCBmYWxzZSk7CisgIHJldHVybiBRbmlsOworfQorCisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKworCiB2b2lkCiBzeW1zX29mX3hkaXNwICh2b2lkKQogeworCisKKy8q ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiAqLworLyogRGVidWcgdGhlIHBpeGVsLXdpZHRoIG9mIGEgc3Ry ZXRjaCB0YWIuICovCisKKyAgZGVmc3ViciAoJlNkZWJ1Z190YWJfcGl4ZWxfd2lkdGgpOworCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIFZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3Rv ciA9IFFuaWw7CiAgIHN0YXRpY3BybyAoJlZ3aXRoX2VjaG9fYXJlYV9zYXZlX3ZlY3Rvcik7CiAK --Multipart_Mon_Jan_15_20:41:52_2018-1--