<?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>122282</bug_id>
          
          <creation_ts>2013-10-03 09:51:54 -0700</creation_ts>
          <short_desc>Move float logical location/dimension methods to RenderBlockFlow</short_desc>
          <delta_ts>2013-10-09 17:34:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bem Jones-Bey">bjonesbe</reporter>
          <assigned_to name="Bem Jones-Bey">bjonesbe</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>935831</commentid>
    <comment_count>0</comment_count>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-10-03 09:51:54 -0700</bug_when>
    <thetext>Move float logical location/dimension methods to FloatingObjects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935844</commentid>
    <comment_count>1</comment_count>
      <attachid>213273</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-10-03 10:22:45 -0700</bug_when>
    <thetext>Created attachment 213273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935851</commentid>
    <comment_count>2</comment_count>
      <attachid>213273</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-10-03 10:29:07 -0700</bug_when>
    <thetext>Comment on attachment 213273
Patch

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

&gt; Source/WebCore/rendering/FloatingObjects.h:152
&gt; +    LayoutUnit logicalTopForFloat(const FloatingObject* floatingObject) const { return m_horizontalWritingMode ? floatingObject-&gt;y() : floatingObject-&gt;x(); }
&gt; +    LayoutUnit logicalBottomForFloat(const FloatingObject* floatingObject) const { return m_horizontalWritingMode ? floatingObject-&gt;maxY() : floatingObject-&gt;maxX(); }
&gt; +    LayoutUnit logicalLeftForFloat(const FloatingObject* floatingObject) const { return m_horizontalWritingMode ? floatingObject-&gt;x() : floatingObject-&gt;y(); }
&gt; +    LayoutUnit logicalRightForFloat(const FloatingObject* floatingObject) const { return m_horizontalWritingMode ? floatingObject-&gt;maxX() : floatingObject-&gt;maxY(); }
&gt; +    LayoutUnit logicalWidthForFloat(const FloatingObject* floatingObject) const { return m_horizontalWritingMode ? floatingObject-&gt;width() : floatingObject-&gt;height(); }
&gt; +    LayoutUnit logicalHeightForFloat(const FloatingObject* floatingObject) const { return m_horizontalWritingMode ? floatingObject-&gt;height() : floatingObject-&gt;width(); }

You should add corresponding methods to RenderBlock. There&apos;s no reason to force callers to fetch floatingObjects() just to ask about a float. I think it&apos;s fine to add these methods here, but you should add wrappers in RenderBlock so that the call sites don&apos;t have to retrieve a floatingObjects().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>935853</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-10-03 10:30:18 -0700</bug_when>
    <thetext>Actually I guess RenderBlock methods wouldn&apos;t even have to call the floatingObjects methods, since a block obviously knows its own writing mode. I don&apos;t think these FloatingObjects methods should even exist. Just put them on RenderBlock instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937921</commentid>
    <comment_count>4</comment_count>
      <attachid>213779</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-10-09 08:03:29 -0700</bug_when>
    <thetext>Created attachment 213779
Patch

Move methods to RenderBlockFlow, now that m_floatingObjects is part of RenderBlockFlow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938122</commentid>
    <comment_count>5</comment_count>
      <attachid>213779</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-10-09 16:12:57 -0700</bug_when>
    <thetext>Comment on attachment 213779
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938131</commentid>
    <comment_count>6</comment_count>
      <attachid>213833</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2013-10-09 16:43:20 -0700</bug_when>
    <thetext>Created attachment 213833
Patch

rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938150</commentid>
    <comment_count>7</comment_count>
      <attachid>213833</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-09 17:34:08 -0700</bug_when>
    <thetext>Comment on attachment 213833
Patch

Clearing flags on attachment: 213833

Committed r157197: &lt;http://trac.webkit.org/changeset/157197&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>938151</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-09 17:34:11 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213273</attachid>
            <date>2013-10-03 10:22:45 -0700</date>
            <delta_ts>2013-10-09 08:03:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122282-20131003102244.patch</filename>
            <type>text/plain</type>
            <size>47487</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU2Nzk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzA3YjcxZjRiZjljYWY0
