<?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>122959</bug_id>
          
          <creation_ts>2013-10-17 05:28:26 -0700</creation_ts>
          <short_desc>[CSSRegions] Move regions auto-size code into RenderNamedFlowFragment</short_desc>
          <delta_ts>2014-01-09 04:02:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</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>AdobeTracked</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>57312</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihnea Ovidenie">mihnea</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>abucur</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mibalan</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940736</commentid>
    <comment_count>0</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-10-17 05:28:26 -0700</bug_when>
    <thetext>After https://bugs.webkit.org/show_bug.cgi?id=119135, the region auto-size code should be moved from RenderRegion class to the new RenderNamedFlowFragment class. RenderNamedFlowFragment will contain functionality specific to CSSRegions only, as it is the case for region auto-size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965484</commentid>
    <comment_count>1</comment_count>
      <attachid>220633</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-01-08 07:59:23 -0800</bug_when>
    <thetext>Created attachment 220633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965495</commentid>
    <comment_count>2</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2014-01-08 08:23:47 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=220633) [details]
&gt; Patch

Would not have been easier to make *hasAutoLogicalHeight* a virtual which returns false in RenderRegion and do the check in RenderNamedFlowFragment? The static implementation in RenderFlowThread calls isRenderNamedFlowFragment() which is already a virtual method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965807</commentid>
    <comment_count>3</comment_count>
      <attachid>220704</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-01-09 02:04:09 -0800</bug_when>
    <thetext>Created attachment 220704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965813</commentid>
    <comment_count>4</comment_count>
      <attachid>220704</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2014-01-09 02:15:45 -0800</bug_when>
    <thetext>Comment on attachment 220704
Patch

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

r=me, please take a look at the comments before landing.

&gt; Source/WebCore/rendering/RenderNamedFlowFragment.cpp:159
&gt; +    ASSERT(newLogicalHeight &lt; LayoutUnit::max() / 2);

I would use RenderFlowThread::maxLogicalHeight() instead of LayoutUnit::max() / 2.

&gt; Source/WebCore/rendering/RenderTreeAsText.cpp:671
&gt; +            if (isRenderNamedFlowFragment &amp;&amp; toRenderNamedFlowFragment(renderRegion)-&gt;hasAutoLogicalHeight())

Since hasAutoLogicalHeight always returns false for RenderRegion, you can still use the previous condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965833</commentid>
    <comment_count>5</comment_count>
      <attachid>220709</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2014-01-09 03:26:22 -0800</bug_when>
    <thetext>Created attachment 220709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965841</commentid>
    <comment_count>6</comment_count>
      <attachid>220709</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-09 04:02:22 -0800</bug_when>
    <thetext>Comment on attachment 220709
Patch

Clearing flags on attachment: 220709

Committed r161553: &lt;http://trac.webkit.org/changeset/161553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>965842</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-09 04:02:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220633</attachid>
            <date>2014-01-08 07:59:23 -0800</date>
            <delta_ts>2014-01-09 02:04:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122959-20140108180217.patch</filename>
            <type>text/plain</type>
            <size>32133</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk1NGM1MmQ3NzRmOGYx
