<?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>185266</bug_id>
          
          <creation_ts>2018-05-03 14:04:38 -0700</creation_ts>
          <short_desc>[Curl] Enable Proxy Authentication.</short_desc>
          <delta_ts>2018-08-27 12:08:22 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=188998</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>galpeter</cc>
    
    <cc>pvollan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1420322</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-05-03 14:04:38 -0700</bug_when>
    <thetext>Add support for proxy authentication to curl backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420339</commentid>
    <comment_count>1</comment_count>
      <attachid>339467</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-05-03 14:28:22 -0700</bug_when>
    <thetext>Created attachment 339467
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432776</commentid>
    <comment_count>2</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2018-06-13 13:02:34 -0700</bug_when>
    <thetext>Pinging potential reviewers since this has been hanging out for over a month now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1432782</commentid>
    <comment_count>3</comment_count>
      <attachid>339467</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-06-13 13:23:56 -0700</bug_when>
    <thetext>Comment on attachment 339467
PATCH

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

This code is in general a little hard to follow.

&gt; Source/WebCore/platform/network/curl/AuthenticationChallengeCurl.cpp:67
&gt; +int AuthenticationChallenge::getPort(const URL&amp; url)

This should have a better name.  It&apos;s not just getting the port.

&gt; Source/WebCore/platform/network/curl/AuthenticationChallengeCurl.cpp:80
&gt; +    auto protocol = url.protocol().toString();
&gt; +    if (protocol == &quot;socks4&quot; || protocol == &quot;socks4a&quot; || protocol == &quot;socks5&quot; || protocol == &quot;socks5h&quot;)

We shouldn&apos;t need to make a String just to compare it.

&gt; Source/WebCore/platform/network/curl/CurlProxySettings.cpp:75
&gt; +    if (authMethod &amp; CURLAUTH_NTLM)

Should these be else ifs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1433173</commentid>
    <comment_count>4</comment_count>
      <attachid>339467</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-06-14 16:44:53 -0700</bug_when>
    <thetext>Comment on attachment 339467
PATCH

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

&gt;&gt; Source/WebCore/platform/network/curl/AuthenticationChallengeCurl.cpp:67
&gt;&gt; +int AuthenticationChallenge::getPort(const URL&amp; url)
&gt; 
&gt; This should have a better name.  It&apos;s not just getting the port.

How about determinPortForProxy()?

&gt;&gt; Source/WebCore/platform/network/curl/AuthenticationChallengeCurl.cpp:80
&gt;&gt; +    if (protocol == &quot;socks4&quot; || protocol == &quot;socks4a&quot; || protocol == &quot;socks5&quot; || protocol == &quot;socks5h&quot;)
&gt; 
&gt; We shouldn&apos;t need to make a String just to compare it.

Of course.

&gt;&gt; Source/WebCore/platform/network/curl/CurlProxySettings.cpp:75
&gt;&gt; +    if (authMethod &amp; CURLAUTH_NTLM)
&gt; 
&gt; Should these be else ifs?

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1434510</commentid>
    <comment_count>5</comment_count>
      <attachid>343088</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-06-19 12:55:52 -0700</bug_when>
    <thetext>Created attachment 343088
FIX

Fixed reviewed points. Also rebased to HEAD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1434543</commentid>
    <comment_count>6</comment_count>
      <attachid>343088</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-06-19 13:57:25 -0700</bug_when>
    <thetext>Comment on attachment 343088
FIX

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

&gt; Source/WebCore/platform/network/curl/AuthenticationChallengeCurl.cpp:68
&gt; +int AuthenticationChallenge::determineProxyPort(const URL&amp; url)

This should return a std::optional&lt;uint16_t&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1434616</commentid>
    <comment_count>7</comment_count>
      <attachid>343116</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-06-19 15:40:35 -0700</bug_when>
    <thetext>Created attachment 343116
FIX

Thanks for r+ &gt; Alex</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1434627</commentid>
    <comment_count>8</comment_count>
      <attachid>343116</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-19 16:27:04 -0700</bug_when>
    <thetext>Comment on attachment 343116
FIX

Clearing flags on attachment: 343116

Committed r232992: &lt;https://trac.webkit.org/changeset/232992&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1434628</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-06-19 16:27:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1434629</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-06-19 16:28:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/41269224&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339467</attachid>
            <date>2018-05-03 14:28:22 -0700</date>
            <delta_ts>2018-06-19 12:55:52 -0700</delta_ts>
            <desc>PATCH</desc>
            <filename>185266.diff</filename>
            <type>text/plain</type>
            <size>18306</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NGQzZTdmODk3OC4uNjFjMDc2MDhiZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOC0wNS0wMyAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEVuYWJsZSBQcm94eSBBdXRoZW50aWNhdGlvbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTI2NgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBQcm94eSBBdXRoZW50aWNhdGlvbiB0byBjdXJsIG5ldHdv
