<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>41207</bug_id>
          
          <creation_ts>2010-06-25 03:36:28 -0700</creation_ts>
          <short_desc>absoluteRects() seems superflous</short_desc>
          <delta_ts>2017-07-18 08:30:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>gustavo</cc>
    
    <cc>hyatt</cc>
    
    <cc>jamesr</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242930</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-25 03:36:28 -0700</bug_when>
    <thetext>Most renderers contain an absoluteRects() function, which seems superflous nowadays, the only remaining users are:
- Node::hasNonEmptyBoundingBox() - can easily be reworked to use absoluteQuads - is only interessted whether the bbox is empty or not.
- RenderObject::absoluteBoundingBoxRect()

// FIXME: useTransforms should go away eventually
IntRect absoluteBoundingBoxRect(bool useTransforms = false);

For the useTransforms=true case, it already uses absoluteQuads. I propose that it should always use this code path, then we can remove the parameter &apos;useTransforms&apos; alltogether.
I&apos;ll try coming up with a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242976</commentid>
    <comment_count>1</comment_count>
      <attachid>59761</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-25 05:42:45 -0700</bug_when>
    <thetext>Created attachment 59761
Initial patch

Okay, removing absoluteRects() seems to work fine. I didn&apos;t see any regression, compared two runs with &quot;run-webkit-tests --tolerance 0 -p&quot;.
(Note: I updated inbetween, and got a difference in fast/events/platform-wheelevent-in-scrolling-div.html, I can retry with a fresh build, if the absoluteRects() change is guilty for that.)

Does anyone know how to make a test for the absoluteBoundingBoxRect() change, that would fail before and is fixed now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242978</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-25 05:52:11 -0700</bug_when>
    <thetext>Attachment 59761 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3325705</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242988</commentid>
    <comment_count>3</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-25 06:22:42 -0700</bug_when>
    <thetext>Oh, renderRect() is a newly added function - that&apos;s why the build fails atm.
I&apos;m going to upload a new patch, but would like to hear first, if that approach makes sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242993</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-25 06:29:38 -0700</bug_when>
    <thetext>Attachment 59761 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3313711</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243002</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-25 07:06:24 -0700</bug_when>
    <thetext>Attachment 59761 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3281771</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243135</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-25 12:34:44 -0700</bug_when>
    <thetext>Attachment 59761 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/3294769</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>244211</commentid>
    <comment_count>7</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-06-29 05:00:09 -0700</bug_when>
    <thetext>Dan/Dave/Simon, what do you think about this patch? If removing absoluteRects() is the right way to go, then I&apos;m going to upload a new version that builds against trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261422</commentid>
    <comment_count>8</comment_count>
      <attachid>59761</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-06 13:35:32 -0700</bug_when>
    <thetext>Comment on attachment 59761
Initial patch

I support removing absoluteRects.  Please upload the patch for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410776</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-26 13:23:47 -0700</bug_when>
    <thetext>I&apos;m about to file a bug to update absoluteRects to take an IntSize instead of a pair of ints, but came across this beforehand.  I see it now used in RenderObject::absoluteBoundingBoxRect as well as the aforementioned hasNonEmptyBoundingBox.

Nikolas, do you have a workaround for absoluteBoundingBoxRect as well? If not, I&apos;m going to just update the signature and keep this function alive. I&apos;d be happier to see it go, of course :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59761</attachid>
            <date>2010-06-25 05:42:45 -0700</date>
            <delta_ts>2010-08-06 13:35:32 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>AbsoluteRects.diff</filename>
            <type>text/plain</type>
            <size>18961</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTg0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDYtMjUgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJt
YW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgYWJzb2x1dGVSZWN0cygpIHNlZW1zIHN1cGVyZmxvdXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxMjA3CisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOb2RlOjpnZXRSZWN0KTogUmVtb3ZlIGNvbW1lbnQsIG5vdyB0aGF0IGdldFJlY3QoKSB3b3Jr
cyB3aXRoIHRyYW5zZm9ybXMuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpoYXNOb25FbXB0eUJv
dW5kaW5nQm94KTogUmV3b3JrZWQgdG8gYXZvaWQgY2FsbGluZyBhYnNvbHV0ZVJlY3RzLCBhYnNv
bHV0ZVF1YWRzIGNhbiBnaXZlIHRoZSBzYW1lIGluZm9ybWF0aW9uLgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNvbnRyb2xsZXI6OmRyYXdOb2RlSGlnaGxpZ2h0KTogUmVtb3ZlIHVubmVlZGVkIHVzZVRyYW5z
Zm9tcz10cnVlIGFyZ3VtZW50IGZvciBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCwgdGhhdCBpcyBn
b25lIG5vdy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOiBSZW1vdmUgYWJz
b2x1dGVSZWN0cygpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOiBEaXR0by4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDogRGl0dG8uCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5oOiBEaXR0
bworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCk6IFJlbW92ZSBhYnNvbHV0
ZVJlY3RzKCkgdXNhZ2UsIGp1c3QgdGFrZSB0aGUgYWJzb2x1dGVRdWFkcygpIGNvZGUgcGF0aCwg
dXNlZCB3aXRoIHVzZVRyYW5zZm9ybT10cnVlIHByZXZpb3VzbHkuCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oOiBSZW1vdmUgYWJzb2x1dGVSZWN0cygpLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHA6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJTVkdCbG9jay5oOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1h
Z2UuY3BwOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuaDogRGl0
dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcDogRGl0dG8u
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0Lmg6IERpdHRvLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDogRGl0dG8uCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHQuaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OnNob3dQb3B1cCk6ZW1vdmUgdW5uZWVkZWQgdXNlVHJhbnNmb21zPXRydWUg
YXJndW1lbnQgZm9yIGFic29sdXRlQm91bmRpbmdCb3hSZWN0LCB0aGF0IGlzIGdvbmUgbm93Lgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDogUmVtb3ZlIGFic29sdXRlUmVjdHMo
KS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOiBEaXR0by4KKyAgICAgICAgKiB3
bWwvV01MQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V01MQUVsZW1lbnQ6OmlzS2V5
Ym9hcmRGb2N1c2FibGUpOiBSZW1vdmUgYWJzb2x1dGVSZWN0cygpIHVzYWdlLCBzaG91bGQganVz
dCB1c2UgaGFzTm9uRW1wdHlCb3VuZGluZ0JveCgpLCBsaWtlIEhUTUxBbmNob3JFbGVtZW50IGRv
ZXMKKwogMjAxMC0wNi0yNSAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL05v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA2MTc1
OSkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzEsNyArNjcx
LDYgQEAgUmVuZGVyQm94TW9kZWxPYmplY3QqIE5vZGU6OnJlbmRlckJveE1vZAogCiBJbnRSZWN0
IE5vZGU6OmdldFJlY3QoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBicm9rZW4gd2l0aCB0cmFu
c2Zvcm1zCiAgICAgaWYgKHJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiByZW5kZXJlcigpLT5h
YnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAgIHJldHVybiBJbnRSZWN0KCk7CkBAIC02ODcs
MTMgKzY4NiwxMyBAQCBib29sIE5vZGU6Omhhc05vbkVtcHR5Qm91bmRpbmdCb3goKSBjb25zCiAg
ICAgaWYgKCFib3gtPmJvcmRlckJvdW5kaW5nQm94KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKLSAgICBGbG9hdFBvaW50IGFi
c1BvcyA9IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZSgpOwotICAgIHJlbmRlcmVyKCktPmFi
c29sdXRlUmVjdHMocmVjdHMsIGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwotICAgIHNpemVfdCBu
ID0gcmVjdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKQotICAg
ICAgICBpZiAoIXJlY3RzW2ldLmlzRW1wdHkoKSkKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFk
czsKKyAgICByZW5kZXJlcigpLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKKyAgICBzaXplX3QgbiA9
IHF1YWRzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgeworICAg
ICAgICBpZiAoIXF1YWRzW2ldLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2MTc1OSkKKysrIFdlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYxLDcgKzE5
NjEsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRyYXdOb2RlSGlnaGxpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEludFNpemUgbWFpbkZyYW1lT2Zmc2V0ID0gZnJhbWVUb01haW5GcmFt
ZU9mZnNldChjb250YWluaW5nRnJhbWUpOwotICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSByZW5k
ZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSk7CisgICAgSW50UmVjdCBib3VuZGlu
Z0JveCA9IHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAgIGJvdW5kaW5n
Qm94Lm1vdmUobWFpbkZyYW1lT2Zmc2V0KTsKIAogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2Up
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzODEs
MjEgKzUzODEsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpzZXRNYXhCb3R0b21NYXJnaW5zKGluCiAg
ICAgbV9tYXhNYXJnaW4tPm1fYm90dG9tTmVnID0gbmVnOwogfQogCi12b2lkIFJlbmRlckJsb2Nr
OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQot
ewotICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNs
dWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCi0gICAgLy8gaW5saW5l
IGJveGVzIGFib3ZlIGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0g
dG8gZm9ybSBhIHNpbmdsZSBpcnJlZ3VsYXIKLSAgICAvLyBzaGFwZSkuCi0gICAgaWYgKGlzQW5v
bnltb3VzQmxvY2tDb250aW51YXRpb24oKSkgewotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVj
dCh0eCwgdHkgLSBjb2xsYXBzZWRNYXJnaW5Ub3AoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkdGgoKSwgaGVpZ2h0KCkgKyBjb2xsYXBzZWRNYXJnaW5Ub3AoKSArIGNvbGxhcHNl
ZE1hcmdpbkJvdHRvbSgpKSk7Ci0gICAgICAgIGNvbnRpbnVhdGlvbigpLT5hYnNvbHV0ZVJlY3Rz
KHJlY3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHgoKSAr
IGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSB5KCkgKyBpbmxpbmVFbGVt
ZW50Q29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55KCkpOwotICAgIH0gZWxzZQot
ICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7
Ci19Ci0KIHZvaWQgUmVuZGVyQmxvY2s6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4m
IHF1YWRzKQogewogICAgIC8vIEZvciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFk
IGFuZCBpbmNsdWRlIG1hcmdpbnMgc28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDYxNzU5KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw2IEBAIHBy
aXZhdGU6CiAgICAgaW50IGxlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgaW50IHkpOwogICAgIGludCByaWdodFNlbGVjdGlvbk9mZnNldChSZW5kZXJCbG9jayogcm9v
dEJsb2NrLCBpbnQgeSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8
SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVh
ZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKIAogICAgIGludCBkZXNpcmVkQ29sdW1uV2lkdGgoKSBj
b25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gNjE3NTkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTEg
KzMwMSw2IEBAIHZvaWQgUmVuZGVyQm94OjpzZXRTY3JvbGxUb3AoaW50IG5ld1RvcCkKICAgICAg
ICAgbGF5ZXIoKS0+c2Nyb2xsVG9ZT2Zmc2V0KG5ld1RvcCk7CiB9CiAKLXZvaWQgUmVuZGVyQm94
OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQot
ewotICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsK
LX0KLQogdm9pZCBSZW5kZXJCb3g6OmFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1
YWRzKQogewogICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdCgw
LCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZp
c2lvbiA2MTc1OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTIsNyArMTUyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IG1heFRvcE1h
cmdpbihib29sIHBvc2l0aXZlKSBjb25zdCB7IHJldHVybiBwb3NpdGl2ZSA/IHN0ZDo6bWF4KDAs
IG1hcmdpblRvcCgpKSA6IC1zdGQ6Om1pbigwLCBtYXJnaW5Ub3AoKSk7IH0KICAgICB2aXJ0dWFs
IGludCBtYXhCb3R0b21NYXJnaW4oYm9vbCBwb3NpdGl2ZSkgY29uc3QgeyByZXR1cm4gcG9zaXRp
dmUgPyBzdGQ6Om1heCgwLCBtYXJnaW5Cb3R0b20oKSkgOiAtc3RkOjptaW4oMCwgbWFyZ2luQm90
dG9tKCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVj
dD4mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVj
dG9yPEZsb2F0UXVhZD4mKTsKICAgICAKICAgICBJbnRSZWN0IHJlZmxlY3Rpb25Cb3goKSBjb25z
dDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gNjE3NTkpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MDksMjUgKzQwOSw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjpwYWludChQYWludEluZm8mIHBhaW4K
ICAgICBtX2xpbmVCb3hlcy5wYWludCh0aGlzLCBwYWludEluZm8sIHR4LCB0eSk7CiB9CiAKLXZv
aWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGlu
dCB0eCwgaW50IHR5KQotewotICAgIGlmIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5l
Qm94KCkpIHsKLSAgICAgICAgZm9yICg7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgp
KQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHggKyBjdXJyLT54KCksIHR5ICsg
Y3Vyci0+eSgpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSkpOwotICAgIH0gZWxzZQot
ICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIDAsIDApKTsKLQotICAgIGlmIChj
b250aW51YXRpb24oKSkgewotICAgICAgICBpZiAoY29udGludWF0aW9uKCktPmlzQm94KCkpIHsK
LSAgICAgICAgICAgIFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3goY29udGludWF0aW9uKCkp
OwotICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRlUmVjdHMocmVjdHMsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250YWluaW5nQmxv
Y2soKS0+eCgpICsgYm94LT54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55KCkgKyBib3gtPnkoKSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFic29sdXRlUmVjdHMocmVjdHMs
IHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPngoKSwgdHkgLSBjb250YWluaW5nQmxvY2soKS0+eSgp
KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxG
bG9hdFF1YWQ+JiBxdWFkcykKIHsKICAgICBpZiAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0
TGluZUJveCgpKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gNjE3
NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luTGVmdCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgaW50IG1hcmdpblJpZ2h0KCkgY29uc3Q7CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkp
OwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAK
ICAgICB2aXJ0dWFsIEludFNpemUgb2Zmc2V0RnJvbUNvbnRhaW5lcihSZW5kZXJPYmplY3QqLCBj
b25zdCBJbnRQb2ludCYpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CShyZXZpc2lvbiA2MTc1OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMTMsMzMgKzEwMTMsMTggQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OnBhaW50T3V0bGluZShHcmFwaGljcwogICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0Nv
bnRleHQsIHR4IC0gb3csIHR5ICsgaCwgdHggKyB3ICsgb3csIHR5ICsgaCArIG93LCBCU0JvdHRv
bSwgb2MsIG9zLCBvdywgb3cpOwogfQogCi1JbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVC
b3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zKQorSW50UmVjdCBSZW5kZXJPYmplY3Q6
OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkKIHsKLSAgICBpZiAodXNlVHJhbnNmb3Jtcykgewot
ICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICAgICAgYWJzb2x1dGVRdWFkcyhx
dWFkcyk7Ci0KLSAgICAgICAgc2l6ZV90IG4gPSBxdWFkcy5zaXplKCk7Ci0gICAgICAgIGlmICgh
bikKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCi0gICAgICAgIEludFJlY3Qg
cmVzdWx0ID0gcXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICByZXN1bHQudW5pdGUocXVhZHNb
aV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCi0gICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoKTsKLSAgICBWZWN0
b3I8SW50UmVjdD4gcmVjdHM7Ci0gICAgYWJzb2x1dGVSZWN0cyhyZWN0cywgYWJzUG9zLngoKSwg
YWJzUG9zLnkoKSk7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgYWJzb2x1dGVR
dWFkcyhxdWFkcyk7CiAKLSAgICBzaXplX3QgbiA9IHJlY3RzLnNpemUoKTsKKyAgICBzaXplX3Qg
biA9IHF1YWRzLnNpemUoKTsKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7
CiAKLSAgICBJbnRSZWN0IHJlc3VsdCA9IHJlY3RzWzBdOworICAgIEludFJlY3QgcmVzdWx0ID0g
cXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKICAgICBmb3IgKHNpemVfdCBpID0gMTsg
aSA8IG47ICsraSkKLSAgICAgICAgcmVzdWx0LnVuaXRlKHJlY3RzW2ldKTsKKyAgICAgICAgcmVz
dWx0LnVuaXRlKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA2MTg0
NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OTgsOSArNTk4LDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgb2Zmc2V0IGZyb20g
YW4gb2JqZWN0IHVwIHRoZSBjb250YWluZXIoKSBjaGFpbi4gQXNzZXJ0cyB0aGF0IG5vbmUgb2Yg
dGhlIGludGVybWVkaWF0ZSBvYmplY3RzIGhhdmUgdHJhbnNmb3Jtcy4KICAgICBJbnRTaXplIG9m
ZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQsIGludCkg
eyB9Ci0gICAgLy8gRklYTUU6IHVzZVRyYW5zZm9ybXMgc2hvdWxkIGdvIGF3YXkgZXZlbnR1YWxs
eQotICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1z
ID0gZmFsc2UpOworICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKIAogICAg
IC8vIEJ1aWxkIGFuIGFycmF5IG9mIHF1YWRzIGluIGFic29sdXRlIGNvb3JkcyBmb3IgbGluZSBi
b3hlcwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jikg
eyB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suY3BwCShyZXZpc2lvbiA2MTc1
OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjgsMTEgKzY4LDYgQEAgdm9pZCBSZW5kZXJTVkdCbG9jazo6dXBkYXRlQm94TW9kZWxJ
bmZvRgogICAgIHNldEhhc092ZXJmbG93Q2xpcChmYWxzZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZH
QmxvY2s6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQpCi17Ci0gICAg
Ly8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3Jl
IGFzc3VtaW5nIHVzZVRyYW5zZm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNo
b3VsZCBiZSB1c2VkLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQogfQogCiAjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Jsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQmxvY2suaAkocmV2aXNpb24gNjE3NTkpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4
ICszNyw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFBh
c3NSZWZQdHI8UmVuZGVyU3R5bGU+KTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQm94TW9kZWxJ
bmZvRnJvbVN0eWxlKCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8
SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA2MTc1OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDEyICsxOTAsNiBAQCB2
b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWCiAgICAgICAgIHJlY3RzLmFw
cGVuZChjb250ZW50UmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgaW50LCBpbnQpCi17Ci0gICAgLy8gVGhpcyBjb2RlIHBhdGgg
c2hvdWxkIG5ldmVyIGJlIHRha2VuIGZvciBTVkcsIGFzIHdlJ3JlIGFzc3VtaW5nIHVzZVRyYW5z
Zm9ybXM9dHJ1ZSBldmVyeXdoZXJlLCBhYnNvbHV0ZVF1YWRzIHNob3VsZCBiZSB1c2VkLgotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiB2b2lkIFJlbmRlclNWR0ltYWdlOjphYnNvbHV0
ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKIHsKICAgICBxdWFkcy5hcHBlbmQobG9j
YWxUb0Fic29sdXRlUXVhZChzdHJva2VCb3VuZGluZ0JveCgpKSk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR0ltYWdlLmgJKHJldmlzaW9uIDYxNzU5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNiBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCBmaXhlZCwg
VHJhbnNmb3JtU3RhdGUmKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgYWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDYxNzU5
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MiwxMiArNzIsNiBAQCBJbnRSZWN0IFJlbmRlclNWR01vZGVsT2JqZWN0Ojpv
dXRsaW5lQm91CiAgICAgcmV0dXJuIGNvbnRhaW5lclJlbGF0aXZlUXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpOwogfQogCi12b2lkIFJlbmRlclNWR01vZGVsT2JqZWN0OjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYsIGludCwgaW50KQotewotICAgIC8vIFRoaXMgY29kZSBwYXRoIHNo
b3VsZCBuZXZlciBiZSB0YWtlbiBmb3IgU1ZHLCBhcyB3ZSdyZSBhc3N1bWluZyB1c2VUcmFuc2Zv
cm1zPXRydWUgZXZlcnl3aGVyZSwgYWJzb2x1dGVRdWFkcyBzaG91bGQgYmUgdXNlZC4KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQogdm9pZCBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWJz
b2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMpCiB7CiAgICAgcXVhZHMuYXBwZW5k
KGxvY2FsVG9BYnNvbHV0ZVF1YWQoc3Ryb2tlQm91bmRpbmdCb3goKSkpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHTW9kZWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdNb2RlbE9iamVjdC5oCShyZXZpc2lvbiA2MTc1OSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR01vZGVsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlUmVjdEZvclJl
cGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIEludFJlY3QmLCBi
b29sIGZpeGVkID0gZmFsc2UpOwogICAgIHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9y
UmVwYWludChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgSW50UG9pbnQq
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA2MTg0NCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTIgKzI2MSw2IEBAIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyVGV4dDo6b3JpZ2kKICAgICByZXR1cm4gKGUgJiYg
ZS0+aXNUZXh0Tm9kZSgpKSA/IHN0YXRpY19jYXN0PFRleHQqPihlKS0+ZGF0YUltcGwoKSA6IDA7
CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBpbnQgdHgsIGludCB0eSkKLXsKLSAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IGZp
cnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKLSAgICAgICAgcmVj
dHMuYXBwZW5kKEludFJlY3QodHggKyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSwgYm94LT53aWR0
aCgpLCBib3gtPmhlaWdodCgpKSk7Ci19Ci0KIHZvaWQgUmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0
c0ZvclJhbmdlKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBlbmQsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQogewogICAgIC8vIFdvcmsgYXJvdW5kIHNp
Z25lZC91bnNpZ25lZCBpc3N1ZXMuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdW5zaWduZWRzLCBhbmQg
aXMgb2Z0ZW4gcGFzc2VkIFVJTlRfTUFYCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZp
c2lvbiA2MTc1OSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAgICAgSW5saW5lVGV4dEJveCogY3JlYXRl
SW5saW5lVGV4dEJveCgpOwogICAgIHZvaWQgZGlydHlMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGlu
dCB0eCwgaW50IHR5KTsKICAgICB2b2lkIGFic29sdXRlUmVjdHNGb3JSYW5nZShWZWN0b3I8SW50
UmVjdD4mLCB1bnNpZ25lZCBzdGFydE9mZnNldCA9IDAsIHVuc2lnbmVkIGVuZE9mZnNldCA9IFVJ
TlRfTUFYLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHJldmlzaW9u
IDYxNzU5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzaG93UG8KICAgICAgICAgbV9zZWFyY2hQb3B1cC0+c2F2ZVJlY2Vu
dFNlYXJjaGVzKG5hbWUsIG1fcmVjZW50U2VhcmNoZXMpOwogICAgIH0KIAotICAgIG1fc2VhcmNo
UG9wdXAtPnNob3coYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QodHJ1ZSksIGRvY3VtZW50KCktPnZp
ZXcoKSwgLTEpOworICAgIG1fc2VhcmNoUG9wdXAtPnNob3coYWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKSwgZG9jdW1lbnQoKS0+dmlldygpLCAtMSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lOjpoaWRlUG9wdXAoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJ
KHJldmlzaW9uIDYxNzU5KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwNSwxMSArMzA1LDYgQEAgdm9pZCBSZW5kZXJWaWV3Ojpjb21wdXRl
UmVjdEZvclJlcGFpbnQoUgogICAgICAgICByZWN0ID0gbV9sYXllci0+dHJhbnNmb3JtKCktPm1h
cFJlY3QocmVjdCk7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKLXsKLSAgICByZWN0cy5hcHBlbmQoSW50
UmVjdCh0eCwgdHksIG1fbGF5ZXItPndpZHRoKCksIG1fbGF5ZXItPmhlaWdodCgpKSk7Ci19Ci0K
IHZvaWQgUmVuZGVyVmlldzo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYgcXVhZHMp
CiB7CiAgICAgcXVhZHMuYXBwZW5kKEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyLT53aWR0aCgpLCBt
X2xheWVyLT5oZWlnaHQoKSkpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24g
NjE3NTkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDcgKzg1LDYgQEAgcHVibGljOgogCiAgICAgaW50IHRydW5jYXRlZEF0KCkgY29uc3Qg
eyByZXR1cm4gbV90cnVuY2F0ZWRBdDsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAKICAgICBJbnRSZWN0IHNlbGVjdGlv
bkJvdW5kcyhib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgY29uc3Q7CkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
QUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MTc1OSkKKysrIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsMjQgKzkyLDcgQEAgYm9vbCBXTUxBRWxlbWVudDo6
aXNLZXlib2FyZEZvY3VzYWJsZShLZQogICAgIGlmICghZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZl
bnRIYW5kbGVyKCktPnRhYnNUb0xpbmtzKGV2ZW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKCFyZW5kZXJlcigpIHx8ICFyZW5kZXJlcigpLT5pc0JveE1vZGVsT2JqZWN0KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEJlZm9yZSBjYWxsaW5nIGFic29sdXRl
UmVjdHMsIGNoZWNrIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHJlbmRlcmVyCi0gICAg
Ly8gaXMgbm9uLWVtcHR5LCBzaW5jZSB0aGlzIGlzIGEgZmFzdGVyIGNoZWNrIGFuZCBhbG1vc3Qg
YWx3YXlzIHJldHVybnMgdHJ1ZS4KLSAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlcigpKTsKLSAgICBpZiAoIWJveC0+Ym9yZGVyQm91
bmRpbmdCb3goKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgVmVjdG9y
PEludFJlY3Q+IHJlY3RzOwotICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gcmVuZGVyZXIoKS0+bG9j
YWxUb0Fic29sdXRlKCk7Ci0gICAgcmVuZGVyZXIoKS0+YWJzb2x1dGVSZWN0cyhyZWN0cywgYWJz
UG9zLngoKSwgYWJzUG9zLnkoKSk7Ci0gICAgc2l6ZV90IG4gPSByZWN0cy5zaXplKCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCi0gICAgICAgIGlmICghcmVjdHNbaV0uaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIGhhc05vbkVtcHR5Qm91bmRpbmdCb3goKTsKIH0KIAogdm9pZCBXTUxBRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCg==
</data>
<flag name="review"
          id="46827"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>