From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.devel Subject: Re: NS port: How to debug excessive garbage collection? Date: Sun, 14 Apr 2019 12:46:28 -0700 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Sun_Apr_14_12:46:28_2019-1" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="145414"; mail-complaints-to="usenet@blaine.gmane.org" Cc: emacs-devel@gnu.org To: agrambot@gmail.com,eliz@gnu.org,dancol@dancol.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Apr 14 21:47:14 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hFl5t-000bhB-Bp for ged-emacs-devel@m.gmane.org; Sun, 14 Apr 2019 21:47:13 +0200 Original-Received: from localhost ([127.0.0.1]:40173 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hFl5s-0005ik-6j for ged-emacs-devel@m.gmane.org; Sun, 14 Apr 2019 15:47:12 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:37780) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1hFl5E-0005i9-Na for emacs-devel@gnu.org; Sun, 14 Apr 2019 15:46:33 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hFl5D-0007LT-JE for emacs-devel@gnu.org; Sun, 14 Apr 2019 15:46:32 -0400 Original-Received: from gateway21.websitewelcome.com ([192.185.45.155]:31145) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hFl5C-0007Kw-Vb for emacs-devel@gnu.org; Sun, 14 Apr 2019 15:46:31 -0400 Original-Received: from cm13.websitewelcome.com (cm13.websitewelcome.com [100.42.49.6]) by gateway21.websitewelcome.com (Postfix) with ESMTP id 1CFA0400C743A for ; Sun, 14 Apr 2019 14:46:30 -0500 (CDT) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id Fl5BhUUvOYTGMFl5BhcNVs; Sun, 14 Apr 2019 14:46:30 -0500 X-Authority-Reason: nr=8 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=gTKLuSNE4N9sU/2wmSI7RTIvMovz/pV+UePIyT2DWYA=; b=jziadqg24DmY7XU+rr40HZOVyf 29vsnKhR/MuYlyZ1xDArdgKN0XKhUL34cI04QkQI7LGpNJDI7q9N9BV4HU84cwJeBA974YaTNWowd pF87MuwwoPVk+FXgjakrdrsvXRlSW8XP+3eE6b0OBzd1p/PlRLAt9VpmVpJONyJ+Cn6WB4nk8eygX HUduzYDY926cF/uIE1EE/yyPmJE+GN5ZeT06iYpl3ac4OPgOLXElbubfF3cBdqufaJLc9DuZBp7wX YHnEtqv9aJ7pAk67hO/Snc7Do7uTq/x2deb9slsy2R6jWQCmk9plH8rX7KVhCARkN03M/sif9MXfW dBygtPZw==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:51296 helo=server.local) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.91) (envelope-from ) id 1hFl5B-004EFO-2Q; Sun, 14 Apr 2019 14:46:29 -0500 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: 1hFl5B-004EFO-2Q X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.local) [45.48.239.195]:51296 X-Source-Auth: lawlist X-Email-Count: 1 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 192.185.45.155 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:235456 Archived-At: --Multipart_Sun_Apr_14_12:46:28_2019-1 Content-Type: text/plain; charset=US-ASCII The attched patch (debug_mwe_001.diff) is a minimal working example that demonstrates the issue on all three platforms (X11, W32, NS) using the GUI version of Emacs built from the master branch as of 04/08/2019 (a038df77de7b1aa2d73a6478493b8838b59e4982). The snippet that I am pasting and evaluating in the minibuffer is as follows: (progn (find-library "simple") (fundamental-mode) (blink-cursor-mode -1) (global-eldoc-mode -1) (setq timer-list nil timer-idle-list nil crosshairs t)) Here are Youtube links to screen recordings of the minimal working example on all three platforms: NS (screen recording): https://youtu.be/4IzXfP2j2GY X11 (screen recording): https://youtu.be/zrRH72qdmx0 W32 (screen recording): https://youtu.be/cfIG4fbkesY MINIMAL WORKING EXAMPLE: 1. Imaginary / Pretend: We imagine that all fake cursors are erased at the outset of update_window while w->current_matrix is still valid; i.e., before scrolling_window does its thing. 2. The master cache of fake cursors (w->ch_cache) is set to Qnil. 3. Imaginary / Pretend: We imagine .... As to the rows in the w->desired_matrix that must be updated with update_text_area, we draw fake cursors immediately after draw_glyphs finishes updating the row. As we are laying fake cursors, we use a temporary cache (w->mc_temp_cache) to store the relevant data so that we can redraw any fake cursors that get erased because they are left/right_overwritten as determined by draw_glyphs. Once the row has been updated with fake cursors, we set the termporary cache (w->mc_temp_cache) to Qnil and we set the master cache with the new data -- appending new data if the cache is non-nil. 4. As to all remaining rows that are not updated with update_text_area (which uses w->desired_matrix), we use the w->current_matrix and draw/cache the fake cursors using the same approach as mentioned in the preceding step; i.e., a temporary cache (w->mc_temp_cache) so that we can fix any fake cursors that got left/right_overwritten and then that cache is set to Qnil and the master cache (w->mc_cache) is updated. In the above minimal working example, the window Lisp_Object caches are rather simple: '((make_fixnum (1)) (make_fixnum (2)) (make_fixnum (3)) ... (make_fixnum (99))) --Multipart_Sun_Apr_14_12:46:28_2019-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="debug_mwe_001.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9hbGxvYy5jIGIvc3JjL2FsbG9jLmMKaW5kZXggZGQ3ODM4Ni4uNTcw MDIyZiAxMDA2NDQKLS0tIGEvc3JjL2FsbG9jLmMKKysrIGIvc3JjL2FsbG9jLmMKQEAgLTYyMDYs NiArNjIwNiwyOSBAQCBnYXJiYWdlX2NvbGxlY3RfMSAoc3RydWN0IGdjc3RhdCAqZ2NzdCkKIAog ICAqZ2NzdCA9IGdjc3RhdDsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2lu IERFQlVHR0lORyAqLworCisgIExpc3BfT2JqZWN0IHRvdGFsW10gPSB7CisgICAgbGlzdDIgKGlu dGVybiAoImNvbnNfY2VsbHNfY29uc2VkIiksIG1ha2VfaW50IChjb25zX2NlbGxzX2NvbnNlZCkp LAorICAgIGxpc3QyIChpbnRlcm4gKCJzeW1ib2xzX2NvbnNlZCIpLCBtYWtlX2ludCAoc3ltYm9s c19jb25zZWQpKSwKKyAgICBsaXN0MiAoaW50ZXJuICgic3RyaW5nc19jb25zZWQiKSwgbWFrZV9p bnQgKHN0cmluZ3NfY29uc2VkKSksCisgICAgbGlzdDIgKGludGVybiAoInN0cmluZ19jaGFyc19j b25zZWQiKSwgbWFrZV9pbnQgKHN0cmluZ19jaGFyc19jb25zZWQpKSwKKyAgICBsaXN0MiAoaW50 ZXJuICgidmVjdG9yX2NlbGxzX2NvbnNlZCIpLCBtYWtlX2ludCAodmVjdG9yX2NlbGxzX2NvbnNl ZCkpLAorICAgIGxpc3QyIChpbnRlcm4gKCJmbG9hdHNfY29uc2VkIiksIG1ha2VfaW50IChmbG9h dHNfY29uc2VkKSksCisgICAgbGlzdDIgKGludGVybiAoImludGVydmFsc19jb25zZWQiKSwgbWFr ZV9pbnQgKGludGVydmFsc19jb25zZWQpKSwKKyAgfTsKKworICBMaXNwX09iamVjdCB2YWwgPSBD QUxMTUFOWSAoRmxpc3QsIHRvdGFsKTsKKyAgTGlzcF9PYmplY3Qgc3RyaW5nID0gRnByaW4xX3Rv X3N0cmluZyAodmFsLCBRbmlsKTsKKyAgY2hhciAqY2hhcl9zdHJpbmcgPSBTU0RBVEEgKHN0cmlu Zyk7CisgIGZwcmludGYgKHN0ZGVyciwgIlxuJXNcbiIsIGNoYXJfc3RyaW5nKTsKKworLyogZW5k IERFQlVHR0lORyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAvKiBHQyBpcyBj b21wbGV0ZTogbm93IHdlIGNhbiBydW4gb3VyIGZpbmFsaXplciBjYWxsYmFja3MuICAqLwogICBy dW5fZmluYWxpemVycyAoJmRvb21lZF9maW5hbGl6ZXJzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2J1 ZmZlci5jIGIvc3JjL2J1ZmZlci5jCmluZGV4IGFiNDc3NDguLjAzNjRlYmEgMTAwNjQ0Ci0tLSBh L3NyYy9idWZmZXIuYworKysgYi9zcmMvYnVmZmVyLmMKQEAgLTEzMyw2ICsxMzMsMjEgQEAgQ0hF Q0tfT1ZFUkxBWSAoTGlzcF9PYmplY3QgeCkKIAogLyogVGhlc2Ugc2V0dGVycyBhcmUgdXNlZCBv bmx5IGluIHRoaXMgZmlsZSwgc28gdGhleSBjYW4gYmUgcHJpdmF0ZS4KICAgIFRoZSBwdWJsaWMg c2V0dGVycyBhcmUgaW5saW5lIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGJ1ZmZlci5oLiAgKi8KKwor CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8K Kworc3RhdGljIHZvaWQKK2JzZXRfY3Jvc3NoYWlycyAoc3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9P YmplY3QgdmFsKQoreworICBiLT5jcm9zc2hhaXJzXyA9IHZhbDsKK30KKworLyogZW5kIE1VTFRJ UExFLUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKIHN0YXRpYyB2b2lk CiBic2V0X2FiYnJldl9tb2RlIChzdHJ1Y3QgYnVmZmVyICpiLCBMaXNwX09iamVjdCB2YWwpCiB7 CkBAIC01MTQyLDYgKzUxNTcsMTYgQEAgaW5pdF9idWZmZXJfb25jZSAodm9pZCkKICAgYnNldF9s YXN0X3NlbGVjdGVkX3dpbmRvdyAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgbWFrZV9maXhudW0gKDAp KTsKIAogICBpZHggPSAxOworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQ TEUtQ1VSU09SUyAqLworCisgIFhTRVRGQVNUSU5UIChCVkFSICgmYnVmZmVyX2xvY2FsX2ZsYWdz LCBjcm9zc2hhaXJzKSwgaWR4KTsgKytpZHg7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor CisKICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1vZGVfbGluZV9m b3JtYXQpLCBpZHgpOyArK2lkeDsKICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxf ZmxhZ3MsIGFiYnJldl9tb2RlKSwgaWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChCVkFSICgm YnVmZmVyX2xvY2FsX2ZsYWdzLCBvdmVyd3JpdGVfbW9kZSksIGlkeCk7ICsraWR4OwpAQCAtNTIy OCw2ICs1MjUzLDE2IEBAIGluaXRfYnVmZmVyX29uY2UgKHZvaWQpCiAgIC8qIE11c3QgZG8gdGhl c2UgYmVmb3JlIG1ha2luZyB0aGUgZmlyc3QgYnVmZmVyISAqLwogCiAgIC8qIHJlYWwgc2V0dXAg aXMgZG9uZSBpbiBiaW5kaW5ncy5lbCAqLworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor LyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgIGJzZXRfY3Jvc3NoYWlycyAoJmJ1ZmZlcl9kZWZh dWx0cywgUW5pbCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgYnNldF9tb2Rl X2xpbmVfZm9ybWF0ICgmYnVmZmVyX2RlZmF1bHRzLCBidWlsZF9wdXJlX2Nfc3RyaW5nICgiJS0i KSk7CiAgIGJzZXRfaGVhZGVyX2xpbmVfZm9ybWF0ICgmYnVmZmVyX2RlZmF1bHRzLCBRbmlsKTsK ICAgYnNldF9hYmJyZXZfbW9kZSAoJmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7CkBAIC01NDY0LDYg KzU0OTksMTUgQEAgc3ltc19vZl9idWZmZXIgKHZvaWQpCiAgIHN0YXRpY3BybyAoJlFTRnVuZGFt ZW50YWwpOwogICBzdGF0aWNwcm8gKCZWYnVmZmVyX2FsaXN0KTsKIAorCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICBERUZTWU0gKFFjcm9zc2hh aXJzLCAiY3Jvc3NoYWlycyIpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworCiAgIERF RlNZTSAoUWNob2ljZSwgImNob2ljZSIpOwogICBERUZTWU0gKFFsZWZ0LCAibGVmdCIpOwogICBE RUZTWU0gKFFyaWdodCwgInJpZ2h0Iik7CkBAIC01NTAxLDYgKzU1NDUsMTYgQEAgc3ltc19vZl9i dWZmZXIgKHZvaWQpCiAgIEZwdXQgKFFwcm90ZWN0ZWRfZmllbGQsIFFlcnJvcl9tZXNzYWdlLAog CWJ1aWxkX3B1cmVfY19zdHJpbmcgKCJBdHRlbXB0IHRvIG1vZGlmeSBhIHByb3RlY3RlZCBmaWVs ZCIpKTsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMg Ki8KKworICBERUZWQVJfUEVSX0JVRkZFUiAoImNyb3NzaGFpcnMiLCAmQlZBUiAoY3VycmVudF9i dWZmZXIsIGNyb3NzaGFpcnMpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJp YWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIGNyb3NzaGFpcnMuICovKTsKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisKKwogICBERUZWQVJfUEVSX0JVRkZFUiAoImhlYWRlci1saW5lLWZv cm1hdCIsCiAJCSAgICAgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBoZWFkZXJfbGluZV9mb3JtYXQp LAogCQkgICAgIFFuaWwsCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVyLmggYi9zcmMvYnVmZmVyLmgK aW5kZXggZjQyYzNlOS4uMjMzZGJjYSAxMDA2NDQKLS0tIGEvc3JjL2J1ZmZlci5oCisrKyBiL3Ny Yy9idWZmZXIuaApAQCAtNjM2LDYgKzYzNiwxNiBAQCBzdHJ1Y3QgYnVmZmVyCiAgICAgIGNhY2hl IGFyZSBlbmFibGVkLiAgU2VlIHNlYXJjaC5jLCBpbmRlbnQuYyBhbmQgYmlkaS5jIGZvciBkZXRh aWxzLiAgKi8KICAgTGlzcF9PYmplY3QgY2FjaGVfbG9uZ19zY2Fuc187CiAKKworLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBNVUxUSVBMRS1DVVJTT1JTICovCisKKyAgLyogVGhlIG5hbWUg b2YgdGhlIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZS4gKi8KKyAgTGlzcF9PYmplY3QgY3Jvc3NoYWly c187CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgLyogSWYgdGhlIHdpZHRoIHJ1 biBjYWNoZSBpcyBlbmFibGVkLCB0aGlzIHRhYmxlIGNvbnRhaW5zIHRoZQogICAgICBjaGFyYWN0 ZXIgd2lkdGhzIHdpZHRoX3J1bl9jYWNoZSAoc2VlIGFib3ZlKSBhc3N1bWVzLiAgV2hlbiB3ZQog ICAgICBkbyBhIHRob3JvdWdoIHJlZGlzcGxheSwgd2UgY29tcGFyZSB0aGlzIGFnYWluc3QgdGhl IGJ1ZmZlcidzCmRpZmYgLS1naXQgYS9zcmMvZGlzcG5ldy5jIGIvc3JjL2Rpc3BuZXcuYwppbmRl eCBjY2IwOGVjLi41MDY4YjExIDEwMDY0NAotLS0gYS9zcmMvZGlzcG5ldy5jCisrKyBiL3NyYy9k aXNwbmV3LmMKQEAgLTMzODQsMTAgKzMzODQsMzkgQEAgY2hlY2tfY3VycmVudF9tYXRyaXhfZmxh Z3MgKHN0cnVjdCB3aW5kb3cgKncpCiAvKiBVcGRhdGUgZGlzcGxheSBvZiB3aW5kb3cgVy4KICAg IElmIEZPUkNFX1AsIGRvbid0IHN0b3AgdXBkYXRpbmcgd2hlbiBpbnB1dCBpcyBwZW5kaW5nLiAg Ki8KIAorc3RhdGljIExpc3BfT2JqZWN0CittY19saXN0biAocHRyZGlmZl90IGNvdW50LCBMaXNw X09iamVjdCBhcmcsIC4uLikKK3sKKyAgZWFzc3VtZSAoMCA8IGNvdW50KTsKKyAgTGlzcF9PYmpl Y3QgdmFsID0gRmNvbnMgKGFyZywgUW5pbCk7CisgIExpc3BfT2JqZWN0IHRhaWwgPSB2YWw7Cisg IHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgYXJnKTsKKyAgZm9yIChwdHJkaWZmX3QgaSA9 IDE7IGkgPCBjb3VudDsgaSsrKQorICAgIHsKKyAgICAgIExpc3BfT2JqZWN0IGVsZW0gPSBGY29u cyAodmFfYXJnIChhcCwgTGlzcF9PYmplY3QpLCBRbmlsKTsKKyAgICAgIFhTRVRDRFIgKHRhaWws IGVsZW0pOworICAgICAgdGFpbCA9IGVsZW07CisgICAgfQorICB2YV9lbmQgKGFwKTsKKyAgcmV0 dXJuIHZhbDsKK30KKwogc3RhdGljIGJvb2wKIHVwZGF0ZV93aW5kb3cgKHN0cnVjdCB3aW5kb3cg KncsIGJvb2wgZm9yY2VfcCkKIHsKICAgc3RydWN0IGdseXBoX21hdHJpeCAqZGVzaXJlZF9tYXRy aXggPSB3LT5kZXNpcmVkX21hdHJpeDsKKworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IGJlZ2luIE1VTFRJUExFLUNVUlNPUlMgKi8KKworICB3c2V0X2NoX2NhY2hlICh3LCBRbmlsKTsK KworLyogZW5kIE1VTFRJUExFLUNVUlNPUlMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor CisKICAgYm9vbCBwYXVzZWRfcDsKICAgaW50IHByZWVtcHRfY291bnQgPSBjbGlwX3RvX2JvdW5k cyAoMSwgYmF1ZF9yYXRlIC8gMjQwMCArIDEsIElOVF9NQVgpOwogICBzdHJ1Y3QgcmVkaXNwbGF5 X2ludGVyZmFjZSAqcmlmID0gRlJBTUVfUklGIChYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpKTsK QEAgLTM0OTcsNiArMzUyNiw0OCBAQCB1cGRhdGVfd2luZG93IChzdHJ1Y3Qgd2luZG93ICp3LCBi b29sIGZvcmNlX3ApCiAKICAgICBzZXRfY3Vyc29yOgogCisKKy8qICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICBmb3IgKHN0cnVjdCBnbHlwaF9yb3cg KmRlc2lyZWRfcm93ID0gTUFUUklYX1JPVyAoZGVzaXJlZF9tYXRyaXgsIDApOworICAgICAgICBk ZXNpcmVkX3JvdyA8IGVuZAorICAgICAgICAmJiAoZm9yY2VfcCB8fCAhaW5wdXRfcGVuZGluZykK KyAgICAgICAgJiYgQlVGRkVSUCAody0+Y29udGVudHMpCisgICAgICAgICYmICghTklMUCAoQlZB UiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkpOworICAgICAgICArK2Rlc2ly ZWRfcm93KQorICAgIHsKKyAgICAgIGlmIChkZXNpcmVkX3Jvdy0+ZW5hYmxlZF9wKQorICAgICAg ICBjb250aW51ZTsKKyAgICAgIHdzZXRfbWNfdGVtcF9jYWNoZSAodywgUW5pbCk7CisgICAgICBp bnQgdnBvcyA9IE1BVFJJWF9ST1dfVlBPUyAoZGVzaXJlZF9yb3csIGRlc2lyZWRfbWF0cml4KTsK KyAgICAgIHN0cnVjdCBnbHlwaF9tYXRyaXggKmN1cnJlbnRfbWF0cml4ID0gdy0+Y3VycmVudF9t YXRyaXg7CisgICAgICBzdHJ1Y3QgZ2x5cGhfcm93ICpjdXJyZW50X3JvdyA9IE1BVFJJWF9ST1cg KGN1cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAgICAgIGlmIChjdXJyZW50X3Jvdy0+ZW5hYmxlZF9w KQorICAgICAgICB7CisgICAgICAgICAgTGlzcF9PYmplY3QgdGVtcF9yZXN1bHQgPSBRbmlsOwor ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgIExpc3BfT2JqZWN0IHRlbXBfc3VibGlzdCA9IG1jX2xpc3RuICgxLCBtYWtl X2ZpeG51bSAoaSkpOworICAgICAgICAgICAgICB0ZW1wX3Jlc3VsdCA9IEZjb25zICh0ZW1wX3N1 Ymxpc3QsIHRlbXBfcmVzdWx0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB3c2V0X21jX3Rl bXBfY2FjaGUgKHcsIHRlbXBfcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KKworICB3c2V0X21j X3RlbXBfY2FjaGUgKHcsIFFuaWwpOworCisgIExpc3BfT2JqZWN0IHJlc3VsdCA9IFFuaWw7Cisg IGZvciAoaW50IGlpID0gMDsgaWkgPCAxMDA7ICsraWkpCisgICAgeworICAgICAgTGlzcF9PYmpl Y3Qgc3VibGlzdCA9IG1jX2xpc3RuICgxLCBtYWtlX2ZpeG51bSAoaWkpKTsKKyAgICAgIHJlc3Vs dCA9IEZjb25zIChzdWJsaXN0LCByZXN1bHQpOworICAgIH0KKyAgd3NldF9jaF9jYWNoZSAodywg cmVzdWx0KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAgLyogVXBkYXRl IHRoZSBoZWFkZXIgbGluZSBhZnRlciBzY3JvbGxpbmcgYmVjYXVzZSBhIG5ldyBoZWFkZXIKIAkg bGluZSB3b3VsZCBvdGhlcndpc2Ugb3ZlcndyaXRlIGxpbmVzIGF0IHRoZSB0b3Agb2YgdGhlIHdp bmRvdwogCSB0aGF0IGNhbiBiZSBzY3JvbGxlZC4gICovCmRpZmYgLS1naXQgYS9zcmMvcGR1bXBl ci5jIGIvc3JjL3BkdW1wZXIuYwppbmRleCBjYjI5MTVjLi5kYzc5ZWIxIDEwMDY0NAotLS0gYS9z cmMvcGR1bXBlci5jCisrKyBiL3NyYy9wZHVtcGVyLmMKQEAgLTI3NzAsNyArMjc3MCw3IEBAIGR1 bXBfaGFzaF90YWJsZSAoc3RydWN0IGR1bXBfY29udGV4dCAqY3R4LAogc3RhdGljIGR1bXBfb2Zm CiBkdW1wX2J1ZmZlciAoc3RydWN0IGR1bXBfY29udGV4dCAqY3R4LCBjb25zdCBzdHJ1Y3QgYnVm ZmVyICppbl9idWZmZXIpCiB7Ci0jaWYgQ0hFQ0tfU1RSVUNUUyAmJiAhZGVmaW5lZCBIQVNIX2J1 ZmZlcl9FMzRBMTFDNkI5CisjaWYgQ0hFQ0tfU1RSVUNUUyAmJiAhZGVmaW5lZCBIQVNIX2J1ZmZl cl9CNzEyRjZCM0RDCiAjIGVycm9yICJidWZmZXIgY2hhbmdlZC4gU2VlIENIRUNLX1NUUlVDVFMg Y29tbWVudC4iCiAjZW5kaWYKICAgc3RydWN0IGJ1ZmZlciBtdW5nZWRfYnVmZmVyID0gKmluX2J1 ZmZlcjsKZGlmZiAtLWdpdCBhL3NyYy93aW5kb3cuaCBiL3NyYy93aW5kb3cuaAppbmRleCBmZGVm NDA3Li40MGI3OGVjIDEwMDY0NAotLS0gYS9zcmMvd2luZG93LmgKKysrIGIvc3JjL3dpbmRvdy5o CkBAIC0yMDksNiArMjA5LDIxIEBAIHN0cnVjdCB3aW5kb3cKICAgICAvKiBBbiBhbGlzdCB3aXRo IHBhcmFtZXRlcnMuICAqLwogICAgIExpc3BfT2JqZWN0IHdpbmRvd19wYXJhbWV0ZXJzOwogCisK Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLworLyogTVVMVElQTEUtQ1VSU09SUyAqLworCisgICAg TGlzcF9PYmplY3QgbWNfdGVtcF9jYWNoZTsKKworICAgIC8qIFRoZSBjYWNoZSBmb3IgY3Jvc3No YWlycy4gKi8KKyAgICBMaXNwX09iamVjdCBjaF9jYWNoZTsKKworLyogTk9URTogIEFzIG9mIDA0 LzA4LzIwMTkgKGEwMzhkZjc3ZGU3YjFhYTJkNzNhNjQ3ODQ5M2I4ODM4YjU5ZTQ5ODIpLCB0aGUg TEFTVAorICAgTGlzcF9PYmplY3QgbXVzdCBiZSBgbW9kZV9saW5lX2hlbHBfZWNobycuICovCisK Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiAqLworCisKICAgICAvKiBUaGUgaGVscCBlY2hvIHRleHQg Zm9yIHRoaXMgd2luZG93LiAgUW5pbCBpZiB0aGVyZSdzIG5vbmUuICAqLwogICAgIExpc3BfT2Jq ZWN0IG1vZGVfbGluZV9oZWxwX2VjaG87CiAKQEAgLTQ0Myw2ICs0NTgsMjUgQEAgc3RydWN0IHdp bmRvdwogICAgIHB0cmRpZmZfdCB3aW5kb3dfZW5kX2J5dGVwb3M7CiAgIH0gR0NBTElHTkVEX1NU UlVDVDsKIAorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIE1VTFRJUExFLUNVUlNPUlMg Ki8KKworSU5MSU5FIHZvaWQKK3dzZXRfbWNfdGVtcF9jYWNoZSAoc3RydWN0IHdpbmRvdyAqdywg TGlzcF9PYmplY3QgdmFsKQoreworICB3LT5tY190ZW1wX2NhY2hlID0gdmFsOworfQorCitJTkxJ TkUgdm9pZAord3NldF9jaF9jYWNoZSAoc3RydWN0IHdpbmRvdyAqdywgTGlzcF9PYmplY3QgdmFs KQoreworICB3LT5jaF9jYWNoZSA9IHZhbDsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisKKwogSU5MSU5FIGJvb2wKIFdJTkRPV1AgKExpc3BfT2JqZWN0IGEpCiB7Cg== --Multipart_Sun_Apr_14_12:46:28_2019-1--