cmsgbGF5ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGluIHB1YmxpYy4gVGVzdGVkIGludGVybmFsbHkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDdXJsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9u
U3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRnJvbUhhbmRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6Z2V0UG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6YXV0aGVudGljYXRpb25TY2hlbWVGcm9tQ3VybEF1dGgp
OgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OnBhcnNlUmVhbG0p
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVQcm94eUlmRXhpc3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxIYW5kbGU6OnByb3h5VXJsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxI
YW5kbGU6OmdldFByb3h5QXV0aEF2YWlsKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OmdldFByaW1hcnlQb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybENvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpzZXREZWZh
dWx0UHJveHlBdXRoTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpzZXRQ
cm94eUF1dGhNZXRob2QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUHJv
eHlTZXR0aW5ncy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5nczo6c2V0
QXV0aE1ldGhvZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxQcm94eVNl
dHRpbmdzLmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5nczo6c2V0RGVmYXVs
dEF1dGhNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3M6OmF1dGhN
ZXRob2QgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZUhlYWRlcik6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNwb25zZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybFJlc3BvbnNlOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VDdXJsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2U6OmlzUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIGNv
bnN0KToKKwogMjAxOC0wNS0wMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFtMRkNdIEJveCBpbnZhbGlkYXRpb24gbG9naWMgc2hvdWxkIGdvIHRvIGRlZGljYXRl
ZCBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAppbmRleCA2MDNjMTQ3YzY1OS4u
OTIyYmQ0YzgwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsOCArNDgsMTEg
QEAgcHVibGljOgogICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBhdXRoZW50aWNhdGlvbkNsaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0KCk7IH0KIAogcHJp
dmF0ZToKLSAgICBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHByb3RlY3Rpb25TcGFjZVNlcnZl
clR5cGVGcm9tVVJJKGNvbnN0IFVSTCYpOworICAgIFByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGUg
cHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkoY29uc3QgVVJMJiwgYm9vbCBpc0ZvclBy
b3h5KTsKICAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlRnJvbUhhbmRsZShjb25z
dCBDdXJsUmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgaW50IGdldFBv
cnQoY29uc3QgVVJMJik7CisgICAgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUg
YXV0aGVudGljYXRpb25TY2hlbWVGcm9tQ3VybEF1dGgobG9uZyk7CisgICAgU3RyaW5nIHBhcnNl
UmVhbG0oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgcmVtb3ZlTGVhZGluZ0Fu
ZFRyYWlsaW5nUXVvdGVzKFN0cmluZyYpOwogCiAgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2xp
ZW50PiBtX2F1dGhlbnRpY2F0aW9uQ2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ3VybC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VDdXJsLmNwcAppbmRleCBjZWUzNmI0MWIwMS4uMTFhZTk5MGFkOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUN1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDQzICs0MCw3OCBAQCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQ3VybFJlc3BvbnNl
JiBjdXJsUmVzcG9ucwogewogfQogCi1Qcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSShjb25zdCBV
UkwmIHVybCkKK1Byb3RlY3Rpb25TcGFjZVNlcnZlclR5cGUgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6OnByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKGNvbnN0IFVSTCYgdXJsLCBib29s
IGlzRm9yUHJveHkpCiB7CiAgICAgaWYgKHVybC5wcm90b2NvbElzKCJodHRwcyIpKQotICAgICAg
ICByZXR1cm4gUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUFM7CisgICAgICAgIHJldHVybiBpc0Zv
clByb3h5ID8gUHJvdGVjdGlvblNwYWNlUHJveHlIVFRQUyA6IFByb3RlY3Rpb25TcGFjZVNlcnZl
ckhUVFBTOwogICAgIGlmICh1cmwucHJvdG9jb2xJcygiaHR0cCIpKQotICAgICAgICByZXR1cm4g
UHJvdGVjdGlvblNwYWNlU2VydmVySFRUUDsKKyAgICAgICAgcmV0dXJuIGlzRm9yUHJveHkgPyBQ
cm90ZWN0aW9uU3BhY2VQcm94eUhUVFAgOiBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQOwogICAg
IGlmICh1cmwucHJvdG9jb2xJcygiZnRwIikpCi0gICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3Bh
Y2VTZXJ2ZXJGVFA7Ci0gICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7CisgICAg
ICAgIHJldHVybiBpc0ZvclByb3h5ID8gUHJvdGVjdGlvblNwYWNlUHJveHlGVFAgOiBQcm90ZWN0
aW9uU3BhY2VTZXJ2ZXJGVFA7CisgICAgcmV0dXJuIGlzRm9yUHJveHkgPyBQcm90ZWN0aW9uU3Bh
Y2VQcm94eUhUVFAgOiBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQOwogfQogCiBQcm90ZWN0aW9u
U3BhY2UgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OnByb3RlY3Rpb25TcGFjZUZyb21IYW5kbGUo
Y29uc3QgQ3VybFJlc3BvbnNlJiBjdXJsUmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQogewotICAgIGF1dG8gcG9ydCA9IGN1cmxSZXNwb25zZS5jb25uZWN0UG9ydDsK
LSAgICBhdXRvIGF2YWlsYWJsZUh0dHBBdXRoID0gY3VybFJlc3BvbnNlLmF2YWlsYWJsZUh0dHBB
dXRoOworICAgIGlmICghcmVzcG9uc2UuaXNVbmF1dGhvcml6ZWQoKSAmJiAhcmVzcG9uc2UuaXNQ
cm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoKSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25T
cGFjZSgpOwogCisgICAgYXV0byBpc1Byb3h5QXV0aCA9IHJlc3BvbnNlLmlzUHJveHlBdXRoZW50
aWNhdGlvblJlcXVpcmVkKCk7CisgICAgY29uc3QgYXV0byYgdXJsID0gaXNQcm94eUF1dGggPyBj
dXJsUmVzcG9uc2UucHJveHlVcmwgOiByZXNwb25zZS51cmwoKTsKKyAgICBhdXRvIHNlcnZlclR5
cGUgPSBwcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSSh1cmwsIGlzUHJveHlBdXRoKTsK
KyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uU2NoZW1lID0gYXV0aGVudGljYXRpb25TY2hlbWVGcm9t
Q3VybEF1dGgoaXNQcm94eUF1dGggPyBjdXJsUmVzcG9uc2UuYXZhaWxhYmxlUHJveHlBdXRoIDog
Y3VybFJlc3BvbnNlLmF2YWlsYWJsZUh0dHBBdXRoKTsKKworICAgIHJldHVybiBQcm90ZWN0aW9u
U3BhY2UodXJsLmhvc3QoKSwgZ2V0UG9ydCh1cmwpLCBzZXJ2ZXJUeXBlLCBwYXJzZVJlYWxtKHJl
c3BvbnNlKSwgYXV0aGVudGljYXRpb25TY2hlbWUpOworfQorCitpbnQgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2U6OmdldFBvcnQoY29uc3QgVVJMJiB1cmwpCit7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQxNl90IHNvY2tzUG9ydCA9IDEwODA7CisKKyAgICBhdXRvIHBvcnQgPSB1cmwucG9ydCgpOwor
ICAgIGlmIChwb3J0KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigqcG9ydCk7CisK
KyAgICBwb3J0ID0gZGVmYXVsdFBvcnRGb3JQcm90b2NvbCh1cmwucHJvdG9jb2woKSk7CisgICAg
aWYgKHBvcnQpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KCpwb3J0KTsKKworICAg
IGF1dG8gcHJvdG9jb2wgPSB1cmwucHJvdG9jb2woKS50b1N0cmluZygpOworICAgIGlmIChwcm90
b2NvbCA9PSAic29ja3M0IiB8fCBwcm90b2NvbCA9PSAic29ja3M0YSIgfHwgcHJvdG9jb2wgPT0g
InNvY2tzNSIgfHwgcHJvdG9jb2wgPT0gInNvY2tzNWgiKQorICAgICAgICByZXR1cm4gc29ja3NQ
b3J0OworCisgICAgcmV0dXJuIDA7Cit9CisKK1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjphdXRoZW50aWNhdGlvblNjaGVtZUZyb21D
dXJsQXV0aChsb25nIGN1cmxBdXRoKQorewogICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lVW5r
bm93bjsKLSAgICBpZiAoYXZhaWxhYmxlSHR0cEF1dGggJiBDVVJMQVVUSF9CQVNJQykKKyAgICBp
ZiAoY3VybEF1dGggJiBDVVJMQVVUSF9CQVNJQykKICAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlv
blNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM7Ci0gICAgaWYgKGF2YWlsYWJsZUh0
dHBBdXRoICYgQ1VSTEFVVEhfRElHRVNUKQorICAgIGlmIChjdXJsQXV0aCAmIENVUkxBVVRIX0RJ
R0VTVCkKICAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVIVFRQRGlnZXN0OwotICAgIGlmIChhdmFpbGFibGVIdHRwQXV0aCAmIENVUkxBVVRIX05FR09U
SUFURSkKKyAgICBpZiAoY3VybEF1dGggJiBDVVJMQVVUSF9ORUdPVElBVEUpCiAgICAgICAgIHNj
aGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRlOwotICAg
IGlmIChhdmFpbGFibGVIdHRwQXV0aCAmIENVUkxBVVRIX05UTE0pCisgICAgaWYgKGN1cmxBdXRo
ICYgQ1VSTEFVVEhfTlRMTSkKICAgICAgICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVu
dGljYXRpb25TY2hlbWVOVExNOworICAgIHJldHVybiBzY2hlbWU7Cit9CisKK1N0cmluZyBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZTo6cGFyc2VSZWFsbShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiB3d3dBdXRoZW50
aWNhdGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInd3dy1hdXRoZW50aWNhdGUiKSk7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcHJveHlBdXRoZW50aWNhdGUoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoInByb3h5LWF1dGhlbnRpY2F0ZSIpKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiByZWFsbVN0cmluZyhNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgicmVh
bG09IikpOwogCiAgICAgU3RyaW5nIHJlYWxtOwotICAgIGNvbnN0IFN0cmluZyByZWFsbVN0cmlu
ZygicmVhbG09Iik7Ci0gICAgYXV0byBhdXRoSGVhZGVyID0gcmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkKFN0cmluZygid3d3LWF1dGhlbnRpY2F0ZSIpKTsKKyAgICBhdXRvIGF1dGhIZWFkZXIgPSBy
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQocmVzcG9uc2UuaXNVbmF1dGhvcml6ZWQoKSA/IHd3d0F1
dGhlbnRpY2F0ZSA6IHByb3h5QXV0aGVudGljYXRlKTsKICAgICBhdXRvIHJlYWxtUG9zID0gYXV0
aEhlYWRlci5maW5kSWdub3JpbmdBU0NJSUNhc2UocmVhbG1TdHJpbmcpOwogICAgIGlmIChyZWFs
bVBvcyAhPSBub3RGb3VuZCkgewotICAgICAgICByZWFsbSA9IGF1dGhIZWFkZXIuc3Vic3RyaW5n
KHJlYWxtUG9zICsgcmVhbG1TdHJpbmcubGVuZ3RoKCkpOworICAgICAgICByZWFsbSA9IGF1dGhI
ZWFkZXIuc3Vic3RyaW5nKHJlYWxtUG9zICsgcmVhbG1TdHJpbmcuZ2V0KCkubGVuZ3RoKCkpOwog
ICAgICAgICByZWFsbSA9IHJlYWxtLmxlZnQocmVhbG0uZmluZCgnLCcpKTsKICAgICAgICAgcmVt
b3ZlTGVhZGluZ0FuZFRyYWlsaW5nUXVvdGVzKHJlYWxtKTsKICAgICB9Ci0KLSAgICByZXR1cm4g
UHJvdGVjdGlvblNwYWNlKHJlc3BvbnNlLnVybCgpLmhvc3QoKSwgc3RhdGljX2Nhc3Q8aW50Pihw
b3J0KSwgcHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkocmVzcG9uc2UudXJsKCkpLCBy
ZWFsbSwgc2NoZW1lKTsKKyAgICByZXR1cm4gcmVhbG07CiB9CiAKIHZvaWQgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6OnJlbW92ZUxlYWRpbmdBbmRUcmFpbGluZ1F1b3RlcyhTdHJpbmcmIHZhbHVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29u
dGV4dC5jcHAKaW5kZXggMjQwOTVjNzhmNjYuLjY4MzNmOGM4YzUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKQEAgLTQ5
Myw3ICs0OTMsNyBAQCB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVByb3h5SWZFeGlzdHMoKQogICAg
ICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWVVTRVJOQU1F
LCBwcm94eS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmICghcHJveHkucGFzc3dv
cmQoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBD
VVJMT1BUX1BST1hZUEFTU1dPUkQsIHByb3h5LnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUFJPWFlBVVRILCBDVVJM
QVVUSF9BTlkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BS
T1hZQVVUSCwgcHJveHkuYXV0aE1ldGhvZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBD
dXJsUHJveHlTZXR0aW5nczo6TW9kZTo6Tm9Qcm94eSA6CiAgICAgICAgIC8vIERpc2FibGUgdGhl
IHVzZSBvZiBhIHByb3h5LCBldmVuIGlmIHRoZXJlIGlzIGFuIGVudmlyb25tZW50IHZhcmlhYmxl
IHNldCBmb3IgaXQuCkBAIC01MDIsNyArNTAyLDcgQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVQ
cm94eUlmRXhpc3RzKCkKICAgICBjYXNlIEN1cmxQcm94eVNldHRpbmdzOjpNb2RlOjpDdXN0b20g
OgogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BST1hZLCBwcm94
eS51cmwoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRs
ZSwgQ1VSTE9QVF9OT1BST1hZLCBwcm94eS5pZ25vcmVIb3N0cygpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BST1hZQVVUSCwgQ1VS
TEFVVEhfQU5ZKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9Q
Uk9YWUFVVEgsIHByb3h5LmF1dGhNZXRob2QoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
QEAgLTU1MiwyMSArNTUyLDEzIEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0U3NsQ3R4Q2FsbGJhY2tG
dW5jdGlvbihjdXJsX3NzbF9jdHhfY2FsbGJhY2sgY2FsbGJhY2tGdW5jLCB2CiAgICAgY3VybF9l
YXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBjYWxsYmFja0Z1
bmMpOwogfQogCi1zdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBDdXJsSGFuZGxlOjpnZXRQcmltYXJ5
UG9ydCgpCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ3VybEhhbmRsZTo6cHJveHlVcmwoKQogewot
ICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBs
b25nIHBvcnQ7Ci0gICAgQ1VSTGNvZGUgZXJyb3JDb2RlID0gY3VybF9lYXN5X2dldGluZm8obV9o
YW5kbGUsIENVUkxJTkZPX1BSSU1BUllfUE9SVCwgJnBvcnQpOwotICAgIGlmIChlcnJvckNvZGUg
IT0gQ1VSTEVfT0spCisgICAgYXV0byYgcHJveHkgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCku
cHJveHlTZXR0aW5ncygpOworICAgIGlmIChwcm94eS5tb2RlKCkgPT0gQ3VybFByb3h5U2V0dGlu
Z3M6Ok1vZGU6OkRlZmF1bHQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICAv
KgotICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvYmxvYi9tYXN0ZXIvbGliL2Nv
bm5lY3QuYyNMNjEyLUw2NjAKLSAgICAgKiBjb25maXJtZWQgdGhhdCBgcG9ydGAgaXMgb3JpZ2lu
YWxseSB1bnNpZ25lZCBzaG9ydC4KLSAgICAgKi8KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDE2X3Q+KHBvcnQpOworICAgIHJldHVybiBwcm94eS51cmwoKTsKIH0KIAogc3RkOjpvcHRpb25h
bDxsb25nPiBDdXJsSGFuZGxlOjpnZXRSZXNwb25zZUNvZGUoKQpAQCAtNjIyLDYgKzYxNCwxOSBA
QCBzdGQ6Om9wdGlvbmFsPGxvbmc+IEN1cmxIYW5kbGU6OmdldEh0dHBBdXRoQXZhaWwoKQogICAg
IHJldHVybiBodHRwQXV0aEF2YWlsYWJsZTsKIH0KIAorc3RkOjpvcHRpb25hbDxsb25nPiBDdXJs
SGFuZGxlOjpnZXRQcm94eUF1dGhBdmFpbCgpCit7CisgICAgaWYgKCFtX2hhbmRsZSkKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGxvbmcgcHJveHlBdXRoQXZhaWxhYmxlOwor
ICAgIENVUkxjb2RlIGVycm9yQ29kZSA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJM
SU5GT19QUk9YWUFVVEhfQVZBSUwsICZwcm94eUF1dGhBdmFpbGFibGUpOworICAgIGlmIChlcnJv
ckNvZGUgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4gcHJveHlBdXRoQXZhaWxhYmxlOworfQorCiBzdGQ6Om9wdGlvbmFsPGxvbmc+IEN1cmxI
YW5kbGU6OmdldEh0dHBWZXJzaW9uKCkKIHsKICAgICBpZiAoIW1faGFuZGxlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAppbmRleCAw
ZTYzZGU4Y2Y2Yy4uNzYyMmE4ZjA4MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCkBAIC0xMDYsNiArMTA2LDggQEAgcHVibGlj
OgogICAgIGNvbnN0IEN1cmxQcm94eVNldHRpbmdzJiBwcm94eVNldHRpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm94eVNldHRpbmdzOyB9CiAgICAgdm9pZCBzZXRQcm94eVNldHRpbmdzKGNvbnN0
IEN1cmxQcm94eVNldHRpbmdzJiBzZXR0aW5ncykgeyBtX3Byb3h5U2V0dGluZ3MgPSBzZXR0aW5n
czsgfQogICAgIHZvaWQgc2V0UHJveHlVc2VyUGFzcyhjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0
IFN0cmluZyYgcGFzc3dvcmQpIHsgbV9wcm94eVNldHRpbmdzLnNldFVzZXJQYXNzKHVzZXIsIHBh
c3N3b3JkKTsgfQorICAgIHZvaWQgc2V0RGVmYXVsdFByb3h5QXV0aE1ldGhvZCgpIHsgbV9wcm94
eVNldHRpbmdzLnNldERlZmF1bHRBdXRoTWV0aG9kKCk7IH0KKyAgICB2b2lkIHNldFByb3h5QXV0
aE1ldGhvZChsb25nIGF1dGhNZXRob2QpIHsgbV9wcm94eVNldHRpbmdzLnNldEF1dGhNZXRob2Qo
YXV0aE1ldGhvZCk7IH0KIAogICAgIC8vIFNTTAogICAgIEN1cmxTU0xIYW5kbGUmIHNzbEhhbmRs
ZSgpIHsgcmV0dXJuIG1fc3NsSGFuZGxlOyB9CkBAIC0yNjYsMTEgKzI2OCwxMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKGN1cmxfc3NsX2N0eF9jYWxsYmFj
aywgdm9pZCopOwogCiAgICAgLy8gU3RhdHVzCi0gICAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4g
Z2V0UHJpbWFyeVBvcnQoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gcHJveHlVcmwoKTsK
ICAgICBzdGQ6Om9wdGlvbmFsPGxvbmc+IGdldFJlc3BvbnNlQ29kZSgpOwogICAgIHN0ZDo6b3B0
aW9uYWw8bG9uZz4gZ2V0SHR0cENvbm5lY3RDb2RlKCk7CiAgICAgc3RkOjpvcHRpb25hbDxsb25n
IGxvbmc+IGdldENvbnRlbnRMZW5ndGgoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGxvbmc+IGdldEh0
dHBBdXRoQXZhaWwoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPGxvbmc+IGdldFByb3h5QXV0aEF2YWls
KCk7CiAgICAgc3RkOjpvcHRpb25hbDxsb25nPiBnZXRIdHRwVmVyc2lvbigpOwogICAgIHN0ZDo6
b3B0aW9uYWw8TmV0d29ya0xvYWRNZXRyaWNzPiBnZXROZXR3b3JrTG9hZE1ldHJpY3MoKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxQcm94
eVNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
UHJveHlTZXR0aW5ncy5jcHAKaW5kZXggMmIwZmZjNTFkOGEuLmQ0YjgzZjI3MGYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGlu
Z3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUHJv
eHlTZXR0aW5ncy5jcHAKQEAgLTI4LDYgKzI4LDEyIEBACiAKICNpZiBVU0UoQ1VSTCkKIAorI2lm
IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisKKyNpbmNsdWRl
IDxjdXJsL2N1cmwuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgdWlu
dDE2X3QgU29ja3NQcm94eVBvcnQgPSAxMDgwOwpAQCAtNjEsNiArNjcsMjIgQEAgdm9pZCBDdXJs
UHJveHlTZXR0aW5nczo6c2V0VXNlclBhc3MoY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJp
bmcmIHBhc3N3b3JkKQogICAgIHJlYnVpbGRVcmwoKTsKIH0KIAordm9pZCBDdXJsUHJveHlTZXR0
aW5nczo6c2V0QXV0aE1ldGhvZChsb25nIGF1dGhNZXRob2QpCit7CisgICAgbG9uZyBtZXRob2Qg
PSBDVVJMQVVUSF9OT05FOworICAgIGlmIChhdXRoTWV0aG9kICYgQ1VSTEFVVEhfQkFTSUMpCisg
ICAgICAgIG1ldGhvZCA9IENVUkxBVVRIX0JBU0lDOworICAgIGlmIChhdXRoTWV0aG9kICYgQ1VS
TEFVVEhfTlRMTSkKKyAgICAgICAgbWV0aG9kID0gQ1VSTEFVVEhfTlRMTTsKKyAgICBpZiAoYXV0
aE1ldGhvZCAmIENVUkxBVVRIX0RJR0VTVCkKKyAgICAgICAgbWV0aG9kID0gQ1VSTEFVVEhfRElH
RVNUOworICAgIGlmIChhdXRoTWV0aG9kICYgQ1VSTEFVVEhfTkVHT1RJQVRFKQorICAgICAgICBt
ZXRob2QgPSBDVVJMQVVUSF9ORUdPVElBVEU7CisKKyAgICBpZiAobV9hdXRoTWV0aG9kICE9IG1l
dGhvZCkKKyAgICAgICAgbV9hdXRoTWV0aG9kID0gbWV0aG9kOworfQorCiBzdGF0aWMgYm9vbCBw
cm90b2NvbElzSW5Tb2Nrc0ZhbWlseShjb25zdCBVUkwmIHVybCkKIHsKICAgICByZXR1cm4gdXJs
LnByb3RvY29sSXMoInNvY2tzNCIpIHx8IHVybC5wcm90b2NvbElzKCJzb2NrczRhIikgfHwgdXJs
LnByb3RvY29sSXMoInNvY2tzNSIpIHx8IHVybC5wcm90b2NvbElzKCJzb2NrczVoIik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0
dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUHJveHlT
ZXR0aW5ncy5oCmluZGV4IGYxMWRlYjk1ZTAxLi45MDBmNTZiODcxOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxQcm94eVNldHRpbmdzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxQcm94eVNldHRpbmdz
LmgKQEAgLTI4LDYgKzI4LDkgQEAKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAorI2RlZmluZSBDVVJMQVVUSF9ESUdFU1RfSUUgICAgKCgodW5zaWdu
ZWQgbG9uZykxKTw8NCkKKyNkZWZpbmUgQ1VSTEFVVEhfQU5ZICAgICAgICAgICh+Q1VSTEFVVEhf
RElHRVNUX0lFKQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cmxQcm94eVNldHRp
bmdzIHsKQEAgLTU1LDEwICs1OCwxNSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nIHVzZXIo
KSBjb25zdCB7IHJldHVybiBtX3VybC51c2VyKCk7IH0KICAgICBjb25zdCBTdHJpbmcgcGFzc3dv
cmQoKSBjb25zdCB7IHJldHVybiBtX3VybC5wYXNzKCk7IH0KIAorICAgIHZvaWQgc2V0RGVmYXVs
dEF1dGhNZXRob2QoKSB7IG1fYXV0aE1ldGhvZCA9IENVUkxBVVRIX0FOWTsgfQorICAgIHZvaWQg
c2V0QXV0aE1ldGhvZChsb25nKTsKKyAgICBsb25nIGF1dGhNZXRob2QoKSBjb25zdCB7IHJldHVy
biBtX2F1dGhNZXRob2Q7IH0KKwogcHJpdmF0ZToKICAgICBNb2RlIG1fbW9kZSB7IE1vZGU6OkRl
ZmF1bHQgfTsKICAgICBVUkwgbV91cmw7CiAgICAgU3RyaW5nIG1faWdub3JlSG9zdHM7CisgICAg
bG9uZyBtX2F1dGhNZXRob2QgeyBzdGF0aWNfY2FzdDxsb25nPihDVVJMQVVUSF9BTlkpIH07CiAK
ICAgICAvLyBXZSBjYW4ndCBzaW1wbHkgdXNlIG1fdXJsLnN0cmluZygpIGJlY2F1c2Ugd2UgbmVl
ZCB0byBleHBsaWNpdGx5IGluZGljYXRlIHRoZSBwb3J0IG51bWJlcgogICAgIC8vIHRvIGxpYmN1
cmwuIFVSTFBhcnNlciBvbWl0IHRoZSBkZWZhdWx0IHBvcnQgd2hpbGUgcGFyc2luZywgYnV0IGxp
YmN1cmwgYXNzdW1lIDEwODAgYXMgYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAKaW5kZXggMDMzNWE2N2I5NTguLjhlM2NkMzRh
YmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVxdWVzdC5jcHAKQEAgLTMxNywxOCArMzE3LDI0IEBAIHNpemVfdCBDdXJsUmVxdWVzdDo6
ZGlkUmVjZWl2ZUhlYWRlcihTdHJpbmcmJiBoZWFkZXIpCiAgICAgaWYgKGF1dG8gbGVuZ3RoID0g
bV9jdXJsSGFuZGxlLT5nZXRDb250ZW50TGVuZ3RoKCkpCiAgICAgICAgIG1fcmVzcG9uc2UuZXhw
ZWN0ZWRDb250ZW50TGVuZ3RoID0gKmxlbmd0aDsKIAotICAgIGlmIChhdXRvIHBvcnQgPSBtX2N1
cmxIYW5kbGUtPmdldFByaW1hcnlQb3J0KCkpCi0gICAgICAgIG1fcmVzcG9uc2UuY29ubmVjdFBv
cnQgPSAqcG9ydDsKKyAgICBpZiAoYXV0byBwcm94eVVybCA9IG1fY3VybEhhbmRsZS0+cHJveHlV
cmwoKSkKKyAgICAgICAgbV9yZXNwb25zZS5wcm94eVVybCA9IFVSTChVUkwoKSwgKnByb3h5VXJs
KTsKIAogICAgIGlmIChhdXRvIGF1dGggPSBtX2N1cmxIYW5kbGUtPmdldEh0dHBBdXRoQXZhaWwo
KSkKICAgICAgICAgbV9yZXNwb25zZS5hdmFpbGFibGVIdHRwQXV0aCA9ICphdXRoOwogCisgICAg
aWYgKGF1dG8gYXV0aCA9IG1fY3VybEhhbmRsZS0+Z2V0UHJveHlBdXRoQXZhaWwoKSkKKyAgICAg
ICAgbV9yZXNwb25zZS5hdmFpbGFibGVQcm94eUF1dGggPSAqYXV0aDsKKwogICAgIGlmIChhdXRv
IHZlcnNpb24gPSBtX2N1cmxIYW5kbGUtPmdldEh0dHBWZXJzaW9uKCkpCiAgICAgICAgIG1fcmVz
cG9uc2UuaHR0cFZlcnNpb24gPSAqdmVyc2lvbjsKIAogICAgIGlmIChhdXRvIG1ldHJpY3MgPSBt
X2N1cmxIYW5kbGUtPmdldE5ldHdvcmtMb2FkTWV0cmljcygpKQogICAgICAgICBtX25ldHdvcmtM
b2FkTWV0cmljcyA9ICptZXRyaWNzOwogCisgICAgaWYgKG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJv
eHlBdXRoKQorICAgICAgICBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuc2V0UHJveHlBdXRoTWV0
aG9kKG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJveHlBdXRoKTsKKwogICAgIGlmIChtX2VuYWJsZU11
bHRpcGFydCkKICAgICAgICAgbV9tdWx0aXBhcnRIYW5kbGUgPSBDdXJsTXVsdGlwYXJ0SGFuZGxl
OjpjcmVhdGVJZk5lZWRlZCgqdGhpcywgbV9yZXNwb25zZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzcG9uc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzcG9uc2UuaAppbmRleCBjNmE1MDI3
YjdkMS4uMzczNjYxYmQzNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsUmVzcG9uc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFJlc3BvbnNlLmgKQEAgLTQ1LDggKzQ1LDkgQEAgcHVibGljOgogICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgICAgICBjb3B5
LmhlYWRlcnMuYXBwZW5kKGhlYWRlci5pc29sYXRlZENvcHkoKSk7CiAKLSAgICAgICAgY29weS5j
b25uZWN0UG9ydCA9IGNvbm5lY3RQb3J0OworICAgICAgICBjb3B5LnByb3h5VXJsID0gcHJveHlV
cmwuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgIGNvcHkuYXZhaWxhYmxlSHR0cEF1dGggPSBhdmFp
bGFibGVIdHRwQXV0aDsKKyAgICAgICAgY29weS5hdmFpbGFibGVQcm94eUF1dGggPSBhdmFpbGFi
bGVQcm94eUF1dGg7CiAgICAgICAgIGNvcHkuaHR0cFZlcnNpb24gPSBodHRwVmVyc2lvbjsKIAog
ICAgICAgICByZXR1cm4gY29weTsKQEAgLTU4LDggKzU5LDkgQEAgcHVibGljOgogICAgIGxvbmcg
bG9uZyBleHBlY3RlZENvbnRlbnRMZW5ndGggeyAwIH07CiAgICAgVmVjdG9yPFN0cmluZz4gaGVh
ZGVyczsKIAotICAgIHVpbnQxNl90IGNvbm5lY3RQb3J0IHsgMCB9OworICAgIFVSTCBwcm94eVVy
bDsKICAgICBsb25nIGF2YWlsYWJsZUh0dHBBdXRoIHsgMCB9OworICAgIGxvbmcgYXZhaWxhYmxl
UHJveHlBdXRoIHsgMCB9OwogICAgIGxvbmcgaHR0cFZlcnNpb24geyAwIH07CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNw
b25zZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVz
cG9uc2UuaAppbmRleCA3MDQ5ZWM1Zjg0Ny4uNGZhMDRlNDUyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2UuaApA
QCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1NlZU90aGVyKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc05vdE1vZGlmaWVkKCkgY29uc3Q7CiAgICAgYm9vbCBpc1VuYXV0aG9yaXplZCgp
IGNvbnN0OworICAgIGJvb2wgaXNQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQoKSBjb25zdDsK
IAogICAgIC8vIE5lZWRlZCBmb3IgY29tcGF0aWJpbGl0eS4KICAgICBDRlVSTFJlc3BvbnNlUmVm
IGNmVVJMUmVzcG9uc2UoKSBjb25zdCB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZUN1cmwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VDdXJs
LmNwcAppbmRleCBiMzMxZGQ1NTAyZC4uYWM0NWJhMmI3YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VD
dXJsLmNwcApAQCAtMTg4LDYgKzE4OCwxMSBAQCBib29sIFJlc291cmNlUmVzcG9uc2U6OmlzVW5h
dXRob3JpemVkKCkgY29uc3QKICAgICByZXR1cm4gaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDE7CiB9
CiAKK2Jvb2wgUmVzb3VyY2VSZXNwb25zZTo6aXNQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQo
KSBjb25zdAoreworICAgIHJldHVybiBodHRwU3RhdHVzQ29kZSgpID09IDQwNzsKK30KKwogfQog
CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>343088</attachid>
            <date>2018-06-19 12:55:52 -0700</date>
            <delta_ts>2018-06-19 15:40:35 -0700</delta_ts>
            <desc>FIX</desc>
            <filename>185266.diff</filename>
            <type>text/plain</type>
            <size>19048</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmODM1OTIyZDc4Yi4uNjk2NzU5NGI0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOC0wNi0xOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEVuYWJsZSBQcm94eSBBdXRoZW50aWNhdGlvbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTI2NgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBQcm94eSBBdXRoZW50aWNhdGlvbiB0byBjdXJsIG5ldHdv
