<?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>182360</bug_id>
          
          <creation_ts>2018-01-31 16:31:05 -0800</creation_ts>
          <short_desc>REGRESSION (r217572): run-webkit-tests exits without emitting newline character</short_desc>
          <delta_ts>2020-06-01 18:30:19 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=212622</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>172176</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>basuke</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jbedard</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1395232</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-01-31 16:31:05 -0800</bug_when>
    <thetext>run-webkit-tests always exits without printing newline character:

$ Tools/Scripts/run-webkit-tests
Expected to fail, but passed: (7)
...
Stopping WebSocket server ...$

This regressed with the patch for bug #172176.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395234</commentid>
    <comment_count>1</comment_count>
      <attachid>332821</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-01-31 16:35:20 -0800</bug_when>
    <thetext>Created attachment 332821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395263</commentid>
    <comment_count>2</comment_count>
      <attachid>332821</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-01-31 17:32:53 -0800</bug_when>
    <thetext>Comment on attachment 332821
Patch

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

It looks like this is two changes. One (as your ChangeLog indicates) will fix the logging bug caused by calling LayoutTestRunner.stop_servers(...) twice.

The second change is caused by moving the web socket and wpt server checks from the port object to workspace.py. I think that this change makes sense as well, but it feels conceptually separate from the first change.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:200
&gt; +        if self._needs_websockets:

I&apos;m pretty sure this is a change in behavior.  This will mean that run-webkit-tests requires a web socket server, it will always boot one even if one is already booted. This is not called out in the ChangeLog, I&apos;m not entirely sure that it&apos;s intentional.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:203
&gt; +        if self._needs_web_platform_test_server:

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395348</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-01-31 22:43:36 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #2)
&gt; The second change is caused by moving the web socket and wpt server checks
&gt; from the port object to workspace.py. I think that this change makes sense
&gt; as well, but it feels conceptually separate from the first change.
&gt; 

I no longer need this part.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:200
&gt; &gt; +        if self._needs_websockets:
&gt; 
&gt; I&apos;m pretty sure this is a change in behavior.  This will mean that
&gt; run-webkit-tests requires a web socket server, it will always boot one even
&gt; if one is already booted. This is not called out in the ChangeLog, I&apos;m not
&gt; entirely sure that it&apos;s intentional.
&gt;

Will restore to allow a person to run run-webkit-tests while simultaneously running run-webkit-httpd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395349</commentid>
    <comment_count>4</comment_count>
      <attachid>332849</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-01-31 22:46:58 -0800</bug_when>
    <thetext>Created attachment 332849
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395473</commentid>
    <comment_count>5</comment_count>
      <attachid>332849</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-02-01 08:23:40 -0800</bug_when>
    <thetext>Comment on attachment 332849
Patch

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

One minor comment, other than that, it looks good to me.

&gt; Tools/Scripts/webkitpy/port/base.py:978
&gt; +            return True

What is the benefit of this?  Shouldn&apos;t http_server_base.is_http_server_running() return true if self._http_server is defined anyways?  I suppose you could have self._http_server defined but not started, although I think the only way that could happen is if a server through an exception while starting.

&gt; Tools/Scripts/webkitpy/port/base.py:984
&gt; +        return websocket_server.is_web_socket_server_running()

Ditto.

&gt; Tools/Scripts/webkitpy/port/base.py:988
&gt; +            return True

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395493</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-01 09:07:32 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #5)
&gt; Comment on attachment 332849 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332849&amp;action=review
&gt; 
&gt; One minor comment, other than that, it looks good to me.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/port/base.py:978
&gt; &gt; +            return True
&gt; 
&gt; What is the benefit of this?  Shouldn&apos;t http_server_base.is_http_server_running() return true if self._http_server is defined anyways?  

Notice that http_server_base.is_http_server_running() is a free function that just turns around and calls the class method HttpServerBase._is_running_on_port(): &lt;http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/layout_tests/servers/http_server_base.py?rev=227745#L240&gt;. This function does not know whether an HTTP server was started by webkitpy.
 
&gt; I suppose you could have self._http_server defined but
&gt; not started, although I think the only way that could happen is if a server
&gt; through an exception while starting.
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/port/base.py:984
&gt; &gt; +        return websocket_server.is_web_socket_server_running()
&gt; 
&gt; Ditto.
&gt; 

Needed by a similar argument as above.

&gt; &gt; Tools/Scripts/webkitpy/port/base.py:988
&gt; &gt; +            return True
&gt; 
&gt; Ditto.

Needed by a similar argument as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395494</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-01 09:08:31 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #6)
&gt; &gt; What is the benefit of this?  Shouldn&apos;t http_server_base.is_http_server_running() return true if self._http_server is defined anyways?  
&gt; 
&gt; [...] This function does not know whether an HTTP server was started by webkitpy.

*run-webkit-tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395519</commentid>
    <comment_count>8</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-02-01 09:39:59 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #6)