YmExMzU1NWVmMDNhN2ZmYmJjYzAxOWViNC4uYjc0ZDYwMzk5Y2M1MWNjN2Y2YWU5NTUwZjE4NTZi
YzRhNzc2OGNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEzLTEwLTAzICBCZW0g
Sm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgorCisgICAgICAgIE1vdmUgZmxvYXQgbG9n
aWNhbCBsb2NhdGlvbi9kaW1lbnNpb24gbWV0aG9kcyB0byBGbG9hdGluZ09iamVjdHMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkgcmVjZW50bHkgbW92
ZWQgdGhlIGxvZ2ljYWwgbG9jYXRpb24gYW5kIGRpbWVuc2lvbiBtZXRob2RzIGZyb20KKyAgICAg
ICAgUmVuZGVyQmxvY2sgdG8gRmxvYXRpbmdPYmplY3QuIFRoaXMgbWFkZSBpdCBzbyB0aGF0IHRo
ZSBtZXRob2RzIG5lZWRlZAorICAgICAgICB0byB0YWtlIGluIHRoZSBob3Jpem9udGFsIHdyaXRp
bmcgbW9kZSBvZiB0aGUgRmxvYXRpbmdPYmplY3QncworICAgICAgICBjb250YWluZXIgaW4gb3Jk
ZXIgdG8gZG8gdGhlaXIgdGhpbmcuIFdoZW4gbG9va2luZyBpbnRvIGhvdyB0byBmaXgKKyAgICAg
ICAgdGhpcywgSSBjYW1lIHRvIHVuZGVyc3RhbmQgd2h5IFJlbmRlckJsb2NrIGhhcyBtZXRob2Rz
IHRvIGRldGVybWluZQorICAgICAgICB0aGUgbG9naWNhbCBsb2NhdGlvbiBhbmQgZGltZW5zaW9u
cyBvZiBpdHMgY2hpbGRyZW4sIHdoZW4gdGhlIGNoaWxkcmVuCisgICAgICAgIHRoZW1zZWx2ZXMg
aGF2ZSB0aG9zZSBtZXRob2RzOiB0aGUgbWV0aG9kcyBvbiBSZW5kZXJCbG9jayBhcmUgZm9yCisg
ICAgICAgIGRldGVybWluaW5nIHRoZSBsb2dpY2FsIHZhbHVlIGluIHRoZSB3cml0aW5nIG1vZGUg
b2YgdGhhdCBSZW5kZXJCbG9jaywKKyAgICAgICAgYW5kIHRoZSBtZXRob2Qgb24gdGhlIGNoaWxk
IGlzIGZvciBkZXRlcm1pbmluZyB0aGUgbG9naWNhbCB2YWx1ZSBpbgorICAgICAgICB0aGUgd3Jp
dGluZyBtb2RlIG9mIHRoZSBjaGlsZC4KKworICAgICAgICBGbG9hdGluZ09iamVjdCBpcyBhbmFs
YWdvdXMgdG8gdGhlIFJlbmRlckJveCBvZiB0aGUgZmxvYXQgYW5kCisgICAgICAgIEZsb2F0aW5n
T2JqZWN0cyBpcyBhbmFsZ291cyB0byB0aGUgUmVuZGVyQmxvY2sgb2YgdGhlIGNvbnRhaW5lci4g
VGhlCisgICAgICAgIGNvcnJlY3QgcGxhY2UgZm9yIHRoZSBsb2dpY2FsIGxvY2F0aW9uIGFuZCBk
aW1lbnNpb24gbWV0aG9kcyB0aGF0CisgICAgICAgIGRldGVybWluZSB0aGUgdmFsdWUgYmFzZWQg
b24gdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUgY29udGFpbmVyIGlzIG9uCisgICAgICAgIEZsb2F0
aW5nT2JqZWN0cywgdG8gcGFyYWxsZWwgdGhlIG1ldGhvZHMgb24gUmVuZGVyQmxvY2sgdGhhdCBk
ZXRlcm1pbmUKKyAgICAgICAgc2ltaWxhciB0aGluZ3MgZm9yIGl0J3MgY2hpbGRyZW4uIFRoaXMg
cGF0Y2ggZG9lcyB0aGlzIG1vdmUuCisKKyAgICAgICAgQSBwdWJsaWMgZmxvYXRpbmdPYmplY3Rz
KCkgbWV0aG9kIGhhcyBiZWVuIGFkZGVkIHRvIFJlbmRlckJsb2NrIHNvCisgICAgICAgIHRoYXQg
bW9yZSBjbGFzc2VzIGRvbid0IG5lZWQgdG8gYmUgbWFkZSBmcmllbmRzLiBBcyBGbG9hdGluZ09i
amVjdHMKKyAgICAgICAgZ2FpbnMgbW9yZSByZXNwb25zaWJpbGl0eSwgdGhlIGhvcGUgaXMgdG8g
YmUgYWJsZSB0byBtYWtlCisgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzIHByaXZhdGUgYW5kIHJl
bW92ZSB0aGUgZnJpZW5kcyB0aGF0IHdlcmUgYWRkZWQganVzdAorICAgICAgICB0byBhY2Nlc3Mg
ZmxvYXRzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyByZW5hbWVzIHRoZSBGbG9hdGluZ09i
amVjdCBsb2NhbCB2YXJpYWJsZXMgdGhhdCBoYWQKKyAgICAgICAgdGhlIGV4cHJlc3NpdmUgbmFt
ZXMgb2YgJ3InIG9yICdmJyBpbiB0aGUgY2FzZXMgd2hlcmUgdGhlIGNvZGUgbmVlZGVkCisgICAg
ICAgIHRvIGJlIGNoYW5nZWQgYW55d2F5cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJl
aGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Ojp1cGRhdGVPZmZzZXRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjo6OmNvbGxlY3RJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjo6OmdldEhlaWdo
dFJlbWFpbmluZyk6CisgICAgICAgICogcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsVG9wRm9yRmxvYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsQm90dG9tRm9yRmxvYXQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsTGVmdEZvckZsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsb2F0aW5nT2JqZWN0czo6bG9naWNhbFJpZ2h0Rm9yRmxvYXQp
OgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpsb2dpY2FsV2lkdGhGb3JGbG9h
dCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OmxvZ2ljYWxIZWlnaHRGb3JG
bG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnBpeGVsU25hcHBlZExv
Z2ljYWxUb3BGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnBp
eGVsU25hcHBlZExvZ2ljYWxCb3R0b21Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dGluZ09iamVjdHM6OnBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0Rm9yRmxvYXQpOgorICAgICAgICAo
V2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRGb3JGbG9h
dCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnNldExvZ2ljYWxUb3BGb3JG
bG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpGbG9hdGluZ09iamVjdHM6OnNldExvZ2ljYWxMZWZ0
Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpzZXRMb2dpY2Fs
SGVpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRpbmdPYmplY3RzOjpzZXRM
b2dpY2FsV2lkdGhGb3JGbG9hdCk6CisgICAgICAgICogcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3
RmxvYXRJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9jYXRpb25Gb3JG
bG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21C
ZWxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2Fs
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zs
b2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9h
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjpmbG9hdGluZ09iamVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpjbGVhckZs
b2F0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2hlY2tQYWdpbmF0aW9uQW5kRmxvYXRzQXRF
bmRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVNlZ21lbnRzRm9yU2hhcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxpbmVCcmVha2VyOjpuZXh0U2VnbWVudEJyZWFrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVsdGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZSk6
CisKIDIwMTMtMTAtMDIgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSBRdCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCmluZGV4IDY4N2UzZTg0N2IwZjI1M2M3OWQ3OTRh
ZjdjYWIwZjhlZTdkMDY3YjAuLmM1ZjUzMWMzZWFiZmNhMmQxYjdmMzAyZTg5MGFjZDQ3MzU3YTE5
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCkBA
IC0zNDgsNyArMzQ4LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIHJhbmdlc0ludGVyc2VjdChpbnQg
ZmxvYXRUb3AsIGludCBmbG9hdEJvdHRvbSwgaW50IG9iamVjdFRvcCwKIHRlbXBsYXRlPD4KIGlu
bGluZSBib29sIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0
TGVmdD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGlu
Z09iamVjdCkKIHsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCA9IGZsb2F0aW5nT2JqZWN0
LT5sb2dpY2FsUmlnaHQobV9yZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Cisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQgPSBtX3JlbmRlcmVyLT5mbG9hdGluZ09iamVjdHMo
KS0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOwogICAgIGlmIChsb2dpY2Fs
UmlnaHQgPiBtX29mZnNldCkgewogICAgICAgICBtX29mZnNldCA9IGxvZ2ljYWxSaWdodDsKICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNTksNyArMzU5LDcgQEAgaW5saW5lIGJvb2wgQ29tcHV0
ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0Pjo6dXBkYXRlT2Zm
c2V0SWYKIHRlbXBsYXRlPD4KIGlubGluZSBib29sIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8
RmxvYXRpbmdPYmplY3Q6OkZsb2F0UmlnaHQ+Ojp1cGRhdGVPZmZzZXRJZk5lZWRlZChjb25zdCBG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpCiB7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdCA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsTGVmdChtX3JlbmRlcmVyLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gbV9yZW5kZXJl
ci0+ZmxvYXRpbmdPYmplY3RzKCktPmxvZ2ljYWxMZWZ0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3Qp
OwogICAgIGlmIChsb2dpY2FsTGVmdCA8IG1fb2Zmc2V0KSB7CiAgICAgICAgIG1fb2Zmc2V0ID0g
bG9naWNhbExlZnQ7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMzc2LDcgKzM3Niw3IEBAIGlu
bGluZSB2b2lkIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+Ojpjb2xs
ZWN0SWZOZWVkZWQoY29uc3QgSW50CiAKICAgICAvLyBBbGwgdGhlIG9iamVjdHMgcmV0dXJuZWQg
ZnJvbSB0aGUgdHJlZSBzaG91bGQgYmUgYWxyZWFkeSBwbGFjZWQuCiAgICAgQVNTRVJUKGZsb2F0
aW5nT2JqZWN0LT5pc1BsYWNlZCgpKTsKLSAgICBBU1NFUlQocmFuZ2VzSW50ZXJzZWN0KGZsb2F0
aW5nT2JqZWN0LT5waXhlbFNuYXBwZWRMb2dpY2FsVG9wKG1fcmVuZGVyZXItPmlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpLCBmbG9hdGluZ09iamVjdC0+cGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRv
bShtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbV9saW5lVG9wLCBtX2xp
bmVCb3R0b20pKTsKKyAgICBBU1NFUlQocmFuZ2VzSW50ZXJzZWN0KG1fcmVuZGVyZXItPmZsb2F0
aW5nT2JqZWN0cygpLT5waXhlbFNuYXBwZWRMb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmpl
Y3QpLCBtX3JlbmRlcmVyLT5mbG9hdGluZ09iamVjdHMoKS0+cGl4ZWxTbmFwcGVkTG9naWNhbEJv
dHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSwgbV9saW5lVG9wLCBtX2xpbmVCb3R0b20pKTsK
IAogICAgIGJvb2wgZmxvYXRJc05ld0V4dHJlbWUgPSB1cGRhdGVPZmZzZXRJZk5lZWRlZChmbG9h
dGluZ09iamVjdCk7CiAgICAgaWYgKGZsb2F0SXNOZXdFeHRyZW1lKQpAQCAtMzg2LDcgKzM4Niw3
IEBAIGlubGluZSB2b2lkIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRUeXBlVmFsdWU+
Ojpjb2xsZWN0SWZOZWVkZWQoY29uc3QgSW50CiB0ZW1wbGF0ZSA8RmxvYXRpbmdPYmplY3Q6OlR5
cGUgRmxvYXRUeXBlVmFsdWU+CiBMYXlvdXRVbml0IENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8
RmxvYXRUeXBlVmFsdWU+OjpnZXRIZWlnaHRSZW1haW5pbmcoKSBjb25zdAogewotICAgIHJldHVy
biBtX291dGVybW9zdEZsb2F0ID8gbV9vdXRlcm1vc3RGbG9hdC0+bG9naWNhbEJvdHRvbShtX3Jl
bmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSAtIG1fbGluZVRvcCA6IExheW91dFVu
aXQoMSk7CisgICAgcmV0dXJuIG1fb3V0ZXJtb3N0RmxvYXQgPyBtX3JlbmRlcmVyLT5mbG9hdGlu
Z09iamVjdHMoKS0+bG9naWNhbEJvdHRvbUZvckZsb2F0KG1fb3V0ZXJtb3N0RmxvYXQpIC0gbV9s
aW5lVG9wIDogTGF5b3V0VW5pdCgxKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaAppbmRleCBmYTEyMDg1NjJjNjk1MTRkYjE5
ZjBjOTY2MTAzZDcxOGEzZGM5MjAyLi44YWNhNjFmNGExZGNlN2UwM2EwYzk1YWM2NmYzMDZiZDNl
NzE1MGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmpl
Y3RzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oCkBA
IC04Niw0NyArODYsNiBAQCBwdWJsaWM6CiAgICAgUm9vdElubGluZUJveCogb3JpZ2luYXRpbmdM
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hdGluZ0xpbmU7IH0KICAgICB2b2lkIHNldE9y
aWdpbmF0aW5nTGluZShSb290SW5saW5lQm94KiBsaW5lKSB7IG1fb3JpZ2luYXRpbmdMaW5lID0g
bGluZTsgfQogCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8geSgpIDog
eCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKGJvb2wgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4WSgp
IDogbWF4WCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdChib29sIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IHgo
KSA6IHkoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4
WCgpIDogbWF4WSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoYm9vbCBpc0hvcml6
b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUg
PyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQoYm9v
bCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUgPyBoZWlnaHQoKSA6IHdpZHRoKCk7IH0KLQotICAgIGludCBwaXhlbFNuYXBwZWRM
b2dpY2FsVG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWSgpIDogZnJh
bWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgpOyB9Ci0gICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxC
b3R0b20oYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCkgOiBmcmFt
ZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNh
bExlZnQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRYKCkgOiBmcmFtZVJl
Y3QoKS5waXhlbFNuYXBwZWRZKCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0
KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlID8gZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WCgpIDogZnJhbWVSZWN0
KCkucGl4ZWxTbmFwcGVkTWF4WSgpOyB9Ci0KLSAgICB2b2lkIHNldExvZ2ljYWxUb3AoTGF5b3V0
VW5pdCBsb2dpY2FsVG9wLCBib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgIHsKLSAg
ICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgc2V0WShsb2dp
Y2FsVG9wKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0WChsb2dpY2FsVG9wKTsKLSAg
ICB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsTGVmdChMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBib29s
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQotICAgIHsKLSAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKQotICAgICAgICAgICAgc2V0WChsb2dpY2FsTGVmdCk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHNldFkobG9naWNhbExlZnQpOwotICAgIH0KLSAgICB2b2lkIHNldExv
Z2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBib29sIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKQotICAgIHsKLSAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKQot
ICAgICAgICAgICAgc2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZXRXaWR0aChsb2dpY2FsSGVpZ2h0KTsKLSAgICB9Ci0gICAgdm9pZCBzZXRMb2dp
Y2FsV2lkdGgoTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUpCi0gICAgewotICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAg
ICAgICAgICBzZXRXaWR0aChsb2dpY2FsV2lkdGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKLSAgICB9Ci0KIHByaXZhdGU6CiAgICAgUmVuZGVy
Qm94JiBtX3JlbmRlcmVyOwogICAgIFJvb3RJbmxpbmVCb3gqIG1fb3JpZ2luYXRpbmdMaW5lOwpA
QCAtMTg1LDYgKzE0NCw0NyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9m
ZnNldChMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCwgU2hhcGVPdXRzaWRlRmxvYXRPZmZzZXRNb2RlID0gU2hhcGVP
dXRzaWRlRmxvYXRTaGFwZU9mZnNldCwgTGF5b3V0VW5pdCogaGVpZ2h0UmVtYWluaW5nID0gMCk7
CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXQoTGF5b3V0VW5pdCBmaXhlZE9mZnNl
dCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIFNoYXBl
T3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSA9IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIExh
eW91dFVuaXQqIGhlaWdodFJlbWFpbmluZyA9IDApOwogCisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7
IHJldHVybiBtX2hvcml6b250YWxXcml0aW5nTW9kZSA/IGZsb2F0aW5nT2JqZWN0LT55KCkgOiBm
bG9hdGluZ09iamVjdC0+eCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tRm9yRmxv
YXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBt
X2hvcml6b250YWxXcml0aW5nTW9kZSA/IGZsb2F0aW5nT2JqZWN0LT5tYXhZKCkgOiBmbG9hdGlu
Z09iamVjdC0+bWF4WCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEZvckZsb2F0KGNv
bnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkgY29uc3QgeyByZXR1cm4gbV9ob3Jp
em9udGFsV3JpdGluZ01vZGUgPyBmbG9hdGluZ09iamVjdC0+eCgpIDogZmxvYXRpbmdPYmplY3Qt
PnkoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0Rm9yRmxvYXQoY29uc3QgRmxvYXRp
bmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxXcml0
aW5nTW9kZSA/IGZsb2F0aW5nT2JqZWN0LT5tYXhYKCkgOiBmbG9hdGluZ09iamVjdC0+bWF4WSgp
OyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFdyaXRpbmdN
b2RlID8gZmxvYXRpbmdPYmplY3QtPndpZHRoKCkgOiBmbG9hdGluZ09iamVjdC0+aGVpZ2h0KCk7
IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFdyaXRpbmdN
b2RlID8gZmxvYXRpbmdPYmplY3QtPmhlaWdodCgpIDogZmxvYXRpbmdPYmplY3QtPndpZHRoKCk7
IH0KKworICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsVG9wRm9yRmxvYXQoY29uc3QgRmxvYXRp
bmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxXcml0
aW5nTW9kZSA/IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRZKCkgOiBm
bG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgpOyB9CisgICAgaW50IHBp
eGVsU25hcHBlZExvZ2ljYWxCb3R0b21Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZmxv
YXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZE1heFkoKSA6IGZsb2F0aW5nT2Jq
ZWN0LT5mcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFw
cGVkTG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmpl
Y3QpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gZmxvYXRpbmdPYmpl
Y3QtPmZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFgoKSA6IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJl
Y3QoKS5waXhlbFNuYXBwZWRZKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0
Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJl
dHVybiBtX2hvcml6b250YWxXcml0aW5nTW9kZSA/IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3Qo
KS5waXhlbFNuYXBwZWRNYXhYKCkgOiBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkucGl4ZWxT
bmFwcGVkTWF4WSgpOyB9CisKKyAgICB2b2lkIHNldExvZ2ljYWxUb3BGb3JGbG9hdChGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbG9naWNhbFRvcCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIGZsb2F0aW5n
T2JqZWN0LT5zZXRZKGxvZ2ljYWxUb3ApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmbG9h
dGluZ09iamVjdC0+c2V0WChsb2dpY2FsVG9wKTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2Fs
TGVmdEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCwgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCkKKyAgICB7CisgICAgICAgIGlmIChtX2hvcml6b250YWxXcml0aW5nTW9kZSkK
KyAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRYKGxvZ2ljYWxMZWZ0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldFkobG9naWNhbExlZnQpOworICAg
IH0KKyAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChGbG9hdGluZ09iamVjdCogZmxv
YXRpbmdPYmplY3QsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCkKKyAgICB7CisgICAgICAgIGlm
IChtX2hvcml6b250YWxXcml0aW5nTW9kZSkKKyAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5z
ZXRIZWlnaHQobG9naWNhbEhlaWdodCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZsb2F0
aW5nT2JqZWN0LT5zZXRXaWR0aChsb2dpY2FsSGVpZ2h0KTsKKyAgICB9CisgICAgdm9pZCBzZXRM
b2dpY2FsV2lkdGhGb3JGbG9hdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91
dFVuaXQgbG9naWNhbFdpZHRoKQorICAgIHsKKyAgICAgICAgaWYgKG1faG9yaXpvbnRhbFdyaXRp
bmdNb2RlKQorICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldFdpZHRoKGxvZ2ljYWxXaWR0
aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRIZWlnaHQo
bG9naWNhbFdpZHRoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBjb21wdXRlUGxhY2Vk
RmxvYXRzVHJlZSgpOwogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0VHJlZSYgcGxhY2VkRmxvYXRz
VHJlZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRoLmNwcAppbmRleCBmODI0Njg1
MjNhMmQ0YTFkY2I4OWM1YmNiZjI3MjViMjU2YjU5NTliLi5kYjdkZjVjN2IzZWZlNzY0ZDg3MzJj
ZWNiNWQyNjk4YjE5ZGEyZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGluZVdpZHRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRoLmNw
cApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgo
TGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCkKIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFi
bGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0KQogewog
ICAgIExheW91dFVuaXQgaGVpZ2h0ID0gbV9ibG9jay5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYg
KGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2suaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgfHwgaGVpZ2h0ID49IG5ld0Zsb2F0LT5sb2dpY2FsQm90dG9tKG1fYmxvY2suaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkpCisgICAgaWYgKGhlaWdodCA8IG1fYmxvY2suZmxvYXRp
bmdPYmplY3RzKCktPmxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCkgfHwgaGVpZ2h0ID49IG1f
YmxvY2suZmxvYXRpbmdPYmplY3RzKCktPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChuZXdGbG9hdCkp
CiAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQpAQCAtMTAyLDcgKzEw
Miw3IEBAIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZO
ZWVkZWQoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0CiAgICAgLy8gYmFzZWQgb24gdGhlIG1hcmdp
biBib3guIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQgdG8gd2FsayBiYWNrIHRocm91Z2gg
dGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IHRvIGZpbmQKICAgICAvLyB0aGUgZmlyc3QgcHJldmlv
dXMgZmxvYXQgdGhhdCBpcyBvbiB0aGUgc2FtZSBzaWRlIGFzIG91ciBuZXdGbG9hdC4KICAgICBT
aGFwZU91dHNpZGVJbmZvKiBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8gPSAwOwotICAgIGNvbnN0
IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fYmxvY2subV9mbG9hdGlu
Z09iamVjdHMtPnNldCgpOworICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09i
amVjdFNldCA9IG1fYmxvY2suZmxvYXRpbmdPYmplY3RzKCktPnNldCgpOwogICAgIGF1dG8gaXQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBhdXRvIGJlZ2luID0gZmxvYXRpbmdPYmpl
Y3RTZXQuYmVnaW4oKTsKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQgPSBtX2Jsb2NrLmxpbmVI
ZWlnaHQobV9pc0ZpcnN0TGluZSwgbV9ibG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
SG9yaXpvbnRhbExpbmUgOiBWZXJ0aWNhbExpbmUsIFBvc2l0aW9uT2ZJbnRlcmlvckxpbmVCb3hl
cyk7CkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdp
ZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQKICNlbmRpZgog
CiAgICAgaWYgKG5ld0Zsb2F0LT50eXBlKCkgPT0gRmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdCkg
ewotICAgICAgICBmbG9hdCBuZXdMZWZ0ID0gbmV3RmxvYXQtPmxvZ2ljYWxSaWdodChtX2Jsb2Nr
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICBmbG9hdCBuZXdMZWZ0ID0gbV9i
bG9jay5mbG9hdGluZ09iamVjdHMoKS0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQobmV3RmxvYXQpOwog
I2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgICAgICBpZiAocHJldmlvdXNTaGFwZU91dHNpZGVJ
bmZvKQogICAgICAgICAgICAgbmV3TGVmdCAtPSBwcmV2aW91c1NoYXBlT3V0c2lkZUluZm8tPnJp
Z2h0TWFyZ2luQm94RGVsdGEoKTsKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIExpbmVXaWR0aDo6
c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKEZsb2F0aW5nT2JqZWN0KiBu
ZXdGbG9hdAogICAgICAgICAgICAgbmV3TGVmdCArPSBmbG9vclRvSW50KG1fYmxvY2sudGV4dElu
ZGVudE9mZnNldCgpKTsKICAgICAgICAgbV9sZWZ0ID0gc3RkOjptYXg8ZmxvYXQ+KG1fbGVmdCwg
bmV3TGVmdCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZmxvYXQgbmV3UmlnaHQgPSBuZXdGbG9h
dC0+bG9naWNhbExlZnQobV9ibG9jay5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAg
ICAgZmxvYXQgbmV3UmlnaHQgPSBtX2Jsb2NrLmZsb2F0aW5nT2JqZWN0cygpLT5sb2dpY2FsTGVm
dEZvckZsb2F0KG5ld0Zsb2F0KTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAgICAgICAgaWYg
KHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZp
b3VzU2hhcGVPdXRzaWRlSW5mby0+bGVmdE1hcmdpbkJveERlbHRhKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAzYmEzNmU3MGUzOTJjZjBkNDMxNGNhZjRj
MGI3MGMzNDE3NmRiY2MwLi5lY2EyZjY0MjQwMjI3ZDBjNmJhZGNiN2FlZmJhNWIxY2NhZTI0MWNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTIxOTYsMTUg
KzIxOTYsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJv
b2wgcGFpbnRBbGxEZXNjZW5kYW50cykKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxv
YXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgYXV0byBlbmQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09i
amVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmxvYXRpbmdPYmpl
Y3QqIHIgPSBpdC0+Z2V0KCk7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dCA9IGl0LT5nZXQoKTsKICAgICAgICAgLy8gT25seSByZXBhaW50IHRoZSBvYmplY3QgaWYgaXQg
aXMgb3ZlcmhhbmdpbmcsIGlzIG5vdCBpbiBpdHMgb3duIGxheWVyLCBhbmQKICAgICAgICAgLy8g
aXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRvIHBhaW50IChtX3Nob3VsZFBhaW50IGlzIHNldCkuIFdo
ZW4gcGFpbnRBbGxEZXNjZW5kYW50cyBpcyB0cnVlLCB0aGUgbGF0dGVyCiAgICAgICAgIC8vIGNv
bmRpdGlvbiBpcyByZXBsYWNlZCB3aXRoIGJlaW5nIGEgZGVzY2VuZGFudCBvZiB1cy4KLSAgICAg
ICAgaWYgKHItPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPiBsb2dp
Y2FsSGVpZ2h0KCkKLSAgICAgICAgICAgICYmICFyLT5yZW5kZXJlcigpLmhhc1NlbGZQYWludGlu
Z0xheWVyKCkKLSAgICAgICAgICAgICYmIChyLT5zaG91bGRQYWludCgpIHx8IChwYWludEFsbERl
c2NlbmRhbnRzICYmIHItPnJlbmRlcmVyKCkuaXNEZXNjZW5kYW50T2YodGhpcykpKSkgewotICAg
ICAgICAgICAgci0+cmVuZGVyZXIoKS5yZXBhaW50KCk7Ci0gICAgICAgICAgICByLT5yZW5kZXJl
cigpLnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhmYWxzZSk7CisgICAgICAgIGlmIChtX2Zsb2F0
aW5nT2JqZWN0cy0+bG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSA+IGxvZ2lj
YWxIZWlnaHQoKQorICAgICAgICAgICAgJiYgIWZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLmhh
c1NlbGZQYWludGluZ0xheWVyKCkKKyAgICAgICAgICAgICYmIChmbG9hdGluZ09iamVjdC0+c2hv
dWxkUGFpbnQoKSB8fCAocGFpbnRBbGxEZXNjZW5kYW50cyAmJiBmbG9hdGluZ09iamVjdC0+cmVu
ZGVyZXIoKS5pc0Rlc2NlbmRhbnRPZih0aGlzKSkpKSB7CisgICAgICAgICAgICBmbG9hdGluZ09i
amVjdC0+cmVuZGVyZXIoKS5yZXBhaW50KCk7CisgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+
cmVuZGVyZXIoKS5yZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMoZmFsc2UpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtMzI5Nyw3ICszMjk3LDcgQEAgRmxvYXRpbmdPYmplY3QqIFJlbmRlckJsb2Nr
OjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgICAgIG8tPmNvbXB1dGVB
bmRTZXRCbG9ja0RpcmVjdGlvbk1hcmdpbnModGhpcyk7CiAgICAgfQogCi0gICAgb2JqZWN0LT5z
ZXRMb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoRm9yQ2hpbGQobykgKyBtYXJnaW5TdGFydEZvckNo
aWxkKG8pICsgbWFyZ2luRW5kRm9yQ2hpbGQobyksIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
OworICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRMb2dpY2FsV2lkdGhGb3JGbG9hdChvYmplY3Qu
Z2V0KCksIGxvZ2ljYWxXaWR0aEZvckNoaWxkKG8pICsgbWFyZ2luU3RhcnRGb3JDaGlsZChvKSAr
IG1hcmdpbkVuZEZvckNoaWxkKG8pKTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQogICAgIGlm
IChTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBvLT5zaGFwZU91dHNpZGVJbmZvKCkp
CkBAIC0zMzEzLDEwICszMzEzLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUZsb2F0aW5n
T2JqZWN0KFJlbmRlckJveCogbykKICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICBhdXRv
IGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZDxSZW5kZXJCb3gmLCBGbG9hdGluZ09iamVjdEhh
c2hUcmFuc2xhdG9yPigqbyk7CiAgICAgICAgIGlmIChpdCAhPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKSkgewotICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSBpdC0+Z2V0KCk7CisgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAgICAg
ICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVu
aXQgbG9naWNhbFRvcCA9IHItPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
Ci0gICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gci0+bG9naWNhbEJv
dHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bG9naWNhbFRvcEZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20g
PSBtX2Zsb2F0aW5nT2JqZWN0cy0+bG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0
KTsKIAogICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU0OTk1LgogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9t
IDwgMCB8fCBsb2dpY2FsQm90dG9tIDwgbG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09IExheW91
dFVuaXQ6Om1heCgpKQpAQCAtMzMyNywxOCArMzMyNywxOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpy
ZW1vdmVGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIG8pCiAgICAgICAgICAgICAgICAgICAgIC8v
IGFjY29tcGxpc2hlZCBieSBwcmV0ZW5kaW5nIHRoZXkgaGF2ZSBhIGhlaWdodCBvZiAxLgogICAg
ICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tID0gbWF4KGxvZ2ljYWxCb3R0b20sIGxvZ2lj
YWxUb3AgKyAxKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHItPm9y
aWdpbmF0aW5nTGluZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5v
cmlnaW5hdGluZ0xpbmUoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXNlbGZOZWVkc0xh
eW91dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoJnItPm9yaWdpbmF0aW5n
TGluZSgpLT5yZW5kZXJlcigpID09IHRoaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgci0+
b3JpZ2luYXRpbmdMaW5lKCktPm1hcmtEaXJ0eSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKCZmbG9hdGluZ09iamVjdC0+b3JpZ2luYXRpbmdMaW5lKCktPnJlbmRlcmVyKCkgPT0g
dGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+b3JpZ2luYXRp
bmdMaW5lKCktPm1hcmtEaXJ0eSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgICAgICAgICAgICAgICAgICByLT5zZXRPcmlnaW5hdGluZ0xpbmUoMCk7
CisgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRPcmlnaW5hdGluZ0xpbmUo
MCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbWFya0xpbmVz
RGlydHlJbkJsb2NrUmFuZ2UoMCwgbG9naWNhbEJvdHRvbSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKHIpOworICAgICAgICAgICAgbV9mbG9h
dGluZ09iamVjdHMtPnJlbW92ZShmbG9hdGluZ09iamVjdCk7CiAgICAgICAgIH0KICAgICB9CiB9
CkBAIC0zMzUwLDcgKzMzNTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVGbG9hdGluZ09i
amVjdHNCZWxvdyhGbG9hdGluZ09iamVjdCogbGFzdEZsb2F0LCBpbnQgbG9naQogICAgIAogICAg
IGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IGZsb2F0aW5nT2JqZWN0
U2V0Lmxhc3QoKS5nZXQoKTsKLSAgICB3aGlsZSAoY3VyciAhPSBsYXN0RmxvYXQgJiYgKCFjdXJy
LT5pc1BsYWNlZCgpIHx8IGN1cnItPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkgPj0gbG9naWNhbE9mZnNldCkpIHsKKyAgICB3aGlsZSAoY3VyciAhPSBsYXN0RmxvYXQgJiYg
KCFjdXJyLT5pc1BsYWNlZCgpIHx8IG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsVG9wRm9yRmxv
YXQoY3VycikgPj0gbG9naWNhbE9mZnNldCkpIHsKICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMt
PnJlbW92ZShjdXJyKTsKICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzM2OCw3ICszMzY4LDcgQEAgTGF5b3V0UG9pbnQgUmVu
ZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9jYXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogZmwKICAgICBTaGFwZUluc2lkZUluZm8qIHNoYXBlSW5zaWRlSW5mbyA9IHRoaXMtPnNo
YXBlSW5zaWRlSW5mbygpOwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYmVoYXZpb3IgZm9yIHJp
Z2h0IGZsb2F0cy4KICAgICBpZiAoc2hhcGVJbnNpZGVJbmZvKSB7Ci0gICAgICAgIExheW91dFNp
emUgZmxvYXRMb2dpY2FsU2l6ZSA9IExheW91dFNpemUoZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxX
aWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxI
ZWlnaHQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICBMYXlvdXRTaXplIGZs
b2F0TG9naWNhbFNpemUgPSBMYXlvdXRTaXplKG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsV2lk
dGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCksIG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsSGVp
Z2h0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpKTsKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBm
bG9hdCBkb2Vzbid0IGZpdCBpbiB0aGUgc2hhcGUgd2Ugc2hvdWxkIHB1c2ggaXQgdW5kZXIgdGhl
IGNvbnRlbnQgYm94CiAgICAgICAgIGxvZ2ljYWxUb3BPZmZzZXQgPSBzaGFwZUluc2lkZUluZm8t
PmNvbXB1dGVGaXJzdEZpdFBvc2l0aW9uRm9yRmxvYXQoZmxvYXRMb2dpY2FsU2l6ZSk7CiAgICAg
ICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgPiBsb2dpY2FsVG9wT2Zmc2V0KQpAQCAtMzM4NSw3ICsz
Mzg1LDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVyQmxvY2s6OmNvbXB1dGVMb2dpY2FsTG9jYXRpb25G
b3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogZmwKICNlbmRpZgogICAgICAgICBsb2dpY2Fs
UmlnaHRPZmZzZXQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KGxvZ2ljYWxUb3BPZmZz
ZXQpOwogCi0gICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCA9IG1pbihmbG9hdGluZ09i
amVjdC0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBsb2dpY2FsUmln
aHRPZmZzZXQgLSBsb2dpY2FsTGVmdE9mZnNldCk7IC8vIFRoZSB3aWR0aCB3ZSBsb29rIGZvci4K
KyAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoID0gbWluKG1fZmxvYXRpbmdPYmplY3Rz
LT5sb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCksIGxvZ2ljYWxSaWdodE9mZnNl
dCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsgLy8gVGhlIHdpZHRoIHdlIGxvb2sgZm9yLgogCiAgICAg
TGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxMZWZ0OwogCkBAIC0zNDAyLDcgKzM0MDIsNyBAQCBMYXlv
dXRQb2ludCBSZW5kZXJCbG9jazo6Y29tcHV0ZUxvZ2ljYWxMb2NhdGlvbkZvckZsb2F0KGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBmbAogICAgICAgICAgICAgICAgIC8vIEhhdmUgdG8gcmUtZXZhbHVh
dGUgYWxsIG9mIG91ciBvZmZzZXRzLCBzaW5jZSB0aGV5IG1heSBoYXZlIGNoYW5nZWQuCiAgICAg
ICAgICAgICAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29u
dGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBvZmZzZXQu
CiAgICAgICAgICAgICAgICAgbG9naWNhbExlZnRPZmZzZXQgPSBsb2dpY2FsTGVmdE9mZnNldEZv
ckNvbnRlbnQobG9naWNhbFRvcE9mZnNldCk7IC8vIENvbnN0YW50IHBhcnQgb2YgbGVmdCBvZmZz
ZXQuCi0gICAgICAgICAgICAgICAgZmxvYXRMb2dpY2FsV2lkdGggPSBtaW4oZmxvYXRpbmdPYmpl
Y3QtPmxvZ2ljYWxXaWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbG9naWNhbFJpZ2h0
T2Zmc2V0IC0gbG9naWNhbExlZnRPZmZzZXQpOworICAgICAgICAgICAgICAgIGZsb2F0TG9naWNh
bFdpZHRoID0gbWluKG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9h
dGluZ09iamVjdCksIGxvZ2ljYWxSaWdodE9mZnNldCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbWF4KGxv
Z2ljYWxMZWZ0T2Zmc2V0IC0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxMZWZ0KCksIGZsb2F0TG9n
aWNhbExlZnQpOwpAQCAtMzQxNywxMCArMzQxNywxMCBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9j
azo6Y29tcHV0ZUxvZ2ljYWxMb2NhdGlvbkZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBm
bAogICAgICAgICAgICAgICAgIC8vIEhhdmUgdG8gcmUtZXZhbHVhdGUgYWxsIG9mIG91ciBvZmZz
ZXRzLCBzaW5jZSB0aGV5IG1heSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICAgbG9naWNh
bFJpZ2h0T2Zmc2V0ID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wT2Zm
c2V0KTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBvZmZzZXQuCiAgICAgICAgICAgICAgICAg
bG9naWNhbExlZnRPZmZzZXQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQobG9naWNhbFRv
cE9mZnNldCk7IC8vIENvbnN0YW50IHBhcnQgb2YgbGVmdCBvZmZzZXQuCi0gICAgICAgICAgICAg
ICAgZmxvYXRMb2dpY2FsV2lkdGggPSBtaW4oZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxXaWR0aChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbG9naWNhbFJpZ2h0T2Zmc2V0IC0gbG9naWNhbExl
ZnRPZmZzZXQpOworICAgICAgICAgICAgICAgIGZsb2F0TG9naWNhbFdpZHRoID0gbWluKG1fZmxv
YXRpbmdPYmplY3RzLT5sb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCksIGxvZ2lj
YWxSaWdodE9mZnNldCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0IC09IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2Fs
V2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7IC8vIFVzZSB0aGUgb3JpZ2luYWwgd2lk
dGggb2YgdGhlIGZsb2F0IGhlcmUsIHNpbmNlIHRoZSBsb2NhbCB2YXJpYWJsZQorICAgICAgICBm
bG9hdExvZ2ljYWxMZWZ0IC09IG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsV2lkdGhGb3JGbG9h
dChmbG9hdGluZ09iamVjdCk7IC8vIFVzZSB0aGUgb3JpZ2luYWwgd2lkdGggb2YgdGhlIGZsb2F0
IGhlcmUsIHNpbmNlIHRoZSBsb2NhbCB2YXJpYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfGZsb2F0TG9naWNh
bFdpZHRofCB3YXMgY2FwcGVkIHRvIHRoZSBhdmFpbGFibGUgbGluZSB3aWR0aC4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFNlZSBmYXN0L2Jsb2NrL2Zsb2F0L2NsYW1wZWQtcmlnaHQtZmxvYXQuaHRtbC4KICAgICB9
CkBAIC0zNDYxLDcgKzM0NjEsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0
cygpCiAgICAgCiAgICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9wIHBv
c2l0aW9uIG9mIHRoZSBsYXN0IHBvc2l0aW9uZWQgZmxvYXQuCiAgICAgaWYgKGxhc3RQbGFjZWRG
bG9hdGluZ09iamVjdCkKLSAgICAgICAgbG9naWNhbFRvcCA9IG1heChsYXN0UGxhY2VkRmxvYXRp
bmdPYmplY3QtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGxvZ2ljYWxU
b3ApOworICAgICAgICBsb2dpY2FsVG9wID0gbWF4KG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2Fs
VG9wRm9yRmxvYXQobGFzdFBsYWNlZEZsb2F0aW5nT2JqZWN0KSwgbG9naWNhbFRvcCk7CiAKICAg
ICBhdXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIC8vIE5vdyB3YWxrIHRo
cm91Z2ggdGhlIHNldCBvZiB1bnBvc2l0aW9uZWQgZmxvYXRzIGFuZCBwbGFjZSB0aGVtLgpAQCAt
MzQ4NSw3ICszNDg1LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQog
CiAgICAgICAgIExheW91dFBvaW50IGZsb2F0TG9naWNhbExvY2F0aW9uID0gY29tcHV0ZUxvZ2lj
YWxMb2NhdGlvbkZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsVG9wKTsKIAotICAgICAg
ICBmbG9hdGluZ09iamVjdC0+c2V0TG9naWNhbExlZnQoZmxvYXRMb2dpY2FsTG9jYXRpb24ueCgp
LCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgbV9mbG9hdGluZ09iamVjdHMt
PnNldExvZ2ljYWxMZWZ0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGZsb2F0TG9naWNhbExvY2F0
aW9uLngoKSk7CiAKICAgICAgICAgc2V0TG9naWNhbExlZnRGb3JDaGlsZChjaGlsZEJveCwgZmxv
YXRMb2dpY2FsTG9jYXRpb24ueCgpICsgY2hpbGRMb2dpY2FsTGVmdE1hcmdpbik7CiAgICAgICAg
IHNldExvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZEJveCwgZmxvYXRMb2dpY2FsTG9jYXRpb24ueSgp
ICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGRCb3gpKTsKQEAgLTM1MTcsNyArMzUxNyw3IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgICAgICBm
bG9hdGluZ09iamVjdC0+c2V0UGFnaW5hdGlvblN0cnV0KG5ld0xvZ2ljYWxUb3AgLSBmbG9hdExv
Z2ljYWxMb2NhdGlvbi55KCkpOwogCiAgICAgICAgICAgICAgICAgZmxvYXRMb2dpY2FsTG9jYXRp
b24gPSBjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIG5ld0xv
Z2ljYWxUb3ApOwotICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRMb2dpY2FsTGVm
dChmbG9hdExvZ2ljYWxMb2NhdGlvbi54KCksIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwor
ICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5zZXRMb2dpY2FsTGVmdEZvckZsb2F0
KGZsb2F0aW5nT2JqZWN0LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi54KCkpOwogCiAgICAgICAgICAg
ICAgICAgc2V0TG9naWNhbExlZnRGb3JDaGlsZChjaGlsZEJveCwgZmxvYXRMb2dpY2FsTG9jYXRp
b24ueCgpICsgY2hpbGRMb2dpY2FsTGVmdE1hcmdpbik7CiAgICAgICAgICAgICAgICAgc2V0TG9n
aWNhbFRvcEZvckNoaWxkKGNoaWxkQm94LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi55KCkgKyBtYXJn
aW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkpOwpAQCAtMzUzMyw5ICszNTMzLDkgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldExvZ2ljYWxUb3AoZmxvYXRMb2dpY2FsTG9j
YXRpb24ueSgpLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgbV9mbG9hdGlu
Z09iamVjdHMtPnNldExvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgZmxvYXRMb2dp
Y2FsTG9jYXRpb24ueSgpKTsKIAotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0TG9naWNhbEhl
aWdodChsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGRCb3gpICsgbWFyZ2luQmVmb3JlRm9yQ2hp
bGQoY2hpbGRCb3gpICsgbWFyZ2luQWZ0ZXJGb3JDaGlsZChjaGlsZEJveCksIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpOworICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0TG9naWNhbEhl
aWdodEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGRC
b3gpICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoY2hpbGRCb3gpICsgbWFyZ2luQWZ0ZXJGb3JDaGls
ZChjaGlsZEJveCkpOwogCiAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmpl
Y3QoZmxvYXRpbmdPYmplY3QpOwogCkBAIC0zNzU4LDE1ICszNzU4LDE1IEBAIExheW91dFVuaXQg
UmVuZGVyQmxvY2s6Om5leHRGbG9hdExvZ2ljYWxCb3R0b21CZWxvdyhMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQsIFNoCiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0
U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGF1dG8gZW5kID0gZmxvYXRpbmdP
YmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gaXQt
PmdldCgpOworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0
KCk7CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRCb3R0b207CiAjaWYgRU5BQkxFKENTU19TSEFQ
RVMpCi0gICAgICAgIFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IHItPnJlbmRlcmVy
KCkuc2hhcGVPdXRzaWRlSW5mbygpOworICAgICAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91
dHNpZGUgPSBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5zaGFwZU91dHNpZGVJbmZvKCk7CiAg
ICAgICAgIGlmIChvZmZzZXRNb2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYg
c2hhcGVPdXRzaWRlKQotICAgICAgICAgICAgZmxvYXRCb3R0b20gPSByLT5sb2dpY2FsVG9wKGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoJihyLT5yZW5k
ZXJlcigpKSkgKyBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbEJvdHRvbSgpOworICAgICAgICAg
ICAgZmxvYXRCb3R0b20gPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bG9naWNhbFRvcEZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKCYoZmxvYXRpbmdPYmplY3QtPnJl
bmRlcmVyKCkpKSArIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsQm90dG9tKCk7CiAgICAgICAg
IGVsc2UKICNlbmRpZgotICAgICAgICAgICAgZmxvYXRCb3R0b20gPSByLT5sb2dpY2FsQm90dG9t
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgZmxvYXRCb3R0b20gPSBt
X2Zsb2F0aW5nT2JqZWN0cy0+bG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsK
ICAgICAgICAgaWYgKGZsb2F0Qm90dG9tID4gbG9naWNhbEhlaWdodCkKICAgICAgICAgICAgIGJv
dHRvbSA9IG1pbihmbG9hdEJvdHRvbSwgYm90dG9tKTsKICAgICB9CkBAIC0zNzgyLDkgKzM3ODIs
OSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxv
YXRpbmdPYmplY3Q6OlR5cGUgZmxvYXRUeXBlKQogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0
JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBhdXRv
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9IGl0LT5nZXQoKTsKLSAgICAgICAgaWYgKHItPmlzUGxhY2VkKCkgJiYgci0+
dHlwZSgpICYgZmxvYXRUeXBlKQotICAgICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgo
bG93ZXN0RmxvYXRCb3R0b20sIHItPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSkpOworICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0
KCk7CisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSAmJiBmbG9hdGluZ09i
amVjdC0+dHlwZSgpICYgZmxvYXRUeXBlKQorICAgICAgICAgICAgbG93ZXN0RmxvYXRCb3R0b20g
PSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsQm90dG9t
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpKTsKICAgICB9CiAgICAgcmV0dXJuIGxvd2VzdEZsb2F0
Qm90dG9tOwogfQpAQCAtMzgxOSwxNiArMzgxOSwxNiBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2Nr
OjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGJvb2wgbWFrZUNoaWxk
UAogCiAgICAgLy8gRmxvYXRzIHRoYXQgd2lsbCByZW1haW4gdGhlIGNoaWxkJ3MgcmVzcG9uc2li
aWxpdHkgdG8gcGFpbnQgc2hvdWxkIGZhY3RvciBpbnRvIGl0cwogICAgIC8vIG92ZXJmbG93Lgot
ICAgIGF1dG8gY2hpbGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmVuZCgp
OwotICAgIGZvciAoYXV0byBjaGlsZEl0ID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KS5iZWdpbigpOyBjaGlsZEl0ICE9IGNoaWxkRW5kOyArK2NoaWxkSXQpIHsKLSAgICAgICAgRmxv
YXRpbmdPYmplY3QqIHIgPSBjaGlsZEl0LT5nZXQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsQm90dG9tRm9yRmxvYXQgPSBtaW4oci0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSwgTGF5b3V0VW5pdDo6bWF4KCkgLSBjaGlsZExvZ2ljYWxUb3ApOworICAgIGF1
dG8gY2hpbGRFbmQgPSBjaGlsZC0+ZmxvYXRpbmdPYmplY3RzKCktPnNldCgpLmVuZCgpOworICAg
IGZvciAoYXV0byBjaGlsZEl0ID0gY2hpbGQtPmZsb2F0aW5nT2JqZWN0cygpLT5zZXQoKS5iZWdp
bigpOyBjaGlsZEl0ICE9IGNoaWxkRW5kOyArK2NoaWxkSXQpIHsKKyAgICAgICAgRmxvYXRpbmdP
YmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gY2hpbGRJdC0+Z2V0KCk7CisgICAgICAgIExheW91dFVu
aXQgbG9naWNhbEJvdHRvbUZvckZsb2F0ID0gbWluKGNoaWxkLT5mbG9hdGluZ09iamVjdHMoKS0+
bG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSwgTGF5b3V0VW5pdDo6bWF4KCkg
LSBjaGlsZExvZ2ljYWxUb3ApOwogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBj
aGlsZExvZ2ljYWxUb3AgKyBsb2dpY2FsQm90dG9tRm9yRmxvYXQ7CiAgICAgICAgIGxvd2VzdEZs
b2F0TG9naWNhbEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20sIGxvZ2ljYWxC
b3R0b20pOwogCiAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tID4gbG9naWNhbEhlaWdodCgpKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGlzIG5vdCBpbiB0aGUgbGlzdCwgd2UgYWRk
IGl0IG5vdy4KLSAgICAgICAgICAgIGlmICghY29udGFpbnNGbG9hdCgmci0+cmVuZGVyZXIoKSkp
IHsKKyAgICAgICAgICAgIGlmICghY29udGFpbnNGbG9hdCgmZmxvYXRpbmdPYmplY3QtPnJlbmRl
cmVyKCkpKSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0U2l6ZSBvZmZzZXQgPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gTGF5b3V0U2l6ZSgtY2hpbGRMb2dpY2FsTGVmdCwgLWNoaWxkTG9n
aWNhbFRvcCkgOiBMYXlvdXRTaXplKC1jaGlsZExvZ2ljYWxUb3AsIC1jaGlsZExvZ2ljYWxMZWZ0
KTsKICAgICAgICAgICAgICAgICBib29sIHNob3VsZFBhaW50ID0gZmFsc2U7CiAKQEAgLTM4MzYs
MzEgKzM4MzYsMzEgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9h
dHMoUmVuZGVyQmxvY2sqIGNoaWxkLCBib29sIG1ha2VDaGlsZFAKICAgICAgICAgICAgICAgICAv
LyBiZWhhdmVzIHByb3Blcmx5KS4gIFdlIGFsd2F5cyB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgZGVz
aXJlIHRvIHBhaW50IHRoZSBmbG9hdCBhcwogICAgICAgICAgICAgICAgIC8vIGZhciBvdXQgYXMg
d2UgY2FuLCB0byB0aGUgb3V0ZXJtb3N0IGJsb2NrIHRoYXQgb3ZlcmxhcHMgdGhlIGZsb2F0LCBz
dG9wcGluZyBvbmx5CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UgaGl0IGEgc2VsZi1wYWludGlu
ZyBsYXllciBib3VuZGFyeS4KLSAgICAgICAgICAgICAgICBpZiAoci0+cmVuZGVyZXIoKS5lbmNs
b3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIoKSA9PSBlbmNsb3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIo
KSkgewotICAgICAgICAgICAgICAgICAgICByLT5zZXRTaG91bGRQYWludChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLmVuY2xvc2luZ0Zsb2F0
UGFpbnRpbmdMYXllcigpID09IGVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRTaG91bGRQYWludChmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHNob3VsZFBhaW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBs
YXppbHkuCiAgICAgICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlRmxvYXRpbmdPYmplY3RzKCk7CiAKLSAgICAgICAgICAgICAgICBt
X2Zsb2F0aW5nT2JqZWN0cy0+YWRkKHItPmNvcHlUb05ld0NvbnRhaW5lcihvZmZzZXQsIHNob3Vs
ZFBhaW50LCB0cnVlKSk7CisgICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChm
bG9hdGluZ09iamVjdC0+Y29weVRvTmV3Q29udGFpbmVyKG9mZnNldCwgc2hvdWxkUGFpbnQsIHRy
dWUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICht
YWtlQ2hpbGRQYWludE90aGVyRmxvYXRzICYmICFyLT5zaG91bGRQYWludCgpICYmICFyLT5yZW5k
ZXJlcigpLmhhc1NlbGZQYWludGluZ0xheWVyKCkKLSAgICAgICAgICAgICAgICAmJiByLT5yZW5k
ZXJlcigpLmlzRGVzY2VuZGFudE9mKGNoaWxkKSAmJiByLT5yZW5kZXJlcigpLmVuY2xvc2luZ0Zs
b2F0UGFpbnRpbmdMYXllcigpID09IGNoaWxkLT5lbmNsb3NpbmdGbG9hdFBhaW50aW5nTGF5ZXIo
KSkgeworICAgICAgICAgICAgaWYgKG1ha2VDaGlsZFBhaW50T3RoZXJGbG9hdHMgJiYgIWZsb2F0
aW5nT2JqZWN0LT5zaG91bGRQYWludCgpICYmICFmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5o
YXNTZWxmUGFpbnRpbmdMYXllcigpCisgICAgICAgICAgICAgICAgJiYgZmxvYXRpbmdPYmplY3Qt
PnJlbmRlcmVyKCkuaXNEZXNjZW5kYW50T2YoY2hpbGQpICYmIGZsb2F0aW5nT2JqZWN0LT5yZW5k
ZXJlcigpLmVuY2xvc2luZ0Zsb2F0UGFpbnRpbmdMYXllcigpID09IGNoaWxkLT5lbmNsb3NpbmdG
bG9hdFBhaW50aW5nTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBmbG9hdCBpcyBu
b3Qgb3ZlcmhhbmdpbmcgZnJvbSB0aGlzIGJsb2NrLCBzbyBpZiBpdCBpcyBhIGRlc2NlbmRhbnQg
b2YgdGhlIGNoaWxkLCB0aGUgY2hpbGQgc2hvdWxkCiAgICAgICAgICAgICAgICAgLy8gcGFpbnQg
aXQgKHRoZSBvdGhlciBjYXNlIGlzIHRoYXQgaXQgaXMgaW50cnVkaW5nIGludG8gdGhlIGNoaWxk
KSwgdW5sZXNzIGl0IGhhcyBpdHMgb3duIGxheWVyIG9yIGVuY2xvc2luZwogICAgICAgICAgICAg
ICAgIC8vIGxheWVyLgogICAgICAgICAgICAgICAgIC8vIElmIG1ha2VDaGlsZFBhaW50T3RoZXJG
bG9hdHMgaXMgZmFsc2UsIGl0IG1lYW5zIHRoYXQgdGhlIGNoaWxkIG11c3QgYWxyZWFkeSBrbm93
IGFib3V0IGFsbCB0aGUgZmxvYXRzCiAgICAgICAgICAgICAgICAgLy8gaXQgc2hvdWxkIHBhaW50
LgotICAgICAgICAgICAgICAgIHItPnNldFNob3VsZFBhaW50KHRydWUpOworICAgICAgICAgICAg
ICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRTaG91bGRQYWludCh0cnVlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gU2luY2UgdGhlIGZsb2F0IGRvZXNuJ3Qgb3Zl
cmhhbmcsIGl0IGRpZG4ndCBnZXQgcHV0IGludG8gb3VyIGxpc3QuICBXZSBuZWVkIHRvIGdvIGFo
ZWFkIGFuZCBhZGQgaXRzIG92ZXJmbG93IGluIHRvIHRoZQogICAgICAgICAgICAgLy8gY2hpbGQg
bm93LgotICAgICAgICAgICAgaWYgKHItPmlzRGVzY2VuZGFudCgpKQotICAgICAgICAgICAgICAg
IGNoaWxkLT5hZGRPdmVyZmxvd0Zyb21DaGlsZCgmci0+cmVuZGVyZXIoKSwgTGF5b3V0U2l6ZSh4
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNs
dWRpbmdNYXJnaW4ocikpKTsKKyAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+aXNEZXNj
ZW5kYW50KCkpCisgICAgICAgICAgICAgICAgY2hpbGQtPmFkZE92ZXJmbG93RnJvbUNoaWxkKCZm
bG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSwgTGF5b3V0U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdElu
Y2x1ZGluZ01hcmdpbihmbG9hdGluZ09iamVjdCksIHlQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5n
TWFyZ2luKGZsb2F0aW5nT2JqZWN0KSkpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBs
b3dlc3RGbG9hdExvZ2ljYWxCb3R0b207CkBAIC0zODc2LDcgKzM4NzYsNyBAQCBib29sIFJlbmRl
ckJsb2NrOjpoYXNPdmVyaGFuZ2luZ0Zsb2F0KFJlbmRlckJveCogcmVuZGVyZXIpCiAgICAgaWYg
KGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gKCppdCktPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkgPiBsb2dpY2FsSGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZmxvYXRpbmdPYmplY3RzLT5sb2dp
Y2FsQm90dG9tRm9yRmxvYXQoaXQtPmdldCgpKSA+IGxvZ2ljYWxIZWlnaHQoKTsKIH0KIAogdm9p
ZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2LCBMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQpCkBA
IC0zODg0LDE3ICszODg0LDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0
cyhSZW5kZXJCbG9jayogcHJldiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mCiAgICAgQVNTRVJU
KCFhdm9pZHNGbG9hdHMoKSk7CiAKICAgICAvLyBJZiB0aGUgcGFyZW50IG9yIHByZXZpb3VzIHNp
YmxpbmcgZG9lc24ndCBoYXZlIGFueSBmbG9hdHMgdG8gYWRkLCBkb24ndCBib3RoZXIuCi0gICAg
aWYgKCFwcmV2LT5tX2Zsb2F0aW5nT2JqZWN0cykKKyAgICBpZiAoIXByZXYtPmNvbnRhaW5zRmxv
YXRzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ICs9IG1hcmdp
bkxvZ2ljYWxMZWZ0KCk7CiAKLSAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgcHJldlNldCA9
IHByZXYtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKKyAgICBjb25zdCBGbG9hdGluZ09iamVj
dFNldCYgcHJldlNldCA9IHByZXYtPmZsb2F0aW5nT2JqZWN0cygpLT5zZXQoKTsKICAgICBhdXRv
IHByZXZFbmQgPSBwcmV2U2V0LmVuZCgpOwogICAgIGZvciAoYXV0byBwcmV2SXQgPSBwcmV2U2V0
LmJlZ2luKCk7IHByZXZJdCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewotICAgICAgICBGbG9hdGlu
Z09iamVjdCogciA9IHByZXZJdC0+Z2V0KCk7Ci0gICAgICAgIGlmIChyLT5sb2dpY2FsQm90dG9t
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID4gbG9naWNhbFRvcE9mZnNldCkgewotICAgICAg
ICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
LmNvbnRhaW5zPEZsb2F0aW5nT2JqZWN0JiwgRmxvYXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4o
KnIpKSB7CisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IHByZXZJdC0+
Z2V0KCk7CisgICAgICAgIGlmIChwcmV2LT5mbG9hdGluZ09iamVjdHMoKS0+bG9naWNhbEJvdHRv
bUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSA+IGxvZ2ljYWxUb3BPZmZzZXQpIHsKKyAgICAgICAg
ICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMgfHwgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5j
b250YWluczxGbG9hdGluZ09iamVjdCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpm
bG9hdGluZ09iamVjdCkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0
aW5nIG9iamVjdCBsaXN0IGxhemlseS4KICAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdP
YmplY3RzKQogICAgICAgICAgICAgICAgICAgICBjcmVhdGVGbG9hdGluZ09iamVjdHMoKTsKQEAg
LTM5MDgsNyArMzkwOCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhS
ZW5kZXJCbG9jayogcHJldiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mCiAgICAgICAgICAgICAg
ICAgICAgID8gTGF5b3V0U2l6ZShsb2dpY2FsTGVmdE9mZnNldCAtIChwcmV2ICE9IHBhcmVudCgp
ID8gcHJldi0+bWFyZ2luTGVmdCgpIDogTGF5b3V0VW5pdCgpKSwgbG9naWNhbFRvcE9mZnNldCkK
ICAgICAgICAgICAgICAgICAgICAgOiBMYXlvdXRTaXplKGxvZ2ljYWxUb3BPZmZzZXQsIGxvZ2lj
YWxMZWZ0T2Zmc2V0IC0gKHByZXYgIT0gcGFyZW50KCkgPyBwcmV2LT5tYXJnaW5Ub3AoKSA6IExh
eW91dFVuaXQoKSkpOwogCi0gICAgICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZChy
LT5jb3B5VG9OZXdDb250YWluZXIob2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgbV9mbG9hdGlu
Z09iamVjdHMtPmFkZChmbG9hdGluZ09iamVjdC0+Y29weVRvTmV3Q29udGFpbmVyKG9mZnNldCkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2suaAppbmRleCBjZDcwYjg1NjNkNTZhNDJkMDc3ZTgwY2IzNDljYWYxNjY1N2Nk
NWEyLi45NGY1Yzg1MGY4ZTVkODhmMzJmYTUyMjFhNjc1NjNkYTQ1ZDQxMmU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtODQ0LDYgKzg0NCw4IEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgICB9OwogCisgICAgRmxvYXRpbmdPYmplY3RzKiBmbG9hdGluZ09iamVjdHMo
KSBjb25zdCB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cy5nZXQoKTsgfQorCiBwcm90ZWN0ZWQ6
CiAKICAgICBPd25QdHI8RmxvYXRpbmdPYmplY3RzPiBtX2Zsb2F0aW5nT2JqZWN0czsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggYTU1YjJhNWY2
ZWRmNDFkYjk0OWE1YzYzMDY0YjUxNzY3ZWE1OWI0OC4uMjQ3ZGFjNjBlZDRiYTZiMmY4ODExYzIy
MjFjMjYzZTc1ZDRlNTc3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpj
bGVhckZsb2F0cygpCiAgICAgICAgICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRp
bmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAgICBhdXRv
IGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgICAgICAgICAgZm9yIChhdXRvIGl0
ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpdC0+Z2V0KCk7Ci0gICAgICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPEZsb2F0aW5nT2JqZWN0PiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0
TWFwLnRha2UoJmYtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9n
aWNhbEJvdHRvbSA9IGYtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7
CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdl
dCgpOworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gb2xk
RmxvYXRpbmdPYmplY3QgPSBmbG9hdE1hcC50YWtlKCZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIo
KSk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gbV9mbG9hdGlu
Z09iamVjdHMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG9sZEZsb2F0aW5nT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgb2xkTG9naWNhbEJvdHRvbSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90
dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Zi0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5n
T2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9n
aWNhbExlZnQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3Qt
PmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbEJvdHRvbSA9IG1fZmxvYXRpbmdPYmplY3RzLT5s
b2dpY2FsQm90dG9tRm9yRmxvYXQob2xkRmxvYXRpbmdPYmplY3QuZ2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMtPmxvZ2ljYWxXaWR0aEZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0KSAhPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bG9naWNhbFdpZHRoRm9yRmxvYXQo
b2xkRmxvYXRpbmdPYmplY3QuZ2V0KCkpIHx8IG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsTGVm
dEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSAhPSBtX2Zsb2F0aW5nT2JqZWN0cy0+bG9naWNhbExl
ZnRGb3JGbG9hdChvbGRGbG9hdGluZ09iamVjdC5nZXQoKSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgY2hh
bmdlTG9naWNhbEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgobG9naWNhbEJv
dHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewpA
QCAtMTg0LDggKzE4NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjbGVhckZsb2F0cygpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IG1pbihjaGFuZ2VM
b2dpY2FsVG9wLCBtaW4obG9naWNhbEJvdHRvbSwgb2xkTG9naWNhbEJvdHRvbSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9n
aWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQg
bG9naWNhbFRvcCA9IGYtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBvbGRGbG9h
dGluZ09iamVjdC0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IG1fZmxvYXRpbmdPYmpl
Y3RzLT5sb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOworICAgICAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsVG9wID0gbV9mbG9hdGluZ09iamVjdHMtPmxv
Z2ljYWxUb3BGb3JGbG9hdChvbGRGbG9hdGluZ09iamVjdC5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobG9naWNhbFRvcCAhPSBvbGRMb2dpY2FsVG9wKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbFRvcCA9IG1pbihjaGFuZ2VMb2dpY2FsVG9w
LCBtaW4obG9naWNhbFRvcCwgb2xkTG9naWNhbFRvcCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4
KGxvZ2ljYWxUb3AsIG9sZExvZ2ljYWxUb3ApKTsKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIFJl
bmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IGZsb2F0aW5nT2JqZWN0ID0gaXQtPnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKCFmbG9h
dGluZ09iamVjdC0+aXNEZXNjZW5kYW50KCkpIHsKICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dp
Y2FsVG9wID0gMDsKLSAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNo
YW5nZUxvZ2ljYWxCb3R0b20sIGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9t
ID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1fZmxvYXRpbmdPYmplY3RzLT5sb2dpY2FsQm90
dG9tRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCmluZGV4IDc1NDBkMDYzNWVmYjljNjZmYzVlZTkyMzYwYWZkNWQzODMxM2U1MDcuLjgzNjli
MTQ5NzViMjBhYTZmNzg5ZDNlZTVhMTMxYmEyZjJiYWU4ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCkBAIC0yMTQ1LDggKzIx
NDUsOCBAQCBib29sIFJlbmRlckJsb2NrOjpjaGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExp
bmUoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZQogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0
U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBh
dXRvIGVuZCA9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IGZs
b2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBGbG9h
dGluZ09iamVjdCogZiA9IGl0LT5nZXQoKTsKLSAgICAgICAgaWYgKGYtPmxvZ2ljYWxCb3R0b20o
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPj0gbG9naWNhbFRvcCAmJiBmLT5sb2dpY2FsQm90
dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIDwgbG9naWNhbEJvdHRvbSkKKyAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gaXQtPmdldCgpOworICAgICAgICBpZiAo
bV9mbG9hdGluZ09iamVjdHMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCkg
Pj0gbG9naWNhbFRvcCAmJiBtX2Zsb2F0aW5nT2JqZWN0cy0+bG9naWNhbEJvdHRvbUZvckZsb2F0
KGZsb2F0aW5nT2JqZWN0KSA8IGxvZ2ljYWxCb3R0b20pCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCkBAIC0yNjU4LDggKzI2NTgsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVTZWdt
ZW50c0ZvclNoYXBlcyhSZW5kZXJCbG9jayogYmxvY2ssIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBs
YQogICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQgPSBibG9jay0+bGluZUhlaWdodChp
c0ZpcnN0TGluZSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBIb3Jpem9udGFsTGluZSA6IFZl
cnRpY2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKICAgICBMYXlvdXRVbml0
IGxpbmVMb2dpY2FsQm90dG9tID0gbGluZUxvZ2ljYWxUb3AgKyBsaW5lTG9naWNhbEhlaWdodDsK
IAotICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsVG9wID0gbGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZS0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSk7Ci0gICAgTGF5b3V0VW5p
dCBmbG9hdExvZ2ljYWxCb3R0b20gPSBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLT5sb2dpY2Fs
Qm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0IGZsb2F0TG9n
aWNhbFRvcCA9IGJsb2NrLT5mbG9hdGluZ09iamVjdHMoKS0+bG9naWNhbFRvcEZvckZsb2F0KGxh
c3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOworICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsQm90
dG9tID0gYmxvY2stPmZsb2F0aW5nT2JqZWN0cygpLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQobGFz
dEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAKICAgICBib29sIGxpbmVPdmVybGFwc1dpdGhGbG9h
dCA9IChmbG9hdExvZ2ljYWxUb3AgPCBsaW5lTG9naWNhbEJvdHRvbSkgJiYgKGxpbmVMb2dpY2Fs
VG9wIDwgZmxvYXRMb2dpY2FsQm90dG9tKTsKICAgICBpZiAoIWxpbmVPdmVybGFwc1dpdGhGbG9h
dCkKQEAgLTI2NjcsOCArMjY2Nyw4IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVNlZ21lbnRzRm9yU2hh
cGVzKFJlbmRlckJsb2NrKiBibG9jaywgY29uc3QgRmxvYXRpbmdPYmplY3QqIGxhCiAKICAgICBm
bG9hdCBtaW5TZWdtZW50V2lkdGggPSBmaXJzdFBvc2l0aXZlV2lkdGgod29yZE1lYXN1cmVtZW50
cyk7CiAKLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoID0gbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZS0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKTsKLSAgICBM
YXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGJsb2NrLT5sb2dpY2FsV2lkdGgoKSAt
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUtPmxvZ2ljYWxSaWdodChpc0hvcml6b250YWxXcml0
aW5nTW9kZSk7CisgICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCA9IGJsb2NrLT5mbG9h
dGluZ09iamVjdHMoKS0+bG9naWNhbFdpZHRoRm9yRmxvYXQobGFzdEZsb2F0RnJvbVByZXZpb3Vz
TGluZSk7CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBibG9jay0+bG9n
aWNhbFdpZHRoKCkgLSBibG9jay0+ZmxvYXRpbmdPYmplY3RzKCktPmxvZ2ljYWxSaWdodEZvckZs
b2F0KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogICAgIGlmIChhdmFpbGFibGVMb2dpY2Fs
V2lkdGggPCBtaW5TZWdtZW50V2lkdGgpCiAgICAgICAgIGJsb2NrLT5zZXRMb2dpY2FsSGVpZ2h0
KGZsb2F0TG9naWNhbEJvdHRvbSk7CiAKQEAgLTI4MTIsMTMgKzI4MTIsMTMgQEAgSW5saW5lSXRl
cmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50QnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgTGluZUkKICAgICAgICAgICAgIHJlbmRlclRleHRJbmZvLm1fbGluZUJyZWFrSXRl
cmF0b3IucmVzZXRQcmlvckNvbnRleHQoKTsKICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Lm1f
b2JqLT5pc0Zsb2F0aW5nKCkpIHsKICAgICAgICAgICAgIFJlbmRlckJveCogZmxvYXRCb3ggPSB0
b1JlbmRlckJveChjdXJyZW50Lm1fb2JqKTsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBm
ID0gbV9ibG9jay0+aW5zZXJ0RmxvYXRpbmdPYmplY3QoZmxvYXRCb3gpOworICAgICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gbV9ibG9jay0+aW5zZXJ0RmxvYXRpbmdP
YmplY3QoZmxvYXRCb3gpOwogICAgICAgICAgICAgLy8gY2hlY2sgaWYgaXQgZml0cyBpbiB0aGUg
Y3VycmVudCBsaW5lLgogICAgICAgICAgICAgLy8gSWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93
LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAgICAgICAvLyBpdCBhZnRlciBtb3ZpbmcgdG8g
bmV4dCBsaW5lIChpbiBuZXdMaW5lKCkgZnVuYykKICAgICAgICAgICAgIC8vIEZJWE1FOiBCdWcg
MTEwMzcyOiBQcm9wZXJseSBwb3NpdGlvbiBtdWx0aXBsZSBzdGFja2VkIGZsb2F0cyB3aXRoIG5v
bi1yZWN0YW5ndWxhciBzaGFwZSBvdXRzaWRlLgotICAgICAgICAgICAgaWYgKGZsb2F0c0ZpdE9u
TGluZSAmJiB3aWR0aC5maXRzT25MaW5lRXhjbHVkaW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGYtPmxv
Z2ljYWxXaWR0aChtX2Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSkpIHsKLSAgICAg
ICAgICAgICAgICBtX2Jsb2NrLT5wb3NpdGlvbk5ld0Zsb2F0T25MaW5lKGYsIGxhc3RGbG9hdEZy
b21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3aWR0aCk7CisgICAgICAgICAgICBpZiAoZmxvYXRz
Rml0T25MaW5lICYmIHdpZHRoLmZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ1doaXRlc3BhY2Uo
bV9ibG9jay0+ZmxvYXRpbmdPYmplY3RzKCktPmxvZ2ljYWxXaWR0aEZvckZsb2F0KGZsb2F0aW5n
T2JqZWN0KSkpIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2NrLT5wb3NpdGlvbk5ld0Zsb2F0T25M
aW5lKGZsb2F0aW5nT2JqZWN0LCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBsaW5lSW5mbywg
d2lkdGgpOwogICAgICAgICAgICAgICAgIGlmIChsQnJlYWsubV9vYmogPT0gY3VycmVudC5tX29i
aikgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWxCcmVhay5tX3Bvcyk7CiAgICAgICAg
ICAgICAgICAgICAgIGxCcmVhay5pbmNyZW1lbnQoKTsKQEAgLTM0MzEsNyArMzQzMSw3IEBAIGJv
b2wgUmVuZGVyQmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5l
d0Zsb2F0LCBGbG9hdGluZ09iamVjCiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0
aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEFTU0VSVChmbG9h
dGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCkgPT0gbmV3RmxvYXQpOwogCi0gICAgTGF5b3V0VW5p
dCBmbG9hdExvZ2ljYWxUb3AgPSBuZXdGbG9hdC0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKTsKKyAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFRvcCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5sb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpOwogICAgIGludCBwYWdpbmF0aW9u
U3RydXQgPSBuZXdGbG9hdC0+cGFnaW5hdGlvblN0cnV0KCk7CiAKICAgICBpZiAoZmxvYXRMb2dp
Y2FsVG9wIC0gcGFnaW5hdGlvblN0cnV0ICE9IGxvZ2ljYWxIZWlnaHQoKSArIGxpbmVJbmZvLmZs
b2F0UGFnaW5hdGlvblN0cnV0KCkpCkBAIC0zNDQyLDIyICszNDQyLDIyIEBAIGJvb2wgUmVuZGVy
QmxvY2s6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBG
bG9hdGluZ09iamVjCiAgICAgYXV0byBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7
CiAgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CiAgICAgICAgIC0taXQ7Ci0gICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmID0gaXQtPmdldCgpOwotICAgICAgICBpZiAoZiA9PSBsYXN0RmxvYXRGcm9t
UHJldmlvdXNMaW5lKQorICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBp
dC0+Z2V0KCk7CisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdCA9PSBsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChmLT5sb2dpY2FsVG9w
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID09IGxvZ2ljYWxIZWlnaHQoKSArIGxpbmVJbmZv
LmZsb2F0UGFnaW5hdGlvblN0cnV0KCkpIHsKLSAgICAgICAgICAgIGYtPnNldFBhZ2luYXRpb25T
dHJ1dChwYWdpbmF0aW9uU3RydXQgKyBmLT5wYWdpbmF0aW9uU3RydXQoKSk7Ci0gICAgICAgICAg
ICBSZW5kZXJCb3gqIG8gPSAmZi0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzLT5sb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpID09IGxvZ2ljYWxIZWln
aHQoKSArIGxpbmVJbmZvLmZsb2F0UGFnaW5hdGlvblN0cnV0KCkpIHsKKyAgICAgICAgICAgIGZs
b2F0aW5nT2JqZWN0LT5zZXRQYWdpbmF0aW9uU3RydXQocGFnaW5hdGlvblN0cnV0ICsgZmxvYXRp
bmdPYmplY3QtPnBhZ2luYXRpb25TdHJ1dCgpKTsKKyAgICAgICAgICAgIFJlbmRlckJveCogbyA9
ICZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIHNldExvZ2ljYWxUb3BG
b3JDaGlsZChvLCBsb2dpY2FsVG9wRm9yQ2hpbGQobykgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChv
KSArIHBhZ2luYXRpb25TdHJ1dCk7CiAgICAgICAgICAgICBpZiAoby0+aXNSZW5kZXJCbG9jaygp
KQogICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2sobyktPnNldENoaWxkTmVlZHNMYXlvdXQo
dHJ1ZSwgTWFya09ubHlUaGlzKTsKICAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7CiAg
ICAgICAgICAgICAvLyBTYXZlIHRoZSBvbGQgbG9naWNhbCB0b3AgYmVmb3JlIGNhbGxpbmcgcmVt
b3ZlUGxhY2VkT2JqZWN0IHdoaWNoIHdpbGwgc2V0CiAgICAgICAgICAgICAvLyBpc1BsYWNlZCB0
byBmYWxzZS4gT3RoZXJ3aXNlIGl0IHdpbGwgdHJpZ2dlciBhbiBhc3NlcnQgaW4gbG9naWNhbFRv
cEZvckZsb2F0LgotICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsVG9wID0gZi0+bG9n
aWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAgIG1fZmxvYXRp
bmdPYmplY3RzLT5yZW1vdmVQbGFjZWRPYmplY3QoZik7Ci0gICAgICAgICAgICBmLT5zZXRMb2dp
Y2FsVG9wKG9sZExvZ2ljYWxUb3AgKyBwYWdpbmF0aW9uU3RydXQsIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpOwotICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVj
dChmKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IG1fZmxvYXRpbmdP
YmplY3RzLT5sb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOworICAgICAgICAgICAg
bV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZVBsYWNlZE9iamVjdChmbG9hdGluZ09iamVjdCk7Cisg
ICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0TG9naWNhbFRvcEZvckZsb2F0KGZsb2F0
aW5nT2JqZWN0LCBvbGRMb2dpY2FsVG9wICsgcGFnaW5hdGlvblN0cnV0KTsKKyAgICAgICAgICAg
IG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZmxvYXRpbmdPYmplY3QpOwogICAg
ICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZU91dHNpZGVJbmZvLmNwcAppbmRleCAwNzc5MjBhMmRhYWYxMmIzMzNjNzM0ZGFkNGU0
M2ZmM2U3Mjc0ZWMyLi5mZmZiMzU4Nzg2MGIyYjQ5NmFmZDNlNDY5OWI1MTBiMzQ5YWViZmUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUlu
Zm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRl
SW5mby5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgYm9vbCBTaGFwZU91dHNpZGVJbmZvOjppc0VuYWJs
ZWRGb3IoY29uc3QgUmVuZGVyQm94KiBib3gpCiAKIHZvaWQgU2hhcGVPdXRzaWRlSW5mbzo6dXBk
YXRlRGVsdGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9jayogY29udGFp
bmluZ0Jsb2NrLCBjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91dFVu
aXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KQogewotICAgIExheW91dFVuaXQgc2hh
cGVUb3AgPSBmbG9hdGluZ09iamVjdC0+bG9naWNhbFRvcChjb250YWluaW5nQmxvY2stPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpICsgc3RkOjptYXgoTGF5b3V0VW5pdCgpLCBjb250YWluaW5n
QmxvY2stPm1hcmdpbkJlZm9yZUZvckNoaWxkKG1fcmVuZGVyZXIpKTsKKyAgICBMYXlvdXRVbml0
IHNoYXBlVG9wID0gY29udGFpbmluZ0Jsb2NrLT5mbG9hdGluZ09iamVjdHMoKS0+bG9naWNhbFRv
cEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSArIHN0ZDo6bWF4KExheW91dFVuaXQoKSwgY29udGFp
bmluZ0Jsb2NrLT5tYXJnaW5CZWZvcmVGb3JDaGlsZChtX3JlbmRlcmVyKSk7CiAgICAgTGF5b3V0
VW5pdCBsaW5lVG9wSW5TaGFwZUNvb3JkaW5hdGVzID0gbGluZVRvcCAtIHNoYXBlVG9wICsgbG9n
aWNhbFRvcE9mZnNldCgpOwogCiAgICAgaWYgKHNoYXBlU2l6ZURpcnR5KCkgfHwgbV9saW5lVG9w
ICE9IGxpbmVUb3BJblNoYXBlQ29vcmRpbmF0ZXMgfHwgbV9saW5lSGVpZ2h0ICE9IGxpbmVIZWln
aHQpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213779</attachid>
            <date>2013-10-09 08:03:29 -0700</date>
            <delta_ts>2013-10-09 16:43:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122282-20131009080330.patch</filename>
            <type>text/plain</type>
            <size>41352</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3MTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk5ZDE3NWU3ODE0MDVi