cmsgbGF5ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGluIHB1YmxpYy4gVGVzdGVkIGludGVybmFsbHkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDdXJsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9u
U3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlRnJvbUhhbmRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6ZGV0ZXJtaW5lUHJveHlQb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjphdXRoZW50aWNhdGlvblNjaGVtZUZy
b21DdXJsQXV0aCk6CisgICAgICAgIChXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6
cGFyc2VSZWFsbSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZVByb3h5SWZFeGlzdHMp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0UHJveHlVcmwpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0UHJveHlBdXRoQXZhaWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEhhbmRsZTo6Z2V0UHJpbWFyeVBvcnQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENv
bnRleHQ6OnNldERlZmF1bHRQcm94eUF1dGhNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bENvbnRleHQ6OnNldFByb3h5QXV0aE1ldGhvZCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxQcm94eVNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWlu
ZUF1dGhNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3M6OnNldEF1
dGhNZXRob2QpOgorICAgICAgICAoV2ViQ29yZTo6cHJvdG9jb2xJc0luU29ja3NGYW1pbHkpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUHJveHlTZXR0aW5ncy5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3M6OnNldERlZmF1bHRBdXRoTWV0aG9kKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxQcm94eVNldHRpbmdzOjphdXRoTWV0aG9kIGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybFJlcXVlc3Q6OmRpZFJlY2VpdmVIZWFkZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVzcG9uc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxSZXNwb25zZTo6aXNvbGF0ZWRDb3B5IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlOjppc1Byb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCBjb25zdCk6CisKIDIwMTgt
MDYtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJDb3Jl
TlNVUkxTZXNzaW9uRGF0YVRhc2tDbGllbnQ6OnJlZGlyZWN0UmVjZWl2ZWQoKSBjYWxscyBXZWJD
b3JlIG9uIG5vbi1tYWluIHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAppbmRleCA2
MDNjMTQ3YzY1OS4uMjE3MWNhZjgxODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDgsOCArNDgsMTEgQEAgcHVibGljOgogICAgIEF1dGhlbnRpY2F0aW9uQ2xpZW50KiBhdXRoZW50
aWNhdGlvbkNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0aGVudGljYXRpb25DbGllbnQuZ2V0
KCk7IH0KIAogcHJpdmF0ZToKLSAgICBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHByb3RlY3Rp
b25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKGNvbnN0IFVSTCYpOworICAgIFByb3RlY3Rpb25TcGFj
ZVNlcnZlclR5cGUgcHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkoY29uc3QgVVJMJiwg
Ym9vbCBpc0ZvclByb3h5KTsKICAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlRnJv
bUhhbmRsZShjb25zdCBDdXJsUmVzcG9uc2UmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgaW50IGRldGVybWluZVByb3h5UG9ydChjb25zdCBVUkwmKTsKKyAgICBQcm90ZWN0aW9uU3Bh
Y2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNjaGVtZUZyb21DdXJsQXV0aChs
b25nKTsKKyAgICBTdHJpbmcgcGFyc2VSZWFsbShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAg
ICAgdm9pZCByZW1vdmVMZWFkaW5nQW5kVHJhaWxpbmdRdW90ZXMoU3RyaW5nJik7CiAKICAgICBS
ZWZQdHI8QXV0aGVudGljYXRpb25DbGllbnQ+IG1fYXV0aGVudGljYXRpb25DbGllbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwCmluZGV4IGEzMDY5ZTUzYTFhLi5mOTMy
ZmYzMzlkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ3VybC5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAs
NDMgKzQwLDc1IEBAIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShjb25zdCBDdXJsUmVzcG9uc2UmIGN1cmxSZXNwb25zCiB7CiB9CiAKLVByb3RlY3Rpb25T
cGFjZVNlcnZlclR5cGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OnByb3RlY3Rpb25TcGFjZVNl
cnZlclR5cGVGcm9tVVJJKGNvbnN0IFVSTCYgdXJsKQorUHJvdGVjdGlvblNwYWNlU2VydmVyVHlw
ZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21V
UkkoY29uc3QgVVJMJiB1cmwsIGJvb2wgaXNGb3JQcm94eSkKIHsKICAgICBpZiAodXJsLnByb3Rv
Y29sSXMoImh0dHBzIikpCi0gICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQ
UzsKKyAgICAgICAgcmV0dXJuIGlzRm9yUHJveHkgPyBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFBT
IDogUHJvdGVjdGlvblNwYWNlU2VydmVySFRUUFM7CiAgICAgaWYgKHVybC5wcm90b2NvbElzKCJo
dHRwIikpCi0gICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQOworICAgICAg
ICByZXR1cm4gaXNGb3JQcm94eSA/IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUCA6IFByb3RlY3Rp
b25TcGFjZVNlcnZlckhUVFA7CiAgICAgaWYgKHVybC5wcm90b2NvbElzKCJmdHAiKSkKLSAgICAg
ICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZVNlcnZlckZUUDsKLSAgICByZXR1cm4gUHJvdGVjdGlv
blNwYWNlU2VydmVySFRUUDsKKyAgICAgICAgcmV0dXJuIGlzRm9yUHJveHkgPyBQcm90ZWN0aW9u
U3BhY2VQcm94eUZUUCA6IFByb3RlY3Rpb25TcGFjZVNlcnZlckZUUDsKKyAgICByZXR1cm4gaXNG
b3JQcm94eSA/IFByb3RlY3Rpb25TcGFjZVByb3h5SFRUUCA6IFByb3RlY3Rpb25TcGFjZVNlcnZl
ckhUVFA7CiB9CiAKIFByb3RlY3Rpb25TcGFjZSBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTo6cHJv
dGVjdGlvblNwYWNlRnJvbUhhbmRsZShjb25zdCBDdXJsUmVzcG9uc2UmIGN1cmxSZXNwb25zZSwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgYXV0byBwb3J0ID0gY3Vy
bFJlc3BvbnNlLmNvbm5lY3RQb3J0OwotICAgIGF1dG8gYXZhaWxhYmxlSHR0cEF1dGggPSBjdXJs
UmVzcG9uc2UuYXZhaWxhYmxlSHR0cEF1dGg7Ci0KLSAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZSBzY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZVVua25vd247Ci0gICAgaWYgKGF2YWlsYWJsZUh0dHBBdXRoICYgQ1VSTEFVVEhfQkFTSUMpCi0g
ICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUEJh
c2ljOwotICAgIGlmIChhdmFpbGFibGVIdHRwQXV0aCAmIENVUkxBVVRIX0RJR0VTVCkKLSAgICAg
ICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGlnZXN0
OwotICAgIGlmIChhdmFpbGFibGVIdHRwQXV0aCAmIENVUkxBVVRIX05FR09USUFURSkKLSAgICAg
ICAgc2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOZWdvdGlhdGU7
Ci0gICAgaWYgKGF2YWlsYWJsZUh0dHBBdXRoICYgQ1VSTEFVVEhfTlRMTSkKLSAgICAgICAgc2No
ZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOworICAgIGlmICgh
cmVzcG9uc2UuaXNVbmF1dGhvcml6ZWQoKSAmJiAhcmVzcG9uc2UuaXNQcm94eUF1dGhlbnRpY2F0
aW9uUmVxdWlyZWQoKSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZSgpOworCisgICAg
YXV0byBpc1Byb3h5QXV0aCA9IHJlc3BvbnNlLmlzUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVk
KCk7CisgICAgY29uc3QgYXV0byYgdXJsID0gaXNQcm94eUF1dGggPyBjdXJsUmVzcG9uc2UucHJv
eHlVcmwgOiByZXNwb25zZS51cmwoKTsKKyAgICBhdXRvIHBvcnQgPSBkZXRlcm1pbmVQcm94eVBv
cnQodXJsKTsKKyAgICBhdXRvIHNlcnZlclR5cGUgPSBwcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBl
RnJvbVVSSSh1cmwsIGlzUHJveHlBdXRoKTsKKyAgICBhdXRvIGF1dGhlbnRpY2F0aW9uU2NoZW1l
ID0gYXV0aGVudGljYXRpb25TY2hlbWVGcm9tQ3VybEF1dGgoaXNQcm94eUF1dGggPyBjdXJsUmVz
cG9uc2UuYXZhaWxhYmxlUHJveHlBdXRoIDogY3VybFJlc3BvbnNlLmF2YWlsYWJsZUh0dHBBdXRo
KTsKKworICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2UodXJsLmhvc3QoKS50b1N0cmluZygpLCBw
b3J0LCBzZXJ2ZXJUeXBlLCBwYXJzZVJlYWxtKHJlc3BvbnNlKSwgYXV0aGVudGljYXRpb25TY2hl
bWUpOworfQorCitpbnQgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OmRldGVybWluZVByb3h5UG9y
dChjb25zdCBVUkwmIHVybCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDE2X3Qgc29ja3NQb3J0
ID0gMTA4MDsKKworICAgIGlmIChhdXRvIHBvcnQgPSB1cmwucG9ydCgpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PigqcG9ydCk7CisKKyAgICBpZiAoYXV0byBwb3J0ID0gZGVmYXVs
dFBvcnRGb3JQcm90b2NvbCh1cmwucHJvdG9jb2woKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQ+KCpwb3J0KTsKKworICAgIGlmIChwcm90b2NvbElzSW5Tb2Nrc0ZhbWlseSh1cmwp
KQorICAgICAgICByZXR1cm4gc29ja3NQb3J0OworCisgICAgcmV0dXJuIDA7Cit9CisKK1Byb3Rl
Y3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjph
dXRoZW50aWNhdGlvblNjaGVtZUZyb21DdXJsQXV0aChsb25nIGN1cmxBdXRoKQoreworICAgIGlm
IChjdXJsQXV0aCAmIENVUkxBVVRIX05UTE0pCisgICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3Bh
Y2VBdXRoZW50aWNhdGlvblNjaGVtZU5UTE07CisgICAgaWYgKGN1cmxBdXRoICYgQ1VSTEFVVEhf
TkVHT1RJQVRFKQorICAgICAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVOZWdvdGlhdGU7CisgICAgaWYgKGN1cmxBdXRoICYgQ1VSTEFVVEhfRElHRVNUKQorICAg
ICAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQRGlnZXN0
OworICAgIGlmIChjdXJsQXV0aCAmIENVUkxBVVRIX0JBU0lDKQorICAgICAgICByZXR1cm4gUHJv
dGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWM7CisgICAgcmV0dXJuIFBy
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lVW5rbm93bjsKK30KKworU3RyaW5nIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpwYXJzZVJlYWxtKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IHd3d0F1dGhl
bnRpY2F0ZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgid3d3LWF1dGhlbnRpY2F0ZSIpKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBwcm94eUF1dGhlbnRpY2F0ZShNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgicHJveHktYXV0aGVudGljYXRlIikpOworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IHJlYWxtU3RyaW5nKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJy
ZWFsbT0iKSk7CiAKICAgICBTdHJpbmcgcmVhbG07Ci0gICAgY29uc3QgU3RyaW5nIHJlYWxtU3Ry
aW5nKCJyZWFsbT0iKTsKLSAgICBhdXRvIGF1dGhIZWFkZXIgPSByZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoU3RyaW5nKCJ3d3ctYXV0aGVudGljYXRlIikpOworICAgIGF1dG8gYXV0aEhlYWRlciA9
IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChyZXNwb25zZS5pc1VuYXV0aG9yaXplZCgpID8gd3d3
QXV0aGVudGljYXRlIDogcHJveHlBdXRoZW50aWNhdGUpOwogICAgIGF1dG8gcmVhbG1Qb3MgPSBh
dXRoSGVhZGVyLmZpbmRJZ25vcmluZ0FTQ0lJQ2FzZShyZWFsbVN0cmluZyk7CiAgICAgaWYgKHJl
YWxtUG9zICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgIHJlYWxtID0gYXV0aEhlYWRlci5zdWJzdHJp
bmcocmVhbG1Qb3MgKyByZWFsbVN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIHJlYWxtID0gYXV0
aEhlYWRlci5zdWJzdHJpbmcocmVhbG1Qb3MgKyByZWFsbVN0cmluZy5nZXQoKS5sZW5ndGgoKSk7
CiAgICAgICAgIHJlYWxtID0gcmVhbG0ubGVmdChyZWFsbS5maW5kKCcsJykpOwogICAgICAgICBy
ZW1vdmVMZWFkaW5nQW5kVHJhaWxpbmdRdW90ZXMocmVhbG0pOwogICAgIH0KLQotICAgIHJldHVy
biBQcm90ZWN0aW9uU3BhY2UocmVzcG9uc2UudXJsKCkuaG9zdCgpLnRvU3RyaW5nKCksIHN0YXRp
Y19jYXN0PGludD4ocG9ydCksIHByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKHJlc3Bv
bnNlLnVybCgpKSwgcmVhbG0sIHNjaGVtZSk7CisgICAgcmV0dXJuIHJlYWxtOwogfQogCiB2b2lk
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpyZW1vdmVMZWFkaW5nQW5kVHJhaWxpbmdRdW90ZXMo
U3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybENvbnRleHQuY3BwCmluZGV4IDE2Mzk0OTZhMzM5Li4xZjBhYzI3NGY0MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRl
eHQuY3BwCkBAIC01MDEsNyArNTAxLDcgQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFibGVQcm94eUlm
RXhpc3RzKCkKICAgICAgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRf
UFJPWFlVU0VSTkFNRSwgcHJveHkudXNlcigpLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBpZiAo
IXByb3h5LnBhc3N3b3JkKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY3VybF9lYXN5X3NldG9w
dChtX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWVBBU1NXT1JELCBwcm94eS5wYXNzd29yZCgpLnV0Zjgo
KS5kYXRhKCkpOwotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BS
T1hZQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRs
ZSwgQ1VSTE9QVF9QUk9YWUFVVEgsIHByb3h5LmF1dGhNZXRob2QoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgQ3VybFByb3h5U2V0dGluZ3M6Ok1vZGU6Ok5vUHJveHkgOgogICAgICAgICAv
LyBEaXNhYmxlIHRoZSB1c2Ugb2YgYSBwcm94eSwgZXZlbiBpZiB0aGVyZSBpcyBhbiBlbnZpcm9u
bWVudCB2YXJpYWJsZSBzZXQgZm9yIGl0LgpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgQ3VybEhh
bmRsZTo6ZW5hYmxlUHJveHlJZkV4aXN0cygpCiAgICAgY2FzZSBDdXJsUHJveHlTZXR0aW5nczo6
TW9kZTo6Q3VzdG9tIDoKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9Q
VF9QUk9YWSwgcHJveHkudXJsKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGN1cmxfZWFzeV9z
ZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfTk9QUk9YWSwgcHJveHkuaWdub3JlSG9zdHMoKS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9Q
Uk9YWUFVVEgsIENVUkxBVVRIX0FOWSk7CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5k
bGUsIENVUkxPUFRfUFJPWFlBVVRILCBwcm94eS5hdXRoTWV0aG9kKCkpOwogICAgICAgICBicmVh
azsKICAgICB9CiB9CkBAIC01NjAsMjEgKzU2MCwxMyBAQCB2b2lkIEN1cmxIYW5kbGU6OnNldFNz
bEN0eENhbGxiYWNrRnVuY3Rpb24oY3VybF9zc2xfY3R4X2NhbGxiYWNrIGNhbGxiYWNrRnVuYywg
dgogICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU1NMX0NUWF9GVU5DVElP
TiwgY2FsbGJhY2tGdW5jKTsKIH0KIAotc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gQ3VybEhhbmRs
ZTo6Z2V0UHJpbWFyeVBvcnQoKQorc3RkOjpvcHRpb25hbDxTdHJpbmc+IEN1cmxIYW5kbGU6Omdl
dFByb3h5VXJsKCkKIHsKLSAgICBpZiAoIW1faGFuZGxlKQotICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwotCi0gICAgbG9uZyBwb3J0OwotICAgIENVUkxjb2RlIGVycm9yQ29kZSA9IGN1cmxf
ZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJMSU5GT19QUklNQVJZX1BPUlQsICZwb3J0KTsKLSAg
ICBpZiAoZXJyb3JDb2RlICE9IENVUkxFX09LKQorICAgIGF1dG8mIHByb3h5ID0gQ3VybENvbnRl
eHQ6OnNpbmdsZXRvbigpLnByb3h5U2V0dGluZ3MoKTsKKyAgICBpZiAocHJveHkubW9kZSgpID09
IEN1cmxQcm94eVNldHRpbmdzOjpNb2RlOjpEZWZhdWx0KQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgLyoKLSAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vY3VybC9jdXJsL2Js
b2IvbWFzdGVyL2xpYi9jb25uZWN0LmMjTDYxMi1MNjYwCi0gICAgICogY29uZmlybWVkIHRoYXQg
YHBvcnRgIGlzIG9yaWdpbmFsbHkgdW5zaWduZWQgc2hvcnQuCi0gICAgICovCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVpbnQxNl90Pihwb3J0KTsKKyAgICByZXR1cm4gcHJveHkudXJsKCk7CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8bG9uZz4gQ3VybEhhbmRsZTo6Z2V0UmVzcG9uc2VDb2RlKCkKQEAg
LTYzMCw2ICs2MjIsMTkgQEAgc3RkOjpvcHRpb25hbDxsb25nPiBDdXJsSGFuZGxlOjpnZXRIdHRw
QXV0aEF2YWlsKCkKICAgICByZXR1cm4gaHR0cEF1dGhBdmFpbGFibGU7CiB9CiAKK3N0ZDo6b3B0
aW9uYWw8bG9uZz4gQ3VybEhhbmRsZTo6Z2V0UHJveHlBdXRoQXZhaWwoKQoreworICAgIGlmICgh
bV9oYW5kbGUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBsb25nIHByb3h5
QXV0aEF2YWlsYWJsZTsKKyAgICBDVVJMY29kZSBlcnJvckNvZGUgPSBjdXJsX2Vhc3lfZ2V0aW5m
byhtX2hhbmRsZSwgQ1VSTElORk9fUFJPWFlBVVRIX0FWQUlMLCAmcHJveHlBdXRoQXZhaWxhYmxl
KTsKKyAgICBpZiAoZXJyb3JDb2RlICE9IENVUkxFX09LKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIHByb3h5QXV0aEF2YWlsYWJsZTsKK30KKwogc3RkOjpvcHRp
b25hbDxsb25nPiBDdXJsSGFuZGxlOjpnZXRIdHRwVmVyc2lvbigpCiB7CiAgICAgaWYgKCFtX2hh
bmRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmgKaW5kZXggOTY3N2UwYTMxZjguLjRmY2Y5YmU5YmQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaApAQCAtMTA2LDYg
KzEwNiw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBDdXJsUHJveHlTZXR0aW5ncyYgcHJveHlTZXR0
aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fcHJveHlTZXR0aW5nczsgfQogICAgIHZvaWQgc2V0UHJv
eHlTZXR0aW5ncyhjb25zdCBDdXJsUHJveHlTZXR0aW5ncyYgc2V0dGluZ3MpIHsgbV9wcm94eVNl
dHRpbmdzID0gc2V0dGluZ3M7IH0KICAgICB2b2lkIHNldFByb3h5VXNlclBhc3MoY29uc3QgU3Ry
aW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKSB7IG1fcHJveHlTZXR0aW5ncy5zZXRV
c2VyUGFzcyh1c2VyLCBwYXNzd29yZCk7IH0KKyAgICB2b2lkIHNldERlZmF1bHRQcm94eUF1dGhN
ZXRob2QoKSB7IG1fcHJveHlTZXR0aW5ncy5zZXREZWZhdWx0QXV0aE1ldGhvZCgpOyB9CisgICAg
dm9pZCBzZXRQcm94eUF1dGhNZXRob2QobG9uZyBhdXRoTWV0aG9kKSB7IG1fcHJveHlTZXR0aW5n
cy5zZXRBdXRoTWV0aG9kKGF1dGhNZXRob2QpOyB9CiAKICAgICAvLyBTU0wKICAgICBDdXJsU1NM
SGFuZGxlJiBzc2xIYW5kbGUoKSB7IHJldHVybiBtX3NzbEhhbmRsZTsgfQpAQCAtMjY3LDExICsy
NjksMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbihjdXJs
X3NzbF9jdHhfY2FsbGJhY2ssIHZvaWQqKTsKIAogICAgIC8vIFN0YXR1cwotICAgIHN0ZDo6b3B0
aW9uYWw8dWludDE2X3Q+IGdldFByaW1hcnlQb3J0KCk7CisgICAgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IGdldFByb3h5VXJsKCk7CiAgICAgc3RkOjpvcHRpb25hbDxsb25nPiBnZXRSZXNwb25zZUNv
ZGUoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGxvbmc+IGdldEh0dHBDb25uZWN0Q29kZSgpOwogICAg
IHN0ZDo6b3B0aW9uYWw8bG9uZyBsb25nPiBnZXRDb250ZW50TGVuZ3RoKCk7CiAgICAgc3RkOjpv
cHRpb25hbDxsb25nPiBnZXRIdHRwQXV0aEF2YWlsKCk7CisgICAgc3RkOjpvcHRpb25hbDxsb25n
PiBnZXRQcm94eUF1dGhBdmFpbCgpOwogICAgIHN0ZDo6b3B0aW9uYWw8bG9uZz4gZ2V0SHR0cFZl
cnNpb24oKTsKICAgICBzdGQ6Om9wdGlvbmFsPE5ldHdvcmtMb2FkTWV0cmljcz4gZ2V0TmV0d29y
a0xvYWRNZXRyaWNzKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsUHJveHlTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGluZ3MuY3BwCmluZGV4IDJiMGZmYzUxZDhhLi40
Y2FmMGFkMzRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxQcm94eVNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGluZ3MuY3BwCkBAIC0yOCwxMSArMjgsMTYgQEAKIAog
I2lmIFVTRShDVVJMKQogCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+
CisjZW5kaWYKKworI2luY2x1ZGUgPGN1cmwvY3VybC5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0YXRpYyBjb25zdCB1aW50MTZfdCBTb2Nrc1Byb3h5UG9ydCA9IDEwODA7CiAKLXN0YXRp
YyBib29sIHByb3RvY29sSXNJblNvY2tzRmFtaWx5KGNvbnN0IFVSTCYpOwogc3RhdGljIHN0ZDo6
b3B0aW9uYWw8dWludDE2X3Q+IGdldFByb3h5UG9ydChjb25zdCBVUkwmKTsKIHN0YXRpYyBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gY3JlYXRlUHJveHlVcmwoY29uc3QgVVJMJik7CiAKQEAgLTYxLDcg
KzY2LDI1IEBAIHZvaWQgQ3VybFByb3h5U2V0dGluZ3M6OnNldFVzZXJQYXNzKGNvbnN0IFN0cmlu
ZyYgdXNlciwgY29uc3QgU3RyaW5nJiBwYXNzd29yZCkKICAgICByZWJ1aWxkVXJsKCk7CiB9CiAK
LXN0YXRpYyBib29sIHByb3RvY29sSXNJblNvY2tzRmFtaWx5KGNvbnN0IFVSTCYgdXJsKQorc3Rh
dGljIGxvbmcgZGV0ZXJtaW5lQXV0aE1ldGhvZChsb25nIGF1dGhNZXRob2QpCit7CisgICAgaWYg
KGF1dGhNZXRob2QgJiBDVVJMQVVUSF9ORUdPVElBVEUpCisgICAgICAgIHJldHVybiBDVVJMQVVU
SF9ORUdPVElBVEU7CisgICAgaWYgKGF1dGhNZXRob2QgJiBDVVJMQVVUSF9ESUdFU1QpCisgICAg
ICAgIHJldHVybiBDVVJMQVVUSF9ESUdFU1Q7CisgICAgaWYgKGF1dGhNZXRob2QgJiBDVVJMQVVU
SF9OVExNKQorICAgICAgICByZXR1cm4gQ1VSTEFVVEhfTlRMTTsKKyAgICBpZiAoYXV0aE1ldGhv
ZCAmIENVUkxBVVRIX0JBU0lDKQorICAgICAgICByZXR1cm4gQ1VSTEFVVEhfQkFTSUM7CisgICAg
cmV0dXJuIENVUkxBVVRIX05PTkU7Cit9CisKK3ZvaWQgQ3VybFByb3h5U2V0dGluZ3M6OnNldEF1
dGhNZXRob2QobG9uZyBhdXRoTWV0aG9kKQoreworICAgIG1fYXV0aE1ldGhvZCA9IGRldGVybWlu
ZUF1dGhNZXRob2QoYXV0aE1ldGhvZCk7Cit9CisKK2Jvb2wgcHJvdG9jb2xJc0luU29ja3NGYW1p
bHkoY29uc3QgVVJMJiB1cmwpCiB7CiAgICAgcmV0dXJuIHVybC5wcm90b2NvbElzKCJzb2NrczQi
KSB8fCB1cmwucHJvdG9jb2xJcygic29ja3M0YSIpIHx8IHVybC5wcm90b2NvbElzKCJzb2NrczUi
KSB8fCB1cmwucHJvdG9jb2xJcygic29ja3M1aCIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxQcm94eVNldHRpbmdzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGluZ3MuaAppbmRleCBm
MTFkZWI5NWUwMS4uMWU5MzIzOWVjOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsUHJveHlTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUHJveHlTZXR0aW5ncy5oCkBAIC0yOCw2ICsyOCw5
IEBACiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
KyNkZWZpbmUgQ1VSTEFVVEhfRElHRVNUX0lFICAgICgoKHVuc2lnbmVkIGxvbmcpIDEpIDw8IDQp
CisjZGVmaW5lIENVUkxBVVRIX0FOWSAgICAgICAgICAofkNVUkxBVVRIX0RJR0VTVF9JRSkKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJsUHJveHlTZXR0aW5ncyB7CkBAIC01NSwx
MCArNTgsMTUgQEAgcHVibGljOgogICAgIGNvbnN0IFN0cmluZyB1c2VyKCkgY29uc3QgeyByZXR1
cm4gbV91cmwudXNlcigpOyB9CiAgICAgY29uc3QgU3RyaW5nIHBhc3N3b3JkKCkgY29uc3QgeyBy
ZXR1cm4gbV91cmwucGFzcygpOyB9CiAKKyAgICB2b2lkIHNldERlZmF1bHRBdXRoTWV0aG9kKCkg
eyBtX2F1dGhNZXRob2QgPSBDVVJMQVVUSF9BTlk7IH0KKyAgICB2b2lkIHNldEF1dGhNZXRob2Qo
bG9uZyk7CisgICAgbG9uZyBhdXRoTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9hdXRoTWV0aG9k
OyB9CisKIHByaXZhdGU6CiAgICAgTW9kZSBtX21vZGUgeyBNb2RlOjpEZWZhdWx0IH07CiAgICAg
VVJMIG1fdXJsOwogICAgIFN0cmluZyBtX2lnbm9yZUhvc3RzOworICAgIGxvbmcgbV9hdXRoTWV0
aG9kIHsgc3RhdGljX2Nhc3Q8bG9uZz4oQ1VSTEFVVEhfQU5ZKSB9OwogCiAgICAgLy8gV2UgY2Fu
J3Qgc2ltcGx5IHVzZSBtX3VybC5zdHJpbmcoKSBiZWNhdXNlIHdlIG5lZWQgdG8gZXhwbGljaXRs
eSBpbmRpY2F0ZSB0aGUgcG9ydCBudW1iZXIKICAgICAvLyB0byBsaWJjdXJsLiBVUkxQYXJzZXIg
b21pdCB0aGUgZGVmYXVsdCBwb3J0IHdoaWxlIHBhcnNpbmcsIGJ1dCBsaWJjdXJsIGFzc3VtZSAx
MDgwIGFzIGEKQEAgLTY4LDQgKzc2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlYnVpbGRVcmwo
KTsKIH07CiAKK2Jvb2wgcHJvdG9jb2xJc0luU29ja3NGYW1pbHkoY29uc3QgVVJMJik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwCmluZGV4IDVhYTcyOGM5NzA2Li42ZTA3MDYwYWQ4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxS
ZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlcXVlc3QuY3BwCkBAIC0zMzMsMTggKzMzMywyNCBAQCBzaXplX3QgQ3VybFJlcXVlc3Q6OmRp
ZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYgaGVhZGVyKQogICAgIGlmIChhdXRvIGxlbmd0aCA9IG1f
Y3VybEhhbmRsZS0+Z2V0Q29udGVudExlbmd0aCgpKQogICAgICAgICBtX3Jlc3BvbnNlLmV4cGVj
dGVkQ29udGVudExlbmd0aCA9ICpsZW5ndGg7CiAKLSAgICBpZiAoYXV0byBwb3J0ID0gbV9jdXJs
SGFuZGxlLT5nZXRQcmltYXJ5UG9ydCgpKQotICAgICAgICBtX3Jlc3BvbnNlLmNvbm5lY3RQb3J0
ID0gKnBvcnQ7CisgICAgaWYgKGF1dG8gcHJveHlVcmwgPSBtX2N1cmxIYW5kbGUtPmdldFByb3h5
VXJsKCkpCisgICAgICAgIG1fcmVzcG9uc2UucHJveHlVcmwgPSBVUkwoVVJMKCksICpwcm94eVVy
bCk7CiAKICAgICBpZiAoYXV0byBhdXRoID0gbV9jdXJsSGFuZGxlLT5nZXRIdHRwQXV0aEF2YWls
KCkpCiAgICAgICAgIG1fcmVzcG9uc2UuYXZhaWxhYmxlSHR0cEF1dGggPSAqYXV0aDsKIAorICAg
IGlmIChhdXRvIGF1dGggPSBtX2N1cmxIYW5kbGUtPmdldFByb3h5QXV0aEF2YWlsKCkpCisgICAg
ICAgIG1fcmVzcG9uc2UuYXZhaWxhYmxlUHJveHlBdXRoID0gKmF1dGg7CisKICAgICBpZiAoYXV0
byB2ZXJzaW9uID0gbV9jdXJsSGFuZGxlLT5nZXRIdHRwVmVyc2lvbigpKQogICAgICAgICBtX3Jl
c3BvbnNlLmh0dHBWZXJzaW9uID0gKnZlcnNpb247CiAKICAgICBpZiAoYXV0byBtZXRyaWNzID0g
bV9jdXJsSGFuZGxlLT5nZXROZXR3b3JrTG9hZE1ldHJpY3MoKSkKICAgICAgICAgbV9uZXR3b3Jr
TG9hZE1ldHJpY3MgPSAqbWV0cmljczsKIAorICAgIGlmIChtX3Jlc3BvbnNlLmF2YWlsYWJsZVBy
b3h5QXV0aCkKKyAgICAgICAgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNldFByb3h5QXV0aE1l
dGhvZChtX3Jlc3BvbnNlLmF2YWlsYWJsZVByb3h5QXV0aCk7CisKICAgICBpZiAobV9lbmFibGVN
dWx0aXBhcnQpCiAgICAgICAgIG1fbXVsdGlwYXJ0SGFuZGxlID0gQ3VybE11bHRpcGFydEhhbmRs
ZTo6Y3JlYXRlSWZOZWVkZWQoKnRoaXMsIG1fcmVzcG9uc2UpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlc3BvbnNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlc3BvbnNlLmgKaW5kZXggYzZhNTAy
N2I3ZDEuLjM3MzY2MWJkMzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFJlc3BvbnNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxSZXNwb25zZS5oCkBAIC00NSw4ICs0NSw5IEBAIHB1YmxpYzoKICAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJzKQogICAgICAgICAgICAgY29w
eS5oZWFkZXJzLmFwcGVuZChoZWFkZXIuaXNvbGF0ZWRDb3B5KCkpOwogCi0gICAgICAgIGNvcHku
Y29ubmVjdFBvcnQgPSBjb25uZWN0UG9ydDsKKyAgICAgICAgY29weS5wcm94eVVybCA9IHByb3h5
VXJsLmlzb2xhdGVkQ29weSgpOwogICAgICAgICBjb3B5LmF2YWlsYWJsZUh0dHBBdXRoID0gYXZh
aWxhYmxlSHR0cEF1dGg7CisgICAgICAgIGNvcHkuYXZhaWxhYmxlUHJveHlBdXRoID0gYXZhaWxh
YmxlUHJveHlBdXRoOwogICAgICAgICBjb3B5Lmh0dHBWZXJzaW9uID0gaHR0cFZlcnNpb247CiAK
ICAgICAgICAgcmV0dXJuIGNvcHk7CkBAIC01OCw4ICs1OSw5IEBAIHB1YmxpYzoKICAgICBsb25n
IGxvbmcgZXhwZWN0ZWRDb250ZW50TGVuZ3RoIHsgMCB9OwogICAgIFZlY3RvcjxTdHJpbmc+IGhl
YWRlcnM7CiAKLSAgICB1aW50MTZfdCBjb25uZWN0UG9ydCB7IDAgfTsKKyAgICBVUkwgcHJveHlV
cmw7CiAgICAgbG9uZyBhdmFpbGFibGVIdHRwQXV0aCB7IDAgfTsKKyAgICBsb25nIGF2YWlsYWJs
ZVByb3h5QXV0aCB7IDAgfTsKICAgICBsb25nIGh0dHBWZXJzaW9uIHsgMCB9OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVz
cG9uc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJl
c3BvbnNlLmgKaW5kZXggNzA0OWVjNWY4NDcuLjRmYTA0ZTQ1MjEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlLmgK
QEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNTZWVPdGhlcigpIGNvbnN0Owog
ICAgIGJvb2wgaXNOb3RNb2RpZmllZCgpIGNvbnN0OwogICAgIGJvb2wgaXNVbmF1dGhvcml6ZWQo
KSBjb25zdDsKKyAgICBib29sIGlzUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkKCkgY29uc3Q7
CiAKICAgICAvLyBOZWVkZWQgZm9yIGNvbXBhdGliaWxpdHkuCiAgICAgQ0ZVUkxSZXNwb25zZVJl
ZiBjZlVSTFJlc3BvbnNlKCkgY29uc3QgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VDdXJsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlQ3Vy
bC5jcHAKaW5kZXggYjMzMWRkNTUwMmQuLmFjNDViYTJiN2E5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZUN1cmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNl
Q3VybC5jcHAKQEAgLTE4OCw2ICsxODgsMTEgQEAgYm9vbCBSZXNvdXJjZVJlc3BvbnNlOjppc1Vu
YXV0aG9yaXplZCgpIGNvbnN0CiAgICAgcmV0dXJuIGh0dHBTdGF0dXNDb2RlKCkgPT0gNDAxOwog
fQogCitib29sIFJlc291cmNlUmVzcG9uc2U6OmlzUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaHR0cFN0YXR1c0NvZGUoKSA9PSA0MDc7Cit9CisKIH0K
IAogI2VuZGlmCg==
</data>
<flag name="review"
          id="361148"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="361149"
          type_id="3"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>343116</attachid>
            <date>2018-06-19 15:40:35 -0700</date>
            <delta_ts>2018-06-19 16:27:04 -0700</delta_ts>
            <desc>FIX</desc>
            <filename>185266.diff</filename>
            <type>text/plain</type>
            <size>19100</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmODM1OTIyZDc4Yi4uNDJkYTAwYjE5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NCBAQAorMjAxOC0wNi0xOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEVuYWJsZSBQcm94eSBBdXRoZW50aWNhdGlvbi4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTI2NgorCisg