&gt; (In reply to Jonathan Bedard from comment #5)
&gt; &gt; ...
&gt; &gt; 
&gt; &gt; What is the benefit of this?  Shouldn&apos;t http_server_base.is_http_server_running() return true if self._http_server is defined anyways?  
&gt; 
&gt; Notice that http_server_base.is_http_server_running() is a free function
&gt; that just turns around and calls the class method
&gt; HttpServerBase._is_running_on_port():
&gt; &lt;http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/layout_tests/
&gt; servers/http_server_base.py?rev=227745#L240&gt;. This function does not know
&gt; whether an HTTP server was started by webkitpy.

I recognize that http_server_base.is_http_server_running() is actually checking if the expected port on the system is in use. What I&apos;m pointing out is that http_server_base.is_http_server_running() is designed to detect when any server is running on the expected port, this should include one created and managed by webkitpy. The code proposed here will definitely work, but it seems redundant. Without the &apos;if&apos; statement added here, this function should still return true if self._http_server.start() has been called. As mentioned previously, the only functional change here is that Port.is_http_server_running() will now return &apos;True&apos; if self._http_server was instantiated but not started.

&gt; ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1395525</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-01 09:57:32 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #8)
&gt; (In reply to Daniel Bates from comment #6)
&gt; &gt; (In reply to Jonathan Bedard from comment #5)
&gt; &gt; &gt; ...
&gt; &gt; &gt; 
&gt; &gt; &gt; What is the benefit of this?  Shouldn&apos;t http_server_base.is_http_server_running() return true if self._http_server is defined anyways?  
&gt; &gt; 
&gt; &gt; Notice that http_server_base.is_http_server_running() is a free function
&gt; &gt; that just turns around and calls the class method
&gt; &gt; HttpServerBase._is_running_on_port():
&gt; &gt; &lt;http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/layout_tests/
&gt; &gt; servers/http_server_base.py?rev=227745#L240&gt;. This function does not know
&gt; &gt; whether an HTTP server was started by webkitpy.
&gt; 
&gt; I recognize that http_server_base.is_http_server_running() is actually
&gt; checking if the expected port on the system is in use. What I&apos;m pointing out
&gt; is that http_server_base.is_http_server_running() is designed to detect when
&gt; any server is running on the expected port, this should include one created
&gt; and managed by webkitpy. The code proposed here will definitely work, but it
&gt; seems redundant. Without the &apos;if&apos; statement added here, this function should
&gt; still return true if self._http_server.start() has been called. As mentioned
&gt; previously, the only functional change here is that
&gt; Port.is_http_server_running() will now return &apos;True&apos; if self._http_server
&gt; was instantiated but not started.
&gt; 
&gt; &gt; ...

It is unnecessary and excessive to allocate a socket and to connect to a server when the Port knows if it started a server or not based on the nullity of Port._http_server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396561</commentid>
    <comment_count>10</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2018-02-05 14:53:59 -0800</bug_when>
    <thetext>(In reply to Daniel Bates from comment #9)
&gt; (In reply to Jonathan Bedard from comment #8)
&gt; &gt; ...
&gt; 
&gt; It is unnecessary and excessive to allocate a socket and to connect to a
&gt; server when the Port knows if it started a server or not based on the
&gt; nullity of Port._http_server.

Ok! Looks good to me then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396565</commentid>
    <comment_count>11</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2018-02-05 14:54:29 -0800</bug_when>
    <thetext>rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396577</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2018-02-05 15:11:08 -0800</bug_when>
    <thetext>Committed r228133: &lt;https://trac.webkit.org/changeset/228133&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1396579</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-02-05 15:12:58 -0800</bug_when>
    <thetext>&lt;rdar://problem/37251751&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332821</attachid>
            <date>2018-01-31 16:35:20 -0800</date>
            <delta_ts>2018-01-31 22:46:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182360-20180131163519.patch</filename>
            <type>text/plain</type>
            <size>11944</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI3OTQyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzMwMjI5MDMxM2RkYTZkMDhjZjliYmYxMWY0YTlkYWFm
NjA5ODMxZi4uN2ZiOWNkZWU1NjlkNzMxMjhmNzI3YTVjMmNjYTMwZjdjMDAzOTdiZCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5
IEBACisyMDE4LTAxLTMxICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAg
ICAgICBSRUdSRVNTSU9OIChyMjE3NTcyKTogcnVuLXdlYmtpdC10ZXN0cyBleGl0cyB3aXRob3V0
IGVtaXR0aW5nIG5ld2xpbmUgY2hhcmFjdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xODIzNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBGaXhlcyBhbiBhbm5veWFuY2Ugd2hlcmUgcnVuLXdlYmtpdC10
ZXN0cyBhbHdheXMgZXhpdHMgd2l0aG91dCBwcmludGluZyBhIG5ld2xpbmUgY2hhcmFjdGVyLgor
ICAgICAgICBJbiB0aGUgdGVybWluYWwgdGhpcyBsb29rcyBsaWtlOgorCisgICAgICAgICAgICAk
IFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cworICAgICAgICAgICAgRXhwZWN0ZWQgdG8g
ZmFpbCwgYnV0IHBhc3NlZDogKDcpCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIFN0b3Bw
aW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJAorCisgICAgICAgIFRoaXMgYnVnIHdhcyBjYXVzZWQg
YnkgY29kZSBhZGRlZCBpbiByMjE3NTcyIHRvIHN0b3AgYWxsIHdlYmtpdHB5IHN0YXJ0ZWQgc2Vy
dmVycyAoZS5nLiBhbiBIVFRQCisgICAgICAgIHNlcnZlcikgZnJvbSBhbiBhdC1leGl0IGhhbmRs
ZXIuIFdoZW4gcnVuLXdlYmtpdC10ZXN0cyBydW5zIHN1Y2Nlc3NmdWxseSAoaS5lLiB3aXRob3V0
IGVycm9yIG9yCisgICAgICAgIGNvbnRyb2wtQyBpbnRlcnJ1cHRpb24pIHdlIHdvdWxkIHN0b3Ag
YWxsIHN1Y2ggc2VydmVycyB0d2ljZTogb25jZSBhcyBwYXJ0IG9mIGVuZGluZyB0aGUgdGVzdAor
ICAgICAgICBydW4gYW5kIG9uY2UgZnJvbSB0aGUgYXQtZXhpdCBoYW5kbGVyLiBUaGUgbGF0dGVy
IG5ldmVyIHByaW50cyBhIHRyYWlsaW5nIG5ld2xpbmUgY2hhcmFjdGVyIGhlbmNlCisgICAgICAg
IHRoZSBzdGF0ZSBvZiB0aGUgdGVybWluYWwgKGFzIGRlcGljdGVkIGFib3ZlKS4gSW5zdGVhZCBM
YXlvdXRUZXN0UnVubmVyLnN0b3Bfc2VydmVycygpIHNob3VsZCBiYWlsCisgICAgICAgIG91dCBl
YXJseSBpZiBhbGwgd2Via2l0cHkgc3RhcnRlZCBzZXJ2ZXJzIGFyZSBhbHJlYWR5IHN0b3BwZWQg
YW5kIExheW91dFRlc3RSdW5uZXIuc3RhcnRfc2VydmVycygpCisgICAgICAgIHNob3VsZCBiYWls
IG91dCBlYXJseSBpZiB3ZWJraXRweSBhbHJlYWR5IHN0YXJ0ZWQgc2VydmVycy4KKworICAgICAg
ICAqIFNjcmlwdHMvb3Blbi1sYXlvdXQtdGVzdDoKKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS93b3Jrc3BhY2UucHk6CisgICAgICAgIChX
b3Jrc3BhY2UuX19pbml0X18pOgorICAgICAgICAoV29ya3NwYWNlLmNyZWF0ZV96aXApOgorICAg
ICAgICAoV29ya3NwYWNlKToKKyAgICAgICAgKFdvcmtzcGFjZS5pc19odHRwX3NlcnZlcl9ydW5u
aW5nKTogQWRkZWQ7IG1vdmVkIGZyb20gY2xhc3MgUG9ydC4KKyAgICAgICAgKFdvcmtzcGFjZS5p
c193cHRfc2VydmVyX3J1bm5pbmcpOiBBZGRlZDsgbW92ZWQgZnJvbSBjbGFzcyBQb3J0LgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90
ZXN0X3J1bm5lci5weToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuX19pbml0X18pOgorICAg
ICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdGFydF9zZXJ2ZXJzKToKKyAgICAgICAgKExheW91dFRl
c3RSdW5uZXIuc3RvcF9zZXJ2ZXJzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAg
ICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQuc3RvcF93ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzKToK
KyAgICAgICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZCk6Cisg
ICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQuaXNfaHR0
cF9zZXJ2ZXJfcnVubmluZyk6IERlbGV0ZWQuCisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVz
dHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQuaXNfd2Vic29ja2V0X3NlcnZlcnNfcnVubmluZyk6IERl
bGV0ZWQuCisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0
ZWQuaXNfd3B0X3NlcnZlcl9ydW5uaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHk6CisgICAgICAg
ICh0byk6CisgICAgICAgIChQeVdlYlNvY2tldC5fX2luaXRfXyk6CisgICAgICAgIChQeVdlYlNv
Y2tldC5pc19ydW5uaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Bv
cnQvYmFzZS5weToKKyAgICAgICAgKFBvcnQudG8uc3RhcnRfaHR0cF9zZXJ2ZXIpOgorICAgICAg
ICAoUG9ydC50by5pc19odHRwX3NlcnZlcl9ydW5uaW5nKTogRGVsZXRlZDsgbW92ZSB0byBjbGFz
cyBXb3Jrc3BhY2UgdG8gYXZvaWQgY29uZnVzaW9uLiBUaGlzCisgICAgICAgIGZ1bmN0aW9uIGNo
ZWNrZWQgaWYgdGhlIG1hY2hpbmUgaGFkIGEgcnVubmluZyBIVFRQIHNlcnZlciByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgd2Via2l0cHkKKyAgICAgICAgc3RhcnRlZCBpdC4KKyAgICAgICAgKFBvcnQu
dG8uaXNfd2Vic29ja2V0X3NlcnZlcnNfcnVubmluZyk6IERlbGV0ZWQ7IG1vdmUgdG8gY2xhc3Mg
V29ya3NwYWNlIHRvIGF2b2lkIGNvbmZ1c2lvbi4KKyAgICAgICAgVGhpcyBmdW5jdGlvbiBjaGVj
a2VkIGlmIHRoZSBtYWNoaW5lIGhhZCBhIHJ1bm5pbmcgV1BUIHNlcnZlciByZWdhcmRsZXNzIG9m
IHdoZXRoZXIgd2Via2l0cHkKKyAgICAgICAgc3RhcnRlZCBpdC4KKyAgICAgICAgKFBvcnQudG8u
aXNfd3B0X3NlcnZlcl9ydW5uaW5nKTogRGVsZXRlZC4KKwogMjAxOC0wMS0zMSAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIyNzg3NS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvb3Blbi1sYXlv
dXQtdGVzdCBiL1Rvb2xzL1NjcmlwdHMvb3Blbi1sYXlvdXQtdGVzdAppbmRleCAxZTFiNWViYWM4
MjBiN2I5MzgxY2I4ODhmYjBmNTdlYzVkOTY3MWNmLi4wYzY0NzY4MzU3ODFmMzQ3ZDFkYTI5M2Zm
ZDA0YjJkNTc3MzczM2E2IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL29wZW4tbGF5b3V0LXRl
c3QKKysrIGIvVG9vbHMvU2NyaXB0cy9vcGVuLWxheW91dC10ZXN0CkBAIC01OCwxMCArNTgsMTAg
QEAgZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBzdGRlcnIpOgogICAgIHRlc3RfbmFtZSA9IHBhdGhz
WzBdCiAKICAgICBuZWVkc19zZXJ2ZXIgPSBGYWxzZQotICAgIGlmIGRyaXZlci5pc19odHRwX3Rl
c3QodGVzdF9uYW1lKSBhbmQgbm90IHBvcnQuaXNfaHR0cF9zZXJ2ZXJfcnVubmluZygpOgotICAg
ICAgICBuZWVkc19zZXJ2ZXIgPSBub3QgcG9ydC5pc19odHRwX3NlcnZlcl9ydW5uaW5nKCkKKyAg
ICBpZiBkcml2ZXIuaXNfaHR0cF90ZXN0KHRlc3RfbmFtZSkgYW5kIG5vdCBwb3J0Lmhvc3Qud29y
a3NwYWNlLmlzX2h0dHBfc2VydmVyX3J1bm5pbmcoKToKKyAgICAgICAgbmVlZHNfc2VydmVyID0g
bm90IHBvcnQuaG9zdC53b3Jrc3BhY2UuaXNfaHR0cF9zZXJ2ZXJfcnVubmluZygpCiAgICAgZWxp
ZiBkcml2ZXIuaXNfd2ViX3BsYXRmb3JtX3Rlc3QodGVzdF9uYW1lKSBvciBkcml2ZXIuaXNfd2Vi
a2l0X3NwZWNpZmljX3dlYl9wbGF0Zm9ybV90ZXN0KHRlc3RfbmFtZSk6Ci0gICAgICAgIG5lZWRz
X3NlcnZlciA9IG5vdCBwb3J0LmlzX3dwdF9zZXJ2ZXJfcnVubmluZygpCisgICAgICAgIG5lZWRz
X3NlcnZlciA9IG5vdCBwb3J0Lmhvc3Qud29ya3NwYWNlLmlzX3dwdF9zZXJ2ZXJfcnVubmluZygp
CiAKICAgICB0ZXN0X3VybCA9IGRyaXZlci50ZXN0X3RvX3VyaSh0ZXN0X25hbWUpCiAgICAgaWYg
bm90IG5lZWRzX3NlcnZlcjoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3N5c3RlbS93b3Jrc3BhY2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9z
eXN0ZW0vd29ya3NwYWNlLnB5CmluZGV4IDMxMzU4NjkwZGM0MTFiZmZkN2U5MzYyZDQ3OGZlN2Vk
NTgwN2U0MWMuLjVhNDkzY2IxNjExYWUzMjNkNzljNTc2ZGZkZDE0YmRlODliZWJhMDkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3RlbS93b3Jrc3BhY2UucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vc3lzdGVtL3dvcmtzcGFjZS5weQpA
QCAtMzMsNiArMzMsOCBAQCBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHppcGZpbGUKIAogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYl9wbGF0Zm9ybV90ZXN0
X3NlcnZlcgogCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKQEAgLTcxLDMg
KzczLDExIEBAIGNsYXNzIFdvcmtzcGFjZShvYmplY3QpOgogICAgICAgICAgICAgcmV0dXJuIE5v
bmUKIAogICAgICAgICByZXR1cm4gemlwX2NsYXNzKHppcF9wYXRoKQorCisgICAgZGVmIGlzX2h0
dHBfc2VydmVyX3J1bm5pbmcoc2VsZik6CisgICAgICAgICMgTm90ZSB0aGF0IHRoZSBzZXJ2ZXIg
bWF5IG5vdCBoYXZlIGJlZW4gc3RhcnRlZCBieSB3ZWJraXRweS4KKyAgICAgICAgcmV0dXJuIGh0
dHBfc2VydmVyX2Jhc2UuaXNfaHR0cF9zZXJ2ZXJfcnVubmluZygpCisKKyAgICBkZWYgaXNfd3B0
X3NlcnZlcl9ydW5uaW5nKHNlbGYpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGUgc2VydmVyIG1h
eSBub3QgaGF2ZSBiZWVuIHN0YXJ0ZWQgYnkgd2Via2l0cHkuCisgICAgICAgIHJldHVybiB3ZWJf
cGxhdGZvcm1fdGVzdF9zZXJ2ZXIuaXNfd3B0X3NlcnZlcl9ydW5uaW5nKHNlbGYpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlv
dXRfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKaW5kZXggMDVmOTA1MWY5MTkzMDdiMWM0
NWEwZThiNmI3Zjk2MGNjYjhhYTE2My4uYTk4YzA3YTRmNWE3ZGVmODY2OWFmMGViN2EyYmI3ZGJh
MTcyNjFjZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQpAQCAt
NzksNiArNzksNyBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNl
bGYuX3Rlc3RfaW5wdXRzID0gW10KICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQogICAg
ICAgICBzZWxmLl9jdXJyZW50X3J1bl9yZXN1bHRzID0gTm9uZQorICAgICAgICBzZWxmLl9kaWRf
c3RhcnRfc2VydmVycyA9IEZhbHNlCiAKICAgICAgICAgaWYgKChzZWxmLl9uZWVkc19odHRwIGFu
ZCBzZWxmLl9vcHRpb25zLmh0dHApIG9yIHNlbGYuX25lZWRzX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlcikgYW5kIHNlbGYuX3BvcnQuZ2V0X29wdGlvbigic3RhcnRfaHR0cF9zZXJ2ZXJzX2lmX25l
ZWRlZCIpOgogICAgICAgICAgICAgc2VsZi5zdGFydF9zZXJ2ZXJzKCkKQEAgLTE5MCwxNyArMTkx
LDIzIEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5faW50
ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHJ1bl9yZXN1bHRzKQogCiAgICAgZGVmIHN0YXJ0
X3NlcnZlcnMoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHAgYW5kIG5vdCBzZWxm
Ll9wb3J0LmlzX2h0dHBfc2VydmVyX3J1bm5pbmcoKToKKyAgICAgICAgaWYgc2VsZi5fZGlkX3N0
YXJ0X3NlcnZlcnM6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fZGlkX3N0YXJ0
X3NlcnZlcnMgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHA6CiAgICAgICAgICAg
ICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykK
ICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQotICAgICAgICBpZiBz
ZWxmLl9uZWVkc193ZWJzb2NrZXRzIGFuZCBub3Qgc2VsZi5fcG9ydC5pc193ZWJzb2NrZXRfc2Vy
dmVyc19ydW5uaW5nKCk6CisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYnNvY2tldHM6CiAgICAg
ICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNl
cnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVy
KCkKLSAgICAgICAgaWYgc2VsZi5fbmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyIGFuZCBu
b3Qgc2VsZi5fcG9ydC5pc193cHRfc2VydmVyX3J1bm5pbmcoKToKKyAgICAgICAgaWYgc2VsZi5f
bmVlZHNfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyOgogICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlciAuLi4nKQog
ICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIoKQog
CiAgICAgZGVmIHN0b3Bfc2VydmVycyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2RpZF9z
dGFydF9zZXJ2ZXJzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2RpZF9zdGFy
dF9zZXJ2ZXJzID0gRmFsc2UKICAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0cDoKICAgICAgICAg
ICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4n
KQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90
ZXN0X3J1bm5lcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQppbmRleCAxODM3
MTQ4NjUzYWVkNGIzYTg2OWQzYTQ0OTU2MWRmYzczMjRmZjRlLi5mODk4MzYzMmY4MjM0ZDk5NTM2
MzYzMTI0YTU4N2MzM2VjNzc4OTA2IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5
b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBAIC0xNTksMTUgKzE1OSw2IEBAIGNsYXNzIExh
eW91dFRlc3RSdW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGRlZiBzdG9w
X3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcigpOgogICAgICAgICAgICAgc2VsZi53ZWJfcGxhdGZv
cm1fdGVzdF9zZXJ2ZXJfc3RvcHBlZCA9IFRydWUKIAotICAgICAgICBkZWYgaXNfaHR0cF9zZXJ2
ZXJfcnVubmluZygpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuaHR0cF9zdGFydGVkIGFuZCBu
b3Qgc2VsZi5odHRwX3N0b3BwZWQKLQotICAgICAgICBkZWYgaXNfd2Vic29ja2V0X3NlcnZlcnNf
cnVubmluZygpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgYW5k
IG5vdCBzZWxmLndlYnNvY2tldF9zdG9wcGVkCi0KLSAgICAgICAgZGVmIGlzX3dwdF9zZXJ2ZXJf
cnVubmluZygpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgYW5k
IG5vdCBzZWxmLndlYl9wbGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkCi0KICAgICAgICAgaG9z
dCA9IE1vY2tIb3N0KCkKICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVz
dC1tYWMtbGVvcGFyZCcpCiAgICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIgPSBzdGFydF9o
dHRwX3NlcnZlcgpAQCAtMTc2LDkgKzE2Nyw2IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXJUZXN0
cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBvcnQuc3RvcF9odHRwX3NlcnZlciA9IHN0
b3BfaHR0cF9zZXJ2ZXIKICAgICAgICAgcG9ydC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIgPSBzdG9w
X3dlYnNvY2tldF9zZXJ2ZXIKICAgICAgICAgcG9ydC5zdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3Nl
cnZlciA9IHN0b3Bfd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyCi0gICAgICAgIHBvcnQuaXNfaHR0
cF9zZXJ2ZXJfcnVubmluZyA9IGlzX2h0dHBfc2VydmVyX3J1bm5pbmcKLSAgICAgICAgcG9ydC5p
c193ZWJzb2NrZXRfc2VydmVyc19ydW5uaW5nID0gaXNfd2Vic29ja2V0X3NlcnZlcnNfcnVubmlu
ZwotICAgICAgICBwb3J0LmlzX3dwdF9zZXJ2ZXJfcnVubmluZyA9IGlzX3dwdF9zZXJ2ZXJfcnVu
bmluZwogCiAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBz
ZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCiAg
ICAgICAgIHNlbGYud2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlcl9zdG9wcGVkID0gRmFsc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vic29ja2V0X3NlcnZlci5weSBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3NlcnZlcnMvd2Vic29ja2V0X3Nl
cnZlci5weQppbmRleCA0ZDRmNWI3NjE3OWQ0ZjAyZGRiMjlmYmIxMmJhMjFhMjQ4YjM4MDNmLi4x
ZjZiMjEyNThhNDM2YTUzNjU1ZTdhY2U0MGQzMzY5ODBmODhkODFkIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvc2VydmVycy93ZWJz
b2NrZXRfc2VydmVyLnB5CkBAIC0yOSwxMCArMjksOCBAQAogCiAiIiJBIGNsYXNzIHRvIGhlbHAg
c3RhcnQvc3RvcCB0aGUgUHlXZWJTb2NrZXQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIi
IgogCi1pbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKLWltcG9ydCBzb2Nr
ZXQKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiAKQEAgLTEwOCwxOCArMTA2LDYgQEAgY2xhc3Mg
UHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICBlbHNlOgogICAgICAg
ICAgICAgc2VsZi5fbG9nX3ByZWZpeCA9IF9XU19MT0dfTkFNRQogCi0gICAgZGVmIGlzX3J1bm5p
bmcoc2VsZik6Ci0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgcy5jb25uZWN0KCgnbG9jYWxob3N0Jywgc2VsZi5fcG9ydCkpCi0gICAgICAgIGV4
Y2VwdCBJT0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoZXJybm8u
RUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKToKLSAgICAgICAgICAgICAgICByYWlzZQot
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBz
LmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIFRydWUKLQogICAgIGRlZiBwb3J0c190b19mb3J3YXJk
KHNlbGYpOgogICAgICAgICByZXR1cm4gW3NlbGYuX3BvcnRdCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9w
b3J0L2Jhc2UucHkKaW5kZXggMDE1NzcxZjE3Yjc2YjZjZjYzNGJhNTA5ZjQ2NGIzMGQ3YjcxYjE4
MS4uMTkxMDIzMGU5YjhlNmU5NWRjNDlkOTNkNzY3YmU1YjVjYTZmMTU1MyAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAgLTU4LDcgKzU4LDcgQEAgZnJvbSB3ZWJraXRweS5wb3J0
IGltcG9ydCBkcml2ZXIKIGZyb20gd2Via2l0cHkucG9ydCBpbXBvcnQgaW1hZ2VfZGlmZgogZnJv
bSB3ZWJraXRweS5wb3J0IGltcG9ydCBzZXJ2ZXJfcHJvY2VzcwogZnJvbSB3ZWJraXRweS5wb3J0
LmZhY3RvcnkgaW1wb3J0IFBvcnRGYWN0b3J5Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5z
ZXJ2ZXJzIGltcG9ydCBhcGFjaGVfaHR0cF9zZXJ2ZXIsIGh0dHBfc2VydmVyLCBodHRwX3NlcnZl
cl9iYXNlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2ZXJzIGltcG9ydCBhcGFjaGVf
aHR0cF9zZXJ2ZXIsIGh0dHBfc2VydmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5zZXJ2
ZXJzIGltcG9ydCB3ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IHdlYnNvY2tldF9zZXJ2ZXIKIApAQCAtOTczLDE5ICs5NzMs
NiBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAg
IHNlbGYuX2h0dHBfc2VydmVyID0gc2VydmVyCiAKLSAgICBkZWYgaXNfaHR0cF9zZXJ2ZXJfcnVu
bmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGh0dHBfc2VydmVyX2Jhc2UuaXNfaHR0cF9zZXJ2
ZXJfcnVubmluZygpCi0KLSAgICBkZWYgaXNfd2Vic29ja2V0X3NlcnZlcnNfcnVubmluZyhzZWxm
KToKLSAgICAgICAgaWYgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgYW5kIHNlbGYuX3dl
YnNvY2tldF9zZXJ2ZXI6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fd2Vic29ja2V0X3NlY3Vy
ZV9zZXJ2ZXIuaXNfcnVubmluZygpIGFuZCBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLmlzX3J1bm5p
bmcoKQotICAgICAgICBlbGlmIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXI6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fd2Vic29ja2V0X3NlcnZlci5pc19ydW5uaW5nKCkKLSAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLSAgICBkZWYgaXNfd3B0X3NlcnZlcl9ydW5uaW5nKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLmlzX3dwdF9zZXJ2ZXJfcnVubmluZyhzZWxm
KQotCiAgICAgZGVmIF9leHRyYWN0X2NlcnRpZmljYXRlX2Zyb21fcGVtKHNlbGYsIHBlbV9maWxl
LCBkZXN0aW5hdGlvbl9jZXJ0aWZpY2F0ZV9maWxlKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2V4
ZWN1dGl2ZS5ydW5fY29tbWFuZChbJ29wZW5zc2wnLCAneDUwOScsICctb3V0Zm9ybScsICdwZW0n
LCAnLWluJywgcGVtX2ZpbGUsICctb3V0JywgZGVzdGluYXRpb25fY2VydGlmaWNhdGVfZmlsZV0s
IHJldHVybl9leGl0X2NvZGU9VHJ1ZSkgPT0gMAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332849</attachid>
            <date>2018-01-31 22:46:58 -0800</date>
            <delta_ts>2018-02-05 15:11:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-182360-20180131224658.patch</filename>
            <type>text/plain</type>
            <size>10071</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyNzk1MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDUxIEBACisyMDE4LTAxLTMxICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4K
KworICAgICAgICBSRUdSRVNTSU9OIChyMjE3NTcyKTogcnVuLXdlYmtpdC10ZXN0cyBleGl0cyB3
aXRob3V0IGVtaXR0aW5nIG5ld2xpbmUgY2hhcmFjdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODIzNjAKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlcyBhbiBhbm5veWFuY2Ugd2hlcmUgcnVuLXdl
YmtpdC10ZXN0cyBhbHdheXMgZXhpdHMgd2l0aG91dCBwcmludGluZyBhIG5ld2xpbmUgY2hhcmFj
dGVyLgorICAgICAgICBJbiB0aGUgdGVybWluYWwgdGhpcyBsb29rcyBsaWtlOgorCisgICAgICAg
ICAgICAkIFRvb2xzL1NjcmlwdHMvcnVuLXdlYmtpdC10ZXN0cworICAgICAgICAgICAgRXhwZWN0
ZWQgdG8gZmFpbCwgYnV0IHBhc3NlZDogKDcpCisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAg
IFN0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJAorCisgICAgICAgIFRoaXMgYnVnIHdhcyBj
YXVzZWQgYnkgY29kZSBhZGRlZCBpbiByMjE3NTcyIHRvIHN0b3AgYWxsIHJ1bi13ZWJraXQtdGVz
dHMgc3RhcnRlZCBzZXJ2ZXJzIChlLmcuIGFuIEhUVFAKKyAgICAgICAgc2VydmVyKSBmcm9tIGFu
IGF0LWV4aXQgaGFuZGxlci4gV2hlbiBydW4td2Via2l0LXRlc3RzIHJ1bnMgc3VjY2Vzc2Z1bGx5
IChpLmUuIHdpdGhvdXQgZXJyb3Igb3IKKyAgICAgICAgY29udHJvbC1DIGludGVycnVwdGlvbikg
d2Ugd291bGQgc3RvcCBhbGwgc3VjaCBzZXJ2ZXJzIHR3aWNlOiBvbmNlIGFzIHBhcnQgb2YgZW5k
aW5nIHRoZSB0ZXN0CisgICAgICAgIHJ1biBhbmQgb25jZSBmcm9tIHRoZSBhdC1leGl0IGhhbmRs
ZXIuIFRoZSBsYXR0ZXIgbmV2ZXIgcHJpbnRzIGEgdHJhaWxpbmcgbmV3bGluZSBjaGFyYWN0ZXIg
aGVuY2UKKyAgICAgICAgdGhlIHN0YXRlIG9mIHRoZSB0ZXJtaW5hbCAoYXMgZGVwaWN0ZWQgYWJv
dmUpLiBJbnN0ZWFkIExheW91dFRlc3RSdW5uZXIuc3RvcF9zZXJ2ZXJzKCkgc2hvdWxkIG9ubHkK
KyAgICAgICAgc3RvcCBzZXJ2ZXJzIHRoYXQgaXQgc3RhcnRlZCBpbiBMYXlvdXRUZXN0UnVubmVy
LnN0YXJ0X3NlcnZlcnMoKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weToKKyAgICAgICAgKExheW91dFRl
c3RSdW5uZXIuX19pbml0X18pOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5zdGFydF9zZXJ2
ZXJzKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuc3RvcF9zZXJ2ZXJzKToKKyAgICAgICAg
T25seSBzdGFydCBzZXJ2ZXJzIHRoYXQgcnVuLXdlYmtpdC10ZXN0cyBoYXMgbm90IGFscmVhZHkg
c3RhcnRlZCBhbmQgb25seSBzdG9wIHNlcnZlcnMgdGhhdAorICAgICAgICBydW4td2Via2l0LXRl
c3RzIHN0YXJ0ZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHk6CisgICAgICAgIChMYXlv
dXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQuaXNfd2Vic29ja2V0X3NlcnZl
cl9ydW5uaW5nKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3NlcnZlcnNf
c3RhcnRlZCk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0
YXJ0ZWQuaXNfd2Vic29ja2V0X3NlcnZlcnNfcnVubmluZyk6IERlbGV0ZWQuCisgICAgICAgIFVw
ZGF0ZSBkdWUgdG8gcmVuYW1lIGJlbG93LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvc2VydmVycy93ZWJzb2NrZXRfc2VydmVyLnB5OgorICAgICAgICAoaXNfd2Vi
X3NvY2tldF9zZXJ2ZXJfcnVubmluZyk6IEFkZGVkLgorICAgICAgICAoUHlXZWJTb2NrZXQuaXNf
cnVubmluZyk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFz
ZS5weToKKyAgICAgICAgKFBvcnQuaXNfaHR0cF9zZXJ2ZXJfcnVubmluZyk6IENoZWNrIGlmIHdl
IGFscmVhZHkgc3RhcnRlZCB0aGUgc2VydmVyIG91cnNlbGYuCisgICAgICAgIChQb3J0LmlzX3dl
YnNvY2tldF9zZXJ2ZXJfcnVubmluZyk6IEZvcm1lcmx5IG5hbWVkIGlzX3dlYnNvY2tldF9zZXJ2
ZXJzX3J1bm5pbmcuIE1vZGlmaWVkCisgICAgICAgIHRvIGNoZWNrIGlmIHdlIGFscmVhZHkgc3Rh
cnRlZCB0aGUgc2VydmVyIG91cnNlbGYuIFRha2UgYSBzaW1pbGFyIGFwcHJvYWNoIGFzIHRoZSBv
dGhlcgorICAgICAgICBQb3J0LmlzXypfcnVubmluZyBtZXRob2RzIGFuZCBvbmx5IGNoZWNrIGlm
IGFuIGV4aXN0aW5nIFdlYlNvY2tldCBzZXJ2ZXIgaXMgcnVubmluZyBvbiB0aGUKKyAgICAgICAg
bm9uLXNlY3VyZSBzZXJ2ZXIgcG9ydC4gVGhpcyBpcyBhIHNpbXBsZSBoZXVyaXN0aWMgYW5kIHNo
b3VsZCBiZSBzdWZmaWNpZW50IGluIHByYWN0aWNlLgorICAgICAgICAoUG9ydC5pc193cHRfc2Vy
dmVyX3J1bm5pbmcpOiBDaGVjayBpZiB3ZSBhbHJlYWR5IHN0YXJ0ZWQgdGhlIHNlcnZlciBvdXJz
ZWxmLgorICAgICAgICAoUG9ydC5pc193ZWJzb2NrZXRfc2VydmVyc19ydW5uaW5nKTogRGVsZXRl
ZDsgcmVuYW1lZCB0byBpc193ZWJzb2NrZXRfc2VydmVyX3J1bm5pbmcoKS4KKwogMjAxOC0wMS0z
MSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgTGF5b3V0
IFRlc3QgZmFzdC9ldmVudHMvYmVmb3JldW5sb2FkLWRvbS1tYW5pcHVsYXRpb24tY3Jhc2guaHRt
bCBpcyBjcmFzaGluZwpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5l
ci5weQkocmV2aXNpb24gMjI3OTUwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC03OSw2ICs3OSw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAg
c2VsZi5fdGVzdF9pbnB1dHMgPSBbXQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAg
ICAgICAgIHNlbGYuX2N1cnJlbnRfcnVuX3Jlc3VsdHMgPSBOb25lCisgICAgICAgIHNlbGYuX2Rp
ZF9zdGFydF9odHRwX3NlcnZlciA9IEZhbHNlCisgICAgICAgIHNlbGYuX2RpZF9zdGFydF93ZWJz
b2NrZXRfc2VydmVyID0gRmFsc2UKKyAgICAgICAgc2VsZi5fZGlkX3N0YXJ0X3dwdF9zZXJ2ZXIg
PSBGYWxzZQogCiAgICAgICAgIGlmICgoc2VsZi5fbmVlZHNfaHR0cCBhbmQgc2VsZi5fb3B0aW9u
cy5odHRwKSBvciBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIpIGFuZCBzZWxm
Ll9wb3J0LmdldF9vcHRpb24oInN0YXJ0X2h0dHBfc2VydmVyc19pZl9uZWVkZWQiKToKICAgICAg
ICAgICAgIHNlbGYuc3RhcnRfc2VydmVycygpCkBAIC0xOTAsMjYgKzE5MywzMiBAQCBjbGFzcyBM
YXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2ludGVycnVwdF9pZl9hdF9m
YWlsdXJlX2xpbWl0cyhydW5fcmVzdWx0cykKIAogICAgIGRlZiBzdGFydF9zZXJ2ZXJzKHNlbGYp
OgotICAgICAgICBpZiBzZWxmLl9uZWVkc19odHRwIGFuZCBub3Qgc2VsZi5fcG9ydC5pc19odHRw
X3NlcnZlcl9ydW5uaW5nKCk6CisgICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHAgYW5kIG5vdCBz
ZWxmLl9kaWRfc3RhcnRfaHR0cF9zZXJ2ZXIgYW5kIG5vdCBzZWxmLl9wb3J0LmlzX2h0dHBfc2Vy
dmVyX3J1bm5pbmcoKToKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdT
dGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF9o
dHRwX3NlcnZlcigpCi0gICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYnNvY2tldHMgYW5kIG5vdCBz
ZWxmLl9wb3J0LmlzX3dlYnNvY2tldF9zZXJ2ZXJzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHNl
bGYuX2RpZF9zdGFydF9odHRwX3NlcnZlciA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fbmVlZHNf
d2Vic29ja2V0cyBhbmQgbm90IHNlbGYuX2RpZF9zdGFydF93ZWJzb2NrZXRfc2VydmVyIGFuZCBu
b3Qgc2VsZi5fcG9ydC5pc193ZWJzb2NrZXRfc2VydmVyX3J1bm5pbmcoKToKICAgICAgICAgICAg
IHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBXZWJTb2NrZXQgc2VydmVyIC4u
LicpCiAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAg
ICAgICBpZiBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIgYW5kIG5vdCBzZWxm
Ll9wb3J0LmlzX3dwdF9zZXJ2ZXJfcnVubmluZygpOgorICAgICAgICAgICAgc2VsZi5fZGlkX3N0
YXJ0X3dlYnNvY2tldF9zZXJ2ZXIgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX25lZWRzX3dlYl9w
bGF0Zm9ybV90ZXN0X3NlcnZlciBhbmQgbm90IHNlbGYuX2RpZF9zdGFydF93cHRfc2VydmVyIGFu
ZCBub3Qgc2VsZi5fcG9ydC5pc193cHRfc2VydmVyX3J1bm5pbmcoKToKICAgICAgICAgICAgIHNl
bGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBXZWIgUGxhdGZvcm0gVGVzdCBzZXJ2
ZXIgLi4uJykKICAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2ViX3BsYXRmb3JtX3Rlc3Rf
c2VydmVyKCkKKyAgICAgICAgICAgIHNlbGYuX2RpZF9zdGFydF93cHRfc2VydmVyID0gVHJ1ZQog
CiAgICAgZGVmIHN0b3Bfc2VydmVycyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fbmVlZHNfaHR0
cDoKKyAgICAgICAgaWYgc2VsZi5fZGlkX3N0YXJ0X2h0dHBfc2VydmVyOgogICAgICAgICAgICAg
c2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3BwaW5nIEhUVFAgc2VydmVyIC4uLicpCiAg
ICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICBpZiBzZWxm
Ll9uZWVkc193ZWJzb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fZGlkX3N0YXJ0X2h0dHBfc2Vy
dmVyID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fZGlkX3N0YXJ0X3dlYnNvY2tldF9zZXJ2ZXI6
CiAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RvcHBpbmcgV2ViU29j
a2V0IHNlcnZlciAuLi4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYnNvY2tldF9z
ZXJ2ZXIoKQotICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6
CisgICAgICAgICAgICBzZWxmLl9kaWRfc3RhcnRfd2Vic29ja2V0X3NlcnZlciA9IEZhbHNlCisg
ICAgICAgIGlmIHNlbGYuX2RpZF9zdGFydF93cHRfc2VydmVyOgogICAgICAgICAgICAgc2VsZi5f
cHJpbnRlci53cml0ZV91cGRhdGUoJ1N0b3BwaW5nIFdlYiBQbGF0Zm9ybSBUZXN0IHNlcnZlciAu
Li4nKQogICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9wX3dlYl9wbGF0Zm9ybV90ZXN0X3NlcnZl
cigpCisgICAgICAgICAgICBzZWxmLl9kaWRfc3RhcnRfd3B0X3NlcnZlciA9IEZhbHNlCiAKICAg
ICBkZWYgaGFuZGxlKHNlbGYsIG5hbWUsIHNvdXJjZSwgKmFyZ3MpOgogICAgICAgICBtZXRob2Qg
PSBnZXRhdHRyKHNlbGYsICdfaGFuZGxlXycgKyBuYW1lKQpJbmRleDogVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQkocmV2aXNpb24gMjI3
OTUwKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyAr
MTYyLDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlcwogICAgICAg
ICBkZWYgaXNfaHR0cF9zZXJ2ZXJfcnVubmluZygpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYu
aHR0cF9zdGFydGVkIGFuZCBub3Qgc2VsZi5odHRwX3N0b3BwZWQKIAotICAgICAgICBkZWYgaXNf
d2Vic29ja2V0X3NlcnZlcnNfcnVubmluZygpOgorICAgICAgICBkZWYgaXNfd2Vic29ja2V0X3Nl
cnZlcl9ydW5uaW5nKCk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi53ZWJzb2NrZXRfc3RhcnRl
ZCBhbmQgbm90IHNlbGYud2Vic29ja2V0X3N0b3BwZWQKIAogICAgICAgICBkZWYgaXNfd3B0X3Nl
cnZlcl9ydW5uaW5nKCk6CkBAIC0xNzcsNyArMTc3LDcgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5l
clRlc3RzKHVuaXR0ZXN0LlRlcwogICAgICAgICBwb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlciA9
IHN0b3Bfd2Vic29ja2V0X3NlcnZlcgogICAgICAgICBwb3J0LnN0b3Bfd2ViX3BsYXRmb3JtX3Rl
c3Rfc2VydmVyID0gc3RvcF93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXIKICAgICAgICAgcG9ydC5p
c19odHRwX3NlcnZlcl9ydW5uaW5nID0gaXNfaHR0cF9zZXJ2ZXJfcnVubmluZwotICAgICAgICBw
b3J0LmlzX3dlYnNvY2tldF9zZXJ2ZXJzX3J1bm5pbmcgPSBpc193ZWJzb2NrZXRfc2VydmVyc19y
dW5uaW5nCisgICAgICAgIHBvcnQuaXNfd2Vic29ja2V0X3NlcnZlcl9ydW5uaW5nID0gaXNfd2Vi
c29ja2V0X3NlcnZlcl9ydW5uaW5nCiAgICAgICAgIHBvcnQuaXNfd3B0X3NlcnZlcl9ydW5uaW5n
ID0gaXNfd3B0X3NlcnZlcl9ydW5uaW5nCiAKICAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBz
ZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tl
dF9zdG9wcGVkID0gRmFsc2UKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3NlcnZlcnMvd2Vic29ja2V0X3NlcnZlci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9zZXJ2ZXJzL3dlYnNvY2tldF9zZXJ2ZXIucHkJKHJl
dmlzaW9uIDIyNzk1MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Nl
cnZlcnMvd2Vic29ja2V0X3NlcnZlci5weQkod29ya2luZyBjb3B5KQpAQCAtMjksMTUgKzI5LDEy
IEBACiAKICIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBQeVdlYlNvY2tldCBzZXJ2
ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCiAKLWltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dp
bmcKIGltcG9ydCBvcwotaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIAot
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuc2VydmVycyBpbXBvcnQgaHR0cF9zZXJ2ZXIKLWZy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnNlcnZlcnMgaW1wb3J0IGh0dHBfc2VydmVyLCBo
dHRwX3NlcnZlcl9iYXNlCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKIApA
QCAtMTA4LDE4ICsxMDUsNiBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRw
ZCk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9sb2dfcHJlZml4ID0gX1dTX0xP
R19OQU1FCiAKLSAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKLSAgICAgICAgcyA9IHNvY2tldC5z
b2NrZXQoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzLmNvbm5lY3QoKCdsb2NhbGhvc3Qn
LCBzZWxmLl9wb3J0KSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKLSAgICAgICAgICAg
IGlmIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFRlVTRUQsIGVycm5vLkVDT05OUkVTRVQp
OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAg
ICAgZmluYWxseToKLSAgICAgICAgICAgIHMuY2xvc2UoKQotICAgICAgICByZXR1cm4gVHJ1ZQot
CiAgICAgZGVmIHBvcnRzX3RvX2ZvcndhcmQoc2VsZik6CiAgICAgICAgIHJldHVybiBbc2VsZi5f
cG9ydF0KIApAQCAtMTkwLDMgKzE3NSw3IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVy
LkxpZ2h0dHBkKToKICAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CiAgICAgICAgICAgICBzZWxmLl93
c291dC5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKworCitkZWYgaXNf
d2ViX3NvY2tldF9zZXJ2ZXJfcnVubmluZygpOgorICAgIHJldHVybiBodHRwX3NlcnZlcl9iYXNl
Lkh0dHBTZXJ2ZXJCYXNlLl9pc19ydW5uaW5nX29uX3BvcnQoUHlXZWJTb2NrZXQuREVGQVVMVF9X
U19QT1JUKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkJKHJldmlzaW9uIDIy
Nzk1MCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5CSh3b3JraW5nIGNv
cHkpCkBAIC05NzQsMTYgKzk3NCwxOCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgIHNl
bGYuX2h0dHBfc2VydmVyID0gc2VydmVyCiAKICAgICBkZWYgaXNfaHR0cF9zZXJ2ZXJfcnVubmlu
ZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faHR0cF9zZXJ2ZXI6CisgICAgICAgICAgICByZXR1
cm4gVHJ1ZQogICAgICAgICByZXR1cm4gaHR0cF9zZXJ2ZXJfYmFzZS5pc19odHRwX3NlcnZlcl9y
dW5uaW5nKCkKIAotICAgIGRlZiBpc193ZWJzb2NrZXRfc2VydmVyc19ydW5uaW5nKHNlbGYpOgot
ICAgICAgICBpZiBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3NlcnZlciBhbmQgc2VsZi5fd2Vic29j
a2V0X3NlcnZlcjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl93ZWJzb2NrZXRfc2VjdXJlX3Nl
cnZlci5pc19ydW5uaW5nKCkgYW5kIHNlbGYuX3dlYnNvY2tldF9zZXJ2ZXIuaXNfcnVubmluZygp
Ci0gICAgICAgIGVsaWYgc2VsZi5fd2Vic29ja2V0X3NlcnZlcjoKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLl93ZWJzb2NrZXRfc2VydmVyLmlzX3J1bm5pbmcoKQotICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICBkZWYgaXNfd2Vic29ja2V0X3NlcnZlcl9ydW5uaW5nKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLl93ZWJzb2NrZXRfc2VydmVyOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAg
ICAgcmV0dXJuIHdlYnNvY2tldF9zZXJ2ZXIuaXNfd2ViX3NvY2tldF9zZXJ2ZXJfcnVubmluZygp
CiAKICAgICBkZWYgaXNfd3B0X3NlcnZlcl9ydW5uaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll93ZWJfcGxhdGZvcm1fdGVzdF9zZXJ2ZXI6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAg
ICAgICByZXR1cm4gd2ViX3BsYXRmb3JtX3Rlc3Rfc2VydmVyLmlzX3dwdF9zZXJ2ZXJfcnVubmlu
ZyhzZWxmKQogCiAgICAgZGVmIF9leHRyYWN0X2NlcnRpZmljYXRlX2Zyb21fcGVtKHNlbGYsIHBl
bV9maWxlLCBkZXN0aW5hdGlvbl9jZXJ0aWZpY2F0ZV9maWxlKToK
</data>

          </attachment>
      

    </bug>

</bugzilla>