ZjZmYjJkYzk1ZWFjYWY1ZmU5MTQ0OTVhNS4uZjlkZjMwNjcxN2QyNDFhZGI0OTA2NGYyYmZjZmRh
NTM3YWQzNjdjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDEzLTEwLTA5ICBCZW0g
Sm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgorCisgICAgICAgIE1vdmUgZmxvYXQgbG9n
aWNhbCBsb2NhdGlvbi9kaW1lbnNpb24gbWV0aG9kcyB0byBSZW5kZXJCbG9ja0Zsb3cKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEkgcmVjZW50bHkgbW92
ZWQgdGhlIGxvZ2ljYWwgbG9jYXRpb24gYW5kIGRpbWVuc2lvbiBtZXRob2RzIGZyb20KKyAgICAg
ICAgUmVuZGVyQmxvY2sgdG8gRmxvYXRpbmdPYmplY3QuIFRoaXMgbWFkZSBpdCBzbyB0aGF0IHRo
ZSBtZXRob2RzIG5lZWRlZAorICAgICAgICB0byB0YWtlIGluIHRoZSBob3Jpem9udGFsIHdyaXRp
bmcgbW9kZSBvZiB0aGUgRmxvYXRpbmdPYmplY3QncworICAgICAgICBjb250YWluZXIgaW4gb3Jk
ZXIgdG8gZG8gdGhlaXIgdGhpbmcuIFdoZW4gbG9va2luZyBpbnRvIGhvdyB0byBmaXgKKyAgICAg
ICAgdGhpcywgSSBjYW1lIHRvIHVuZGVyc3RhbmQgd2h5IFJlbmRlckJsb2NrIGhhcyBtZXRob2Rz
IHRvIGRldGVybWluZQorICAgICAgICB0aGUgbG9naWNhbCBsb2NhdGlvbiBhbmQgZGltZW5zaW9u
cyBvZiBpdHMgY2hpbGRyZW4sIHdoZW4gdGhlIGNoaWxkcmVuCisgICAgICAgIHRoZW1zZWx2ZXMg
aGF2ZSB0aG9zZSBtZXRob2RzOiB0aGUgbWV0aG9kcyBvbiBSZW5kZXJCbG9jayBhcmUgZm9yCisg
ICAgICAgIGRldGVybWluaW5nIHRoZSBsb2dpY2FsIHZhbHVlIGluIHRoZSB3cml0aW5nIG1vZGUg
b2YgdGhhdCBSZW5kZXJCbG9jaywKKyAgICAgICAgYW5kIHRoZSBtZXRob2Qgb24gdGhlIGNoaWxk
IGlzIGZvciBkZXRlcm1pbmluZyB0aGUgbG9naWNhbCB2YWx1ZSBpbgorICAgICAgICB0aGUgd3Jp
dGluZyBtb2RlIG9mIHRoZSBjaGlsZC4KKworICAgICAgICBTaW5jZSB0aGUgZmxvYXRpbmcgb2Jq
ZWN0IGxpc3QgaGFzIG1vdmVkIGZyb20gUmVuZGVyQmxvY2sgdG8KKyAgICAgICAgUmVuZGVyQmxv
Y2tGbG93LCB0aGlzIGNoYW5nZSBtb3ZlcyB0aGUgbG9naWNhbCBkaW1lbnNpb24gbWV0aG9kcyBm
cm9tCisgICAgICAgIEZsb2F0aW5nT2JqZWN0IHRvIFJlbmRlckJsb2NrRmxvdy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMsIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAgICAqIHJlbmRlcmluZy9G
bG9hdGluZ09iamVjdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zmc2V0
QWRhcHRlcjo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpG
bG9hdGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjo6OnVw
ZGF0ZU9mZnNldElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29sbGVjdElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0SGVpZ2h0UmVtYWluaW5nKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmg6CisgICAgICAgICogcmVuZGVyaW5nL0xpbmVXaWR0
aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRo
Rm9yTmV3RmxvYXRJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cmVwYWludE92ZXJoYW5naW5nRmxv
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpyZW1vdmVGbG9hdGlu
Z09iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUZsb2F0
aW5nT2JqZWN0c0JlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29t
cHV0ZUxvZ2ljYWxMb2NhdGlvbkZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93OjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omhhc092ZXJoYW5naW5nRmxvYXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGRJbnRydWRpbmdGbG9hdHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6bG9naWNhbFRvcEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6bG9naWNhbEJvdHRvbUZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrRmxvdzo6bG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9ja0Zsb3c6OmxvZ2ljYWxSaWdodEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6bG9naWNhbFdpZHRoRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsSGVpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2l6ZUZvckZsb2F0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrRmxvdzo6cGl4ZWxTbmFwcGVkTG9naWNhbFRvcEZvckZsb2F0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRv
bUZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cGl4ZWxTbmFw
cGVkTG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zs
b3c6OnBpeGVsU25hcHBlZExvZ2ljYWxSaWdodEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6c2V0TG9naWNhbFRvcEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrRmxvdzo6c2V0TG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNldExvZ2ljYWxXaWR0aEZvckZsb2F0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2Fs
SGVpZ2h0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpjaGVj
a1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRl
U2VnbWVudHNGb3JTaGFwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUJyZWFrZXI6Om5leHRT
ZWdtZW50QnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlv
bk5ld0Zsb2F0T25MaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lk
ZUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVs
dGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZU91dHNpZGVJbmZvLmg6CisKIDIwMTMtMTAtMDkgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxt
YXJpby5wcmFkYUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbQVRLXSBJbXBsZW1lbnQgbmV3IEFQ
SSBpbiBBdGtUZXh0OiBhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCmluZGV4IDY4N2UzZTg0N2IwZjI1
M2M3OWQ3OTRhZjdjYWIwZjhlZTdkMDY3YjAuLmE0YWRmZTE0MjMyYTk4YWRhZjlkNzIwNzQ2ODdi
MWJhMGVkODgwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVj
dHMuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
RmxvYXRpbmdPYmplY3RzLmgiCiAKLSNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgorI2luY2x1ZGUg
IlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKIApAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENvbXB1dGVGbG9hdE9mZnNl
dEFkYXB0ZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgRmxvYXRpbmdPYmplY3RJbnRlcnZhbCBJ
bnRlcnZhbFR5cGU7CiAKLSAgICBDb21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyKGNvbnN0IFJlbmRl
ckJsb2NrKiByZW5kZXJlciwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9tLCBMYXlvdXRVbml0
JiBvZmZzZXQpCisgICAgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcihjb25zdCBSZW5kZXJCbG9j
a0Zsb3cqIHJlbmRlcmVyLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20sIExheW91dFVuaXQm
IG9mZnNldCkKICAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQogICAgICAgICAsIG1fbGlu
ZVRvcChsaW5lVG9wKQogICAgICAgICAsIG1fbGluZUJvdHRvbShsaW5lQm90dG9tKQpAQCAtMTMx
LDE0ICsxMzEsMTQgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIHVwZGF0ZU9mZnNldElm
TmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0Kik7CiAKLSAgICBjb25zdCBSZW5kZXJCbG9jayog
bV9yZW5kZXJlcjsKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cqIG1fcmVuZGVyZXI7CiAgICAg
aW50IG1fbGluZVRvcDsKICAgICBpbnQgbV9saW5lQm90dG9tOwogICAgIExheW91dFVuaXQmIG1f
b2Zmc2V0OwogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBtX291dGVybW9zdEZsb2F0OwogfTsK
IAotRmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVjdHMoY29uc3QgUmVuZGVyQmxvY2sqIHJl
bmRlcmVyLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKK0Zsb2F0aW5nT2JqZWN0czo6Rmxv
YXRpbmdPYmplY3RzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyogcmVuZGVyZXIsIGJvb2wgaG9yaXpv
bnRhbFdyaXRpbmdNb2RlKQogICAgIDogbV9wbGFjZWRGbG9hdHNUcmVlKFVuaW5pdGlhbGl6ZWRU
cmVlKQogICAgICwgbV9sZWZ0T2JqZWN0c0NvdW50KDApCiAgICAgLCBtX3JpZ2h0T2JqZWN0c0Nv
dW50KDApCkBAIC0zNDgsNyArMzQ4LDcgQEAgaW5saW5lIHN0YXRpYyBib29sIHJhbmdlc0ludGVy
c2VjdChpbnQgZmxvYXRUb3AsIGludCBmbG9hdEJvdHRvbSwgaW50IG9iamVjdFRvcCwKIHRlbXBs
YXRlPD4KIGlubGluZSBib29sIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0ZXI8RmxvYXRpbmdPYmpl
Y3Q6OkZsb2F0TGVmdD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0
KiBmbG9hdGluZ09iamVjdCkKIHsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCA9IGZsb2F0
aW5nT2JqZWN0LT5sb2dpY2FsUmlnaHQobV9yZW5kZXJlci0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQgPSBtX3JlbmRlcmVyLT5sb2dpY2Fs
UmlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgaWYgKGxvZ2ljYWxSaWdodCA+IG1f
b2Zmc2V0KSB7CiAgICAgICAgIG1fb2Zmc2V0ID0gbG9naWNhbFJpZ2h0OwogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTM1OSw3ICszNTksNyBAQCBpbmxpbmUgYm9vbCBDb21wdXRlRmxvYXRPZmZz
ZXRBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQ+Ojp1cGRhdGVPZmZzZXRJZgogdGVt
cGxhdGU8PgogaW5saW5lIGJvb2wgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdGluZ09i
amVjdDo6RmxvYXRSaWdodD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0KiBmbG9hdGluZ09iamVjdCkKIHsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gZmxv
YXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBtX3JlbmRlcmVyLT5sb2dpY2Fs
TGVmdEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsKICAgICBpZiAobG9naWNhbExlZnQgPCBtX29m
ZnNldCkgewogICAgICAgICBtX29mZnNldCA9IGxvZ2ljYWxMZWZ0OwogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM3Niw3ICszNzYsNyBAQCBpbmxpbmUgdm9pZCBDb21wdXRlRmxvYXRPZmZzZXRB
ZGFwdGVyPEZsb2F0VHlwZVZhbHVlPjo6Y29sbGVjdElmTmVlZGVkKGNvbnN0IEludAogCiAgICAg
Ly8gQWxsIHRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gdGhlIHRyZWUgc2hvdWxkIGJlIGFscmVh
ZHkgcGxhY2VkLgogICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQbGFjZWQoKSk7Ci0gICAg
QVNTRVJUKHJhbmdlc0ludGVyc2VjdChmbG9hdGluZ09iamVjdC0+cGl4ZWxTbmFwcGVkTG9naWNh
bFRvcChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgZmxvYXRpbmdPYmpl
Y3QtPnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20obV9yZW5kZXJlci0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSk7CisgICAgQVNTRVJUKHJhbmdl
c0ludGVyc2VjdChtX3JlbmRlcmVyLT5waXhlbFNuYXBwZWRMb2dpY2FsVG9wRm9yRmxvYXQoZmxv
YXRpbmdPYmplY3QpLCBtX3JlbmRlcmVyLT5waXhlbFNuYXBwZWRMb2dpY2FsQm90dG9tRm9yRmxv
YXQoZmxvYXRpbmdPYmplY3QpLCBtX2xpbmVUb3AsIG1fbGluZUJvdHRvbSkpOwogCiAgICAgYm9v
bCBmbG9hdElzTmV3RXh0cmVtZSA9IHVwZGF0ZU9mZnNldElmTmVlZGVkKGZsb2F0aW5nT2JqZWN0
KTsKICAgICBpZiAoZmxvYXRJc05ld0V4dHJlbWUpCkBAIC0zODYsNyArMzg2LDcgQEAgaW5saW5l
IHZvaWQgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVWYWx1ZT46OmNvbGxlY3RJ
Zk5lZWRlZChjb25zdCBJbnQKIHRlbXBsYXRlIDxGbG9hdGluZ09iamVjdDo6VHlwZSBGbG9hdFR5
cGVWYWx1ZT4KIExheW91dFVuaXQgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVW
YWx1ZT46OmdldEhlaWdodFJlbWFpbmluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fb3V0ZXJt
b3N0RmxvYXQgPyBtX291dGVybW9zdEZsb2F0LT5sb2dpY2FsQm90dG9tKG1fcmVuZGVyZXItPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIC0gbV9saW5lVG9wIDogTGF5b3V0VW5pdCgxKTsKKyAg
ICByZXR1cm4gbV9vdXRlcm1vc3RGbG9hdCA/IG1fcmVuZGVyZXItPmxvZ2ljYWxCb3R0b21Gb3JG
bG9hdChtX291dGVybW9zdEZsb2F0KSAtIG1fbGluZVRvcCA6IExheW91dFVuaXQoMSk7CiB9CiAK
ICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxv
YXRpbmdPYmplY3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3Rz
LmgKaW5kZXggY2JmMzhhY2FjNTJiNWExNzNkZDNlYTJjY2YxY2U4ZjU3MTY5Y2UwMy4uYTcxY2Nk
YWNmMjM3MzkxMmFlMzk5NTQzOGQ5NzJiODY2NjA0MjA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9GbG9hdGluZ09iamVjdHMuaApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyQmxvY2tGbG93Owog
Y2xhc3MgUmVuZGVyQm94OwogCiBlbnVtIFNoYXBlT3V0c2lkZUZsb2F0T2Zmc2V0TW9kZSB7IFNo
YXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIFNoYXBlT3V0c2lkZUZsb2F0TWFyZ2luQm94T2Zm
c2V0IH07CkBAIC04Niw0OCArODYsNiBAQCBwdWJsaWM6CiAgICAgUm9vdElubGluZUJveCogb3Jp
Z2luYXRpbmdMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hdGluZ0xpbmU7IH0KICAgICB2
b2lkIHNldE9yaWdpbmF0aW5nTGluZShSb290SW5saW5lQm94KiBsaW5lKSB7IG1fb3JpZ2luYXRp
bmdMaW5lID0gbGluZTsgfQogCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKGJvb2wgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
ID8geSgpIDogeCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKGJvb2wgaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
ID8gbWF4WSgpIDogbWF4WCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdChib29sIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5n
TW9kZSA/IHgoKSA6IHkoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0KGJvb2wgaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlID8gbWF4WCgpIDogbWF4WSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgoYm9v
bCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUgPyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxI
ZWlnaHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUgPyBoZWlnaHQoKSA6IHdpZHRoKCk7IH0KLSAgICBMYXlvdXRTaXpl
IGxvZ2ljYWxTaXplKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gTGF5b3V0U2l6ZSh3aWR0aCgpLCBoZWlnaHQoKSkg
OiBMYXlvdXRTaXplKGhlaWdodCgpLCB3aWR0aCgpKTsgfQotCi0gICAgaW50IHBpeGVsU25hcHBl
ZExvZ2ljYWxUb3AoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRZKCkgOiBm
cmFtZVJlY3QoKS5waXhlbFNuYXBwZWRYKCk7IH0KLSAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNh
bEJvdHRvbShib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZE1heFkoKSA6IGZy
YW1lUmVjdCgpLnBpeGVsU25hcHBlZE1heFgoKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRMb2dp
Y2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFgoKSA6IGZyYW1l
UmVjdCgpLnBpeGVsU25hcHBlZFkoKTsgfQotICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsUmln
aHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhYKCkgOiBmcmFtZVJl
Y3QoKS5waXhlbFNuYXBwZWRNYXhZKCk7IH0KLQotICAgIHZvaWQgc2V0TG9naWNhbFRvcChMYXlv
dXRVbml0IGxvZ2ljYWxUb3AsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgewot
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICBzZXRZKGxv
Z2ljYWxUb3ApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRYKGxvZ2ljYWxUb3ApOwot
ICAgIH0KLSAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQgbG9naWNhbExlZnQsIGJv
b2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgewotICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICBzZXRYKGxvZ2ljYWxMZWZ0KTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgc2V0WShsb2dpY2FsTGVmdCk7Ci0gICAgfQotICAgIHZvaWQgc2V0
TG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIGJvb2wgaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUpCi0gICAgewotICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUp
Ci0gICAgICAgICAgICBzZXRIZWlnaHQobG9naWNhbEhlaWdodCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNldFdpZHRoKGxvZ2ljYWxIZWlnaHQpOwotICAgIH0KLSAgICB2b2lkIHNldExv
Z2ljYWxXaWR0aChMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBpc0hvcml6b250YWxXcml0
aW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAg
ICAgICAgICAgIHNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHNldEhlaWdodChsb2dpY2FsV2lkdGgpOwotICAgIH0KLQogcHJpdmF0ZToKICAgICBSZW5k
ZXJCb3gmIG1fcmVuZGVyZXI7CiAgICAgUm9vdElubGluZUJveCogbV9vcmlnaW5hdGluZ0xpbmU7
CkBAIC0xNjgsNyArMTI2LDcgQEAgdHlwZWRlZiBIYXNoTWFwPFJlbmRlckJveCosIHN0ZDo6dW5p
cXVlX3B0cjxGbG9hdGluZ09iamVjdD4+IFJlbmRlcmVyVG9GbG9hdEluZm8KIGNsYXNzIEZsb2F0
aW5nT2JqZWN0cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmxvYXRpbmdPYmplY3RzKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRmxvYXRpbmdPYmplY3RzKGNv
bnN0IFJlbmRlckJsb2NrKiwgYm9vbCBob3Jpem9udGFsV3JpdGluZ01vZGUpOworICAgIEZsb2F0
aW5nT2JqZWN0cyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cqLCBib29sIGhvcml6b250YWxXcml0aW5n
TW9kZSk7CiAgICAgfkZsb2F0aW5nT2JqZWN0cygpOwogCiAgICAgdm9pZCBjbGVhcigpOwpAQCAt
MTk4LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9sZWZ0T2JqZWN0c0NvdW50
OwogICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7CiAgICAgYm9vbCBtX2hvcml6b250
YWxXcml0aW5nTW9kZTsKLSAgICBjb25zdCBSZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKKyAgICBj
b25zdCBSZW5kZXJCbG9ja0Zsb3cqIG1fcmVuZGVyZXI7CiB9OwogCiAjaWZuZGVmIE5ERUJVRwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVXaWR0aC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRoLmNwcAppbmRleCBmZGNlYTdiYWFkMjlhZWM4
MDI4ZGFkZjliYjI4OWU5MmNhYTdkY2UzLi43OTg3NTJjZjFjNDBlN2M3YmIxYmYwYmVhMTcxYWI3
ZjkwYTdmOTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRo
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRoLmNwcApAQCAtOTIs
NyArOTIsNyBAQCB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxlV2lkdGgoTGF5b3V0VW5p
dCByZXBsYWNlZEhlaWdodCkKIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtBdmFpbGFibGVXaWR0aEZv
ck5ld0Zsb2F0SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0KQogewogICAgIExheW91
dFVuaXQgaGVpZ2h0ID0gbV9ibG9jay5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgaWYgKGhlaWdodCA8
IG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkg
fHwgaGVpZ2h0ID49IG5ld0Zsb2F0LT5sb2dpY2FsQm90dG9tKG1fYmxvY2suaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkpCisgICAgaWYgKGhlaWdodCA8IG1fYmxvY2subG9naWNhbFRvcEZvckZs
b2F0KG5ld0Zsb2F0KSB8fCBoZWlnaHQgPj0gbV9ibG9jay5sb2dpY2FsQm90dG9tRm9yRmxvYXQo
bmV3RmxvYXQpKQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKQEAg
LTEyMiw3ICsxMjIsNyBAQCB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZhaWxhYmxlV2lkdGhGb3JO
ZXdGbG9hdElmTmVlZGVkKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdAogI2VuZGlmCiAKICAgICBp
ZiAobmV3RmxvYXQtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KSB7Ci0gICAg
ICAgIGZsb2F0IG5ld0xlZnQgPSBuZXdGbG9hdC0+bG9naWNhbFJpZ2h0KG1fYmxvY2suaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgIGZsb2F0IG5ld0xlZnQgPSBtX2Jsb2NrLmxv
Z2ljYWxSaWdodEZvckZsb2F0KG5ld0Zsb2F0KTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKICAg
ICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgIG5ld0xlZnQg
LT0gcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5yaWdodE1hcmdpbkJveERlbHRhKCk7CkBAIC0x
MzQsNyArMTM0LDcgQEAgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9yTmV3
RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQKICAgICAgICAgICAgIG5ld0xl
ZnQgKz0gZmxvb3JUb0ludChtX2Jsb2NrLnRleHRJbmRlbnRPZmZzZXQoKSk7CiAgICAgICAgIG1f
bGVmdCA9IHN0ZDo6bWF4PGZsb2F0PihtX2xlZnQsIG5ld0xlZnQpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGZsb2F0IG5ld1JpZ2h0ID0gbmV3RmxvYXQtPmxvZ2ljYWxMZWZ0KG1fYmxvY2suaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgIGZsb2F0IG5ld1JpZ2h0ID0gbV9ibG9j
ay5sb2dpY2FsTGVmdEZvckZsb2F0KG5ld0Zsb2F0KTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBFUykK
ICAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKICAgICAgICAgICAgIG5ld1Jp
Z2h0IC09IHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mby0+bGVmdE1hcmdpbkJveERlbHRhKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IDY0Y2Fm
OGVmYzVmNWVkNTBiODE2ZGU5MDJjYTFkN2M5MDY3YzVmMjUuLmU1NWI3NDc3Yjc4MmRkMzllYWI3
ODUxNWM5OGIyNjExNWZhNTE1ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lkIFJlbmRlckJsb2NrRmxv
dzo6Y2xlYXJGbG9hdHMoKQogICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAgICAg
YXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoYXV0
byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAg
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gaXQtPmdldCgpOwotICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gb2xkRmxvYXRpbmdPYmplY3QgPSBm
bG9hdE1hcC50YWtlKCZmLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpOworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGl0
LT5nZXQoKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRpbmdPYmplY3Q+
IG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAudGFrZSgmZmxvYXRpbmdPYmplY3QtPnJlbmRl
cmVyKCkpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGxvZ2lj
YWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgICAgICAgICAgICAgaWYgKG9s
ZEZsb2F0aW5nT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9n
aWNhbEJvdHRvbSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZi0+bG9naWNhbFdpZHRo
KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2Fs
V2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9naWNhbExlZnQoaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVu
aXQgb2xkTG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChvbGRGbG9hdGluZ09i
amVjdC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsV2lkdGhGb3JGbG9h
dChmbG9hdGluZ09iamVjdCkgIT0gbG9naWNhbFdpZHRoRm9yRmxvYXQob2xkRmxvYXRpbmdPYmpl
Y3QuZ2V0KCkpIHx8IGxvZ2ljYWxMZWZ0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpICE9IGxvZ2lj
YWxMZWZ0Rm9yRmxvYXQob2xkRmxvYXRpbmdPYmplY3QuZ2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2lj
YWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKQEAgLTE4Nyw4ICsxODcsOCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSBtaW4oY2hh
bmdlTG9naWNhbFRvcCwgbWluKGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90dG9tID0gbWF4KGNoYW5n
ZUxvZ2ljYWxCb3R0b20sIG1heChsb2dpY2FsQm90dG9tLCBvbGRMb2dpY2FsQm90dG9tKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AgPSBmLT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsVG9wID0gb2xk
RmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9w
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOworICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBvbGRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0
LmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsVG9wICE9IG9sZExv
Z2ljYWxUb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9w
ID0gbWluKGNoYW5nZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsVG9wLCBvbGRMb2dpY2FsVG9wKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNhbEJvdHRvbSA9IG1heChj
aGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgobG9naWNhbFRvcCwgb2xkTG9naWNhbFRvcCkpOwpAQCAt
MjExLDcgKzIxMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjbGVhckZsb2F0cygpCiAgICAg
ICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+dmFsdWUuZ2V0KCk7
CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2NlbmRhbnQoKSkgewogICAg
ICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwotICAgICAgICAgICAgICAgIGNoYW5n
ZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgZmxvYXRpbmdPYmplY3Qt
PmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAgICAg
ICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbG9naWNh
bEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIApAQCAtMTYzMCw3ICsxNjMwLDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlcGFpbnRP
dmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMpCiAgICAgICAgIC8vIE9u
bHkgcmVwYWludCB0aGUgb2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRz
IG93biBsYXllciwgYW5kCiAgICAgICAgIC8vIGlzIG91ciByZXNwb25zaWJpbGl0eSB0byBwYWlu
dCAobV9zaG91bGRQYWludCBpcyBzZXQpLiBXaGVuIHBhaW50QWxsRGVzY2VuZGFudHMgaXMgdHJ1
ZSwgdGhlIGxhdHRlcgogICAgICAgICAvLyBjb25kaXRpb24gaXMgcmVwbGFjZWQgd2l0aCBiZWlu
ZyBhIGRlc2NlbmRhbnQgb2YgdXMuCi0gICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+bG9naWNh
bEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSA+IGxvZ2ljYWxIZWlnaHQoKQorICAg
ICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSA+IGxvZ2ljYWxI
ZWlnaHQoKQogICAgICAgICAgICAgJiYgIWZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpLmhhc1Nl
bGZQYWludGluZ0xheWVyKCkKICAgICAgICAgICAgICYmIChmbG9hdGluZ09iamVjdC0+c2hvdWxk
UGFpbnQoKSB8fCAocGFpbnRBbGxEZXNjZW5kYW50cyAmJiBmbG9hdGluZ09iamVjdC0+cmVuZGVy
ZXIoKS5pc0Rlc2NlbmRhbnRPZih0aGlzKSkpKSB7CiAgICAgICAgICAgICBmbG9hdGluZ09iamVj
dC0+cmVuZGVyZXIoKS5yZXBhaW50KCk7CkBAIC0xNzMzLDcgKzE3MzMsNyBAQCBGbG9hdGluZ09i
amVjdCogUmVuZGVyQmxvY2tGbG93OjppbnNlcnRGbG9hdGluZ09iamVjdChSZW5kZXJCb3gqIGZs
b2F0Qm94KQogICAgICAgICBmbG9hdEJveC0+Y29tcHV0ZUFuZFNldEJsb2NrRGlyZWN0aW9uTWFy
Z2lucyh0aGlzKTsKICAgICB9CiAKLSAgICBmbG9hdGluZ09iamVjdC0+c2V0TG9naWNhbFdpZHRo
KGxvZ2ljYWxXaWR0aEZvckNoaWxkKGZsb2F0Qm94KSArIG1hcmdpblN0YXJ0Rm9yQ2hpbGQoZmxv
YXRCb3gpICsgbWFyZ2luRW5kRm9yQ2hpbGQoZmxvYXRCb3gpLCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKTsKKyAgICBzZXRMb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdC5nZXQo
KSwgbG9naWNhbFdpZHRoRm9yQ2hpbGQoZmxvYXRCb3gpICsgbWFyZ2luU3RhcnRGb3JDaGlsZChm
bG9hdEJveCkgKyBtYXJnaW5FbmRGb3JDaGlsZChmbG9hdEJveCkpOwogCiAjaWYgRU5BQkxFKENT
U19TSEFQRVMpCiAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBlT3V0c2lkZSA9IGZsb2F0
Qm94LT5zaGFwZU91dHNpZGVJbmZvKCkpCkBAIC0xNzUxLDggKzE3NTEsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94KiBmbG9hdEJveCkKICAg
ICAgICAgaWYgKGl0ICE9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKSB7CiAgICAgICAgICAgICBG
bG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7CiAgICAgICAgICAgICBp
ZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNh
bFRvcCA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpOwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9IGZsb2F0aW5n
T2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChmbG9h
dGluZ09iamVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0g
bG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsKIAogICAgICAgICAgICAgICAg
IC8vIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0OTk1
LgogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tIDwgMCB8fCBsb2dpY2FsQm90dG9t
IDwgbG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09IExheW91dFVuaXQ6Om1heCgpKQpAQCAtMTc4
Niw3ICsxNzg2LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUZsb2F0aW5nT2JqZWN0
c0JlbG93KEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQsIGludAogICAgIAogICAgIGNvbnN0IEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKICAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IGZsb2F0aW5nT2JqZWN0U2V0Lmxhc3Qo
KS5nZXQoKTsKLSAgICB3aGlsZSAoY3VyciAhPSBsYXN0RmxvYXQgJiYgKCFjdXJyLT5pc1BsYWNl
ZCgpIHx8IGN1cnItPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPj0gbG9n
aWNhbE9mZnNldCkpIHsKKyAgICB3aGlsZSAoY3VyciAhPSBsYXN0RmxvYXQgJiYgKCFjdXJyLT5p
c1BsYWNlZCgpIHx8IGxvZ2ljYWxUb3BGb3JGbG9hdChjdXJyKSA+PSBsb2dpY2FsT2Zmc2V0KSkg
ewogICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKGN1cnIpOwogICAgICAgICBpZiAo
ZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODIx
LDcgKzE4MjEsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dpY2Fs
TG9jYXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdAogI2VuZGlmCiAgICAgICAgIGxv
Z2ljYWxSaWdodE9mZnNldCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQobG9naWNhbFRv
cE9mZnNldCk7CiAKLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoID0gbWluKGZsb2F0
aW5nT2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGxvZ2lj
YWxSaWdodE9mZnNldCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsgLy8gVGhlIHdpZHRoIHdlIGxvb2sg
Zm9yLgorICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsV2lkdGggPSBtaW4obG9naWNhbFdpZHRo
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpLCBsb2dpY2FsUmlnaHRPZmZzZXQgLSBsb2dpY2FsTGVm
dE9mZnNldCk7IC8vIFRoZSB3aWR0aCB3ZSBsb29rIGZvci4KIAogICAgIExheW91dFVuaXQgZmxv
YXRMb2dpY2FsTGVmdDsKIApAQCAtMTgzOCw3ICsxODM4LDcgQEAgTGF5b3V0UG9pbnQgUmVuZGVy
QmxvY2tGbG93Ojpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdP
YmplY3QKICAgICAgICAgICAgICAgICAvLyBIYXZlIHRvIHJlLWV2YWx1YXRlIGFsbCBvZiBvdXIg
b2Zmc2V0cywgc2luY2UgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkLgogICAgICAgICAgICAgICAgIGxv
Z2ljYWxSaWdodE9mZnNldCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQobG9naWNhbFRv
cE9mZnNldCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgogICAgICAgICAgICAg
ICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JDb250ZW50KGxvZ2lj
YWxUb3BPZmZzZXQpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgotICAgICAgICAg
ICAgICAgIGZsb2F0TG9naWNhbFdpZHRoID0gbWluKGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsV2lk
dGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGxvZ2ljYWxSaWdodE9mZnNldCAtIGxvZ2lj
YWxMZWZ0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBmbG9hdExvZ2ljYWxXaWR0aCA9IG1pbihs
b2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCksIGxvZ2ljYWxSaWdodE9mZnNldCAt
IGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBm
bG9hdExvZ2ljYWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0T2Zmc2V0IC0gYm9yZGVyQW5kUGFkZGlu
Z0xvZ2ljYWxMZWZ0KCksIGZsb2F0TG9naWNhbExlZnQpOwpAQCAtMTg1MywxMyArMTg1MywxMyBA
QCBMYXlvdXRQb2ludCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dpY2FsTG9jYXRpb25Gb3JG
bG9hdChjb25zdCBGbG9hdGluZ09iamVjdAogICAgICAgICAgICAgICAgIC8vIEhhdmUgdG8gcmUt
ZXZhbHVhdGUgYWxsIG9mIG91ciBvZmZzZXRzLCBzaW5jZSB0aGV5IG1heSBoYXZlIGNoYW5nZWQu
CiAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gbG9naWNhbFJpZ2h0T2Zmc2V0
Rm9yQ29udGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBv
ZmZzZXQuCiAgICAgICAgICAgICAgICAgbG9naWNhbExlZnRPZmZzZXQgPSBsb2dpY2FsTGVmdE9m
ZnNldEZvckNvbnRlbnQobG9naWNhbFRvcE9mZnNldCk7IC8vIENvbnN0YW50IHBhcnQgb2YgbGVm
dCBvZmZzZXQuCi0gICAgICAgICAgICAgICAgZmxvYXRMb2dpY2FsV2lkdGggPSBtaW4oZmxvYXRp
bmdPYmplY3QtPmxvZ2ljYWxXaWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSwgbG9naWNh
bFJpZ2h0T2Zmc2V0IC0gbG9naWNhbExlZnRPZmZzZXQpOworICAgICAgICAgICAgICAgIGZsb2F0
TG9naWNhbFdpZHRoID0gbWluKGxvZ2ljYWxXaWR0aEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSwg
bG9naWNhbFJpZ2h0T2Zmc2V0IC0gbG9naWNhbExlZnRPZmZzZXQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgd2lkdGggb2YgdGhlIGZsb2F0
IGhlcmUsIHNpbmNlIHRoZSBsb2NhbCB2YXJpYWJsZQogICAgICAgICAvLyB8ZmxvYXRMb2dpY2Fs
V2lkdGh8IHdhcyBjYXBwZWQgdG8gdGhlIGF2YWlsYWJsZSBsaW5lIHdpZHRoLiBTZWUKICAgICAg
ICAgLy8gZmFzdC9ibG9jay9mbG9hdC9jbGFtcGVkLXJpZ2h0LWZsb2F0Lmh0bWwuCi0gICAgICAg
IGZsb2F0TG9naWNhbExlZnQgLT0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxXaWR0aChpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgZmxvYXRMb2dpY2FsTGVmdCAtPSBsb2dpY2Fs
V2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBM
YXlvdXRQb2ludChmbG9hdExvZ2ljYWxMZWZ0LCBsb2dpY2FsVG9wT2Zmc2V0KTsKQEAgLTE4OTgs
NyArMTg5OCw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0cygpCiAg
ICAgCiAgICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9wIHBvc2l0aW9u
IG9mIHRoZSBsYXN0IHBvc2l0aW9uZWQgZmxvYXQuCiAgICAgaWYgKGxhc3RQbGFjZWRGbG9hdGlu
Z09iamVjdCkKLSAgICAgICAgbG9naWNhbFRvcCA9IG1heChsYXN0UGxhY2VkRmxvYXRpbmdPYmpl
Y3QtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGxvZ2ljYWxUb3ApOwor
ICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0UGxhY2VkRmxv
YXRpbmdPYmplY3QpLCBsb2dpY2FsVG9wKTsKIAogICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7CiAgICAgLy8gTm93IHdhbGsgdGhyb3VnaCB0aGUgc2V0IG9mIHVucG9zaXRp
b25lZCBmbG9hdHMgYW5kIHBsYWNlIHRoZW0uCkBAIC0xOTIyLDcgKzE5MjIsNyBAQCBib29sIFJl
bmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMoKQogCiAgICAgICAgIExheW91dFBvaW50
IGZsb2F0TG9naWNhbExvY2F0aW9uID0gY29tcHV0ZUxvZ2ljYWxMb2NhdGlvbkZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0LCBsb2dpY2FsVG9wKTsKIAotICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0
TG9naWNhbExlZnQoZmxvYXRMb2dpY2FsTG9jYXRpb24ueCgpLCBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKTsKKyAgICAgICAgc2V0TG9naWNhbExlZnRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwg
ZmxvYXRMb2dpY2FsTG9jYXRpb24ueCgpKTsKIAogICAgICAgICBzZXRMb2dpY2FsTGVmdEZvckNo
aWxkKGNoaWxkQm94LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi54KCkgKyBjaGlsZExvZ2ljYWxMZWZ0
TWFyZ2luKTsKICAgICAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGNoaWxkQm94LCBmbG9hdExv
Z2ljYWxMb2NhdGlvbi55KCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkpOwpAQCAt
MTk1NCw3ICsxOTU0LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRz
KCkKICAgICAgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0UGFnaW5hdGlvblN0cnV0KG5l
d0xvZ2ljYWxUb3AgLSBmbG9hdExvZ2ljYWxMb2NhdGlvbi55KCkpOwogCiAgICAgICAgICAgICAg
ICAgZmxvYXRMb2dpY2FsTG9jYXRpb24gPSBjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQo
ZmxvYXRpbmdPYmplY3QsIG5ld0xvZ2ljYWxUb3ApOwotICAgICAgICAgICAgICAgIGZsb2F0aW5n
T2JqZWN0LT5zZXRMb2dpY2FsTGVmdChmbG9hdExvZ2ljYWxMb2NhdGlvbi54KCksIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgIHNldExvZ2ljYWxMZWZ0Rm9yRmxv
YXQoZmxvYXRpbmdPYmplY3QsIGZsb2F0TG9naWNhbExvY2F0aW9uLngoKSk7CiAKICAgICAgICAg
ICAgICAgICBzZXRMb2dpY2FsTGVmdEZvckNoaWxkKGNoaWxkQm94LCBmbG9hdExvZ2ljYWxMb2Nh
dGlvbi54KCkgKyBjaGlsZExvZ2ljYWxMZWZ0TWFyZ2luKTsKICAgICAgICAgICAgICAgICBzZXRM
b2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGRCb3gsIGZsb2F0TG9naWNhbExvY2F0aW9uLnkoKSArIG1h
cmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkQm94KSk7CkBAIC0xOTcwLDkgKzE5NzAsOSBAQCBib29s
IFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldExvZ2ljYWxUb3AoZmxvYXRMb2dp
Y2FsTG9jYXRpb24ueSgpLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgc2V0
TG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi55
KCkpOwogCi0gICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxI
ZWlnaHRGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZEJveCkg
KyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkQm94KSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSk7CisgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCwgbG9n
aWNhbEhlaWdodEZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxk
Qm94KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGRCb3gpKTsKIAogICAgICAgICBtX2Zsb2F0
aW5nT2JqZWN0cy0+YWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKIApAQCAtMjAzNCwx
MCArMjAzNCwxMCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6bmV4dEZsb2F0TG9naWNh
bEJvdHRvbUJlbG93KExheW91dFVuaXQgbG9naWNhbEhlaWdodAogI2lmIEVOQUJMRShDU1NfU0hB
UEVTKQogICAgICAgICBTaGFwZU91dHNpZGVJbmZvKiBzaGFwZU91dHNpZGUgPSBmbG9hdGluZ09i
amVjdC0+cmVuZGVyZXIoKS5zaGFwZU91dHNpZGVJbmZvKCk7CiAgICAgICAgIGlmIChvZmZzZXRN
b2RlID09IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQgJiYgc2hhcGVPdXRzaWRlKQotICAg
ICAgICAgICAgZmxvYXRCb3R0b20gPSBmbG9hdGluZ09iamVjdC0+bG9naWNhbFRvcChpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKCYoZmxvYXRpbmdPYmpl
Y3QtPnJlbmRlcmVyKCkpKSArIHNoYXBlT3V0c2lkZS0+c2hhcGVMb2dpY2FsQm90dG9tKCk7Cisg
ICAgICAgICAgICBmbG9hdEJvdHRvbSA9IGxvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVj
dCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZCgmKGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpKSkg
KyBzaGFwZU91dHNpZGUtPnNoYXBlTG9naWNhbEJvdHRvbSgpOwogICAgICAgICBlbHNlCiAjZW5k
aWYKLSAgICAgICAgICAgIGZsb2F0Qm90dG9tID0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0
b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICBmbG9hdEJvdHRvbSA9
IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgICAgIGlmIChmbG9h
dEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAgICBib3R0b20gPSBtaW4oZmxvYXRC
b3R0b20sIGJvdHRvbSk7CiAgICAgfQpAQCAtMjA1NSw3ICsyMDU1LDcgQEAgTGF5b3V0VW5pdCBS
ZW5kZXJCbG9ja0Zsb3c6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6
VHlwZSBmbG9hdFQKICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2Jq
ZWN0ID0gaXQtPmdldCgpOwogICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmlzUGxhY2VkKCkg
JiYgZmxvYXRpbmdPYmplY3QtPnR5cGUoKSAmIGZsb2F0VHlwZSkKLSAgICAgICAgICAgIGxvd2Vz
dEZsb2F0Qm90dG9tID0gbWF4KGxvd2VzdEZsb2F0Qm90dG9tLCBmbG9hdGluZ09iamVjdC0+bG9n
aWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSk7CisgICAgICAgICAgICBsb3dl
c3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZs
b2F0KGZsb2F0aW5nT2JqZWN0KSk7CiAgICAgfQogICAgIHJldHVybiBsb3dlc3RGbG9hdEJvdHRv
bTsKIH0KQEAgLTIwNzUsOCArMjA3NSw4IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojph
ZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9ja0Zsb3cqIGNoaWxkLCBib29sIG1hCiAgICAg
YXV0byBjaGlsZEVuZCA9IGNoaWxkLT5tX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuZW5kKCk7CiAg
ICAgZm9yIChhdXRvIGNoaWxkSXQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmJl
Z2luKCk7IGNoaWxkSXQgIT0gY2hpbGRFbmQ7ICsrY2hpbGRJdCkgewogICAgICAgICBGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBjaGlsZEl0LT5nZXQoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsQm90dG9tRm9yRmxvYXQgPSBtaW4oZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxC
b3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIExheW91dFVuaXQ6Om1heCgpIC0gY2hp
bGRMb2dpY2FsVG9wKTsKLSAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gY2hpbGRM
b2dpY2FsVG9wICsgbG9naWNhbEJvdHRvbUZvckZsb2F0OworICAgICAgICBMYXlvdXRVbml0IGZs
b2F0TG9naWNhbEJvdHRvbSA9IG1pbihsb2dpY2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdPYmpl
Y3QpLCBMYXlvdXRVbml0OjptYXgoKSAtIGNoaWxkTG9naWNhbFRvcCk7CisgICAgICAgIExheW91
dFVuaXQgbG9naWNhbEJvdHRvbSA9IGNoaWxkTG9naWNhbFRvcCArIGZsb2F0TG9naWNhbEJvdHRv
bTsKICAgICAgICAgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gbWF4KGxvd2VzdEZsb2F0TG9n
aWNhbEJvdHRvbSwgbG9naWNhbEJvdHRvbSk7CiAKICAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b20g
PiBsb2dpY2FsSGVpZ2h0KCkpIHsKQEAgLTIxMjksNyArMjEyOSw3IEBAIGJvb2wgUmVuZGVyQmxv
Y2tGbG93OjpoYXNPdmVyaGFuZ2luZ0Zsb2F0KFJlbmRlckJveCogcmVuZGVyZXIpCiAgICAgaWYg
KGl0ID09IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gKCppdCktPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkgPiBsb2dpY2FsSGVpZ2h0KCk7CisgICAgcmV0dXJuIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChp
dC0+Z2V0KCkpID4gbG9naWNhbEhlaWdodCgpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6
YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrRmxvdyogcHJldiwgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0KQpAQCAtMjE0Niw3ICsy
MTQ2LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW5kZXJC
bG9ja0Zsb3cqIHByZXYsIExheW91dFVuaXQgbG9naWMKICAgICBhdXRvIHByZXZFbmQgPSBwcmV2
U2V0LmVuZCgpOwogICAgIGZvciAoYXV0byBwcmV2SXQgPSBwcmV2U2V0LmJlZ2luKCk7IHByZXZJ
dCAhPSBwcmV2RW5kOyArK3ByZXZJdCkgewogICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRp
bmdPYmplY3QgPSBwcmV2SXQtPmdldCgpOwotICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3QtPmxv
Z2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPiBsb2dpY2FsVG9wT2Zmc2V0
KSB7CisgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpID4g
bG9naWNhbFRvcE9mZnNldCkgewogICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8
fCAhbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zPEZsb2F0aW5nT2JqZWN0JiwgRmxv
YXRpbmdPYmplY3RIYXNoVHJhbnNsYXRvcj4oKmZsb2F0aW5nT2JqZWN0KSkgewogICAgICAgICAg
ICAgICAgIC8vIFdlIGNyZWF0ZSB0aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgbGF6aWx5LgogICAg
ICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggZjkwY2U2ZDE3MzE1NWM0NzEyMjY0NzI4YzNh
NWM4NDA4MjVmNWY5ZC4uNDZmNTIxZmM3ZDZjMzJhZWRhZTMzNGU2N2QxMTZjZGYzYjhkZTFlOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaApAQCAtMjQ0LDYg
KzI0NCw0OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQWxsRGVzY2VuZGFudHNXaXRoRmxvYXRz
Rm9yTGF5b3V0KFJlbmRlckJveCogZmxvYXRUb1JlbW92ZSA9IDAsIGJvb2wgaW5MYXlvdXQgPSB0
cnVlKTsKICAgICB2b2lkIG1hcmtTaWJsaW5nc1dpdGhGbG9hdHNGb3JMYXlvdXQoUmVuZGVyQm94
KiBmbG9hdFRvUmVtb3ZlID0gMCk7CiAKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JGbG9h
dChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdGluZ09iamVjdC0+eSgpIDogZmxvYXRpbmdP
YmplY3QtPngoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckZsb2F0KGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGZsb2F0aW5nT2JqZWN0LT5tYXhZKCkgOiBmbG9hdGluZ09iamVj
dC0+bWF4WCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdEZvckZsb2F0KGNvbnN0IEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSA/IGZsb2F0aW5nT2JqZWN0LT54KCkgOiBmbG9hdGluZ09iamVjdC0+eSgp
OyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBmbG9hdGluZ09iamVjdC0+bWF4WCgpIDogZmxvYXRpbmdPYmplY3QtPm1heFkoKTsg
fQorICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmpl
Y3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gZmxvYXRpbmdPYmplY3QtPndpZHRoKCkgOiBmbG9hdGluZ09iamVjdC0+aGVpZ2h0KCk7
IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBmbG9hdGluZ09iamVjdC0+aGVpZ2h0KCkgOiBmbG9hdGluZ09iamVjdC0+d2lkdGgo
KTsgfQorICAgIExheW91dFNpemUgbG9naWNhbFNpemVGb3JGbG9hdChjb25zdCBGbG9hdGluZ09i
amVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkgPyBMYXlvdXRTaXplKGZsb2F0aW5nT2JqZWN0LT53aWR0aCgpLCBmbG9hdGluZ09iamVj
dC0+aGVpZ2h0KCkpIDogTGF5b3V0U2l6ZShmbG9hdGluZ09iamVjdC0+aGVpZ2h0KCksIGZsb2F0
aW5nT2JqZWN0LT53aWR0aCgpKTsgfQorCisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxUb3BG
b3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0
dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0
KCkucGl4ZWxTbmFwcGVkWSgpIDogZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnBpeGVsU25h
cHBlZFgoKTsgfQorICAgIGludCBwaXhlbFNuYXBwZWRMb2dpY2FsQm90dG9tRm9yRmxvYXQoY29u
c3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnBpeGVsU25h
cHBlZE1heFkoKSA6IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhY
KCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkWCgp
IDogZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFkoKTsgfQorICAgIGlu
dCBwaXhlbFNuYXBwZWRMb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCog
ZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkucGl4ZWxTbmFwcGVkTWF4WCgpIDogZmxvYXRp
bmdPYmplY3QtPmZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZE1heFkoKTsgfQorCisgICAgdm9pZCBz
ZXRMb2dpY2FsVG9wRm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlv
dXRVbml0IGxvZ2ljYWxUb3ApCisgICAgeworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkKKyAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRZKGxvZ2ljYWxUb3ApOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0WChsb2dpY2FsVG9w
KTsKKyAgICB9CisgICAgdm9pZCBzZXRMb2dpY2FsTGVmdEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0
KiBmbG9hdGluZ09iamVjdCwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCkKKyAgICB7CisgICAgICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAgZmxvYXRpbmdPYmpl
Y3QtPnNldFgobG9naWNhbExlZnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmbG9hdGlu
Z09iamVjdC0+c2V0WShsb2dpY2FsTGVmdCk7CisgICAgfQorICAgIHZvaWQgc2V0TG9naWNhbEhl
aWdodEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCwgTGF5b3V0VW5pdCBs
b2dpY2FsSGVpZ2h0KQorICAgIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCisgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SGVpZ2h0KGxvZ2ljYWxIZWlnaHQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0V2lkdGgobG9n
aWNhbEhlaWdodCk7CisgICAgfQorICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yRmxvYXQoRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKKyAg
ICB7CisgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQorICAgICAgICAgICAg
ZmxvYXRpbmdPYmplY3QtPnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRIZWlnaHQobG9naWNhbFdpZHRoKTsKKyAgICB9
CisKIHByb3RlY3RlZDoKICAgICBMYXlvdXRVbml0IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2
ZU1hcmdpbkJlZm9yZSgpIDogUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6OnBvc2l0aXZlTWFyZ2lu
QmVmb3JlRGVmYXVsdCh0aGlzKTsgfQogICAgIExheW91dFVuaXQgbWF4TmVnYXRpdmVNYXJnaW5C
ZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5z
Lm5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgOiBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YTo6bmVnYXRp
dmVNYXJnaW5CZWZvcmVEZWZhdWx0KHRoaXMpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCmluZGV4IDBjNjUyOTE0NWUwYjg0M2I5
YTZiMGYxYzY2OWM1NGI0OTRjZWFmYTguLjdjMTRjY2FhNGE1OWVjYzQ1MmE4NTk4OGYzMWIyNzg1
ZDg0YmMwODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCkBAIC0xNDgyLDcgKzE0ODIsNyBAQCBib29sIFJlbmRlckJsb2NrRmxv
dzo6YWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVpZ2h0SWZOZWVkZWQoU2hhcGVJbnNp
ZGVJbgogCiAgICAgaWYgKHNoYXBlSW5zaWRlSW5mbyAmJiAhd29yZE1lYXN1cmVtZW50cy5zaXpl
KCkgJiYgY29udGFpbnNGbG9hdHMoKSkgewogICAgICAgICBsYXN0RmxvYXRGcm9tUHJldmlvdXNM
aW5lID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmxhc3QoKS5nZXQoKTsKLSAgICAgICAgTGF5
b3V0VW5pdCBmbG9hdExvZ2ljYWxUb3BPZmZzZXQgPSBzaGFwZUluc2lkZUluZm8tPmNvbXB1dGVG
aXJzdEZpdFBvc2l0aW9uRm9yRmxvYXQobGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZS0+bG9naWNh
bFNpemUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICBMYXlvdXRVbml0IGZs
b2F0TG9naWNhbFRvcE9mZnNldCA9IHNoYXBlSW5zaWRlSW5mby0+Y29tcHV0ZUZpcnN0Rml0UG9z
aXRpb25Gb3JGbG9hdChsb2dpY2FsU2l6ZUZvckZsb2F0KGxhc3RGbG9hdEZyb21QcmV2aW91c0xp
bmUpKTsKICAgICAgICAgaWYgKGxvZ2ljYWxIZWlnaHQoKSA8IGZsb2F0TG9naWNhbFRvcE9mZnNl
dCkKICAgICAgICAgICAgIGFkanVzdGVkTG9naWNhbExpbmVUb3AgPSBmbG9hdExvZ2ljYWxUb3BP
ZmZzZXQ7CiAgICAgfQpAQCAtMjE1NCw4ICsyMTU0LDggQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6
OmNoZWNrUGFnaW5hdGlvbkFuZEZsb2F0c0F0RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91
dFMKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zs
b2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5l
bmQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSBpdC0+Z2V0KCk7Ci0g
ICAgICAgIGlmIChmLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID49
IGxvZ2ljYWxUb3AgJiYgZi0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSA8IGxvZ2ljYWxCb3R0b20pCisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dCA9IGl0LT5nZXQoKTsKKyAgICAgICAgaWYgKGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGlu
Z09iamVjdCkgPj0gbG9naWNhbFRvcCAmJiBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdP
YmplY3QpIDwgbG9naWNhbEJvdHRvbSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKQEAgLTI2NjgsOCArMjY2OCw4IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVNlZ21lbnRzRm9yU2hh
cGVzKFJlbmRlckJsb2NrRmxvdyogYmxvY2ssIGNvbnN0IEZsb2F0aW5nT2JqZWN0CiAgICAgTGF5
b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdodCA9IGJsb2NrLT5saW5lSGVpZ2h0KGlzRmlyc3RMaW5l
LCBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5l
LCBQb3NpdGlvbk9mSW50ZXJpb3JMaW5lQm94ZXMpOwogICAgIExheW91dFVuaXQgbGluZUxvZ2lj
YWxCb3R0b20gPSBsaW5lTG9naWNhbFRvcCArIGxpbmVMb2dpY2FsSGVpZ2h0OwogCi0gICAgTGF5
b3V0VW5pdCBmbG9hdExvZ2ljYWxUb3AgPSBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLT5sb2dp
Y2FsVG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKTsKLSAgICBMYXlvdXRVbml0IGZsb2F0TG9n
aWNhbEJvdHRvbSA9IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUtPmxvZ2ljYWxCb3R0b20oaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUpOworICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsVG9wID0g
YmxvY2stPmxvZ2ljYWxUb3BGb3JGbG9hdChsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKyAg
ICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbEJvdHRvbSA9IGJsb2NrLT5sb2dpY2FsQm90dG9tRm9y
RmxvYXQobGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSk7CiAKICAgICBib29sIGxpbmVPdmVybGFw
c1dpdGhGbG9hdCA9IChmbG9hdExvZ2ljYWxUb3AgPCBsaW5lTG9naWNhbEJvdHRvbSkgJiYgKGxp
bmVMb2dpY2FsVG9wIDwgZmxvYXRMb2dpY2FsQm90dG9tKTsKICAgICBpZiAoIWxpbmVPdmVybGFw
c1dpdGhGbG9hdCkKQEAgLTI2NzcsOCArMjY3Nyw4IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVNlZ21l
bnRzRm9yU2hhcGVzKFJlbmRlckJsb2NrRmxvdyogYmxvY2ssIGNvbnN0IEZsb2F0aW5nT2JqZWN0
CiAKICAgICBmbG9hdCBtaW5TZWdtZW50V2lkdGggPSBmaXJzdFBvc2l0aXZlV2lkdGgod29yZE1l
YXN1cmVtZW50cyk7CiAKLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoID0gbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZS0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KTsKLSAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGJsb2NrLT5sb2dpY2Fs
V2lkdGgoKSAtIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUtPmxvZ2ljYWxSaWdodChpc0hvcml6
b250YWxXcml0aW5nTW9kZSk7CisgICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCA9IGJs
b2NrLT5sb2dpY2FsV2lkdGhGb3JGbG9hdChsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKyAg
ICBMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGJsb2NrLT5sb2dpY2FsV2lkdGgo
KSAtIGJsb2NrLT5sb2dpY2FsUmlnaHRGb3JGbG9hdChsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5l
KTsKICAgICBpZiAoYXZhaWxhYmxlTG9naWNhbFdpZHRoIDwgbWluU2VnbWVudFdpZHRoKQogICAg
ICAgICBibG9jay0+c2V0TG9naWNhbEhlaWdodChmbG9hdExvZ2ljYWxCb3R0b20pOwogCkBAIC0y
ODI5LDcgKzI4MjksNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRC
cmVhayhJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBMaW5lSQogICAgICAgICAgICAgLy8g
SWYgaXQgZG9lcywgcG9zaXRpb24gaXQgbm93LCBvdGhlcndpc2UsIHBvc2l0aW9uCiAgICAgICAg
ICAgICAvLyBpdCBhZnRlciBtb3ZpbmcgdG8gbmV4dCBsaW5lIChpbiBuZXdMaW5lKCkgZnVuYykK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBCdWcgMTEwMzcyOiBQcm9wZXJseSBwb3NpdGlvbiBtdWx0
aXBsZSBzdGFja2VkIGZsb2F0cyB3aXRoIG5vbi1yZWN0YW5ndWxhciBzaGFwZSBvdXRzaWRlLgot
ICAgICAgICAgICAgaWYgKGZsb2F0c0ZpdE9uTGluZSAmJiB3aWR0aC5maXRzT25MaW5lRXhjbHVk
aW5nVHJhaWxpbmdXaGl0ZXNwYWNlKGYtPmxvZ2ljYWxXaWR0aChtX2Jsb2NrLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKSkpIHsKKyAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYg
d2lkdGguZml0c09uTGluZUV4Y2x1ZGluZ1RyYWlsaW5nV2hpdGVzcGFjZShtX2Jsb2NrLT5sb2dp
Y2FsV2lkdGhGb3JGbG9hdChmKSkpIHsKICAgICAgICAgICAgICAgICBtX2Jsb2NrLT5wb3NpdGlv
bk5ld0Zsb2F0T25MaW5lKGYsIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIGxpbmVJbmZvLCB3
aWR0aCk7CiAgICAgICAgICAgICAgICAgaWYgKGxCcmVhay5tX29iaiA9PSBjdXJyZW50Lm1fb2Jq
KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbEJyZWFrLm1fcG9zKTsKQEAgLTM0NDMs
NyArMzQ0Myw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0T25MaW5l
KEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdCwgRmxvYXRpbmdPCiAgICAgY29uc3QgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwog
ICAgIEFTU0VSVChmbG9hdGluZ09iamVjdFNldC5sYXN0KCkuZ2V0KCkgPT0gbmV3RmxvYXQpOwog
Ci0gICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxUb3AgPSBuZXdGbG9hdC0+bG9naWNhbFRvcChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFRv
cCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChuZXdGbG9hdCk7CiAgICAgaW50IHBhZ2luYXRpb25TdHJ1
dCA9IG5ld0Zsb2F0LT5wYWdpbmF0aW9uU3RydXQoKTsKIAogICAgIGlmIChmbG9hdExvZ2ljYWxU
b3AgLSBwYWdpbmF0aW9uU3RydXQgIT0gbG9naWNhbEhlaWdodCgpICsgbGluZUluZm8uZmxvYXRQ
YWdpbmF0aW9uU3RydXQoKSkKQEAgLTM0NTQsMjIgKzM0NTQsMjIgQEAgYm9vbCBSZW5kZXJCbG9j
a0Zsb3c6OnBvc2l0aW9uTmV3RmxvYXRPbkxpbmUoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0LCBG
bG9hdGluZ08KICAgICBhdXRvIGJlZ2luID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsKICAg
ICB3aGlsZSAoaXQgIT0gYmVnaW4pIHsKICAgICAgICAgLS1pdDsKLSAgICAgICAgRmxvYXRpbmdP
YmplY3QqIGYgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIGlmIChmID09IGxhc3RGbG9hdEZyb21QcmV2
aW91c0xpbmUpCisgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGl0LT5n
ZXQoKTsKKyAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0ID09IGxhc3RGbG9hdEZyb21QcmV2aW91
c0xpbmUpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGYtPmxvZ2ljYWxUb3AoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkgPT0gbG9naWNhbEhlaWdodCgpICsgbGluZUluZm8uZmxv
YXRQYWdpbmF0aW9uU3RydXQoKSkgewotICAgICAgICAgICAgZi0+c2V0UGFnaW5hdGlvblN0cnV0
KHBhZ2luYXRpb25TdHJ1dCArIGYtPnBhZ2luYXRpb25TdHJ1dCgpKTsKLSAgICAgICAgICAgIFJl
bmRlckJveCogbyA9ICZmLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgc2V0TG9naWNhbFRvcEZv
ckNoaWxkKG8sIGxvZ2ljYWxUb3BGb3JDaGlsZChvKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKG8p
ICsgcGFnaW5hdGlvblN0cnV0KTsKLSAgICAgICAgICAgIGlmIChvLT5pc1JlbmRlckJsb2NrKCkp
Ci0gICAgICAgICAgICAgICAgdG9SZW5kZXJCbG9jayhvKS0+c2V0Q2hpbGROZWVkc0xheW91dChN
YXJrT25seVRoaXMpOwotICAgICAgICAgICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKKyAgICAgICAg
aWYgKGxvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCkgPT0gbG9naWNhbEhlaWdodCgp
ICsgbGluZUluZm8uZmxvYXRQYWdpbmF0aW9uU3RydXQoKSkgeworICAgICAgICAgICAgZmxvYXRp
bmdPYmplY3QtPnNldFBhZ2luYXRpb25TdHJ1dChwYWdpbmF0aW9uU3RydXQgKyBmbG9hdGluZ09i
amVjdC0+cGFnaW5hdGlvblN0cnV0KCkpOworICAgICAgICAgICAgUmVuZGVyQm94KiBmbG9hdEJv
eCA9ICZmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKTsKKyAgICAgICAgICAgIHNldExvZ2ljYWxU
b3BGb3JDaGlsZChmbG9hdEJveCwgbG9naWNhbFRvcEZvckNoaWxkKGZsb2F0Qm94KSArIG1hcmdp
bkJlZm9yZUZvckNoaWxkKGZsb2F0Qm94KSArIHBhZ2luYXRpb25TdHJ1dCk7CisgICAgICAgICAg
ICBpZiAoZmxvYXRCb3gtPmlzUmVuZGVyQmxvY2soKSkKKyAgICAgICAgICAgICAgICB0b1JlbmRl
ckJsb2NrKGZsb2F0Qm94KS0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOworICAg
ICAgICAgICAgZmxvYXRCb3gtPmxheW91dElmTmVlZGVkKCk7CiAgICAgICAgICAgICAvLyBTYXZl
IHRoZSBvbGQgbG9naWNhbCB0b3AgYmVmb3JlIGNhbGxpbmcgcmVtb3ZlUGxhY2VkT2JqZWN0IHdo
aWNoIHdpbGwgc2V0CiAgICAgICAgICAgICAvLyBpc1BsYWNlZCB0byBmYWxzZS4gT3RoZXJ3aXNl
IGl0IHdpbGwgdHJpZ2dlciBhbiBhc3NlcnQgaW4gbG9naWNhbFRvcEZvckZsb2F0LgotICAgICAg
ICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsVG9wID0gZi0+bG9naWNhbFRvcChpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpKTsKLSAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5yZW1vdmVQ
bGFjZWRPYmplY3QoZik7Ci0gICAgICAgICAgICBmLT5zZXRMb2dpY2FsVG9wKG9sZExvZ2ljYWxU
b3AgKyBwYWdpbmF0aW9uU3RydXQsIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAg
ICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmKTsKKyAgICAgICAgICAg
IExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JGbG9hdChmbG9hdGluZ09i
amVjdCk7CisgICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlUGxhY2VkT2JqZWN0
KGZsb2F0aW5nT2JqZWN0KTsKKyAgICAgICAgICAgIHNldExvZ2ljYWxUb3BGb3JGbG9hdChmbG9h
dGluZ09iamVjdCwgb2xkTG9naWNhbFRvcCArIHBhZ2luYXRpb25TdHJ1dCk7CisgICAgICAgICAg
ICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0KTsKICAg
ICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZU91dHNpZGVJbmZvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAKaW5kZXggODYzOWY3NmFiNTQ1MjVhOTIwYzg1MjNmODk0
NjI1Y2I2NTg4MDU3NS4uOWFjOTFmY2M5M2M2NzYyNzg2OWIyMGE2YmRjMmIxYWUzMDkzMjBjNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZU91dHNpZGVJ
bmZvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lk
ZUluZm8uY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiU2hhcGVPdXRzaWRlSW5mby5o
IgogCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2su
aCIKKyNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTQsOSArNTQsOSBAQCBib29sIFNoYXBlT3V0c2lk
ZUluZm86OmlzRW5hYmxlZEZvcihjb25zdCBSZW5kZXJCb3gqIGJveCkKICAgICB9CiB9CiAKLXZv
aWQgU2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVsdGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShj
b25zdCBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBjb25zdCBGbG9hdGluZ09iamVjdCog
ZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0
KQordm9pZCBTaGFwZU91dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tM
aW5lKGNvbnN0IFJlbmRlckJsb2NrRmxvdyogY29udGFpbmluZ0Jsb2NrLCBjb25zdCBGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0KQogewotICAgIExheW91dFVuaXQgc2hhcGVUb3AgPSBmbG9hdGluZ09iamVjdC0+
bG9naWNhbFRvcChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICsg
c3RkOjptYXgoTGF5b3V0VW5pdCgpLCBjb250YWluaW5nQmxvY2stPm1hcmdpbkJlZm9yZUZvckNo
aWxkKG1fcmVuZGVyZXIpKTsKKyAgICBMYXlvdXRVbml0IHNoYXBlVG9wID0gY29udGFpbmluZ0Js
b2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpICsgc3RkOjptYXgoTGF5b3V0
VW5pdCgpLCBjb250YWluaW5nQmxvY2stPm1hcmdpbkJlZm9yZUZvckNoaWxkKG1fcmVuZGVyZXIp
KTsKICAgICBMYXlvdXRVbml0IGxpbmVUb3BJblNoYXBlQ29vcmRpbmF0ZXMgPSBsaW5lVG9wIC0g
c2hhcGVUb3AgKyBsb2dpY2FsVG9wT2Zmc2V0KCk7CiAKICAgICBpZiAoc2hhcGVTaXplRGlydHko
KSB8fCBtX2xpbmVUb3AgIT0gbGluZVRvcEluU2hhcGVDb29yZGluYXRlcyB8fCBtX2xpbmVIZWln
aHQgIT0gbGluZUhlaWdodCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZU91dHNpZGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlT3V0c2lkZUluZm8uaAppbmRleCA2YTM5ZmE3YzQ5ODIyMzlkY2I2MDlkOWU0MDc3
MjY3YjRlODdmMzM4Li41MzIwZWM5Y2M5YzBhZGRkZmEzYTIzZDgzNTg4MGY3MzVmNmY3OGE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUlu
Zm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUlu
Zm8uaApAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJl
bmRlckJsb2NrOworY2xhc3MgUmVuZGVyQmxvY2tGbG93OwogY2xhc3MgUmVuZGVyQm94OwogY2xh
c3MgRmxvYXRpbmdPYmplY3Q7CiAKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIExheW91
dFVuaXQgbGVmdE1hcmdpbkJveERlbHRhKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0TWFyZ2luQm94
RGVsdGE7IH0KICAgICBMYXlvdXRVbml0IHJpZ2h0TWFyZ2luQm94RGVsdGEoKSBjb25zdCB7IHJl
dHVybiBtX3JpZ2h0TWFyZ2luQm94RGVsdGE7IH0KIAotICAgIHZvaWQgdXBkYXRlRGVsdGFzRm9y
Q29udGFpbmluZ0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9jayosIGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0KiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVIZWlnaHQpOworICAgIHZv
aWQgdXBkYXRlRGVsdGFzRm9yQ29udGFpbmluZ0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9ja0Zs
b3cqLCBjb25zdCBGbG9hdGluZ09iamVjdCosIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lSGVpZ2h0KTsKIAogICAgIHN0YXRpYyBQYXNzT3duUHRyPFNoYXBlT3V0c2lkZUluZm8+
IGNyZWF0ZUluZm8oY29uc3QgUmVuZGVyQm94KiByZW5kZXJlcikgeyByZXR1cm4gYWRvcHRQdHIo
bmV3IFNoYXBlT3V0c2lkZUluZm8ocmVuZGVyZXIpKTsgfQogICAgIHN0YXRpYyBib29sIGlzRW5h
YmxlZEZvcihjb25zdCBSZW5kZXJCb3gqKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213833</attachid>
            <date>2013-10-09 16:43:20 -0700</date>
            <delta_ts>2013-10-09 17:34:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122282-20131009164319.patch</filename>
            <type>text/plain</type>
            <size>42434</size>
            <attacher name="Bem Jones-Bey">bjonesbe</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTU3MTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjBjMWJjNGNjMzI3M2Yx
NzhkMjJlMTUxMjliNTQyZWJiYmNiZWU4MS4uZTQzMTA3YTFiMzFjNWRmY2Y1MjhlNGEwODgxZWU3
NmY1MDE1NTQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDc3IEBACiAyMDEzLTEwLTA5ICBCZW0g
Sm9uZXMtQmV5ICA8YmpvbmVzYmVAYWRvYmUuY29tPgogCisgICAgICAgIE1vdmUgZmxvYXQgbG9n
aWNhbCBsb2NhdGlvbi9kaW1lbnNpb24gbWV0aG9kcyB0byBSZW5kZXJCbG9ja0Zsb3cKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjI4MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgorCisgICAgICAgIEkgcmVjZW50bHkgbW92ZWQg
dGhlIGxvZ2ljYWwgbG9jYXRpb24gYW5kIGRpbWVuc2lvbiBtZXRob2RzIGZyb20KKyAgICAgICAg
UmVuZGVyQmxvY2sgdG8gRmxvYXRpbmdPYmplY3QuIFRoaXMgbWFkZSBpdCBzbyB0aGF0IHRoZSBt
ZXRob2RzIG5lZWRlZAorICAgICAgICB0byB0YWtlIGluIHRoZSBob3Jpem9udGFsIHdyaXRpbmcg
bW9kZSBvZiB0aGUgRmxvYXRpbmdPYmplY3QncworICAgICAgICBjb250YWluZXIgaW4gb3JkZXIg
dG8gZG8gdGhlaXIgdGhpbmcuIFdoZW4gbG9va2luZyBpbnRvIGhvdyB0byBmaXgKKyAgICAgICAg
dGhpcywgSSBjYW1lIHRvIHVuZGVyc3RhbmQgd2h5IFJlbmRlckJsb2NrIGhhcyBtZXRob2RzIHRv
IGRldGVybWluZQorICAgICAgICB0aGUgbG9naWNhbCBsb2NhdGlvbiBhbmQgZGltZW5zaW9ucyBv
ZiBpdHMgY2hpbGRyZW4sIHdoZW4gdGhlIGNoaWxkcmVuCisgICAgICAgIHRoZW1zZWx2ZXMgaGF2
ZSB0aG9zZSBtZXRob2RzOiB0aGUgbWV0aG9kcyBvbiBSZW5kZXJCbG9jayBhcmUgZm9yCisgICAg
ICAgIGRldGVybWluaW5nIHRoZSBsb2dpY2FsIHZhbHVlIGluIHRoZSB3cml0aW5nIG1vZGUgb2Yg
dGhhdCBSZW5kZXJCbG9jaywKKyAgICAgICAgYW5kIHRoZSBtZXRob2Qgb24gdGhlIGNoaWxkIGlz
IGZvciBkZXRlcm1pbmluZyB0aGUgbG9naWNhbCB2YWx1ZSBpbgorICAgICAgICB0aGUgd3JpdGlu
ZyBtb2RlIG9mIHRoZSBjaGlsZC4KKworICAgICAgICBTaW5jZSB0aGUgZmxvYXRpbmcgb2JqZWN0
IGxpc3QgaGFzIG1vdmVkIGZyb20gUmVuZGVyQmxvY2sgdG8KKyAgICAgICAgUmVuZGVyQmxvY2tG
bG93LCB0aGlzIGNoYW5nZSBtb3ZlcyB0aGUgbG9naWNhbCBkaW1lbnNpb24gbWV0aG9kcyBmcm9t
CisgICAgICAgIEZsb2F0aW5nT2JqZWN0IHRvIFJlbmRlckJsb2NrRmxvdy4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIG5ldyBiZWhhdmlvci4KKworICAgICAgICAqIHJlbmRlcmluZy9GbG9h
dGluZ09iamVjdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRh
cHRlcjo6Q29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGbG9h
dGluZ09iamVjdHM6OkZsb2F0aW5nT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjo6OnVwZGF0
ZU9mZnNldElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29sbGVjdElmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Z2V0SGVpZ2h0UmVtYWluaW5nKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvRmxvYXRpbmdPYmplY3RzLmg6CisgICAgICAgICogcmVuZGVyaW5nL0xpbmVXaWR0aC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMaW5lV2lkdGg6OnNocmlua0F2YWlsYWJsZVdpZHRoRm9y
TmV3RmxvYXRJZk5lZWRlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNsZWFyRmxvYXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cmVwYWludE92ZXJoYW5naW5nRmxvYXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6aW5zZXJ0RmxvYXRpbmdPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpyZW1vdmVGbG9hdGluZ09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUZsb2F0aW5n
T2JqZWN0c0JlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0
ZUxvZ2ljYWxMb2NhdGlvbkZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6cG9zaXRpb25OZXdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tG
bG93OjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2tGbG93Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2tGbG93OjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6Omhhc092ZXJoYW5naW5nRmxvYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93OjphZGRJbnRydWRpbmdGbG9hdHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6bG9naWNhbFRvcEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6bG9naWNhbEJvdHRvbUZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6bG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9ja0Zsb3c6OmxvZ2ljYWxSaWdodEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrRmxvdzo6bG9naWNhbFdpZHRoRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2tGbG93Ojpsb2dpY2FsSGVpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsU2l6ZUZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6cGl4ZWxTbmFwcGVkTG9naWNhbFRvcEZvckZsb2F0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRvbUZv
ckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6cGl4ZWxTbmFwcGVk
TG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OnBpeGVsU25hcHBlZExvZ2ljYWxSaWdodEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6c2V0TG9naWNhbFRvcEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrRmxvdzo6c2V0TG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OnNldExvZ2ljYWxXaWR0aEZvckZsb2F0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRqdXN0TG9naWNhbExpbmVUb3BBbmRMb2dpY2FsSGVp
Z2h0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpjaGVja1Bh
Z2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlU2Vn
bWVudHNGb3JTaGFwZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUJyZWFrZXI6Om5leHRTZWdt
ZW50QnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5l
d0Zsb2F0T25MaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlT3V0c2lkZUlu
Zm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVsdGFz
Rm9yQ29udGFpbmluZ0Jsb2NrTGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZU91dHNpZGVJbmZvLmg6CisKKzIwMTMtMTAtMDkgIEJlbSBKb25lcy1CZXkgIDxiam9uZXNiZUBh
ZG9iZS5jb20+CisKICAgICAgICAgW0NTUyBTaGFwZXNdIExpbmVzIHRoYXQgZG9uJ3QgaW50ZXJz
ZWN0IHNoYXBlLW91dHNpZGUgc2hvdWxkIGlnbm9yZSBib3RoIGxlZnQgYW5kIHJpZ2h0IG1hcmdp
bnMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjU3
MAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3Rz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCmluZGV4
IDY4N2UzZTg0N2IwZjI1M2M3OWQ3OTRhZjdjYWIwZjhlZTdkMDY3YjAuLmE0YWRmZTE0MjMyYTk4
YWRhZjlkNzIwNzQ2ODdiMWJhMGVkODgwYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9GbG9hdGluZ09iamVjdHMuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCiAKLSNpbmNsdWRlICJSZW5kZXJCbG9j
ay5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIApAQCAtMTA1LDcgKzEwNSw3IEBAIGNsYXNzIENv
bXB1dGVGbG9hdE9mZnNldEFkYXB0ZXIgewogcHVibGljOgogICAgIHR5cGVkZWYgRmxvYXRpbmdP
YmplY3RJbnRlcnZhbCBJbnRlcnZhbFR5cGU7CiAKLSAgICBDb21wdXRlRmxvYXRPZmZzZXRBZGFw
dGVyKGNvbnN0IFJlbmRlckJsb2NrKiByZW5kZXJlciwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90
dG9tLCBMYXlvdXRVbml0JiBvZmZzZXQpCisgICAgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cqIHJlbmRlcmVyLCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0
b20sIExheW91dFVuaXQmIG9mZnNldCkKICAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQog
ICAgICAgICAsIG1fbGluZVRvcChsaW5lVG9wKQogICAgICAgICAsIG1fbGluZUJvdHRvbShsaW5l
Qm90dG9tKQpAQCAtMTMxLDE0ICsxMzEsMTQgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29s
IHVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0IEZsb2F0aW5nT2JqZWN0Kik7CiAKLSAgICBjb25z
dCBSZW5kZXJCbG9jayogbV9yZW5kZXJlcjsKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cqIG1f
cmVuZGVyZXI7CiAgICAgaW50IG1fbGluZVRvcDsKICAgICBpbnQgbV9saW5lQm90dG9tOwogICAg
IExheW91dFVuaXQmIG1fb2Zmc2V0OwogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBtX291dGVy
bW9zdEZsb2F0OwogfTsKIAotRmxvYXRpbmdPYmplY3RzOjpGbG9hdGluZ09iamVjdHMoY29uc3Qg
UmVuZGVyQmxvY2sqIHJlbmRlcmVyLCBib29sIGhvcml6b250YWxXcml0aW5nTW9kZSkKK0Zsb2F0
aW5nT2JqZWN0czo6RmxvYXRpbmdPYmplY3RzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyogcmVuZGVy
ZXIsIGJvb2wgaG9yaXpvbnRhbFdyaXRpbmdNb2RlKQogICAgIDogbV9wbGFjZWRGbG9hdHNUcmVl
KFVuaW5pdGlhbGl6ZWRUcmVlKQogICAgICwgbV9sZWZ0T2JqZWN0c0NvdW50KDApCiAgICAgLCBt
X3JpZ2h0T2JqZWN0c0NvdW50KDApCkBAIC0zNDgsNyArMzQ4LDcgQEAgaW5saW5lIHN0YXRpYyBi
b29sIHJhbmdlc0ludGVyc2VjdChpbnQgZmxvYXRUb3AsIGludCBmbG9hdEJvdHRvbSwgaW50IG9i
amVjdFRvcCwKIHRlbXBsYXRlPD4KIGlubGluZSBib29sIENvbXB1dGVGbG9hdE9mZnNldEFkYXB0
ZXI8RmxvYXRpbmdPYmplY3Q6OkZsb2F0TGVmdD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNvbnN0
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKIHsKLSAgICBMYXlvdXRVbml0IGxvZ2lj
YWxSaWdodCA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsUmlnaHQobV9yZW5kZXJlci0+aXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQgPSBtX3Jl
bmRlcmVyLT5sb2dpY2FsUmlnaHRGb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgaWYgKGxv
Z2ljYWxSaWdodCA+IG1fb2Zmc2V0KSB7CiAgICAgICAgIG1fb2Zmc2V0ID0gbG9naWNhbFJpZ2h0
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM1OSw3ICszNTksNyBAQCBpbmxpbmUgYm9vbCBD
b21wdXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0aW5nT2JqZWN0OjpGbG9hdExlZnQ+Ojp1cGRh
dGVPZmZzZXRJZgogdGVtcGxhdGU8PgogaW5saW5lIGJvb2wgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRh
cHRlcjxGbG9hdGluZ09iamVjdDo6RmxvYXRSaWdodD46OnVwZGF0ZU9mZnNldElmTmVlZGVkKGNv
bnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkKIHsKLSAgICBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0ID0gZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxMZWZ0KG1fcmVuZGVyZXItPmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBtX3Jl
bmRlcmVyLT5sb2dpY2FsTGVmdEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsKICAgICBpZiAobG9n
aWNhbExlZnQgPCBtX29mZnNldCkgewogICAgICAgICBtX29mZnNldCA9IGxvZ2ljYWxMZWZ0Owog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM3Niw3ICszNzYsNyBAQCBpbmxpbmUgdm9pZCBDb21w
dXRlRmxvYXRPZmZzZXRBZGFwdGVyPEZsb2F0VHlwZVZhbHVlPjo6Y29sbGVjdElmTmVlZGVkKGNv
bnN0IEludAogCiAgICAgLy8gQWxsIHRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gdGhlIHRyZWUg
c2hvdWxkIGJlIGFscmVhZHkgcGxhY2VkLgogICAgIEFTU0VSVChmbG9hdGluZ09iamVjdC0+aXNQ
bGFjZWQoKSk7Ci0gICAgQVNTRVJUKHJhbmdlc0ludGVyc2VjdChmbG9hdGluZ09iamVjdC0+cGl4
ZWxTbmFwcGVkTG9naWNhbFRvcChtX3JlbmRlcmVyLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KSwgZmxvYXRpbmdPYmplY3QtPnBpeGVsU25hcHBlZExvZ2ljYWxCb3R0b20obV9yZW5kZXJlci0+
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIG1fbGluZVRvcCwgbV9saW5lQm90dG9tKSk7Cisg
ICAgQVNTRVJUKHJhbmdlc0ludGVyc2VjdChtX3JlbmRlcmVyLT5waXhlbFNuYXBwZWRMb2dpY2Fs
VG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpLCBtX3JlbmRlcmVyLT5waXhlbFNuYXBwZWRMb2dp
Y2FsQm90dG9tRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpLCBtX2xpbmVUb3AsIG1fbGluZUJvdHRv
bSkpOwogCiAgICAgYm9vbCBmbG9hdElzTmV3RXh0cmVtZSA9IHVwZGF0ZU9mZnNldElmTmVlZGVk
KGZsb2F0aW5nT2JqZWN0KTsKICAgICBpZiAoZmxvYXRJc05ld0V4dHJlbWUpCkBAIC0zODYsNyAr
Mzg2LDcgQEAgaW5saW5lIHZvaWQgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRhcHRlcjxGbG9hdFR5cGVW
YWx1ZT46OmNvbGxlY3RJZk5lZWRlZChjb25zdCBJbnQKIHRlbXBsYXRlIDxGbG9hdGluZ09iamVj
dDo6VHlwZSBGbG9hdFR5cGVWYWx1ZT4KIExheW91dFVuaXQgQ29tcHV0ZUZsb2F0T2Zmc2V0QWRh
cHRlcjxGbG9hdFR5cGVWYWx1ZT46OmdldEhlaWdodFJlbWFpbmluZygpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fb3V0ZXJtb3N0RmxvYXQgPyBtX291dGVybW9zdEZsb2F0LT5sb2dpY2FsQm90dG9t
KG1fcmVuZGVyZXItPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIC0gbV9saW5lVG9wIDogTGF5
b3V0VW5pdCgxKTsKKyAgICByZXR1cm4gbV9vdXRlcm1vc3RGbG9hdCA/IG1fcmVuZGVyZXItPmxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChtX291dGVybW9zdEZsb2F0KSAtIG1fbGluZVRvcCA6IExheW91
dFVuaXQoMSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
RmxvYXRpbmdPYmplY3RzLmgKaW5kZXggY2JmMzhhY2FjNTJiNWExNzNkZDNlYTJjY2YxY2U4ZjU3
MTY5Y2UwMy4uYTcxY2NkYWNmMjM3MzkxMmFlMzk5NTQzOGQ5NzJiODY2NjA0MjA0NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb2F0aW5nT2JqZWN0cy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuaApAQCAtMzAsNyArMzAsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVu
ZGVyQmxvY2tGbG93OwogY2xhc3MgUmVuZGVyQm94OwogCiBlbnVtIFNoYXBlT3V0c2lkZUZsb2F0
T2Zmc2V0TW9kZSB7IFNoYXBlT3V0c2lkZUZsb2F0U2hhcGVPZmZzZXQsIFNoYXBlT3V0c2lkZUZs
b2F0TWFyZ2luQm94T2Zmc2V0IH07CkBAIC04Niw0OCArODYsNiBAQCBwdWJsaWM6CiAgICAgUm9v
dElubGluZUJveCogb3JpZ2luYXRpbmdMaW5lKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hdGlu
Z0xpbmU7IH0KICAgICB2b2lkIHNldE9yaWdpbmF0aW5nTGluZShSb290SW5saW5lQm94KiBsaW5l
KSB7IG1fb3JpZ2luYXRpbmdMaW5lID0gbGluZTsgfQogCi0gICAgTGF5b3V0VW5pdCBsb2dpY2Fs
VG9wKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlID8geSgpIDogeCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90
dG9tKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlID8gbWF4WSgpIDogbWF4WCgpOyB9Ci0gICAgTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25zdCB7IHJldHVybiBpc0hv
cml6b250YWxXcml0aW5nTW9kZSA/IHgoKSA6IHkoKTsgfQotICAgIExheW91dFVuaXQgbG9naWNh
bFJpZ2h0KGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlID8gbWF4WCgpIDogbWF4WSgpOyB9Ci0gICAgTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyB3aWR0aCgpIDogaGVpZ2h0KCk7IH0KLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3Qg
eyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBoZWlnaHQoKSA6IHdpZHRoKCk7IH0K
LSAgICBMYXlvdXRTaXplIGxvZ2ljYWxTaXplKGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUp
IGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlID8gTGF5b3V0U2l6ZSh3aWR0
aCgpLCBoZWlnaHQoKSkgOiBMYXlvdXRTaXplKGhlaWdodCgpLCB3aWR0aCgpKTsgfQotCi0gICAg
aW50IHBpeGVsU25hcHBlZExvZ2ljYWxUb3AoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkg
Y29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhl
bFNuYXBwZWRZKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRYKCk7IH0KLSAgICBpbnQgcGl4
ZWxTbmFwcGVkTG9naWNhbEJvdHRvbShib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25z
dCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVjdCgpLnBpeGVsU25h
cHBlZE1heFkoKSA6IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZE1heFgoKTsgfQotICAgIGludCBw
aXhlbFNuYXBwZWRMb2dpY2FsTGVmdChib29sIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKSBjb25z
dCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSA/IGZyYW1lUmVjdCgpLnBpeGVsU25h
cHBlZFgoKSA6IGZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZFkoKTsgfQotICAgIGludCBwaXhlbFNu
YXBwZWRMb2dpY2FsUmlnaHQoYm9vbCBpc0hvcml6b250YWxXcml0aW5nTW9kZSkgY29uc3QgeyBy
ZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRN
YXhYKCkgOiBmcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCk7IH0KLQotICAgIHZvaWQgc2V0
TG9naWNhbFRvcChMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUpCi0gICAgewotICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAg
ICAgICAgICBzZXRZKGxvZ2ljYWxUb3ApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRY
KGxvZ2ljYWxUb3ApOwotICAgIH0KLSAgICB2b2lkIHNldExvZ2ljYWxMZWZ0KExheW91dFVuaXQg
bG9naWNhbExlZnQsIGJvb2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgewotICAgICAg
ICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICBzZXRYKGxvZ2ljYWxM
ZWZ0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0WShsb2dpY2FsTGVmdCk7Ci0gICAg
fQotICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIGJv
b2wgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUpCi0gICAgewotICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUpCi0gICAgICAgICAgICBzZXRIZWlnaHQobG9naWNhbEhlaWdodCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldFdpZHRoKGxvZ2ljYWxIZWlnaHQpOwotICAgIH0K
LSAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBp
c0hvcml6b250YWxXcml0aW5nTW9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSkKLSAgICAgICAgICAgIHNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHNldEhlaWdodChsb2dpY2FsV2lkdGgpOwotICAgIH0KLQogcHJp
dmF0ZToKICAgICBSZW5kZXJCb3gmIG1fcmVuZGVyZXI7CiAgICAgUm9vdElubGluZUJveCogbV9v
cmlnaW5hdGluZ0xpbmU7CkBAIC0xNjgsNyArMTI2LDcgQEAgdHlwZWRlZiBIYXNoTWFwPFJlbmRl
ckJveCosIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4+IFJlbmRlcmVyVG9GbG9hdElu
Zm8KIGNsYXNzIEZsb2F0aW5nT2JqZWN0cyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmxv
YXRpbmdPYmplY3RzKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgRmxv
YXRpbmdPYmplY3RzKGNvbnN0IFJlbmRlckJsb2NrKiwgYm9vbCBob3Jpem9udGFsV3JpdGluZ01v
ZGUpOworICAgIEZsb2F0aW5nT2JqZWN0cyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cqLCBib29sIGhv
cml6b250YWxXcml0aW5nTW9kZSk7CiAgICAgfkZsb2F0aW5nT2JqZWN0cygpOwogCiAgICAgdm9p
ZCBjbGVhcigpOwpAQCAtMTk4LDcgKzE1Niw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9s
ZWZ0T2JqZWN0c0NvdW50OwogICAgIHVuc2lnbmVkIG1fcmlnaHRPYmplY3RzQ291bnQ7CiAgICAg
Ym9vbCBtX2hvcml6b250YWxXcml0aW5nTW9kZTsKLSAgICBjb25zdCBSZW5kZXJCbG9jayogbV9y
ZW5kZXJlcjsKKyAgICBjb25zdCBSZW5kZXJCbG9ja0Zsb3cqIG1fcmVuZGVyZXI7CiB9OwogCiAj
aWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xpbmVX
aWR0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdpZHRoLmNwcAppbmRleCBm
ZGNlYTdiYWFkMjlhZWM4MDI4ZGFkZjliYjI4OWU5MmNhYTdkY2UzLi43OTg3NTJjZjFjNDBlN2M3
YmIxYmYwYmVhMTcxYWI3ZjkwYTdmOTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvTGluZVdpZHRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGluZVdp
ZHRoLmNwcApAQCAtOTIsNyArOTIsNyBAQCB2b2lkIExpbmVXaWR0aDo6dXBkYXRlQXZhaWxhYmxl
V2lkdGgoTGF5b3V0VW5pdCByZXBsYWNlZEhlaWdodCkKIHZvaWQgTGluZVdpZHRoOjpzaHJpbmtB
dmFpbGFibGVXaWR0aEZvck5ld0Zsb2F0SWZOZWVkZWQoRmxvYXRpbmdPYmplY3QqIG5ld0Zsb2F0
KQogewogICAgIExheW91dFVuaXQgaGVpZ2h0ID0gbV9ibG9jay5sb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgaWYgKGhlaWdodCA8IG5ld0Zsb2F0LT5sb2dpY2FsVG9wKG1fYmxvY2suaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkgfHwgaGVpZ2h0ID49IG5ld0Zsb2F0LT5sb2dpY2FsQm90dG9tKG1fYmxv
Y2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpCisgICAgaWYgKGhlaWdodCA8IG1fYmxvY2su
bG9naWNhbFRvcEZvckZsb2F0KG5ld0Zsb2F0KSB8fCBoZWlnaHQgPj0gbV9ibG9jay5sb2dpY2Fs
Qm90dG9tRm9yRmxvYXQobmV3RmxvYXQpKQogICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIExpbmVXaWR0aDo6c2hyaW5rQXZh
aWxhYmxlV2lkdGhGb3JOZXdGbG9hdElmTmVlZGVkKEZsb2F0aW5nT2JqZWN0KiBuZXdGbG9hdAog
I2VuZGlmCiAKICAgICBpZiAobmV3RmxvYXQtPnR5cGUoKSA9PSBGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0KSB7Ci0gICAgICAgIGZsb2F0IG5ld0xlZnQgPSBuZXdGbG9hdC0+bG9naWNhbFJpZ2h0
KG1fYmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgIGZsb2F0IG5ld0xl
ZnQgPSBtX2Jsb2NrLmxvZ2ljYWxSaWdodEZvckZsb2F0KG5ld0Zsb2F0KTsKICNpZiBFTkFCTEUo
Q1NTX1NIQVBFUykKICAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKICAgICAg
ICAgICAgIG5ld0xlZnQgLT0gcHJldmlvdXNTaGFwZU91dHNpZGVJbmZvLT5yaWdodE1hcmdpbkJv
eERlbHRhKCk7CkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBMaW5lV2lkdGg6OnNocmlua0F2YWls
YWJsZVdpZHRoRm9yTmV3RmxvYXRJZk5lZWRlZChGbG9hdGluZ09iamVjdCogbmV3RmxvYXQKICAg
ICAgICAgICAgIG5ld0xlZnQgKz0gZmxvb3JUb0ludChtX2Jsb2NrLnRleHRJbmRlbnRPZmZzZXQo
KSk7CiAgICAgICAgIG1fbGVmdCA9IHN0ZDo6bWF4PGZsb2F0PihtX2xlZnQsIG5ld0xlZnQpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IG5ld1JpZ2h0ID0gbmV3RmxvYXQtPmxvZ2ljYWxM
ZWZ0KG1fYmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgIGZsb2F0IG5l
d1JpZ2h0ID0gbV9ibG9jay5sb2dpY2FsTGVmdEZvckZsb2F0KG5ld0Zsb2F0KTsKICNpZiBFTkFC
TEUoQ1NTX1NIQVBFUykKICAgICAgICAgaWYgKHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mbykKICAg
ICAgICAgICAgIG5ld1JpZ2h0IC09IHByZXZpb3VzU2hhcGVPdXRzaWRlSW5mby0+bGVmdE1hcmdp
bkJveERlbHRhKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwCmluZGV4IDFjZDZjNDY3YWViYThkNmM1MDk4MzMwZTgyYmFlYmU0OWVhYzE3YWQuLjgxYjM0
M2Q4YzFjOTA4NWNmMjFhZmVlMGIzNWYxODcwM2U5ZGQ5OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0xNzQsMTIgKzE3NCwxMiBAQCB2b2lk
IFJlbmRlckJsb2NrRmxvdzo6Y2xlYXJGbG9hdHMoKQogICAgICAgICAgICAgY29uc3QgRmxvYXRp
bmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgp
OwogICAgICAgICAgICAgYXV0byBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gaXQtPmdldCgp
OwotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG9hdGluZ09iamVjdD4gb2xkRmxv
YXRpbmdPYmplY3QgPSBmbG9hdE1hcC50YWtlKCZmLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAg
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBmLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCA9IGl0LT5nZXQoKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RmxvYXRpbmdPYmplY3Q+IG9sZEZsb2F0aW5nT2JqZWN0ID0gZmxvYXRNYXAudGFrZSgmZmxvYXRp
bmdPYmplY3QtPnJlbmRlcmVyKCkpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNh
bEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgICAg
ICAgICAgICAgaWYgKG9sZEZsb2F0aW5nT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgb2xkTG9naWNhbEJvdHRvbSA9IG9sZEZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90
dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Zi0+bG9naWNhbFdpZHRoKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICE9IG9sZEZsb2F0aW5n
T2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgfHwgZi0+bG9n
aWNhbExlZnQoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgIT0gb2xkRmxvYXRpbmdPYmplY3Qt
PmxvZ2ljYWxMZWZ0KGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9h
dChvbGRGbG9hdGluZ09iamVjdC5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb2dp
Y2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCkgIT0gbG9naWNhbFdpZHRoRm9yRmxvYXQo
b2xkRmxvYXRpbmdPYmplY3QuZ2V0KCkpIHx8IGxvZ2ljYWxMZWZ0Rm9yRmxvYXQoZmxvYXRpbmdP
YmplY3QpICE9IGxvZ2ljYWxMZWZ0Rm9yRmxvYXQob2xkRmxvYXRpbmdPYmplY3QuZ2V0KCkpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJv
dHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKQEAgLTE4Nyw4ICsxODcsOCBAQCB2b2lkIFJlbmRlckJsb2NrRmxv
dzo6Y2xlYXJGbG9hdHMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2lj
YWxUb3AgPSBtaW4oY2hhbmdlTG9naWNhbFRvcCwgbWluKGxvZ2ljYWxCb3R0b20sIG9sZExvZ2lj
YWxCb3R0b20pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsQm90
dG9tID0gbWF4KGNoYW5nZUxvZ2ljYWxCb3R0b20sIG1heChsb2dpY2FsQm90dG9tLCBvbGRMb2dp
Y2FsQm90dG9tKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSBmLT5sb2dpY2FsVG9wKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRM
b2dpY2FsVG9wID0gb2xkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxU
b3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOworICAgICAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsVG9wID0gbG9naWNhbFRvcEZvckZsb2F0KG9s
ZEZsb2F0aW5nT2JqZWN0LmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dp
Y2FsVG9wICE9IG9sZExvZ2ljYWxUb3ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VMb2dpY2FsVG9wID0gbWluKGNoYW5nZUxvZ2ljYWxUb3AsIG1pbihsb2dpY2FsVG9wLCBv
bGRMb2dpY2FsVG9wKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTG9naWNh
bEJvdHRvbSA9IG1heChjaGFuZ2VMb2dpY2FsQm90dG9tLCBtYXgobG9naWNhbFRvcCwgb2xkTG9n
aWNhbFRvcCkpOwpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjbGVh
ckZsb2F0cygpCiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBp
dC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIWZsb2F0aW5nT2JqZWN0LT5pc0Rlc2Nl
bmRhbnQoKSkgewogICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxUb3AgPSAwOwotICAgICAg
ICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwg
ZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkp
OworICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNh
bEJvdHRvbSwgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtMTYzMCw3ICsxNjMwLDcgQEAgdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyhib29sIHBhaW50QWxsRGVzY2VuZGFudHMp
CiAgICAgICAgIC8vIE9ubHkgcmVwYWludCB0aGUgb2JqZWN0IGlmIGl0IGlzIG92ZXJoYW5naW5n
LCBpcyBub3QgaW4gaXRzIG93biBsYXllciwgYW5kCiAgICAgICAgIC8vIGlzIG91ciByZXNwb25z
aWJpbGl0eSB0byBwYWludCAobV9zaG91bGRQYWludCBpcyBzZXQpLiBXaGVuIHBhaW50QWxsRGVz
Y2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgogICAgICAgICAvLyBjb25kaXRpb24gaXMgcmVw
bGFjZWQgd2l0aCBiZWluZyBhIGRlc2NlbmRhbnQgb2YgdXMuCi0gICAgICAgIGlmIChmbG9hdGlu
Z09iamVjdC0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSA+IGxvZ2lj
YWxIZWlnaHQoKQorICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2Jq
ZWN0KSA+IGxvZ2ljYWxIZWlnaHQoKQogICAgICAgICAgICAgJiYgIWZsb2F0aW5nT2JqZWN0LT5y
ZW5kZXJlcigpLmhhc1NlbGZQYWludGluZ0xheWVyKCkKICAgICAgICAgICAgICYmIChmbG9hdGlu
Z09iamVjdC0+c2hvdWxkUGFpbnQoKSB8fCAocGFpbnRBbGxEZXNjZW5kYW50cyAmJiBmbG9hdGlu
Z09iamVjdC0+cmVuZGVyZXIoKS5pc0Rlc2NlbmRhbnRPZih0aGlzKSkpKSB7CiAgICAgICAgICAg
ICBmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5yZXBhaW50KCk7CkBAIC0xNzMzLDcgKzE3MzMs
NyBAQCBGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2tGbG93OjppbnNlcnRGbG9hdGluZ09iamVj
dChSZW5kZXJCb3gqIGZsb2F0Qm94KQogICAgICAgICBmbG9hdEJveC0+Y29tcHV0ZUFuZFNldEJs
b2NrRGlyZWN0aW9uTWFyZ2lucyh0aGlzKTsKICAgICB9CiAKLSAgICBmbG9hdGluZ09iamVjdC0+
c2V0TG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aEZvckNoaWxkKGZsb2F0Qm94KSArIG1hcmdpblN0
YXJ0Rm9yQ2hpbGQoZmxvYXRCb3gpICsgbWFyZ2luRW5kRm9yQ2hpbGQoZmxvYXRCb3gpLCBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICBzZXRMb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9h
dGluZ09iamVjdC5nZXQoKSwgbG9naWNhbFdpZHRoRm9yQ2hpbGQoZmxvYXRCb3gpICsgbWFyZ2lu
U3RhcnRGb3JDaGlsZChmbG9hdEJveCkgKyBtYXJnaW5FbmRGb3JDaGlsZChmbG9hdEJveCkpOwog
CiAjaWYgRU5BQkxFKENTU19TSEFQRVMpCiAgICAgaWYgKFNoYXBlT3V0c2lkZUluZm8qIHNoYXBl
T3V0c2lkZSA9IGZsb2F0Qm94LT5zaGFwZU91dHNpZGVJbmZvKCkpCkBAIC0xNzUxLDggKzE3NTEs
OCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlRmxvYXRpbmdPYmplY3QoUmVuZGVyQm94
KiBmbG9hdEJveCkKICAgICAgICAgaWYgKGl0ICE9IGZsb2F0aW5nT2JqZWN0U2V0LmVuZCgpKSB7
CiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QgPSBpdC0+Z2V0KCk7
CiAgICAgICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkgewotICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcCA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsVG9wKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJv
dHRvbSA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGxvZ2ljYWxU
b3BGb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsKIAog
ICAgICAgICAgICAgICAgIC8vIEZpeCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU0OTk1LgogICAgICAgICAgICAgICAgIGlmIChsb2dpY2FsQm90dG9tIDwgMCB8
fCBsb2dpY2FsQm90dG9tIDwgbG9naWNhbFRvcCB8fCBsb2dpY2FsVG9wID09IExheW91dFVuaXQ6
Om1heCgpKQpAQCAtMTc4Niw3ICsxNzg2LDcgQEAgdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92
ZUZsb2F0aW5nT2JqZWN0c0JlbG93KEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQsIGludAogICAg
IAogICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICBGbG9hdGluZ09iamVjdCogY3VyciA9IGZsb2F0aW5n
T2JqZWN0U2V0Lmxhc3QoKS5nZXQoKTsKLSAgICB3aGlsZSAoY3VyciAhPSBsYXN0RmxvYXQgJiYg
KCFjdXJyLT5pc1BsYWNlZCgpIHx8IGN1cnItPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgPj0gbG9naWNhbE9mZnNldCkpIHsKKyAgICB3aGlsZSAoY3VyciAhPSBsYXN0Rmxv
YXQgJiYgKCFjdXJyLT5pc1BsYWNlZCgpIHx8IGxvZ2ljYWxUb3BGb3JGbG9hdChjdXJyKSA+PSBs
b2dpY2FsT2Zmc2V0KSkgewogICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+cmVtb3ZlKGN1cnIp
OwogICAgICAgICBpZiAoZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAg
YnJlYWs7CkBAIC0xODIxLDcgKzE4MjEsNyBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9ja0Zsb3c6
OmNvbXB1dGVMb2dpY2FsTG9jYXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdAogI2Vu
ZGlmCiAgICAgICAgIGxvZ2ljYWxSaWdodE9mZnNldCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckNv
bnRlbnQobG9naWNhbFRvcE9mZnNldCk7CiAKLSAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdp
ZHRoID0gbWluKGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSksIGxvZ2ljYWxSaWdodE9mZnNldCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsgLy8gVGhl
IHdpZHRoIHdlIGxvb2sgZm9yLgorICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsV2lkdGggPSBt
aW4obG9naWNhbFdpZHRoRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpLCBsb2dpY2FsUmlnaHRPZmZz
ZXQgLSBsb2dpY2FsTGVmdE9mZnNldCk7IC8vIFRoZSB3aWR0aCB3ZSBsb29rIGZvci4KIAogICAg
IExheW91dFVuaXQgZmxvYXRMb2dpY2FsTGVmdDsKIApAQCAtMTgzOCw3ICsxODM4LDcgQEAgTGF5
b3V0UG9pbnQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlTG9naWNhbExvY2F0aW9uRm9yRmxvYXQo
Y29uc3QgRmxvYXRpbmdPYmplY3QKICAgICAgICAgICAgICAgICAvLyBIYXZlIHRvIHJlLWV2YWx1
YXRlIGFsbCBvZiBvdXIgb2Zmc2V0cywgc2luY2UgdGhleSBtYXkgaGF2ZSBjaGFuZ2VkLgogICAg
ICAgICAgICAgICAgIGxvZ2ljYWxSaWdodE9mZnNldCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckNv
bnRlbnQobG9naWNhbFRvcE9mZnNldCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0
LgogICAgICAgICAgICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gbG9naWNhbExlZnRPZmZzZXRG
b3JDb250ZW50KGxvZ2ljYWxUb3BPZmZzZXQpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zm
c2V0LgotICAgICAgICAgICAgICAgIGZsb2F0TG9naWNhbFdpZHRoID0gbWluKGZsb2F0aW5nT2Jq
ZWN0LT5sb2dpY2FsV2lkdGgoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSksIGxvZ2ljYWxSaWdo
dE9mZnNldCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBmbG9hdExvZ2lj
YWxXaWR0aCA9IG1pbihsb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCksIGxvZ2lj
YWxSaWdodE9mZnNldCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbWF4KGxvZ2ljYWxMZWZ0T2Zmc2V0IC0g
Ym9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxMZWZ0KCksIGZsb2F0TG9naWNhbExlZnQpOwpAQCAtMTg1
MywxMyArMTg1MywxMyBAQCBMYXlvdXRQb2ludCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVMb2dp
Y2FsTG9jYXRpb25Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdAogICAgICAgICAgICAgICAg
IC8vIEhhdmUgdG8gcmUtZXZhbHVhdGUgYWxsIG9mIG91ciBvZmZzZXRzLCBzaW5jZSB0aGV5IG1h
eSBoYXZlIGNoYW5nZWQuCiAgICAgICAgICAgICAgICAgbG9naWNhbFJpZ2h0T2Zmc2V0ID0gbG9n
aWNhbFJpZ2h0T2Zmc2V0Rm9yQ29udGVudChsb2dpY2FsVG9wT2Zmc2V0KTsgLy8gQ29uc3RhbnQg
cGFydCBvZiByaWdodCBvZmZzZXQuCiAgICAgICAgICAgICAgICAgbG9naWNhbExlZnRPZmZzZXQg
PSBsb2dpY2FsTGVmdE9mZnNldEZvckNvbnRlbnQobG9naWNhbFRvcE9mZnNldCk7IC8vIENvbnN0
YW50IHBhcnQgb2YgbGVmdCBvZmZzZXQuCi0gICAgICAgICAgICAgICAgZmxvYXRMb2dpY2FsV2lk
dGggPSBtaW4oZmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxXaWR0aChpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKSwgbG9naWNhbFJpZ2h0T2Zmc2V0IC0gbG9naWNhbExlZnRPZmZzZXQpOworICAgICAg
ICAgICAgICAgIGZsb2F0TG9naWNhbFdpZHRoID0gbWluKGxvZ2ljYWxXaWR0aEZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0KSwgbG9naWNhbFJpZ2h0T2Zmc2V0IC0gbG9naWNhbExlZnRPZmZzZXQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgd2lk
dGggb2YgdGhlIGZsb2F0IGhlcmUsIHNpbmNlIHRoZSBsb2NhbCB2YXJpYWJsZQogICAgICAgICAv
LyB8ZmxvYXRMb2dpY2FsV2lkdGh8IHdhcyBjYXBwZWQgdG8gdGhlIGF2YWlsYWJsZSBsaW5lIHdp
ZHRoLiBTZWUKICAgICAgICAgLy8gZmFzdC9ibG9jay9mbG9hdC9jbGFtcGVkLXJpZ2h0LWZsb2F0
Lmh0bWwuCi0gICAgICAgIGZsb2F0TG9naWNhbExlZnQgLT0gZmxvYXRpbmdPYmplY3QtPmxvZ2lj
YWxXaWR0aChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgZmxvYXRMb2dpY2Fs
TGVmdCAtPSBsb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCk7CiAgICAgfQogICAg
IAogICAgIHJldHVybiBMYXlvdXRQb2ludChmbG9hdExvZ2ljYWxMZWZ0LCBsb2dpY2FsVG9wT2Zm
c2V0KTsKQEAgLTE4OTgsNyArMTg5OCw3IEBAIGJvb2wgUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlv
bk5ld0Zsb2F0cygpCiAgICAgCiAgICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0
aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBvc2l0aW9uZWQgZmxvYXQuCiAgICAgaWYgKGxh
c3RQbGFjZWRGbG9hdGluZ09iamVjdCkKLSAgICAgICAgbG9naWNhbFRvcCA9IG1heChsYXN0UGxh
Y2VkRmxvYXRpbmdPYmplY3QtPmxvZ2ljYWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSks
IGxvZ2ljYWxUb3ApOworICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvZ2ljYWxUb3BGb3JGbG9h
dChsYXN0UGxhY2VkRmxvYXRpbmdPYmplY3QpLCBsb2dpY2FsVG9wKTsKIAogICAgIGF1dG8gZW5k
ID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgLy8gTm93IHdhbGsgdGhyb3VnaCB0aGUg
c2V0IG9mIHVucG9zaXRpb25lZCBmbG9hdHMgYW5kIHBsYWNlIHRoZW0uCkBAIC0xOTIyLDcgKzE5
MjIsNyBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMoKQogCiAgICAg
ICAgIExheW91dFBvaW50IGZsb2F0TG9naWNhbExvY2F0aW9uID0gY29tcHV0ZUxvZ2ljYWxMb2Nh
dGlvbkZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBsb2dpY2FsVG9wKTsKIAotICAgICAgICBmbG9h
dGluZ09iamVjdC0+c2V0TG9naWNhbExlZnQoZmxvYXRMb2dpY2FsTG9jYXRpb24ueCgpLCBpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAgc2V0TG9naWNhbExlZnRGb3JGbG9hdChm
bG9hdGluZ09iamVjdCwgZmxvYXRMb2dpY2FsTG9jYXRpb24ueCgpKTsKIAogICAgICAgICBzZXRM
b2dpY2FsTGVmdEZvckNoaWxkKGNoaWxkQm94LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi54KCkgKyBj
aGlsZExvZ2ljYWxMZWZ0TWFyZ2luKTsKICAgICAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGNo
aWxkQm94LCBmbG9hdExvZ2ljYWxMb2NhdGlvbi55KCkgKyBtYXJnaW5CZWZvcmVGb3JDaGlsZChj
aGlsZEJveCkpOwpAQCAtMTk1NCw3ICsxOTU0LDcgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OnBv
c2l0aW9uTmV3RmxvYXRzKCkKICAgICAgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0UGFn
aW5hdGlvblN0cnV0KG5ld0xvZ2ljYWxUb3AgLSBmbG9hdExvZ2ljYWxMb2NhdGlvbi55KCkpOwog
CiAgICAgICAgICAgICAgICAgZmxvYXRMb2dpY2FsTG9jYXRpb24gPSBjb21wdXRlTG9naWNhbExv
Y2F0aW9uRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIG5ld0xvZ2ljYWxUb3ApOwotICAgICAgICAg
ICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRMb2dpY2FsTGVmdChmbG9hdExvZ2ljYWxMb2NhdGlv
bi54KCksIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAgICAgIHNldExv
Z2ljYWxMZWZ0Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QsIGZsb2F0TG9naWNhbExvY2F0aW9uLngo
KSk7CiAKICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsTGVmdEZvckNoaWxkKGNoaWxkQm94LCBm
bG9hdExvZ2ljYWxMb2NhdGlvbi54KCkgKyBjaGlsZExvZ2ljYWxMZWZ0TWFyZ2luKTsKICAgICAg
ICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGRCb3gsIGZsb2F0TG9naWNhbExv
Y2F0aW9uLnkoKSArIG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkQm94KSk7CkBAIC0xOTcwLDkg
KzE5NzAsOSBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldExvZ2lj
YWxUb3AoZmxvYXRMb2dpY2FsTG9jYXRpb24ueSgpLCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
KTsKKyAgICAgICAgc2V0TG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0LCBmbG9hdExv
Z2ljYWxMb2NhdGlvbi55KCkpOwogCi0gICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRMb2dpY2Fs
SGVpZ2h0KGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZEJveCkgKyBtYXJnaW5CZWZvcmVGb3JD
aGlsZChjaGlsZEJveCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkQm94KSwgaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSk7CisgICAgICAgIHNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdChmbG9h
dGluZ09iamVjdCwgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkJlZm9y
ZUZvckNoaWxkKGNoaWxkQm94KSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGRCb3gpKTsKIAog
ICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+YWRkUGxhY2VkT2JqZWN0KGZsb2F0aW5nT2JqZWN0
KTsKIApAQCAtMjAzMCwxMSArMjAzMCwxMSBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6
bmV4dEZsb2F0TG9naWNhbEJvdHRvbUJlbG93KExheW91dFVuaXQgbG9naWNhbEhlaWdodAogICAg
IGF1dG8gZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0g
ZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCA9IGl0LT5nZXQoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBmbG9hdEJvdHRvbSA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpOworICAgICAgICBMYXlvdXRVbml0IGZsb2F0Qm90dG9tID0gbG9n
aWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KTsKICNpZiBFTkFCTEUoQ1NTX1NIQVBF
UykKICAgICAgICAgU2hhcGVPdXRzaWRlSW5mbyogc2hhcGVPdXRzaWRlID0gZmxvYXRpbmdPYmpl
Y3QtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpOwogICAgICAgICBpZiAob2Zmc2V0TW9k
ZSA9PSBTaGFwZU91dHNpZGVGbG9hdFNoYXBlT2Zmc2V0ICYmIHNoYXBlT3V0c2lkZSkgewotICAg
ICAgICAgICAgTGF5b3V0VW5pdCBzaGFwZUJvdHRvbSA9IGZsb2F0aW5nT2JqZWN0LT5sb2dpY2Fs
VG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoJihm
bG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKSkpICsgc2hhcGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxC
b3R0b20oKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgc2hhcGVCb3R0b20gPSBsb2dpY2FsVG9w
Rm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpICsgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoJihmbG9hdGlu
Z09iamVjdC0+cmVuZGVyZXIoKSkpICsgc2hhcGVPdXRzaWRlLT5zaGFwZUxvZ2ljYWxCb3R0b20o
KTsKICAgICAgICAgICAgIC8vIFVzZSB0aGUgc2hhcGVCb3R0b20gdW5sZXNzIGl0IGV4dGVuZHMg
b3V0c2lkZSBvZiB0aGUgbWFyZ2luIGJveCwgaW4gd2hpY2ggY2FzZSBpdCBpcyBjbGlwcGVkLgog
ICAgICAgICAgICAgaWYgKHNoYXBlQm90dG9tIDwgZmxvYXRCb3R0b20pCiAgICAgICAgICAgICAg
ICAgZmxvYXRCb3R0b20gPSBzaGFwZUJvdHRvbTsKQEAgLTIwNTcsNyArMjA1Nyw3IEBAIExheW91
dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdP
YmplY3Q6OlR5cGUgZmxvYXRUCiAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9h
dGluZ09iamVjdCA9IGl0LT5nZXQoKTsKICAgICAgICAgaWYgKGZsb2F0aW5nT2JqZWN0LT5pc1Bs
YWNlZCgpICYmIGZsb2F0aW5nT2JqZWN0LT50eXBlKCkgJiBmbG9hdFR5cGUpCi0gICAgICAgICAg
ICBsb3dlc3RGbG9hdEJvdHRvbSA9IG1heChsb3dlc3RGbG9hdEJvdHRvbSwgZmxvYXRpbmdPYmpl
Y3QtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkpOworICAgICAgICAg
ICAgbG93ZXN0RmxvYXRCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRCb3R0b20sIGxvZ2ljYWxCb3R0
b21Gb3JGbG9hdChmbG9hdGluZ09iamVjdCkpOwogICAgIH0KICAgICByZXR1cm4gbG93ZXN0Rmxv
YXRCb3R0b207CiB9CkBAIC0yMDc3LDggKzIwNzcsOCBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2Nr
Rmxvdzo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmVuZGVyQmxvY2tGbG93KiBjaGlsZCwgYm9vbCBt
YQogICAgIGF1dG8gY2hpbGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmVu
ZCgpOwogICAgIGZvciAoYXV0byBjaGlsZEl0ID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKS5iZWdpbigpOyBjaGlsZEl0ICE9IGNoaWxkRW5kOyArK2NoaWxkSXQpIHsKICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0ID0gY2hpbGRJdC0+Z2V0KCk7Ci0gICAgICAg
IExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckZsb2F0ID0gbWluKGZsb2F0aW5nT2JqZWN0LT5s
b2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpLCBMYXlvdXRVbml0OjptYXgo
KSAtIGNoaWxkTG9naWNhbFRvcCk7Ci0gICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSA9
IGNoaWxkTG9naWNhbFRvcCArIGxvZ2ljYWxCb3R0b21Gb3JGbG9hdDsKKyAgICAgICAgTGF5b3V0
VW5pdCBmbG9hdExvZ2ljYWxCb3R0b20gPSBtaW4obG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0
aW5nT2JqZWN0KSwgTGF5b3V0VW5pdDo6bWF4KCkgLSBjaGlsZExvZ2ljYWxUb3ApOworICAgICAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBjaGlsZExvZ2ljYWxUb3AgKyBmbG9hdExvZ2lj
YWxCb3R0b207CiAgICAgICAgIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b20sIGxvZ2ljYWxCb3R0b20pOwogCiAgICAgICAgIGlmIChsb2dpY2Fs
Qm90dG9tID4gbG9naWNhbEhlaWdodCgpKSB7CkBAIC0yMTMxLDcgKzIxMzEsNyBAQCBib29sIFJl
bmRlckJsb2NrRmxvdzo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZW5kZXJCb3gqIHJlbmRlcmVyKQog
ICAgIGlmIChpdCA9PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuICgqaXQpLT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkpID4gbG9naWNhbEhlaWdodCgpOworICAgIHJldHVybiBsb2dpY2FsQm90dG9tRm9y
RmxvYXQoaXQtPmdldCgpKSA+IGxvZ2ljYWxIZWlnaHQoKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW5kZXJCbG9ja0Zsb3cqIHByZXYsIExheW91dFVu
aXQgbG9naWNhbExlZnRPZmZzZXQsIExheW91dFVuaXQgbG9naWNhbFRvcE9mZnNldCkKQEAgLTIx
NDgsNyArMjE0OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRJbnRydWRpbmdGbG9hdHMo
UmVuZGVyQmxvY2tGbG93KiBwcmV2LCBMYXlvdXRVbml0IGxvZ2ljCiAgICAgYXV0byBwcmV2RW5k
ID0gcHJldlNldC5lbmQoKTsKICAgICBmb3IgKGF1dG8gcHJldkl0ID0gcHJldlNldC5iZWdpbigp
OyBwcmV2SXQgIT0gcHJldkVuZDsgKytwcmV2SXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3Qq
IGZsb2F0aW5nT2JqZWN0ID0gcHJldkl0LT5nZXQoKTsKLSAgICAgICAgaWYgKGZsb2F0aW5nT2Jq
ZWN0LT5sb2dpY2FsQm90dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID4gbG9naWNhbFRv
cE9mZnNldCkgeworICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KGZsb2F0aW5nT2Jq
ZWN0KSA+IGxvZ2ljYWxUb3BPZmZzZXQpIHsKICAgICAgICAgICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMgfHwgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5jb250YWluczxGbG9hdGluZ09iamVj
dCYsIEZsb2F0aW5nT2JqZWN0SGFzaFRyYW5zbGF0b3I+KCpmbG9hdGluZ09iamVjdCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGxhemls
eS4KICAgICAgICAgICAgICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCmluZGV4IGY5MGNlNmQxNzMxNTVjNDcxMjI2
NDcyOGMzYTVjODQwODI1ZjVmOWQuLjQ2ZjUyMWZjN2Q2YzMyYWVkYWUzMzRlNjdkMTE2Y2RmM2I4
ZGUxZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKQEAg
LTI0NCw2ICsyNDQsNDggQEAgcHVibGljOgogICAgIHZvaWQgbWFya0FsbERlc2NlbmRhbnRzV2l0
aEZsb2F0c0ZvckxheW91dChSZW5kZXJCb3gqIGZsb2F0VG9SZW1vdmUgPSAwLCBib29sIGluTGF5
b3V0ID0gdHJ1ZSk7CiAgICAgdm9pZCBtYXJrU2libGluZ3NXaXRoRmxvYXRzRm9yTGF5b3V0KFJl
bmRlckJveCogZmxvYXRUb1JlbW92ZSA9IDApOwogCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPnkoKSA6IGZs
b2F0aW5nT2JqZWN0LT54KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JGbG9h
dChjb25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdGluZ09iamVjdC0+bWF4WSgpIDogZmxvYXRp
bmdPYmplY3QtPm1heFgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRGb3JGbG9hdChj
b25zdCBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QpIGNvbnN0IHsgcmV0dXJuIGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBmbG9hdGluZ09iamVjdC0+eCgpIDogZmxvYXRpbmdPYmpl
Y3QtPnkoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0Rm9yRmxvYXQoY29uc3QgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPm1heFgoKSA6IGZsb2F0aW5nT2JqZWN0LT5t
YXhZKCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aEZvckZsb2F0KGNvbnN0IEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGZsb2F0aW5nT2JqZWN0LT53aWR0aCgpIDogZmxvYXRpbmdPYmplY3QtPmhl
aWdodCgpOyB9CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0Rm9yRmxvYXQoY29uc3QgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPmhlaWdodCgpIDogZmxvYXRpbmdPYmplY3Qt
PndpZHRoKCk7IH0KKyAgICBMYXlvdXRTaXplIGxvZ2ljYWxTaXplRm9yRmxvYXQoY29uc3QgRmxv
YXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpID8gTGF5b3V0U2l6ZShmbG9hdGluZ09iamVjdC0+d2lkdGgoKSwgZmxvYXRp
bmdPYmplY3QtPmhlaWdodCgpKSA6IExheW91dFNpemUoZmxvYXRpbmdPYmplY3QtPmhlaWdodCgp
LCBmbG9hdGluZ09iamVjdC0+d2lkdGgoKSk7IH0KKworICAgIGludCBwaXhlbFNuYXBwZWRMb2dp
Y2FsVG9wRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25z
dCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPmZy
YW1lUmVjdCgpLnBpeGVsU25hcHBlZFkoKSA6IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5w
aXhlbFNuYXBwZWRYKCk7IH0KKyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbEJvdHRvbUZvckZs
b2F0KGNvbnN0IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCkgY29uc3QgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5w
aXhlbFNuYXBwZWRNYXhZKCkgOiBmbG9hdGluZ09iamVjdC0+ZnJhbWVSZWN0KCkucGl4ZWxTbmFw
cGVkTWF4WCgpOyB9CisgICAgaW50IHBpeGVsU25hcHBlZExvZ2ljYWxMZWZ0Rm9yRmxvYXQoY29u
c3QgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6
b250YWxXcml0aW5nTW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnBpeGVsU25h
cHBlZFgoKSA6IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRZKCk7IH0K
KyAgICBpbnQgcGl4ZWxTbmFwcGVkTG9naWNhbFJpZ2h0Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdP
YmplY3QqIGZsb2F0aW5nT2JqZWN0KSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gZmxvYXRpbmdPYmplY3QtPmZyYW1lUmVjdCgpLnBpeGVsU25hcHBlZE1heFgoKSA6
IGZsb2F0aW5nT2JqZWN0LT5mcmFtZVJlY3QoKS5waXhlbFNuYXBwZWRNYXhZKCk7IH0KKworICAg
IHZvaWQgc2V0TG9naWNhbFRvcEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVj
dCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0WShsb2dpY2Fs
VG9wKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldFgobG9n
aWNhbFRvcCk7CisgICAgfQorICAgIHZvaWQgc2V0TG9naWNhbExlZnRGb3JGbG9hdChGbG9hdGlu
Z09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91dFVuaXQgbG9naWNhbExlZnQpCisgICAgewor
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgIGZsb2F0
aW5nT2JqZWN0LT5zZXRYKGxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZmxvYXRpbmdPYmplY3QtPnNldFkobG9naWNhbExlZnQpOworICAgIH0KKyAgICB2b2lkIHNldExv
Z2ljYWxIZWlnaHRGb3JGbG9hdChGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3QsIExheW91
dFVuaXQgbG9naWNhbEhlaWdodCkKKyAgICB7CisgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKQorICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldEhlaWdodChsb2dpY2Fs
SGVpZ2h0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmxvYXRpbmdPYmplY3QtPnNldFdp
ZHRoKGxvZ2ljYWxIZWlnaHQpOworICAgIH0KKyAgICB2b2lkIHNldExvZ2ljYWxXaWR0aEZvckZs
b2F0KEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iamVjdCwgTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgpCisgICAgeworICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKKyAgICAg
ICAgICAgIGZsb2F0aW5nT2JqZWN0LT5zZXRXaWR0aChsb2dpY2FsV2lkdGgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+c2V0SGVpZ2h0KGxvZ2ljYWxXaWR0aCk7
CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgTGF5b3V0VW5pdCBtYXhQb3NpdGl2ZU1hcmdpbkJl
Zm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdpbnMu
cG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6IFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhOjpwb3NpdGl2
ZU1hcmdpbkJlZm9yZURlZmF1bHQodGhpcyk7IH0KICAgICBMYXlvdXRVbml0IG1heE5lZ2F0aXZl
TWFyZ2luQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1f
bWFyZ2lucy5uZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogUmVuZGVyQmxvY2tGbG93UmFyZURhdGE6
Om5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlzKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCAwYzY1MjkxNDVl
MGI4NDNiOWE2YjBmMWM2NjljNTRiNDk0Y2VhZmE4Li43YzE0Y2NhYTRhNTllY2M0NTJhODU5ODhm
MzFiMjc4NWQ4NGJjMDg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMTQ4Miw3ICsxNDgyLDcgQEAgYm9vbCBSZW5kZXJC
bG9ja0Zsb3c6OmFkanVzdExvZ2ljYWxMaW5lVG9wQW5kTG9naWNhbEhlaWdodElmTmVlZGVkKFNo
YXBlSW5zaWRlSW4KIAogICAgIGlmIChzaGFwZUluc2lkZUluZm8gJiYgIXdvcmRNZWFzdXJlbWVu
dHMuc2l6ZSgpICYmIGNvbnRhaW5zRmxvYXRzKCkpIHsKICAgICAgICAgbGFzdEZsb2F0RnJvbVBy
ZXZpb3VzTGluZSA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5sYXN0KCkuZ2V0KCk7Ci0gICAg
ICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsVG9wT2Zmc2V0ID0gc2hhcGVJbnNpZGVJbmZvLT5j
b21wdXRlRmlyc3RGaXRQb3NpdGlvbkZvckZsb2F0KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUt
PmxvZ2ljYWxTaXplKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpKTsKKyAgICAgICAgTGF5b3V0
VW5pdCBmbG9hdExvZ2ljYWxUb3BPZmZzZXQgPSBzaGFwZUluc2lkZUluZm8tPmNvbXB1dGVGaXJz
dEZpdFBvc2l0aW9uRm9yRmxvYXQobG9naWNhbFNpemVGb3JGbG9hdChsYXN0RmxvYXRGcm9tUHJl
dmlvdXNMaW5lKSk7CiAgICAgICAgIGlmIChsb2dpY2FsSGVpZ2h0KCkgPCBmbG9hdExvZ2ljYWxU
b3BPZmZzZXQpCiAgICAgICAgICAgICBhZGp1c3RlZExvZ2ljYWxMaW5lVG9wID0gZmxvYXRMb2dp
Y2FsVG9wT2Zmc2V0OwogICAgIH0KQEAgLTIxNTQsOCArMjE1NCw4IEBAIGJvb2wgUmVuZGVyQmxv
Y2tGbG93OjpjaGVja1BhZ2luYXRpb25BbmRGbG9hdHNBdEVuZExpbmUoTGluZUxheW91dFN0YXRl
JiBsYXlvdXRTCiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0
ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIGF1dG8gZW5kID0gZmxvYXRpbmdPYmpl
Y3RTZXQuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gaXQtPmdl
dCgpOwotICAgICAgICBpZiAoZi0+bG9naWNhbEJvdHRvbShpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSA+PSBsb2dpY2FsVG9wICYmIGYtPmxvZ2ljYWxCb3R0b20oaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSkgPCBsb2dpY2FsQm90dG9tKQorICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRp
bmdPYmplY3QgPSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yRmxvYXQo
ZmxvYXRpbmdPYmplY3QpID49IGxvZ2ljYWxUb3AgJiYgbG9naWNhbEJvdHRvbUZvckZsb2F0KGZs
b2F0aW5nT2JqZWN0KSA8IGxvZ2ljYWxCb3R0b20pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCkBAIC0yNjY4LDggKzI2NjgsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVTZWdtZW50
c0ZvclNoYXBlcyhSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrLCBjb25zdCBGbG9hdGluZ09iamVjdAog
ICAgIExheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQgPSBibG9jay0+bGluZUhlaWdodChpc0Zp
cnN0TGluZSwgaXNIb3Jpem9udGFsV3JpdGluZ01vZGUgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRp
Y2FsTGluZSwgUG9zaXRpb25PZkludGVyaW9yTGluZUJveGVzKTsKICAgICBMYXlvdXRVbml0IGxp
bmVMb2dpY2FsQm90dG9tID0gbGluZUxvZ2ljYWxUb3AgKyBsaW5lTG9naWNhbEhlaWdodDsKIAot
ICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsVG9wID0gbGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZS0+bG9naWNhbFRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSk7Ci0gICAgTGF5b3V0VW5pdCBm
bG9hdExvZ2ljYWxCb3R0b20gPSBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLT5sb2dpY2FsQm90
dG9tKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKTsKKyAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNh
bFRvcCA9IGJsb2NrLT5sb2dpY2FsVG9wRm9yRmxvYXQobGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSk7CisgICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxCb3R0b20gPSBibG9jay0+bG9naWNhbEJv
dHRvbUZvckZsb2F0KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUpOwogCiAgICAgYm9vbCBsaW5l
T3ZlcmxhcHNXaXRoRmxvYXQgPSAoZmxvYXRMb2dpY2FsVG9wIDwgbGluZUxvZ2ljYWxCb3R0b20p
ICYmIChsaW5lTG9naWNhbFRvcCA8IGZsb2F0TG9naWNhbEJvdHRvbSk7CiAgICAgaWYgKCFsaW5l
T3ZlcmxhcHNXaXRoRmxvYXQpCkBAIC0yNjc3LDggKzI2NzcsOCBAQCBzdGF0aWMgdm9pZCB1cGRh
dGVTZWdtZW50c0ZvclNoYXBlcyhSZW5kZXJCbG9ja0Zsb3cqIGJsb2NrLCBjb25zdCBGbG9hdGlu
Z09iamVjdAogCiAgICAgZmxvYXQgbWluU2VnbWVudFdpZHRoID0gZmlyc3RQb3NpdGl2ZVdpZHRo
KHdvcmRNZWFzdXJlbWVudHMpOwogCi0gICAgTGF5b3V0VW5pdCBmbG9hdExvZ2ljYWxXaWR0aCA9
IGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUtPmxvZ2ljYWxXaWR0aChpc0hvcml6b250YWxXcml0
aW5nTW9kZSk7Ci0gICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBibG9jay0+
bG9naWNhbFdpZHRoKCkgLSBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLT5sb2dpY2FsUmlnaHQo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUpOworICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsV2lk
dGggPSBibG9jay0+bG9naWNhbFdpZHRoRm9yRmxvYXQobGFzdEZsb2F0RnJvbVByZXZpb3VzTGlu
ZSk7CisgICAgTGF5b3V0VW5pdCBhdmFpbGFibGVMb2dpY2FsV2lkdGggPSBibG9jay0+bG9naWNh
bFdpZHRoKCkgLSBibG9jay0+bG9naWNhbFJpZ2h0Rm9yRmxvYXQobGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CiAgICAgaWYgKGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA8IG1pblNlZ21lbnRXaWR0
aCkKICAgICAgICAgYmxvY2stPnNldExvZ2ljYWxIZWlnaHQoZmxvYXRMb2dpY2FsQm90dG9tKTsK
IApAQCAtMjgyOSw3ICsyODI5LDcgQEAgSW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRT
ZWdtZW50QnJlYWsoSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgTGluZUkKICAgICAgICAg
ICAgIC8vIElmIGl0IGRvZXMsIHBvc2l0aW9uIGl0IG5vdywgb3RoZXJ3aXNlLCBwb3NpdGlvbgog
ICAgICAgICAgICAgLy8gaXQgYWZ0ZXIgbW92aW5nIHRvIG5leHQgbGluZSAoaW4gbmV3TGluZSgp
IGZ1bmMpCiAgICAgICAgICAgICAvLyBGSVhNRTogQnVnIDExMDM3MjogUHJvcGVybHkgcG9zaXRp
b24gbXVsdGlwbGUgc3RhY2tlZCBmbG9hdHMgd2l0aCBub24tcmVjdGFuZ3VsYXIgc2hhcGUgb3V0
c2lkZS4KLSAgICAgICAgICAgIGlmIChmbG9hdHNGaXRPbkxpbmUgJiYgd2lkdGguZml0c09uTGlu
ZUV4Y2x1ZGluZ1RyYWlsaW5nV2hpdGVzcGFjZShmLT5sb2dpY2FsV2lkdGgobV9ibG9jay0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkpKSB7CisgICAgICAgICAgICBpZiAoZmxvYXRzRml0T25M
aW5lICYmIHdpZHRoLmZpdHNPbkxpbmVFeGNsdWRpbmdUcmFpbGluZ1doaXRlc3BhY2UobV9ibG9j
ay0+bG9naWNhbFdpZHRoRm9yRmxvYXQoZikpKSB7CiAgICAgICAgICAgICAgICAgbV9ibG9jay0+
cG9zaXRpb25OZXdGbG9hdE9uTGluZShmLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lLCBsaW5l
SW5mbywgd2lkdGgpOwogICAgICAgICAgICAgICAgIGlmIChsQnJlYWsubV9vYmogPT0gY3VycmVu
dC5tX29iaikgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWxCcmVhay5tX3Bvcyk7CkBA
IC0zNDQzLDcgKzM0NDMsNyBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6cG9zaXRpb25OZXdGbG9h
dE9uTGluZShGbG9hdGluZ09iamVjdCogbmV3RmxvYXQsIEZsb2F0aW5nTwogICAgIGNvbnN0IEZs
b2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5z
ZXQoKTsKICAgICBBU1NFUlQoZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpLmdldCgpID09IG5ld0Zs
b2F0KTsKIAotICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsVG9wID0gbmV3RmxvYXQtPmxvZ2lj
YWxUb3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSk7CisgICAgTGF5b3V0VW5pdCBmbG9hdExv
Z2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQobmV3RmxvYXQpOwogICAgIGludCBwYWdpbmF0
aW9uU3RydXQgPSBuZXdGbG9hdC0+cGFnaW5hdGlvblN0cnV0KCk7CiAKICAgICBpZiAoZmxvYXRM
b2dpY2FsVG9wIC0gcGFnaW5hdGlvblN0cnV0ICE9IGxvZ2ljYWxIZWlnaHQoKSArIGxpbmVJbmZv
LmZsb2F0UGFnaW5hdGlvblN0cnV0KCkpCkBAIC0zNDU0LDIyICszNDU0LDIyIEBAIGJvb2wgUmVu
ZGVyQmxvY2tGbG93Ojpwb3NpdGlvbk5ld0Zsb2F0T25MaW5lKEZsb2F0aW5nT2JqZWN0KiBuZXdG
bG9hdCwgRmxvYXRpbmdPCiAgICAgYXV0byBiZWdpbiA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2lu
KCk7CiAgICAgd2hpbGUgKGl0ICE9IGJlZ2luKSB7CiAgICAgICAgIC0taXQ7Ci0gICAgICAgIEZs
b2F0aW5nT2JqZWN0KiBmID0gaXQtPmdldCgpOwotICAgICAgICBpZiAoZiA9PSBsYXN0RmxvYXRG
cm9tUHJldmlvdXNMaW5lKQorICAgICAgICBGbG9hdGluZ09iamVjdCogZmxvYXRpbmdPYmplY3Qg
PSBpdC0+Z2V0KCk7CisgICAgICAgIGlmIChmbG9hdGluZ09iamVjdCA9PSBsYXN0RmxvYXRGcm9t
UHJldmlvdXNMaW5lKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChmLT5sb2dpY2Fs
VG9wKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpID09IGxvZ2ljYWxIZWlnaHQoKSArIGxpbmVJ
bmZvLmZsb2F0UGFnaW5hdGlvblN0cnV0KCkpIHsKLSAgICAgICAgICAgIGYtPnNldFBhZ2luYXRp
b25TdHJ1dChwYWdpbmF0aW9uU3RydXQgKyBmLT5wYWdpbmF0aW9uU3RydXQoKSk7Ci0gICAgICAg
ICAgICBSZW5kZXJCb3gqIG8gPSAmZi0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIHNldExvZ2lj
YWxUb3BGb3JDaGlsZChvLCBsb2dpY2FsVG9wRm9yQ2hpbGQobykgKyBtYXJnaW5CZWZvcmVGb3JD
aGlsZChvKSArIHBhZ2luYXRpb25TdHJ1dCk7Ci0gICAgICAgICAgICBpZiAoby0+aXNSZW5kZXJC
bG9jaygpKQotICAgICAgICAgICAgICAgIHRvUmVuZGVyQmxvY2sobyktPnNldENoaWxkTmVlZHNM
YXlvdXQoTWFya09ubHlUaGlzKTsKLSAgICAgICAgICAgIG8tPmxheW91dElmTmVlZGVkKCk7Cisg
ICAgICAgIGlmIChsb2dpY2FsVG9wRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpID09IGxvZ2ljYWxI
ZWlnaHQoKSArIGxpbmVJbmZvLmZsb2F0UGFnaW5hdGlvblN0cnV0KCkpIHsKKyAgICAgICAgICAg
IGZsb2F0aW5nT2JqZWN0LT5zZXRQYWdpbmF0aW9uU3RydXQocGFnaW5hdGlvblN0cnV0ICsgZmxv
YXRpbmdPYmplY3QtPnBhZ2luYXRpb25TdHJ1dCgpKTsKKyAgICAgICAgICAgIFJlbmRlckJveCog
ZmxvYXRCb3ggPSAmZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCk7CisgICAgICAgICAgICBzZXRM
b2dpY2FsVG9wRm9yQ2hpbGQoZmxvYXRCb3gsIGxvZ2ljYWxUb3BGb3JDaGlsZChmbG9hdEJveCkg
KyBtYXJnaW5CZWZvcmVGb3JDaGlsZChmbG9hdEJveCkgKyBwYWdpbmF0aW9uU3RydXQpOworICAg
ICAgICAgICAgaWYgKGZsb2F0Qm94LT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgICAgICAgICAg
dG9SZW5kZXJCbG9jayhmbG9hdEJveCktPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlz
KTsKKyAgICAgICAgICAgIGZsb2F0Qm94LT5sYXlvdXRJZk5lZWRlZCgpOwogICAgICAgICAgICAg
Ly8gU2F2ZSB0aGUgb2xkIGxvZ2ljYWwgdG9wIGJlZm9yZSBjYWxsaW5nIHJlbW92ZVBsYWNlZE9i
amVjdCB3aGljaCB3aWxsIHNldAogICAgICAgICAgICAgLy8gaXNQbGFjZWQgdG8gZmFsc2UuIE90
aGVyd2lzZSBpdCB3aWxsIHRyaWdnZXIgYW4gYXNzZXJ0IGluIGxvZ2ljYWxUb3BGb3JGbG9hdC4K
LSAgICAgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9IGYtPmxvZ2ljYWxUb3AoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSk7Ci0gICAgICAgICAgICBtX2Zsb2F0aW5nT2JqZWN0cy0+
cmVtb3ZlUGxhY2VkT2JqZWN0KGYpOwotICAgICAgICAgICAgZi0+c2V0TG9naWNhbFRvcChvbGRM
b2dpY2FsVG9wICsgcGFnaW5hdGlvblN0cnV0LCBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsK
LSAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5hZGRQbGFjZWRPYmplY3QoZik7CisgICAg
ICAgICAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yRmxvYXQoZmxv
YXRpbmdPYmplY3QpOworICAgICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPnJlbW92ZVBsYWNl
ZE9iamVjdChmbG9hdGluZ09iamVjdCk7CisgICAgICAgICAgICBzZXRMb2dpY2FsVG9wRm9yRmxv
YXQoZmxvYXRpbmdPYmplY3QsIG9sZExvZ2ljYWxUb3AgKyBwYWdpbmF0aW9uU3RydXQpOworICAg
ICAgICAgICAgbV9mbG9hdGluZ09iamVjdHMtPmFkZFBsYWNlZE9iamVjdChmbG9hdGluZ09iamVj
dCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5mby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uY3BwCmluZGV4IDRkMzM3ZDM2ZWE1MmZjN2Y0Nzlj
YWI0ZmEzMGU5MGIyZGRhNmQyOTMuLmJjYmViNjkwOWRjYTIwNzMxNjM3MjlmNWEzNzU0MzRhNjAy
ZTFkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVP
dXRzaWRlSW5mby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZU91dHNpZGVJbmZvLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIlNoYXBlT3V0c2lk
ZUluZm8uaCIKIAogI2luY2x1ZGUgIkZsb2F0aW5nT2JqZWN0cy5oIgotI2luY2x1ZGUgIlJlbmRl
ckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVy
Qm94LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU0LDkgKzU0LDkgQEAgYm9vbCBTaGFw
ZU91dHNpZGVJbmZvOjppc0VuYWJsZWRGb3IoY29uc3QgUmVuZGVyQm94KiBib3gpCiAgICAgfQog
fQogCi12b2lkIFNoYXBlT3V0c2lkZUluZm86OnVwZGF0ZURlbHRhc0ZvckNvbnRhaW5pbmdCbG9j
a0xpbmUoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgY29uc3QgRmxvYXRpbmdP
YmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGlu
ZUhlaWdodCkKK3ZvaWQgU2hhcGVPdXRzaWRlSW5mbzo6dXBkYXRlRGVsdGFzRm9yQ29udGFpbmlu
Z0Jsb2NrTGluZShjb25zdCBSZW5kZXJCbG9ja0Zsb3cqIGNvbnRhaW5pbmdCbG9jaywgY29uc3Qg
RmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqZWN0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUhlaWdodCkKIHsKLSAgICBMYXlvdXRVbml0IHNoYXBlVG9wID0gZmxvYXRpbmdP
YmplY3QtPmxvZ2ljYWxUb3AoY29udGFpbmluZ0Jsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpKSArIHN0ZDo6bWF4KExheW91dFVuaXQoKSwgY29udGFpbmluZ0Jsb2NrLT5tYXJnaW5CZWZv
cmVGb3JDaGlsZChtX3JlbmRlcmVyKSk7CisgICAgTGF5b3V0VW5pdCBzaGFwZVRvcCA9IGNvbnRh
aW5pbmdCbG9jay0+bG9naWNhbFRvcEZvckZsb2F0KGZsb2F0aW5nT2JqZWN0KSArIHN0ZDo6bWF4
KExheW91dFVuaXQoKSwgY29udGFpbmluZ0Jsb2NrLT5tYXJnaW5CZWZvcmVGb3JDaGlsZChtX3Jl
bmRlcmVyKSk7CiAgICAgTGF5b3V0VW5pdCBsaW5lVG9wSW5TaGFwZUNvb3JkaW5hdGVzID0gbGlu
ZVRvcCAtIHNoYXBlVG9wICsgbG9naWNhbFRvcE9mZnNldCgpOwogCiAgICAgaWYgKHNoYXBlU2l6
ZURpcnR5KCkgfHwgbV9saW5lVG9wICE9IGxpbmVUb3BJblNoYXBlQ29vcmRpbmF0ZXMgfHwgbV9s
aW5lSGVpZ2h0ICE9IGxpbmVIZWlnaHQpIHsKQEAgLTgwLDggKzgwLDggQEAgdm9pZCBTaGFwZU91
dHNpZGVJbmZvOjp1cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFJlbmRl
ckJsb2NrKiBjb24KICAgICAgICAgLy8gY29udGVudCBzaG91bGQgaW50ZXJhY3Qgd2l0aCBwcmV2
aW91c2x5IHN0YWNrZWQgZmxvYXRzIG9uIHRoZSBsaW5lCiAgICAgICAgIC8vIGFzIGlmIHRoaXMg
b3V0ZXJtb3N0IGZsb2F0IGRpZCBub3QgZXhpc3QuIFBlcmhhcHMgb2J2aW91c2x5LCB0aGlzCiAg
ICAgICAgIC8vIHNvbHV0aW9uIGNhbm5vdCBkbyB0aGF0LCBhbmQgd2lsbCBiZSByZXZpc3RlZCB3
aXRoIGJ1ZyAxMjI1NzYuCi0gICAgICAgIG1fbGVmdE1hcmdpbkJveERlbHRhID0gZmxvYXRpbmdP
YmplY3QtPmxvZ2ljYWxXaWR0aChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCkpOwotICAgICAgICBtX3JpZ2h0TWFyZ2luQm94RGVsdGEgPSAtZmxvYXRpbmdPYmplY3Qt
PmxvZ2ljYWxXaWR0aChjb250YWluaW5nQmxvY2stPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
OworICAgICAgICBtX2xlZnRNYXJnaW5Cb3hEZWx0YSA9IGNvbnRhaW5pbmdCbG9jay0+bG9naWNh
bFdpZHRoRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOworICAgICAgICBtX3JpZ2h0TWFyZ2luQm94
RGVsdGEgPSAtY29udGFpbmluZ0Jsb2NrLT5sb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09i
amVjdCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlT3V0c2lkZUluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGVPdXRzaWRlSW5mby5oCmluZGV4IDZhMzlmYTdjNDk4MjIzOWRjYjYwOWQ5ZTQwNzcy
NjdiNGU4N2YzMzguLjUzMjBlYzljYzljMGFkZGRmYTNhMjNkODM1ODgwZjczNWY2Zjc4YTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5m
by5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGVPdXRzaWRlSW5m
by5oCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVu
ZGVyQmxvY2s7CitjbGFzcyBSZW5kZXJCbG9ja0Zsb3c7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFz
cyBGbG9hdGluZ09iamVjdDsKIApAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0
VW5pdCBsZWZ0TWFyZ2luQm94RGVsdGEoKSBjb25zdCB7IHJldHVybiBtX2xlZnRNYXJnaW5Cb3hE
ZWx0YTsgfQogICAgIExheW91dFVuaXQgcmlnaHRNYXJnaW5Cb3hEZWx0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmlnaHRNYXJnaW5Cb3hEZWx0YTsgfQogCi0gICAgdm9pZCB1cGRhdGVEZWx0YXNGb3JD
b250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFJlbmRlckJsb2NrKiwgY29uc3QgRmxvYXRpbmdPYmpl
Y3QqLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUhlaWdodCk7CisgICAgdm9p
ZCB1cGRhdGVEZWx0YXNGb3JDb250YWluaW5nQmxvY2tMaW5lKGNvbnN0IFJlbmRlckJsb2NrRmxv
dyosIGNvbnN0IEZsb2F0aW5nT2JqZWN0KiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0
IGxpbmVIZWlnaHQpOwogCiAgICAgc3RhdGljIFBhc3NPd25QdHI8U2hhcGVPdXRzaWRlSW5mbz4g
Y3JlYXRlSW5mbyhjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyKSB7IHJldHVybiBhZG9wdFB0cihu
ZXcgU2hhcGVPdXRzaWRlSW5mbyhyZW5kZXJlcikpOyB9CiAgICAgc3RhdGljIGJvb2wgaXNFbmFi
bGVkRm9yKGNvbnN0IFJlbmRlckJveCopOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>