ICAgICAgIEFkZCBzdXBwb3J0IGZvciBQcm94eSBBdXRoZW50aWNhdGlvbiB0byBjdXJsIG5ldHdv
cmsgbGF5ZXIuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgaW4gcHVibGljLiBUZXN0ZWQgaW50ZXJuYWxseS4KKworICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OnByb3RlY3Rp
b25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOjpwcm90ZWN0aW9uU3BhY2VGcm9tSGFuZGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOjpkZXRlcm1pbmVQcm94eVBvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OmF1dGhlbnRpY2F0aW9uU2NoZW1l
RnJvbUN1cmxBdXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OjpwYXJzZVJlYWxtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlUHJveHlJZkV4aXN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpnZXRQcm94eVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsSGFuZGxlOjpnZXRQcm94eUF1dGhBdmFpbCk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsSGFuZGxlOjpnZXRQcmltYXJ5UG9ydCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
Q29udGV4dDo6c2V0RGVmYXVsdFByb3h5QXV0aE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsQ29udGV4dDo6c2V0UHJveHlBdXRoTWV0aG9kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybFByb3h5U2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJt
aW5lQXV0aE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5nczo6c2V0
QXV0aE1ldGhvZCk6CisgICAgICAgIChXZWJDb3JlOjpwcm90b2NvbElzSW5Tb2Nrc0ZhbWlseSk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxQcm94eVNldHRpbmdzLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsUHJveHlTZXR0aW5nczo6c2V0RGVmYXVsdEF1dGhNZXRob2Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3M6OmF1dGhNZXRob2QgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsUmVxdWVzdDo6ZGlkUmVjZWl2ZUhlYWRlcik6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNwb25zZS5oOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFJlc3BvbnNlOjppc29sYXRlZENvcHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Jlc291cmNlUmVzcG9uc2VDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2U6OmlzUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIGNvbnN0KToKKwogMjAx
OC0wNi0xOSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkNv
cmVOU1VSTFNlc3Npb25EYXRhVGFza0NsaWVudDo6cmVkaXJlY3RSZWNlaXZlZCgpIGNhbGxzIFdl
YkNvcmUgb24gbm9uLW1haW4gdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCmluZGV4
IDYwM2MxNDdjNjU5Li41NGRlM2Q2YjI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC00OCw4ICs0OCwxMSBAQCBwdWJsaWM6CiAgICAgQXV0aGVudGljYXRpb25DbGllbnQqIGF1dGhl
bnRpY2F0aW9uQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV9hdXRoZW50aWNhdGlvbkNsaWVudC5n
ZXQoKTsgfQogCiBwcml2YXRlOgotICAgIFByb3RlY3Rpb25TcGFjZVNlcnZlclR5cGUgcHJvdGVj
dGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkoY29uc3QgVVJMJik7CisgICAgUHJvdGVjdGlvblNw
YWNlU2VydmVyVHlwZSBwcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSShjb25zdCBVUkwm
LCBib29sIGlzRm9yUHJveHkpOwogICAgIFByb3RlY3Rpb25TcGFjZSBwcm90ZWN0aW9uU3BhY2VG
cm9tSGFuZGxlKGNvbnN0IEN1cmxSZXNwb25zZSYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
KyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBkZXRlcm1pbmVQcm94eVBvcnQoY29uc3QgVVJM
Jik7CisgICAgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUgYXV0aGVudGljYXRp
b25TY2hlbWVGcm9tQ3VybEF1dGgobG9uZyk7CisgICAgU3RyaW5nIHBhcnNlUmVhbG0oY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOwogICAgIHZvaWQgcmVtb3ZlTGVhZGluZ0FuZFRyYWlsaW5nUXVv
dGVzKFN0cmluZyYpOwogCiAgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2xpZW50PiBtX2F1dGhl
bnRpY2F0aW9uQ2xpZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDdXJsLmNwcApp
bmRleCBhMzA2OWU1M2ExYS4uZWI5OWI5Nzg3YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZUN1cmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9BdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUN1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDQzICs0MCw3NSBAQCBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQ3VybFJlc3BvbnNlJiBjdXJsUmVzcG9u
cwogewogfQogCi1Qcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOjpwcm90ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlRnJvbVVSSShjb25zdCBVUkwmIHVybCkKK1By
b3RlY3Rpb25TcGFjZVNlcnZlclR5cGUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OnByb3RlY3Rp
b25TcGFjZVNlcnZlclR5cGVGcm9tVVJJKGNvbnN0IFVSTCYgdXJsLCBib29sIGlzRm9yUHJveHkp
CiB7CiAgICAgaWYgKHVybC5wcm90b2NvbElzKCJodHRwcyIpKQotICAgICAgICByZXR1cm4gUHJv
dGVjdGlvblNwYWNlU2VydmVySFRUUFM7CisgICAgICAgIHJldHVybiBpc0ZvclByb3h5ID8gUHJv
dGVjdGlvblNwYWNlUHJveHlIVFRQUyA6IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFBTOwogICAg
IGlmICh1cmwucHJvdG9jb2xJcygiaHR0cCIpKQotICAgICAgICByZXR1cm4gUHJvdGVjdGlvblNw
YWNlU2VydmVySFRUUDsKKyAgICAgICAgcmV0dXJuIGlzRm9yUHJveHkgPyBQcm90ZWN0aW9uU3Bh
Y2VQcm94eUhUVFAgOiBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQOwogICAgIGlmICh1cmwucHJv
dG9jb2xJcygiZnRwIikpCi0gICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJGVFA7
Ci0gICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7CisgICAgICAgIHJldHVybiBp
c0ZvclByb3h5ID8gUHJvdGVjdGlvblNwYWNlUHJveHlGVFAgOiBQcm90ZWN0aW9uU3BhY2VTZXJ2
ZXJGVFA7CisgICAgcmV0dXJuIGlzRm9yUHJveHkgPyBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFAg
OiBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQOwogfQogCiBQcm90ZWN0aW9uU3BhY2UgQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U6OnByb3RlY3Rpb25TcGFjZUZyb21IYW5kbGUoY29uc3QgQ3VybFJl
c3BvbnNlJiBjdXJsUmVzcG9uc2UsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQog
ewotICAgIGF1dG8gcG9ydCA9IGN1cmxSZXNwb25zZS5jb25uZWN0UG9ydDsKLSAgICBhdXRvIGF2
YWlsYWJsZUh0dHBBdXRoID0gY3VybFJlc3BvbnNlLmF2YWlsYWJsZUh0dHBBdXRoOwotCi0gICAg
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWUgc2NoZW1lID0gUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duOwotICAgIGlmIChhdmFpbGFibGVIdHRwQXV0
aCAmIENVUkxBVVRIX0JBU0lDKQotICAgICAgICBzY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRo
ZW50aWNhdGlvblNjaGVtZUhUVFBCYXNpYzsKLSAgICBpZiAoYXZhaWxhYmxlSHR0cEF1dGggJiBD
VVJMQVVUSF9ESUdFU1QpCi0gICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lSFRUUERpZ2VzdDsKLSAgICBpZiAoYXZhaWxhYmxlSHR0cEF1dGggJiBDVVJM
QVVUSF9ORUdPVElBVEUpCi0gICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lTmVnb3RpYXRlOwotICAgIGlmIChhdmFpbGFibGVIdHRwQXV0aCAmIENVUkxB
VVRIX05UTE0pCi0gICAgICAgIHNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lTlRMTTsKKyAgICBpZiAoIXJlc3BvbnNlLmlzVW5hdXRob3JpemVkKCkgJiYgIXJlc3Bv
bnNlLmlzUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkKCkpCisgICAgICAgIHJldHVybiBQcm90
ZWN0aW9uU3BhY2UoKTsKKworICAgIGF1dG8gaXNQcm94eUF1dGggPSByZXNwb25zZS5pc1Byb3h5
QXV0aGVudGljYXRpb25SZXF1aXJlZCgpOworICAgIGNvbnN0IGF1dG8mIHVybCA9IGlzUHJveHlB
dXRoID8gY3VybFJlc3BvbnNlLnByb3h5VXJsIDogcmVzcG9uc2UudXJsKCk7CisgICAgYXV0byBw
b3J0ID0gZGV0ZXJtaW5lUHJveHlQb3J0KHVybCk7CisgICAgYXV0byBzZXJ2ZXJUeXBlID0gcHJv
dGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkodXJsLCBpc1Byb3h5QXV0aCk7CisgICAgYXV0
byBhdXRoZW50aWNhdGlvblNjaGVtZSA9IGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUN1cmxBdXRo
KGlzUHJveHlBdXRoID8gY3VybFJlc3BvbnNlLmF2YWlsYWJsZVByb3h5QXV0aCA6IGN1cmxSZXNw
b25zZS5hdmFpbGFibGVIdHRwQXV0aCk7CisKKyAgICByZXR1cm4gUHJvdGVjdGlvblNwYWNlKHVy
bC5ob3N0KCkudG9TdHJpbmcoKSwgc3RhdGljX2Nhc3Q8aW50Pihwb3J0ID8gKnBvcnQgOiAwKSwg
c2VydmVyVHlwZSwgcGFyc2VSZWFsbShyZXNwb25zZSksIGF1dGhlbnRpY2F0aW9uU2NoZW1lKTsK
K30KKworc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OmRl
dGVybWluZVByb3h5UG9ydChjb25zdCBVUkwmIHVybCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWlu
dDE2X3Qgc29ja3NQb3J0ID0gMTA4MDsKKworICAgIGlmIChhdXRvIHBvcnQgPSB1cmwucG9ydCgp
KQorICAgICAgICByZXR1cm4gKnBvcnQ7CisKKyAgICBpZiAoYXV0byBwb3J0ID0gZGVmYXVsdFBv
cnRGb3JQcm90b2NvbCh1cmwucHJvdG9jb2woKSkpCisgICAgICAgIHJldHVybiAqcG9ydDsKKwor
ICAgIGlmIChwcm90b2NvbElzSW5Tb2Nrc0ZhbWlseSh1cmwpKQorICAgICAgICByZXR1cm4gc29j
a3NQb3J0OworCisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKworUHJvdGVjdGlvblNwYWNl
QXV0aGVudGljYXRpb25TY2hlbWUgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6OmF1dGhlbnRpY2F0
aW9uU2NoZW1lRnJvbUN1cmxBdXRoKGxvbmcgY3VybEF1dGgpCit7CisgICAgaWYgKGN1cmxBdXRo
ICYgQ1VSTEFVVEhfTlRMTSkKKyAgICAgICAgcmV0dXJuIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRp
Y2F0aW9uU2NoZW1lTlRMTTsKKyAgICBpZiAoY3VybEF1dGggJiBDVVJMQVVUSF9ORUdPVElBVEUp
CisgICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5lZ290
aWF0ZTsKKyAgICBpZiAoY3VybEF1dGggJiBDVVJMQVVUSF9ESUdFU1QpCisgICAgICAgIHJldHVy
biBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdlc3Q7CisgICAgaWYg
KGN1cmxBdXRoICYgQ1VSTEFVVEhfQkFTSUMpCisgICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3Bh
Y2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBCYXNpYzsKKyAgICByZXR1cm4gUHJvdGVjdGlvblNw
YWNlQXV0aGVudGljYXRpb25TY2hlbWVVbmtub3duOworfQorCitTdHJpbmcgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6OnBhcnNlUmVhbG0oY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Up
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gd3d3QXV0aGVudGljYXRlKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJ3d3ctYXV0aGVudGljYXRlIikpOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IHByb3h5QXV0aGVudGljYXRlKE1BS0VfU1RBVElDX1NUUklO
R19JTVBMKCJwcm94eS1hdXRoZW50aWNhdGUiKSk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFN0cmluZz4gcmVhbG1TdHJpbmcoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoInJlYWxtPSIpKTsK
IAogICAgIFN0cmluZyByZWFsbTsKLSAgICBjb25zdCBTdHJpbmcgcmVhbG1TdHJpbmcoInJlYWxt
PSIpOwotICAgIGF1dG8gYXV0aEhlYWRlciA9IHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChTdHJp
bmcoInd3dy1hdXRoZW50aWNhdGUiKSk7CisgICAgYXV0byBhdXRoSGVhZGVyID0gcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKHJlc3BvbnNlLmlzVW5hdXRob3JpemVkKCkgPyB3d3dBdXRoZW50aWNh
dGUgOiBwcm94eUF1dGhlbnRpY2F0ZSk7CiAgICAgYXV0byByZWFsbVBvcyA9IGF1dGhIZWFkZXIu
ZmluZElnbm9yaW5nQVNDSUlDYXNlKHJlYWxtU3RyaW5nKTsKICAgICBpZiAocmVhbG1Qb3MgIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgcmVhbG0gPSBhdXRoSGVhZGVyLnN1YnN0cmluZyhyZWFsbVBv
cyArIHJlYWxtU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgcmVhbG0gPSBhdXRoSGVhZGVyLnN1
YnN0cmluZyhyZWFsbVBvcyArIHJlYWxtU3RyaW5nLmdldCgpLmxlbmd0aCgpKTsKICAgICAgICAg
cmVhbG0gPSByZWFsbS5sZWZ0KHJlYWxtLmZpbmQoJywnKSk7CiAgICAgICAgIHJlbW92ZUxlYWRp
bmdBbmRUcmFpbGluZ1F1b3RlcyhyZWFsbSk7CiAgICAgfQotCi0gICAgcmV0dXJuIFByb3RlY3Rp
b25TcGFjZShyZXNwb25zZS51cmwoKS5ob3N0KCkudG9TdHJpbmcoKSwgc3RhdGljX2Nhc3Q8aW50
Pihwb3J0KSwgcHJvdGVjdGlvblNwYWNlU2VydmVyVHlwZUZyb21VUkkocmVzcG9uc2UudXJsKCkp
LCByZWFsbSwgc2NoZW1lKTsKKyAgICByZXR1cm4gcmVhbG07CiB9CiAKIHZvaWQgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6OnJlbW92ZUxlYWRpbmdBbmRUcmFpbGluZ1F1b3RlcyhTdHJpbmcmIHZh
bHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
Q29udGV4dC5jcHAKaW5kZXggMTYzOTQ5NmEzMzkuLjFmMGFjMjc0ZjQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKQEAg
LTUwMSw3ICs1MDEsNyBAQCB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVByb3h5SWZFeGlzdHMoKQog
ICAgICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWVVTRVJO
QU1FLCBwcm94eS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGlmICghcHJveHkucGFz
c3dvcmQoKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxl
LCBDVVJMT1BUX1BST1hZUEFTU1dPUkQsIHByb3h5LnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUFJPWFlBVVRILCBD
VVJMQVVUSF9BTlkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BU
X1BST1hZQVVUSCwgcHJveHkuYXV0aE1ldGhvZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBDdXJsUHJveHlTZXR0aW5nczo6TW9kZTo6Tm9Qcm94eSA6CiAgICAgICAgIC8vIERpc2FibGUg
dGhlIHVzZSBvZiBhIHByb3h5LCBldmVuIGlmIHRoZXJlIGlzIGFuIGVudmlyb25tZW50IHZhcmlh
YmxlIHNldCBmb3IgaXQuCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBDdXJsSGFuZGxlOjplbmFi
bGVQcm94eUlmRXhpc3RzKCkKICAgICBjYXNlIEN1cmxQcm94eVNldHRpbmdzOjpNb2RlOjpDdXN0
b20gOgogICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BST1hZLCBw
cm94eS51cmwoKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hh
bmRsZSwgQ1VSTE9QVF9OT1BST1hZLCBwcm94eS5pZ25vcmVIb3N0cygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BST1hZQVVUSCwg
Q1VSTEFVVEhfQU5ZKTsKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9Q
VF9QUk9YWUFVVEgsIHByb3h5LmF1dGhNZXRob2QoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KQEAgLTU2MCwyMSArNTYwLDEzIEBAIHZvaWQgQ3VybEhhbmRsZTo6c2V0U3NsQ3R4Q2FsbGJh
Y2tGdW5jdGlvbihjdXJsX3NzbF9jdHhfY2FsbGJhY2sgY2FsbGJhY2tGdW5jLCB2CiAgICAgY3Vy
bF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfQ1RYX0ZVTkNUSU9OLCBjYWxsYmFj
a0Z1bmMpOwogfQogCi1zdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBDdXJsSGFuZGxlOjpnZXRQcmlt
YXJ5UG9ydCgpCitzdGQ6Om9wdGlvbmFsPFN0cmluZz4gQ3VybEhhbmRsZTo6Z2V0UHJveHlVcmwo
KQogewotICAgIGlmICghbV9oYW5kbGUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0K
LSAgICBsb25nIHBvcnQ7Ci0gICAgQ1VSTGNvZGUgZXJyb3JDb2RlID0gY3VybF9lYXN5X2dldGlu
Zm8obV9oYW5kbGUsIENVUkxJTkZPX1BSSU1BUllfUE9SVCwgJnBvcnQpOwotICAgIGlmIChlcnJv
ckNvZGUgIT0gQ1VSTEVfT0spCisgICAgYXV0byYgcHJveHkgPSBDdXJsQ29udGV4dDo6c2luZ2xl
dG9uKCkucHJveHlTZXR0aW5ncygpOworICAgIGlmIChwcm94eS5tb2RlKCkgPT0gQ3VybFByb3h5
U2V0dGluZ3M6Ok1vZGU6OkRlZmF1bHQpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAK
LSAgICAvKgotICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jdXJsL2N1cmwvYmxvYi9tYXN0ZXIv
bGliL2Nvbm5lY3QuYyNMNjEyLUw2NjAKLSAgICAgKiBjb25maXJtZWQgdGhhdCBgcG9ydGAgaXMg
b3JpZ2luYWxseSB1bnNpZ25lZCBzaG9ydC4KLSAgICAgKi8KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KHBvcnQpOworICAgIHJldHVybiBwcm94eS51cmwoKTsKIH0KIAogc3RkOjpv
cHRpb25hbDxsb25nPiBDdXJsSGFuZGxlOjpnZXRSZXNwb25zZUNvZGUoKQpAQCAtNjMwLDYgKzYy
MiwxOSBAQCBzdGQ6Om9wdGlvbmFsPGxvbmc+IEN1cmxIYW5kbGU6OmdldEh0dHBBdXRoQXZhaWwo
KQogICAgIHJldHVybiBodHRwQXV0aEF2YWlsYWJsZTsKIH0KIAorc3RkOjpvcHRpb25hbDxsb25n
PiBDdXJsSGFuZGxlOjpnZXRQcm94eUF1dGhBdmFpbCgpCit7CisgICAgaWYgKCFtX2hhbmRsZSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGxvbmcgcHJveHlBdXRoQXZhaWxh
YmxlOworICAgIENVUkxjb2RlIGVycm9yQ29kZSA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxl
LCBDVVJMSU5GT19QUk9YWUFVVEhfQVZBSUwsICZwcm94eUF1dGhBdmFpbGFibGUpOworICAgIGlm
IChlcnJvckNvZGUgIT0gQ1VSTEVfT0spCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisK
KyAgICByZXR1cm4gcHJveHlBdXRoQXZhaWxhYmxlOworfQorCiBzdGQ6Om9wdGlvbmFsPGxvbmc+
IEN1cmxIYW5kbGU6OmdldEh0dHBWZXJzaW9uKCkKIHsKICAgICBpZiAoIW1faGFuZGxlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaApp
bmRleCA5Njc3ZTBhMzFmOC4uNGZjZjliZTliZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCkBAIC0xMDYsNiArMTA2LDggQEAg
cHVibGljOgogICAgIGNvbnN0IEN1cmxQcm94eVNldHRpbmdzJiBwcm94eVNldHRpbmdzKCkgY29u
c3QgeyByZXR1cm4gbV9wcm94eVNldHRpbmdzOyB9CiAgICAgdm9pZCBzZXRQcm94eVNldHRpbmdz
KGNvbnN0IEN1cmxQcm94eVNldHRpbmdzJiBzZXR0aW5ncykgeyBtX3Byb3h5U2V0dGluZ3MgPSBz
ZXR0aW5nczsgfQogICAgIHZvaWQgc2V0UHJveHlVc2VyUGFzcyhjb25zdCBTdHJpbmcmIHVzZXIs
IGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpIHsgbV9wcm94eVNldHRpbmdzLnNldFVzZXJQYXNzKHVz
ZXIsIHBhc3N3b3JkKTsgfQorICAgIHZvaWQgc2V0RGVmYXVsdFByb3h5QXV0aE1ldGhvZCgpIHsg
bV9wcm94eVNldHRpbmdzLnNldERlZmF1bHRBdXRoTWV0aG9kKCk7IH0KKyAgICB2b2lkIHNldFBy
b3h5QXV0aE1ldGhvZChsb25nIGF1dGhNZXRob2QpIHsgbV9wcm94eVNldHRpbmdzLnNldEF1dGhN
ZXRob2QoYXV0aE1ldGhvZCk7IH0KIAogICAgIC8vIFNTTAogICAgIEN1cmxTU0xIYW5kbGUmIHNz
bEhhbmRsZSgpIHsgcmV0dXJuIG1fc3NsSGFuZGxlOyB9CkBAIC0yNjcsMTEgKzI2OSwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKGN1cmxfc3NsX2N0eF9j
YWxsYmFjaywgdm9pZCopOwogCiAgICAgLy8gU3RhdHVzCi0gICAgc3RkOjpvcHRpb25hbDx1aW50
MTZfdD4gZ2V0UHJpbWFyeVBvcnQoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gZ2V0UHJv
eHlVcmwoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGxvbmc+IGdldFJlc3BvbnNlQ29kZSgpOwogICAg
IHN0ZDo6b3B0aW9uYWw8bG9uZz4gZ2V0SHR0cENvbm5lY3RDb2RlKCk7CiAgICAgc3RkOjpvcHRp
b25hbDxsb25nIGxvbmc+IGdldENvbnRlbnRMZW5ndGgoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGxv
bmc+IGdldEh0dHBBdXRoQXZhaWwoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPGxvbmc+IGdldFByb3h5
QXV0aEF2YWlsKCk7CiAgICAgc3RkOjpvcHRpb25hbDxsb25nPiBnZXRIdHRwVmVyc2lvbigpOwog
ICAgIHN0ZDo6b3B0aW9uYWw8TmV0d29ya0xvYWRNZXRyaWNzPiBnZXROZXR3b3JrTG9hZE1ldHJp
Y3MoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxQcm94eVNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsUHJveHlTZXR0aW5ncy5jcHAKaW5kZXggMmIwZmZjNTFkOGEuLjRjYWYwYWQzNGE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFBy
b3h5U2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsUHJveHlTZXR0aW5ncy5jcHAKQEAgLTI4LDExICsyOCwxNiBAQAogCiAjaWYgVVNFKENV
UkwpCiAKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgor
CisjaW5jbHVkZSA8Y3VybC9jdXJsLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGlj
IGNvbnN0IHVpbnQxNl90IFNvY2tzUHJveHlQb3J0ID0gMTA4MDsKIAotc3RhdGljIGJvb2wgcHJv
dG9jb2xJc0luU29ja3NGYW1pbHkoY29uc3QgVVJMJik7CiBzdGF0aWMgc3RkOjpvcHRpb25hbDx1
aW50MTZfdD4gZ2V0UHJveHlQb3J0KGNvbnN0IFVSTCYpOwogc3RhdGljIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBjcmVhdGVQcm94eVVybChjb25zdCBVUkwmKTsKIApAQCAtNjEsNyArNjYsMjUgQEAg
dm9pZCBDdXJsUHJveHlTZXR0aW5nczo6c2V0VXNlclBhc3MoY29uc3QgU3RyaW5nJiB1c2VyLCBj
b25zdCBTdHJpbmcmIHBhc3N3b3JkKQogICAgIHJlYnVpbGRVcmwoKTsKIH0KIAotc3RhdGljIGJv
b2wgcHJvdG9jb2xJc0luU29ja3NGYW1pbHkoY29uc3QgVVJMJiB1cmwpCitzdGF0aWMgbG9uZyBk
ZXRlcm1pbmVBdXRoTWV0aG9kKGxvbmcgYXV0aE1ldGhvZCkKK3sKKyAgICBpZiAoYXV0aE1ldGhv
ZCAmIENVUkxBVVRIX05FR09USUFURSkKKyAgICAgICAgcmV0dXJuIENVUkxBVVRIX05FR09USUFU
RTsKKyAgICBpZiAoYXV0aE1ldGhvZCAmIENVUkxBVVRIX0RJR0VTVCkKKyAgICAgICAgcmV0dXJu
IENVUkxBVVRIX0RJR0VTVDsKKyAgICBpZiAoYXV0aE1ldGhvZCAmIENVUkxBVVRIX05UTE0pCisg
ICAgICAgIHJldHVybiBDVVJMQVVUSF9OVExNOworICAgIGlmIChhdXRoTWV0aG9kICYgQ1VSTEFV
VEhfQkFTSUMpCisgICAgICAgIHJldHVybiBDVVJMQVVUSF9CQVNJQzsKKyAgICByZXR1cm4gQ1VS
TEFVVEhfTk9ORTsKK30KKwordm9pZCBDdXJsUHJveHlTZXR0aW5nczo6c2V0QXV0aE1ldGhvZChs
b25nIGF1dGhNZXRob2QpCit7CisgICAgbV9hdXRoTWV0aG9kID0gZGV0ZXJtaW5lQXV0aE1ldGhv
ZChhdXRoTWV0aG9kKTsKK30KKworYm9vbCBwcm90b2NvbElzSW5Tb2Nrc0ZhbWlseShjb25zdCBV
UkwmIHVybCkKIHsKICAgICByZXR1cm4gdXJsLnByb3RvY29sSXMoInNvY2tzNCIpIHx8IHVybC5w
cm90b2NvbElzKCJzb2NrczRhIikgfHwgdXJsLnByb3RvY29sSXMoInNvY2tzNSIpIHx8IHVybC5w
cm90b2NvbElzKCJzb2NrczVoIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGluZ3MuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUHJveHlTZXR0aW5ncy5oCmluZGV4IGYxMWRlYjk1ZTAx
Li5hNjFjNmVjMjI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxQcm94eVNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxQcm94eVNldHRpbmdzLmgKQEAgLTI4LDYgKzI4LDkgQEAKICNpbmNs
dWRlICJVUkwuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAorI2RlZmluZSBr
Q1VSTEFVVEhfRElHRVNUX0lFICAgICgoKHVuc2lnbmVkIGxvbmcpIDEpIDw8IDQpCisjZGVmaW5l
IGtDVVJMQVVUSF9BTlkgICAgICAgICAgKH5rQ1VSTEFVVEhfRElHRVNUX0lFKQorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cmxQcm94eVNldHRpbmdzIHsKQEAgLTU1LDEwICs1OCwx
NSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nIHVzZXIoKSBjb25zdCB7IHJldHVybiBtX3Vy
bC51c2VyKCk7IH0KICAgICBjb25zdCBTdHJpbmcgcGFzc3dvcmQoKSBjb25zdCB7IHJldHVybiBt
X3VybC5wYXNzKCk7IH0KIAorICAgIHZvaWQgc2V0RGVmYXVsdEF1dGhNZXRob2QoKSB7IG1fYXV0
aE1ldGhvZCA9IGtDVVJMQVVUSF9BTlk7IH0KKyAgICB2b2lkIHNldEF1dGhNZXRob2QobG9uZyk7
CisgICAgbG9uZyBhdXRoTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9hdXRoTWV0aG9kOyB9CisK
IHByaXZhdGU6CiAgICAgTW9kZSBtX21vZGUgeyBNb2RlOjpEZWZhdWx0IH07CiAgICAgVVJMIG1f
dXJsOwogICAgIFN0cmluZyBtX2lnbm9yZUhvc3RzOworICAgIGxvbmcgbV9hdXRoTWV0aG9kIHsg
c3RhdGljX2Nhc3Q8bG9uZz4oa0NVUkxBVVRIX0FOWSkgfTsKIAogICAgIC8vIFdlIGNhbid0IHNp
bXBseSB1c2UgbV91cmwuc3RyaW5nKCkgYmVjYXVzZSB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgaW5k
aWNhdGUgdGhlIHBvcnQgbnVtYmVyCiAgICAgLy8gdG8gbGliY3VybC4gVVJMUGFyc2VyIG9taXQg
dGhlIGRlZmF1bHQgcG9ydCB3aGlsZSBwYXJzaW5nLCBidXQgbGliY3VybCBhc3N1bWUgMTA4MCBh
cyBhCkBAIC02OCw0ICs3Niw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWJ1aWxkVXJsKCk7CiB9
OwogCitib29sIHByb3RvY29sSXNJblNvY2tzRmFtaWx5KGNvbnN0IFVSTCYpOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxSZXF1ZXN0LmNwcAppbmRleCA1YWE3MjhjOTcwNi4uNmUwNzA2MGFkODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1
ZXN0LmNwcApAQCAtMzMzLDE4ICszMzMsMjQgQEAgc2l6ZV90IEN1cmxSZXF1ZXN0OjpkaWRSZWNl
aXZlSGVhZGVyKFN0cmluZyYmIGhlYWRlcikKICAgICBpZiAoYXV0byBsZW5ndGggPSBtX2N1cmxI
YW5kbGUtPmdldENvbnRlbnRMZW5ndGgoKSkKICAgICAgICAgbV9yZXNwb25zZS5leHBlY3RlZENv
bnRlbnRMZW5ndGggPSAqbGVuZ3RoOwogCi0gICAgaWYgKGF1dG8gcG9ydCA9IG1fY3VybEhhbmRs
ZS0+Z2V0UHJpbWFyeVBvcnQoKSkKLSAgICAgICAgbV9yZXNwb25zZS5jb25uZWN0UG9ydCA9ICpw
b3J0OworICAgIGlmIChhdXRvIHByb3h5VXJsID0gbV9jdXJsSGFuZGxlLT5nZXRQcm94eVVybCgp
KQorICAgICAgICBtX3Jlc3BvbnNlLnByb3h5VXJsID0gVVJMKFVSTCgpLCAqcHJveHlVcmwpOwog
CiAgICAgaWYgKGF1dG8gYXV0aCA9IG1fY3VybEhhbmRsZS0+Z2V0SHR0cEF1dGhBdmFpbCgpKQog
ICAgICAgICBtX3Jlc3BvbnNlLmF2YWlsYWJsZUh0dHBBdXRoID0gKmF1dGg7CiAKKyAgICBpZiAo
YXV0byBhdXRoID0gbV9jdXJsSGFuZGxlLT5nZXRQcm94eUF1dGhBdmFpbCgpKQorICAgICAgICBt
X3Jlc3BvbnNlLmF2YWlsYWJsZVByb3h5QXV0aCA9ICphdXRoOworCiAgICAgaWYgKGF1dG8gdmVy
c2lvbiA9IG1fY3VybEhhbmRsZS0+Z2V0SHR0cFZlcnNpb24oKSkKICAgICAgICAgbV9yZXNwb25z
ZS5odHRwVmVyc2lvbiA9ICp2ZXJzaW9uOwogCiAgICAgaWYgKGF1dG8gbWV0cmljcyA9IG1fY3Vy
bEhhbmRsZS0+Z2V0TmV0d29ya0xvYWRNZXRyaWNzKCkpCiAgICAgICAgIG1fbmV0d29ya0xvYWRN
ZXRyaWNzID0gKm1ldHJpY3M7CiAKKyAgICBpZiAobV9yZXNwb25zZS5hdmFpbGFibGVQcm94eUF1
dGgpCisgICAgICAgIEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zZXRQcm94eUF1dGhNZXRob2Qo
bV9yZXNwb25zZS5hdmFpbGFibGVQcm94eUF1dGgpOworCiAgICAgaWYgKG1fZW5hYmxlTXVsdGlw
YXJ0KQogICAgICAgICBtX211bHRpcGFydEhhbmRsZSA9IEN1cmxNdWx0aXBhcnRIYW5kbGU6OmNy
ZWF0ZUlmTmVlZGVkKCp0aGlzLCBtX3Jlc3BvbnNlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNwb25zZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXNwb25zZS5oCmluZGV4IGM2YTUwMjdiN2Qx
Li4zNzM2NjFiZDM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxSZXNwb25zZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsUmVzcG9uc2UuaApAQCAtNDUsOCArNDUsOSBAQCBwdWJsaWM6CiAgICAgICAg
IGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVycykKICAgICAgICAgICAgIGNvcHkuaGVh
ZGVycy5hcHBlbmQoaGVhZGVyLmlzb2xhdGVkQ29weSgpKTsKIAotICAgICAgICBjb3B5LmNvbm5l
Y3RQb3J0ID0gY29ubmVjdFBvcnQ7CisgICAgICAgIGNvcHkucHJveHlVcmwgPSBwcm94eVVybC5p
c29sYXRlZENvcHkoKTsKICAgICAgICAgY29weS5hdmFpbGFibGVIdHRwQXV0aCA9IGF2YWlsYWJs
ZUh0dHBBdXRoOworICAgICAgICBjb3B5LmF2YWlsYWJsZVByb3h5QXV0aCA9IGF2YWlsYWJsZVBy
b3h5QXV0aDsKICAgICAgICAgY29weS5odHRwVmVyc2lvbiA9IGh0dHBWZXJzaW9uOwogCiAgICAg
ICAgIHJldHVybiBjb3B5OwpAQCAtNTgsOCArNTksOSBAQCBwdWJsaWM6CiAgICAgbG9uZyBsb25n
IGV4cGVjdGVkQ29udGVudExlbmd0aCB7IDAgfTsKICAgICBWZWN0b3I8U3RyaW5nPiBoZWFkZXJz
OwogCi0gICAgdWludDE2X3QgY29ubmVjdFBvcnQgeyAwIH07CisgICAgVVJMIHByb3h5VXJsOwog
ICAgIGxvbmcgYXZhaWxhYmxlSHR0cEF1dGggeyAwIH07CisgICAgbG9uZyBhdmFpbGFibGVQcm94
eUF1dGggeyAwIH07CiAgICAgbG9uZyBodHRwVmVyc2lvbiB7IDAgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25z
ZS5oCmluZGV4IDcwNDllYzVmODQ3Li40ZmEwNGU0NTIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZS5oCkBAIC01
OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzU2VlT3RoZXIoKSBjb25zdDsKICAgICBi
b29sIGlzTm90TW9kaWZpZWQoKSBjb25zdDsKICAgICBib29sIGlzVW5hdXRob3JpemVkKCkgY29u
c3Q7CisgICAgYm9vbCBpc1Byb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCgpIGNvbnN0OwogCiAg
ICAgLy8gTmVlZGVkIGZvciBjb21wYXRpYmlsaXR5LgogICAgIENGVVJMUmVzcG9uc2VSZWYgY2ZV
UkxSZXNwb25zZSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlc3BvbnNlQ3VybC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZUN1cmwuY3Bw
CmluZGV4IGIzMzFkZDU1MDJkLi5hYzQ1YmEyYjdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVzcG9uc2VDdXJsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VSZXNwb25zZUN1cmwu
Y3BwCkBAIC0xODgsNiArMTg4LDExIEBAIGJvb2wgUmVzb3VyY2VSZXNwb25zZTo6aXNVbmF1dGhv
cml6ZWQoKSBjb25zdAogICAgIHJldHVybiBodHRwU3RhdHVzQ29kZSgpID09IDQwMTsKIH0KIAor
Ym9vbCBSZXNvdXJjZVJlc3BvbnNlOjppc1Byb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGh0dHBTdGF0dXNDb2RlKCkgPT0gNDA3OworfQorCiB9CiAKICNl
bmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>