From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Tak Kunihiro Newsgroups: gmane.emacs.devel Subject: Re: scroll-down with pixel transition Date: Sun, 16 Apr 2017 17:35:41 +0900 (JST) Message-ID: <20170416.173541.214118934.tkk@misasa.okayama-u.ac.jp> References: <83o9vzh22i.fsf@gnu.org> <20170415.073252.508582486.tkk@misasa.okayama-u.ac.jp> <83zifif073.fsf@gnu.org> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Sun_Apr_16_17_35_41_2017_130)--" Content-Transfer-Encoding: 7bit X-Trace: blaine.gmane.org 1492331784 1889 195.159.176.226 (16 Apr 2017 08:36:24 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 16 Apr 2017 08:36:24 +0000 (UTC) Cc: tkk@misasa.okayama-u.ac.jp, =?iso-8859-1?Q?Cl=E9ment?= Pit-Claudel , emacs-devel@gnu.org, yuri.v.khan@gmail.com To: eliz@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Apr 16 10:36:18 2017 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 1czffN-0000Ib-VR for ged-emacs-devel@m.gmane.org; Sun, 16 Apr 2017 10:36:18 +0200 Original-Received: from localhost ([::1]:59660 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1czffQ-000241-Le for ged-emacs-devel@m.gmane.org; Sun, 16 Apr 2017 04:36:20 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:44238) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1czffF-00023i-0o for emacs-devel@gnu.org; Sun, 16 Apr 2017 04:36:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1czffB-0003fS-OL for emacs-devel@gnu.org; Sun, 16 Apr 2017 04:36:09 -0400 Original-Received: from mxl069v66.mxlogic.net ([208.81.69.66]:13997 helo=s18p02o143.mxlogic.net) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1czff6-0003bb-QY; Sun, 16 Apr 2017 04:36:01 -0400 Original-Received: from unknown [42.127.236.175] (EHLO mlsec.cc.okayama-u.ac.jp) by s18p02o143.mxlogic.net(mxl_mta-8.5.0-1675) with ESMTP id 0fc23f85.7fcadc7f3700.317221.00-593.696843.s18p02o143.mxlogic.net (envelope-from ); Sun, 16 Apr 2017 02:36:00 -0600 (MDT) X-MXL-Hash: 58f32cf06881aa4f-a774c35c054e6331e0327bc464f4dd9d57d9c37e Original-Received: from unknown [42.127.236.175] (EHLO mlsec.cc.okayama-u.ac.jp) by s18p02o143.mxlogic.net(mxl_mta-8.5.0-1675) over TLS secured channel with ESMTP id 3ec23f85.0.317219.00-365.696838.s18p02o143.mxlogic.net (envelope-from ); Sun, 16 Apr 2017 02:35:50 -0600 (MDT) X-MXL-Hash: 58f32ce62b77c3bc-3bef3551a04df6c57fbe181168ab8ca1da17008a Original-Received: from alml002.ouadm.okayama-u.ac.jp (unknown [42.127.236.168]) by mlsec.cc.okayama-u.ac.jp with smtp id 582b_2d63_c2030e06_63d7_430b_980a_fb3e5c8d830b; Sun, 16 Apr 2017 17:35:42 +0900 Original-Received: from localhost (p256188-ipngn200208tottori.tottori.ocn.ne.jp [180.36.253.188]) by alml002.ouadm.okayama-u.ac.jp (Postfix) with ESMTPSA id E34634C09F4; Sun, 16 Apr 2017 17:35:42 +0900 (JST) In-Reply-To: <83zifif073.fsf@gnu.org> X-Mailer: Mew version 6.7 on Emacs 24.5 / Mule 6.0 (HANACHIRUSATO) X-NAI-Spam-Flag: NO X-NAI-Spam-Level: X-NAI-Spam-Threshold: 11 X-NAI-Spam-Score: 0.1 X-NAI-Spam-Rules: 5 Rules triggered TRK_NCM1=0.1, EDT_SA_AU_PASS=0, EDT_SA_DN_PASS=0, EDT_SA_TS_PASS=0, RV6000=0 X-NAI-Spam-Version: 2.3.0.9418 : core <6000> : inlines <5807> : streams <1741413> : uri <2410497> X-AnalysisOut: [v=2.2 cv=A48cB+eG c=1 sm=1 tr=0 a=8LLPK8U+aGQ6qN8QlyMYtQ==] X-AnalysisOut: [:117 a=8LLPK8U+aGQ6qN8QlyMYtQ==:17 a=AzvcPWV-tVgA:10 a=mDV] X-AnalysisOut: [3o1hIAAAA:8 a=RKz4o2v2gs0r5mjJLi4A:9 a=CjuIK1q_8ugA:10 a=Z] X-AnalysisOut: [CvSmSqqB0AA:10 a=OyhhTtZ1AOWnA7xIijoA:9 a=lGCatON26aaFYsJy] X-AnalysisOut: [:21 a=1tYqPzEu45NZ21Le:21 a=o3X3QV6JOaEA:10 a=AAFyxjeTjMcJ] X-AnalysisOut: [oBj_0rgA:9 a=1B649VRBJT_mTwWn:21 a=ZOu4k4AOmFz7KCGW:21 a=_] X-AnalysisOut: [FVE-zBwftR9WsbkzFJk:22] X-Spam: [F=0.5200000000; CM=0.500; MH=0.520(2017041602); S=0.200(2015072901)] X-MAIL-FROM: X-SOURCE-IP: [42.127.236.175] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 208.81.69.66 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:213993 Archived-At: ----Next_Part(Sun_Apr_16_17_35_41_2017_130)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit I revised the code to respond to your comments. I attach the revised file and diff. * REMAINED ISSUES 1. On Info, pixel-scroll-down-and-set-window-vscroll cannot scroll-down sometimes. Please see detail below, and help me. 2. Name of a function was changed from pixel--sweep-pixel-up to pixel--scroll-pixel-up. Still verb does not sound right. Please see detail below, and suggest me. * EACH RESPONSE: >> The top-level functions need to be more robust. For example, I see >> glitches during scroll-down on Info. > > Probably due to Info using fonts of different sizes. This I cannot find out how to solve. With emacs -Q, on top info page, goto point-max, then I cannot scroll-down using `pixel-scroll-down-and-set-window-vscroll' when larger font sits on the top of window. Can you solve this? >> ;;; This file is NOT part of GNU Emacs > > Should be changed once this is in core. I changed to is to `part of GNU Emacs'. This can be too early. >> (defgroup pixel-scroll nil >> "Scroll pixel-by-pixel in Emacs." >> :group 'mouse >> :prefix "pixel-") > > I see no need for a new group, please use the existing group > 'scrolling'. I changed all to :group 'scrolling. >> (defcustom pixel-wait 0.001 >> "Idle time on pixel scroll specified in second." >> :group 'pixel-scroll >> :type 'float) > > The doc string should say a bit more to explain the user-visible > effect of the value. I revised the doc string to "Idle time on a pixel scroll specified in second. More wait will retult in slow and gentle scroll." > Also, please add a ':version' tag to each defcustom. I put each defcustom :version "26.1". >> (defcustom pixel-amount '(1 ((shift) . 5) ((control))) >> "Amount to scroll by when spinning the mouse wheel." >> :group 'pixel-scroll) > > Do we really need a separate defcustom for this? Why not use > mouse-wheel-scroll-amount? It is not necessary. I removed it. >> (defcustom pixel-resolution-fine-p nil >> "Enhance scrolling resolution to pixel-to-pixel instead of >> line-to-line." >> :group 'pixel-scroll >> :type 'boolean) > > Not sure this should be advertised, as the functionality has issues. > At the very least those issues should be described in the doc string. I changed it to defvar and revised the doc string to "Increase scrolling resolution to a pixel instead of a line. After a pixel scroll, typing C-n or C-p scrolls the window to make it fully visible, and undos the effect of the pixel-level scroll." >> (vertical-motion -2))) ; FIXME: -1 gives glitch > > What glitch is that? This was related to implementation of pixel-point-at-bottom-p. Now the glitch disappeared (at least I think). >> (defun pixel-point-at-top-p () >> "Return if point is at top of a window." >> (equal (save-excursion (beginning-of-visual-line) >> (point-at-bol)) >> (window-start))) > > I think this will fail with bidirectional text, if the first character > in the logical order is not displayed at the leftmost screen position > of the first line of the window. > > I suggest to use posn-at-point instead. Thank you for such good suggestion! I revised as shown below. (defun pixel-point-at-top-p () "Return if point is at top of a window." (<= (cdr (posn-x-y (posn-at-point))) (line-pixel-height))) >> (defun pixel-point-at-bottom-p () >> "Return if point is at bottom of a window." >> (<= (count-lines (save-excursion >> (beginning-of-visual-line) >> (point-at-bol)) >> (pixel-window-end)) 1)) > > Likewise here, I suggest to use window-end and posn-at-point. I revised as suggested, as shown below. I used window-inside-pixel-edges instead of window-end. Correct me if something is not correct. (defun pixel-point-at-bottom-p () "Return if point is at bottom of a window." (let* ((edges (window-inside-pixel-edges)) (height (- (nth 3 edges) (nth 1 edges))) ; bottom - top (mergin (- height (cdr (posn-x-y (posn-at-point)))))) (<= mergin (* 2 (line-pixel-height))))) >> (defun pixel--catch-line-up () >> "Flush text upward a line with pixel transition. When `vscroll' is non-zero, >> complete scrolling a line. When `vscroll' is larger than height >> of multiple lines, for example 88, this flushes multiple lines. >> At the end, `vscroll' will be zero. This assumes that the lines >> are with the same height. Scope moves downward. This function >> returns number of pixels that were scrolled." > > I'm not sure what you mean by "flush" here. And why the function's > name uses 'catch' if you mean 'flush'? Inconsistent expression was removed. Now the name is just pixel--scroll-line-up. I put two hyphens because this should be regarded as lower level one. >> (defun pixel--sweep-pixel-up (n) >> "Sweep text upward to N pixels. Scope moves downward." > > Maybe I'm misunderstanding what this does, but "sweep" doesn't seem to > describe it. This is because I cannot find a good verb to describe its functionality. I change pixel--sweep-pixel-up to pixel--scroll-pixel-up for now. Note that there is pixel-scroll-pixel-up already and the new name is source of confusion. Can you read the code suggest a name (or verb)? >> (defun pixel-window-end () >> "Return position of the last character of fully-visible line in >> WINDOW. This is similar to `window-end' but see a full visible >> line." >> (let ((pos (window-end))) >> (if (pos-visible-in-window-p pos nil t) >> pos >> (save-excursion >> (goto-char pos) >> (vertical-motion -2) >> (point-at-bol))))) > > I don't understand the 'else' part here. What situation does it > handle? AFAIU, if pos-visible-in-window-p returns nil in this case, > the window-end position is completely invisible, which is something > that cannot happen, I think. Since pixel-point-at-bottom-p was improved, this disappeared. >> (defun pixel-line-height (&optional pos) >> "Measure line height of POS in pixel. When height of all lines >> are equal, you don't need this function but `frame-char-height'. >> See Info node `(elisp) Line Height'." >> (or pos (setq pos (window-start))) > ^^^^^^^^^^^^^^^^^^^^^^^^ > This part is not mentioned in the doc string, so the situation where > POS is unspecified is left undefined. I revised the doc string to "Return height in pixels of text line of POS in the selected window. When POS is nil, height of the first line of the window is provided. When height of all lines are equal, you don't need this function but `frame-char-height'. See Info node `(elisp) Line Height'." >> (defun pixel-scroll-down-and-set-window-vscroll (vscroll) >> "Scroll down a line and set VSCROLL in pixel. This is written >> by Eli Zaretskii. It is important to call `set-window-start' to >> force the display engine use that particular position as the >> window-start point. Otherwise, redisplay will reset the window's >> vscroll." > > We don't put such information in the doc strings, certainly not > authorship. Comments are more appropriate, and you could simply cite > the emacs-devel message by its URL. I revise the doc string to "Scroll down a line and set VSCROLL in pixels. This is code is presented at https://lists.gnu.org/archive/html/emacs-devel/2017-04/msg00366.html. It is important to call `set-window-start' to force the display engine use that particular position as the window-start point. Otherwise, redisplay will reset the window's vscroll." ----Next_Part(Sun_Apr_16_17_35_41_2017_130)-- Content-Type: Text/Plain; charset=iso-8859-7 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="pixel-scroll.el" Ozs7IHBpeGVsLXNjcm9sbC5lbCAtLS0gU2Nyb2xsIGEgbGluZSBzbW9vdGhseQ0KDQo7OyBQYWNr YWdlLVJlcXVpcmVzOiAoKGVtYWNzICIyNC41IikpDQo7OyBWZXJzaW9uOiAxLjAuMA0KOzsgUGFj a2FnZS1WZXJzaW9uOiAyMDE3MDQxNi4xNzEzDQo7OyBLZXl3b3JkczogY29udmVuaWVuY2UsIHVz YWJpbGl0eQ0KDQo7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzDQoNCjs7OyBMaWNl bnNlDQoNCjs7IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KOzsgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQ0KOzsg YW55IGxhdGVyIHZlcnNpb24uDQoNCjs7IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCjs7IE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCjs7IEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQoNCjs7IFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl DQo7OyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBu b3QsIHdyaXRlIHRvDQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG cmFua2xpbiBTdHJlZXQsIEZpZnRoDQo7OyBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV U0EuDQoNCjs7OyBDb21tZW50YXJ5Og0KDQo7OyBUbyBpbnRlcmFjdGl2ZWx5IHRvZ2dsZSB0aGUg bW9kZSBvbiAvIG9mZjoNCjs7DQo7OyAgIE0teCBwaXhlbC1zY3JvbGwtbW9kZQ0KOzsNCjs7IFRv IG1ha2UgdGhlIG1vZGUgcGVybWFuZW50LCBwdXQgdGhpcyBpbiB5b3VyIGluaXQgZmlsZToNCjs7 DQo7OyAgIChyZXF1aXJlICdwaXhlbC1zY3JvbGwpDQo7OyAgIChwaXhlbC1zY3JvbGwtbW9kZSAx KQ0KOzsNCjs7IFRoaXMgcGFja2FnZSBvZmZlcnMgYSBnbG9iYWwgbWlub3IgbW9kZSB3aGljaCBt YWtlcyBFbWFjcyBzY3JvbGwNCjs7IHZlcnRpY2FsbHkgd2l0aCBmZWVsIG9mIG1vZGVybiBhcHBs aWNhdGlvbnMuICBUaGlzIG1pbm9yIG1vZGUNCjs7IG9mZmVycyBwaXhlbC1ieS1waXhlbCBzY3Jv bGwgdXB3YXJkIGJ5IG1vdXNlIHdoZWVsIHVzaW5nDQo7OyBgc2V0LXdpbmRvdy12c2Nyb2xsJywg YHdpbmRvdy12c2Nyb2xsJywgYW5kIGBzY3JvbGwtdXAnLiAgVGhlIG1pbm9yDQo7OyBtb2RlIG92 ZXJ3cml0ZXMgcGFyYW1ldGVycyBkZWZpbmVkIGluIGBtd2hlZWwuZWwnIHRvIHJlZmVyDQo7OyBg cGl4ZWwtc2Nyb2xsLXVwJyBhbmQgYHBpeGVsLXNjcm9sbC1kb3duJyBpbnN0ZWFkIG9mIGBzY3Jv bGwtdXAnDQo7OyBhbmQgYHNjcm9sbC1kb3duJy4NCg0KOzs7IFByaW5jaXBsZSBvZiB2ZXJ0aWNh bCBzY3JvbGw6DQoNCjs7IFNjcm9sbGluZyB0ZXh0IHVwd2FyZCBhIGxpbmUgYnkgcGl4ZWxzIHVz aW5nIGBzZXQtd2luZG93LXZzY3JvbGwnDQo7OyBhbmQgYnkgYSBsaW5lIHVzaW5nIGBzY3JvbGwt dXAnIGdpdmVzIHNpbWlsYXIgdmlzdWFsIGZlZWRiYWNrIHdoZW4NCjs7IHZzY3JvbGwgbG9jYXRp b24gaXMgQDAuICBOb3RlIHZzY3JvbGwgbG9jYXRpb24gaXMgdmVydGljYWwgc2hpZnQNCjs7IG9i dGFpbmVkIGJ5IGB3aW5kb3ctdnNjcm9sbCcuICBMaW5lIGhlaWdodCBieSBwaXhlbCBpcyBvYnRh aW5lZCBieQ0KOzsgYGZyYW1lLWNoYXItaGVpZ2h0JyAodG8gYmUgZXhhY3QsIHRoaXMgaXMgdHJ1 ZSBmb3IgYnVmZmVyIHdpdGgNCjs7IG1vbm8tc2l6ZWQgZm9udCkuICBGb2xsb3dpbmcgdHdvIGxp bmVzIHNjcm9sbCB0ZXh0IGluIHNpbWlsYXINCjs7IGZhc2hpb24sIHZpc3VhbGx5Lg0KOzsNCjs7 ICAgKHNjcm9sbC11cCAxKQ0KOzsgICAoc2V0LXdpbmRvdy12c2Nyb2xsIG5pbCAoZnJhbWUtY2hh ci1oZWlnaHQpIHQpDQo7Ow0KOzsgU2Nyb2xsaW5nIHRleHQgdXB3YXJkIGJ5IGEgcGl4ZWwgYW5k IGEgbGluZSB5aWVsZHMgc2ltaWxhciByZXN1bHQNCjs7IHdoZW4gdnNjcm9sbCBsb2NhdGlvbiBp cyBhdCB0aGUgbGFzdCBwaXhlbC4gIEZvbGxvd2luZyB0d28gbGluZXMNCjs7IHNjcm9sbCB0ZXh0 IGluIHNpbWlsYXIgZmFzaGlvbiwgdmlzdWFsbHkuDQo7Ow0KOzsgICAoc2Nyb2xsLXVwIDEpDQo7 OyAgIChzZXQtd2luZG93LXZzY3JvbGwgbmlsICgxLSAoZnJhbWUtY2hhci1oZWlnaHQpIHQpKSAo c2Nyb2xsLXVwIDEpDQo7Ow0KOzsgV2hlbiB2c2Nyb2xsIGdldHMgbGFyZ2VyIGFuZCBhcyBzb29u IGFzIHBvaW50IGlzIGJleW9uZCBiZWdpbm5pbmcNCjs7IG9mIGEgd2luZG93LCB2c2Nyb2xsIGlz IHNldCB0byB6ZXJvLiAgVG8gdXNlciwgc2NvcGUgaXMgY2hhbmdlZA0KOzsgc3VkZGVubHkgd2l0 aG91dCBwb2ludCBtb3ZlZC4gIFRoaXMgcGFja2FnZSB0cmllcyB0byBzY3JvbGwgdGV4dA0KOzsg dXB3YXJkIGJ5IGEgbGluZSB3aXRoIHBpeGVsLWJ5LXBpeGVsIHRyYW5zaXRpb24gYnkgZm9sbG93 aW5nDQo7OyBzZXF1ZW5jZXMuDQo7Ow0KOzsgICAocHJvZ24NCjs7ICAgICAodmVydGljYWwtbW90 aW9uIDEpDQo7OyAgICAgKGRvbGlzdCAodnMgKG51bWJlci1zZXF1ZW5jZSAxICgxLSAoZnJhbWUt Y2hhci1oZWlnaHQpKSkpDQo7OyAgICAgICAoc2V0LXdpbmRvdy12c2Nyb2xsIG5pbCB2cyB0KSAo c2l0LWZvciAwLjAwMSkpDQo7OyAgICAgKHNjcm9sbC11cCAxKSkNCg0KDQo7OzsgQ2hhbmdlIExv ZzoNCg0KOzsgMjAxNzAzMTkuMTE1Mw0KOzsgIC0gUmVwbGFjZSBgZnJhbWUtY2hhci1oZWlnaHQn IGJ5IGBsaW5lLXBpeGVsLWhlaWdodCcuDQo7OyAyMDE3MDQxNC4wOTU4DQo7OyAgLSBBbGdvcml0 aG0gdG8gc2Nyb2xsLWRvd24gaXMgb2ZmZXJlZCBieSBFbGkgWmFyZXRza2lpLg0KOzsgIC0gSW1w bGVtZW50IHNjcm9sbCBwaXhlbC1ieS1waXhlbCB1cHdhcmQuDQoNCjs7OyBUb2RvOg0KOzsgLSBF c3RpbWF0ZSBoZWlnaHQgb2YgdW5zZWVuIGxpbmUgYXQgdGhlIHRvcCwgb24gc2Nyb2xsaW5nIGRv d24uDQo7OyAtIEhhbmRsZSBlcnJvciB0byBzY3JvbGwgc3RhYmxlIEZvciBub3csIFNjcm9sbCBk b2VzIG5vdCB3ZWxsIGluIEluZm8uDQoNCjs7OyBMb25nIHRlcm0gY29uY2VybjoNCjs7IC0gQWxs b3dpbmcgcGl4ZWwtbGV2ZWwgc2Nyb2xsaW5nIGluIEVtYWNzIHJlcXVpcmVzIGEgdGhvcm91Z2gN Cjs7ICAgcmV2aWV3IG9mIHRoZSByZWxhdGVkIGZ1bmN0aW9uYWxpdGllcywgdG8gbWFrZSBzdXJl IG5vbmUgb2YgdGhlbQ0KOzsgICB6ZXJvZXMgb3V0IHZzY3JvbGwgd2hlcmUgdXNlcnMgd29uJ3Qg d2FudCB0aGF0Lg0KDQo7OzsgQ29kZToNCg0KKHJlcXVpcmUgJ213aGVlbCkNCg0KKGRlZmN1c3Rv bSBwaXhlbC13YWl0IDAuMDAxDQogICJJZGxlIHRpbWUgb24gYSBwaXhlbCBzY3JvbGwgc3BlY2lm aWVkIGluIHNlY29uZC4gIE1vcmUgd2FpdA0Kd2lsbCByZXR1bHQgaW4gc2xvdyBhbmQgZ2VudGxl IHNjcm9sbC4iDQogIDpncm91cCAnc2Nyb2xsaW5nDQogIDp2ZXJzaW9uICIyNi4xIg0KICA6dHlw ZSAnZmxvYXQpDQoNCihkZWZ2YXIgcGl4ZWwtcmVzb2x1dGlvbi1maW5lLXAgbmlsDQogICJJbmNy ZWFzZSBzY3JvbGxpbmcgcmVzb2x1dGlvbiB0byBhIHBpeGVsIGluc3RlYWQgb2YgYSBsaW5lLg0K QWZ0ZXIgYSBwaXhlbCBzY3JvbGwsIHR5cGluZyBDLW4gb3IgQy1wIHNjcm9sbHMgdGhlIHdpbmRv dyB0bw0KbWFrZSBpdCBmdWxseSB2aXNpYmxlLCBhbmQgdW5kb3MgdGhlIGVmZmVjdCBvZiB0aGUg cGl4ZWwtbGV2ZWwNCnNjcm9sbC4iKQ0KDQooZGVmaW5lLW1pbm9yLW1vZGUgcGl4ZWwtc2Nyb2xs LW1vZGUNCiAgIkEgbWlub3IgbW9kZSB0byBzY3JvbGwgdGV4dCBwaXhlbC1ieS1waXhlbC4gIFdp dGggYSBwcmVmaXggYXJndW1lbnQgQVJHLA0KZW5hYmxlIFBpeGVsIFNjcm9sbCBtb2RlIGlmIEFS RyBpcyBwb3NpdGl2ZSwgYW5kIGRpc2FibGUgaXQNCm90aGVyd2lzZS4gIElmIGNhbGxlZCBmcm9t IExpc3AsIGVuYWJsZSBQaXhlbCBTY3JvbGwgbW9kZSBpZiBBUkcNCmlzIG9taXR0ZWQgb3Igbmls LiINCiAgOmluaXQtdmFsdWUgbmlsDQogIDpncm91cCAnc2Nyb2xsaW5nDQogIDpnbG9iYWwgdA0K DQogIChpZiBwaXhlbC1zY3JvbGwtbW9kZQ0KICAgICAgKHByb2duIChzZXRxIG13aGVlbC1zY3Jv bGwtdXAtZnVuY3Rpb24gJ3BpeGVsLXNjcm9sbC11cCkNCiAgICAgICAgICAgICAoc2V0cSBtd2hl ZWwtc2Nyb2xsLWRvd24tZnVuY3Rpb24gJ3BpeGVsLXNjcm9sbC1kb3duKSkNCiAgICAoc2V0cSBt d2hlZWwtc2Nyb2xsLXVwLWZ1bmN0aW9uICdzY3JvbGwtdXApDQogICAgKHNldHEgbXdoZWVsLXNj cm9sbC1kb3duLWZ1bmN0aW9uICdzY3JvbGwtZG93bikpKQ0KDQooZGVmdW4gcGl4ZWwtc2Nyb2xs LXVwICgmb3B0aW9uYWwgYXJnKQ0KICAiU2Nyb2xsIHRleHQgb2Ygc2VsZWN0ZWQgd2luZG93IHVw IEFSRyBsaW5lcy4gIFRoaXMgaXMNCmFsdGVybmF0aXZlIG9mIGBzY3JvbGwtdXAnLiAgU2NvcGUg bW92ZXMgZG93bndhcmQuIg0KICAoaW50ZXJhY3RpdmUpDQogIChvciBhcmcgKHNldHEgYXJnIDEp KQ0KICAoZG90aW1lcyAoaWkgYXJnKSA7IG1vdmUgc2NvcGUgZG93bndhcmQNCiAgICAoaWYgKDw9 IChjb3VudC1saW5lcyAod2luZG93LXN0YXJ0KSAod2luZG93LWVuZCkpIDIpDQogICAgICAgIChz Y3JvbGwtdXAgMSkgOyB3aGVuIGVuZCBvZiBzY3JvbGwgaXMgY2xvc2UsIHJlbGF5IG9uIHJvYnVz dCBndXkNCiAgICAgICh3aGVuIChvciAocGl4ZWwtcG9pbnQtYXQtdG9wLXApIDsgcHJldmVudCB0 b28gbGF0ZQ0KICAgICAgICAgICAgICAgIChhbmQgc2Nyb2xsLXByZXNlcnZlLXNjcmVlbi1wb3Np dGlvbg0KICAgICAgICAgICAgICAgICAgICAgKG5vdCAocGl4ZWwtcG9pbnQtYXQtYm90dG9tLXAp KSkpIDsgcHJldmVudCB0b28gZmFzdA0KICAgICAgICAodmVydGljYWwtbW90aW9uIDEpKSA7IG1v dmUgcG9pbnQgZG93bndhcmQNCiAgICAgIChwaXhlbC1zY3JvbGwtcGl4ZWwtdXAgKGlmIHBpeGVs LXJlc29sdXRpb24tZmluZS1wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpeGVsLWxpbmUtaGVpZ2h0KSkpKSkpIDsg bW92ZSBzY29wZSBkb3dud2FyZA0KDQooZGVmdW4gcGl4ZWwtc2Nyb2xsLWRvd24gKCZvcHRpb25h bCBhcmcpDQogICJTY3JvbGwgdGV4dCBvZiBzZWxlY3RlZCB3aW5kb3cgZG93biBBUkcgbGluZXMu ICBUaGlzIGlzDQphbHRlcm5hdGl2ZSBvZiBgc2Nyb2xsLWRvd24nLiAgU2NvcGUgbW92ZXMgdXB3 YXJkLiINCiAgKGludGVyYWN0aXZlKQ0KICAob3IgYXJnIChzZXRxIGFyZyAxKSkNCiAgKGRvdGlt ZXMgKGlpIGFyZykNCiAgICAoaWYgKGVxdWFsICh3aW5kb3ctc3RhcnQpIChwb2ludC1taW4pKQ0K ICAgICAgICAoc2Nyb2xsLWRvd24gMSkgOyB3aGVuIGJlZ2lubmluZy1vZi1idWZmZXIgaXMgc2Vl biwgcmVsYXkgb24gcm9idXN0IGd1eQ0KICAgICAgKHdoZW4gKG9yIChwaXhlbC1wb2ludC1hdC1i b3R0b20tcCkgOyBwcmV2ZW50IHRvbyBsYXRlDQogICAgICAgICAgICAgICAgKGFuZCBzY3JvbGwt cHJlc2VydmUtc2NyZWVuLXBvc2l0aW9uDQogICAgICAgICAgICAgICAgICAgICAobm90IChwaXhl bC1wb2ludC1hdC10b3AtcCkpKSkgOyBwcmV2ZW50IHRvbyBmYXN0DQogICAgICAgICh2ZXJ0aWNh bC1tb3Rpb24gLTEpKSkNCiAgICAocGl4ZWwtc2Nyb2xsLXBpeGVsLWRvd24gKGlmIHBpeGVsLXJl c29sdXRpb24tZmluZS1wDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpeGVsLWxpbmUtaGVpZ2h0KSkpKSkNCg0KKGRl ZnVuIHBpeGVsLXBvaW50LWF0LXRvcC1wICgpDQogICJSZXR1cm4gaWYgcG9pbnQgaXMgYXQgdG9w IG9mIGEgd2luZG93LiINCiAgKDw9IChjZHIgKHBvc24teC15IChwb3NuLWF0LXBvaW50KSkpDQog ICAgICAobGluZS1waXhlbC1oZWlnaHQpKSkNCg0KKGRlZnVuIHBpeGVsLXBvaW50LWF0LWJvdHRv bS1wICgpDQogICJSZXR1cm4gaWYgcG9pbnQgaXMgYXQgYm90dG9tIG9mIGEgd2luZG93LiINCiAg KGxldCogKChlZGdlcyAod2luZG93LWluc2lkZS1waXhlbC1lZGdlcykpDQogICAgICAgICAoaGVp Z2h0ICgtIChudGggMyBlZGdlcykgKG50aCAxIGVkZ2VzKSkpIDsgYm90dG9tIC0gdG9wDQogICAg ICAgICAobWVyZ2luICgtIGhlaWdodCAoY2RyIChwb3NuLXgteSAocG9zbi1hdC1wb2ludCkpKSkp KQ0KICAgICg8PSBtZXJnaW4NCiAgICAgICAgKCogMiAobGluZS1waXhlbC1oZWlnaHQpKSkpKQ0K DQooZGVmdW4gcGl4ZWwtc2Nyb2xsLXBpeGVsLXVwIChhbXQpDQogICJTY3JvbGwgdGV4dCBvZiBz ZWxlY3RlZCB3aW5kb3dzIHVwIEFNVCBwaXhlbHMuICBTY29wZSBtb3Zlcw0KZG93bndhcmQuIg0K ICAod2hpbGUgKD49ICgrICh3aW5kb3ctdnNjcm9sbCBuaWwgdCkgYW10KQ0KICAgICAgICAgICAg IChwaXhlbC1saW5lLWhlaWdodCkpDQogICAgKHNldHEgYW10ICgtIGFtdCAocGl4ZWwtLXNjcm9s bC1saW5lLXVwKSkpKSA7IG1ham9yIHNjcm9sbA0KICAocGl4ZWwtLXNjcm9sbC1waXhlbC11cCBh bXQpKSA7IG1pbm9yIHNjcm9sbA0KDQooZGVmdW4gcGl4ZWwtc2Nyb2xsLXBpeGVsLWRvd24gKGFt dCkNCiAgIlNjcm9sbCB0ZXh0IG9mIHNlbGVjdGVkIHdpbmRvd3MgZG93biBBTVQgcGl4ZWxzLiAg U2NvcGUgbW92ZXMNCnVwd2FyZC4iDQogIDs7IEZJWE1FOiBDYW5ub3Qgc2Nyb2xsIGRvd24gb24g SW5mbyBzb21ldGltZXMNCiAgKHdoaWxlICg+IGFtdCAwKQ0KICAgIChsZXQgKCh2cyAod2luZG93 LXZzY3JvbGwgbmlsIHQpKSkNCiAgICAgIChpZiAoZXF1YWwgdnMgMCkNCiAgICAgICAgICAocGl4 ZWwtc2Nyb2xsLWRvd24tYW5kLXNldC13aW5kb3ctdnNjcm9sbCAoMS0gKHBpeGVsLWxpbmUtaGVp Z2h0KSkpDQogICAgICAgIChzZXQtd2luZG93LXZzY3JvbGwgbmlsICgxLSB2cykgdCkpDQogICAg ICAoc2V0cSBhbXQgKDEtIGFtdCkpDQogICAgICAoc2l0LWZvciBwaXhlbC13YWl0KSkpKQ0KDQoo ZGVmdW4gcGl4ZWwtLXNjcm9sbC1saW5lLXVwICgpDQogICJTY3JvbGwgdGV4dCB1cHdhcmQgYSBs aW5lIHdpdGggcGl4ZWwgdHJhbnNpdGlvbi4gIFdoZW4gYHZzY3JvbGwnIGlzIG5vbi16ZXJvLA0K Y29tcGxldGUgc2Nyb2xsaW5nIGEgbGluZS4gIFdoZW4gYHZzY3JvbGwnIGlzIGxhcmdlciB0aGFu IGhlaWdodA0Kb2YgbXVsdGlwbGUgbGluZXMsIGZvciBleGFtcGxlIDg4LCB0aGlzIGZsdXNoZXMg bXVsdGlwbGUgbGluZXMuDQpBdCB0aGUgZW5kLCBgdnNjcm9sbCcgd2lsbCBiZSB6ZXJvLiAgVGhp cyBhc3N1bWVzIHRoYXQgdGhlIGxpbmVzDQphcmUgd2l0aCB0aGUgc2FtZSBoZWlnaHQuICBTY29w ZSBtb3ZlcyBkb3dud2FyZC4gIFRoaXMgZnVuY3Rpb24NCnJldHVybnMgbnVtYmVyIG9mIHBpeGVs cyB0aGF0IHdlcmUgc2Nyb2xsZWQuIg0KICAobGV0KiAoKHNyYyAod2luZG93LXZzY3JvbGwgbmls IHQpKSAgOyBFWEFNUExFIChpbml0aWFsKSAgICAgIEAwICAgQDggIEA4OA0KICAgICAgICAgKGhl aWdodCAocGl4ZWwtbGluZS1oZWlnaHQpKSAgOyAgICAgICAgICAgICAgICAgICAgICAgIDI1ICAg MjUgICAyMw0KICAgICAgICAgKGxpbmUgKDErICgvIHNyYyBoZWlnaHQpKSkgICAgOyBjYXRjaCB1 cCArIG9uZSBsaW5lICAgIMQxICAgxDEgICDENA0KICAgICAgICAgKGRzdCAoKiBsaW5lIGhlaWdo dCkpICAgICAgICAgOyBnb2FsICAgICAgICAgICAgICAgICAgQDI1ICBAMjUgIEA5Mg0KICAgICAg ICAgKGRlbHRhICgtIGRzdCBzcmMpKSkgICAgICAgICAgOyBwaXhlbHMgdG8gYmUgc2Nyb2xsZWQg IDI1ICAgMTcgICAgNA0KICAgIChwaXhlbC0tc2Nyb2xsLXBpeGVsLXVwICgxLSBkZWx0YSkpIDsg c3dlZXAgdW50aWwgb25lIGxlc3MgIEAyNCAgQDI0ICBAOTENCiAgICAoc2Nyb2xsLXVwIGxpbmUp IChzaXQtZm9yIHBpeGVsLXdhaXQpIDsgc2Nyb2xsIDEgcGl4ZWwgICAgICBAMCAgIEAwICAgQDAN CiAgICBkZWx0YSkpDQoNCihkZWZ1biBwaXhlbC0tc2Nyb2xsLXBpeGVsLXVwIChuKQ0KICAiU2Ny b2xsIHRleHQgdXB3YXJkIHRvIE4gcGl4ZWxzIHdpdGggcGl4ZWwgdHJhbnNpdGlvbi4gIFNjb3Bl DQptb3ZlcyBkb3dud2FyZC4iDQogICh3aGVuICg+IG4gMCkNCiAgICAobGV0ICgodnMwICh3aW5k b3ctdnNjcm9sbCBuaWwgdCkpKQ0KICAgICAgKGRvbGlzdCAodnMgKG51bWJlci1zZXF1ZW5jZSAo MSsgdnMwKSAoKyB2czAgbikpKQ0KICAgICAgICAoc2V0LXdpbmRvdy12c2Nyb2xsIG5pbCB2cyB0 KSAoc2l0LWZvciBwaXhlbC13YWl0KSkpKSkNCg0KKGRlZnVuIHBpeGVsLWxpbmUtaGVpZ2h0ICgm b3B0aW9uYWwgcG9zKQ0KICAiUmV0dXJuIGhlaWdodCBpbiBwaXhlbHMgb2YgdGV4dCBsaW5lIG9m IFBPUyBpbiB0aGUgc2VsZWN0ZWQNCndpbmRvdy4gIFdoZW4gUE9TIGlzIG5pbCwgaGVpZ2h0IG9m IHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB3aW5kb3cNCmlzIHByb3ZpZGVkLiAgV2hlbiBoZWlnaHQg b2YgYWxsIGxpbmVzIGFyZSBlcXVhbCwgeW91IGRvbid0IG5lZWQNCnRoaXMgZnVuY3Rpb24gYnV0 IGBmcmFtZS1jaGFyLWhlaWdodCcuICBTZWUgSW5mbyBub2RlIGAoZWxpc3ApDQpMaW5lIEhlaWdo dCcuIg0KICAob3IgcG9zIChzZXRxIHBvcyAod2luZG93LXN0YXJ0KSkpDQogIChzYXZlLWV4Y3Vy c2lvbg0KICAgIChnb3RvLWNoYXIgcG9zKQ0KICAgIChsaW5lLXBpeGVsLWhlaWdodCkpKQ0KDQoo ZGVmdW4gcGl4ZWwtc2Nyb2xsLWRvd24tYW5kLXNldC13aW5kb3ctdnNjcm9sbCAodnNjcm9sbCkN CiAgIlNjcm9sbCBkb3duIGEgbGluZSBhbmQgc2V0IFZTQ1JPTEwgaW4gcGl4ZWxzLiAgVGhpcyBp cyBjb2RlIGlzDQpwcmVzZW50ZWQgYXQNCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0 bWwvZW1hY3MtZGV2ZWwvMjAxNy0wNC9tc2cwMDM2Ni5odG1sLg0KSXQgaXMgaW1wb3J0YW50IHRv IGNhbGwgYHNldC13aW5kb3ctc3RhcnQnIHRvIGZvcmNlIHRoZSBkaXNwbGF5DQplbmdpbmUgdXNl IHRoYXQgcGFydGljdWxhciBwb3NpdGlvbiBhcyB0aGUgd2luZG93LXN0YXJ0IHBvaW50Lg0KT3Ro ZXJ3aXNlLCByZWRpc3BsYXkgd2lsbCByZXNldCB0aGUgd2luZG93J3MgdnNjcm9sbC4iDQogIChs ZXQgKChwb3MNCiAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbg0KICAgICAgICAgICAoZ290by1jaGFy ICh3aW5kb3ctc3RhcnQpKQ0KICAgICAgICAgICAoYmVnaW5uaW5nLW9mLXZpc3VhbC1saW5lIDAp KSkpDQogICAgKHNldC13aW5kb3ctc3RhcnQgbmlsIHBvcyB0KQ0KICAgIChzZXQtd2luZG93LXZz Y3JvbGwgbmlsIHZzY3JvbGwgdCkpKQ0KDQoocHJvdmlkZSAncGl4ZWwtc2Nyb2xsKQ0KOzs7IHBp eGVsLXNjcm9sbC5lbCBlbmRzIGhlcmUNCg== ----Next_Part(Sun_Apr_16_17_35_41_2017_130)-- Content-Type: Text/X-Patch; charset=iso-8859-7 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="pixel-scroll.20170415.el.patch" LS0tIHBpeGVsLXNjcm9sbC4yMDE3MDQxNS5lbAkyMDE3LTA0LTE1IDA3OjIyOjQ3LjM4NzIyMTkw MCArMDkwMA0KKysrIHBpeGVsLXNjcm9sbC5lbAkyMDE3LTA0LTE2IDE3OjEzOjU1LjE4NTY3MTYw MCArMDkwMA0KQEAgLTIsMTAgKzIsMTAgQEANCiANCiA7OyBQYWNrYWdlLVJlcXVpcmVzOiAoKGVt YWNzICIyNC41IikpDQogOzsgVmVyc2lvbjogMS4wLjANCi07OyBQYWNrYWdlLVZlcnNpb246IDIw MTcwNDE1LjA3MjINCis7OyBQYWNrYWdlLVZlcnNpb246IDIwMTcwNDE2LjE3MTMNCiA7OyBLZXl3 b3JkczogY29udmVuaWVuY2UsIHVzYWJpbGl0eQ0KIA0KLTs7OyBUaGlzIGZpbGUgaXMgTk9UIHBh cnQgb2YgR05VIEVtYWNzDQorOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcw0KIA0K IDs7OyBMaWNlbnNlDQogDQpAQCAtNzUsMTIgKzc1LDYgQEANCiA7OyAgICAgICAoc2V0LXdpbmRv dy12c2Nyb2xsIG5pbCB2cyB0KSAoc2l0LWZvciAwLjAwMSkpDQogOzsgICAgIChzY3JvbGwtdXAg MSkpDQogDQotOzs7IFJlbWFya3M6DQotDQotOzsgSWYgeW91IHdhbnQgdG8gdHJ5IHBpeGVsLWxl dmVsIHNjcm9sbGluZywgdGhhdCBpcyBpbiB0aGUgbWlkZGxlIG9mDQotOzsgaW1wbGVtZW50YXRp b24sIGFsc28gaW5jbHVkZSBmb2xsb3dpbmcgaW4geW91ciBpbml0IGZpbGU6DQotOzsNCi07OyAg IChzZXRxIHBpeGVsLXJlc29sdXRpb24tZmluZS1wIHQpDQogDQogOzs7IENoYW5nZSBMb2c6DQog DQpAQCAtOTUsMzIgKzg5LDI2IEBADQogOzsgLSBIYW5kbGUgZXJyb3IgdG8gc2Nyb2xsIHN0YWJs ZSBGb3Igbm93LCBTY3JvbGwgZG9lcyBub3Qgd2VsbCBpbiBJbmZvLg0KIA0KIDs7OyBMb25nIHRl cm0gY29uY2VybjoNCi07OyAtIEFmdGVyIGEgcGl4ZWwgc2Nyb2xsLCB0eXBpbmcgQy1uIG9yIEMt cCBzY3JvbGxzIHRoZSB3aW5kb3cgdG8gbWFrZQ0KLTs7ICAgaXQgZnVsbHkgdmlzaWJsZSwgYW5k IHVuZG9zIHRoZSBlZmZlY3Qgb2YgdGhlIHBpeGVsLWxldmVsIHNjcm9sbC4NCis7OyAtIEFsbG93 aW5nIHBpeGVsLWxldmVsIHNjcm9sbGluZyBpbiBFbWFjcyByZXF1aXJlcyBhIHRob3JvdWdoDQor OzsgICByZXZpZXcgb2YgdGhlIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLCB0byBtYWtlIHN1cmUg bm9uZSBvZiB0aGVtDQorOzsgICB6ZXJvZXMgb3V0IHZzY3JvbGwgd2hlcmUgdXNlcnMgd29uJ3Qg d2FudCB0aGF0Lg0KIA0KIDs7OyBDb2RlOg0KIA0KIChyZXF1aXJlICdtd2hlZWwpDQogDQotKGRl Zmdyb3VwIHBpeGVsLXNjcm9sbCBuaWwNCi0gICJTY3JvbGwgcGl4ZWwtYnktcGl4ZWwgaW4gRW1h Y3MuIg0KLSAgOmdyb3VwICdtb3VzZQ0KLSAgOnByZWZpeCAicGl4ZWwtIikNCi0NCiAoZGVmY3Vz dG9tIHBpeGVsLXdhaXQgMC4wMDENCi0gICJJZGxlIHRpbWUgb24gcGl4ZWwgc2Nyb2xsIHNwZWNp ZmllZCBpbiBzZWNvbmQuIg0KLSAgOmdyb3VwICdwaXhlbC1zY3JvbGwNCisgICJJZGxlIHRpbWUg b24gYSBwaXhlbCBzY3JvbGwgc3BlY2lmaWVkIGluIHNlY29uZC4gIE1vcmUgd2FpdA0KK3dpbGwg cmV0dWx0IGluIHNsb3cgYW5kIGdlbnRsZSBzY3JvbGwuIg0KKyAgOmdyb3VwICdzY3JvbGxpbmcN CisgIDp2ZXJzaW9uICIyNi4xIg0KICAgOnR5cGUgJ2Zsb2F0KQ0KIA0KLShkZWZjdXN0b20gcGl4 ZWwtYW1vdW50ICcoMSAoKHNoaWZ0KSAuIDUpICgoY29udHJvbCkpKQ0KLSAgIkFtb3VudCB0byBz Y3JvbGwgYnkgd2hlbiBzcGlubmluZyB0aGUgbW91c2Ugd2hlZWwuIg0KLSAgOmdyb3VwICdwaXhl bC1zY3JvbGwpDQotDQotKGRlZmN1c3RvbSBwaXhlbC1yZXNvbHV0aW9uLWZpbmUtcCBuaWwNCi0g ICJFbmhhbmNlIHNjcm9sbGluZyByZXNvbHV0aW9uIHRvIHBpeGVsLXRvLXBpeGVsIGluc3RlYWQg b2YNCi1saW5lLXRvLWxpbmUuIg0KLSAgOmdyb3VwICdwaXhlbC1zY3JvbGwNCi0gIDp0eXBlICdi b29sZWFuKQ0KKyhkZWZ2YXIgcGl4ZWwtcmVzb2x1dGlvbi1maW5lLXAgbmlsDQorICAiSW5jcmVh c2Ugc2Nyb2xsaW5nIHJlc29sdXRpb24gdG8gYSBwaXhlbCBpbnN0ZWFkIG9mIGEgbGluZS4NCitB ZnRlciBhIHBpeGVsIHNjcm9sbCwgdHlwaW5nIEMtbiBvciBDLXAgc2Nyb2xscyB0aGUgd2luZG93 IHRvDQorbWFrZSBpdCBmdWxseSB2aXNpYmxlLCBhbmQgdW5kb3MgdGhlIGVmZmVjdCBvZiB0aGUg cGl4ZWwtbGV2ZWwNCitzY3JvbGwuIikNCiANCiAoZGVmaW5lLW1pbm9yLW1vZGUgcGl4ZWwtc2Ny b2xsLW1vZGUNCiAgICJBIG1pbm9yIG1vZGUgdG8gc2Nyb2xsIHRleHQgcGl4ZWwtYnktcGl4ZWwu ICBXaXRoIGEgcHJlZml4IGFyZ3VtZW50IEFSRywNCkBAIC0xMjgsMTkgKzExNiwxNCBAQA0KIG90 aGVyd2lzZS4gIElmIGNhbGxlZCBmcm9tIExpc3AsIGVuYWJsZSBQaXhlbCBTY3JvbGwgbW9kZSBp ZiBBUkcNCiBpcyBvbWl0dGVkIG9yIG5pbC4iDQogICA6aW5pdC12YWx1ZSBuaWwNCi0gIDpncm91 cCAncGl4ZWwtc2Nyb2xsDQorICA6Z3JvdXAgJ3Njcm9sbGluZw0KICAgOmdsb2JhbCB0DQogDQog ICAoaWYgcGl4ZWwtc2Nyb2xsLW1vZGUNCiAgICAgICAocHJvZ24gKHNldHEgbXdoZWVsLXNjcm9s bC11cC1mdW5jdGlvbiAncGl4ZWwtc2Nyb2xsLXVwKQ0KLSAgICAgICAgICAgICAoc2V0cSBtd2hl ZWwtc2Nyb2xsLWRvd24tZnVuY3Rpb24gJ3BpeGVsLXNjcm9sbC1kb3duKQ0KLSAgICAgICAgICAg ICAoc2V0cSBtb3VzZS13aGVlbC1zY3JvbGwtYW1vdW50IHBpeGVsLWFtb3VudCkNCi0gICAgICAg ICAgICAgKHNldHEgbW91c2Utd2hlZWwtcHJvZ3Jlc3NpdmUtc3BlZWQgcGl4ZWwtcmVzb2x1dGlv bi1maW5lLXApKQ0KKyAgICAgICAgICAgICAoc2V0cSBtd2hlZWwtc2Nyb2xsLWRvd24tZnVuY3Rp b24gJ3BpeGVsLXNjcm9sbC1kb3duKSkNCiAgICAgKHNldHEgbXdoZWVsLXNjcm9sbC11cC1mdW5j dGlvbiAnc2Nyb2xsLXVwKQ0KLSAgICAoc2V0cSBtd2hlZWwtc2Nyb2xsLWRvd24tZnVuY3Rpb24g J3Njcm9sbC1kb3duKQ0KLSAgICAoZG9saXN0ICh2YXIgJyhtb3VzZS13aGVlbC1zY3JvbGwtYW1v dW50DQotICAgICAgICAgICAgICAgICAgIG1vdXNlLXdoZWVsLXByb2dyZXNzaXZlLXNwZWVkKSkN Ci0gICAgICAoY3VzdG9tLXJlZXZhbHVhdGUtc2V0dGluZyB2YXIpKSkpDQorICAgIChzZXRxIG13 aGVlbC1zY3JvbGwtZG93bi1mdW5jdGlvbiAnc2Nyb2xsLWRvd24pKSkNCiANCiAoZGVmdW4gcGl4 ZWwtc2Nyb2xsLXVwICgmb3B0aW9uYWwgYXJnKQ0KICAgIlNjcm9sbCB0ZXh0IG9mIHNlbGVjdGVk IHdpbmRvdyB1cCBBUkcgbGluZXMuICBUaGlzIGlzDQpAQCAtMTY5LDMxICsxNTIsMzEgQEANCiAg ICAgICAod2hlbiAob3IgKHBpeGVsLXBvaW50LWF0LWJvdHRvbS1wKSA7IHByZXZlbnQgdG9vIGxh dGUNCiAgICAgICAgICAgICAgICAgKGFuZCBzY3JvbGwtcHJlc2VydmUtc2NyZWVuLXBvc2l0aW9u DQogICAgICAgICAgICAgICAgICAgICAgKG5vdCAocGl4ZWwtcG9pbnQtYXQtdG9wLXApKSkpIDsg cHJldmVudCB0b28gZmFzdA0KLSAgICAgICAgKHZlcnRpY2FsLW1vdGlvbiAtMikpKSA7IEZJWE1F OiAtMSBnaXZlcyBnbGl0Y2gNCisgICAgICAgICh2ZXJ0aWNhbC1tb3Rpb24gLTEpKSkNCiAgICAg KHBpeGVsLXNjcm9sbC1waXhlbC1kb3duIChpZiBwaXhlbC1yZXNvbHV0aW9uLWZpbmUtcA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBpeGVsLWxpbmUtaGVpZ2h0KSkpKSkNCiANCiAoZGVmdW4gcGl4ZWwtcG9pbnQt YXQtdG9wLXAgKCkNCiAgICJSZXR1cm4gaWYgcG9pbnQgaXMgYXQgdG9wIG9mIGEgd2luZG93LiIN Ci0gIChlcXVhbCAoc2F2ZS1leGN1cnNpb24gKGJlZ2lubmluZy1vZi12aXN1YWwtbGluZSkNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgKHBvaW50LWF0LWJvbCkpDQotICAgICAgICAgKHdpbmRv dy1zdGFydCkpKQ0KKyAgKDw9IChjZHIgKHBvc24teC15IChwb3NuLWF0LXBvaW50KSkpDQorICAg ICAgKGxpbmUtcGl4ZWwtaGVpZ2h0KSkpDQogDQogKGRlZnVuIHBpeGVsLXBvaW50LWF0LWJvdHRv bS1wICgpDQogICAiUmV0dXJuIGlmIHBvaW50IGlzIGF0IGJvdHRvbSBvZiBhIHdpbmRvdy4iDQot ICAoPD0gKGNvdW50LWxpbmVzIChzYXZlLWV4Y3Vyc2lvbg0KLSAgICAgICAgICAgICAgICAgICAg IChiZWdpbm5pbmctb2YtdmlzdWFsLWxpbmUpDQotICAgICAgICAgICAgICAgICAgICAgKHBvaW50 LWF0LWJvbCkpDQotICAgICAgICAgICAgICAgICAgIChwaXhlbC13aW5kb3ctZW5kKSkgMSkpDQor ICAobGV0KiAoKGVkZ2VzICh3aW5kb3ctaW5zaWRlLXBpeGVsLWVkZ2VzKSkNCisgICAgICAgICAo aGVpZ2h0ICgtIChudGggMyBlZGdlcykgKG50aCAxIGVkZ2VzKSkpIDsgYm90dG9tIC0gdG9wDQor ICAgICAgICAgKG1lcmdpbiAoLSBoZWlnaHQgKGNkciAocG9zbi14LXkgKHBvc24tYXQtcG9pbnQp KSkpKSkNCisgICAgKDw9IG1lcmdpbg0KKyAgICAgICAgKCogMiAobGluZS1waXhlbC1oZWlnaHQp KSkpKQ0KIA0KIChkZWZ1biBwaXhlbC1zY3JvbGwtcGl4ZWwtdXAgKGFtdCkNCiAgICJTY3JvbGwg dGV4dCBvZiBzZWxlY3RlZCB3aW5kb3dzIHVwIEFNVCBwaXhlbHMuICBTY29wZSBtb3Zlcw0KIGRv d253YXJkLiINCiAgICh3aGlsZSAoPj0gKCsgKHdpbmRvdy12c2Nyb2xsIG5pbCB0KSBhbXQpDQog ICAgICAgICAgICAgIChwaXhlbC1saW5lLWhlaWdodCkpDQotICAgIChzZXRxIGFtdCAoLSBhbXQg KHBpeGVsLS1jYXRjaC1saW5lLXVwKSkpKSA7IG1ham9yIHNjcm9sbA0KLSAgKHBpeGVsLS1zd2Vl cC1waXhlbC11cCBhbXQpKSA7IG1pbm9yIHNjcm9sbA0KKyAgICAoc2V0cSBhbXQgKC0gYW10IChw aXhlbC0tc2Nyb2xsLWxpbmUtdXApKSkpIDsgbWFqb3Igc2Nyb2xsDQorICAocGl4ZWwtLXNjcm9s bC1waXhlbC11cCBhbXQpKSA7IG1pbm9yIHNjcm9sbA0KIA0KIChkZWZ1biBwaXhlbC1zY3JvbGwt cGl4ZWwtZG93biAoYW10KQ0KICAgIlNjcm9sbCB0ZXh0IG9mIHNlbGVjdGVkIHdpbmRvd3MgZG93 biBBTVQgcGl4ZWxzLiAgU2NvcGUgbW92ZXMNCkBAIC0yMDcsOCArMTkwLDggQEANCiAgICAgICAo c2V0cSBhbXQgKDEtIGFtdCkpDQogICAgICAgKHNpdC1mb3IgcGl4ZWwtd2FpdCkpKSkNCiANCi0o ZGVmdW4gcGl4ZWwtLWNhdGNoLWxpbmUtdXAgKCkNCi0gICJGbHVzaCB0ZXh0IHVwd2FyZCBhIGxp bmUgd2l0aCBwaXhlbCB0cmFuc2l0aW9uLiAgV2hlbiBgdnNjcm9sbCcgaXMgbm9uLXplcm8sDQor KGRlZnVuIHBpeGVsLS1zY3JvbGwtbGluZS11cCAoKQ0KKyAgIlNjcm9sbCB0ZXh0IHVwd2FyZCBh IGxpbmUgd2l0aCBwaXhlbCB0cmFuc2l0aW9uLiAgV2hlbiBgdnNjcm9sbCcgaXMgbm9uLXplcm8s DQogY29tcGxldGUgc2Nyb2xsaW5nIGEgbGluZS4gIFdoZW4gYHZzY3JvbGwnIGlzIGxhcmdlciB0 aGFuIGhlaWdodA0KIG9mIG11bHRpcGxlIGxpbmVzLCBmb3IgZXhhbXBsZSA4OCwgdGhpcyBmbHVz aGVzIG11bHRpcGxlIGxpbmVzLg0KIEF0IHRoZSBlbmQsIGB2c2Nyb2xsJyB3aWxsIGJlIHplcm8u ICBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbGluZXMNCkBAIC0yMTksNDQgKzIwMiwzNiBAQA0KICAg ICAgICAgIChsaW5lICgxKyAoLyBzcmMgaGVpZ2h0KSkpICAgIDsgY2F0Y2ggdXAgKyBvbmUgbGlu ZSAgICDEMSAgIMQxICAgxDQNCiAgICAgICAgICAoZHN0ICgqIGxpbmUgaGVpZ2h0KSkgICAgICAg ICA7IGdvYWwgICAgICAgICAgICAgICAgICBAMjUgIEAyNSAgQDkyDQogICAgICAgICAgKGRlbHRh ICgtIGRzdCBzcmMpKSkgICAgICAgICAgOyBwaXhlbHMgdG8gYmUgc2Nyb2xsZWQgIDI1ICAgMTcg ICAgNA0KLSAgICAocGl4ZWwtLXN3ZWVwLXBpeGVsLXVwICgxLSBkZWx0YSkpIDsgc3dlZXAgdW50 aWwgb25lIGxlc3MgIEAyNCAgQDI0ICBAOTENCisgICAgKHBpeGVsLS1zY3JvbGwtcGl4ZWwtdXAg KDEtIGRlbHRhKSkgOyBzd2VlcCB1bnRpbCBvbmUgbGVzcyAgQDI0ICBAMjQgIEA5MQ0KICAgICAo c2Nyb2xsLXVwIGxpbmUpIChzaXQtZm9yIHBpeGVsLXdhaXQpIDsgc2Nyb2xsIDEgcGl4ZWwgICAg ICBAMCAgIEAwICAgQDANCiAgICAgZGVsdGEpKQ0KIA0KLShkZWZ1biBwaXhlbC0tc3dlZXAtcGl4 ZWwtdXAgKG4pDQotICAiU3dlZXAgdGV4dCB1cHdhcmQgdG8gTiBwaXhlbHMuICBTY29wZSBtb3Zl cyBkb3dud2FyZC4iDQorKGRlZnVuIHBpeGVsLS1zY3JvbGwtcGl4ZWwtdXAgKG4pDQorICAiU2Ny b2xsIHRleHQgdXB3YXJkIHRvIE4gcGl4ZWxzIHdpdGggcGl4ZWwgdHJhbnNpdGlvbi4gIFNjb3Bl DQorbW92ZXMgZG93bndhcmQuIg0KICAgKHdoZW4gKD4gbiAwKQ0KICAgICAobGV0ICgodnMwICh3 aW5kb3ctdnNjcm9sbCBuaWwgdCkpKQ0KICAgICAgIChkb2xpc3QgKHZzIChudW1iZXItc2VxdWVu Y2UgKDErIHZzMCkgKCsgdnMwIG4pKSkNCiAgICAgICAgIChzZXQtd2luZG93LXZzY3JvbGwgbmls IHZzIHQpIChzaXQtZm9yIHBpeGVsLXdhaXQpKSkpKQ0KIA0KLShkZWZ1biBwaXhlbC13aW5kb3ct ZW5kICgpDQotICAiUmV0dXJuIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGNoYXJhY3RlciBvZiBmdWxs eS12aXNpYmxlIGxpbmUgaW4NCi1XSU5ET1cuICBUaGlzIGlzIHNpbWlsYXIgdG8gYHdpbmRvdy1l bmQnIGJ1dCBzZWUgYSBmdWxsIHZpc2libGUNCi1saW5lLiINCi0gIChsZXQgKChwb3MgKHdpbmRv dy1lbmQpKSkNCi0gICAgKGlmIChwb3MtdmlzaWJsZS1pbi13aW5kb3ctcCBwb3MgbmlsIHQpDQot ICAgICAgICBwb3MNCi0gICAgICAoc2F2ZS1leGN1cnNpb24NCi0gICAgICAgIChnb3RvLWNoYXIg cG9zKQ0KLSAgICAgICAgKHZlcnRpY2FsLW1vdGlvbiAtMikNCi0gICAgICAgIChwb2ludC1hdC1i b2wpKSkpKQ0KLQ0KIChkZWZ1biBwaXhlbC1saW5lLWhlaWdodCAoJm9wdGlvbmFsIHBvcykNCi0g ICJNZWFzdXJlIGxpbmUgaGVpZ2h0IG9mIFBPUyBpbiBwaXhlbC4gIFdoZW4gaGVpZ2h0IG9mIGFs bCBsaW5lcw0KLWFyZSBlcXVhbCwgeW91IGRvbid0IG5lZWQgdGhpcyBmdW5jdGlvbiBidXQgYGZy YW1lLWNoYXItaGVpZ2h0Jy4NCi1TZWUgSW5mbyBub2RlIGAoZWxpc3ApIExpbmUgSGVpZ2h0Jy4i DQorICAiUmV0dXJuIGhlaWdodCBpbiBwaXhlbHMgb2YgdGV4dCBsaW5lIG9mIFBPUyBpbiB0aGUg c2VsZWN0ZWQNCit3aW5kb3cuICBXaGVuIFBPUyBpcyBuaWwsIGhlaWdodCBvZiB0aGUgZmlyc3Qg bGluZSBvZiB0aGUgd2luZG93DQoraXMgcHJvdmlkZWQuICBXaGVuIGhlaWdodCBvZiBhbGwgbGlu ZXMgYXJlIGVxdWFsLCB5b3UgZG9uJ3QgbmVlZA0KK3RoaXMgZnVuY3Rpb24gYnV0IGBmcmFtZS1j aGFyLWhlaWdodCcuICBTZWUgSW5mbyBub2RlIGAoZWxpc3ApDQorTGluZSBIZWlnaHQnLiINCiAg IChvciBwb3MgKHNldHEgcG9zICh3aW5kb3ctc3RhcnQpKSkNCiAgIChzYXZlLWV4Y3Vyc2lvbg0K ICAgICAoZ290by1jaGFyIHBvcykNCiAgICAgKGxpbmUtcGl4ZWwtaGVpZ2h0KSkpDQogDQogKGRl ZnVuIHBpeGVsLXNjcm9sbC1kb3duLWFuZC1zZXQtd2luZG93LXZzY3JvbGwgKHZzY3JvbGwpDQot ICAiU2Nyb2xsIGRvd24gYSBsaW5lIGFuZCBzZXQgVlNDUk9MTCBpbiBwaXhlbC4gIFRoaXMgaXMg d3JpdHRlbg0KLWJ5IEVsaSBaYXJldHNraWkuICBJdCBpcyBpbXBvcnRhbnQgdG8gY2FsbCBgc2V0 LXdpbmRvdy1zdGFydCcgdG8NCi1mb3JjZSB0aGUgZGlzcGxheSBlbmdpbmUgdXNlIHRoYXQgcGFy dGljdWxhciBwb3NpdGlvbiBhcyB0aGUNCi13aW5kb3ctc3RhcnQgcG9pbnQuICBPdGhlcndpc2Us IHJlZGlzcGxheSB3aWxsIHJlc2V0IHRoZSB3aW5kb3cncw0KLXZzY3JvbGwuIg0KKyAgIlNjcm9s bCBkb3duIGEgbGluZSBhbmQgc2V0IFZTQ1JPTEwgaW4gcGl4ZWxzLiAgVGhpcyBpcyBjb2RlIGlz DQorcHJlc2VudGVkIGF0DQoraHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9lbWFj cy1kZXZlbC8yMDE3LTA0L21zZzAwMzY2Lmh0bWwuDQorSXQgaXMgaW1wb3J0YW50IHRvIGNhbGwg YHNldC13aW5kb3ctc3RhcnQnIHRvIGZvcmNlIHRoZSBkaXNwbGF5DQorZW5naW5lIHVzZSB0aGF0 IHBhcnRpY3VsYXIgcG9zaXRpb24gYXMgdGhlIHdpbmRvdy1zdGFydCBwb2ludC4NCitPdGhlcndp c2UsIHJlZGlzcGxheSB3aWxsIHJlc2V0IHRoZSB3aW5kb3cncyB2c2Nyb2xsLiINCiAgIChsZXQg KChwb3MNCiAgICAgICAgICAoc2F2ZS1leGN1cnNpb24NCiAgICAgICAgICAgIChnb3RvLWNoYXIg KHdpbmRvdy1zdGFydCkpDQo= ----Next_Part(Sun_Apr_16_17_35_41_2017_130)----