<?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>151631</bug_id>
          
          <creation_ts>2015-11-27 00:40:42 -0800</creation_ts>
          <short_desc>[Streams API] Directly use @then as much as possible</short_desc>
          <delta_ts>2015-12-14 09:27:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1144563</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-11-27 00:40:42 -0800</bug_when>
    <thetext>Directly using promise.@then() in lieu of @Promise.prototype.@then.@call() is more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144565</commentid>
    <comment_count>1</comment_count>
      <attachid>266195</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-11-27 01:14:53 -0800</bug_when>
    <thetext>Created attachment 266195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144571</commentid>
    <comment_count>2</comment_count>
      <attachid>266195</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-11-27 04:06:31 -0800</bug_when>
    <thetext>Comment on attachment 266195
Patch

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

Patch is an improvement and it improves code readability. My only concern is that it creates a duality when vending some promises as some are still done thru the prototype.

&gt; Source/WebCore/Modules/streams/ReadableStreamInternals.js:99
&gt; -    @Promise.prototype.@catch.@call(reader.closed, function(e) {
&gt; +    reader.@closedPromiseCapability.@promise.@catch(function(e) {

I guess this doesn&apos;t create any brand check issues in the tests, right?

&gt; Source/WebCore/Modules/streams/StreamInternals.js:40
&gt; +    const promise = @Promise.@resolve(method.@apply(object, args));
&gt; +    if (typeof promise.@then === &quot;undefined&quot;)
&gt; +        promise.@then = @Promise.prototype.@then;
&gt; +    return promise;

We might want to refactor this into a function.

&gt; Source/WebCore/Modules/streams/StreamInternals.js:67
&gt; +        const promise = @Promise.@resolve(method.@apply(object, args1));
&gt; +        if (typeof promise.@then === &quot;undefined&quot;)
&gt; +            promise.@then = @Promise.prototype.@then;
&gt; +        return promise;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144581</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-11-27 05:12:47 -0800</bug_when>
    <thetext>Thanks for the feedback.

&gt; Patch is an improvement and it improves code readability. My only concern is
&gt; that it creates a duality when vending some promises as some are still done
&gt; thru the prototype.

I am not sure which duality you are mentioning.

It is true that we will be calling @then as a property for promises whose prototype was changed. For all other promises, we will call the same @then function as a property of the prototype. Since this is the same function, this seems ok to me.

The @Promise.prototype.@then.@call pattern is replaced in all cases except pipeTo.
Once pipeTo will use abstract stream operations, this pattern should also be replaced there.
This will end that &quot;duality&quot;.

&gt; 
&gt; &gt; Source/WebCore/Modules/streams/ReadableStreamInternals.js:99
&gt; &gt; -    @Promise.prototype.@catch.@call(reader.closed, function(e) {
&gt; &gt; +    reader.@closedPromiseCapability.@promise.@catch(function(e) {
&gt; 
&gt; I guess this doesn&apos;t create any brand check issues in the tests, right?

reader is always a ReadableStreamReader instance in that case so no brand check issue.
Somehow this is an optimization.

The change from reader.closed to reader.@... is due to the fact that closed property of ReadableStreamReader prototype may be changed by user scripts.  

reader being not exposed to user script, reader.@closedPromiseCapability.@promise is also not exposed.
Hence why we are sure @catch property is available (although we should not use it as per bug 151625).

&gt; &gt; Source/WebCore/Modules/streams/StreamInternals.js:40
&gt; &gt; +    const promise = @Promise.@resolve(method.@apply(object, args));
&gt; &gt; +    if (typeof promise.@then === &quot;undefined&quot;)
&gt; &gt; +        promise.@then = @Promise.prototype.@then;
&gt; &gt; +    return promise;
&gt; 
&gt; We might want to refactor this into a function.

OK.
I can do that as a later patch or at landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144592</commentid>
    <comment_count>4</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-11-27 07:11:15 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Patch is an improvement and it improves code readability. My only concern is
&gt; &gt; that it creates a duality when vending some promises as some are still done
&gt; &gt; thru the prototype.
&gt; 
&gt; I am not sure which duality you are mentioning.

The duality I refer to is that so far we had only one way to call &quot;then&quot; at the code, which was using the prototype. Now we have two, which is not necessarily bad, but for people reading the code it could be weird to now where that then comes from.

&gt; It is true that we will be calling @then as a property for promises whose
&gt; prototype was changed. For all other promises, we will call the same @then
&gt; function as a property of the prototype. Since this is the same function,
&gt; this seems ok to me.
&gt; 
&gt; The @Promise.prototype.@then.@call pattern is replaced in all cases except
&gt; pipeTo.
&gt; Once pipeTo will use abstract stream operations, this pattern should also be
&gt; replaced there.
&gt; This will end that &quot;duality&quot;.

Good.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/streams/ReadableStreamInternals.js:99
&gt; &gt; &gt; -    @Promise.prototype.@catch.@call(reader.closed, function(e) {
&gt; &gt; &gt; +    reader.@closedPromiseCapability.@promise.@catch(function(e) {
&gt; &gt; 
&gt; &gt; I guess this doesn&apos;t create any brand check issues in the tests, right?
&gt; 
&gt; reader is always a ReadableStreamReader instance in that case so no brand
&gt; check issue.
&gt; Somehow this is an optimization.

Good.

&gt; The change from reader.closed to reader.@... is due to the fact that closed
&gt; property of ReadableStreamReader prototype may be changed by user scripts.  

I understand.

I have one big concern about all these changes. Spec speaks about creating and using promises. I don&apos;t know if the possibility of the user changing the prototype or constructor and screwing things should be avoided. Saying it other way, maybe we are being too paternalistic here when interpreting the spec and se should be more literal. This is just one big doubt. I am not sure at all about it :)

&gt; &gt; &gt; Source/WebCore/Modules/streams/StreamInternals.js:40
&gt; &gt; &gt; +    const promise = @Promise.@resolve(method.@apply(object, args));
&gt; &gt; &gt; +    if (typeof promise.@then === &quot;undefined&quot;)
&gt; &gt; &gt; +        promise.@then = @Promise.prototype.@then;
&gt; &gt; &gt; +    return promise;
&gt; &gt; 
&gt; &gt; We might want to refactor this into a function.
&gt; 
&gt; OK.
&gt; I can do that as a later patch or at landing.

Awesome. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144593</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-11-27 08:14:15 -0800</bug_when>
    <thetext>&gt; I have one big concern about all these changes. Spec speaks about creating
&gt; and using promises. I don&apos;t know if the possibility of the user changing the
&gt; prototype or constructor and screwing things should be avoided. Saying it
&gt; other way, maybe we are being too paternalistic here when interpreting the
&gt; spec and se should be more literal. This is just one big doubt. I am not
&gt; sure at all about it :)

In general, it seems to me that an implementation choice (C++ or JS built-in) should not change the behavior visible from user scripts.
Also, this is not only about screwing. It is also about ensuring private data does not leak to web pages by some nasty prototype tweaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145221</commentid>
    <comment_count>6</comment_count>
      <attachid>266352</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-01 03:44:26 -0800</bug_when>
    <thetext>Created attachment 266352
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145222</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-01 03:46:22 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created attachment 266352 [details]
&gt; Rebased patch

Rebased according other streams patches, added &quot;shieldingPromiseResolve&quot; helper function and migrated some &quot;typeof xx === &apos;undefined&apos;&quot; to xx === undefined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148960</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-12-14 08:15:32 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Created attachment 266352 [details]
&gt; &gt; Rebased patch
&gt; 
&gt; Rebased according other streams patches, added &quot;shieldingPromiseResolve&quot;
&gt; helper function and migrated some &quot;typeof xx === &apos;undefined&apos;&quot; to xx ===
&gt; undefined.

Ping review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148981</commentid>
    <comment_count>9</comment_count>
      <attachid>266352</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-14 09:27:52 -0800</bug_when>
    <thetext>Comment on attachment 266352
Rebased patch

Clearing flags on attachment: 266352

Committed r194035: &lt;http://trac.webkit.org/changeset/194035&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1148982</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-14 09:27:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266195</attachid>
            <date>2015-11-27 01:14:53 -0800</date>
            <delta_ts>2015-12-01 03:44:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151631-20151127101434.patch</filename>
            <type>text/plain</type>
            <size>11533</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzM5M2RhN2U0ZDBlZDFh
Mjk3MTMyNzUyODQzMmY5ZmRlNDk3OWM3ZS4uZjMyNGM3ZjVmYjI4MTFjZDUyMWYwZjZiNzA3ZGNj
ZmIxNmY3OGQ3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDE1LTExLTI3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgW1N0cmVh
bXMgQVBJXSBEaXJlY3RseSB1c2UgQHRoZW4gYXMgbXVjaCBhcyBwb3NzaWJsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjMxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgZnJvbSBAUHJvbWlz
ZS5wcm90b3R5cGUuQHRoZW4uQGNhbGwocHJvbWlzZSwuLi4pIHRvIHByb21pc2UuQHRoZW4uKC4u
LikKKyAgICAgICAgZm9yIHByb21pc2Ugb2JqZWN0cyB0aGF0IGFyZSBub3QgZXhwb3NlZCB0byB1
c2VyIHNjcmlwdHMuCisKKyAgICAgICAgVXBkYXRlZCBwcm9taXNlSW52b2tlWFggc3RyZWFtIHV0
aWxpdHkgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGF0IHJldHVybmVkIHByb21pc2UgYWx3YXlzIGhh
cyBhIEB0aGVuLgorICAgICAgICBUaGlzIGFsbG93cyBpbXByb3ZpbmcgdGhlIHJlYWRhYmlsaXR5
IG9mIGNvZGUgY2FsbGluZyBwcm9taXNlSW52b2tlWFggZnVuY3Rpb25zLgorICAgICAgICBDaGFu
Z2VkIGludm9rZU9yTm9vcCB0byBwcm9taXNlSW52b2tlT3JOb29wTm9DYXRjaCBhcyBpbnZva2VP
ck5vb3AKKyAgICAgICAgcmVzdWx0IGlzIGFsd2F5cyB3cmFwcGVkIGFzIGEgcHJvbWlzZSB1c2lu
ZyBQcm9taXNlLnJlc29sdmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZVJlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKGNsb3NlRGVzdGluYXRpb24pOgorICAg
ICAgICAocGlwZVRvKToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHMuanM6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICh0ZWVS
ZWFkYWJsZVN0cmVhbVB1bGxGdW5jdGlvbik6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0cmVhbUJy
YW5jaDJDYW5jZWxGdW5jdGlvbik6CisgICAgICAgIChjYW5jZWxSZWFkYWJsZVN0cmVhbSk6Cisg
ICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qczoKKyAgICAgICAgKHBy
b21pc2VJbnZva2VPck5vb3BOb0NhdGNoKToKKyAgICAgICAgKHByb21pc2VJbnZva2VPck5vb3Ap
OgorICAgICAgICAocHJvbWlzZUludm9rZU9yRmFsbGJhY2tPck5vb3ApOgorICAgICAgICAqIE1v
ZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5qczoKKyAgICAgICAgKGluaXRpYWxpemVXcml0
YWJsZVN0cmVhbSk6CisgICAgICAgIChhYm9ydCk6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1z
L1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzOgorICAgICAgICAoY2FsbE9yU2NoZWR1bGVXcml0
YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZSk6CisKIDIwMTUtMTEtMTggIEFuZHkgRXN0ZXMgIDxhZXN0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb250ZW50IEZpbHRlcmluZ10gQ3Jhc2ggaW4gRG9j
dW1lbnRMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKCkgd2hlbiBhbGxvd2luZyBhIG1lZGlhIGRvY3Vt
ZW50IHRvIGxvYWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbS5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJs
ZVN0cmVhbS5qcwppbmRleCA2OTZjOTc4ZDRmMGEzZDdjYTM5ZDg3NzkwNTYxODZiODkzMGY4ODJi
Li45ODk1NDA4ODgzYzA1N2I3NjA5ZjYxZDdiZDYwZTkwNjFkNDY2MTdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW0uanMKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmpzCkBAIC01NSw5ICs1
NSw4IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVSZWFkYWJsZVN0cmVhbSh1bmRlcmx5aW5nU291cmNl
LCBzdHJhdGVneSkKICAgICB0aGlzLkBjb250cm9sbGVyID0gbmV3IEBSZWFkYWJsZVN0cmVhbUNv
bnRyb2xsZXIodGhpcyk7CiAgICAgdGhpcy5Ac3RyYXRlZ3kgPSBAdmFsaWRhdGVBbmROb3JtYWxp
emVRdWV1aW5nU3RyYXRlZ3koc3RyYXRlZ3kuc2l6ZSwgc3RyYXRlZ3kuaGlnaFdhdGVyTWFyayk7
CiAKLSAgICBjb25zdCByZXN1bHQgPSBAaW52b2tlT3JOb29wKHVuZGVybHlpbmdTb3VyY2UsICJz
dGFydCIsIFt0aGlzLkBjb250cm9sbGVyXSk7CiAgICAgY29uc3QgX3RoaXMgPSB0aGlzOwotICAg
IEBQcm9taXNlLnByb3RvdHlwZS5AdGhlbi5AY2FsbChAUHJvbWlzZS5AcmVzb2x2ZShyZXN1bHQp
LCBmdW5jdGlvbigpIHsKKyAgICBAcHJvbWlzZUludm9rZU9yTm9vcE5vQ2F0Y2godW5kZXJseWlu
Z1NvdXJjZSwgInN0YXJ0IiwgW3RoaXMuQGNvbnRyb2xsZXJdKS5AdGhlbihmdW5jdGlvbigpIHsK
ICAgICAgICAgX3RoaXMuQHN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICBAcmVxdWVzdFJlYWRhYmxl
U3RyZWFtUHVsbChfdGhpcyk7CiAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKQEAgLTEwMyw4ICsx
MDIsOSBAQCBmdW5jdGlvbiBwaXBlVG8oZGVzdGluYXRpb24sIG9wdGlvbnMpCiB7CiAgICAgInVz
ZSBzdHJpY3QiOwogCi0gICAgLy8gV2UgYXJlIG5vdCBzaGllbGRpbmcgYWdhaW5zdCBtZXRob2Rz
IGFuZCBhdHRyaWJ1dGVzIG9mIHRoZSByZWFkZXIgYW5kIGRlc3RpbmF0aW9uIGFzIHRob3NlIG9i
amVjdHMgZG9uJ3QgaGF2ZSB0bwotICAgIC8vIGJlIG5lY2Vzc2FyaWx5IFJlYWRhYmxlU3RyZWFt
UmVhZGVyIGFuZCBXcml0YWJsZVN0cmVhbS4KKyAgICAvLyBGSVhNRTogcmV3cml0ZSBwaXBlVG8g
c28gYXMgdG8gcmVxdWlyZSB0byBoYXZlICd0aGlzJyBhcyBhIFJlYWRhYmxlU3RyZWFtIGFuZCBk
ZXN0aW5hdGlvbiBiZSBhIFdyaXRhYmxlU3RyZWFtLgorICAgIC8vIFNlZSBodHRwczovL2dpdGh1
Yi5jb20vd2hhdHdnL3N0cmVhbXMvaXNzdWVzLzQwNy4KKyAgICAvLyBXZSBzaG91bGQgc2hpZWxk
IHRoZSBwaXBlVG8gaW1wbGVtZW50YXRpb24gYXQgdGhlIHNhbWUgdGltZS4KIAogICAgIGNvbnN0
IHByZXZlbnRDbG9zZSA9IEBpc09iamVjdChvcHRpb25zKSAmJiAhIW9wdGlvbnMucHJldmVudENs
b3NlOwogICAgIGNvbnN0IHByZXZlbnRBYm9ydCA9IEBpc09iamVjdChvcHRpb25zKSAmJiAhIW9w
dGlvbnMucHJldmVudEFib3J0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
dHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCmluZGV4IDM2N2IxNjFlYWFiNjAw
OGVmOWE5OWVhYTdhM2M2ZDc5YWNmZGNmOTUuLjkxYWYyM2UzYzRkNjUyNmM3ODQzOTgxZDRlOTIx
NDRhYzFjNGEyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9S
ZWFkYWJsZVN0cmVhbUludGVybmFscy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0
cmVhbXMvUmVhZGFibGVTdHJlYW1JbnRlcm5hbHMuanMKQEAgLTk2LDcgKzk2LDcgQEAgZnVuY3Rp
b24gdGVlUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBzaG91bGRDbG9uZSkKICAgICAgICAgImNhbmNl
bCI6IEB0ZWVSZWFkYWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwgc3Ry
ZWFtKQogICAgIH0pOwogCi0gICAgQFByb21pc2UucHJvdG90eXBlLkBjYXRjaC5AY2FsbChyZWFk
ZXIuY2xvc2VkLCBmdW5jdGlvbihlKSB7CisgICAgcmVhZGVyLkBjbG9zZWRQcm9taXNlQ2FwYWJp
bGl0eS5AcHJvbWlzZS5AY2F0Y2goZnVuY3Rpb24oZSkgewogICAgICAgICBpZiAodGVlU3RhdGUu
Y2xvc2VkT3JFcnJvcmVkKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBAZXJyb3JSZWFk
YWJsZVN0cmVhbShicmFuY2gxLCBlKTsKQEAgLTE0Niw5ICsxNDYsOSBAQCBmdW5jdGlvbiB0ZWVS
ZWFkYWJsZVN0cmVhbUJyYW5jaDFDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwgc3RyZWFtKQogICAg
ICAgICB0ZWVTdGF0ZS5jYW5jZWxlZDEgPSB0cnVlOwogICAgICAgICB0ZWVTdGF0ZS5yZWFzb24x
ID0gcjsKICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMikgewotICAgICAgICAgICAgQFBy
b21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKEBjYW5jZWxSZWFkYWJsZVN0cmVhbShzdHJlYW0s
IFt0ZWVTdGF0ZS5yZWFzb24xLCB0ZWVTdGF0ZS5yZWFzb24yXSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2FuY2VsUHJvbWlzZUNhcGFiaWxp
dHkuQHJlc29sdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGVlU3RhdGUuY2FuY2VsUHJvbWlzZUNhcGFiaWxpdHkuQHJlamVjdCk7CisgICAgICAgICAgICBA
Y2FuY2VsUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBbdGVlU3RhdGUucmVhc29uMSwgdGVlU3RhdGUu
cmVhc29uMl0pLkB0aGVuKAorICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbFByb21pc2VD
YXBhYmlsaXR5LkByZXNvbHZlLAorICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbFByb21p
c2VDYXBhYmlsaXR5LkByZWplY3QpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0ZWVTdGF0
ZS5jYW5jZWxQcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTsKICAgICB9CkBAIC0xNjIsOSArMTYy
LDkgQEAgZnVuY3Rpb24gdGVlUmVhZGFibGVTdHJlYW1CcmFuY2gyQ2FuY2VsRnVuY3Rpb24odGVl
U3RhdGUsIHN0cmVhbSkKICAgICAgICAgdGVlU3RhdGUuY2FuY2VsZWQyID0gdHJ1ZTsKICAgICAg
ICAgdGVlU3RhdGUucmVhc29uMiA9IHI7CiAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDEp
IHsKLSAgICAgICAgICAgIEBQcm9taXNlLnByb3RvdHlwZS5AdGhlbi5AY2FsbChAY2FuY2VsUmVh
ZGFibGVTdHJlYW0oc3RyZWFtLCBbdGVlU3RhdGUucmVhc29uMSwgdGVlU3RhdGUucmVhc29uMl0p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNh
bmNlbFByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbFByb21pc2VDYXBhYmlsaXR5LkByZWpl
Y3QpOworICAgICAgICAgICAgQGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwgW3RlZVN0YXRl
LnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKS5AdGhlbigKKyAgICAgICAgICAgICAgICB0ZWVT
dGF0ZS5jYW5jZWxQcm9taXNlQ2FwYWJpbGl0eS5AcmVzb2x2ZSwKKyAgICAgICAgICAgICAgICB0
ZWVTdGF0ZS5jYW5jZWxQcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0KTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gdGVlU3RhdGUuY2FuY2VsUHJvbWlzZUNhcGFiaWxpdHkuQHByb21pc2U7CiAg
ICAgfQpAQCAtMjM0LDggKzIzNCw3IEBAIGZ1bmN0aW9uIHJlcXVlc3RSZWFkYWJsZVN0cmVhbVB1
bGwoc3RyZWFtKQogCiAgICAgc3RyZWFtLkBwdWxsaW5nID0gdHJ1ZTsKIAotICAgIGNvbnN0IHBy
b21pc2UgPSBAcHJvbWlzZUludm9rZU9yTm9vcChzdHJlYW0uQHVuZGVybHlpbmdTb3VyY2UsICJw
dWxsIiwgW3N0cmVhbS5AY29udHJvbGxlcl0pOwotICAgIEBQcm9taXNlLnByb3RvdHlwZS5AdGhl
bi5AY2FsbChwcm9taXNlLCBmdW5jdGlvbigpIHsKKyAgICBAcHJvbWlzZUludm9rZU9yTm9vcChz
dHJlYW0uQHVuZGVybHlpbmdTb3VyY2UsICJwdWxsIiwgW3N0cmVhbS5AY29udHJvbGxlcl0pLkB0
aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICBzdHJlYW0uQHB1bGxpbmcgPSBmYWxzZTsKICAgICAg
ICAgaWYgKHN0cmVhbS5AcHVsbEFnYWluKSB7CiAgICAgICAgICAgICBzdHJlYW0uQHB1bGxBZ2Fp
biA9IGZhbHNlOwpAQCAtMjczLDcgKzI3Miw3IEBAIGZ1bmN0aW9uIGNhbmNlbFJlYWRhYmxlU3Ry
ZWFtKHN0cmVhbSwgcmVhc29uKQogICAgICAgICByZXR1cm4gQFByb21pc2UuQHJlamVjdChzdHJl
YW0uQHN0b3JlZEVycm9yKTsKICAgICBzdHJlYW0uQHF1ZXVlID0gQG5ld1F1ZXVlKCk7CiAgICAg
QGZpbmlzaENsb3NpbmdSZWFkYWJsZVN0cmVhbShzdHJlYW0pOwotICAgIHJldHVybiBAUHJvbWlz
ZS5wcm90b3R5cGUuQHRoZW4uQGNhbGwoQHByb21pc2VJbnZva2VPck5vb3Aoc3RyZWFtLkB1bmRl
cmx5aW5nU291cmNlLCAiY2FuY2VsIiwgW3JlYXNvbl0pLCBmdW5jdGlvbigpIHsgfSk7CisgICAg
cmV0dXJuIEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5AdW5kZXJseWluZ1NvdXJjZSwgImNh
bmNlbCIsIFtyZWFzb25dKS5AdGhlbihmdW5jdGlvbigpIHsgfSk7CiB9CiAKIGZ1bmN0aW9uIGZp
bmlzaENsb3NpbmdSZWFkYWJsZVN0cmVhbShzdHJlYW0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zdHJlYW1zL1N0cmVhbUludGVybmFscy5qcwppbmRleCBmY2Q4Yzk5NTc5MDE4M2Iz
NjZhMTJiNjc4MTM0MDZiYjdlZjJmNDU3Li4wYzc5MWJhMDMyNDU0NmEwOTg5M2ZiMTZjYjVhYjA5
NmVmYmEwZGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvU3Ry
ZWFtSW50ZXJuYWxzLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9TdHJl
YW1JbnRlcm5hbHMuanMKQEAgLTI3LDE0ICsyNywxNyBAQAogLy8gQGNvbmRpdGlvbmFsPUVOQUJM
RShTVFJFQU1TX0FQSSkKIC8vIEBpbnRlcm5hbAogCi1mdW5jdGlvbiBpbnZva2VPck5vb3Aob2Jq
ZWN0LCBrZXksIGFyZ3MpCitmdW5jdGlvbiBwcm9taXNlSW52b2tlT3JOb29wTm9DYXRjaChvYmpl
Y3QsIGtleSwgYXJncykKIHsKICAgICAidXNlIHN0cmljdCI7CiAKICAgICBjb25zdCBtZXRob2Qg
PSBvYmplY3Rba2V5XTsKICAgICBpZiAodHlwZW9mIG1ldGhvZCA9PT0gInVuZGVmaW5lZCIpCi0g
ICAgICAgIHJldHVybjsKLSAgICByZXR1cm4gbWV0aG9kLkBhcHBseShvYmplY3QsIGFyZ3MpOwor
ICAgICAgICByZXR1cm4gQFByb21pc2UuQHJlc29sdmUoKTsKKyAgICBjb25zdCBwcm9taXNlID0g
QFByb21pc2UuQHJlc29sdmUobWV0aG9kLkBhcHBseShvYmplY3QsIGFyZ3MpKTsKKyAgICBpZiAo
dHlwZW9mIHByb21pc2UuQHRoZW4gPT09ICJ1bmRlZmluZWQiKQorICAgICAgICBwcm9taXNlLkB0
aGVuID0gQFByb21pc2UucHJvdG90eXBlLkB0aGVuOworICAgIHJldHVybiBwcm9taXNlOwogfQog
CiBmdW5jdGlvbiBwcm9taXNlSW52b2tlT3JOb29wKG9iamVjdCwga2V5LCBhcmdzKQpAQCAtNDIs
MTAgKzQ1LDcgQEAgZnVuY3Rpb24gcHJvbWlzZUludm9rZU9yTm9vcChvYmplY3QsIGtleSwgYXJn
cykKICAgICAidXNlIHN0cmljdCI7CiAKICAgICB0cnkgewotICAgICAgICBjb25zdCBtZXRob2Qg
PSBvYmplY3Rba2V5XTsKLSAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICJ1bmRlZmluZWQi
KQotICAgICAgICAgICAgcmV0dXJuIEBQcm9taXNlLkByZXNvbHZlKCk7Ci0gICAgICAgIHJldHVy
biBAUHJvbWlzZS5AcmVzb2x2ZShtZXRob2QuQGFwcGx5KG9iamVjdCwgYXJncykpOworICAgICAg
ICByZXR1cm4gQHByb21pc2VJbnZva2VPck5vb3BOb0NhdGNoKG9iamVjdCwga2V5LCBhcmdzKTsK
ICAgICB9CiAgICAgY2F0Y2goZXJyb3IpIHsKICAgICAgICAgcmV0dXJuIEBQcm9taXNlLkByZWpl
Y3QoZXJyb3IpOwpAQCAtNjAsOCArNjAsMTEgQEAgZnVuY3Rpb24gcHJvbWlzZUludm9rZU9yRmFs
bGJhY2tPck5vb3Aob2JqZWN0LCBrZXkxLCBhcmdzMSwga2V5MiwgYXJnczIpCiAgICAgdHJ5IHsK
ICAgICAgICAgY29uc3QgbWV0aG9kID0gb2JqZWN0W2tleTFdOwogICAgICAgICBpZiAodHlwZW9m
IG1ldGhvZCA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgICAgICByZXR1cm4gQHByb21pc2VJbnZv
a2VPck5vb3Aob2JqZWN0LCBrZXkyLCBhcmdzMik7Ci0gICAgICAgIHJldHVybiBAUHJvbWlzZS5A
cmVzb2x2ZShtZXRob2QuQGFwcGx5KG9iamVjdCwgYXJnczEpKTsKKyAgICAgICAgICAgIHJldHVy
biBAcHJvbWlzZUludm9rZU9yTm9vcE5vQ2F0Y2gob2JqZWN0LCBrZXkyLCBhcmdzMik7CisgICAg
ICAgIGNvbnN0IHByb21pc2UgPSBAUHJvbWlzZS5AcmVzb2x2ZShtZXRob2QuQGFwcGx5KG9iamVj
dCwgYXJnczEpKTsKKyAgICAgICAgaWYgKHR5cGVvZiBwcm9taXNlLkB0aGVuID09PSAidW5kZWZp
bmVkIikKKyAgICAgICAgICAgIHByb21pc2UuQHRoZW4gPSBAUHJvbWlzZS5wcm90b3R5cGUuQHRo
ZW47CisgICAgICAgIHJldHVybiBwcm9taXNlOwogICAgIH0KICAgICBjYXRjaChlcnJvcikgewog
ICAgICAgICByZXR1cm4gQFByb21pc2UuQHJlamVjdChlcnJvcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW0uanMgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW0uanMKaW5kZXggOTJjNTJjYzY2NWVi
OWY2MDhhYWFlYjk3ZTI5OTgyNzdlYzlmYzdiNy4uODE5NTZlMjAxYWVkZjBlMDRhMTY3Y2I5YjEx
YmUyODVmZjc2OWNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1z
L1dyaXRhYmxlU3RyZWFtLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9X
cml0YWJsZVN0cmVhbS5qcwpAQCAtNTcsOCArNTcsOCBAQCBmdW5jdGlvbiBpbml0aWFsaXplV3Jp
dGFibGVTdHJlYW0odW5kZXJseWluZ1NpbmssIHN0cmF0ZWd5KQogICAgIGZ1bmN0aW9uIGVycm9y
KGUpIHsKICAgICAgICAgQGVycm9yV3JpdGFibGVTdHJlYW0uQGNhbGwoX3RoaXMsIGUpOwogICAg
IH07Ci0gICAgdGhpcy5Ac3RhcnRlZFByb21pc2UgPSBAUHJvbWlzZS5AcmVzb2x2ZShAaW52b2tl
T3JOb29wKHVuZGVybHlpbmdTaW5rLCAic3RhcnQiLCBbZXJyb3JdKSk7Ci0gICAgQFByb21pc2Uu
cHJvdG90eXBlLkB0aGVuLkBjYWxsKHRoaXMuQHN0YXJ0ZWRQcm9taXNlLCBmdW5jdGlvbigpIHsK
KyAgICB0aGlzLkBzdGFydGVkUHJvbWlzZSA9IEBwcm9taXNlSW52b2tlT3JOb29wTm9DYXRjaCh1
bmRlcmx5aW5nU2luaywgInN0YXJ0IiwgW2Vycm9yXSk7CisgICAgdGhpcy5Ac3RhcnRlZFByb21p
c2UuQHRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgIF90aGlzLkBzdGFydGVkID0gdHJ1ZTsKICAg
ICAgICAgX3RoaXMuQHN0YXJ0ZWRQcm9taXNlID0gdW5kZWZpbmVkOwogICAgIH0sIGVycm9yKTsK
QEAgLTgxLDkgKzgxLDcgQEAgZnVuY3Rpb24gYWJvcnQocmVhc29uKQogCiAgICAgQGVycm9yV3Jp
dGFibGVTdHJlYW0uQGNhbGwodGhpcywgcmVhc29uKTsKIAotICAgIGNvbnN0IHNpbmtBYm9ydFBy
b21pc2UgPSBAcHJvbWlzZUludm9rZU9yRmFsbGJhY2tPck5vb3AodGhpcy5AdW5kZXJseWluZ1Np
bmssICJhYm9ydCIsIFtyZWFzb25dLCAiY2xvc2UiLCBbXSk7Ci0KLSAgICByZXR1cm4gQFByb21p
c2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKHNpbmtBYm9ydFByb21pc2UsIGZ1bmN0aW9uKCkgeyB9
KTsKKyAgICByZXR1cm4gQHByb21pc2VJbnZva2VPckZhbGxiYWNrT3JOb29wKHRoaXMuQHVuZGVy
bHlpbmdTaW5rLCAiYWJvcnQiLCBbcmVhc29uXSwgImNsb3NlIiwgW10pLkB0aGVuKGZ1bmN0aW9u
KCkgeyB9KTsKIH0KIAogZnVuY3Rpb24gY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtSW50ZXJuYWxzLmpzCmluZGV4IDUw
MTVhZTdlYTEzZmIxZGQ3MjI1MjhhNDg4OTA1YzI5MzJhOWQ0NDQuLmM4OTljNjYxN2I5NzRiZmY2
NTM3MjlmMzczMzZmMmYyZWZmZjc4ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUludGVybmFscy5qcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMuanMKQEAgLTc3LDcgKzc3
LDcgQEAgZnVuY3Rpb24gY2FsbE9yU2NoZWR1bGVXcml0YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZShz
dHJlYW0pCiAgICAgInVzZSBzdHJpY3QiOwogCiAgICAgaWYgKCFzdHJlYW0uQHN0YXJ0ZWQpCi0g
ICAgICAgIEBQcm9taXNlLnByb3RvdHlwZS5AdGhlbi5AY2FsbChzdHJlYW0uQHN0YXJ0ZWRQcm9t
aXNlLCBmdW5jdGlvbigpIHsgQHdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSk7IH0p
OworICAgICAgICBzdHJlYW0uQHN0YXJ0ZWRQcm9taXNlLkB0aGVuKGZ1bmN0aW9uKCkgeyBAd3Jp
dGFibGVTdHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKTsgfSk7CiAgICAgZWxzZQogICAgICAgICBA
d3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKTsKIH0KQEAgLTk5LDcgKzk5LDcgQEAg
ZnVuY3Rpb24gd3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUoc3RyZWFtKQogICAgIH0KIAogICAg
IHN0cmVhbS5Ad3JpdGluZyA9IHRydWU7Ci0gICAgQFByb21pc2UucHJvdG90eXBlLkB0aGVuLkBj
YWxsKEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5AdW5kZXJseWluZ1NpbmssICJ3cml0ZSIs
IFt3cml0ZVJlY29yZC5jaHVua10pLAorICAgIEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5A
dW5kZXJseWluZ1NpbmssICJ3cml0ZSIsIFt3cml0ZVJlY29yZC5jaHVua10pLkB0aGVuKAogICAg
ICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGlmIChzdHJlYW0uQHN0YXRlID09PSBAc3Ry
ZWFtRXJyb3JlZCkKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjAsNyArMTIwLDcgQEAg
ZnVuY3Rpb24gY2xvc2VXcml0YWJsZVN0cmVhbShzdHJlYW0pCiAgICAgInVzZSBzdHJpY3QiOwog
CiAgICAgQGFzc2VydChzdHJlYW0uQHN0YXRlID09PSBAc3RyZWFtQ2xvc2luZyk7Ci0gICAgQFBy
b21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5A
dW5kZXJseWluZ1NpbmssICJjbG9zZSIpLAorICAgIEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVh
bS5AdW5kZXJseWluZ1NpbmssICJjbG9zZSIpLkB0aGVuKAogICAgICAgICBmdW5jdGlvbigpIHsK
ICAgICAgICAgICAgIGlmIChzdHJlYW0uQHN0YXRlID09PSBAc3RyZWFtRXJyb3JlZCkKICAgICAg
ICAgICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266352</attachid>
            <date>2015-12-01 03:44:26 -0800</date>
            <delta_ts>2015-12-14 09:27:52 -0800</delta_ts>
            <desc>Rebased patch</desc>
            <filename>bug-151631-20151201124403.patch</filename>
            <type>text/plain</type>
            <size>11620</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyODc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjJhZWU1NzlhMGU1Y2I5
MTdiZDZiOTBjY2EzYjEwMDAzNWM1NTcxNC4uNjNjOGY5MWJmOGQwOTdkYzUxNTQzNGU2YWUyZmQ5
ZjZjYWU5MDY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM5IEBACiAyMDE1LTEyLTAxICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgW1N0cmVh
bXMgQVBJXSBEaXJlY3RseSB1c2UgQHRoZW4gYXMgbXVjaCBhcyBwb3NzaWJsZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjMxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgZnJvbSBAUHJvbWlz
ZS5wcm90b3R5cGUuQHRoZW4uQGNhbGwocHJvbWlzZSwuLi4pIHRvIHByb21pc2UuQHRoZW4uKC4u
LikKKyAgICAgICAgZm9yIHByb21pc2Ugb2JqZWN0cyB0aGF0IGFyZSBub3QgZXhwb3NlZCB0byB1
c2VyIHNjcmlwdHMuCisKKyAgICAgICAgVXBkYXRlZCBwcm9taXNlSW52b2tlWFggc3RyZWFtIHV0
aWxpdHkgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGF0IHJldHVybmVkIHByb21pc2UgYWx3YXlzIGhh
cyBhIEB0aGVuLgorICAgICAgICBUaGlzIGFsbG93cyBpbXByb3ZpbmcgdGhlIHJlYWRhYmlsaXR5
IG9mIGNvZGUgY2FsbGluZyBwcm9taXNlSW52b2tlWFggZnVuY3Rpb25zLgorICAgICAgICBDaGFu
Z2VkIGludm9rZU9yTm9vcCB0byBwcm9taXNlSW52b2tlT3JOb29wTm9DYXRjaCBhcyBpbnZva2VP
ck5vb3AKKyAgICAgICAgcmVzdWx0IGlzIGFsd2F5cyB3cmFwcGVkIGFzIGEgcHJvbWlzZSB1c2lu
ZyBQcm9taXNlLnJlc29sdmUuCisKKyAgICAgICAgTm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisg
ICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFtLmpzOgorICAgICAgICAoaW5p
dGlhbGl6ZVJlYWRhYmxlU3RyZWFtKToKKyAgICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvUmVhZGFi
bGVTdHJlYW1JbnRlcm5hbHMuanM6CisgICAgICAgICh0ZWVSZWFkYWJsZVN0cmVhbSk6CisgICAg
ICAgICh0ZWVSZWFkYWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbik6CisgICAgICAgIChj
YW5jZWxSZWFkYWJsZVN0cmVhbSk6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1N0cmVhbUlu
dGVybmFscy5qczoKKyAgICAgICAgKHNoaWVsZGluZ1Byb21pc2VSZXNvbHZlKTogaW50cm9kdWNl
ZCB0aGlzIHJvdXRpbmUgdG8gZW5zdXJlIHRoZSByZXR1cm5lZCBwcm9taXNlIGhhcyBhIEB0aGVu
IHByb3BlcnR5LgorICAgICAgICAocHJvbWlzZUludm9rZU9yTm9vcE5vQ2F0Y2gpOgorICAgICAg
ICAocHJvbWlzZUludm9rZU9yTm9vcCk6CisgICAgICAgIChwcm9taXNlSW52b2tlT3JGYWxsYmFj
a09yTm9vcCk6CisgICAgICAgICogTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpzOgor
ICAgICAgICAoaW5pdGlhbGl6ZVdyaXRhYmxlU3RyZWFtKToKKyAgICAgICAgKGFib3J0KToKKyAg
ICAgICAgKiBNb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW1JbnRlcm5hbHMuanM6CisgICAg
ICAgIChjYWxsT3JTY2hlZHVsZVdyaXRhYmxlU3RyZWFtQWR2YW5jZVF1ZXVlKToKKworMjAxNS0x
Mi0wMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgorCiAgICAg
ICAgIFtTdHJlYW1zIEFQSV0gcHVsbCBmdW5jdGlvbiBvZiB0ZWUgc2hvdWxkIGNhbGwgcmVhZEZy
b21SZWFkYWJsZVN0cmVhbVJlYWRlciBkaXJlY3RseQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNDk3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5qcyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbS5qcwppbmRleCBhNGU4YjA3NTdiOGU0MDFkNzg5
ODAxNTc2OGZlMjJkM2MwNWVmMDZlLi4wOTA0MmIwN2E0MTliYWEzYjlmNDY0YzFmNjU5NjMxZGUy
NTk5MjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFi
bGVTdHJlYW0uanMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxl
U3RyZWFtLmpzCkBAIC01NSw4ICs1NSw3IEBAIGZ1bmN0aW9uIGluaXRpYWxpemVSZWFkYWJsZVN0
cmVhbSh1bmRlcmx5aW5nU291cmNlLCBzdHJhdGVneSkKICAgICB0aGlzLkBjb250cm9sbGVyID0g
bmV3IEBSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIodGhpcyk7CiAgICAgdGhpcy5Ac3RyYXRlZ3kg
PSBAdmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc3RyYXRlZ3kuc2l6ZSwgc3Ry
YXRlZ3kuaGlnaFdhdGVyTWFyayk7CiAKLSAgICBjb25zdCByZXN1bHQgPSBAaW52b2tlT3JOb29w
KHVuZGVybHlpbmdTb3VyY2UsICJzdGFydCIsIFt0aGlzLkBjb250cm9sbGVyXSk7Ci0gICAgQFBy
b21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKEBQcm9taXNlLkByZXNvbHZlKHJlc3VsdCksICgp
ID0+IHsKKyAgICBAcHJvbWlzZUludm9rZU9yTm9vcE5vQ2F0Y2godW5kZXJseWluZ1NvdXJjZSwg
InN0YXJ0IiwgW3RoaXMuQGNvbnRyb2xsZXJdKS5AdGhlbigoKSA9PiB7CiAgICAgICAgIHRoaXMu
QHN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICBAcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVsbCh0aGlz
KTsKICAgICB9LCAoZXJyb3IpID0+IHsKQEAgLTEwMiw4ICsxMDEsOSBAQCBmdW5jdGlvbiBwaXBl
VG8oZGVzdGluYXRpb24sIG9wdGlvbnMpCiB7CiAgICAgInVzZSBzdHJpY3QiOwogCi0gICAgLy8g
V2UgYXJlIG5vdCBzaGllbGRpbmcgYWdhaW5zdCBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIG9mIHRo
ZSByZWFkZXIgYW5kIGRlc3RpbmF0aW9uIGFzIHRob3NlIG9iamVjdHMgZG9uJ3QgaGF2ZSB0bwot
ICAgIC8vIGJlIG5lY2Vzc2FyaWx5IFJlYWRhYmxlU3RyZWFtUmVhZGVyIGFuZCBXcml0YWJsZVN0
cmVhbS4KKyAgICAvLyBGSVhNRTogcmV3cml0ZSBwaXBlVG8gc28gYXMgdG8gcmVxdWlyZSB0byBo
YXZlICd0aGlzJyBhcyBhIFJlYWRhYmxlU3RyZWFtIGFuZCBkZXN0aW5hdGlvbiBiZSBhIFdyaXRh
YmxlU3RyZWFtLgorICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3N0cmVhbXMv
aXNzdWVzLzQwNy4KKyAgICAvLyBXZSBzaG91bGQgc2hpZWxkIHRoZSBwaXBlVG8gaW1wbGVtZW50
YXRpb24gYXQgdGhlIHNhbWUgdGltZS4KIAogICAgIGNvbnN0IHByZXZlbnRDbG9zZSA9IEBpc09i
amVjdChvcHRpb25zKSAmJiAhIW9wdGlvbnMucHJldmVudENsb3NlOwogICAgIGNvbnN0IHByZXZl
bnRBYm9ydCA9IEBpc09iamVjdChvcHRpb25zKSAmJiAhIW9wdGlvbnMucHJldmVudEFib3J0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3RyZWFt
SW50ZXJuYWxzLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1JlYWRhYmxlU3Ry
ZWFtSW50ZXJuYWxzLmpzCmluZGV4IGI4NDY4ODM0N2UwYmQ1MzdkNTk5YjRkM2M1MjhhYTc2NjU2
YzdiNjkuLmZlMThkMjZhZDJlYjk3ZmQ2OTJmZGU4OWE2ZTUxMTY0NTZjNDYzNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9SZWFkYWJsZVN0cmVhbUludGVybmFs
cy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvUmVhZGFibGVTdHJlYW1J
bnRlcm5hbHMuanMKQEAgLTk2LDcgKzk2LDcgQEAgZnVuY3Rpb24gdGVlUmVhZGFibGVTdHJlYW0o
c3RyZWFtLCBzaG91bGRDbG9uZSkKICAgICAgICAgImNhbmNlbCI6IEB0ZWVSZWFkYWJsZVN0cmVh
bUJyYW5jaDJDYW5jZWxGdW5jdGlvbih0ZWVTdGF0ZSwgc3RyZWFtKQogICAgIH0pOwogCi0gICAg
QFByb21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKHJlYWRlci5jbG9zZWQsIHVuZGVmaW5lZCwg
ZnVuY3Rpb24oZSkgeworICAgIHJlYWRlci5AY2xvc2VkUHJvbWlzZUNhcGFiaWxpdHkuQHByb21p
c2UuQHRoZW4odW5kZWZpbmVkLCBmdW5jdGlvbihlKSB7CiAgICAgICAgIGlmICh0ZWVTdGF0ZS5j
bG9zZWRPckVycm9yZWQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEBlcnJvclJlYWRh
YmxlU3RyZWFtKGJyYW5jaDEsIGUpOwpAQCAtMTQ2LDkgKzE0Niw5IEBAIGZ1bmN0aW9uIHRlZVJl
YWRhYmxlU3RyZWFtQnJhbmNoMUNhbmNlbEZ1bmN0aW9uKHRlZVN0YXRlLCBzdHJlYW0pCiAgICAg
ICAgIHRlZVN0YXRlLmNhbmNlbGVkMSA9IHRydWU7CiAgICAgICAgIHRlZVN0YXRlLnJlYXNvbjEg
PSByOwogICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQyKSB7Ci0gICAgICAgICAgICBAUHJv
bWlzZS5wcm90b3R5cGUuQHRoZW4uQGNhbGwoQGNhbmNlbFJlYWRhYmxlU3RyZWFtKHN0cmVhbSwg
W3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlQ2FwYWJpbGl0
eS5AcmVzb2x2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZWVTdGF0ZS5jYW5jZWxQcm9taXNlQ2FwYWJpbGl0eS5AcmVqZWN0KTsKKyAgICAgICAgICAgIEBj
YW5jZWxSZWFkYWJsZVN0cmVhbShzdHJlYW0sIFt0ZWVTdGF0ZS5yZWFzb24xLCB0ZWVTdGF0ZS5y
ZWFzb24yXSkuQHRoZW4oCisgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2FuY2VsUHJvbWlzZUNh
cGFiaWxpdHkuQHJlc29sdmUsCisgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2FuY2VsUHJvbWlz
ZUNhcGFiaWxpdHkuQHJlamVjdCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRlZVN0YXRl
LmNhbmNlbFByb21pc2VDYXBhYmlsaXR5LkBwcm9taXNlOwogICAgIH0KQEAgLTE2Miw5ICsxNjIs
OSBAQCBmdW5jdGlvbiB0ZWVSZWFkYWJsZVN0cmVhbUJyYW5jaDJDYW5jZWxGdW5jdGlvbih0ZWVT
dGF0ZSwgc3RyZWFtKQogICAgICAgICB0ZWVTdGF0ZS5jYW5jZWxlZDIgPSB0cnVlOwogICAgICAg
ICB0ZWVTdGF0ZS5yZWFzb24yID0gcjsKICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMSkg
ewotICAgICAgICAgICAgQFByb21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKEBjYW5jZWxSZWFk
YWJsZVN0cmVhbShzdHJlYW0sIFt0ZWVTdGF0ZS5yZWFzb24xLCB0ZWVTdGF0ZS5yZWFzb24yXSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2Fu
Y2VsUHJvbWlzZUNhcGFiaWxpdHkuQHJlc29sdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2FuY2VsUHJvbWlzZUNhcGFiaWxpdHkuQHJlamVj
dCk7CisgICAgICAgICAgICBAY2FuY2VsUmVhZGFibGVTdHJlYW0oc3RyZWFtLCBbdGVlU3RhdGUu
cmVhc29uMSwgdGVlU3RhdGUucmVhc29uMl0pLkB0aGVuKAorICAgICAgICAgICAgICAgIHRlZVN0
YXRlLmNhbmNlbFByb21pc2VDYXBhYmlsaXR5LkByZXNvbHZlLAorICAgICAgICAgICAgICAgIHRl
ZVN0YXRlLmNhbmNlbFByb21pc2VDYXBhYmlsaXR5LkByZWplY3QpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0ZWVTdGF0ZS5jYW5jZWxQcm9taXNlQ2FwYWJpbGl0eS5AcHJvbWlzZTsKICAg
ICB9CkBAIC0yMzQsOCArMjM0LDcgQEAgZnVuY3Rpb24gcmVxdWVzdFJlYWRhYmxlU3RyZWFtUHVs
bChzdHJlYW0pCiAKICAgICBzdHJlYW0uQHB1bGxpbmcgPSB0cnVlOwogCi0gICAgY29uc3QgcHJv
bWlzZSA9IEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5AdW5kZXJseWluZ1NvdXJjZSwgInB1
bGwiLCBbc3RyZWFtLkBjb250cm9sbGVyXSk7Ci0gICAgQFByb21pc2UucHJvdG90eXBlLkB0aGVu
LkBjYWxsKHByb21pc2UsIGZ1bmN0aW9uKCkgeworICAgIEBwcm9taXNlSW52b2tlT3JOb29wKHN0
cmVhbS5AdW5kZXJseWluZ1NvdXJjZSwgInB1bGwiLCBbc3RyZWFtLkBjb250cm9sbGVyXSkuQHRo
ZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgIHN0cmVhbS5AcHVsbGluZyA9IGZhbHNlOwogICAgICAg
ICBpZiAoc3RyZWFtLkBwdWxsQWdhaW4pIHsKICAgICAgICAgICAgIHN0cmVhbS5AcHVsbEFnYWlu
ID0gZmFsc2U7CkBAIC0yNzMsNyArMjcyLDcgQEAgZnVuY3Rpb24gY2FuY2VsUmVhZGFibGVTdHJl
YW0oc3RyZWFtLCByZWFzb24pCiAgICAgICAgIHJldHVybiBAUHJvbWlzZS5AcmVqZWN0KHN0cmVh
bS5Ac3RvcmVkRXJyb3IpOwogICAgIHN0cmVhbS5AcXVldWUgPSBAbmV3UXVldWUoKTsKICAgICBA
ZmluaXNoQ2xvc2luZ1JlYWRhYmxlU3RyZWFtKHN0cmVhbSk7Ci0gICAgcmV0dXJuIEBQcm9taXNl
LnByb3RvdHlwZS5AdGhlbi5AY2FsbChAcHJvbWlzZUludm9rZU9yTm9vcChzdHJlYW0uQHVuZGVy
bHlpbmdTb3VyY2UsICJjYW5jZWwiLCBbcmVhc29uXSksIGZ1bmN0aW9uKCkgeyB9KTsKKyAgICBy
ZXR1cm4gQHByb21pc2VJbnZva2VPck5vb3Aoc3RyZWFtLkB1bmRlcmx5aW5nU291cmNlLCAiY2Fu
Y2VsIiwgW3JlYXNvbl0pLkB0aGVuKGZ1bmN0aW9uKCkgeyB9KTsKIH0KIAogZnVuY3Rpb24gZmlu
aXNoQ2xvc2luZ1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3RyZWFtcy9TdHJlYW1JbnRlcm5hbHMuanMgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3N0cmVhbXMvU3RyZWFtSW50ZXJuYWxzLmpzCmluZGV4IGY2MGU0ZDAyZGFlMWIyNWY3
MGMyYzc3ODQxNWVlODZjOTA1NDdhMmUuLmFhZmMyOThmYTFiZDIyMjY2YTk2ZmIzZWViOGQ2NDI5
YTNlMWVjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9TdHJl
YW1JbnRlcm5hbHMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1N0cmVh
bUludGVybmFscy5qcwpAQCAtMjcsMTQgKzI3LDIyIEBACiAvLyBAY29uZGl0aW9uYWw9RU5BQkxF
KFNUUkVBTVNfQVBJKQogLy8gQGludGVybmFsCiAKLWZ1bmN0aW9uIGludm9rZU9yTm9vcChvYmpl
Y3QsIGtleSwgYXJncykKK2Z1bmN0aW9uIHNoaWVsZGluZ1Byb21pc2VSZXNvbHZlKHJlc3VsdCkK
K3sKKyAgICBjb25zdCBwcm9taXNlID0gQFByb21pc2UuQHJlc29sdmUocmVzdWx0KTsKKyAgICBp
ZiAocHJvbWlzZS5AdGhlbiA9PT0gdW5kZWZpbmVkKQorICAgICAgICBwcm9taXNlLkB0aGVuID0g
QFByb21pc2UucHJvdG90eXBlLkB0aGVuOworICAgIHJldHVybiBwcm9taXNlOworfQorCitmdW5j
dGlvbiBwcm9taXNlSW52b2tlT3JOb29wTm9DYXRjaChvYmplY3QsIGtleSwgYXJncykKIHsKICAg
ICAidXNlIHN0cmljdCI7CiAKICAgICBjb25zdCBtZXRob2QgPSBvYmplY3Rba2V5XTsKLSAgICBp
ZiAodHlwZW9mIG1ldGhvZCA9PT0gInVuZGVmaW5lZCIpCi0gICAgICAgIHJldHVybjsKLSAgICBy
ZXR1cm4gbWV0aG9kLkBhcHBseShvYmplY3QsIGFyZ3MpOworICAgIGlmIChtZXRob2QgPT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgcmV0dXJuIEBQcm9taXNlLkByZXNvbHZlKCk7CisgICAgcmV0dXJu
IEBzaGllbGRpbmdQcm9taXNlUmVzb2x2ZShtZXRob2QuQGFwcGx5KG9iamVjdCwgYXJncykpOwog
fQogCiBmdW5jdGlvbiBwcm9taXNlSW52b2tlT3JOb29wKG9iamVjdCwga2V5LCBhcmdzKQpAQCAt
NDIsMTAgKzUwLDcgQEAgZnVuY3Rpb24gcHJvbWlzZUludm9rZU9yTm9vcChvYmplY3QsIGtleSwg
YXJncykKICAgICAidXNlIHN0cmljdCI7CiAKICAgICB0cnkgewotICAgICAgICBjb25zdCBtZXRo
b2QgPSBvYmplY3Rba2V5XTsKLSAgICAgICAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICJ1bmRlZmlu
ZWQiKQotICAgICAgICAgICAgcmV0dXJuIEBQcm9taXNlLkByZXNvbHZlKCk7Ci0gICAgICAgIHJl
dHVybiBAUHJvbWlzZS5AcmVzb2x2ZShtZXRob2QuQGFwcGx5KG9iamVjdCwgYXJncykpOworICAg
ICAgICByZXR1cm4gQHByb21pc2VJbnZva2VPck5vb3BOb0NhdGNoKG9iamVjdCwga2V5LCBhcmdz
KTsKICAgICB9CiAgICAgY2F0Y2goZXJyb3IpIHsKICAgICAgICAgcmV0dXJuIEBQcm9taXNlLkBy
ZWplY3QoZXJyb3IpOwpAQCAtNTksOSArNjQsOSBAQCBmdW5jdGlvbiBwcm9taXNlSW52b2tlT3JG
YWxsYmFja09yTm9vcChvYmplY3QsIGtleTEsIGFyZ3MxLCBrZXkyLCBhcmdzMikKIAogICAgIHRy
eSB7CiAgICAgICAgIGNvbnN0IG1ldGhvZCA9IG9iamVjdFtrZXkxXTsKLSAgICAgICAgaWYgKHR5
cGVvZiBtZXRob2QgPT09ICJ1bmRlZmluZWQiKQotICAgICAgICAgICAgcmV0dXJuIEBwcm9taXNl
SW52b2tlT3JOb29wKG9iamVjdCwga2V5MiwgYXJnczIpOwotICAgICAgICByZXR1cm4gQFByb21p
c2UuQHJlc29sdmUobWV0aG9kLkBhcHBseShvYmplY3QsIGFyZ3MxKSk7CisgICAgICAgIGlmICht
ZXRob2QgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBAcHJvbWlzZUludm9rZU9y
Tm9vcE5vQ2F0Y2gob2JqZWN0LCBrZXkyLCBhcmdzMik7CisgICAgICAgIHJldHVybiBAc2hpZWxk
aW5nUHJvbWlzZVJlc29sdmUobWV0aG9kLkBhcHBseShvYmplY3QsIGFyZ3MxKSk7CiAgICAgfQog
ICAgIGNhdGNoKGVycm9yKSB7CiAgICAgICAgIHJldHVybiBAUHJvbWlzZS5AcmVqZWN0KGVycm9y
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0
cmVhbS5qcyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbS5q
cwppbmRleCAxZmEyYzFkMmU0M2Y5YmUxM2Q5N2JmMzc1NGQ5Yjc3OTVjMjViYTBlLi5hMDg2OTRj
ODgzZDgyNDM0YWNkNjFhMWNiZjViMzNlMzVhZmE1YTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVTdHJlYW0uanMKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxlU3RyZWFtLmpzCkBAIC01Niw4ICs1Niw4IEBAIGZ1
bmN0aW9uIGluaXRpYWxpemVXcml0YWJsZVN0cmVhbSh1bmRlcmx5aW5nU2luaywgc3RyYXRlZ3kp
CiAgICAgY29uc3QgZXJyb3JGdW5jdGlvbiA9IChlKSA9PiB7CiAgICAgICAgIEBlcnJvcldyaXRh
YmxlU3RyZWFtKHRoaXMsIGUpOwogICAgIH07Ci0gICAgdGhpcy5Ac3RhcnRlZFByb21pc2UgPSBA
UHJvbWlzZS5AcmVzb2x2ZShAaW52b2tlT3JOb29wKHVuZGVybHlpbmdTaW5rLCAic3RhcnQiLCBb
ZXJyb3JGdW5jdGlvbl0pKTsKLSAgICBAUHJvbWlzZS5wcm90b3R5cGUuQHRoZW4uQGNhbGwodGhp
cy5Ac3RhcnRlZFByb21pc2UsICgpID0+IHsKKyAgICB0aGlzLkBzdGFydGVkUHJvbWlzZSA9IEBw
cm9taXNlSW52b2tlT3JOb29wTm9DYXRjaCh1bmRlcmx5aW5nU2luaywgInN0YXJ0IiwgW2Vycm9y
RnVuY3Rpb25dKTsKKyAgICB0aGlzLkBzdGFydGVkUHJvbWlzZS5AdGhlbigoKSA9PiB7CiAgICAg
ICAgIHRoaXMuQHN0YXJ0ZWQgPSB0cnVlOwogICAgICAgICB0aGlzLkBzdGFydGVkUHJvbWlzZSA9
IHVuZGVmaW5lZDsKICAgICB9LCBlcnJvckZ1bmN0aW9uKTsKQEAgLTgwLDkgKzgwLDcgQEAgZnVu
Y3Rpb24gYWJvcnQocmVhc29uKQogCiAgICAgQGVycm9yV3JpdGFibGVTdHJlYW0odGhpcywgcmVh
c29uKTsKIAotICAgIGNvbnN0IHNpbmtBYm9ydFByb21pc2UgPSBAcHJvbWlzZUludm9rZU9yRmFs
bGJhY2tPck5vb3AodGhpcy5AdW5kZXJseWluZ1NpbmssICJhYm9ydCIsIFtyZWFzb25dLCAiY2xv
c2UiLCBbXSk7Ci0KLSAgICByZXR1cm4gQFByb21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKHNp
bmtBYm9ydFByb21pc2UsIGZ1bmN0aW9uKCkgeyB9KTsKKyAgICByZXR1cm4gQHByb21pc2VJbnZv
a2VPckZhbGxiYWNrT3JOb29wKHRoaXMuQHVuZGVybHlpbmdTaW5rLCAiYWJvcnQiLCBbcmVhc29u
XSwgImNsb3NlIiwgW10pLkB0aGVuKGZ1bmN0aW9uKCkgeyB9KTsKIH0KIAogZnVuY3Rpb24gY2xv
c2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRhYmxl
U3RyZWFtSW50ZXJuYWxzLmpzIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zdHJlYW1zL1dyaXRh
YmxlU3RyZWFtSW50ZXJuYWxzLmpzCmluZGV4IGIxNDM3N2UwZGUxNDNkNTNhMWM1OGFmNjljOGU1
NTY3ZmU1ODkyMzcuLjU3Y2JhMzZlMjJiMzEzODM0YjcyMmU1MDFkNjI1OTMwNTA0YTBjY2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3RyZWFtcy9Xcml0YWJsZVN0cmVhbUlu
dGVybmFscy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3N0cmVhbXMvV3JpdGFibGVT
dHJlYW1JbnRlcm5hbHMuanMKQEAgLTc3LDcgKzc3LDcgQEAgZnVuY3Rpb24gY2FsbE9yU2NoZWR1
bGVXcml0YWJsZVN0cmVhbUFkdmFuY2VRdWV1ZShzdHJlYW0pCiAgICAgInVzZSBzdHJpY3QiOwog
CiAgICAgaWYgKCFzdHJlYW0uQHN0YXJ0ZWQpCi0gICAgICAgIEBQcm9taXNlLnByb3RvdHlwZS5A
dGhlbi5AY2FsbChzdHJlYW0uQHN0YXJ0ZWRQcm9taXNlLCBmdW5jdGlvbigpIHsgQHdyaXRhYmxl
U3RyZWFtQWR2YW5jZVF1ZXVlKHN0cmVhbSk7IH0pOworICAgICAgICBzdHJlYW0uQHN0YXJ0ZWRQ
cm9taXNlLkB0aGVuKGZ1bmN0aW9uKCkgeyBAd3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUoc3Ry
ZWFtKTsgfSk7CiAgICAgZWxzZQogICAgICAgICBAd3JpdGFibGVTdHJlYW1BZHZhbmNlUXVldWUo
c3RyZWFtKTsKIH0KQEAgLTk5LDcgKzk5LDcgQEAgZnVuY3Rpb24gd3JpdGFibGVTdHJlYW1BZHZh
bmNlUXVldWUoc3RyZWFtKQogICAgIH0KIAogICAgIHN0cmVhbS5Ad3JpdGluZyA9IHRydWU7Ci0g
ICAgQFByb21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxsKEBwcm9taXNlSW52b2tlT3JOb29wKHN0
cmVhbS5AdW5kZXJseWluZ1NpbmssICJ3cml0ZSIsIFt3cml0ZVJlY29yZC5jaHVua10pLAorICAg
IEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5AdW5kZXJseWluZ1NpbmssICJ3cml0ZSIsIFt3
cml0ZVJlY29yZC5jaHVua10pLkB0aGVuKAogICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAg
ICAgIGlmIChzdHJlYW0uQHN0YXRlID09PSBAc3RyZWFtRXJyb3JlZCkKICAgICAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMjAsNyArMTIwLDcgQEAgZnVuY3Rpb24gY2xvc2VXcml0YWJsZVN0cmVh
bShzdHJlYW0pCiAgICAgInVzZSBzdHJpY3QiOwogCiAgICAgQGFzc2VydChzdHJlYW0uQHN0YXRl
ID09PSBAc3RyZWFtQ2xvc2luZyk7Ci0gICAgQFByb21pc2UucHJvdG90eXBlLkB0aGVuLkBjYWxs
KEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5AdW5kZXJseWluZ1NpbmssICJjbG9zZSIpLAor
ICAgIEBwcm9taXNlSW52b2tlT3JOb29wKHN0cmVhbS5AdW5kZXJseWluZ1NpbmssICJjbG9zZSIp
LkB0aGVuKAogICAgICAgICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgIGlmIChzdHJlYW0uQHN0
YXRlID09PSBAc3RyZWFtRXJyb3JlZCkKICAgICAgICAgICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>