ZjI5OTU3MTdkZTE3NzVhOWEzNjllZmE3ZC4uYzgwNWExYmNjOTc3YWQyNjI2OWE0ZWQyYmVhNTVj
YzZlMTMyY2JmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE0LTAxLTA4ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1NSZWdpb25zXSBNb3Zl
IHJlZ2lvbnMgYXV0by1zaXplIGNvZGUgaW50byBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTU5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgYXV0
by1oZWlnaHQgbG9naWMgZnJvbSBSZW5kZXJSZWdpb24gdG8gUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQgYmVjYXVzZSBpdCdzCisgICAgICAgIHVzZWQgb25seSBieSB0aGUgQ1NTIFJlZ2lvbnMgaW1w
bGVtZW50YXRpb24uCisKKyAgICAgICAgQnVnIDEyNjY0MiBjb3ZlcnMgdGhlIGF1dG8taGVpZ2h0
IGxvZ2ljIG1vdmUgZnJvbSBSZW5kZXJGbG93VGhyZWFkIHRvIFJlbmRlck5hbWVkRmxvd1RocmVh
ZC4KKworICAgICAgICBUZXN0czogTm8gbmV3IHRlc3RzLCBqdXN0IHJlZmFjdG9yaW5ncy4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Omhhc0F1dG9Mb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dU
aHJlYWQ6OnZhbGlkYXRlUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhy
ZWFkOjppc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjppbml0aWFsaXplUmVnaW9uc0NvbXB1dGVkQXV0
b0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjptYXJrQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
b3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJlYWspOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudDo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjppbmNyZW1lbnRBdXRvTG9naWNhbEhl
aWdodENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpk
ZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50Ojp1cGRhdGVSZWdpb25IYXNBdXRvTG9naWNhbEhlaWdodEZsYWcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnVwZGF0ZUxvZ2lj
YWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnBh
Z2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDo6YXR0YWNoUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50OjpkZXRhY2hSZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjpwYWdlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZWdpb246OmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6aXNMYXN0UmVnaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUmVnaW9uOjphdHRhY2hSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVn
aW9uOjpkZXRhY2hSZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JpdGVSZW5kZXJS
ZWdpb25MaXN0KToKKwogMjAxNC0wMS0wNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE2MTE5NSk6IEFjaWQyIHJlZ3Jlc3Npb24gdGVz
dHMgZnJlcXVlbnRseSBmYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAKaW5kZXggMTM4YzllYTUyNzczZDk1OGM3MTAyZTZlZDZhZDIxNmI0Y2Q3YTZk
Yi4uMjA3M2E0NGYwMzAwMTczOTQ1ZDcxYTFiMWExYzk5MjIzZDIxNzc0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAtODUsNiArODUsMTEg
QEAgUGFzc1JlZjxSZW5kZXJTdHlsZT4gUmVuZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVh
ZFN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnQKICAgICByZXR1cm4gbmV3U3R5bGU7CiB9CiAKK3N0
YXRpYyBib29sIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KGNvbnN0IFJlbmRlclJlZ2lvbiogcmVnaW9u
KQoreworICAgIHJldHVybiByZWdpb24tPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSAmJiB0
b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlZ2lvbiktPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCk7
Cit9CisKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJCbG9j
a0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKQEAgLTE3Miw4ICsxNzcsOSBA
QCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucygpCiAgICAgICAgICAgICAg
ICAgLy8gU2VlIGluaXRpYWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0IGZvciB0aGUgZXhw
bGFuYXRpb24uCiAgICAgICAgICAgICAgICAgLy8gQWxzbywgaWYgd2UgaGF2ZSBhdXRvLWhlaWdo
dCByZWdpb25zIHdlIGNhbid0IGFzc3VtZSBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWln
aHQgdG8gYmUgdHJ1ZSBpbiB0aGUgZmlyc3QgcGhhc2UKICAgICAgICAgICAgICAgICAvLyBiZWNh
dXNlIHRoZSBhdXRvLWhlaWdodCByZWdpb25zIGRvbid0IGhhdmUgdGhlaXIgaGVpZ2h0IGNvbXB1
dGVkIHlldC4KLSAgICAgICAgICAgICAgICBpZiAoaW5NZWFzdXJlQ29udGVudExheW91dFBoYXNl
KCkgJiYgcmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlZ2lvbi0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KHJlZ2lvbi0+bWF4UGFnZUxvZ2ljYWxI
ZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFz
ZSgpICYmIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KHJlZ2lvbikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudChyZWdpb24pOworICAgICAgICAgICAgICAgICAgICBuYW1lZEZsb3dG
cmFnbWVudC0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KG5hbWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdl
TG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9yZWdpb25zSGF2ZVVuaWZv
cm1Mb2dpY2FsSGVpZ2h0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCkBAIC04OTYsNyAr
OTAyLDcgQEAgYm9vbCBSZW5kZXJGbG93VGhyZWFkOjppc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9u
c0NvdW50Q29uc2lzdGVudCgpIGNvbnN0CiAgICAgdW5zaWduZWQgYXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zID0gMDsKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBl
bmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAg
Y29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRlcjsKLSAgICAgICAgaWYgKHJlZ2lvbi0+
aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgaWYgKGhhc0F1dG9Mb2dpY2FsSGVpZ2h0
KHJlZ2lvbikpCiAgICAgICAgICAgICBhdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMrKzsKICAgICB9
CiAKQEAgLTkxNiw4ICs5MjIsMTAgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjppbml0aWFsaXpl
UmVnaW9uc0NvbXB1dGVkQXV0b0hlaWdodChSZW5kZXJSZWdpb24qIHN0YXJ0UmUKICAgICBmb3Ig
KGF1dG8gcmVnaW9uSXRlciA9IHN0YXJ0UmVnaW9uID8gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRS
ZWdpb24pIDogbV9yZWdpb25MaXN0LmJlZ2luKCksCiAgICAgICAgIGVuZCA9IG1fcmVnaW9uTGlz
dC5lbmQoKTsgcmVnaW9uSXRlciAhPSBlbmQ7ICsrcmVnaW9uSXRlcikgewogICAgICAgICBSZW5k
ZXJSZWdpb24qIHJlZ2lvbiA9ICpyZWdpb25JdGVyOwotICAgICAgICBpZiAocmVnaW9uLT5oYXNB
dXRvTG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAgcmVnaW9uLT5zZXRDb21wdXRlZEF1dG9I
ZWlnaHQocmVnaW9uLT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgaWYgKGhhc0F1
dG9Mb2dpY2FsSGVpZ2h0KHJlZ2lvbikpIHsKKyAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVn
aW9uKTsKKyAgICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5zZXRDb21wdXRlZEF1dG9IZWln
aHQobmFtZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICB9
CiAgICAgfQogfQogCkBAIC05MjcsNyArOTM1LDcgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpt
YXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9yTGF5b3V0KCkKIAogICAgIGZvciAoYXV0byBp
dGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQoKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICppdGVy
OwotICAgICAgICBpZiAoIXJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAg
aWYgKCFoYXNBdXRvTG9naWNhbEhlaWdodChyZWdpb24pKQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZmluZCBhIHdheSB0byBhdm9pZCBtYXJr
aW5nIGFsbCB0aGUgcmVnaW9ucyBhbmNlc3RvcnMgZm9yIGxheW91dApAQCAtOTU5LDggKzk2Nyw4
IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9u
UmVjdChjb25zdCBSZW5kZXJSZWdpb24qIGxhCiAgICAgICAgIFJlbmRlclJlZ2lvbiogcmVnaW9u
ID0gKml0ZXI7CiAKICAgICAgICAgLy8gSWYgd2UgZmluZCBhbiBlbXB0eSBhdXRvLWhlaWdodCBy
ZWdpb24sIGNsZWFyIHRoZSBjb21wdXRlZEF1dG9IZWlnaHQgdmFsdWUuCi0gICAgICAgIGlmIChl
bXB0eVJlZ2lvbnNTZWdtZW50ICYmIHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAg
ICAgICAgICAgIHJlZ2lvbi0+Y2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKTsKKyAgICAgICAgaWYg
KGVtcHR5UmVnaW9uc1NlZ21lbnQgJiYgaGFzQXV0b0xvZ2ljYWxIZWlnaHQocmVnaW9uKSkKKyAg
ICAgICAgICAgIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKS0+Y2xlYXJDb21wdXRl
ZEF1dG9IZWlnaHQoKTsKIAogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0aCA9
IHJlZ2lvbi0+cGFnZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxv
Z2ljYWxIZWlnaHQgPSBzdGQ6Om1pbjxMYXlvdXRVbml0PihSZW5kZXJGbG93VGhyZWFkOjptYXhM
b2dpY2FsSGVpZ2h0KCkgLSBsb2dpY2FsSGVpZ2h0LCByZWdpb24tPmxvZ2ljYWxIZWlnaHRPZkFs
bEZsb3dUaHJlYWRDb250ZW50KCkpOwpAQCAtMTAwMSw3ICsxMDA5LDcgQEAgYm9vbCBSZW5kZXJG
bG93VGhyZWFkOjphZGRGb3JjZWRSZWdpb25CcmVhayhjb25zdCBSZW5kZXJCbG9jayogYmxvY2ss
IExheW91dFVuaXQKICAgICBpZiAoaXRlciAhPSBtYXBUb1VzZS5lbmQoKSkgewogICAgICAgICBh
dXRvIHJlZ2lvbkl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChpdGVyLT52YWx1ZSk7CiAgICAgICAg
IEFTU0VSVChyZWdpb25JdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKSk7Ci0gICAgICAgIEFTU0VS
VCgoKnJlZ2lvbkl0ZXIpLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJU
KGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCpyZWdpb25JdGVyKSk7CiAgICAgICAgIGluaXRpYWxpemVS
ZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KCpyZWdpb25JdGVyKTsKIAogICAgICAgICAvLyBXZSBu
ZWVkIHRvIHVwZGF0ZSB0aGUgcmVnaW9ucyBmbG93IHRocmVhZCBwb3J0aW9uIHJlY3QgYmVjYXVz
ZSB3ZSBhcmUgZ29pbmcgdG8gcHJvY2VzcwpAQCAtMTAyMSwyMyArMTAyOSwyNSBAQCBib29sIFJl
bmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBi
bG9jaywgTGF5b3V0VW5pdAogICAgIExheW91dFVuaXQgY3VycmVudFJlZ2lvbk9mZnNldEluRmxv
d1RocmVhZCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyByZWdpb24tPmZsb3dUaHJlYWRQ
b3J0aW9uUmVjdCgpLnkoKSA6IHJlZ2lvbi0+Zmxvd1RocmVhZFBvcnRpb25SZWN0KCkueCgpOwog
ICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24gPSBvZmZzZXRCcmVha0lu
Rmxvd1RocmVhZCAtIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQ7CiAKLSAgICBpZiAo
cmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7CisgICAgaWYgKGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KHJlZ2lvbikpIHsKKyAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVk
Rmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pOworCiAgICAg
ICAgIC8vIEEgZm9yY2VkIGJyZWFrIGNhbiBhcHBlYXIgb25seSBpbiBhbiBhdXRvLWhlaWdodCBy
ZWdpb24gdGhhdCBkaWRuJ3QgaGF2ZSBhIGZvcmNlZCBicmVhayBiZWZvcmUuCiAgICAgICAgIC8v
IFRoaXMgQVNTRVJUIGlzIGEgZ29vZC1lbm91Z2ggaGV1cmlzdGljIHRvIHZlcmlmeSB0aGUgYWJv
dmUgY29uZGl0aW9uLgotICAgICAgICBBU1NFUlQocmVnaW9uLT5tYXhQYWdlTG9naWNhbEhlaWdo
dCgpID09IHJlZ2lvbi0+Y29tcHV0ZWRBdXRvSGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQobmFt
ZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkgPT0gbmFtZWRGbG93RnJhZ21l
bnQtPmNvbXB1dGVkQXV0b0hlaWdodCgpKTsKIAotICAgICAgICBtYXBUb1VzZS5zZXQoYnJlYWtD
aGlsZCwgcmVnaW9uKTsKKyAgICAgICAgbWFwVG9Vc2Uuc2V0KGJyZWFrQ2hpbGQsIG5hbWVkRmxv
d0ZyYWdtZW50KTsKIAogICAgICAgICBoYXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0cnVlOwogCiAg
ICAgICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBoZWlnaHQgcHJldGVuZGluZyB0aGF0IHRoZSBv
ZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbiBpcyB0aGUgbG9naWNhbEhlaWdodCBmb3IgdGhlIGF1
dG8taGVpZ2h0IHJlZ2lvbi4KLSAgICAgICAgTGF5b3V0VW5pdCByZWdpb25Db21wdXRlZEF1dG9I
ZWlnaHQgPSByZWdpb24tPmNvbnN0cmFpbkNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0QnlNaW5NYXgo
b2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24pOworICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkNv
bXB1dGVkQXV0b0hlaWdodCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5jb25zdHJhaW5Db250ZW50Qm94
TG9naWNhbEhlaWdodEJ5TWluTWF4KG9mZnNldEJyZWFrSW5DdXJyZW50UmVnaW9uKTsKIAogICAg
ICAgICAvLyBUaGUgbmV3IGhlaWdodCBvZiB0aGlzIHJlZ2lvbiBuZWVkcyB0byBiZSBzbWFsbGVy
IHRoYW4gdGhlIGluaXRpYWwgdmFsdWUsIHRoZSBtYXggaGVpZ2h0LiBBIGZvcmNlZCBicmVhayBp
cyB0aGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBpbml0aWFsCiAgICAgICAgIC8vIGhlaWdodCBv
ZiBhbiBhdXRvLWhlaWdodCByZWdpb24gYmVzaWRlcyBjb250ZW50IGVuZGluZy4KLSAgICAgICAg
QVNTRVJUKHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA8PSByZWdpb24tPm1heFBhZ2VMb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQocmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0IDw9IG5h
bWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKIAotICAgICAgICByZWdp
b24tPnNldENvbXB1dGVkQXV0b0hlaWdodChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQpOworICAg
ICAgICBuYW1lZEZsb3dGcmFnbWVudC0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KHJlZ2lvbkNvbXB1
dGVkQXV0b0hlaWdodCk7CiAKICAgICAgICAgY3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVh
ZCArPSByZWdpb25Db21wdXRlZEF1dG9IZWlnaHQ7CiAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCmluZGV4IDAzOGVjM2Y4Yjlk
MTY3Y2JkMjYzMjRmMWNjYzE5YTU2MDRlNmQwYzMuLjZmMDAzNmRjNDlmZTY0YThkODI3ODMyMWM1
NDRkZjEzZTc4NmFkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNldC5oCkBAIC0xMDksMTAgKzEwOSw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
Ly8gRklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugb25jZSB3ZSBoYXZlIGNvbHVtbiBzZXRzIGNvbnN0
cmFpbmVkIGJ5IGVuY2xvc2luZyBwYWdlcywgZXRjLgogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuIG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQ7IH0KLQotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IHJldHVybiBmYWxzZSwgYnV0IGl0J3MgbGlrZWx5IHdlIHdpbGwgbGV2ZXJhZ2UgdGhlIGF1dG8g
aGVpZ2h0IHJlZ2lvbiBjb2RlIHRvIGRvIGNvbHVtbgotICAgIC8vIGJhbGFuY2luZy4gVGhhdCdz
IHdoeSB3ZSBoYXZlIGFuIG92ZXJyaWRlIG9mIHRoaXMgZnVuY3Rpb24gdGhhdCBpcyBkaXN0aW5j
dCBmcm9tIFJlbmRlclJlZ2lvblNldCdzIG92ZXJyaWRlLgotICAgIHZpcnR1YWwgYm9vbCBzaG91
bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsg
fQogICAgIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnQoY29uc3Qg
TGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlKSBPVkVSUklERTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5j
cHAKaW5kZXggZjNhNDA2ZDNjNGU5MDQ3ZmEyMTc1MzFmMGVjZTRlY2ZiNDFjNGJkYi4uYTcyODlm
YmYyODc4MDIxOWM5YTllNmZkZTA0ZjkxNjk2OGY4ZTE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCkBAIC0zOCwxMSAr
MzgsMTYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogCisjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoRG9j
dW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKICAgICA6IFJlbmRl
clJlZ2lvbihkb2N1bWVudCwgc3RkOjptb3ZlKHN0eWxlKSwgbnVsbHB0cikKICAgICAsIG1faGFz
Q3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpCisgICAgLCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KGZh
bHNlKQorICAgICwgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQoZmFsc2UpCisgICAgLCBtX2NvbXB1
dGVkQXV0b0hlaWdodCgwKQogewogfQogCkBAIC03OCw2ICs4Myw4IEBAIHZvaWQgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICB1cGRhdGVSZWdpb25IYXNB
dXRvTG9naWNhbEhlaWdodEZsYWcoKTsKKwogICAgIGNoZWNrUmVnaW9uU3R5bGUoKTsKIAogICAg
IGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+bmVlZHNMYXlvdXQoKSkKQEAgLTk0LDYgKzEwMSw4
MiBAQCBib29sIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzaG91bGRIYXZlQXV0b0xvZ2ljYWxI
ZWlnaHQoKSBjb25zdAogICAgIHJldHVybiBzdHlsZVRvVXNlLmxvZ2ljYWxIZWlnaHQoKS5pc0F1
dG8oKSAmJiAhaGFzQW5jaG9yZWRFbmRwb2ludHNGb3JIZWlnaHQ7CiB9CiAKK3ZvaWQgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OmluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKQorewor
ICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0
KTsKKworICAgIG1fZmxvd1RocmVhZC0+aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25z
KCk7Cit9CisKK3ZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmRlY3JlbWVudEF1dG9Mb2dp
Y2FsSGVpZ2h0Q291bnQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworCisgICAgbV9mbG93
VGhyZWFkLT5kZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKK30KKwordm9pZCBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6dXBkYXRlUmVnaW9uSGFzQXV0b0xvZ2ljYWxIZWlnaHRG
bGFnKCkKK3sKKyAgICBBU1NFUlQobV9mbG93VGhyZWFkKTsKKworICAgIGlmICghaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGRpZEhhdmVBdXRvTG9naWNhbEhlaWdodCA9
IG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQ7CisgICAgbV9oYXNBdXRvTG9naWNhbEhlaWdodCA9IHNo
b3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpOworICAgIGlmIChtX2hhc0F1dG9Mb2dpY2FsSGVp
Z2h0ICE9IGRpZEhhdmVBdXRvTG9naWNhbEhlaWdodCkgeworICAgICAgICBpZiAobV9oYXNBdXRv
TG9naWNhbEhlaWdodCkKKyAgICAgICAgICAgIGluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291
bnQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbGVhckNvbXB1dGVkQXV0b0hlaWdo
dCgpOworICAgICAgICAgICAgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp1cGRhdGVM
b2dpY2FsSGVpZ2h0KCkKK3sKKyAgICBSZW5kZXJSZWdpb246OnVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KTsKKworICAgIGlmICghaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIGxvZ2ljYWwgaGVpZ2h0IGJhc2VkIG9uIHRo
ZSBjb21wdXRlZCBhdXRvLWhlaWdodAorICAgIC8vIG9ubHkgYWZ0ZXIgdGhlIG1lYXN1cmUgY290
bmVudCBsYXlvdXQgcGhhc2Ugd2hlbiBhbGwgdGhlCisgICAgLy8gYXV0byBsb2dpY2FsIGhlaWdo
dCByZWdpb25zIGhhdmUgYSBjb21wdXRlZCBhdXRvLWhlaWdodC4KKyAgICBpZiAobV9mbG93VGhy
ZWFkLT5pbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhlcmUgbWF5IGJlIHJlZ2lvbnMgd2l0aCBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHRoYXQg
ZHVyaW5nIHRoZSBwcmVyZXF1aXNpdGUgbGF5b3V0IHBoYXNlCisgICAgLy8gZGlkIG5vdCBoYXZl
IHRoZSBjaGFuY2UgdG8gbGF5b3V0IGZsb3cgdGhyZWFkIGNvbnRlbnQuIEJlY2F1c2Ugb2YgdGhh
dCwgdGhlc2UgcmVnaW9ucyBkbyBub3QKKyAgICAvLyBoYXZlIGEgY29tcHV0ZWRBdXRvSGVpZ2h0
IGFuZCB0aGV5IHdpbGwgbm90IGJlIGFibGUgdG8gZnJhZ21lbnQgYW55IGZsb3cKKyAgICAvLyB0
aHJlYWQgY29udGVudC4KKyAgICBpZiAoIWhhc0NvbXB1dGVkQXV0b0hlaWdodCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxIZWlnaHQgPSBjb21wdXRlZEF1
dG9IZWlnaHQoKSArIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVpZ2h0KCk7CisgICAgQVNTRVJU
KG5ld0xvZ2ljYWxIZWlnaHQgPCBMYXlvdXRVbml0OjptYXgoKSAvIDIpOworICAgIGlmIChuZXdM
b2dpY2FsSGVpZ2h0ID4gbG9naWNhbEhlaWdodCgpKSB7CisgICAgICAgIHNldExvZ2ljYWxIZWln
aHQobmV3TG9naWNhbEhlaWdodCk7CisgICAgICAgIC8vIFJlY2FsY3VsYXRlIHBvc2l0aW9uIG9m
IHRoZSByZW5kZXIgYmxvY2sgYWZ0ZXIgbmV3IGxvZ2ljYWwgaGVpZ2h0IGlzIHNldC4KKyAgICAg
ICAgLy8gKG5lZWRlZCBpbiBhYnNvbHV0ZSBwb3NpdGlvbmluZyBjYXNlIHdpdGggYm90dG9tIGFs
aWdubWVudCBmb3IgZXhhbXBsZSkKKyAgICAgICAgUmVuZGVyUmVnaW9uOjp1cGRhdGVMb2dpY2Fs
SGVpZ2h0KCk7CisgICAgfQorfQorCitMYXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OjpwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZmxvd1RocmVhZCk7
CisgICAgaWYgKGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFz
dXJlQ29udGVudExheW91dFBoYXNlKCkpIHsKKyAgICAgICAgQVNTRVJUKGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZWRBdXRvSGVpZ2h0KCk7CisgICAgfQor
ICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjb250
ZW50SGVpZ2h0KCkgOiBjb250ZW50V2lkdGgoKTsKK30KKworLy8gVGhpcyBtZXRob2QgcmV0dXJu
cyB0aGUgbWF4aW11bSBwYWdlIHNpemUgb2YgYSByZWdpb24gd2l0aCBhdXRvLWhlaWdodC4gVGhp
cyBpcyB0aGUgaW5pdGlhbAorLy8gaGVpZ2h0IHZhbHVlIGZvciBhdXRvLWhlaWdodCByZWdpb25z
IGluIHRoZSBmaXJzdCBsYXlvdXQgcGhhc2Ugb2YgdGhlIHBhcmVudCBuYW1lZCBmbG93LgogTGF5
b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBj
b25zdAogewogICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOwpAQCAtMTA1LDYgKzE4OCwzMSBAQCBM
YXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjptYXhQYWdlTG9naWNhbEhlaWdodCgp
IGNvbnN0CiAgICAgcmV0dXJuIHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZp
bmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0KCkgOiB0b1JlbmRlckJs
b2NrKHBhcmVudCgpKS0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlVG9V
c2UubG9naWNhbE1heEhlaWdodCgpKTsKIH0KIAordm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQoreworICAg
IFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKKyAgICBSZW5k
ZXJSZWdpb246OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4pOworCisgICAgaWYgKGlzVmFs
aWQoKSkgeworICAgICAgICBMYXlvdXRSZWN0IG9sZFJlZ2lvblJlY3QoZmxvd1RocmVhZFBvcnRp
b25SZWN0KCkpOworICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCisgICAg
ICAgICAgICBvbGRSZWdpb25SZWN0ID0gb2xkUmVnaW9uUmVjdC50cmFuc3Bvc2VkUmVjdCgpOwor
CisgICAgICAgIGlmIChtX2Zsb3dUaHJlYWQtPmluT3ZlcmZsb3dMYXlvdXRQaGFzZSgpIHx8IG1f
Zmxvd1RocmVhZC0+aW5GaW5hbExheW91dFBoYXNlKCkpCisgICAgICAgICAgICBjb21wdXRlT3Zl
cmZsb3dGcm9tRmxvd1RocmVhZCgpOworCisgICAgICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdo
dCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpIHsKKyAg
ICAgICAgICAgIG1fZmxvd1RocmVhZC0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKKyAgICAgICAgICAg
IGNsZWFyQ29tcHV0ZWRBdXRvSGVpZ2h0KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoKG9sZFJlZ2lvblJlY3Qud2lkdGgoKSAhPSBwYWdlTG9naWNhbFdp
ZHRoKCkgfHwgb2xkUmVnaW9uUmVjdC5oZWlnaHQoKSAhPSBwYWdlTG9naWNhbEhlaWdodCgpKSAm
JiAhbV9mbG93VGhyZWFkLT5pbkZpbmFsTGF5b3V0UGhhc2UoKSkKKyAgICAgICAgICAgIC8vIFRo
aXMgY2FuIGhhcHBlbiBldmVuIGlmIHdlIGFyZSBpbiB0aGUgaW5Db25zdHJhaW5lZExheW91dFBo
YXNlIGFuZCBpdCB3aWxsIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwgbGF5b3V0IG9mIHRoZSBmbG93
IHRocmVhZC4KKyAgICAgICAgICAgIG1fZmxvd1RocmVhZC0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsK
KyAgICB9Cit9CisKIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmNoZWNrUmVnaW9uU3R5
bGUoKQogewogICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOwpAQCAtMjc3LDQgKzM4NSwzMSBAQCBM
YXlvdXRSZWN0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp2aXN1YWxPdmVyZmxvd1JlY3QoKSBj
b25zdAogICAgIHJldHVybiBSZW5kZXJSZWdpb246OnZpc3VhbE92ZXJmbG93UmVjdCgpOwogfQog
Cit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjphdHRhY2hSZWdpb24oKQoreworICAgIFJl
bmRlclJlZ2lvbjo6YXR0YWNoUmVnaW9uKCk7CisKKyAgICBpZiAoZG9jdW1lbnRCZWluZ0Rlc3Ry
b3llZCgpIHx8ICFtX2Zsb3dUaHJlYWQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBy
ZWdpb24ganVzdCBnb3QgYXR0YWNoZWQgdG8gdGhlIGZsb3cgdGhyZWFkLCBsZXRzIGNoZWNrIHdo
ZXRoZXIKKyAgICAvLyBpdCBoYXMgcmVnaW9uIHN0eWxpbmcgcnVsZXMgYXNzb2NpYXRlZC4KKyAg
ICBjaGVja1JlZ2lvblN0eWxlKCk7CisKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9oYXNBdXRvTG9naWNhbEhlaWdodCA9IHNob3VsZEhhdmVBdXRvTG9naWNh
bEhlaWdodCgpOworICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdodCgpKQorICAgICAgICBpbmNy
ZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Cit9CisKK3ZvaWQgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6OmRldGFjaFJlZ2lvbigpCit7CisgICAgaWYgKG1fZmxvd1RocmVhZCAmJiBoYXNB
dXRvTG9naWNhbEhlaWdodCgpKQorICAgICAgICBkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENv
dW50KCk7CisgICAgCisgICAgUmVuZGVyUmVnaW9uOjpkZXRhY2hSZWdpb24oKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuaAppbmRleCBiMzcwNDk1MzE0MWM4NWMzYjNiNThjMGQyODVk
MDFhMWI4YTliZjRmLi5mMWU4YjY5YTFkNjAzMzFmNjdjOWI2MDFlOTczNjI5NGZlMTZlZmE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuaApAQCAtNTcsNyArNTcsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBtYXhQYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBw
YWdlTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIExheW91dFVuaXQgbWF4UGFnZUxvZ2ljYWxI
ZWlnaHQoKSBjb25zdDsKIAogICAgIGJvb2wgaXNQc2V1ZG9FbGVtZW50UmVnaW9uKCkgY29uc3Qg
eyByZXR1cm4gcGFyZW50KCkgJiYgcGFyZW50KCktPmlzUHNldWRvRWxlbWVudCgpOyB9CiAKQEAg
LTc5LDE4ICs4MCw0OSBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG5h
bWVkRmxvd1RocmVhZCgpIGNvbnN0OwogCisgICAgYm9vbCBoYXNBdXRvTG9naWNhbEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQ7IH0KKworICAgIExheW91dFVu
aXQgY29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZEF1dG9IZWln
aHQ7IH0KKworICAgIHZvaWQgc2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KExheW91dFVuaXQgY29tcHV0
ZWRBdXRvSGVpZ2h0KQorICAgIHsKKyAgICAgICAgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0
cnVlOworICAgICAgICBtX2NvbXB1dGVkQXV0b0hlaWdodCA9IGNvbXB1dGVkQXV0b0hlaWdodDsK
KyAgICB9CisKKyAgICB2b2lkIGNsZWFyQ29tcHV0ZWRBdXRvSGVpZ2h0KCkKKyAgICB7CisgICAg
ICAgIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0ID0gZmFsc2U7CisgICAgICAgIG1fY29tcHV0ZWRB
dXRvSGVpZ2h0ID0gMDsKKyAgICB9CisKKyAgICBib29sIGhhc0NvbXB1dGVkQXV0b0hlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0OyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUmVnaW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFJl
Z2lvbigpIE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KSBPVkVSUklERTsKKwogLy8gRklYTUU6IFRlbXBvcmFyaWx5IHB1YmxpYyB1bnRpbCB3ZSBtb3Zl
IGFsbCB0aGUgQ1NTUmVnaW9ucyBmdW5jdGlvbmFsaXR5IGZyb20gUmVuZGVyUmVnaW9uIHRvIGhl
cmUuCiBwdWJsaWM6CiAgICAgdm9pZCBjaGVja1JlZ2lvblN0eWxlKCk7CiAKIHByaXZhdGU6Ci0g
ICAgdmlydHVhbCBib29sIHNob3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCI7IH0KIAogICAgIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOwog
ICAgIHZvaWQgY29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJFbGVtZW50
Kik7CiAgICAgdm9pZCBzZXRPYmplY3RTdHlsZUluUmVnaW9uKFJlbmRlck9iamVjdCosIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+LCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKIAorICAg
IHZvaWQgdXBkYXRlUmVnaW9uSGFzQXV0b0xvZ2ljYWxIZWlnaHRGbGFnKCk7CisKKyAgICB2b2lk
IGluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKKyAgICB2b2lkIGRlY3JlbWVudEF1
dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKKworICAgIGJvb2wgc2hvdWxkSGF2ZUF1dG9Mb2dpY2Fs
SGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgT1ZFUlJJREU7
CisKICAgICBzdHJ1Y3QgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHsKICAgICAgICAgLy8gVXNlZCB0
byBzdG9yZSB0aGUgb3JpZ2luYWwgc3R5bGUgb2YgdGhlIG9iamVjdCBpbiByZWdpb24KICAgICAg
ICAgLy8gc28gdGhhdCB0aGUgb3JpZ2luYWwgc3R5bGUgaXMgcHJvcGVybHkgcmVzdG9yZWQgYWZ0
ZXIgcGFpbnQuCkBAIC0xMDYsNiArMTM4LDEwIEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0
UmVnaW9uU3R5bGVNYXAgbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZTsKIAogICAgIGJvb2wgbV9o
YXNDdXN0b21SZWdpb25TdHlsZSA6IDE7CisgICAgYm9vbCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0
IDogMTsKKyAgICBib29sIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0IDogMTsKKworICAgIExheW91
dFVuaXQgbV9jb21wdXRlZEF1dG9IZWlnaHQ7CiB9OwogCiBSRU5ERVJfT0JKRUNUX1RZUEVfQ0FT
VFMoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggYWZhMjg4MmRh
YWIxM2FiOThmZmU5MjMwMjU4ZWE2MWNmOGIyMDhhOC4uNzdhM2JlMDU1NmEyOWM4YWNlMGUwZjk4
MzgzMTNiNjk5NjU2OTUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlZ2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5jcHAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgot
I2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
NTMsOSArNTIsNiBAQCBSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbihFbGVtZW50JiBlbGVtZW50
LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSwgUmVuZGVyRgogICAgICwgbV9mbG93VGhyZWFk
KGZsb3dUaHJlYWQpCiAgICAgLCBtX3BhcmVudE5hbWVkRmxvd1RocmVhZCgwKQogICAgICwgbV9p
c1ZhbGlkKGZhbHNlKQotICAgICwgbV9oYXNBdXRvTG9naWNhbEhlaWdodChmYWxzZSkKLSAgICAs
IG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KGZhbHNlKQotICAgICwgbV9jb21wdXRlZEF1dG9IZWln
aHQoMCkKIHsKIH0KIApAQCAtNjQsOSArNjAsNiBAQCBSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lv
bihEb2N1bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlLCBSZW5kZQog
ICAgICwgbV9mbG93VGhyZWFkKGZsb3dUaHJlYWQpCiAgICAgLCBtX3BhcmVudE5hbWVkRmxvd1Ro
cmVhZCgwKQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQotICAgICwgbV9oYXNBdXRvTG9naWNhbEhl
aWdodChmYWxzZSkKLSAgICAsIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KGZhbHNlKQotICAgICwg
bV9jb21wdXRlZEF1dG9IZWlnaHQoMCkKIHsKIH0KIApAQCAtMTI4LDMwICsxMjEsMTIgQEAgTGF5
b3V0VW5pdCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdAogTGF5b3V0VW5p
dCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBBU1NFUlQo
bV9mbG93VGhyZWFkKTsKLSAgICBpZiAoaGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KCkgJiYgbV9mbG93
VGhyZWFkLT5pbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSkgewotICAgICAgICBBU1NFUlQo
aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybiBjb21wdXRlZEF1dG9IZWln
aHQoKTsKLSAgICB9CiAgICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGNvbnRlbnRIZWlnaHQoKSA6IGNvbnRlbnRXaWR0aCgpOwogfQogCi0vLyBUaGlz
IG1ldGhvZCByZXR1cm5zIHRoZSBtYXhpbXVtIHBhZ2Ugc2l6ZSBvZiBhIHJlZ2lvbiB3aXRoIGF1
dG8taGVpZ2h0LiBUaGlzIGlzIHRoZSBpbml0aWFsCi0vLyBoZWlnaHQgdmFsdWUgZm9yIGF1dG8t
aGVpZ2h0IHJlZ2lvbnMgaW4gdGhlIGZpcnN0IGxheW91dCBwaGFzZSBvZiB0aGUgcGFyZW50IG5h
bWVkIGZsb3cuCi1MYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6bWF4UGFnZUxvZ2ljYWxIZWlnaHQo
KSBjb25zdAotewotICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOwotICAgIEFTU0VSVChoYXNBdXRv
TG9naWNhbEhlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBo
YXNlKCkpOwotICAgIHJldHVybiBzdHlsZSgpLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5l
ZCgpID8gUmVuZGVyRmxvd1RocmVhZDo6bWF4TG9naWNhbEhlaWdodCgpIDogY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCkubG9naWNhbE1heEhlaWdodCgpKTsKLX0KLQog
TGF5b3V0VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250
ZW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9mbG93VGhyZWFkKTsKLSAgICBpZiAoaGFzQ29t
cHV0ZWRBdXRvSGVpZ2h0KCkgJiYgbV9mbG93VGhyZWFkLT5pbk1lYXN1cmVDb250ZW50TGF5b3V0
UGhhc2UoKSkgewotICAgICAgICBBU1NFUlQoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAg
ICAgIHJldHVybiBjb21wdXRlZEF1dG9IZWlnaHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZmxv
d1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRlbnRIZWlnaHQoKSA6IGNv
bnRlbnRXaWR0aCgpOworICAgIHJldHVybiBwYWdlTG9naWNhbEhlaWdodCgpOwogfQogCiBMYXlv
dXRSZWN0IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKQpAQCAt
MjQ3LDQ3ICsyMjIsNiBAQCBib29sIFJlbmRlclJlZ2lvbjo6aXNMYXN0UmVnaW9uKCkgY29uc3QK
IAogICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmxhc3RSZWdpb24oKSA9PSB0aGlzOwogfQotCi12
b2lkIFJlbmRlclJlZ2lvbjo6aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpCi17Ci0g
ICAgQVNTRVJUKGlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQp
OwotCi0gICAgbV9mbG93VGhyZWFkLT5pbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMo
KTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291
bnQoKQotewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgbV9mbG93VGhyZWFkLT5kZWNy
ZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246
OnVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpCi17Ci0gICAgQVNTRVJUKG1f
Zmxvd1RocmVhZCk7Ci0KLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYm9vbCBkaWRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQgPSBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0
OwotICAgIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgPSBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWln
aHQoKTsKLSAgICBpZiAobV9oYXNBdXRvTG9naWNhbEhlaWdodCAhPSBkaWRIYXZlQXV0b0xvZ2lj
YWxIZWlnaHQpIHsKLSAgICAgICAgaWYgKG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQpCi0gICAgICAg
ICAgICBpbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgY2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKTsKLSAgICAgICAgICAgIGRlY3Jl
bWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9v
bCBSZW5kZXJSZWdpb246OnNob3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0Ci17Ci0g
ICAgYm9vbCBoYXNTcGVjaWZpZWRFbmRwb2ludHNGb3JIZWlnaHQgPSBzdHlsZSgpLmxvZ2ljYWxU
b3AoKS5pc1NwZWNpZmllZCgpICYmIHN0eWxlKCkubG9naWNhbEJvdHRvbSgpLmlzU3BlY2lmaWVk
KCk7Ci0gICAgYm9vbCBoYXNBbmNob3JlZEVuZHBvaW50c0ZvckhlaWdodCA9IGlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpICYmIGhhc1NwZWNpZmllZEVuZHBvaW50c0ZvckhlaWdodDsKLSAgICByZXR1
cm4gc3R5bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgIWhhc0FuY2hvcmVkRW5kcG9p
bnRzRm9ySGVpZ2h0OwotfQogICAgIAogdm9pZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdl
KFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CkBA
IC0yOTYsMzcgKzIzMCwxMCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogICAgIGlmICghbV9m
bG93VGhyZWFkKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVSZWdpb25IYXNBdXRvTG9n
aWNhbEhlaWdodEZsYWcoKTsKLQogICAgIGlmIChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+d3JpdGlu
Z01vZGUoKSAhPSBzdHlsZSgpLndyaXRpbmdNb2RlKCkpCiAgICAgICAgIG1fZmxvd1RocmVhZC0+
cmVnaW9uQ2hhbmdlZFdyaXRpbmdNb2RlKHRoaXMpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6
bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQotewotICAgIFN0
YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKLSAgICBSZW5kZXJC
bG9ja0Zsb3c6OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4pOwotCi0gICAgaWYgKGlzVmFs
aWQoKSkgewotICAgICAgICBMYXlvdXRSZWN0IG9sZFJlZ2lvblJlY3QoZmxvd1RocmVhZFBvcnRp
b25SZWN0KCkpOwotICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAg
ICAgICAgICBvbGRSZWdpb25SZWN0ID0gb2xkUmVnaW9uUmVjdC50cmFuc3Bvc2VkUmVjdCgpOwot
Ci0gICAgICAgIGlmIChtX2Zsb3dUaHJlYWQtPmluT3ZlcmZsb3dMYXlvdXRQaGFzZSgpIHx8IG1f
Zmxvd1RocmVhZC0+aW5GaW5hbExheW91dFBoYXNlKCkpCi0gICAgICAgICAgICBjb21wdXRlT3Zl
cmZsb3dGcm9tRmxvd1RocmVhZCgpOwotCi0gICAgICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdo
dCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpIHsKLSAg
ICAgICAgICAgIG1fZmxvd1RocmVhZC0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKLSAgICAgICAgICAg
IGNsZWFyQ29tcHV0ZWRBdXRvSGVpZ2h0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoIWlzUmVuZGVyUmVnaW9uU2V0KCkgJiYgKG9sZFJlZ2lvblJlY3Qu
d2lkdGgoKSAhPSBwYWdlTG9naWNhbFdpZHRoKCkgfHwgb2xkUmVnaW9uUmVjdC5oZWlnaHQoKSAh
PSBwYWdlTG9naWNhbEhlaWdodCgpKSAmJiAhbV9mbG93VGhyZWFkLT5pbkZpbmFsTGF5b3V0UGhh
c2UoKSkKLSAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBldmVuIGlmIHdlIGFyZSBpbiB0
aGUgaW5Db25zdHJhaW5lZExheW91dFBoYXNlIGFuZCBpdCB3aWxsIHRyaWdnZXIgYSBwYXRob2xv
Z2ljYWwgbGF5b3V0IG9mIHRoZSBmbG93IHRocmVhZC4KLSAgICAgICAgICAgIG1fZmxvd1RocmVh
ZC0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyUmVnaW9uOjpj
b21wdXRlT3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7
CkBAIC00MjUsMjggKzMzMiwxMiBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6YXR0YWNoUmVnaW9uKCkK
IAogICAgIC8vIE9ubHkgYWZ0ZXIgYWRkaW5nIHRoZSByZWdpb24gdG8gdGhlIHRocmVhZCwgdGhl
IHJlZ2lvbiBpcyBtYXJrZWQgdG8gYmUgdmFsaWQuCiAgICAgbV9mbG93VGhyZWFkLT5hZGRSZWdp
b25Ub1RocmVhZCh0aGlzKTsKLQotICAgIC8vIFRoZSByZWdpb24ganVzdCBnb3QgYXR0YWNoZWQg
dG8gdGhlIGZsb3cgdGhyZWFkLCBsZXRzIGNoZWNrIHdoZXRoZXIKLSAgICAvLyBpdCBoYXMgcmVn
aW9uIHN0eWxpbmcgcnVsZXMgYXNzb2NpYXRlZC4KLSAgICAvLyBGSVhNRTogUmVtb3ZlIGNhc3Qg
b25jZSBhdHRhY2hSZWdpb24gaXMgbW92ZWQgdG8gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuCi0g
ICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKLSAgICAgICAgdG9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCh0aGlzKS0+Y2hlY2tSZWdpb25TdHlsZSgpOwotCi0gICAgaWYgKCFpc1Zh
bGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgPSBz
aG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAoaGFzQXV0b0xvZ2ljYWxIZWln
aHQoKSkKLSAgICAgICAgaW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpOwogfQogCiB2
b2lkIFJlbmRlclJlZ2lvbjo6ZGV0YWNoUmVnaW9uKCkKIHsKLSAgICBpZiAobV9mbG93VGhyZWFk
KSB7CisgICAgaWYgKG1fZmxvd1RocmVhZCkKICAgICAgICAgbV9mbG93VGhyZWFkLT5yZW1vdmVS
ZWdpb25Gcm9tVGhyZWFkKHRoaXMpOwotICAgICAgICBpZiAoaGFzQXV0b0xvZ2ljYWxIZWlnaHQo
KSkKLSAgICAgICAgICAgIGRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKLSAgICB9
CiAgICAgbV9mbG93VGhyZWFkID0gMDsKIH0KIApAQCAtNTU4LDM2ICs0NDksNiBAQCB2b2lkIFJl
bmRlclJlZ2lvbjo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3Rz
KSBjb25zdAogICAgIG5hbWVkRmxvdy5nZXRSYW5nZXMocmFuZ2VPYmplY3RzLCB0aGlzKTsKIH0K
IAotdm9pZCBSZW5kZXJSZWdpb246OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKQotewotICAgIFJlbmRl
ckJsb2NrRmxvdzo6dXBkYXRlTG9naWNhbEhlaWdodCgpOwotCi0gICAgaWYgKCFoYXNBdXRvTG9n
aWNhbEhlaWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSB3YW50IHRvIHVwZGF0
ZSB0aGUgbG9naWNhbCBoZWlnaHQgYmFzZWQgb24gdGhlIGNvbXB1dGVkIGF1dG8taGVpZ2h0Ci0g
ICAgLy8gb25seSBhZnRlciB0aGUgbWVhc3VyZSBjb3RuZW50IGxheW91dCBwaGFzZSB3aGVuIGFs
bCB0aGUKLSAgICAvLyBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbnMgaGF2ZSBhIGNvbXB1dGVk
IGF1dG8taGVpZ2h0LgotICAgIGlmIChtX2Zsb3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlv
dXRQaGFzZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVyZSBtYXkgYmUgcmVnaW9u
cyB3aXRoIGF1dG8gbG9naWNhbCBoZWlnaHQgdGhhdCBkdXJpbmcgdGhlIHByZXJlcXVpc2l0ZSBs
YXlvdXQgcGhhc2UKLSAgICAvLyBkaWQgbm90IGhhdmUgdGhlIGNoYW5jZSB0byBsYXlvdXQgZmxv
dyB0aHJlYWQgY29udGVudC4gQmVjYXVzZSBvZiB0aGF0LCB0aGVzZSByZWdpb25zIGRvIG5vdAot
ICAgIC8vIGhhdmUgYSBjb21wdXRlZEF1dG9IZWlnaHQgYW5kIHRoZXkgd2lsbCBub3QgYmUgYWJs
ZSB0byBmcmFnbWVudCBhbnkgZmxvdwotICAgIC8vIHRocmVhZCBjb250ZW50LgotICAgIGlmICgh
aGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91dFVu
aXQgbmV3TG9naWNhbEhlaWdodCA9IGNvbXB1dGVkQXV0b0hlaWdodCgpICsgYm9yZGVyQW5kUGFk
ZGluZ0xvZ2ljYWxIZWlnaHQoKTsKLSAgICBBU1NFUlQobmV3TG9naWNhbEhlaWdodCA8IExheW91
dFVuaXQ6Om1heCgpIC8gMik7Ci0gICAgaWYgKG5ld0xvZ2ljYWxIZWlnaHQgPiBsb2dpY2FsSGVp
Z2h0KCkpIHsKLSAgICAgICAgc2V0TG9naWNhbEhlaWdodChuZXdMb2dpY2FsSGVpZ2h0KTsKLSAg
ICAgICAgLy8gUmVjYWxjdWxhdGUgcG9zaXRpb24gb2YgdGhlIHJlbmRlciBibG9jayBhZnRlciBu
ZXcgbG9naWNhbCBoZWlnaHQgaXMgc2V0LgotICAgICAgICAvLyAobmVlZGVkIGluIGFic29sdXRl
IHBvc2l0aW9uaW5nIGNhc2Ugd2l0aCBib3R0b20gYWxpZ25tZW50IGZvciBleGFtcGxlKQotICAg
ICAgICBSZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICB9Ci19Ci0K
IHZvaWQgUmVuZGVyUmVnaW9uOjphZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVhZFBvcnRp
b25SZWN0KGNvbnN0IEludFBvaW50JiBsYXllck9mZnNldCwgSW50UmVjdCYgcmVnaW9uQm91bmRz
KQogewogICAgIExheW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdCA9IGZsb3dU
aHJlYWRQb3J0aW9uUmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJlZ2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5o
CmluZGV4IGVhNGMzZGZhYjBjNzhkNTcxNzM2MzIyYjM4NGQxNDhkNGQ3ZTMzM2YuLjUwZTRjMmQ4
MDFlOGY0OTJlMGViN2JiMTcyMTcyYWQ3OTk5MDc0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVnaW9uLmgKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIAogICAgIFJl
bmRlckxheWVyKiByZWdpb25Db250YWluZXJMYXllcigpIGNvbnN0OwogCi0gICAgdm9pZCBhdHRh
Y2hSZWdpb24oKTsKLSAgICB2b2lkIGRldGFjaFJlZ2lvbigpOworICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hSZWdpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoUmVnaW9uKCk7CiAKICAgICBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQqIHBhcmVudE5hbWVkRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyZW50TmFtZWRGbG93VGhyZWFkOyB9CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQpAQCAtODgsNyArODgsNiBA
QCBwdWJsaWM6CiAgICAgLy8gaGVpZ2h0IG9mIGEgc2luZ2xlIGNvbHVtbiBvciBwYWdlIGluIHRo
ZSBzZXQuCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIExheW91dFVuaXQgbWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcE9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJl
Y3QmKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250
ZW50UmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CkBAIC0xMDIsMjYgKzEwMSw2IEBAIHB1
YmxpYzoKICAgICAvLyBvciBjb2x1bW5zIGFkZGVkIHRvZ2V0aGVyLgogICAgIHZpcnR1YWwgTGF5
b3V0VW5pdCBsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0OwogCi0g
ICAgYm9vbCBoYXNBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQXV0b0xv
Z2ljYWxIZWlnaHQ7IH0KLQotICAgIExheW91dFVuaXQgY29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29u
c3QgeyByZXR1cm4gbV9jb21wdXRlZEF1dG9IZWlnaHQ7IH0KLQotICAgIHZvaWQgc2V0Q29tcHV0
ZWRBdXRvSGVpZ2h0KExheW91dFVuaXQgY29tcHV0ZWRBdXRvSGVpZ2h0KQotICAgIHsKLSAgICAg
ICAgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0cnVlOwotICAgICAgICBtX2NvbXB1dGVkQXV0
b0hlaWdodCA9IGNvbXB1dGVkQXV0b0hlaWdodDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQ29t
cHV0ZWRBdXRvSGVpZ2h0KCkKLSAgICB7Ci0gICAgICAgIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0
ID0gZmFsc2U7Ci0gICAgICAgIG1fY29tcHV0ZWRBdXRvSGVpZ2h0ID0gMDsKLSAgICB9Ci0KLSAg
ICBib29sIGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcHV0
ZWRBdXRvSGVpZ2h0OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9naWNhbEhlaWdodCgp
IE9WRVJSSURFOwotCiAgICAgLy8gVGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBwYWdlIGluc2lkZSB0
aGUgcmVnaW9uLiBGb3IgUmVuZGVyUmVnaW9ucywgdGhpcyBpcyBqdXN0IHRoZSBsb2dpY2FsIHRv
cCBvZiB0aGUKICAgICAvLyBmbG93IHRocmVhZCBwb3J0aW9uIHdlIGNvbnRhaW4uIEZvciBzZXRz
LCB3ZSBoYXZlIHRvIGZpZ3VyZSBvdXQgdGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBjb2x1bW4gb3IK
ICAgICAvLyBwYWdlLgpAQCAtMTcwLDcgKzE0OSw2IEBAIHByb3RlY3RlZDoKIAogICAgIExheW91
dFJlY3Qgb3ZlcmZsb3dSZWN0Rm9yRmxvd1RocmVhZFBvcnRpb24oY29uc3QgTGF5b3V0UmVjdCYg
Zmxvd1RocmVhZFBvcnRpb25SZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBv
cnRpb24sIE92ZXJmbG93VHlwZSk7CiAgICAgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnRS
ZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlLCBj
b25zdCBMYXlvdXRSZWN0JiBmbG93VGhyZWFkUG9ydGlvblJlY3QsIGNvbnN0IExheW91dFBvaW50
JiByZWdpb25Mb2NhdGlvbiwgY29uc3QgTGF5b3V0UmVjdCogZmxvd1RocmVhZFBvcnRpb25DbGlw
UmVjdCA9IDApOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQo
KSBjb25zdDsKIAogICAgIHZvaWQgY29tcHV0ZU92ZXJmbG93RnJvbUZsb3dUaHJlYWQoKTsKIApA
QCAtMTgwLDE1ICsxNTgsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9UcmVlKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tVHJl
ZSgpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIE9WRVJSSURFOwot
CiAgICAgdmlydHVhbCB2b2lkIGluc3RhbGxGbG93VGhyZWFkKCk7CiAKLSAgICB2b2lkIHVwZGF0
ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpOwotCi0gICAgdm9pZCBpbmNyZW1lbnRB
dXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0gICAgdm9pZCBkZWNyZW1lbnRBdXRvTG9naWNhbEhl
aWdodENvdW50KCk7Ci0KICAgICBMYXlvdXRQb2ludCBtYXBSZWdpb25Qb2ludEludG9GbG93VGhy
ZWFkQ29vcmRpbmF0ZXMoY29uc3QgTGF5b3V0UG9pbnQmKTsKIAogcHJvdGVjdGVkOgpAQCAtMjA5
LDEwICsxODAsNiBAQCBwcml2YXRlOgogICAgIFJlbmRlckJveFJlZ2lvbkluZm9NYXAgbV9yZW5k
ZXJCb3hSZWdpb25JbmZvOwogCiAgICAgYm9vbCBtX2lzVmFsaWQgOiAxOwotICAgIGJvb2wgbV9o
YXNBdXRvTG9naWNhbEhlaWdodCA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXB1dGVkQXV0b0hlaWdo
dCA6IDE7Ci0KLSAgICBMYXlvdXRVbml0IG1fY29tcHV0ZWRBdXRvSGVpZ2h0OwogfTsKIAogUkVO
REVSX09CSkVDVF9UWVBFX0NBU1RTKFJlbmRlclJlZ2lvbiwgaXNSZW5kZXJSZWdpb24oKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb25TZXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb25TZXQuaAppbmRleCAxMDBiYzQ4MTY3
Njk0YzliNWI2OTA2Y2IzZjRiYWU5ZjA4MzI0Y2JiLi4yNjJmOTZmMjMzOWQxODVjNzAwNDJhODFj
MzQ5ZDMyYzZlNDRlNTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uU2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lv
blNldC5oCkBAIC00OCw3ICs0OCw2IEBAIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBjbGFzcyBS
ZW5kZXJSZWdpb25TZXQgOiBwdWJsaWMgUmVuZGVyUmVnaW9uIHsKIHByb3RlY3RlZDoKICAgICBS
ZW5kZXJSZWdpb25TZXQoRG9jdW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPiwgUmVuZGVyRmxv
d1RocmVhZCYpOwotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBpbnN0YWxsRmxvd1RocmVhZCgpIE9WRVJSSURFIEZJTkFMOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDI1MGMwNDhhODgxOTZm
MzhhYTllOWQxNjkyZjJjZDI3ZTUwOGRkMWMuLmRiNzgyYzcyYjJhZmJlNGY3MjNhZDU1OTc4ZjM1
Y2Y2ZTdjNzIwNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKQEAgLTY2OCw3ICs2NjgsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlclJlZ2lv
bkxpc3QoY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgZmxvd1RocmVhZFJlZ2lvbkxpc3QsCiAgICAg
ICAgICAgICBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgPSByZW5kZXJSZWdpb24tPmlz
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKTsKICAgICAgICAgICAgIGlmIChpc1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50ICYmIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVuZGVyUmVnaW9uKS0+
aGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIHJlZ2lvbiBz
dHlsZTogMSI7Ci0gICAgICAgICAgICBpZiAocmVuZGVyUmVnaW9uLT5oYXNBdXRvTG9naWNhbEhl
aWdodCgpKQorICAgICAgICAgICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgdG9S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZW5kZXJSZWdpb24pLT5oYXNBdXRvTG9naWNhbEhlaWdo
dCgpKQogICAgICAgICAgICAgICAgIHRzIDw8ICIgaGFzQXV0b0xvZ2ljYWxIZWlnaHQiOwogCiAg
ICAgICAgICAgICBpZiAoaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220704</attachid>
            <date>2014-01-09 02:04:09 -0800</date>
            <delta_ts>2014-01-09 03:26:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122959-20140109120706.patch</filename>
            <type>text/plain</type>
            <size>30291</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk1NGM1MmQ3NzRmOGYx
