<?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>86894</bug_id>
          
          <creation_ts>2012-05-18 13:40:44 -0700</creation_ts>
          <short_desc>Simplify RenderOverflow by using Rects</short_desc>
          <delta_ts>2012-05-19 13:48:33 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>628016</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-18 13:40:44 -0700</bug_when>
    <thetext>Simplify the RenderOverflow class and the uses of it by storing the overflow values in rects and using the rects instead of the individual values where it makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628272</commentid>
    <comment_count>1</comment_count>
      <attachid>142824</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-18 17:10:10 -0700</bug_when>
    <thetext>Created attachment 142824
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628323</commentid>
    <comment_count>2</comment_count>
      <attachid>142824</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-05-18 19:16:23 -0700</bug_when>
    <thetext>Comment on attachment 142824
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=142824&amp;action=review

Wow.  total insanity.  I suspect there is another round of cleanup to be done here as well with all the &quot;logical&quot; accessors.

&gt; Source/WebCore/page/FrameView.cpp:3283
&gt; +        IntRect dirtyRect(0, static_cast&lt;int&gt;(floorf(oldTop)), root-&gt;layoutOverflowRect().maxX(), static_cast&lt;int&gt;(ceilf(oldBottom - oldTop)));

this looks a lot like enclosingIntRect(FloatRect(0, oldTop, maxX, oldBottom - oldTop))?

&gt; Source/WebCore/rendering/InlineFlowBox.h:210
&gt; +    LayoutUnit logicalLeftLayoutOverflow() const { return m_overflow ? (isHorizontal() ? m_overflow-&gt;layoutOverflowRect().x() : m_overflow-&gt;layoutOverflowRect().y()) : static_cast&lt;LayoutUnit&gt;(logicalLeft()); }

Might make sense to fomat this as multiple lines.

&gt; Source/WebCore/rendering/InlineFlowBox.h:215
&gt; -            return isHorizontal() ? m_overflow-&gt;minYLayoutOverflow() : m_overflow-&gt;minXLayoutOverflow();
&gt; +            return isHorizontal() ? m_overflow-&gt;layoutOverflowRect().y() : m_overflow-&gt;layoutOverflowRect().x();

We need to find a cleaner way to do this flipping-on-demand that we do everywhere.  just &quot;return logicalOverflowRect().x()&quot;?

&gt; Source/WebCore/rendering/RenderBox.cpp:3738
&gt; -    m_overflow-&gt;resetLayoutOverflow(borderBoxRect());
&gt; +    m_overflow-&gt;setLayoutOverflow(borderBoxRect());

I&apos;m not sure I follow?  Did you rename this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628324</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-18 19:24:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 142824 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=142824&amp;action=review
&gt; 
&gt; Wow.  total insanity.  I suspect there is another round of cleanup to be done here as well with all the &quot;logical&quot; accessors.

Yeah, I plan to tackle that next.


&gt; &gt; Source/WebCore/page/FrameView.cpp:3283
&gt; &gt; +        IntRect dirtyRect(0, static_cast&lt;int&gt;(floorf(oldTop)), root-&gt;layoutOverflowRect().maxX(), static_cast&lt;int&gt;(ceilf(oldBottom - oldTop)));
&gt; 
&gt; this looks a lot like enclosingIntRect(FloatRect(0, oldTop, maxX, oldBottom - oldTop))?

It does, doesn&apos;t it? I&apos;ll see if I can change it to use enclosingIntRect. Thanks!

&gt; 
&gt; &gt; Source/WebCore/rendering/InlineFlowBox.h:210
&gt; &gt; +    LayoutUnit logicalLeftLayoutOverflow() const { return m_overflow ? (isHorizontal() ? m_overflow-&gt;layoutOverflowRect().x() : m_overflow-&gt;layoutOverflowRect().y()) : static_cast&lt;LayoutUnit&gt;(logicalLeft()); }
&gt; 
&gt; Might make sense to fomat this as multiple lines.

Good idea.

&gt; &gt; Source/WebCore/rendering/InlineFlowBox.h:215
&gt; &gt; -            return isHorizontal() ? m_overflow-&gt;minYLayoutOverflow() : m_overflow-&gt;minXLayoutOverflow();
&gt; &gt; +            return isHorizontal() ? m_overflow-&gt;layoutOverflowRect().y() : m_overflow-&gt;layoutOverflowRect().x();
&gt; 
&gt; We need to find a cleaner way to do this flipping-on-demand that we do everywhere.  just &quot;return logicalOverflowRect().x()&quot;?

Yeah, I have a couple of ideas around that. Expect more cleanup patches next week :)

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBox.cpp:3738
&gt; &gt; -    m_overflow-&gt;resetLayoutOverflow(borderBoxRect());
&gt; &gt; +    m_overflow-&gt;setLayoutOverflow(borderBoxRect());
&gt; 
&gt; I&apos;m not sure I follow?  Did you rename this?

No, I removed the resetLayoutOverflow method as it did exactly the same thing as the set method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628483</commentid>
    <comment_count>4</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2012-05-19 13:48:05 -0700</bug_when>
    <thetext>Committed r117697: &lt;http://trac.webkit.org/changeset/117697&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142824</attachid>
            <date>2012-05-18 17:10:10 -0700</date>
            <delta_ts>2012-05-19 13:48:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86894-20120518171009.patch</filename>
            <type>text/plain</type>
            <size>27837</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzY1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA1LTE4ICBFbWlsIEEg
RWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KKworICAgICAgICBTaW1wbGlmeSBSZW5kZXJPdmVy
ZmxvdyBieSB1c2luZyBSZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODY4OTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTaW1wbGlmeSB0aGUgUmVuZGVyT3ZlcmZsb3cgY2xhc3MgYW5kIHRoZSB1c2Vz
IG9mIGl0IGJ5IHN0b3JpbmcgdGhlCisgICAgICAgIG92ZXJmbG93IHZhbHVlcyBpbiByZWN0cyBh
bmQgdXNpbmcgdGhlIHJlY3RzIGluc3RlYWQgb2YgdGhlIGluZGl2aWR1YWwKKyAgICAgICAgdmFs
dWVzIHdoZXJlIGl0IG1ha2VzIHNlbnNlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gY2hh
bmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkKToK
KyAgICAgICAgQ2hhbmdlIHRvIHVzZSBsYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCkgYW5kIHJl
cGxhY2UgQyBzdHlsZSBjYXN0cyB3aXRoCisgICAgICAgIEMrKyBzdHlsZSB0byBjb21wbHkgd2l0
aCBzdHlsZSBndWlkZS4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmxvZ2ljYWxMZWZ0TGF5b3V0
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bG9naWNhbFJpZ2h0
TGF5b3V0T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bG9naWNh
bFRvcExheW91dE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6Omxv
Z2ljYWxCb3R0b21MYXlvdXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93
Qm94Ojpsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUZsb3dCb3g6OmxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6
OklubGluZUZsb3dCb3g6OmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVGbG93Qm94Ojpsb2dpY2FsQm90dG9tVmlzdWFsT3ZlcmZsb3cpOgorICAgICAg
ICBDaGFuZ2UgbWV0aG9kcyB0byB1c2UgbGF5b3V0T3ZlcmZsb3dSZWN0KCkgYW5kIHZpc3VhbE92
ZXJmbG93UmVjdCgpLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGxIZWlnaHQpOgorICAgICAgICBDaGFuZ2UgbWV0aG9k
cyB0byB1c2UgdmlzdWFsT3ZlcmZsb3dSZWN0KCkuCisgICAgICAgIAorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpjbGVhckxheW91dE92ZXJmbG93KToKKyAgICAgICAgVXNlIHNldExheW91
dE92ZXJmbG93IGluc3RlYWQgb2YgcmVzZXRMYXlvdXRPdmVyZmxvdyAod2hpY2ggaGFzIGJlZW4K
KyAgICAgICAgcmVtb3ZlZCBhcyBpdCBkaWQgZXhhY3RseSB0aGUgc2FtZSB0aGluZyBhcyB0aGUg
c2V0IG1ldGhvZCkuCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWF4TGF5b3V0T3ZlcmZsb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsTGVmdExheW91dE92ZXJmbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3cpOgor
ICAgICAgICBSZW1vdmUgbWluWUxheW91dE92ZXJmbG93LCBtYXhZTGF5b3V0T3ZlcmZsb3csIG1p
blhMYXlvdXRPdmVyZmxvdyBhbmQKKyAgICAgICAgbWF4WExheW91dE92ZXJmbG93IGFuZCB1cGRh
dGUgdGhlIHJlbWFpbmluZyBtZXRob2RzIHRvIHVzZQorICAgICAgICBsYXlvdXRPdmVyZmxvd1Jl
Y3QoKS4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6Y29tcHV0ZVBvc2l0aW9uKToKKyAgICAg
ICAgQ2hhbmdlIHRvIHVzZSBsYXlvdXRPdmVyZmxvd1JlY3QoKS4KKyAgICAgICAgCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
dmVyZmxvdzo6UmVuZGVyT3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT3ZlcmZs
b3c6OmxheW91dE92ZXJmbG93UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPdmVyZmxv
dzo6dmlzdWFsT3ZlcmZsb3dSZWN0KToKKyAgICAgICAgKFJlbmRlck92ZXJmbG93KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck92ZXJmbG93OjpzZXRNaW5ZTGF5b3V0T3ZlcmZsb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT3ZlcmZsb3c6OnNldE1heFlMYXlvdXRPdmVyZmxvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPdmVyZmxvdzo6c2V0TWluWExheW91dE92ZXJmbG93KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck92ZXJmbG93OjpzZXRNYXhYTGF5b3V0T3ZlcmZsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT3ZlcmZsb3c6OnNldE1pbllWaXN1YWxPdmVyZmxv
dyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPdmVyZmxvdzo6c2V0TWF4WVZpc3VhbE92ZXJm
bG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck92ZXJmbG93OjpzZXRNaW5YVmlzdWFsT3Zl
cmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT3ZlcmZsb3c6OnNldE1heFhWaXN1YWxP
dmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck92
ZXJmbG93Ojptb3ZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck92ZXJmbG93OjphZGRMYXlv
dXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPdmVyZmxvdzo6YWRkVmlzdWFs
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT3ZlcmZsb3c6OnNldExheW91dE92
ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck92ZXJmbG93OjpzZXRWaXN1YWxPdmVy
Zmxvdyk6CisgICAgICAgIENoYW5nZSBSZW5kZXJPdmVyZmxvdyB0byB1c2UgdHdvIHJlY3RzIGlu
c3RlYWQgb2YgdHdvIHNldHMgb2YgZm91cgorICAgICAgICB2YWx1ZXMuIFJlbW92ZSBbbWlufG1h
eF1bTGF5b3V0fFZpc3VhbF1PdmVyZmxvdyBnZXR0ZXJzIGFuZCBjaGFuZ2UgdGhlCisgICAgICAg
IGxheW91dE92ZXJmbG93UmVjdCBhbmQgdmlzdWFsT3ZlcmZsb3dSZWN0IG1ldGhvZHMgdG8gcmV0
dXJuIHRoZSByZWN0cy4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludCk6
CisgICAgICAgIENoYW5nZSB0byB1c2UgdmlzdWFsT3ZlcmZsb3dSZWN0KCkuCisgICAgICAgIAor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgQ2hhbmdlIHRvIHVzZSB2aXN1YWxPdmVyZmxv
d1JlY3QoKS4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KToKKyAgICAgICAgQ2hhbmdlIHRvIHVzZSB2aXN1YWxPdmVyZmxvd1JlY3Qo
KS4KKyAgICAgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGVMYXllcnMpOgorICAgICAgICBDaGFuZ2UgdG8gdXNlIGxh
eW91dE92ZXJmbG93UmVjdCgpLgorCiAyMDEyLTA1LTE4ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBBc3NlcnRpb24gZmFpbHVyZSBpbiBCaWRpUmVzb2x2ZXI6OmNv
bW1pdEV4cGxpY2l0RW1iZWRkaW5nKCkgKCFpbklzb2xhdGUoKSB8fCBtX2N1cnJlbnRFeHBsaWNp
dEVtYmVkZGluZ1NlcXVlbmNlLmlzRW1wdHkoKSkgYXQgd2lraXBlZGlhLm9yZwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTE3NjA2KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjc5LDggKzMyNzksOCBA
QCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0CiAgICAgaWYgKFJlbmRl
clZpZXcqIHJvb3QgPSByb290UmVuZGVyZXIodGhpcykpIHsKICAgICAgICAgLy8gVXNlIGEgY29u
dGV4dCB3aXRoIHBhaW50aW5nIGRpc2FibGVkLgogICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dCgoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTApOwotICAgICAgICByb290LT5zZXRUcnVu
Y2F0ZWRBdCgoaW50KWZsb29yZihvbGRCb3R0b20pKTsKLSAgICAgICAgSW50UmVjdCBkaXJ0eVJl
Y3QoMCwgKGludClmbG9vcmYob2xkVG9wKSwgcm9vdC0+bWF4WExheW91dE92ZXJmbG93KCksIChp
bnQpY2VpbGYob2xkQm90dG9tIC0gb2xkVG9wKSk7CisgICAgICAgIHJvb3QtPnNldFRydW5jYXRl
ZEF0KHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZEJvdHRvbSkpKTsKKyAgICAgICAgSW50UmVj
dCBkaXJ0eVJlY3QoMCwgc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJvb3QtPmxh
eW91dE92ZXJmbG93UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0
b20gLSBvbGRUb3ApKSk7CiAgICAgICAgIHJvb3QtPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwog
ICAgICAgICByb290LT5sYXllcigpLT5wYWludCgmY29udGV4dCwgZGlydHlSZWN0KTsKICAgICAg
ICAgKm5ld0JvdHRvbSA9IHJvb3QtPmJlc3RUcnVuY2F0ZWRBdCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiAxMTc2MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MDcsMTggKzIwNywxOCBAQCBwdWJsaWM6CiAgICAgeyAKICAgICAgICAgcmV0dXJuIG1fb3ZlcmZs
b3cgPyBtX292ZXJmbG93LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSA6IGVuY2xvc2luZ0xheW91dFJl
Y3QoZnJhbWVSZWN0SW5jbHVkaW5nTGluZUhlaWdodChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAg
ICAgfQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRMYXlvdXRPdmVyZmxvdygpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmZsb3cgPyAoaXNIb3Jpem9udGFsKCkgPyBtX292ZXJmbG93LT5taW5YTGF5
b3V0T3ZlcmZsb3coKSA6IG1fb3ZlcmZsb3ctPm1pbllMYXlvdXRPdmVyZmxvdygpKSA6IHN0YXRp
Y19jYXN0PExheW91dFVuaXQ+KGxvZ2ljYWxMZWZ0KCkpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHRMYXlvdXRPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyAoaXNI
b3Jpem9udGFsKCkgPyBtX292ZXJmbG93LT5tYXhYTGF5b3V0T3ZlcmZsb3coKSA6IG1fb3ZlcmZs
b3ctPm1heFlMYXlvdXRPdmVyZmxvdygpKSA6IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGNlaWxm
KGxvZ2ljYWxSaWdodCgpKSk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0TGF5b3V0T3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gKGlzSG9yaXpvbnRhbCgpID8gbV9v
dmVyZmxvdy0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkueCgpIDogbV9vdmVyZmxvdy0+bGF5b3V0T3Zl
cmZsb3dSZWN0KCkueSgpKSA6IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGxvZ2ljYWxMZWZ0KCkp
OyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVyZmxvdygpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcmZsb3cgPyAoaXNIb3Jpem9udGFsKCkgPyBtX292ZXJmbG93LT5sYXlvdXRP
dmVyZmxvd1JlY3QoKS5tYXhYKCkgOiBtX292ZXJmbG93LT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5t
YXhZKCkpIDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGYobG9naWNhbFJpZ2h0KCkpKTsg
fQogICAgIExheW91dFVuaXQgbG9naWNhbFRvcExheW91dE92ZXJmbG93KExheW91dFVuaXQgbGlu
ZVRvcCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX292ZXJmbG93KQotICAgICAgICAgICAg
cmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbV9vdmVyZmxvdy0+bWluWUxheW91dE92ZXJmbG93KCkg
OiBtX292ZXJmbG93LT5taW5YTGF5b3V0T3ZlcmZsb3coKTsKKyAgICAgICAgICAgIHJldHVybiBp
c0hvcml6b250YWwoKSA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVjdCgpLnkoKSA6IG1f
b3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVjdCgpLngoKTsKICAgICAgICAgcmV0dXJuIGxpbmVU
b3A7CiAgICAgfQogICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUxheW91dE92ZXJmbG93KExh
eW91dFVuaXQgbGluZUJvdHRvbSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX292ZXJmbG93
KQotICAgICAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbV9vdmVyZmxvdy0+bWF4WUxh
eW91dE92ZXJmbG93KCkgOiBtX292ZXJmbG93LT5tYXhYTGF5b3V0T3ZlcmZsb3coKTsKKyAgICAg
ICAgICAgIHJldHVybiBpc0hvcml6b250YWwoKSA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFkoKSA6IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVjdCgpLm1heFgoKTsK
ICAgICAgICAgcmV0dXJuIGxpbmVCb3R0b207CiAgICAgfQogICAgIExheW91dFJlY3QgbG9naWNh
bExheW91dE92ZXJmbG93UmVjdChMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSkgY29uc3QKQEAgLTIzMywxOCArMjMzLDE4IEBAIHB1YmxpYzoKICAgICB7IAogICAgICAg
ICByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpIDog
ZW5jbG9zaW5nTGF5b3V0UmVjdChmcmFtZVJlY3RJbmNsdWRpbmdMaW5lSGVpZ2h0KGxpbmVUb3As
IGxpbmVCb3R0b20pKTsKICAgICB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdFZpc3VhbE92
ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IChpc0hvcml6b250YWwoKSA/IG1f
b3ZlcmZsb3ctPm1pblhWaXN1YWxPdmVyZmxvdygpIDogbV9vdmVyZmxvdy0+bWluWVZpc3VhbE92
ZXJmbG93KCkpIDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4obG9naWNhbExlZnQoKSk7IH0KLSAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9vdmVyZmxvdyA/IChpc0hvcml6b250YWwoKSA/IG1fb3ZlcmZsb3ctPm1heFhWaXN1YWxPdmVy
ZmxvdygpIDogbV9vdmVyZmxvdy0+bWF4WVZpc3VhbE92ZXJmbG93KCkpIDogc3RhdGljX2Nhc3Q8
TGF5b3V0VW5pdD4oY2VpbGYobG9naWNhbFJpZ2h0KCkpKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbExlZnRWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyAoaXNI
b3Jpem9udGFsKCkgPyBtX292ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKS54KCkgOiBtX292
ZXJmbG93LT52aXN1YWxPdmVyZmxvd1JlY3QoKS55KCkpIDogc3RhdGljX2Nhc3Q8TGF5b3V0VW5p
dD4obG9naWNhbExlZnQoKSk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZpc3VhbE92
ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IChpc0hvcml6b250YWwoKSA/IG1f
b3ZlcmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpLm1heFgoKSA6IG1fb3ZlcmZsb3ctPnZpc3Vh
bE92ZXJmbG93UmVjdCgpLm1heFkoKSkgOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0PihjZWlsZihs
b2dpY2FsUmlnaHQoKSkpOyB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wVmlzdWFsT3ZlcmZs
b3coTGF5b3V0VW5pdCBsaW5lVG9wKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fb3ZlcmZs
b3cpCi0gICAgICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBtX292ZXJmbG93LT5taW5Z
VmlzdWFsT3ZlcmZsb3coKSA6IG1fb3ZlcmZsb3ctPm1pblhWaXN1YWxPdmVyZmxvdygpOworICAg
ICAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZs
b3dSZWN0KCkueSgpIDogbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkueCgpOwogICAg
ICAgICByZXR1cm4gbGluZVRvcDsKICAgICB9CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9t
VmlzdWFsT3ZlcmZsb3coTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdAogICAgIHsKICAgICAg
ICAgaWYgKG1fb3ZlcmZsb3cpCi0gICAgICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsKCkgPyBt
X292ZXJmbG93LT5tYXhZVmlzdWFsT3ZlcmZsb3coKSA6IG1fb3ZlcmZsb3ctPm1heFhWaXN1YWxP
dmVyZmxvdygpOworICAgICAgICAgICAgcmV0dXJuIGlzSG9yaXpvbnRhbCgpID8gbV9vdmVyZmxv
dy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkubWF4WSgpIDogbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZs
b3dSZWN0KCkubWF4WCgpOwogICAgICAgICByZXR1cm4gbGluZUJvdHRvbTsKICAgICB9CiAgICAg
TGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0KExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lQm90dG9tKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDExNzYwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTksOCArNDk5LDggQEAgaW50
IFJlbmRlckJveDo6c2Nyb2xsV2lkdGgoKSBjb25zdAogICAgIC8vIEZvciBvYmplY3RzIHdpdGgg
dmlzaWJsZSBvdmVyZmxvdywgdGhpcyBtYXRjaGVzIElFLgogICAgIC8vIEZJWE1FOiBOZWVkIHRv
IHdvcmsgcmlnaHQgd2l0aCB3cml0aW5nIG1vZGVzLgogICAgIGlmIChzdHlsZSgpLT5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiBzbmFwU2l6ZVRvUGl4ZWwobWF4KGNs
aWVudFdpZHRoKCksIG1heFhMYXlvdXRPdmVyZmxvdygpIC0gYm9yZGVyTGVmdCgpKSwgY2xpZW50
TGVmdCgpKTsKLSAgICByZXR1cm4gY2xpZW50V2lkdGgoKSAtIG1pbihaRVJPX0xBWU9VVF9VTklU
LCBtaW5YTGF5b3V0T3ZlcmZsb3coKSAtIGJvcmRlckxlZnQoKSk7CisgICAgICAgIHJldHVybiBz
bmFwU2l6ZVRvUGl4ZWwobWF4KGNsaWVudFdpZHRoKCksIGxheW91dE92ZXJmbG93UmVjdCgpLm1h
eFgoKSAtIGJvcmRlckxlZnQoKSksIGNsaWVudExlZnQoKSk7CisgICAgcmV0dXJuIGNsaWVudFdp
ZHRoKCkgLSBtaW4oWkVST19MQVlPVVRfVU5JVCwgbGF5b3V0T3ZlcmZsb3dSZWN0KCkueCgpIC0g
Ym9yZGVyTGVmdCgpKTsKIH0KIAogaW50IFJlbmRlckJveDo6c2Nyb2xsSGVpZ2h0KCkgY29uc3QK
QEAgLTUwOSw3ICs1MDksNyBAQCBpbnQgUmVuZGVyQm94OjpzY3JvbGxIZWlnaHQoKSBjb25zdAog
ICAgICAgICByZXR1cm4gbGF5ZXIoKS0+c2Nyb2xsSGVpZ2h0KCk7CiAgICAgLy8gRm9yIG9iamVj
dHMgd2l0aCB2aXNpYmxlIG92ZXJmbG93LCB0aGlzIG1hdGNoZXMgSUUuCiAgICAgLy8gRklYTUU6
IE5lZWQgdG8gd29yayByaWdodCB3aXRoIHdyaXRpbmcgbW9kZXMuCi0gICAgcmV0dXJuIHNuYXBT
aXplVG9QaXhlbChtYXgoY2xpZW50SGVpZ2h0KCksIG1heFlMYXlvdXRPdmVyZmxvdygpIC0gYm9y
ZGVyVG9wKCkpLCBjbGllbnRUb3AoKSk7CisgICAgcmV0dXJuIHNuYXBTaXplVG9QaXhlbChtYXgo
Y2xpZW50SGVpZ2h0KCksIGxheW91dE92ZXJmbG93UmVjdCgpLm1heFkoKSAtIGJvcmRlclRvcCgp
KSwgY2xpZW50VG9wKCkpOwogfQogCiBpbnQgUmVuZGVyQm94OjpzY3JvbGxMZWZ0KCkgY29uc3QK
QEAgLTM3MzUsNyArMzczNSw3IEBAIHZvaWQgUmVuZGVyQm94OjpjbGVhckxheW91dE92ZXJmbG93
KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX292ZXJmbG93LT5yZXNldExh
eW91dE92ZXJmbG93KGJvcmRlckJveFJlY3QoKSk7CisgICAgbV9vdmVyZmxvdy0+c2V0TGF5b3V0
T3ZlcmZsb3coYm9yZGVyQm94UmVjdCgpKTsKIH0KIAogc3RhdGljIGJvb2wgcGVyY2VudGFnZUxv
Z2ljYWxIZWlnaHRJc1Jlc29sdmFibGUoY29uc3QgUmVuZGVyQm94KiBib3gpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAxMTc2MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MywyMSAr
MTYzLDEzIEBAIHB1YmxpYzoKICAgICAvLyBidXQgaXQgaXMgb24gdGhlIHJpZ2h0IGluIHZlcnRp
Y2FsLXJsLgogICAgIExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxheW91dE92ZXJmbG93UmVjdCgpIDogY2xpZW50
Qm94UmVjdCgpOyB9CiAgICAgSW50UmVjdCBwaXhlbFNuYXBwZWRMYXlvdXRPdmVyZmxvd1JlY3Qo
KSBjb25zdCB7IHJldHVybiBwaXhlbFNuYXBwZWRJbnRSZWN0KGxheW91dE92ZXJmbG93UmVjdCgp
KTsgfQotICAgIExheW91dFVuaXQgbWluWUxheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4g
bV9vdmVyZmxvdz8gbV9vdmVyZmxvdy0+bWluWUxheW91dE92ZXJmbG93KCkgOiBzdGF0aWNfY2Fz
dDxMYXlvdXRVbml0Pihib3JkZXJUb3AoKSk7IH0KLSAgICBMYXlvdXRVbml0IG1heFlMYXlvdXRP
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5tYXhZTGF5
b3V0T3ZlcmZsb3coKSA6IHN0YXRpY19jYXN0PExheW91dFVuaXQ+KGJvcmRlclRvcCgpKSArIGNs
aWVudEhlaWdodCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBtaW5YTGF5b3V0T3ZlcmZsb3coKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bWluWExheW91dE92ZXJmbG93KCkg
OiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0Pihib3JkZXJMZWZ0KCkpOyB9Ci0gICAgTGF5b3V0VW5p
dCBtYXhYTGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVy
Zmxvdy0+bWF4WExheW91dE92ZXJmbG93KCkgOiBzdGF0aWNfY2FzdDxMYXlvdXRVbml0Pihib3Jk
ZXJMZWZ0KCkpICsgY2xpZW50V2lkdGgoKTsgfQotICAgIExheW91dFNpemUgbWF4TGF5b3V0T3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKG1heFhMYXlvdXRPdmVyZmxvdygpLCBt
YXhZTGF5b3V0T3ZlcmZsb3coKSk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0TGF5b3V0
T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gbWluWExheW91dE92ZXJmbG93KCkgOiBtaW5ZTGF5b3V0T3ZlcmZsb3coKTsgfQotICAg
IExheW91dFVuaXQgbG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4WExheW91dE92ZXJmbG93KCkg
OiBtYXhZTGF5b3V0T3ZlcmZsb3coKTsgfQorICAgIExheW91dFNpemUgbWF4TGF5b3V0T3ZlcmZs
b3coKSBjb25zdCB7IHJldHVybiBMYXlvdXRTaXplKGxheW91dE92ZXJmbG93UmVjdCgpLm1heFgo
KSwgbGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WSgpKTsgfQorICAgIExheW91dFVuaXQgbG9naWNh
bExlZnRMYXlvdXRPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBsYXlvdXRPdmVyZmxvd1JlY3QoKS54KCkgOiBsYXlvdXRPdmVyZmxv
d1JlY3QoKS55KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodExheW91dE92ZXJmbG93
KCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxh
eW91dE92ZXJmbG93UmVjdCgpLm1heFgoKSA6IGxheW91dE92ZXJmbG93UmVjdCgpLm1heFkoKTsg
fQogICAgIAogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QoKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkg
OiBib3JkZXJCb3hSZWN0KCk7IH0KLSAgICBMYXlvdXRVbml0IG1pbllWaXN1YWxPdmVyZmxvdygp
IGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3c/IG1fb3ZlcmZsb3ctPm1pbllWaXN1YWxPdmVyZmxv
dygpIDogWkVST19MQVlPVVRfVU5JVDsgfQotICAgIExheW91dFVuaXQgbWF4WVZpc3VhbE92ZXJm
bG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPm1heFlWaXN1YWxP
dmVyZmxvdygpIDogaGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IG1pblhWaXN1YWxPdmVyZmxv
dygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5taW5YVmlzdWFsT3Zl
cmZsb3coKSA6IFpFUk9fTEFZT1VUX1VOSVQ7IH0KLSAgICBMYXlvdXRVbml0IG1heFhWaXN1YWxP
dmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5tYXhYVmlz
dWFsT3ZlcmZsb3coKSA6IHdpZHRoKCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0Vmlz
dWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gbWluWFZpc3VhbE92ZXJmbG93KCkgOiBtaW5ZVmlzdWFsT3ZlcmZsb3coKTsgfQot
ICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVy
biBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbWF4WFZpc3VhbE92ZXJmbG93
KCkgOiBtYXhZVmlzdWFsT3ZlcmZsb3coKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRW
aXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyB2aXN1YWxPdmVyZmxvd1JlY3QoKS54KCkgOiB2aXN1YWxPdmVyZmxvd1JlY3Qo
KS55KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodFZpc3VhbE92ZXJmbG93KCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHZpc3VhbE92
ZXJmbG93UmVjdCgpLm1heFgoKSA6IHZpc3VhbE92ZXJmbG93UmVjdCgpLm1heFkoKTsgfQogICAg
IAogICAgIHZvaWQgYWRkTGF5b3V0T3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYpOwogICAgIHZv
aWQgYWRkVmlzdWFsT3ZlcmZsb3coY29uc3QgTGF5b3V0UmVjdCYpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gMTE3NjA2KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcsNyArMTM3LDcgQEAgaW50IFJlbmRlck1hcnF1ZWU6OmNvbXB1dGVQb3NpdGlvbihF
TWFycQogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpbnQgY29udGVudEhl
aWdodCA9IGJveC0+bWF4WUxheW91dE92ZXJmbG93KCkgLSBib3gtPmJvcmRlclRvcCgpICsgYm94
LT5wYWRkaW5nQm90dG9tKCk7CisgICAgICAgIGludCBjb250ZW50SGVpZ2h0ID0gYm94LT5sYXlv
dXRPdmVyZmxvd1JlY3QoKS5tYXhZKCkgLSBib3gtPmJvcmRlclRvcCgpICsgYm94LT5wYWRkaW5n
Qm90dG9tKCk7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBib3gtPmNsaWVudEhlaWdodCgp
OwogICAgICAgICBpZiAoZGlyID09IE1VUCkgewogICAgICAgICAgICAgaWYgKHN0b3BBdENvbnRl
bnRFZGdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck92ZXJmbG93LmgJ
KHJldmlzaW9uIDExNzYwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPdmVy
Zmxvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwzOCArNDEsMjMgQEAgY2xhc3MgUmVuZGVyT3Zl
cmZsb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlbmRlck92ZXJmbG93KTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUmVuZGVyT3ZlcmZsb3coY29uc3QgTGF5
b3V0UmVjdCYgbGF5b3V0UmVjdCwgY29uc3QgTGF5b3V0UmVjdCYgdmlzdWFsUmVjdCkgCi0gICAg
ICAgIDogbV9taW5ZTGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC55KCkpCi0gICAgICAgICwgbV9t
YXhZTGF5b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC5tYXhZKCkpCi0gICAgICAgICwgbV9taW5YTGF5
b3V0T3ZlcmZsb3cobGF5b3V0UmVjdC54KCkpCi0gICAgICAgICwgbV9tYXhYTGF5b3V0T3ZlcmZs
b3cobGF5b3V0UmVjdC5tYXhYKCkpCi0gICAgICAgICwgbV9taW5ZVmlzdWFsT3ZlcmZsb3codmlz
dWFsUmVjdC55KCkpCi0gICAgICAgICwgbV9tYXhZVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC5t
YXhZKCkpCi0gICAgICAgICwgbV9taW5YVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC54KCkpCi0g
ICAgICAgICwgbV9tYXhYVmlzdWFsT3ZlcmZsb3codmlzdWFsUmVjdC5tYXhYKCkpCisgICAgICAg
IDogbV9sYXlvdXRPdmVyZmxvdyhsYXlvdXRSZWN0KQorICAgICAgICAsIG1fdmlzdWFsT3ZlcmZs
b3codmlzdWFsUmVjdCkKICAgICB7CiAgICAgfQogICAgCi0gICAgTGF5b3V0VW5pdCBtaW5ZTGF5
b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX21pbllMYXlvdXRPdmVyZmxvdzsgfQotICAg
IExheW91dFVuaXQgbWF4WUxheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9tYXhZTGF5
b3V0T3ZlcmZsb3c7IH0KLSAgICBMYXlvdXRVbml0IG1pblhMYXlvdXRPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIG1fbWluWExheW91dE92ZXJmbG93OyB9Ci0gICAgTGF5b3V0VW5pdCBtYXhYTGF5
b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX21heFhMYXlvdXRPdmVyZmxvdzsgfQotICAg
IExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0KCkgY29uc3Q7Ci0KLSAgICBMYXlvdXRVbml0
IG1pbllWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fbWluWVZpc3VhbE92ZXJmbG93
OyB9Ci0gICAgTGF5b3V0VW5pdCBtYXhZVmlzdWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBt
X21heFlWaXN1YWxPdmVyZmxvdzsgfQotICAgIExheW91dFVuaXQgbWluWFZpc3VhbE92ZXJmbG93
KCkgY29uc3QgeyByZXR1cm4gbV9taW5YVmlzdWFsT3ZlcmZsb3c7IH0KLSAgICBMYXlvdXRVbml0
IG1heFhWaXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4WFZpc3VhbE92ZXJmbG93
OyB9Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QoKSBjb25zdDsKLQotICAgIHZv
aWQgc2V0TWluWUxheW91dE92ZXJmbG93KExheW91dFVuaXQgb3ZlcmZsb3cpIHsgbV9taW5ZTGF5
b3V0T3ZlcmZsb3cgPSBvdmVyZmxvdzsgfQotICAgIHZvaWQgc2V0TWF4WUxheW91dE92ZXJmbG93
KExheW91dFVuaXQgb3ZlcmZsb3cpIHsgbV9tYXhZTGF5b3V0T3ZlcmZsb3cgPSBvdmVyZmxvdzsg
fQotICAgIHZvaWQgc2V0TWluWExheW91dE92ZXJmbG93KExheW91dFVuaXQgb3ZlcmZsb3cpIHsg
bV9taW5YTGF5b3V0T3ZlcmZsb3cgPSBvdmVyZmxvdzsgfQotICAgIHZvaWQgc2V0TWF4WExheW91
dE92ZXJmbG93KExheW91dFVuaXQgb3ZlcmZsb3cpIHsgbV9tYXhYTGF5b3V0T3ZlcmZsb3cgPSBv
dmVyZmxvdzsgfQorICAgIGNvbnN0IExheW91dFJlY3QgbGF5b3V0T3ZlcmZsb3dSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRPdmVyZmxvdzsgfQorICAgIGNvbnN0IExheW91dFJlY3Qgdmlz
dWFsT3ZlcmZsb3dSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXN1YWxPdmVyZmxvdzsgfQorCisg
ICAgdm9pZCBzZXRNaW5ZTGF5b3V0T3ZlcmZsb3coTGF5b3V0VW5pdCBvdmVyZmxvdykgeyBtX2xh
eW91dE92ZXJmbG93LnNldFkob3ZlcmZsb3cpOyB9CisgICAgdm9pZCBzZXRNYXhZTGF5b3V0T3Zl
cmZsb3coTGF5b3V0VW5pdCBvdmVyZmxvdykgeyBtX2xheW91dE92ZXJmbG93LnNldEhlaWdodChv
dmVyZmxvdyAtIG1fbGF5b3V0T3ZlcmZsb3cueSgpKTsgfQorICAgIHZvaWQgc2V0TWluWExheW91
dE92ZXJmbG93KExheW91dFVuaXQgb3ZlcmZsb3cpIHsgbV9sYXlvdXRPdmVyZmxvdy5zZXRYKG92
ZXJmbG93KTsgfQorICAgIHZvaWQgc2V0TWF4WExheW91dE92ZXJmbG93KExheW91dFVuaXQgb3Zl
cmZsb3cpIHsgbV9sYXlvdXRPdmVyZmxvdy5zZXRXaWR0aChvdmVyZmxvdyAtIG1fbGF5b3V0T3Zl
cmZsb3cueCgpKTsgfQogICAgIAotICAgIHZvaWQgc2V0TWluWVZpc3VhbE92ZXJmbG93KExheW91
dFVuaXQgb3ZlcmZsb3cpIHsgbV9taW5ZVmlzdWFsT3ZlcmZsb3cgPSBvdmVyZmxvdzsgfQotICAg
IHZvaWQgc2V0TWF4WVZpc3VhbE92ZXJmbG93KExheW91dFVuaXQgb3ZlcmZsb3cpIHsgbV9tYXhZ
VmlzdWFsT3ZlcmZsb3cgPSBvdmVyZmxvdzsgfQotICAgIHZvaWQgc2V0TWluWFZpc3VhbE92ZXJm
bG93KExheW91dFVuaXQgb3ZlcmZsb3cpIHsgbV9taW5YVmlzdWFsT3ZlcmZsb3cgPSBvdmVyZmxv
dzsgfQotICAgIHZvaWQgc2V0TWF4WFZpc3VhbE92ZXJmbG93KExheW91dFVuaXQgb3ZlcmZsb3cp
IHsgbV9tYXhYVmlzdWFsT3ZlcmZsb3cgPSBvdmVyZmxvdzsgfQorICAgIHZvaWQgc2V0TWluWVZp
c3VhbE92ZXJmbG93KExheW91dFVuaXQgb3ZlcmZsb3cpIHsgbV92aXN1YWxPdmVyZmxvdy5zZXRZ
KG92ZXJmbG93KTsgfQorICAgIHZvaWQgc2V0TWF4WVZpc3VhbE92ZXJmbG93KExheW91dFVuaXQg
b3ZlcmZsb3cpIHsgbV92aXN1YWxPdmVyZmxvdy5zZXRIZWlnaHQob3ZlcmZsb3cgLSBtX2xheW91
dE92ZXJmbG93LnkoKSk7IH0KKyAgICB2b2lkIHNldE1pblhWaXN1YWxPdmVyZmxvdyhMYXlvdXRV
bml0IG92ZXJmbG93KSB7IG1fdmlzdWFsT3ZlcmZsb3cuc2V0WChvdmVyZmxvdyk7IH0KKyAgICB2
b2lkIHNldE1heFhWaXN1YWxPdmVyZmxvdyhMYXlvdXRVbml0IG92ZXJmbG93KSB7IG1fdmlzdWFs
T3ZlcmZsb3cuc2V0V2lkdGgob3ZlcmZsb3cgLSBtX2xheW91dE92ZXJmbG93LngoKSk7IH0KICAg
ICAKICAgICB2b2lkIG1vdmUoTGF5b3V0VW5pdCBkeCwgTGF5b3V0VW5pdCBkeSk7CiAgICAgCkBA
IC04Miw4MSArNjcsNDUgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TGF5b3V0T3ZlcmZsb3coY29u
c3QgTGF5b3V0UmVjdCYpOwogICAgIHZvaWQgc2V0VmlzdWFsT3ZlcmZsb3coY29uc3QgTGF5b3V0
UmVjdCYpOwogCi0gICAgdm9pZCByZXNldExheW91dE92ZXJmbG93KGNvbnN0IExheW91dFJlY3Qm
IGRlZmF1bHRSZWN0KTsKLQogcHJpdmF0ZToKLSAgICBMYXlvdXRVbml0IG1fbWluWUxheW91dE92
ZXJmbG93OwotICAgIExheW91dFVuaXQgbV9tYXhZTGF5b3V0T3ZlcmZsb3c7Ci0gICAgTGF5b3V0
VW5pdCBtX21pblhMYXlvdXRPdmVyZmxvdzsKLSAgICBMYXlvdXRVbml0IG1fbWF4WExheW91dE92
ZXJmbG93OwotCi0gICAgTGF5b3V0VW5pdCBtX21pbllWaXN1YWxPdmVyZmxvdzsKLSAgICBMYXlv
dXRVbml0IG1fbWF4WVZpc3VhbE92ZXJmbG93OwotICAgIExheW91dFVuaXQgbV9taW5YVmlzdWFs
T3ZlcmZsb3c7Ci0gICAgTGF5b3V0VW5pdCBtX21heFhWaXN1YWxPdmVyZmxvdzsKKyAgICBMYXlv
dXRSZWN0IG1fbGF5b3V0T3ZlcmZsb3c7CisgICAgTGF5b3V0UmVjdCBtX3Zpc3VhbE92ZXJmbG93
OwogfTsKIAotaW5saW5lIExheW91dFJlY3QgUmVuZGVyT3ZlcmZsb3c6OmxheW91dE92ZXJmbG93
UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExheW91dFJlY3QobV9taW5YTGF5b3V0T3ZlcmZs
b3csIG1fbWluWUxheW91dE92ZXJmbG93LCBtX21heFhMYXlvdXRPdmVyZmxvdyAtIG1fbWluWExh
eW91dE92ZXJmbG93LCBtX21heFlMYXlvdXRPdmVyZmxvdyAtIG1fbWluWUxheW91dE92ZXJmbG93
KTsKLX0KLQotaW5saW5lIExheW91dFJlY3QgUmVuZGVyT3ZlcmZsb3c6OnZpc3VhbE92ZXJmbG93
UmVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIExheW91dFJlY3QobV9taW5YVmlzdWFsT3ZlcmZs
b3csIG1fbWluWVZpc3VhbE92ZXJmbG93LCBtX21heFhWaXN1YWxPdmVyZmxvdyAtIG1fbWluWFZp
c3VhbE92ZXJmbG93LCBtX21heFlWaXN1YWxPdmVyZmxvdyAtIG1fbWluWVZpc3VhbE92ZXJmbG93
KTsKLX0KLQogaW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6Om1vdmUoTGF5b3V0VW5pdCBkeCwg
TGF5b3V0VW5pdCBkeSkKIHsKLSAgICBtX21pbllMYXlvdXRPdmVyZmxvdyArPSBkeTsKLSAgICBt
X21heFlMYXlvdXRPdmVyZmxvdyArPSBkeTsKLSAgICBtX21pblhMYXlvdXRPdmVyZmxvdyArPSBk
eDsKLSAgICBtX21heFhMYXlvdXRPdmVyZmxvdyArPSBkeDsKLSAgICAKLSAgICBtX21pbllWaXN1
YWxPdmVyZmxvdyArPSBkeTsKLSAgICBtX21heFlWaXN1YWxPdmVyZmxvdyArPSBkeTsKLSAgICBt
X21pblhWaXN1YWxPdmVyZmxvdyArPSBkeDsKLSAgICBtX21heFhWaXN1YWxPdmVyZmxvdyArPSBk
eDsKKyAgICBtX2xheW91dE92ZXJmbG93Lm1vdmUoZHgsIGR5KTsKKyAgICBtX3Zpc3VhbE92ZXJm
bG93Lm1vdmUoZHgsIGR5KTsKIH0KIAogaW5saW5lIHZvaWQgUmVuZGVyT3ZlcmZsb3c6OmFkZExh
eW91dE92ZXJmbG93KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCiB7Ci0gICAgbV9taW5ZTGF5b3V0
T3ZlcmZsb3cgPSBzdGQ6Om1pbihyZWN0LnkoKSwgbV9taW5ZTGF5b3V0T3ZlcmZsb3cpOwotICAg
IG1fbWF4WUxheW91dE92ZXJmbG93ID0gc3RkOjptYXgocmVjdC5tYXhZKCksIG1fbWF4WUxheW91
dE92ZXJmbG93KTsKLSAgICBtX21pblhMYXlvdXRPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueCgp
LCBtX21pblhMYXlvdXRPdmVyZmxvdyk7Ci0gICAgbV9tYXhYTGF5b3V0T3ZlcmZsb3cgPSBzdGQ6
Om1heChyZWN0Lm1heFgoKSwgbV9tYXhYTGF5b3V0T3ZlcmZsb3cpOworICAgIExheW91dFVuaXQg
bWF4WCA9IHN0ZDo6bWF4KHJlY3QubWF4WCgpLCBtX2xheW91dE92ZXJmbG93Lm1heFgoKSk7Cisg
ICAgTGF5b3V0VW5pdCBtYXhZID0gc3RkOjptYXgocmVjdC5tYXhZKCksIG1fbGF5b3V0T3ZlcmZs
b3cubWF4WSgpKTsKKyAgICBtX2xheW91dE92ZXJmbG93LnNldFgoc3RkOjptaW4ocmVjdC54KCks
IG1fbGF5b3V0T3ZlcmZsb3cueCgpKSk7CisgICAgbV9sYXlvdXRPdmVyZmxvdy5zZXRZKHN0ZDo6
bWluKHJlY3QueSgpLCBtX2xheW91dE92ZXJmbG93LnkoKSkpOworICAgIG1fbGF5b3V0T3ZlcmZs
b3cuc2V0V2lkdGgobWF4WCAtIG1fbGF5b3V0T3ZlcmZsb3cueCgpKTsKKyAgICBtX2xheW91dE92
ZXJmbG93LnNldEhlaWdodChtYXhZIC0gbV9sYXlvdXRPdmVyZmxvdy55KCkpOwogfQogCiBpbmxp
bmUgdm9pZCBSZW5kZXJPdmVyZmxvdzo6YWRkVmlzdWFsT3ZlcmZsb3coY29uc3QgTGF5b3V0UmVj
dCYgcmVjdCkKIHsKLSAgICBtX21pbllWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWluKHJlY3QueSgp
LCBtX21pbllWaXN1YWxPdmVyZmxvdyk7Ci0gICAgbV9tYXhZVmlzdWFsT3ZlcmZsb3cgPSBzdGQ6
Om1heChyZWN0Lm1heFkoKSwgbV9tYXhZVmlzdWFsT3ZlcmZsb3cpOwotICAgIG1fbWluWFZpc3Vh
bE92ZXJmbG93ID0gc3RkOjptaW4ocmVjdC54KCksIG1fbWluWFZpc3VhbE92ZXJmbG93KTsKLSAg
ICBtX21heFhWaXN1YWxPdmVyZmxvdyA9IHN0ZDo6bWF4KHJlY3QubWF4WCgpLCBtX21heFhWaXN1
YWxPdmVyZmxvdyk7CisgICAgTGF5b3V0VW5pdCBtYXhYID0gc3RkOjptYXgocmVjdC5tYXhYKCks
IG1fdmlzdWFsT3ZlcmZsb3cubWF4WCgpKTsKKyAgICBMYXlvdXRVbml0IG1heFkgPSBzdGQ6Om1h
eChyZWN0Lm1heFkoKSwgbV92aXN1YWxPdmVyZmxvdy5tYXhZKCkpOworICAgIG1fdmlzdWFsT3Zl
cmZsb3cuc2V0WChzdGQ6Om1pbihyZWN0LngoKSwgbV92aXN1YWxPdmVyZmxvdy54KCkpKTsKKyAg
ICBtX3Zpc3VhbE92ZXJmbG93LnNldFkoc3RkOjptaW4ocmVjdC55KCksIG1fdmlzdWFsT3ZlcmZs
b3cueSgpKSk7CisgICAgbV92aXN1YWxPdmVyZmxvdy5zZXRXaWR0aChtYXhYIC0gbV92aXN1YWxP
dmVyZmxvdy54KCkpOworICAgIG1fdmlzdWFsT3ZlcmZsb3cuc2V0SGVpZ2h0KG1heFkgLSBtX3Zp
c3VhbE92ZXJmbG93LnkoKSk7CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpzZXRM
YXlvdXRPdmVyZmxvdyhjb25zdCBMYXlvdXRSZWN0JiByZWN0KQogewotICAgIG1fbWluWUxheW91
dE92ZXJmbG93ID0gcmVjdC55KCk7Ci0gICAgbV9tYXhZTGF5b3V0T3ZlcmZsb3cgPSByZWN0Lm1h
eFkoKTsKLSAgICBtX21pblhMYXlvdXRPdmVyZmxvdyA9IHJlY3QueCgpOwotICAgIG1fbWF4WExh
eW91dE92ZXJmbG93ID0gcmVjdC5tYXhYKCk7CisgICAgbV9sYXlvdXRPdmVyZmxvdyA9IHJlY3Q7
CiB9CiAKIGlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpzZXRWaXN1YWxPdmVyZmxvdyhjb25z
dCBMYXlvdXRSZWN0JiByZWN0KQogewotICAgIG1fbWluWVZpc3VhbE92ZXJmbG93ID0gcmVjdC55
KCk7Ci0gICAgbV9tYXhZVmlzdWFsT3ZlcmZsb3cgPSByZWN0Lm1heFkoKTsKLSAgICBtX21pblhW
aXN1YWxPdmVyZmxvdyA9IHJlY3QueCgpOwotICAgIG1fbWF4WFZpc3VhbE92ZXJmbG93ID0gcmVj
dC5tYXhYKCk7Ci19Ci0KLWlubGluZSB2b2lkIFJlbmRlck92ZXJmbG93OjpyZXNldExheW91dE92
ZXJmbG93KGNvbnN0IExheW91dFJlY3QmIHJlY3QpCi17Ci0gICAgbV9taW5ZTGF5b3V0T3ZlcmZs
b3cgPSByZWN0LnkoKTsKLSAgICBtX21heFlMYXlvdXRPdmVyZmxvdyA9IHJlY3QubWF4WSgpOwot
ICAgIG1fbWluWExheW91dE92ZXJmbG93ID0gcmVjdC54KCk7Ci0gICAgbV9tYXhYTGF5b3V0T3Zl
cmZsb3cgPSByZWN0Lm1heFgoKTsKKyAgICBtX3Zpc3VhbE92ZXJmbG93ID0gcmVjdDsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAxMTc2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsOCArMTgx
LDggQEAgYm9vbCBSZW5kZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQoUGFpbnRJbgogICAgIExheW91
dFBvaW50IGFkanVzdGVkUGFpbnRPZmZzZXQgPSBwYWludE9mZnNldCArIGxvY2F0aW9uKCk7CiAK
ICAgICAvLyBFYXJseSBleGl0IGlmIHRoZSBlbGVtZW50IHRvdWNoZXMgdGhlIGVkZ2VzLgotICAg
IExheW91dFVuaXQgdG9wID0gYWRqdXN0ZWRQYWludE9mZnNldC55KCkgKyBtaW5ZVmlzdWFsT3Zl
cmZsb3coKTsKLSAgICBMYXlvdXRVbml0IGJvdHRvbSA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgp
ICsgbWF4WVZpc3VhbE92ZXJmbG93KCk7CisgICAgTGF5b3V0VW5pdCB0b3AgPSBhZGp1c3RlZFBh
aW50T2Zmc2V0LnkoKSArIHZpc3VhbE92ZXJmbG93UmVjdCgpLnkoKTsKKyAgICBMYXlvdXRVbml0
IGJvdHRvbSA9IGFkanVzdGVkUGFpbnRPZmZzZXQueSgpICsgdmlzdWFsT3ZlcmZsb3dSZWN0KCku
bWF4WSgpOwogICAgIGlmIChpc1NlbGVjdGVkKCkgJiYgbV9pbmxpbmVCb3hXcmFwcGVyKSB7CiAg
ICAgICAgIExheW91dFVuaXQgc2VsVG9wID0gcGFpbnRPZmZzZXQueSgpICsgbV9pbmxpbmVCb3hX
cmFwcGVyLT5yb290KCktPnNlbGVjdGlvblRvcCgpOwogICAgICAgICBMYXlvdXRVbml0IHNlbEJv
dHRvbSA9IHBhaW50T2Zmc2V0LnkoKSArIHNlbFRvcCArIG1faW5saW5lQm94V3JhcHBlci0+cm9v
dCgpLT5zZWxlY3Rpb25IZWlnaHQoKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBib29sIFJlbmRlclJl
cGxhY2VkOjpzaG91bGRQYWludChQYWludEluCiAgICAgCiAgICAgTGF5b3V0UmVjdCBsb2NhbFJl
cGFpbnRSZWN0ID0gcGFpbnRJbmZvLnJlY3Q7CiAgICAgbG9jYWxSZXBhaW50UmVjdC5pbmZsYXRl
KG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKLSAgICBpZiAoYWRqdXN0ZWRQ
YWludE9mZnNldC54KCkgKyBtaW5YVmlzdWFsT3ZlcmZsb3coKSA+PSBsb2NhbFJlcGFpbnRSZWN0
Lm1heFgoKSB8fCBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIG1heFhWaXN1YWxPdmVyZmxvdygp
IDw9IGxvY2FsUmVwYWludFJlY3QueCgpKQorICAgIGlmIChhZGp1c3RlZFBhaW50T2Zmc2V0Lngo
KSArIHZpc3VhbE92ZXJmbG93UmVjdCgpLngoKSA+PSBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSB8
fCBhZGp1c3RlZFBhaW50T2Zmc2V0LngoKSArIHZpc3VhbE92ZXJmbG93UmVjdCgpLm1heFgoKSA8
PSBsb2NhbFJlcGFpbnRSZWN0LngoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KHRvcCA+PSBsb2NhbFJlcGFpbnRSZWN0Lm1heFkoKSB8fCBib3R0b20gPD0gbG9jYWxSZXBhaW50
UmVjdC55KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJ
KHJldmlzaW9uIDExNzYwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIFJlbmRlclRhYmxl
OjpsYXlvdXQoKQogICAgIHdoaWxlIChzZWN0aW9uKSB7CiAgICAgICAgIGlmICghc2VjdGlvbk1v
dmVkICYmIHNlY3Rpb24tPmxvZ2ljYWxUb3AoKSAhPSBsb2dpY2FsSGVpZ2h0KCkpIHsKICAgICAg
ICAgICAgIHNlY3Rpb25Nb3ZlZCA9IHRydWU7Ci0gICAgICAgICAgICBtb3ZlZFNlY3Rpb25Mb2dp
Y2FsVG9wID0gbWluKGxvZ2ljYWxIZWlnaHQoKSwgc2VjdGlvbi0+bG9naWNhbFRvcCgpKSArIChz
dHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gc2VjdGlvbi0+bWluWVZpc3VhbE92
ZXJmbG93KCkgOiBzZWN0aW9uLT5taW5YVmlzdWFsT3ZlcmZsb3coKSk7CisgICAgICAgICAgICBt
b3ZlZFNlY3Rpb25Mb2dpY2FsVG9wID0gbWluKGxvZ2ljYWxIZWlnaHQoKSwgc2VjdGlvbi0+bG9n
aWNhbFRvcCgpKSArIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gc2VjdGlv
bi0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkueSgpIDogc2VjdGlvbi0+dmlzdWFsT3ZlcmZsb3dSZWN0
KCkueCgpKTsKICAgICAgICAgfQogICAgICAgICBzZWN0aW9uLT5zZXRMb2dpY2FsTG9jYXRpb24o
TGF5b3V0UG9pbnQoc2VjdGlvbkxvZ2ljYWxMZWZ0LCBsb2dpY2FsSGVpZ2h0KCkpKTsKIApAQCAt
NDYyLDkgKzQ2Miw5IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgLy8gUmVwYWlu
dCB3aXRoIG91ciBuZXcgYm91bmRzIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIG91ciBvbGQg
Ym91bmRzLgogICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYgc2VjdGlvbk1vdmVkKSB7CiAgICAg
ICAgIGlmIChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAg
cmVwYWludFJlY3RhbmdsZShMYXlvdXRSZWN0KG1pblhWaXN1YWxPdmVyZmxvdygpLCBtb3ZlZFNl
Y3Rpb25Mb2dpY2FsVG9wLCBtYXhYVmlzdWFsT3ZlcmZsb3coKSAtIG1pblhWaXN1YWxPdmVyZmxv
dygpLCBtYXhZVmlzdWFsT3ZlcmZsb3coKSAtIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3ApKTsKKyAg
ICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUoTGF5b3V0UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3Qo
KS54KCksIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3AsIHZpc3VhbE92ZXJmbG93UmVjdCgpLndpZHRo
KCksIHZpc3VhbE92ZXJmbG93UmVjdCgpLm1heFkoKSAtIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3Ap
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZShMYXlvdXRSZWN0
KG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3AsIG1pbllWaXN1YWxPdmVyZmxvdygpLCBtYXhYVmlzdWFs
T3ZlcmZsb3coKSAtIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3AsIG1heFlWaXN1YWxPdmVyZmxvdygp
IC0gbWluWVZpc3VhbE92ZXJmbG93KCkpKTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUo
TGF5b3V0UmVjdChtb3ZlZFNlY3Rpb25Mb2dpY2FsVG9wLCB2aXN1YWxPdmVyZmxvd1JlY3QoKS55
KCksIHZpc3VhbE92ZXJmbG93UmVjdCgpLm1heFgoKSAtIG1vdmVkU2VjdGlvbkxvZ2ljYWxUb3As
IHZpc3VhbE92ZXJmbG93UmVjdCgpLmhlaWdodCgpKSk7CiAgICAgfQogCiAgICAgc2V0TmVlZHNM
YXlvdXQoZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlQ2VsbC5jcHAJKHJldmlzaW9uIDExNzYwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsOCArMjkwLDggQEAg
TGF5b3V0UmVjdCBSZW5kZXJUYWJsZUNlbGw6OmNsaXBwZWRPdmVyZgogICAgICAgICAgICAgcmln
aHQgPSBtYXgocmlnaHQsIGJlbG93LT5ib3JkZXJIYWxmUmlnaHQodHJ1ZSkpOwogICAgICAgICB9
CiAgICAgfQotICAgIExheW91dFBvaW50IGxvY2F0aW9uKG1heDxMYXlvdXRVbml0PihsZWZ0LCAt
bWluWFZpc3VhbE92ZXJmbG93KCkpLCBtYXg8TGF5b3V0VW5pdD4odG9wLCAtbWluWVZpc3VhbE92
ZXJmbG93KCkpKTsKLSAgICBMYXlvdXRSZWN0IHIoLWxvY2F0aW9uLngoKSwgLWxvY2F0aW9uLnko
KSwgbG9jYXRpb24ueCgpICsgbWF4KHdpZHRoKCkgKyByaWdodCwgbWF4WFZpc3VhbE92ZXJmbG93
KCkpLCBsb2NhdGlvbi55KCkgKyBtYXgoaGVpZ2h0KCkgKyBib3R0b20sIG1heFlWaXN1YWxPdmVy
ZmxvdygpKSk7CisgICAgTGF5b3V0UG9pbnQgbG9jYXRpb24obWF4PExheW91dFVuaXQ+KGxlZnQs
IC12aXN1YWxPdmVyZmxvd1JlY3QoKS54KCkpLCBtYXg8TGF5b3V0VW5pdD4odG9wLCAtdmlzdWFs
T3ZlcmZsb3dSZWN0KCkueSgpKSk7CisgICAgTGF5b3V0UmVjdCByKC1sb2NhdGlvbi54KCksIC1s
b2NhdGlvbi55KCksIGxvY2F0aW9uLngoKSArIG1heCh3aWR0aCgpICsgcmlnaHQsIHZpc3VhbE92
ZXJmbG93UmVjdCgpLm1heFgoKSksIGxvY2F0aW9uLnkoKSArIG1heChoZWlnaHQoKSArIGJvdHRv
bSwgdmlzdWFsT3ZlcmZsb3dSZWN0KCkubWF4WSgpKSk7CiAKICAgICBpZiAoUmVuZGVyVmlldyog
diA9IHZpZXcoKSkgewogICAgICAgICAvLyBGSVhNRTogbGF5b3V0RGVsdGEgbmVlZHMgdG8gYmUg
YXBwbGllZCBpbiBwYXJ0cyBiZWZvcmUvYWZ0ZXIgdHJhbnNmb3JtcyBhbmQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHJldmlzaW9uIDEx
NzYwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzEwLDggKzcxMCw4IEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJz
KFRleHRTdHJlYW0mIHRzLCAKICAgICAvLyBGSVhNRTogQXBwbHkgb3ZlcmZsb3cgdG8gdGhlIHJv
b3QgbGF5ZXIgdG8gbm90IGJyZWFrIGV2ZXJ5IHRlc3QuICBDb21wbGV0ZSBoYWNrLiAgU2lnaC4K
ICAgICBMYXlvdXRSZWN0IHBhaW50RGlydHlSZWN0KHBhaW50UmVjdCk7CiAgICAgaWYgKHJvb3RM
YXllciA9PSBsKSB7Ci0gICAgICAgIHBhaW50RGlydHlSZWN0LnNldFdpZHRoKG1heDxMYXlvdXRV
bml0PihwYWludERpcnR5UmVjdC53aWR0aCgpLCByb290TGF5ZXItPnJlbmRlckJveCgpLT5tYXhY
TGF5b3V0T3ZlcmZsb3coKSkpOwotICAgICAgICBwYWludERpcnR5UmVjdC5zZXRIZWlnaHQobWF4
PExheW91dFVuaXQ+KHBhaW50RGlydHlSZWN0LmhlaWdodCgpLCByb290TGF5ZXItPnJlbmRlckJv
eCgpLT5tYXhZTGF5b3V0T3ZlcmZsb3coKSkpOworICAgICAgICBwYWludERpcnR5UmVjdC5zZXRX
aWR0aChtYXg8TGF5b3V0VW5pdD4ocGFpbnREaXJ0eVJlY3Qud2lkdGgoKSwgcm9vdExheWVyLT5y
ZW5kZXJCb3goKS0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WCgpKSk7CisgICAgICAgIHBhaW50
RGlydHlSZWN0LnNldEhlaWdodChtYXg8TGF5b3V0VW5pdD4ocGFpbnREaXJ0eVJlY3QuaGVpZ2h0
KCksIHJvb3RMYXllci0+cmVuZGVyQm94KCktPmxheW91dE92ZXJmbG93UmVjdCgpLm1heFkoKSkp
OwogICAgICAgICBsLT5zZXRTaXplKGwtPnNpemUoKS5leHBhbmRlZFRvKHBpeGVsU25hcHBlZElu
dFNpemUobC0+cmVuZGVyQm94KCktPm1heExheW91dE92ZXJmbG93KCksIExheW91dFBvaW50KDAs
IDApKSkpOwogICAgIH0KICAgICAK
</data>

          </attachment>
      

    </bug>

</bugzilla>