ZjI5OTU3MTdkZTE3NzVhOWEzNjllZmE3ZC4uYjgyN2NhMTc1ZTE0MWVlOGY1MjY3OWM5YzQyYTBj
OTY5MzUwMDQxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE0LTAxLTA5ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1NSZWdpb25zXSBNb3Zl
IHJlZ2lvbnMgYXV0by1zaXplIGNvZGUgaW50byBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTU5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgYXV0
by1oZWlnaHQgbG9naWMgZnJvbSBSZW5kZXJSZWdpb24gdG8gUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQgYmVjYXVzZSBpdCdzCisgICAgICAgIHVzZWQgb25seSBieSB0aGUgQ1NTIFJlZ2lvbnMgaW1w
bGVtZW50YXRpb24uCisKKyAgICAgICAgQnVnIDEyNjY0MiBjb3ZlcnMgdGhlIGF1dG8taGVpZ2h0
IGxvZ2ljIG1vdmUgZnJvbSBSZW5kZXJGbG93VGhyZWFkIHRvIFJlbmRlck5hbWVkRmxvd1RocmVh
ZC4KKworICAgICAgICBUZXN0czogTm8gbmV3IHRlc3RzLCBqdXN0IHJlZmFjdG9yaW5ncy4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjppc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjppbml0aWFsaXplUmVnaW9u
c0NvbXB1dGVkQXV0b0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFk
OjptYXJrQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zRm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnJl
YWspOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjppbmNyZW1lbnRB
dXRvTG9naWNhbEhlaWdodENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OjpkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp1cGRhdGVSZWdpb25IYXNBdXRvTG9naWNh
bEhlaWdodEZsYWcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6
OnVwZGF0ZUxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6OnBhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50OjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudDo6YXR0YWNoUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OjpkZXRhY2hSZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpwYWdlTG9naWNhbEhlaWdodCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6aXNMYXN0UmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjphdHRhY2hSZWdpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVnaW9uOjpkZXRhY2hSZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJSZWdpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVSZW5kZXJSZWdpb25MaXN0KToKKwogMjAxNC0wMS0wNyAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE2MTE5NSk6IEFjaWQyIHJl
Z3Jlc3Npb24gdGVzdHMgZnJlcXVlbnRseSBmYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKaW5kZXggMTM4YzllYTUyNzczZDk1OGM3MTAyZTZlZDZh
ZDIxNmI0Y2Q3YTZkYi4uZWY5MGVkY2U2ZjRlOTZkODk0NzQ1ZTc4ODVjOTk2Y2RhOGQ0MmMzMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcApAQCAt
MTczLDcgKzE3Myw4IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dmFsaWRhdGVSZWdpb25zKCkK
ICAgICAgICAgICAgICAgICAvLyBBbHNvLCBpZiB3ZSBoYXZlIGF1dG8taGVpZ2h0IHJlZ2lvbnMg
d2UgY2FuJ3QgYXNzdW1lIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCB0byBiZSB0
cnVlIGluIHRoZSBmaXJzdCBwaGFzZQogICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIGF1
dG8taGVpZ2h0IHJlZ2lvbnMgZG9uJ3QgaGF2ZSB0aGVpciBoZWlnaHQgY29tcHV0ZWQgeWV0Lgog
ICAgICAgICAgICAgICAgIGlmIChpbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSAmJiByZWdp
b24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVnaW9u
LT5zZXRDb21wdXRlZEF1dG9IZWlnaHQocmVnaW9uLT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG5hbWVkRmxvd0Zy
YWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pOworICAgICAgICAgICAg
ICAgICAgICBuYW1lZEZsb3dGcmFnbWVudC0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KG5hbWVkRmxv
d0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAg
bV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0ID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgfQogCkBAIC05MTYsOCArOTE3LDEwIEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6aW5pdGlh
bGl6ZVJlZ2lvbnNDb21wdXRlZEF1dG9IZWlnaHQoUmVuZGVyUmVnaW9uKiBzdGFydFJlCiAgICAg
Zm9yIChhdXRvIHJlZ2lvbkl0ZXIgPSBzdGFydFJlZ2lvbiA/IG1fcmVnaW9uTGlzdC5maW5kKHN0
YXJ0UmVnaW9uKSA6IG1fcmVnaW9uTGlzdC5iZWdpbigpLAogICAgICAgICBlbmQgPSBtX3JlZ2lv
bkxpc3QuZW5kKCk7IHJlZ2lvbkl0ZXIgIT0gZW5kOyArK3JlZ2lvbkl0ZXIpIHsKICAgICAgICAg
UmVuZGVyUmVnaW9uKiByZWdpb24gPSAqcmVnaW9uSXRlcjsKLSAgICAgICAgaWYgKHJlZ2lvbi0+
aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgICAgIHJlZ2lvbi0+c2V0Q29tcHV0ZWRB
dXRvSGVpZ2h0KHJlZ2lvbi0+bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7CisgICAgICAgIGlmIChy
ZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQocmVnaW9uKTsKKyAgICAgICAgICAgIG5hbWVkRmxvd0ZyYWdtZW50LT5zZXRDb21wdXRlZEF1
dG9IZWlnaHQobmFtZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOworICAg
ICAgICB9CiAgICAgfQogfQogCkBAIC05NjAsNyArOTYzLDcgQEAgdm9pZCBSZW5kZXJGbG93VGhy
ZWFkOjp1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0KGNvbnN0IFJlbmRlclJlZ2lv
biogbGEKIAogICAgICAgICAvLyBJZiB3ZSBmaW5kIGFuIGVtcHR5IGF1dG8taGVpZ2h0IHJlZ2lv
biwgY2xlYXIgdGhlIGNvbXB1dGVkQXV0b0hlaWdodCB2YWx1ZS4KICAgICAgICAgaWYgKGVtcHR5
UmVnaW9uc1NlZ21lbnQgJiYgcmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQotICAgICAg
ICAgICAgcmVnaW9uLT5jbGVhckNvbXB1dGVkQXV0b0hlaWdodCgpOworICAgICAgICAgICAgdG9S
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pLT5jbGVhckNvbXB1dGVkQXV0b0hlaWdodCgp
OwogCiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbFdpZHRoID0gcmVnaW9uLT5wYWdl
TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIExheW91dFVuaXQgcmVnaW9uTG9naWNhbEhlaWdodCA9
IHN0ZDo6bWluPExheW91dFVuaXQ+KFJlbmRlckZsb3dUaHJlYWQ6Om1heExvZ2ljYWxIZWlnaHQo
KSAtIGxvZ2ljYWxIZWlnaHQsIHJlZ2lvbi0+bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENv
bnRlbnQoKSk7CkBAIC0xMDIyLDIyICsxMDI1LDI0IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6
YWRkRm9yY2VkUmVnaW9uQnJlYWsoY29uc3QgUmVuZGVyQmxvY2sqIGJsb2NrLCBMYXlvdXRVbml0
CiAgICAgTGF5b3V0VW5pdCBvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbiA9IG9mZnNldEJyZWFr
SW5GbG93VGhyZWFkIC0gY3VycmVudFJlZ2lvbk9mZnNldEluRmxvd1RocmVhZDsKIAogICAgIGlm
IChyZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpIHsKKyAgICAgICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIG5hbWVkRmxvd0ZyYWdtZW50ID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dChyZWdpb24pOworCiAgICAgICAgIC8vIEEgZm9yY2VkIGJyZWFrIGNhbiBhcHBlYXIgb25seSBp
biBhbiBhdXRvLWhlaWdodCByZWdpb24gdGhhdCBkaWRuJ3QgaGF2ZSBhIGZvcmNlZCBicmVhayBi
ZWZvcmUuCiAgICAgICAgIC8vIFRoaXMgQVNTRVJUIGlzIGEgZ29vZC1lbm91Z2ggaGV1cmlzdGlj
IHRvIHZlcmlmeSB0aGUgYWJvdmUgY29uZGl0aW9uLgotICAgICAgICBBU1NFUlQocmVnaW9uLT5t
YXhQYWdlTG9naWNhbEhlaWdodCgpID09IHJlZ2lvbi0+Y29tcHV0ZWRBdXRvSGVpZ2h0KCkpOwor
ICAgICAgICBBU1NFUlQobmFtZWRGbG93RnJhZ21lbnQtPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkg
PT0gbmFtZWRGbG93RnJhZ21lbnQtPmNvbXB1dGVkQXV0b0hlaWdodCgpKTsKIAotICAgICAgICBt
YXBUb1VzZS5zZXQoYnJlYWtDaGlsZCwgcmVnaW9uKTsKKyAgICAgICAgbWFwVG9Vc2Uuc2V0KGJy
ZWFrQ2hpbGQsIG5hbWVkRmxvd0ZyYWdtZW50KTsKIAogICAgICAgICBoYXNDb21wdXRlZEF1dG9I
ZWlnaHQgPSB0cnVlOwogCiAgICAgICAgIC8vIENvbXB1dGUgdGhlIHJlZ2lvbiBoZWlnaHQgcHJl
dGVuZGluZyB0aGF0IHRoZSBvZmZzZXRCcmVha0luQ3VycmVudFJlZ2lvbiBpcyB0aGUgbG9naWNh
bEhlaWdodCBmb3IgdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbi4KLSAgICAgICAgTGF5b3V0VW5pdCBy
ZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPSByZWdpb24tPmNvbnN0cmFpbkNvbnRlbnRCb3hMb2dp
Y2FsSGVpZ2h0QnlNaW5NYXgob2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24pOworICAgICAgICBM
YXlvdXRVbml0IHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA9IG5hbWVkRmxvd0ZyYWdtZW50LT5j
b25zdHJhaW5Db250ZW50Qm94TG9naWNhbEhlaWdodEJ5TWluTWF4KG9mZnNldEJyZWFrSW5DdXJy
ZW50UmVnaW9uKTsKIAogICAgICAgICAvLyBUaGUgbmV3IGhlaWdodCBvZiB0aGlzIHJlZ2lvbiBu
ZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWwgdmFsdWUsIHRoZSBtYXggaGVpZ2h0
LiBBIGZvcmNlZCBicmVhayBpcyB0aGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBpbml0aWFsCiAg
ICAgICAgIC8vIGhlaWdodCBvZiBhbiBhdXRvLWhlaWdodCByZWdpb24gYmVzaWRlcyBjb250ZW50
IGVuZGluZy4KLSAgICAgICAgQVNTRVJUKHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCA8PSByZWdp
b24tPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQocmVnaW9uQ29tcHV0
ZWRBdXRvSGVpZ2h0IDw9IG5hbWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgp
KTsKIAotICAgICAgICByZWdpb24tPnNldENvbXB1dGVkQXV0b0hlaWdodChyZWdpb25Db21wdXRl
ZEF1dG9IZWlnaHQpOworICAgICAgICBuYW1lZEZsb3dGcmFnbWVudC0+c2V0Q29tcHV0ZWRBdXRv
SGVpZ2h0KHJlZ2lvbkNvbXB1dGVkQXV0b0hlaWdodCk7CiAKICAgICAgICAgY3VycmVudFJlZ2lv
bk9mZnNldEluRmxvd1RocmVhZCArPSByZWdpb25Db21wdXRlZEF1dG9IZWlnaHQ7CiAgICAgfSBl
bHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5o
CmluZGV4IDAzOGVjM2Y4YjlkMTY3Y2JkMjYzMjRmMWNjYzE5YTU2MDRlNmQwYzMuLjZmMDAzNmRj
NDlmZTY0YThkODI3ODMyMWM1NDRkZjEzZTc4NmFkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCkBAIC0xMDksMTAgKzEwOSw2IEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugb25jZSB3ZSBoYXZl
IGNvbHVtbiBzZXRzIGNvbnN0cmFpbmVkIGJ5IGVuY2xvc2luZyBwYWdlcywgZXRjLgogICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQ7IH0KLQotICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlIHJldHVybiBmYWxzZSwgYnV0IGl0J3MgbGlrZWx5IHdlIHdpbGwg
bGV2ZXJhZ2UgdGhlIGF1dG8gaGVpZ2h0IHJlZ2lvbiBjb2RlIHRvIGRvIGNvbHVtbgotICAgIC8v
IGJhbGFuY2luZy4gVGhhdCdzIHdoeSB3ZSBoYXZlIGFuIG92ZXJyaWRlIG9mIHRoaXMgZnVuY3Rp
b24gdGhhdCBpcyBkaXN0aW5jdCBmcm9tIFJlbmRlclJlZ2lvblNldCdzIG92ZXJyaWRlLgotICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Rmxvd1Ro
cmVhZENvbnRlbnQoY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRl
KSBPVkVSUklERTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudC5jcHAKaW5kZXggZjNhNDA2ZDNjNGU5MDQ3ZmEyMTc1MzFmMGVjZTRl
Y2ZiNDFjNGJkYi4uYTcyODlmYmYyODc4MDIxOWM5YTllNmZkZTA0ZjkxNjk2OGY4ZTE4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuY3BwCkBAIC0zOCwxMSArMzgsMTYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCisjaW5jbHVkZSA8d3RmL1N0YWNrU3RhdHMuaD4KKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6UmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBz
dHlsZSkKICAgICA6IFJlbmRlclJlZ2lvbihkb2N1bWVudCwgc3RkOjptb3ZlKHN0eWxlKSwgbnVs
bHB0cikKICAgICAsIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpCisgICAgLCBtX2hhc0F1
dG9Mb2dpY2FsSGVpZ2h0KGZhbHNlKQorICAgICwgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQoZmFs
c2UpCisgICAgLCBtX2NvbXB1dGVkQXV0b0hlaWdodCgwKQogewogfQogCkBAIC03OCw2ICs4Myw4
IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlm
ZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAg
ICB1cGRhdGVSZWdpb25IYXNBdXRvTG9naWNhbEhlaWdodEZsYWcoKTsKKwogICAgIGNoZWNrUmVn
aW9uU3R5bGUoKTsKIAogICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+bmVlZHNMYXlvdXQo
KSkKQEAgLTk0LDYgKzEwMSw4MiBAQCBib29sIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzaG91
bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgIHJldHVybiBzdHlsZVRvVXNlLmxv
Z2ljYWxIZWlnaHQoKS5pc0F1dG8oKSAmJiAhaGFzQW5jaG9yZWRFbmRwb2ludHNGb3JIZWlnaHQ7
CiB9CiAKK3ZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmluY3JlbWVudEF1dG9Mb2dpY2Fs
SGVpZ2h0Q291bnQoKQoreworICAgIEFTU0VSVChpc1ZhbGlkKCkpOworICAgIEFTU0VSVChtX2hh
c0F1dG9Mb2dpY2FsSGVpZ2h0KTsKKworICAgIG1fZmxvd1RocmVhZC0+aW5jcmVtZW50QXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zKCk7Cit9CisKK3ZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6
OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKQoreworICAgIEFTU0VSVChpc1ZhbGlk
KCkpOworCisgICAgbV9mbG93VGhyZWFkLT5kZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lv
bnMoKTsKK30KKwordm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6dXBkYXRlUmVnaW9uSGFz
QXV0b0xvZ2ljYWxIZWlnaHRGbGFnKCkKK3sKKyAgICBBU1NFUlQobV9mbG93VGhyZWFkKTsKKwor
ICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBib29sIGRpZEhhdmVB
dXRvTG9naWNhbEhlaWdodCA9IG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQ7CisgICAgbV9oYXNBdXRv
TG9naWNhbEhlaWdodCA9IHNob3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpOworICAgIGlmICht
X2hhc0F1dG9Mb2dpY2FsSGVpZ2h0ICE9IGRpZEhhdmVBdXRvTG9naWNhbEhlaWdodCkgeworICAg
ICAgICBpZiAobV9oYXNBdXRvTG9naWNhbEhlaWdodCkKKyAgICAgICAgICAgIGluY3JlbWVudEF1
dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbGVh
ckNvbXB1dGVkQXV0b0hlaWdodCgpOworICAgICAgICAgICAgZGVjcmVtZW50QXV0b0xvZ2ljYWxI
ZWlnaHRDb3VudCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50Ojp1cGRhdGVMb2dpY2FsSGVpZ2h0KCkKK3sKKyAgICBSZW5kZXJSZWdpb246OnVw
ZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKKworICAgIGlmICghaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugd2FudCB0byB1cGRhdGUgdGhlIGxvZ2ljYWwg
aGVpZ2h0IGJhc2VkIG9uIHRoZSBjb21wdXRlZCBhdXRvLWhlaWdodAorICAgIC8vIG9ubHkgYWZ0
ZXIgdGhlIG1lYXN1cmUgY290bmVudCBsYXlvdXQgcGhhc2Ugd2hlbiBhbGwgdGhlCisgICAgLy8g
YXV0byBsb2dpY2FsIGhlaWdodCByZWdpb25zIGhhdmUgYSBjb21wdXRlZCBhdXRvLWhlaWdodC4K
KyAgICBpZiAobV9mbG93VGhyZWFkLT5pbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlcmUgbWF5IGJlIHJlZ2lvbnMgd2l0aCBhdXRvIGxv
Z2ljYWwgaGVpZ2h0IHRoYXQgZHVyaW5nIHRoZSBwcmVyZXF1aXNpdGUgbGF5b3V0IHBoYXNlCisg
ICAgLy8gZGlkIG5vdCBoYXZlIHRoZSBjaGFuY2UgdG8gbGF5b3V0IGZsb3cgdGhyZWFkIGNvbnRl
bnQuIEJlY2F1c2Ugb2YgdGhhdCwgdGhlc2UgcmVnaW9ucyBkbyBub3QKKyAgICAvLyBoYXZlIGEg
Y29tcHV0ZWRBdXRvSGVpZ2h0IGFuZCB0aGV5IHdpbGwgbm90IGJlIGFibGUgdG8gZnJhZ21lbnQg
YW55IGZsb3cKKyAgICAvLyB0aHJlYWQgY29udGVudC4KKyAgICBpZiAoIWhhc0NvbXB1dGVkQXV0
b0hlaWdodCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBMYXlvdXRVbml0IG5ld0xvZ2ljYWxI
ZWlnaHQgPSBjb21wdXRlZEF1dG9IZWlnaHQoKSArIGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsSGVp
Z2h0KCk7CisgICAgQVNTRVJUKG5ld0xvZ2ljYWxIZWlnaHQgPCBMYXlvdXRVbml0OjptYXgoKSAv
IDIpOworICAgIGlmIChuZXdMb2dpY2FsSGVpZ2h0ID4gbG9naWNhbEhlaWdodCgpKSB7CisgICAg
ICAgIHNldExvZ2ljYWxIZWlnaHQobmV3TG9naWNhbEhlaWdodCk7CisgICAgICAgIC8vIFJlY2Fs
Y3VsYXRlIHBvc2l0aW9uIG9mIHRoZSByZW5kZXIgYmxvY2sgYWZ0ZXIgbmV3IGxvZ2ljYWwgaGVp
Z2h0IGlzIHNldC4KKyAgICAgICAgLy8gKG5lZWRlZCBpbiBhYnNvbHV0ZSBwb3NpdGlvbmluZyBj
YXNlIHdpdGggYm90dG9tIGFsaWdubWVudCBmb3IgZXhhbXBsZSkKKyAgICAgICAgUmVuZGVyUmVn
aW9uOjp1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisgICAgfQorfQorCitMYXlvdXRVbml0IFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OjpwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKG1fZmxvd1RocmVhZCk7CisgICAgaWYgKGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpICYmIG1f
Zmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpIHsKKyAgICAgICAgQVNT
RVJUKGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gY29tcHV0ZWRBdXRv
SGVpZ2h0KCk7CisgICAgfQorICAgIHJldHVybiBtX2Zsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBjb250ZW50SGVpZ2h0KCkgOiBjb250ZW50V2lkdGgoKTsKK30KKworLy8g
VGhpcyBtZXRob2QgcmV0dXJucyB0aGUgbWF4aW11bSBwYWdlIHNpemUgb2YgYSByZWdpb24gd2l0
aCBhdXRvLWhlaWdodC4gVGhpcyBpcyB0aGUgaW5pdGlhbAorLy8gaGVpZ2h0IHZhbHVlIGZvciBh
dXRvLWhlaWdodCByZWdpb25zIGluIHRoZSBmaXJzdCBsYXlvdXQgcGhhc2Ugb2YgdGhlIHBhcmVu
dCBuYW1lZCBmbG93LgogTGF5b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6bWF4UGFn
ZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOwpAQCAt
MTA1LDYgKzE4OCwzMSBAQCBMYXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjptYXhQ
YWdlTG9naWNhbEhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0eWxlVG9Vc2UubG9naWNhbE1h
eEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVp
Z2h0KCkgOiB0b1JlbmRlckJsb2NrKHBhcmVudCgpKS0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhl
aWdodFVzaW5nKHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpKTsKIH0KIAordm9pZCBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0KQoreworICAgIFN0YWNrU3RhdHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hl
Y2tQb2ludDsKKyAgICBSZW5kZXJSZWdpb246OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4p
OworCisgICAgaWYgKGlzVmFsaWQoKSkgeworICAgICAgICBMYXlvdXRSZWN0IG9sZFJlZ2lvblJl
Y3QoZmxvd1RocmVhZFBvcnRpb25SZWN0KCkpOworICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCisgICAgICAgICAgICBvbGRSZWdpb25SZWN0ID0gb2xkUmVnaW9uUmVjdC50
cmFuc3Bvc2VkUmVjdCgpOworCisgICAgICAgIGlmIChtX2Zsb3dUaHJlYWQtPmluT3ZlcmZsb3dM
YXlvdXRQaGFzZSgpIHx8IG1fZmxvd1RocmVhZC0+aW5GaW5hbExheW91dFBoYXNlKCkpCisgICAg
ICAgICAgICBjb21wdXRlT3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpOworCisgICAgICAgIGlmICho
YXNBdXRvTG9naWNhbEhlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExh
eW91dFBoYXNlKCkpIHsKKyAgICAgICAgICAgIG1fZmxvd1RocmVhZC0+aW52YWxpZGF0ZVJlZ2lv
bnMoKTsKKyAgICAgICAgICAgIGNsZWFyQ29tcHV0ZWRBdXRvSGVpZ2h0KCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG9sZFJlZ2lvblJlY3Qud2lkdGgo
KSAhPSBwYWdlTG9naWNhbFdpZHRoKCkgfHwgb2xkUmVnaW9uUmVjdC5oZWlnaHQoKSAhPSBwYWdl
TG9naWNhbEhlaWdodCgpKSAmJiAhbV9mbG93VGhyZWFkLT5pbkZpbmFsTGF5b3V0UGhhc2UoKSkK
KyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBldmVuIGlmIHdlIGFyZSBpbiB0aGUgaW5D
b25zdHJhaW5lZExheW91dFBoYXNlIGFuZCBpdCB3aWxsIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwg
bGF5b3V0IG9mIHRoZSBmbG93IHRocmVhZC4KKyAgICAgICAgICAgIG1fZmxvd1RocmVhZC0+aW52
YWxpZGF0ZVJlZ2lvbnMoKTsKKyAgICB9Cit9CisKIHZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQ6OmNoZWNrUmVnaW9uU3R5bGUoKQogewogICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOwpAQCAt
Mjc3LDQgKzM4NSwzMSBAQCBMYXlvdXRSZWN0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojp2aXN1
YWxPdmVyZmxvd1JlY3QoKSBjb25zdAogICAgIHJldHVybiBSZW5kZXJSZWdpb246OnZpc3VhbE92
ZXJmbG93UmVjdCgpOwogfQogCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjphdHRhY2hS
ZWdpb24oKQoreworICAgIFJlbmRlclJlZ2lvbjo6YXR0YWNoUmVnaW9uKCk7CisKKyAgICBpZiAo
ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpIHx8ICFtX2Zsb3dUaHJlYWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIFRoZSByZWdpb24ganVzdCBnb3QgYXR0YWNoZWQgdG8gdGhlIGZsb3cgdGhy
ZWFkLCBsZXRzIGNoZWNrIHdoZXRoZXIKKyAgICAvLyBpdCBoYXMgcmVnaW9uIHN0eWxpbmcgcnVs
ZXMgYXNzb2NpYXRlZC4KKyAgICBjaGVja1JlZ2lvblN0eWxlKCk7CisKKyAgICBpZiAoIWlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oYXNBdXRvTG9naWNhbEhlaWdodCA9IHNo
b3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpOworICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdo
dCgpKQorICAgICAgICBpbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Cit9CisKK3Zv
aWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmRldGFjaFJlZ2lvbigpCit7CisgICAgaWYgKG1f
Zmxvd1RocmVhZCAmJiBoYXNBdXRvTG9naWNhbEhlaWdodCgpKQorICAgICAgICBkZWNyZW1lbnRB
dXRvTG9naWNhbEhlaWdodENvdW50KCk7CisgICAgCisgICAgUmVuZGVyUmVnaW9uOjpkZXRhY2hS
ZWdpb24oKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaAppbmRleCBiMzcwNDk1MzE0
MWM4NWMzYjNiNThjMGQyODVkMDFhMWI4YTliZjRmLi5mNmNiYmE2N2FjOTVhY2U2ZWY0MDc0M2Ey
YzRmYTJkMzdmNTk4NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQuaApAQCAtNTcsNyArNTcsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdCBPVkVSUklERSBGSU5B
TCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBPVkVSUklERTsKIAotICAg
IHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0OworICAgIExheW91dFVu
aXQgbWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIGJvb2wgaXNQc2V1ZG9FbGVt
ZW50UmVnaW9uKCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCkgJiYgcGFyZW50KCktPmlzUHNldWRv
RWxlbWVudCgpOyB9CiAKQEAgLTc5LDE4ICs4MCw0OSBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQqIG5hbWVkRmxvd1RocmVhZCgpIGNvbnN0OwogCisgICAgdmlydHVhbCBi
b29sIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9oYXNB
dXRvTG9naWNhbEhlaWdodDsgfQorCisgICAgTGF5b3V0VW5pdCBjb21wdXRlZEF1dG9IZWlnaHQo
KSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVkQXV0b0hlaWdodDsgfQorCisgICAgdm9pZCBzZXRD
b21wdXRlZEF1dG9IZWlnaHQoTGF5b3V0VW5pdCBjb21wdXRlZEF1dG9IZWlnaHQpCisgICAgewor
ICAgICAgICBtX2hhc0NvbXB1dGVkQXV0b0hlaWdodCA9IHRydWU7CisgICAgICAgIG1fY29tcHV0
ZWRBdXRvSGVpZ2h0ID0gY29tcHV0ZWRBdXRvSGVpZ2h0OworICAgIH0KKworICAgIHZvaWQgY2xl
YXJDb21wdXRlZEF1dG9IZWlnaHQoKQorICAgIHsKKyAgICAgICAgbV9oYXNDb21wdXRlZEF1dG9I
ZWlnaHQgPSBmYWxzZTsKKyAgICAgICAgbV9jb21wdXRlZEF1dG9IZWlnaHQgPSAwOworICAgIH0K
KworICAgIGJvb2wgaGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXND
b21wdXRlZEF1dG9IZWlnaHQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSZWdpb24oKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoUmVnaW9uKCkgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9naWNhbEhlaWdodCgpIE9WRVJSSURFOworCiAvLyBGSVhN
RTogVGVtcG9yYXJpbHkgcHVibGljIHVudGlsIHdlIG1vdmUgYWxsIHRoZSBDU1NSZWdpb25zIGZ1
bmN0aW9uYWxpdHkgZnJvbSBSZW5kZXJSZWdpb24gdG8gaGVyZS4KIHB1YmxpYzoKICAgICB2b2lk
IGNoZWNrUmVnaW9uU3R5bGUoKTsKIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
SGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBjb25z
dCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gIlJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50IjsgfQogCiAgICAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gY29tcHV0ZVN0
eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCBjb21wdXRlQ2hpbGRy
ZW5TdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlckVsZW1lbnQqKTsKICAgICB2b2lkIHNldE9iamVj
dFN0eWxlSW5SZWdpb24oUmVuZGVyT2JqZWN0KiwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4sIGJv
b2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQpOwogCisgICAgdm9pZCB1cGRhdGVSZWdpb25IYXNB
dXRvTG9naWNhbEhlaWdodEZsYWcoKTsKKworICAgIHZvaWQgaW5jcmVtZW50QXV0b0xvZ2ljYWxI
ZWlnaHRDb3VudCgpOworICAgIHZvaWQgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgp
OworCisgICAgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBPVkVSUklERTsKKwogICAgIHN0cnVjdCBPYmplY3RS
ZWdpb25TdHlsZUluZm8gewogICAgICAgICAvLyBVc2VkIHRvIHN0b3JlIHRoZSBvcmlnaW5hbCBz
dHlsZSBvZiB0aGUgb2JqZWN0IGluIHJlZ2lvbgogICAgICAgICAvLyBzbyB0aGF0IHRoZSBvcmln
aW5hbCBzdHlsZSBpcyBwcm9wZXJseSByZXN0b3JlZCBhZnRlciBwYWludC4KQEAgLTEwNiw2ICsx
MzgsMTAgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcCBtX3JlbmRl
ck9iamVjdFJlZ2lvblN0eWxlOwogCiAgICAgYm9vbCBtX2hhc0N1c3RvbVJlZ2lvblN0eWxlIDog
MTsKKyAgICBib29sIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgOiAxOworICAgIGJvb2wgbV9oYXND
b21wdXRlZEF1dG9IZWlnaHQgOiAxOworCisgICAgTGF5b3V0VW5pdCBtX2NvbXB1dGVkQXV0b0hl
aWdodDsKIH07CiAKIFJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCwgaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVnaW9uLmNwcAppbmRleCBhZmEyODgyZGFhYjEzYWI5OGZmZTkyMzAyNThlYTYx
Y2Y4YjIwOGE4Li43N2EzYmUwNTU2YTI5YzhhY2UwZTBmOTgzODMxM2I2OTk2NTY5NTIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcApAQCAtNDQsNyArNDQsNiBA
QAogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSA8d3RmL1N0YWNrU3Rh
dHMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Myw5ICs1Miw2IEBAIFJlbmRlclJl
Z2lvbjo6UmVuZGVyUmVnaW9uKEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+
IHN0eWxlLCBSZW5kZXJGCiAgICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVhZCkKICAgICAsIG1f
cGFyZW50TmFtZWRGbG93VGhyZWFkKDApCiAgICAgLCBtX2lzVmFsaWQoZmFsc2UpCi0gICAgLCBt
X2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KGZhbHNlKQotICAgICwgbV9oYXNDb21wdXRlZEF1dG9IZWln
aHQoZmFsc2UpCi0gICAgLCBtX2NvbXB1dGVkQXV0b0hlaWdodCgwKQogewogfQogCkBAIC02NCw5
ICs2MCw2IEBAIFJlbmRlclJlZ2lvbjo6UmVuZGVyUmVnaW9uKERvY3VtZW50JiBkb2N1bWVudCwg
UGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUsIFJlbmRlCiAgICAgLCBtX2Zsb3dUaHJlYWQoZmxv
d1RocmVhZCkKICAgICAsIG1fcGFyZW50TmFtZWRGbG93VGhyZWFkKDApCiAgICAgLCBtX2lzVmFs
aWQoZmFsc2UpCi0gICAgLCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KGZhbHNlKQotICAgICwgbV9o
YXNDb21wdXRlZEF1dG9IZWlnaHQoZmFsc2UpCi0gICAgLCBtX2NvbXB1dGVkQXV0b0hlaWdodCgw
KQogewogfQogCkBAIC0xMjgsMzAgKzEyMSwxMiBAQCBMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6
cGFnZUxvZ2ljYWxXaWR0aCgpIGNvbnN0CiBMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6cGFnZUxv
Z2ljYWxIZWlnaHQoKSBjb25zdAogewogICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOwotICAgIGlm
IChoYXNDb21wdXRlZEF1dG9IZWlnaHQoKSAmJiBtX2Zsb3dUaHJlYWQtPmluTWVhc3VyZUNvbnRl
bnRMYXlvdXRQaGFzZSgpKSB7Ci0gICAgICAgIEFTU0VSVChoYXNBdXRvTG9naWNhbEhlaWdodCgp
KTsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkQXV0b0hlaWdodCgpOwotICAgIH0KICAgICByZXR1
cm4gbV9mbG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudEhlaWdo
dCgpIDogY29udGVudFdpZHRoKCk7CiB9CiAKLS8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1h
eGltdW0gcGFnZSBzaXplIG9mIGEgcmVnaW9uIHdpdGggYXV0by1oZWlnaHQuIFRoaXMgaXMgdGhl
IGluaXRpYWwKLS8vIGhlaWdodCB2YWx1ZSBmb3IgYXV0by1oZWlnaHQgcmVnaW9ucyBpbiB0aGUg
Zmlyc3QgbGF5b3V0IHBoYXNlIG9mIHRoZSBwYXJlbnQgbmFtZWQgZmxvdy4KLUxheW91dFVuaXQg
UmVuZGVyUmVnaW9uOjptYXhQYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KG1fZmxvd1RocmVhZCk7Ci0gICAgQVNTRVJUKGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkgJiYgbV9m
bG93VGhyZWFkLT5pbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSk7Ci0gICAgcmV0dXJuIHN0
eWxlKCkubG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFk
OjptYXhMb2dpY2FsSGVpZ2h0KCkgOiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmco
c3R5bGUoKS5sb2dpY2FsTWF4SGVpZ2h0KCkpOwotfQotCiBMYXlvdXRVbml0IFJlbmRlclJlZ2lv
bjo6bG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSBjb25zdAogewotICAgIEFT
U0VSVChtX2Zsb3dUaHJlYWQpOwotICAgIGlmIChoYXNDb21wdXRlZEF1dG9IZWlnaHQoKSAmJiBt
X2Zsb3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpKSB7Ci0gICAgICAgIEFT
U0VSVChoYXNBdXRvTG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVkQXV0
b0hlaWdodCgpOwotICAgIH0KLSAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5pc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gY29udGVudEhlaWdodCgpIDogY29udGVudFdpZHRoKCk7CisgICAgcmV0
dXJuIHBhZ2VMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyUmVnaW9uOjpm
bG93VGhyZWFkUG9ydGlvbk92ZXJmbG93UmVjdCgpCkBAIC0yNDcsNDcgKzIyMiw2IEBAIGJvb2wg
UmVuZGVyUmVnaW9uOjppc0xhc3RSZWdpb24oKSBjb25zdAogCiAgICAgcmV0dXJuIG1fZmxvd1Ro
cmVhZC0+bGFzdFJlZ2lvbigpID09IHRoaXM7CiB9Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjppbmNy
ZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCkKLXsKLSAgICBBU1NFUlQoaXNWYWxpZCgpKTsK
LSAgICBBU1NFUlQobV9oYXNBdXRvTG9naWNhbEhlaWdodCk7Ci0KLSAgICBtX2Zsb3dUaHJlYWQt
PmluY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwotfQotCi12b2lkIFJlbmRlclJl
Z2lvbjo6ZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpCi17Ci0gICAgQVNTRVJUKGlz
VmFsaWQoKSk7Ci0KLSAgICBtX2Zsb3dUaHJlYWQtPmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0
UmVnaW9ucygpOwotfQotCi12b2lkIFJlbmRlclJlZ2lvbjo6dXBkYXRlUmVnaW9uSGFzQXV0b0xv
Z2ljYWxIZWlnaHRGbGFnKCkKLXsKLSAgICBBU1NFUlQobV9mbG93VGhyZWFkKTsKLQotICAgIGlm
ICghaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGRpZEhhdmVBdXRvTG9n
aWNhbEhlaWdodCA9IG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQ7Ci0gICAgbV9oYXNBdXRvTG9naWNh
bEhlaWdodCA9IHNob3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpOwotICAgIGlmIChtX2hhc0F1
dG9Mb2dpY2FsSGVpZ2h0ICE9IGRpZEhhdmVBdXRvTG9naWNhbEhlaWdodCkgewotICAgICAgICBp
ZiAobV9oYXNBdXRvTG9naWNhbEhlaWdodCkKLSAgICAgICAgICAgIGluY3JlbWVudEF1dG9Mb2dp
Y2FsSGVpZ2h0Q291bnQoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjbGVhckNvbXB1
dGVkQXV0b0hlaWdodCgpOwotICAgICAgICAgICAgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRD
b3VudCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclJlZ2lvbjo6c2hvdWxk
SGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBib29sIGhhc1NwZWNpZmllZEVu
ZHBvaW50c0ZvckhlaWdodCA9IHN0eWxlKCkubG9naWNhbFRvcCgpLmlzU3BlY2lmaWVkKCkgJiYg
c3R5bGUoKS5sb2dpY2FsQm90dG9tKCkuaXNTcGVjaWZpZWQoKTsKLSAgICBib29sIGhhc0FuY2hv
cmVkRW5kcG9pbnRzRm9ySGVpZ2h0ID0gaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgaGFzU3Bl
Y2lmaWVkRW5kcG9pbnRzRm9ySGVpZ2h0OwotICAgIHJldHVybiBzdHlsZSgpLmxvZ2ljYWxIZWln
aHQoKS5pc0F1dG8oKSAmJiAhaGFzQW5jaG9yZWRFbmRwb2ludHNGb3JIZWlnaHQ7Ci19CiAgICAg
CiB2b2lkIFJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKQEAgLTI5NiwzNyArMjMwLDEwIEBAIHZv
aWQgUmVuZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0CiAgICAgaWYgKCFtX2Zsb3dUaHJlYWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpOwotCiAg
ICAgaWYgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT53cml0aW5nTW9kZSgpICE9IHN0eWxlKCkud3Jp
dGluZ01vZGUoKSkKICAgICAgICAgbV9mbG93VGhyZWFkLT5yZWdpb25DaGFuZ2VkV3JpdGluZ01v
ZGUodGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCi17Ci0gICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQ
b2ludCBsYXlvdXRDaGVja1BvaW50OwotICAgIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0QmxvY2so
cmVsYXlvdXRDaGlsZHJlbik7Ci0KLSAgICBpZiAoaXNWYWxpZCgpKSB7Ci0gICAgICAgIExheW91
dFJlY3Qgb2xkUmVnaW9uUmVjdChmbG93VGhyZWFkUG9ydGlvblJlY3QoKSk7Ci0gICAgICAgIGlm
ICghaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIG9sZFJlZ2lvblJlY3Qg
PSBvbGRSZWdpb25SZWN0LnRyYW5zcG9zZWRSZWN0KCk7Ci0KLSAgICAgICAgaWYgKG1fZmxvd1Ro
cmVhZC0+aW5PdmVyZmxvd0xheW91dFBoYXNlKCkgfHwgbV9mbG93VGhyZWFkLT5pbkZpbmFsTGF5
b3V0UGhhc2UoKSkKLSAgICAgICAgICAgIGNvbXB1dGVPdmVyZmxvd0Zyb21GbG93VGhyZWFkKCk7
Ci0KLSAgICAgICAgaWYgKGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkgJiYgbV9mbG93VGhyZWFkLT5p
bk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSkgewotICAgICAgICAgICAgbV9mbG93VGhyZWFk
LT5pbnZhbGlkYXRlUmVnaW9ucygpOwotICAgICAgICAgICAgY2xlYXJDb21wdXRlZEF1dG9IZWln
aHQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNS
ZW5kZXJSZWdpb25TZXQoKSAmJiAob2xkUmVnaW9uUmVjdC53aWR0aCgpICE9IHBhZ2VMb2dpY2Fs
V2lkdGgoKSB8fCBvbGRSZWdpb25SZWN0LmhlaWdodCgpICE9IHBhZ2VMb2dpY2FsSGVpZ2h0KCkp
ICYmICFtX2Zsb3dUaHJlYWQtPmluRmluYWxMYXlvdXRQaGFzZSgpKQotICAgICAgICAgICAgLy8g
VGhpcyBjYW4gaGFwcGVuIGV2ZW4gaWYgd2UgYXJlIGluIHRoZSBpbkNvbnN0cmFpbmVkTGF5b3V0
UGhhc2UgYW5kIGl0IHdpbGwgdHJpZ2dlciBhIHBhdGhvbG9naWNhbCBsYXlvdXQgb2YgdGhlIGZs
b3cgdGhyZWFkLgotICAgICAgICAgICAgbV9mbG93VGhyZWFkLT5pbnZhbGlkYXRlUmVnaW9ucygp
OwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJSZWdpb246OmNvbXB1dGVPdmVyZmxvd0Zyb21GbG93
VGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKQEAgLTQyNSwyOCArMzMyLDEyIEBA
IHZvaWQgUmVuZGVyUmVnaW9uOjphdHRhY2hSZWdpb24oKQogCiAgICAgLy8gT25seSBhZnRlciBh
ZGRpbmcgdGhlIHJlZ2lvbiB0byB0aGUgdGhyZWFkLCB0aGUgcmVnaW9uIGlzIG1hcmtlZCB0byBi
ZSB2YWxpZC4KICAgICBtX2Zsb3dUaHJlYWQtPmFkZFJlZ2lvblRvVGhyZWFkKHRoaXMpOwotCi0g
ICAgLy8gVGhlIHJlZ2lvbiBqdXN0IGdvdCBhdHRhY2hlZCB0byB0aGUgZmxvdyB0aHJlYWQsIGxl
dHMgY2hlY2sgd2hldGhlcgotICAgIC8vIGl0IGhhcyByZWdpb24gc3R5bGluZyBydWxlcyBhc3Nv
Y2lhdGVkLgotICAgIC8vIEZJWE1FOiBSZW1vdmUgY2FzdCBvbmNlIGF0dGFjaFJlZ2lvbiBpcyBt
b3ZlZCB0byBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC4KLSAgICBpZiAoaXNSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCgpKQotICAgICAgICB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHRoaXMpLT5j
aGVja1JlZ2lvblN0eWxlKCk7Ci0KLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9oYXNBdXRvTG9naWNhbEhlaWdodCA9IHNob3VsZEhhdmVBdXRvTG9naWNhbEhl
aWdodCgpOwotICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdodCgpKQotICAgICAgICBpbmNyZW1l
bnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7CiB9CiAKIHZvaWQgUmVuZGVyUmVnaW9uOjpkZXRh
Y2hSZWdpb24oKQogewotICAgIGlmIChtX2Zsb3dUaHJlYWQpIHsKKyAgICBpZiAobV9mbG93VGhy
ZWFkKQogICAgICAgICBtX2Zsb3dUaHJlYWQtPnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQodGhpcyk7
Ci0gICAgICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAgZGVjcmVt
ZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpOwotICAgIH0KICAgICBtX2Zsb3dUaHJlYWQgPSAw
OwogfQogCkBAIC01NTgsMzYgKzQ0OSw2IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjpnZXRSYW5nZXMo
VmVjdG9yPFJlZlB0cjxSYW5nZT4+JiByYW5nZU9iamVjdHMpIGNvbnN0CiAgICAgbmFtZWRGbG93
LmdldFJhbmdlcyhyYW5nZU9iamVjdHMsIHRoaXMpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6
dXBkYXRlTG9naWNhbEhlaWdodCgpCi17Ci0gICAgUmVuZGVyQmxvY2tGbG93Ojp1cGRhdGVMb2dp
Y2FsSGVpZ2h0KCk7Ci0KLSAgICBpZiAoIWhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFdlIHdhbnQgdG8gdXBkYXRlIHRoZSBsb2dpY2FsIGhlaWdodCBi
YXNlZCBvbiB0aGUgY29tcHV0ZWQgYXV0by1oZWlnaHQKLSAgICAvLyBvbmx5IGFmdGVyIHRoZSBt
ZWFzdXJlIGNvdG5lbnQgbGF5b3V0IHBoYXNlIHdoZW4gYWxsIHRoZQotICAgIC8vIGF1dG8gbG9n
aWNhbCBoZWlnaHQgcmVnaW9ucyBoYXZlIGEgY29tcHV0ZWQgYXV0by1oZWlnaHQuCi0gICAgaWYg
KG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFRoZXJlIG1heSBiZSByZWdpb25zIHdpdGggYXV0byBsb2dpY2FsIGhl
aWdodCB0aGF0IGR1cmluZyB0aGUgcHJlcmVxdWlzaXRlIGxheW91dCBwaGFzZQotICAgIC8vIGRp
ZCBub3QgaGF2ZSB0aGUgY2hhbmNlIHRvIGxheW91dCBmbG93IHRocmVhZCBjb250ZW50LiBCZWNh
dXNlIG9mIHRoYXQsIHRoZXNlIHJlZ2lvbnMgZG8gbm90Ci0gICAgLy8gaGF2ZSBhIGNvbXB1dGVk
QXV0b0hlaWdodCBhbmQgdGhleSB3aWxsIG5vdCBiZSBhYmxlIHRvIGZyYWdtZW50IGFueSBmbG93
Ci0gICAgLy8gdGhyZWFkIGNvbnRlbnQuCi0gICAgaWYgKCFoYXNDb21wdXRlZEF1dG9IZWlnaHQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTGF5b3V0VW5pdCBuZXdMb2dpY2FsSGVpZ2h0ID0g
Y29tcHV0ZWRBdXRvSGVpZ2h0KCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhlaWdodCgpOwot
ICAgIEFTU0VSVChuZXdMb2dpY2FsSGVpZ2h0IDwgTGF5b3V0VW5pdDo6bWF4KCkgLyAyKTsKLSAg
ICBpZiAobmV3TG9naWNhbEhlaWdodCA+IGxvZ2ljYWxIZWlnaHQoKSkgewotICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KG5ld0xvZ2ljYWxIZWlnaHQpOwotICAgICAgICAvLyBSZWNhbGN1bGF0ZSBw
b3NpdGlvbiBvZiB0aGUgcmVuZGVyIGJsb2NrIGFmdGVyIG5ldyBsb2dpY2FsIGhlaWdodCBpcyBz
ZXQuCi0gICAgICAgIC8vIChuZWVkZWQgaW4gYWJzb2x1dGUgcG9zaXRpb25pbmcgY2FzZSB3aXRo
IGJvdHRvbSBhbGlnbm1lbnQgZm9yIGV4YW1wbGUpCi0gICAgICAgIFJlbmRlckJsb2NrRmxvdzo6
dXBkYXRlTG9naWNhbEhlaWdodCgpOwotICAgIH0KLX0KLQogdm9pZCBSZW5kZXJSZWdpb246OmFk
anVzdFJlZ2lvbkJvdW5kc0Zyb21GbG93VGhyZWFkUG9ydGlvblJlY3QoY29uc3QgSW50UG9pbnQm
IGxheWVyT2Zmc2V0LCBJbnRSZWN0JiByZWdpb25Cb3VuZHMpCiB7CiAgICAgTGF5b3V0UmVjdCBm
bGlwcGVkRmxvd1RocmVhZFBvcnRpb25SZWN0ID0gZmxvd1RocmVhZFBvcnRpb25SZWN0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKaW5kZXggZWE0YzNkZmFiMGM3OGQ1
NzE3MzYzMjJiMzg0ZDE0OGQ0ZDdlMzMzZi4uNmE2NmMyNGMxOGFmOWU5YzRmYTk4YjljM2U1ZjYx
NDhjZGQ0ODczYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaApAQCAt
NTksOCArNTksOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgUmVuZGVyTGF5ZXIqIHJlZ2lvbkNvbnRh
aW5lckxheWVyKCkgY29uc3Q7CiAKLSAgICB2b2lkIGF0dGFjaFJlZ2lvbigpOwotICAgIHZvaWQg
ZGV0YWNoUmVnaW9uKCk7CisgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJlZ2lvbigpOworICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hSZWdpb24oKTsKIAogICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCog
cGFyZW50TmFtZWRGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnROYW1lZEZsb3dU
aHJlYWQ7IH0KICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKCkgY29uc3QgeyByZXR1
cm4gbV9mbG93VGhyZWFkOyB9CkBAIC04OCw3ICs4OCw2IEBAIHB1YmxpYzoKICAgICAvLyBoZWln
aHQgb2YgYSBzaW5nbGUgY29sdW1uIG9yIHBhZ2UgaW4gdGhlIHNldC4KICAgICB2aXJ0dWFsIExh
eW91dFVuaXQgcGFnZUxvZ2ljYWxXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBwYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBtYXhQ
YWdlTG9naWNhbEhlaWdodCgpIGNvbnN0OwogCiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2ZG
bG93VGhyZWFkQ29udGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogICAgIExheW91
dFVuaXQgbG9naWNhbEJvdHRvbU9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJl
Y3QmKSBjb25zdDsKQEAgLTEwMiwyNiArMTAxLDYgQEAgcHVibGljOgogICAgIC8vIG9yIGNvbHVt
bnMgYWRkZWQgdG9nZXRoZXIuCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRP
ZkFsbEZsb3dUaHJlYWRDb250ZW50KCkgY29uc3Q7CiAKLSAgICBib29sIGhhc0F1dG9Mb2dpY2Fs
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNBdXRvTG9naWNhbEhlaWdodDsgfQotCi0gICAg
TGF5b3V0VW5pdCBjb21wdXRlZEF1dG9IZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2NvbXB1dGVk
QXV0b0hlaWdodDsgfQotCi0gICAgdm9pZCBzZXRDb21wdXRlZEF1dG9IZWlnaHQoTGF5b3V0VW5p
dCBjb21wdXRlZEF1dG9IZWlnaHQpCi0gICAgewotICAgICAgICBtX2hhc0NvbXB1dGVkQXV0b0hl
aWdodCA9IHRydWU7Ci0gICAgICAgIG1fY29tcHV0ZWRBdXRvSGVpZ2h0ID0gY29tcHV0ZWRBdXRv
SGVpZ2h0OwotICAgIH0KLQotICAgIHZvaWQgY2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKQotICAg
IHsKLSAgICAgICAgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQgPSBmYWxzZTsKLSAgICAgICAgbV9j
b21wdXRlZEF1dG9IZWlnaHQgPSAwOwotICAgIH0KLQotICAgIGJvb2wgaGFzQ29tcHV0ZWRBdXRv
SGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQ7IH0KLQotICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVMb2dpY2FsSGVpZ2h0KCkgT1ZFUlJJREU7Ci0KICAgICAvLyBU
aGUgdG9wIG9mIHRoZSBuZWFyZXN0IHBhZ2UgaW5zaWRlIHRoZSByZWdpb24uIEZvciBSZW5kZXJS
ZWdpb25zLCB0aGlzIGlzIGp1c3QgdGhlIGxvZ2ljYWwgdG9wIG9mIHRoZQogICAgIC8vIGZsb3cg
dGhyZWFkIHBvcnRpb24gd2UgY29udGFpbi4gRm9yIHNldHMsIHdlIGhhdmUgdG8gZmlndXJlIG91
dCB0aGUgdG9wIG9mIHRoZSBuZWFyZXN0IGNvbHVtbiBvcgogICAgIC8vIHBhZ2UuCkBAIC0xNTQs
NiArMTMzLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlR2VuZXJhdGVkQ2hp
bGRyZW4oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYpIE9WRVJSSURF
OwogCisgICAgdmlydHVhbCBib29sIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKwogcHJvdGVjdGVkOgogICAgIFJlbmRlclJlZ2lvbihFbGVtZW50JiwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4sIFJlbmRlckZsb3dUaHJlYWQqKTsKICAgICBSZW5kZXJSZWdpb24o
RG9jdW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPiwgUmVuZGVyRmxvd1RocmVhZCopOwpAQCAt
MTcwLDcgKzE1MSw2IEBAIHByb3RlY3RlZDoKIAogICAgIExheW91dFJlY3Qgb3ZlcmZsb3dSZWN0
Rm9yRmxvd1RocmVhZFBvcnRpb24oY29uc3QgTGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25S
ZWN0LCBib29sIGlzRmlyc3RQb3J0aW9uLCBib29sIGlzTGFzdFBvcnRpb24sIE92ZXJmbG93VHlw
ZSk7CiAgICAgdm9pZCByZXBhaW50Rmxvd1RocmVhZENvbnRlbnRSZWN0YW5nbGUoY29uc3QgTGF5
b3V0UmVjdCYgcmVwYWludFJlY3QsIGJvb2wgaW1tZWRpYXRlLCBjb25zdCBMYXlvdXRSZWN0JiBm
bG93VGhyZWFkUG9ydGlvblJlY3QsIGNvbnN0IExheW91dFBvaW50JiByZWdpb25Mb2NhdGlvbiwg
Y29uc3QgTGF5b3V0UmVjdCogZmxvd1RocmVhZFBvcnRpb25DbGlwUmVjdCA9IDApOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIHZv
aWQgY29tcHV0ZU92ZXJmbG93RnJvbUZsb3dUaHJlYWQoKTsKIApAQCAtMTgwLDE1ICsxNjAsOCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tVHJlZSgpIE9WRVJSSURFOwogCi0g
ICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApIE9WRVJSSURFOwotCiAgICAgdmlydHVhbCB2b2lk
IGluc3RhbGxGbG93VGhyZWFkKCk7CiAKLSAgICB2b2lkIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dp
Y2FsSGVpZ2h0RmxhZygpOwotCi0gICAgdm9pZCBpbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENv
dW50KCk7Ci0gICAgdm9pZCBkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0KICAg
ICBMYXlvdXRQb2ludCBtYXBSZWdpb25Qb2ludEludG9GbG93VGhyZWFkQ29vcmRpbmF0ZXMoY29u
c3QgTGF5b3V0UG9pbnQmKTsKIAogcHJvdGVjdGVkOgpAQCAtMjA5LDEwICsxODIsNiBAQCBwcml2
YXRlOgogICAgIFJlbmRlckJveFJlZ2lvbkluZm9NYXAgbV9yZW5kZXJCb3hSZWdpb25JbmZvOwog
CiAgICAgYm9vbCBtX2lzVmFsaWQgOiAxOwotICAgIGJvb2wgbV9oYXNBdXRvTG9naWNhbEhlaWdo
dCA6IDE7Ci0gICAgYm9vbCBtX2hhc0NvbXB1dGVkQXV0b0hlaWdodCA6IDE7Ci0KLSAgICBMYXlv
dXRVbml0IG1fY29tcHV0ZWRBdXRvSGVpZ2h0OwogfTsKIAogUkVOREVSX09CSkVDVF9UWVBFX0NB
U1RTKFJlbmRlclJlZ2lvbiwgaXNSZW5kZXJSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb25TZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZWdpb25TZXQuaAppbmRleCAxMDBiYzQ4MTY3Njk0YzliNWI2OTA2Y2IzZjRi
YWU5ZjA4MzI0Y2JiLi4yNjJmOTZmMjMzOWQxODVjNzAwNDJhODFjMzQ5ZDMyYzZlNDRlNTFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvblNldC5oCkBAIC00OCw3ICs0
OCw2IEBAIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7CiBjbGFzcyBSZW5kZXJSZWdpb25TZXQgOiBw
dWJsaWMgUmVuZGVyUmVnaW9uIHsKIHByb3RlY3RlZDoKICAgICBSZW5kZXJSZWdpb25TZXQoRG9j
dW1lbnQmLCBQYXNzUmVmPFJlbmRlclN0eWxlPiwgUmVuZGVyRmxvd1RocmVhZCYpOwotICAgIHZp
cnR1YWwgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBpbnN0YWxsRmxv
d1RocmVhZCgpIE9WRVJSSURFIEZJTkFMOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDI1MGMwNDhhODgxOTZmMzhhYTllOWQxNjkyZjJjZDI3
ZTUwOGRkMWMuLmRiNzgyYzcyYjJhZmJlNGY3MjNhZDU1OTc4ZjM1Y2Y2ZTdjNzIwNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTY2OCw3
ICs2NjgsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlclJlZ2lvbkxpc3QoY29uc3QgUmVuZGVy
UmVnaW9uTGlzdCYgZmxvd1RocmVhZFJlZ2lvbkxpc3QsCiAgICAgICAgICAgICBib29sIGlzUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQgPSByZW5kZXJSZWdpb24tPmlzUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKTsKICAgICAgICAgICAgIGlmIChpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ICYmIHRv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVuZGVyUmVnaW9uKS0+aGFzQ3VzdG9tUmVnaW9uU3R5
bGUoKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIHJlZ2lvbiBzdHlsZTogMSI7Ci0gICAgICAg
ICAgICBpZiAocmVuZGVyUmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQorICAgICAgICAg
ICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgdG9SZW5kZXJOYW1lZEZsb3dGcmFn
bWVudChyZW5kZXJSZWdpb24pLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKQogICAgICAgICAgICAg
ICAgIHRzIDw8ICIgaGFzQXV0b0xvZ2ljYWxIZWlnaHQiOwogCiAgICAgICAgICAgICBpZiAoaXNS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220709</attachid>
            <date>2014-01-09 03:26:22 -0800</date>
            <delta_ts>2014-01-09 04:02:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122959-20140109132920.patch</filename>
            <type>text/plain</type>
            <size>29397</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNDkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk1NGM1MmQ3NzRmOGYx
ZjI5OTU3MTdkZTE3NzVhOWEzNjllZmE3ZC4uOTVlMWY4ZWY3MWFjOTA2NGVkYzExYjIzODAwMTc4
OGRkNjVhYjE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE0LTAxLTA5ICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgorCisgICAgICAgIFtDU1NSZWdpb25zXSBNb3Zl
IHJlZ2lvbnMgYXV0by1zaXplIGNvZGUgaW50byBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTU5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTWlobmVhIE92aWRlbmllLgorCisgICAgICAgIE1vdmUgdGhlIGF1
dG8taGVpZ2h0IGxvZ2ljIGZyb20gUmVuZGVyUmVnaW9uIHRvIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50IGJlY2F1c2UgaXQncworICAgICAgICB1c2VkIG9ubHkgYnkgdGhlIENTUyBSZWdpb25zIGlt
cGxlbWVudGF0aW9uLgorCisgICAgICAgIEJ1ZyAxMjY2NDIgY292ZXJzIHRoZSBhdXRvLWhlaWdo
dCBsb2dpYyBtb3ZlIGZyb20gUmVuZGVyRmxvd1RocmVhZCB0byBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQuCisKKyAgICAgICAgVGVzdHM6IE5vIG5ldyB0ZXN0cywganVzdCByZWZhY3RvcmluZ3MuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGbG93VGhyZWFkOjp2YWxpZGF0ZVJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvd1RocmVhZDo6aXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3Rl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aW5pdGlhbGl6ZVJlZ2lv
bnNDb21wdXRlZEF1dG9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVh
ZDo6bWFya0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0ZvckxheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVSZWdpb25zRmxvd1RocmVhZFBvcnRpb25SZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNlZFJlZ2lvbkJy
ZWFrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzdHlsZURpZENoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6aW5jcmVtZW50
QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6ZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6dXBkYXRlUmVnaW9uSGFzQXV0b0xvZ2lj
YWxIZWlnaHRGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
Ojp1cGRhdGVMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OjpwYWdlTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OmF0dGFjaFJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6ZGV0YWNoUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6UmVuZGVyUmVnaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFnZUxvZ2ljYWxIZWlnaHQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFk
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OmlzTGFzdFJlZ2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6YXR0YWNoUmVnaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclJlZ2lvbjo6ZGV0YWNoUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvblNldC5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlUmVuZGVyUmVnaW9uTGlzdCk6CisKIDIwMTQtMDEtMDcgIEFudHRpIEtvaXZpc3RvICA8
YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNjExOTUpOiBBY2lkMiBy
ZWdyZXNzaW9uIHRlc3RzIGZyZXF1ZW50bHkgZmFpbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IDEzOGM5ZWE1Mjc3M2Q5NThjNzEwMmU2ZWQ2
YWQyMTZiNGNkN2E2ZGIuLmVmOTBlZGNlNmY0ZTk2ZDg5NDc0NWU3ODg1Yzk5NmNkYThkNDJjMzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKQEAg
LTE3Myw3ICsxNzMsOCBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnZhbGlkYXRlUmVnaW9ucygp
CiAgICAgICAgICAgICAgICAgLy8gQWxzbywgaWYgd2UgaGF2ZSBhdXRvLWhlaWdodCByZWdpb25z
IHdlIGNhbid0IGFzc3VtZSBtX3JlZ2lvbnNIYXZlVW5pZm9ybUxvZ2ljYWxIZWlnaHQgdG8gYmUg
dHJ1ZSBpbiB0aGUgZmlyc3QgcGhhc2UKICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBh
dXRvLWhlaWdodCByZWdpb25zIGRvbid0IGhhdmUgdGhlaXIgaGVpZ2h0IGNvbXB1dGVkIHlldC4K
ICAgICAgICAgICAgICAgICBpZiAoaW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkgJiYgcmVn
aW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZ2lv
bi0+c2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KHJlZ2lvbi0+bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dG
cmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQtPnNldENvbXB1dGVkQXV0b0hlaWdodChuYW1lZEZs
b3dGcmFnbWVudC0+bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIH0KIApAQCAtOTE2LDggKzkxNywxMCBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmluaXRp
YWxpemVSZWdpb25zQ29tcHV0ZWRBdXRvSGVpZ2h0KFJlbmRlclJlZ2lvbiogc3RhcnRSZQogICAg
IGZvciAoYXV0byByZWdpb25JdGVyID0gc3RhcnRSZWdpb24gPyBtX3JlZ2lvbkxpc3QuZmluZChz
dGFydFJlZ2lvbikgOiBtX3JlZ2lvbkxpc3QuYmVnaW4oKSwKICAgICAgICAgZW5kID0gbV9yZWdp
b25MaXN0LmVuZCgpOyByZWdpb25JdGVyICE9IGVuZDsgKytyZWdpb25JdGVyKSB7CiAgICAgICAg
IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKnJlZ2lvbkl0ZXI7Ci0gICAgICAgIGlmIChyZWdpb24t
Pmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICByZWdpb24tPnNldENvbXB1dGVk
QXV0b0hlaWdodChyZWdpb24tPm1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkpOworICAgICAgICBpZiAo
cmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7CisgICAgICAgICAgICBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSB0b1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KHJlZ2lvbik7CisgICAgICAgICAgICBuYW1lZEZsb3dGcmFnbWVudC0+c2V0Q29tcHV0ZWRB
dXRvSGVpZ2h0KG5hbWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKKyAg
ICAgICAgfQogICAgIH0KIH0KIApAQCAtOTYwLDcgKzk2Myw3IEBAIHZvaWQgUmVuZGVyRmxvd1Ro
cmVhZDo6dXBkYXRlUmVnaW9uc0Zsb3dUaHJlYWRQb3J0aW9uUmVjdChjb25zdCBSZW5kZXJSZWdp
b24qIGxhCiAKICAgICAgICAgLy8gSWYgd2UgZmluZCBhbiBlbXB0eSBhdXRvLWhlaWdodCByZWdp
b24sIGNsZWFyIHRoZSBjb21wdXRlZEF1dG9IZWlnaHQgdmFsdWUuCiAgICAgICAgIGlmIChlbXB0
eVJlZ2lvbnNTZWdtZW50ICYmIHJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAgICAg
ICAgICAgIHJlZ2lvbi0+Y2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKTsKKyAgICAgICAgICAgIHRv
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQocmVnaW9uKS0+Y2xlYXJDb21wdXRlZEF1dG9IZWlnaHQo
KTsKIAogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxXaWR0aCA9IHJlZ2lvbi0+cGFn
ZUxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBMYXlvdXRVbml0IHJlZ2lvbkxvZ2ljYWxIZWlnaHQg
PSBzdGQ6Om1pbjxMYXlvdXRVbml0PihSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVpZ2h0
KCkgLSBsb2dpY2FsSGVpZ2h0LCByZWdpb24tPmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRD
b250ZW50KCkpOwpAQCAtMTAyMiwyMiArMTAyNSwyNCBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6
OmFkZEZvcmNlZFJlZ2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiBibG9jaywgTGF5b3V0VW5p
dAogICAgIExheW91dFVuaXQgb2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24gPSBvZmZzZXRCcmVh
a0luRmxvd1RocmVhZCAtIGN1cnJlbnRSZWdpb25PZmZzZXRJbkZsb3dUaHJlYWQ7CiAKICAgICBp
ZiAocmVnaW9uLT5oYXNBdXRvTG9naWNhbEhlaWdodCgpKSB7CisgICAgICAgIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KiBuYW1lZEZsb3dGcmFnbWVudCA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQocmVnaW9uKTsKKwogICAgICAgICAvLyBBIGZvcmNlZCBicmVhayBjYW4gYXBwZWFyIG9ubHkg
aW4gYW4gYXV0by1oZWlnaHQgcmVnaW9uIHRoYXQgZGlkbid0IGhhdmUgYSBmb3JjZWQgYnJlYWsg
YmVmb3JlLgogICAgICAgICAvLyBUaGlzIEFTU0VSVCBpcyBhIGdvb2QtZW5vdWdoIGhldXJpc3Rp
YyB0byB2ZXJpZnkgdGhlIGFib3ZlIGNvbmRpdGlvbi4KLSAgICAgICAgQVNTRVJUKHJlZ2lvbi0+
bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSA9PSByZWdpb24tPmNvbXB1dGVkQXV0b0hlaWdodCgpKTsK
KyAgICAgICAgQVNTRVJUKG5hbWVkRmxvd0ZyYWdtZW50LT5tYXhQYWdlTG9naWNhbEhlaWdodCgp
ID09IG5hbWVkRmxvd0ZyYWdtZW50LT5jb21wdXRlZEF1dG9IZWlnaHQoKSk7CiAKLSAgICAgICAg
bWFwVG9Vc2Uuc2V0KGJyZWFrQ2hpbGQsIHJlZ2lvbik7CisgICAgICAgIG1hcFRvVXNlLnNldChi
cmVha0NoaWxkLCBuYW1lZEZsb3dGcmFnbWVudCk7CiAKICAgICAgICAgaGFzQ29tcHV0ZWRBdXRv
SGVpZ2h0ID0gdHJ1ZTsKIAogICAgICAgICAvLyBDb21wdXRlIHRoZSByZWdpb24gaGVpZ2h0IHBy
ZXRlbmRpbmcgdGhhdCB0aGUgb2Zmc2V0QnJlYWtJbkN1cnJlbnRSZWdpb24gaXMgdGhlIGxvZ2lj
YWxIZWlnaHQgZm9yIHRoZSBhdXRvLWhlaWdodCByZWdpb24uCi0gICAgICAgIExheW91dFVuaXQg
cmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0ID0gcmVnaW9uLT5jb25zdHJhaW5Db250ZW50Qm94TG9n
aWNhbEhlaWdodEJ5TWluTWF4KG9mZnNldEJyZWFrSW5DdXJyZW50UmVnaW9uKTsKKyAgICAgICAg
TGF5b3V0VW5pdCByZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPSBuYW1lZEZsb3dGcmFnbWVudC0+
Y29uc3RyYWluQ29udGVudEJveExvZ2ljYWxIZWlnaHRCeU1pbk1heChvZmZzZXRCcmVha0luQ3Vy
cmVudFJlZ2lvbik7CiAKICAgICAgICAgLy8gVGhlIG5ldyBoZWlnaHQgb2YgdGhpcyByZWdpb24g
bmVlZHMgdG8gYmUgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsIHZhbHVlLCB0aGUgbWF4IGhlaWdo
dC4gQSBmb3JjZWQgYnJlYWsgaXMgdGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgaW5pdGlhbAog
ICAgICAgICAvLyBoZWlnaHQgb2YgYW4gYXV0by1oZWlnaHQgcmVnaW9uIGJlc2lkZXMgY29udGVu
dCBlbmRpbmcuCi0gICAgICAgIEFTU0VSVChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQgPD0gcmVn
aW9uLT5tYXhQYWdlTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHJlZ2lvbkNvbXB1
dGVkQXV0b0hlaWdodCA8PSBuYW1lZEZsb3dGcmFnbWVudC0+bWF4UGFnZUxvZ2ljYWxIZWlnaHQo
KSk7CiAKLSAgICAgICAgcmVnaW9uLT5zZXRDb21wdXRlZEF1dG9IZWlnaHQocmVnaW9uQ29tcHV0
ZWRBdXRvSGVpZ2h0KTsKKyAgICAgICAgbmFtZWRGbG93RnJhZ21lbnQtPnNldENvbXB1dGVkQXV0
b0hlaWdodChyZWdpb25Db21wdXRlZEF1dG9IZWlnaHQpOwogCiAgICAgICAgIGN1cnJlbnRSZWdp
b25PZmZzZXRJbkZsb3dUaHJlYWQgKz0gcmVnaW9uQ29tcHV0ZWRBdXRvSGVpZ2h0OwogICAgIH0g
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQu
aAppbmRleCAwMzhlYzNmOGI5ZDE2N2NiZDI2MzI0ZjFjY2MxOWE1NjA0ZTZkMGMzLi42ZjAwMzZk
YzQ5ZmU2NGE4ZDgyNzgzMjFjNTQ0ZGYxM2U3ODZhZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaApAQCAtMTA5LDEwICsxMDksNiBAQCBw
cml2YXRlOgogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hhbmdlIG9uY2Ugd2UgaGF2
ZSBjb2x1bW4gc2V0cyBjb25zdHJhaW5lZCBieSBlbmNsb3NpbmcgcGFnZXMsIGV0Yy4KICAgICB2
aXJ0dWFsIExheW91dFVuaXQgbG9naWNhbEhlaWdodE9mQWxsRmxvd1RocmVhZENvbnRlbnQoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX2NvbXB1dGVkQ29sdW1uSGVpZ2h0OyB9Ci0KLSAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSByZXR1cm4gZmFsc2UsIGJ1dCBpdCdzIGxpa2VseSB3ZSB3aWxs
IGxldmVyYWdlIHRoZSBhdXRvIGhlaWdodCByZWdpb24gY29kZSB0byBkbyBjb2x1bW4KLSAgICAv
LyBiYWxhbmNpbmcuIFRoYXQncyB3aHkgd2UgaGF2ZSBhbiBvdmVycmlkZSBvZiB0aGlzIGZ1bmN0
aW9uIHRoYXQgaXMgZGlzdGluY3QgZnJvbSBSZW5kZXJSZWdpb25TZXQncyBvdmVycmlkZS4KLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gZmFsc2U7IH0KICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludEZsb3dU
aHJlYWRDb250ZW50KGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0
ZSkgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuY3BwCmluZGV4IGYzYTQwNmQzYzRlOTA0N2ZhMjE3NTMxZjBlY2U0
ZWNmYjQxYzRiZGIuLjVjNWVkNTExYzFhMGZjMzgyOWRiOTgwZTU1NTA4MGU4OGEwZDIxYTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LmNwcApAQCAtMzgsMTEgKzM4LDE2IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2lu
Y2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAorI2luY2x1ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OlJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50KERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4g
c3R5bGUpCiAgICAgOiBSZW5kZXJSZWdpb24oZG9jdW1lbnQsIHN0ZDo6bW92ZShzdHlsZSksIG51
bGxwdHIpCiAgICAgLCBtX2hhc0N1c3RvbVJlZ2lvblN0eWxlKGZhbHNlKQorICAgICwgbV9oYXNB
dXRvTG9naWNhbEhlaWdodChmYWxzZSkKKyAgICAsIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KGZh
bHNlKQorICAgICwgbV9jb21wdXRlZEF1dG9IZWlnaHQoMCkKIHsKIH0KIApAQCAtNzgsNiArODMs
OCBAQCB2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzdHlsZURpZENoYW5nZShTdHlsZURp
ZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyUwogICAgICAgICByZXR1cm47CiAgICAgfQogCisg
ICAgdXBkYXRlUmVnaW9uSGFzQXV0b0xvZ2ljYWxIZWlnaHRGbGFnKCk7CisKICAgICBjaGVja1Jl
Z2lvblN0eWxlKCk7CiAKICAgICBpZiAocGFyZW50KCkgJiYgcGFyZW50KCktPm5lZWRzTGF5b3V0
KCkpCkBAIC05NCw2ICsxMDEsODIgQEAgYm9vbCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c2hv
dWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCkgY29uc3QKICAgICByZXR1cm4gc3R5bGVUb1VzZS5s
b2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgIWhhc0FuY2hvcmVkRW5kcG9pbnRzRm9ySGVpZ2h0
OwogfQogCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjppbmNyZW1lbnRBdXRvTG9naWNh
bEhlaWdodENvdW50KCkKK3sKKyAgICBBU1NFUlQoaXNWYWxpZCgpKTsKKyAgICBBU1NFUlQobV9o
YXNBdXRvTG9naWNhbEhlaWdodCk7CisKKyAgICBtX2Zsb3dUaHJlYWQtPmluY3JlbWVudEF1dG9M
b2dpY2FsSGVpZ2h0UmVnaW9ucygpOworfQorCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OjpkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCkKK3sKKyAgICBBU1NFUlQoaXNWYWxp
ZCgpKTsKKworICAgIG1fZmxvd1RocmVhZC0+ZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRSZWdp
b25zKCk7Cit9CisKK3ZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnVwZGF0ZVJlZ2lvbkhh
c0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpCit7CisgICAgQVNTRVJUKG1fZmxvd1RocmVhZCk7CisK
KyAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBkaWRIYXZl
QXV0b0xvZ2ljYWxIZWlnaHQgPSBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0OworICAgIG1faGFzQXV0
b0xvZ2ljYWxIZWlnaHQgPSBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAo
bV9oYXNBdXRvTG9naWNhbEhlaWdodCAhPSBkaWRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQpIHsKKyAg
ICAgICAgaWYgKG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQpCisgICAgICAgICAgICBpbmNyZW1lbnRB
dXRvTG9naWNhbEhlaWdodENvdW50KCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2xl
YXJDb21wdXRlZEF1dG9IZWlnaHQoKTsKKyAgICAgICAgICAgIGRlY3JlbWVudEF1dG9Mb2dpY2Fs
SGVpZ2h0Q291bnQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6dXBkYXRlTG9naWNhbEhlaWdodCgpCit7CisgICAgUmVuZGVyUmVnaW9uOjp1
cGRhdGVMb2dpY2FsSGVpZ2h0KCk7CisKKyAgICBpZiAoIWhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIHdhbnQgdG8gdXBkYXRlIHRoZSBsb2dpY2Fs
IGhlaWdodCBiYXNlZCBvbiB0aGUgY29tcHV0ZWQgYXV0by1oZWlnaHQKKyAgICAvLyBvbmx5IGFm
dGVyIHRoZSBtZWFzdXJlIGNvdG5lbnQgbGF5b3V0IHBoYXNlIHdoZW4gYWxsIHRoZQorICAgIC8v
IGF1dG8gbG9naWNhbCBoZWlnaHQgcmVnaW9ucyBoYXZlIGEgY29tcHV0ZWQgYXV0by1oZWlnaHQu
CisgICAgaWYgKG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZXJlIG1heSBiZSByZWdpb25zIHdpdGggYXV0byBs
b2dpY2FsIGhlaWdodCB0aGF0IGR1cmluZyB0aGUgcHJlcmVxdWlzaXRlIGxheW91dCBwaGFzZQor
ICAgIC8vIGRpZCBub3QgaGF2ZSB0aGUgY2hhbmNlIHRvIGxheW91dCBmbG93IHRocmVhZCBjb250
ZW50LiBCZWNhdXNlIG9mIHRoYXQsIHRoZXNlIHJlZ2lvbnMgZG8gbm90CisgICAgLy8gaGF2ZSBh
IGNvbXB1dGVkQXV0b0hlaWdodCBhbmQgdGhleSB3aWxsIG5vdCBiZSBhYmxlIHRvIGZyYWdtZW50
IGFueSBmbG93CisgICAgLy8gdGhyZWFkIGNvbnRlbnQuCisgICAgaWYgKCFoYXNDb21wdXRlZEF1
dG9IZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgTGF5b3V0VW5pdCBuZXdMb2dpY2Fs
SGVpZ2h0ID0gY29tcHV0ZWRBdXRvSGVpZ2h0KCkgKyBib3JkZXJBbmRQYWRkaW5nTG9naWNhbEhl
aWdodCgpOworICAgIEFTU0VSVChuZXdMb2dpY2FsSGVpZ2h0IDwgUmVuZGVyRmxvd1RocmVhZDo6
bWF4TG9naWNhbEhlaWdodCgpKTsKKyAgICBpZiAobmV3TG9naWNhbEhlaWdodCA+IGxvZ2ljYWxI
ZWlnaHQoKSkgeworICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG5ld0xvZ2ljYWxIZWlnaHQpOwor
ICAgICAgICAvLyBSZWNhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUgcmVuZGVyIGJsb2NrIGFmdGVy
IG5ldyBsb2dpY2FsIGhlaWdodCBpcyBzZXQuCisgICAgICAgIC8vIChuZWVkZWQgaW4gYWJzb2x1
dGUgcG9zaXRpb25pbmcgY2FzZSB3aXRoIGJvdHRvbSBhbGlnbm1lbnQgZm9yIGV4YW1wbGUpCisg
ICAgICAgIFJlbmRlclJlZ2lvbjo6dXBkYXRlTG9naWNhbEhlaWdodCgpOworICAgIH0KK30KKwor
TGF5b3V0VW5pdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6cGFnZUxvZ2ljYWxIZWlnaHQoKSBj
b25zdAoreworICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOworICAgIGlmIChoYXNDb21wdXRlZEF1
dG9IZWlnaHQoKSAmJiBtX2Zsb3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgp
KSB7CisgICAgICAgIEFTU0VSVChoYXNBdXRvTG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgcmV0
dXJuIGNvbXB1dGVkQXV0b0hlaWdodCgpOworICAgIH0KKyAgICByZXR1cm4gbV9mbG93VGhyZWFk
LT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY29udGVudEhlaWdodCgpIDogY29udGVudFdp
ZHRoKCk7Cit9CisKKy8vIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG1heGltdW0gcGFnZSBzaXpl
IG9mIGEgcmVnaW9uIHdpdGggYXV0by1oZWlnaHQuIFRoaXMgaXMgdGhlIGluaXRpYWwKKy8vIGhl
aWdodCB2YWx1ZSBmb3IgYXV0by1oZWlnaHQgcmVnaW9ucyBpbiB0aGUgZmlyc3QgbGF5b3V0IHBo
YXNlIG9mIHRoZSBwYXJlbnQgbmFtZWQgZmxvdy4KIExheW91dFVuaXQgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6Om1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9m
bG93VGhyZWFkKTsKQEAgLTEwNSw2ICsxODgsMzEgQEAgTGF5b3V0VW5pdCBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdAogICAgIHJldHVybiBzdHls
ZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gUmVuZGVyRmxvd1RocmVh
ZDo6bWF4TG9naWNhbEhlaWdodCgpIDogdG9SZW5kZXJCbG9jayhwYXJlbnQoKSktPmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZVRvVXNlLmxvZ2ljYWxNYXhIZWlnaHQoKSk7
CiB9CiAKK3ZvaWQgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OmxheW91dEJsb2NrKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKK3sKKyAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVj
a1BvaW50IGxheW91dENoZWNrUG9pbnQ7CisgICAgUmVuZGVyUmVnaW9uOjpsYXlvdXRCbG9jayhy
ZWxheW91dENoaWxkcmVuKTsKKworICAgIGlmIChpc1ZhbGlkKCkpIHsKKyAgICAgICAgTGF5b3V0
UmVjdCBvbGRSZWdpb25SZWN0KGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpKTsKKyAgICAgICAgaWYg
KCFpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgb2xkUmVnaW9uUmVjdCA9
IG9sZFJlZ2lvblJlY3QudHJhbnNwb3NlZFJlY3QoKTsKKworICAgICAgICBpZiAobV9mbG93VGhy
ZWFkLT5pbk92ZXJmbG93TGF5b3V0UGhhc2UoKSB8fCBtX2Zsb3dUaHJlYWQtPmluRmluYWxMYXlv
dXRQaGFzZSgpKQorICAgICAgICAgICAgY29tcHV0ZU92ZXJmbG93RnJvbUZsb3dUaHJlYWQoKTsK
KworICAgICAgICBpZiAoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSAmJiBtX2Zsb3dUaHJlYWQtPmlu
TWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFzZSgpKSB7CisgICAgICAgICAgICBtX2Zsb3dUaHJlYWQt
PmludmFsaWRhdGVSZWdpb25zKCk7CisgICAgICAgICAgICBjbGVhckNvbXB1dGVkQXV0b0hlaWdo
dCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChvbGRS
ZWdpb25SZWN0LndpZHRoKCkgIT0gcGFnZUxvZ2ljYWxXaWR0aCgpIHx8IG9sZFJlZ2lvblJlY3Qu
aGVpZ2h0KCkgIT0gcGFnZUxvZ2ljYWxIZWlnaHQoKSkgJiYgIW1fZmxvd1RocmVhZC0+aW5GaW5h
bExheW91dFBoYXNlKCkpCisgICAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gZXZlbiBpZiB3
ZSBhcmUgaW4gdGhlIGluQ29uc3RyYWluZWRMYXlvdXRQaGFzZSBhbmQgaXQgd2lsbCB0cmlnZ2Vy
IGEgcGF0aG9sb2dpY2FsIGxheW91dCBvZiB0aGUgZmxvdyB0aHJlYWQuCisgICAgICAgICAgICBt
X2Zsb3dUaHJlYWQtPmludmFsaWRhdGVSZWdpb25zKCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OjpjaGVja1JlZ2lvblN0eWxlKCkKIHsKICAgICBBU1NFUlQobV9m
bG93VGhyZWFkKTsKQEAgLTI3Nyw0ICszODUsMzEgQEAgTGF5b3V0UmVjdCBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6dmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3QKICAgICByZXR1cm4gUmVuZGVy
UmVnaW9uOjp2aXN1YWxPdmVyZmxvd1JlY3QoKTsKIH0KIAordm9pZCBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudDo6YXR0YWNoUmVnaW9uKCkKK3sKKyAgICBSZW5kZXJSZWdpb246OmF0dGFjaFJlZ2lv
bigpOworCisgICAgaWYgKGRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSB8fCAhbV9mbG93VGhyZWFk
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgcmVnaW9uIGp1c3QgZ290IGF0dGFjaGVk
IHRvIHRoZSBmbG93IHRocmVhZCwgbGV0cyBjaGVjayB3aGV0aGVyCisgICAgLy8gaXQgaGFzIHJl
Z2lvbiBzdHlsaW5nIHJ1bGVzIGFzc29jaWF0ZWQuCisgICAgY2hlY2tSZWdpb25TdHlsZSgpOwor
CisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGFzQXV0b0xv
Z2ljYWxIZWlnaHQgPSBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKTsKKyAgICBpZiAoaGFz
QXV0b0xvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgaW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRD
b3VudCgpOworfQorCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpkZXRhY2hSZWdpb24o
KQoreworICAgIGlmIChtX2Zsb3dUaHJlYWQgJiYgaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKKyAg
ICAgICAgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpOworICAgIAorICAgIFJlbmRl
clJlZ2lvbjo6ZGV0YWNoUmVnaW9uKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgK
aW5kZXggYjM3MDQ5NTMxNDFjODVjM2IzYjU4YzBkMjg1ZDAxYTFiOGE5YmY0Zi4uZjZjYmJhNjdh
Yzk1YWNlNmVmNDA3NDNhMmM0ZmEyZDM3ZjU5ODZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKQEAgLTU3LDcgKzU3LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkgY29u
c3QgT1ZFUlJJREUgRklOQUwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzdHls
ZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkg
T1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIExheW91dFVuaXQgbWF4UGFnZUxvZ2ljYWxIZWlnaHQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25z
dDsKKyAgICBMYXlvdXRVbml0IG1heFBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3Q7CiAKICAgICBi
b29sIGlzUHNldWRvRWxlbWVudFJlZ2lvbigpIGNvbnN0IHsgcmV0dXJuIHBhcmVudCgpICYmIHBh
cmVudCgpLT5pc1BzZXVkb0VsZW1lbnQoKTsgfQogCkBAIC03OSwxOCArODAsNDkgQEAgcHVibGlj
OgogCiAgICAgUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBuYW1lZEZsb3dUaHJlYWQoKSBjb25zdDsK
IAorICAgIHZpcnR1YWwgYm9vbCBoYXNBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQ7IH0KKworICAgIExheW91dFVuaXQgY29t
cHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlZEF1dG9IZWlnaHQ7IH0K
KworICAgIHZvaWQgc2V0Q29tcHV0ZWRBdXRvSGVpZ2h0KExheW91dFVuaXQgY29tcHV0ZWRBdXRv
SGVpZ2h0KQorICAgIHsKKyAgICAgICAgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0cnVlOwor
ICAgICAgICBtX2NvbXB1dGVkQXV0b0hlaWdodCA9IGNvbXB1dGVkQXV0b0hlaWdodDsKKyAgICB9
CisKKyAgICB2b2lkIGNsZWFyQ29tcHV0ZWRBdXRvSGVpZ2h0KCkKKyAgICB7CisgICAgICAgIG1f
aGFzQ29tcHV0ZWRBdXRvSGVpZ2h0ID0gZmFsc2U7CisgICAgICAgIG1fY29tcHV0ZWRBdXRvSGVp
Z2h0ID0gMDsKKyAgICB9CisKKyAgICBib29sIGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YXR0YWNoUmVnaW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRldGFjaFJlZ2lvbigp
IE9WRVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvZ2ljYWxIZWlnaHQoKSBPVkVS
UklERTsKKwogLy8gRklYTUU6IFRlbXBvcmFyaWx5IHB1YmxpYyB1bnRpbCB3ZSBtb3ZlIGFsbCB0
aGUgQ1NTUmVnaW9ucyBmdW5jdGlvbmFsaXR5IGZyb20gUmVuZGVyUmVnaW9uIHRvIGhlcmUuCiBw
dWJsaWM6CiAgICAgdm9pZCBjaGVja1JlZ2lvblN0eWxlKCk7CiAKIHByaXZhdGU6Ci0gICAgdmly
dHVhbCBib29sIHNob3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0
dXJuICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCI7IH0KIAogICAgIFBhc3NSZWZQdHI8UmVuZGVy
U3R5bGU+IGNvbXB1dGVTdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOwogICAgIHZv
aWQgY29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJFbGVtZW50Kik7CiAg
ICAgdm9pZCBzZXRPYmplY3RTdHlsZUluUmVnaW9uKFJlbmRlck9iamVjdCosIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+LCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKIAorICAgIHZvaWQg
dXBkYXRlUmVnaW9uSGFzQXV0b0xvZ2ljYWxIZWlnaHRGbGFnKCk7CisKKyAgICB2b2lkIGluY3Jl
bWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKKyAgICB2b2lkIGRlY3JlbWVudEF1dG9Mb2dp
Y2FsSGVpZ2h0Q291bnQoKTsKKworICAgIGJvb2wgc2hvdWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0
KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENo
aWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCkgT1ZFUlJJREU7CisKICAg
ICBzdHJ1Y3QgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHsKICAgICAgICAgLy8gVXNlZCB0byBzdG9y
ZSB0aGUgb3JpZ2luYWwgc3R5bGUgb2YgdGhlIG9iamVjdCBpbiByZWdpb24KICAgICAgICAgLy8g
c28gdGhhdCB0aGUgb3JpZ2luYWwgc3R5bGUgaXMgcHJvcGVybHkgcmVzdG9yZWQgYWZ0ZXIgcGFp
bnQuCkBAIC0xMDYsNiArMTM4LDEwIEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0UmVnaW9u
U3R5bGVNYXAgbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZTsKIAogICAgIGJvb2wgbV9oYXNDdXN0
b21SZWdpb25TdHlsZSA6IDE7CisgICAgYm9vbCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0IDogMTsK
KyAgICBib29sIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0IDogMTsKKworICAgIExheW91dFVuaXQg
bV9jb21wdXRlZEF1dG9IZWlnaHQ7CiB9OwogCiBSRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAKaW5kZXggYWZhMjg4MmRhYWIxM2Fi
OThmZmU5MjMwMjU4ZWE2MWNmOGIyMDhhOC4uNzdhM2JlMDU1NmEyOWM4YWNlMGUwZjk4MzgzMTNi
Njk5NjU2OTUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAK
QEAgLTQ0LDcgKzQ0LDYgQEAKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1
ZGUgPHd0Zi9TdGFja1N0YXRzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTMsOSAr
NTIsNiBAQCBSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbihFbGVtZW50JiBlbGVtZW50LCBQYXNz
UmVmPFJlbmRlclN0eWxlPiBzdHlsZSwgUmVuZGVyRgogICAgICwgbV9mbG93VGhyZWFkKGZsb3dU
aHJlYWQpCiAgICAgLCBtX3BhcmVudE5hbWVkRmxvd1RocmVhZCgwKQogICAgICwgbV9pc1ZhbGlk
KGZhbHNlKQotICAgICwgbV9oYXNBdXRvTG9naWNhbEhlaWdodChmYWxzZSkKLSAgICAsIG1faGFz
Q29tcHV0ZWRBdXRvSGVpZ2h0KGZhbHNlKQotICAgICwgbV9jb21wdXRlZEF1dG9IZWlnaHQoMCkK
IHsKIH0KIApAQCAtNjQsOSArNjAsNiBAQCBSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbihEb2N1
bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlLCBSZW5kZQogICAgICwg
bV9mbG93VGhyZWFkKGZsb3dUaHJlYWQpCiAgICAgLCBtX3BhcmVudE5hbWVkRmxvd1RocmVhZCgw
KQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQotICAgICwgbV9oYXNBdXRvTG9naWNhbEhlaWdodChm
YWxzZSkKLSAgICAsIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KGZhbHNlKQotICAgICwgbV9jb21w
dXRlZEF1dG9IZWlnaHQoMCkKIHsKIH0KIApAQCAtMTI4LDMwICsxMjEsMTIgQEAgTGF5b3V0VW5p
dCBSZW5kZXJSZWdpb246OnBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdAogTGF5b3V0VW5pdCBSZW5k
ZXJSZWdpb246OnBhZ2VMb2dpY2FsSGVpZ2h0KCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9mbG93
VGhyZWFkKTsKLSAgICBpZiAoaGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KCkgJiYgbV9mbG93VGhyZWFk
LT5pbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2UoKSkgewotICAgICAgICBBU1NFUlQoaGFzQXV0
b0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIHJldHVybiBjb21wdXRlZEF1dG9IZWlnaHQoKTsK
LSAgICB9CiAgICAgcmV0dXJuIG1fZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSA/IGNvbnRlbnRIZWlnaHQoKSA6IGNvbnRlbnRXaWR0aCgpOwogfQogCi0vLyBUaGlzIG1ldGhv
ZCByZXR1cm5zIHRoZSBtYXhpbXVtIHBhZ2Ugc2l6ZSBvZiBhIHJlZ2lvbiB3aXRoIGF1dG8taGVp
Z2h0LiBUaGlzIGlzIHRoZSBpbml0aWFsCi0vLyBoZWlnaHQgdmFsdWUgZm9yIGF1dG8taGVpZ2h0
IHJlZ2lvbnMgaW4gdGhlIGZpcnN0IGxheW91dCBwaGFzZSBvZiB0aGUgcGFyZW50IG5hbWVkIGZs
b3cuCi1MYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6bWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25z
dAotewotICAgIEFTU0VSVChtX2Zsb3dUaHJlYWQpOwotICAgIEFTU0VSVChoYXNBdXRvTG9naWNh
bEhlaWdodCgpICYmIG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkp
OwotICAgIHJldHVybiBzdHlsZSgpLmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8g
UmVuZGVyRmxvd1RocmVhZDo6bWF4TG9naWNhbEhlaWdodCgpIDogY29tcHV0ZVJlcGxhY2VkTG9n
aWNhbEhlaWdodFVzaW5nKHN0eWxlKCkubG9naWNhbE1heEhlaWdodCgpKTsKLX0KLQogTGF5b3V0
VW5pdCBSZW5kZXJSZWdpb246OmxvZ2ljYWxIZWlnaHRPZkFsbEZsb3dUaHJlYWRDb250ZW50KCkg
Y29uc3QKIHsKLSAgICBBU1NFUlQobV9mbG93VGhyZWFkKTsKLSAgICBpZiAoaGFzQ29tcHV0ZWRB
dXRvSGVpZ2h0KCkgJiYgbV9mbG93VGhyZWFkLT5pbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2Uo
KSkgewotICAgICAgICBBU1NFUlQoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIHJl
dHVybiBjb21wdXRlZEF1dG9IZWlnaHQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZmxvd1RocmVh
ZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNvbnRlbnRIZWlnaHQoKSA6IGNvbnRlbnRX
aWR0aCgpOworICAgIHJldHVybiBwYWdlTG9naWNhbEhlaWdodCgpOwogfQogCiBMYXlvdXRSZWN0
IFJlbmRlclJlZ2lvbjo6Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKQpAQCAtMjQ3LDQ3
ICsyMjIsNiBAQCBib29sIFJlbmRlclJlZ2lvbjo6aXNMYXN0UmVnaW9uKCkgY29uc3QKIAogICAg
IHJldHVybiBtX2Zsb3dUaHJlYWQtPmxhc3RSZWdpb24oKSA9PSB0aGlzOwogfQotCi12b2lkIFJl
bmRlclJlZ2lvbjo6aW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpCi17Ci0gICAgQVNT
RVJUKGlzVmFsaWQoKSk7Ci0gICAgQVNTRVJUKG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQpOwotCi0g
ICAgbV9mbG93VGhyZWFkLT5pbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLX0K
LQotdm9pZCBSZW5kZXJSZWdpb246OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKQot
ewotICAgIEFTU0VSVChpc1ZhbGlkKCkpOwotCi0gICAgbV9mbG93VGhyZWFkLT5kZWNyZW1lbnRB
dXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OnVwZGF0
ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpCi17Ci0gICAgQVNTRVJUKG1fZmxvd1Ro
cmVhZCk7Ci0KLSAgICBpZiAoIWlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9v
bCBkaWRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQgPSBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0OwotICAg
IG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgPSBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKTsK
LSAgICBpZiAobV9oYXNBdXRvTG9naWNhbEhlaWdodCAhPSBkaWRIYXZlQXV0b0xvZ2ljYWxIZWln
aHQpIHsKLSAgICAgICAgaWYgKG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQpCi0gICAgICAgICAgICBp
bmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgY2xlYXJDb21wdXRlZEF1dG9IZWlnaHQoKTsKLSAgICAgICAgICAgIGRlY3JlbWVudEF1
dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBSZW5k
ZXJSZWdpb246OnNob3VsZEhhdmVBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0Ci17Ci0gICAgYm9v
bCBoYXNTcGVjaWZpZWRFbmRwb2ludHNGb3JIZWlnaHQgPSBzdHlsZSgpLmxvZ2ljYWxUb3AoKS5p
c1NwZWNpZmllZCgpICYmIHN0eWxlKCkubG9naWNhbEJvdHRvbSgpLmlzU3BlY2lmaWVkKCk7Ci0g
ICAgYm9vbCBoYXNBbmNob3JlZEVuZHBvaW50c0ZvckhlaWdodCA9IGlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpICYmIGhhc1NwZWNpZmllZEVuZHBvaW50c0ZvckhlaWdodDsKLSAgICByZXR1cm4gc3R5
bGUoKS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkgJiYgIWhhc0FuY2hvcmVkRW5kcG9pbnRzRm9y
SGVpZ2h0OwotfQogICAgIAogdm9pZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCiB7CkBAIC0yOTYs
MzcgKzIzMCwxMCBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdAogICAgIGlmICghbV9mbG93VGhy
ZWFkKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVSZWdpb25IYXNBdXRvTG9naWNhbEhl
aWdodEZsYWcoKTsKLQogICAgIGlmIChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+d3JpdGluZ01vZGUo
KSAhPSBzdHlsZSgpLndyaXRpbmdNb2RlKCkpCiAgICAgICAgIG1fZmxvd1RocmVhZC0+cmVnaW9u
Q2hhbmdlZFdyaXRpbmdNb2RlKHRoaXMpOwogfQogCi12b2lkIFJlbmRlclJlZ2lvbjo6bGF5b3V0
QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQotewotICAgIFN0YWNrU3Rh
dHM6OkxheW91dENoZWNrUG9pbnQgbGF5b3V0Q2hlY2tQb2ludDsKLSAgICBSZW5kZXJCbG9ja0Zs
b3c6OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4pOwotCi0gICAgaWYgKGlzVmFsaWQoKSkg
ewotICAgICAgICBMYXlvdXRSZWN0IG9sZFJlZ2lvblJlY3QoZmxvd1RocmVhZFBvcnRpb25SZWN0
KCkpOwotICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAg
ICBvbGRSZWdpb25SZWN0ID0gb2xkUmVnaW9uUmVjdC50cmFuc3Bvc2VkUmVjdCgpOwotCi0gICAg
ICAgIGlmIChtX2Zsb3dUaHJlYWQtPmluT3ZlcmZsb3dMYXlvdXRQaGFzZSgpIHx8IG1fZmxvd1Ro
cmVhZC0+aW5GaW5hbExheW91dFBoYXNlKCkpCi0gICAgICAgICAgICBjb21wdXRlT3ZlcmZsb3dG
cm9tRmxvd1RocmVhZCgpOwotCi0gICAgICAgIGlmIChoYXNBdXRvTG9naWNhbEhlaWdodCgpICYm
IG1fZmxvd1RocmVhZC0+aW5NZWFzdXJlQ29udGVudExheW91dFBoYXNlKCkpIHsKLSAgICAgICAg
ICAgIG1fZmxvd1RocmVhZC0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKLSAgICAgICAgICAgIGNsZWFy
Q29tcHV0ZWRBdXRvSGVpZ2h0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWlzUmVuZGVyUmVnaW9uU2V0KCkgJiYgKG9sZFJlZ2lvblJlY3Qud2lkdGgo
KSAhPSBwYWdlTG9naWNhbFdpZHRoKCkgfHwgb2xkUmVnaW9uUmVjdC5oZWlnaHQoKSAhPSBwYWdl
TG9naWNhbEhlaWdodCgpKSAmJiAhbV9mbG93VGhyZWFkLT5pbkZpbmFsTGF5b3V0UGhhc2UoKSkK
LSAgICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBldmVuIGlmIHdlIGFyZSBpbiB0aGUgaW5D
b25zdHJhaW5lZExheW91dFBoYXNlIGFuZCBpdCB3aWxsIHRyaWdnZXIgYSBwYXRob2xvZ2ljYWwg
bGF5b3V0IG9mIHRoZSBmbG93IHRocmVhZC4KLSAgICAgICAgICAgIG1fZmxvd1RocmVhZC0+aW52
YWxpZGF0ZVJlZ2lvbnMoKTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRl
T3ZlcmZsb3dGcm9tRmxvd1RocmVhZCgpCiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7CkBAIC00
MjUsMjggKzMzMiwxMiBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6YXR0YWNoUmVnaW9uKCkKIAogICAg
IC8vIE9ubHkgYWZ0ZXIgYWRkaW5nIHRoZSByZWdpb24gdG8gdGhlIHRocmVhZCwgdGhlIHJlZ2lv
biBpcyBtYXJrZWQgdG8gYmUgdmFsaWQuCiAgICAgbV9mbG93VGhyZWFkLT5hZGRSZWdpb25Ub1Ro
cmVhZCh0aGlzKTsKLQotICAgIC8vIFRoZSByZWdpb24ganVzdCBnb3QgYXR0YWNoZWQgdG8gdGhl
IGZsb3cgdGhyZWFkLCBsZXRzIGNoZWNrIHdoZXRoZXIKLSAgICAvLyBpdCBoYXMgcmVnaW9uIHN0
eWxpbmcgcnVsZXMgYXNzb2NpYXRlZC4KLSAgICAvLyBGSVhNRTogUmVtb3ZlIGNhc3Qgb25jZSBh
dHRhY2hSZWdpb24gaXMgbW92ZWQgdG8gUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuCi0gICAgaWYg
KGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKLSAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCh0aGlzKS0+Y2hlY2tSZWdpb25TdHlsZSgpOwotCi0gICAgaWYgKCFpc1ZhbGlkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgPSBzaG91bGRI
YXZlQXV0b0xvZ2ljYWxIZWlnaHQoKTsKLSAgICBpZiAoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkK
LSAgICAgICAgaW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRDb3VudCgpOwogfQogCiB2b2lkIFJl
bmRlclJlZ2lvbjo6ZGV0YWNoUmVnaW9uKCkKIHsKLSAgICBpZiAobV9mbG93VGhyZWFkKSB7Cisg
ICAgaWYgKG1fZmxvd1RocmVhZCkKICAgICAgICAgbV9mbG93VGhyZWFkLT5yZW1vdmVSZWdpb25G
cm9tVGhyZWFkKHRoaXMpOwotICAgICAgICBpZiAoaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAg
ICAgICAgICAgIGRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0Q291bnQoKTsKLSAgICB9CiAgICAg
bV9mbG93VGhyZWFkID0gMDsKIH0KIApAQCAtNTU4LDM2ICs0NDksNiBAQCB2b2lkIFJlbmRlclJl
Z2lvbjo6Z2V0UmFuZ2VzKFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzKSBjb25z
dAogICAgIG5hbWVkRmxvdy5nZXRSYW5nZXMocmFuZ2VPYmplY3RzLCB0aGlzKTsKIH0KIAotdm9p
ZCBSZW5kZXJSZWdpb246OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKQotewotICAgIFJlbmRlckJsb2Nr
Rmxvdzo6dXBkYXRlTG9naWNhbEhlaWdodCgpOwotCi0gICAgaWYgKCFoYXNBdXRvTG9naWNhbEhl
aWdodCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSB3YW50IHRvIHVwZGF0ZSB0aGUg
bG9naWNhbCBoZWlnaHQgYmFzZWQgb24gdGhlIGNvbXB1dGVkIGF1dG8taGVpZ2h0Ci0gICAgLy8g
b25seSBhZnRlciB0aGUgbWVhc3VyZSBjb3RuZW50IGxheW91dCBwaGFzZSB3aGVuIGFsbCB0aGUK
LSAgICAvLyBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbnMgaGF2ZSBhIGNvbXB1dGVkIGF1dG8t
aGVpZ2h0LgotICAgIGlmIChtX2Zsb3dUaHJlYWQtPmluTWVhc3VyZUNvbnRlbnRMYXlvdXRQaGFz
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVyZSBtYXkgYmUgcmVnaW9ucyB3aXRo
IGF1dG8gbG9naWNhbCBoZWlnaHQgdGhhdCBkdXJpbmcgdGhlIHByZXJlcXVpc2l0ZSBsYXlvdXQg
cGhhc2UKLSAgICAvLyBkaWQgbm90IGhhdmUgdGhlIGNoYW5jZSB0byBsYXlvdXQgZmxvdyB0aHJl
YWQgY29udGVudC4gQmVjYXVzZSBvZiB0aGF0LCB0aGVzZSByZWdpb25zIGRvIG5vdAotICAgIC8v
IGhhdmUgYSBjb21wdXRlZEF1dG9IZWlnaHQgYW5kIHRoZXkgd2lsbCBub3QgYmUgYWJsZSB0byBm
cmFnbWVudCBhbnkgZmxvdwotICAgIC8vIHRocmVhZCBjb250ZW50LgotICAgIGlmICghaGFzQ29t
cHV0ZWRBdXRvSGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIExheW91dFVuaXQgbmV3
TG9naWNhbEhlaWdodCA9IGNvbXB1dGVkQXV0b0hlaWdodCgpICsgYm9yZGVyQW5kUGFkZGluZ0xv
Z2ljYWxIZWlnaHQoKTsKLSAgICBBU1NFUlQobmV3TG9naWNhbEhlaWdodCA8IExheW91dFVuaXQ6
Om1heCgpIC8gMik7Ci0gICAgaWYgKG5ld0xvZ2ljYWxIZWlnaHQgPiBsb2dpY2FsSGVpZ2h0KCkp
IHsKLSAgICAgICAgc2V0TG9naWNhbEhlaWdodChuZXdMb2dpY2FsSGVpZ2h0KTsKLSAgICAgICAg
Ly8gUmVjYWxjdWxhdGUgcG9zaXRpb24gb2YgdGhlIHJlbmRlciBibG9jayBhZnRlciBuZXcgbG9n
aWNhbCBoZWlnaHQgaXMgc2V0LgotICAgICAgICAvLyAobmVlZGVkIGluIGFic29sdXRlIHBvc2l0
aW9uaW5nIGNhc2Ugd2l0aCBib3R0b20gYWxpZ25tZW50IGZvciBleGFtcGxlKQotICAgICAgICBS
ZW5kZXJCbG9ja0Zsb3c6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICB9Ci19Ci0KIHZvaWQg
UmVuZGVyUmVnaW9uOjphZGp1c3RSZWdpb25Cb3VuZHNGcm9tRmxvd1RocmVhZFBvcnRpb25SZWN0
KGNvbnN0IEludFBvaW50JiBsYXllck9mZnNldCwgSW50UmVjdCYgcmVnaW9uQm91bmRzKQogewog
ICAgIExheW91dFJlY3QgZmxpcHBlZEZsb3dUaHJlYWRQb3J0aW9uUmVjdCA9IGZsb3dUaHJlYWRQ
b3J0aW9uUmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oCmluZGV4
IGVhNGMzZGZhYjBjNzhkNTcxNzM2MzIyYjM4NGQxNDhkNGQ3ZTMzM2YuLjZhNjZjMjRjMThhZjll
OWM0ZmE5OGI5YzNlNWY2MTQ4Y2RkNDg3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZWdpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUmVnaW9uLmgKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogICAgIAogICAgIFJlbmRlckxh
eWVyKiByZWdpb25Db250YWluZXJMYXllcigpIGNvbnN0OwogCi0gICAgdm9pZCBhdHRhY2hSZWdp
b24oKTsKLSAgICB2b2lkIGRldGFjaFJlZ2lvbigpOworICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hS
ZWdpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoUmVnaW9uKCk7CiAKICAgICBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQqIHBhcmVudE5hbWVkRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyZW50TmFtZWRGbG93VGhyZWFkOyB9CiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVh
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQpAQCAtODgsNyArODgsNiBAQCBwdWJs
aWM6CiAgICAgLy8gaGVpZ2h0IG9mIGEgc2luZ2xlIGNvbHVtbiBvciBwYWdlIGluIHRoZSBzZXQu
CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsV2lkdGgoKSBjb25zdDsKICAgICB2
aXJ0dWFsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IExheW91dFVuaXQgbWF4UGFnZUxvZ2ljYWxIZWlnaHQoKSBjb25zdDsKIAogICAgIExheW91dFVu
aXQgbG9naWNhbFRvcE9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmKSBj
b25zdDsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21PZkZsb3dUaHJlYWRDb250ZW50UmVj
dChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CkBAIC0xMDIsMjYgKzEwMSw2IEBAIHB1YmxpYzoK
ICAgICAvLyBvciBjb2x1bW5zIGFkZGVkIHRvZ2V0aGVyLgogICAgIHZpcnR1YWwgTGF5b3V0VW5p
dCBsb2dpY2FsSGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpIGNvbnN0OwogCi0gICAgYm9v
bCBoYXNBdXRvTG9naWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQXV0b0xvZ2ljYWxI
ZWlnaHQ7IH0KLQotICAgIExheW91dFVuaXQgY29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb21wdXRlZEF1dG9IZWlnaHQ7IH0KLQotICAgIHZvaWQgc2V0Q29tcHV0ZWRBdXRv
SGVpZ2h0KExheW91dFVuaXQgY29tcHV0ZWRBdXRvSGVpZ2h0KQotICAgIHsKLSAgICAgICAgbV9o
YXNDb21wdXRlZEF1dG9IZWlnaHQgPSB0cnVlOwotICAgICAgICBtX2NvbXB1dGVkQXV0b0hlaWdo
dCA9IGNvbXB1dGVkQXV0b0hlaWdodDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyQ29tcHV0ZWRB
dXRvSGVpZ2h0KCkKLSAgICB7Ci0gICAgICAgIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0ID0gZmFs
c2U7Ci0gICAgICAgIG1fY29tcHV0ZWRBdXRvSGVpZ2h0ID0gMDsKLSAgICB9Ci0KLSAgICBib29s
IGhhc0NvbXB1dGVkQXV0b0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ29tcHV0ZWRBdXRv
SGVpZ2h0OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9naWNhbEhlaWdodCgpIE9WRVJS
SURFOwotCiAgICAgLy8gVGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBwYWdlIGluc2lkZSB0aGUgcmVn
aW9uLiBGb3IgUmVuZGVyUmVnaW9ucywgdGhpcyBpcyBqdXN0IHRoZSBsb2dpY2FsIHRvcCBvZiB0
aGUKICAgICAvLyBmbG93IHRocmVhZCBwb3J0aW9uIHdlIGNvbnRhaW4uIEZvciBzZXRzLCB3ZSBo
YXZlIHRvIGZpZ3VyZSBvdXQgdGhlIHRvcCBvZiB0aGUgbmVhcmVzdCBjb2x1bW4gb3IKICAgICAv
LyBwYWdlLgpAQCAtMTU0LDYgKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
SGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0
UG9pbnQmKSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgYm9vbCBoYXNBdXRvTG9naWNhbEhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKIHByb3RlY3RlZDoKICAgICBSZW5kZXJSZWdp
b24oRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+LCBSZW5kZXJGbG93VGhyZWFkKik7CiAg
ICAgUmVuZGVyUmVnaW9uKERvY3VtZW50JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4sIFJlbmRlckZs
b3dUaHJlYWQqKTsKQEAgLTE3MCw3ICsxNTEsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBMYXlvdXRS
ZWN0IG92ZXJmbG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKGNvbnN0IExheW91dFJlY3QmIGZs
b3dUaHJlYWRQb3J0aW9uUmVjdCwgYm9vbCBpc0ZpcnN0UG9ydGlvbiwgYm9vbCBpc0xhc3RQb3J0
aW9uLCBPdmVyZmxvd1R5cGUpOwogICAgIHZvaWQgcmVwYWludEZsb3dUaHJlYWRDb250ZW50UmVj
dGFuZ2xlKGNvbnN0IExheW91dFJlY3QmIHJlcGFpbnRSZWN0LCBib29sIGltbWVkaWF0ZSwgY29u
c3QgTGF5b3V0UmVjdCYgZmxvd1RocmVhZFBvcnRpb25SZWN0LCBjb25zdCBMYXlvdXRQb2ludCYg
cmVnaW9uTG9jYXRpb24sIGNvbnN0IExheW91dFJlY3QqIGZsb3dUaHJlYWRQb3J0aW9uQ2xpcFJl
Y3QgPSAwKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCkg
Y29uc3Q7CiAKICAgICB2b2lkIGNvbXB1dGVPdmVyZmxvd0Zyb21GbG93VGhyZWFkKCk7CiAKQEAg
LTE4MCwxNSArMTYwLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
VHJlZSgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUo
KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBPVkVSUklERTsKLQog
ICAgIHZpcnR1YWwgdm9pZCBpbnN0YWxsRmxvd1RocmVhZCgpOwogCi0gICAgdm9pZCB1cGRhdGVS
ZWdpb25IYXNBdXRvTG9naWNhbEhlaWdodEZsYWcoKTsKLQotICAgIHZvaWQgaW5jcmVtZW50QXV0
b0xvZ2ljYWxIZWlnaHRDb3VudCgpOwotICAgIHZvaWQgZGVjcmVtZW50QXV0b0xvZ2ljYWxIZWln
aHRDb3VudCgpOwotCiAgICAgTGF5b3V0UG9pbnQgbWFwUmVnaW9uUG9pbnRJbnRvRmxvd1RocmVh
ZENvb3JkaW5hdGVzKGNvbnN0IExheW91dFBvaW50Jik7CiAKIHByb3RlY3RlZDoKQEAgLTIwOSwx
MCArMTgyLDYgQEAgcHJpdmF0ZToKICAgICBSZW5kZXJCb3hSZWdpb25JbmZvTWFwIG1fcmVuZGVy
Qm94UmVnaW9uSW5mbzsKIAogICAgIGJvb2wgbV9pc1ZhbGlkIDogMTsKLSAgICBib29sIG1faGFz
QXV0b0xvZ2ljYWxIZWlnaHQgOiAxOwotICAgIGJvb2wgbV9oYXNDb21wdXRlZEF1dG9IZWlnaHQg
OiAxOwotCi0gICAgTGF5b3V0VW5pdCBtX2NvbXB1dGVkQXV0b0hlaWdodDsKIH07CiAKIFJFTkRF
Ul9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJSZWdpb24sIGlzUmVuZGVyUmVnaW9uKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uU2V0LmgKaW5kZXggMTAwYmM0ODE2NzY5
NGM5YjViNjkwNmNiM2Y0YmFlOWYwODMyNGNiYi4uMjYyZjk2ZjIzMzlkMTg1YzcwMDQyYTgxYzM0
OWQzMmM2ZTQ0ZTUxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvblNldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb25T
ZXQuaApAQCAtNDgsNyArNDgsNiBAQCBjbGFzcyBSZW5kZXJGbG93VGhyZWFkOwogY2xhc3MgUmVu
ZGVyUmVnaW9uU2V0IDogcHVibGljIFJlbmRlclJlZ2lvbiB7CiBwcm90ZWN0ZWQ6CiAgICAgUmVu
ZGVyUmVnaW9uU2V0KERvY3VtZW50JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4sIFJlbmRlckZsb3dU
aHJlYWQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSGF2ZUF1dG9Mb2dpY2FsSGVpZ2h0KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgaW5zdGFsbEZsb3dUaHJlYWQoKSBPVkVSUklERSBGSU5BTDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>