<?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>143511</bug_id>
          
          <creation_ts>2015-04-07 21:16:02 -0700</creation_ts>
          <short_desc>JSON.stringify should throw stack overflow error</short_desc>
          <delta_ts>2020-06-11 03:41:07 -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>JavaScriptCore</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=213006</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris J. Shull">chrisjshull</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1083538</commentid>
    <comment_count>0</comment_count>
    <who name="Chris J. Shull">chrisjshull</who>
    <bug_when>2015-04-07 21:16:02 -0700</bug_when>
    <thetext>The following line of code will hang WebKit. 
Don&apos;t even get a &quot;Maximum call stack size exceeded&quot; error.

JSON.stringify({ toJSON: function () { return { foo: this }; } });

Reproduces in Safari Version 8.0.5 (10600.5.9), as well as nightly build r182472.

Expected: a &quot;TypeError: JSON.stringify cannot serialize cyclic structures.&quot; should be thrown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084119</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-09 16:36:05 -0700</bug_when>
    <thetext>Two problems here:

(1) The stringifier checks for recursion, but not inside appendNextProperty.

(2) The recursion check walks the whole stack, so it is worst case O(N^2). We should use a hash instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084124</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-04-09 16:38:57 -0700</bug_when>
    <thetext>&lt;rdar://problem/20491535&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644199</commentid>
    <comment_count>3</comment_count>
      <attachid>397165</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-21 21:35:00 -0700</bug_when>
    <thetext>Created attachment 397165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644207</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-21 22:02:42 -0700</bug_when>
    <thetext>(In reply to Chris J. Shull from comment #0)
&gt; JSON.stringify({ toJSON: function () { return { foo: this }; } });
&gt; 
&gt; Expected: a &quot;TypeError: JSON.stringify cannot serialize cyclic structures.&quot;
&gt; should be thrown.

Please note that `toJSON` creates a new object on every call, so JSON.stringify never reaches `this` to throw TypeError per spec.

Proposed patch throws stack overflow error like other runtimes do.
Cold runs, --outer 8:

                                            TipOfTree              patch

json-stringify-deep-stack                868.4032+-7.1116     833.3949+-9.5908</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644214</commentid>
    <comment_count>5</comment_count>
      <attachid>397165</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 22:19:52 -0700</bug_when>
    <thetext>Comment on attachment 397165
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        b) Significantly improves performance of cyclic structures checks by using
&gt; +        HashSet: 4.2% speed-up on provided microbenchmark that tests serialization
&gt; +        of deeply nested object.

Before we used a MarkedArgumentBuffer. Is it OK that the HashSet is not marked? Garbage collection will scan a MarkedArgumentBuffer, but not a HashSet. If it is OK, why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644215</commentid>
    <comment_count>6</comment_count>
      <attachid>397165</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 22:23:08 -0700</bug_when>
    <thetext>Comment on attachment 397165
Patch

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

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:319
&gt; +static constexpr unsigned maximumRecursion = 40000;

I don’t think we need &quot;static&quot; with &quot;constexpr&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644217</commentid>
    <comment_count>7</comment_count>
      <attachid>397165</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-04-21 22:56:44 -0700</bug_when>
    <thetext>Comment on attachment 397165
Patch

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

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:-134
&gt; -    MarkedArgumentBuffer m_objectStack;

Using MarkedArgumentBuffer is necessary. Otherwise, sophisticated input can cause GC crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644290</commentid>
    <comment_count>8</comment_count>
      <attachid>397192</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-22 08:15:01 -0700</bug_when>
    <thetext>Created attachment 397192
Patch

Revert HashSet change, drop `static`, and adjust StringBuilde test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644292</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-04-22 08:20:35 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #7)
&gt; Using MarkedArgumentBuffer is necessary. Otherwise, sophisticated input can
&gt; cause GC crash.

I had a sense there is good reason why `m_objectStack` duplicates `m_holderStack`, now I got it!
I wonder if WeakSet can be used instead of MarkedArgumentBuffer here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657751</commentid>
    <comment_count>10</comment_count>
      <attachid>397192</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-05-30 23:24:34 -0700</bug_when>
    <thetext>Comment on attachment 397192
Patch

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

Nice, I have suggestion about this check.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:414
&gt; +    if (UNLIKELY(m_holderStack.size() &gt; maximumRecursion)) {
&gt; +        throwStackOverflowError(m_globalObject, scope);
&gt; +        return StringifyFailed;
&gt; +    }
&gt; +

For these entry-point of recursive calls, how about using  `if (UNLIKELY(!vm.isSafeToRecurseSoft()))` check instead?
Since isSafeToRecurseSoft reads current stack-pointer, it offers better stack handling I think.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:652
&gt; +                if (UNLIKELY(markedStack.size() &gt; maximumRecursion))

Ditto.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:705
&gt; +                if (UNLIKELY(markedStack.size() &gt; maximumRecursion))

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658294</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-02 07:47:22 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #10)
&gt; For these entry-point of recursive calls, how about using  `if
&gt; (UNLIKELY(!vm.isSafeToRecurseSoft()))` check instead?
&gt; Since isSafeToRecurseSoft reads current stack-pointer, it offers better
&gt; stack handling I think.

I&apos;ve tried vm.isSafeToRecurseSoft(), vm.isSafeToRecurse(), and m_stackCheck.isSafeToRecurse(): none of them passes the test as (I suspect) recursion happens in C++ code, while VM stack is empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658300</commentid>
    <comment_count>12</comment_count>
      <attachid>397192</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-06-02 08:23:29 -0700</bug_when>
    <thetext>Comment on attachment 397192
Patch

LGTM, but is there no test262 coverage for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658301</commentid>
    <comment_count>13</comment_count>
      <attachid>397192</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-06-02 08:24:31 -0700</bug_when>
    <thetext>Comment on attachment 397192
Patch

Oh ack, I&apos;ve no idea how I missed the whole thread here. Reversing r+ just for that reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658302</commentid>
    <comment_count>14</comment_count>
      <attachid>397192</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2020-06-02 08:25:37 -0700</bug_when>
    <thetext>Comment on attachment 397192
Patch

Er sorry, those comments precede the current patch and are addressed. Reinstating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658328</commentid>
    <comment_count>15</comment_count>
      <attachid>397192</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-02 09:06:24 -0700</bug_when>
    <thetext>Comment on attachment 397192
Patch

Hold on.  Why doesn&apos;t the isSafeToRecurse() checks work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658334</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-02 09:18:03 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #15)
&gt; Comment on attachment 397192 [details]
&gt; Patch
&gt; 
&gt; Hold on.  Why doesn&apos;t the isSafeToRecurse() checks work?

Yeah, this sounds very strange. isSafeToRecurse etc. is using C stack pointer.

1123     bool isSafeToRecurse(void* stackLimit) const
1124     {
1125         void* curr = currentStackPointer();
1126         return curr &gt;= stackLimit;
1127     }

So, it should work on C++ / JS. Can you investigate why isSafeToRecurse is not working?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658335</commentid>
    <comment_count>17</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-02 09:21:02 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #16)
&gt; (In reply to Mark Lam from comment #15)
&gt; &gt; Comment on attachment 397192 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Hold on.  Why doesn&apos;t the isSafeToRecurse() checks work?
&gt; 
&gt; Yeah, this sounds very strange. isSafeToRecurse etc. is using C stack
&gt; pointer.
&gt; 
&gt; 1123     bool isSafeToRecurse(void* stackLimit) const
&gt; 1124     {
&gt; 1125         void* curr = currentStackPointer();
&gt; 1126         return curr &gt;= stackLimit;
&gt; 1127     }
&gt; 
&gt; So, it should work on C++ / JS. Can you investigate why isSafeToRecurse is
&gt; not working?

I think I know what the issue here is: you&apos;re not seeing a stack overflow with the isSafeToRecurse() check because the test never actually overflowed, and we still have ample stack to run with.  V8 and FF may have placed an artificial lower bounds on the depth of the parse so that they can throw a stack overflow error even though the real stack never overflowed.

With that in mind, let me think of the proper way to address this, and if we want to address it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658347</commentid>
    <comment_count>18</comment_count>
      <attachid>397192</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-02 09:56:39 -0700</bug_when>
    <thetext>Comment on attachment 397192
Patch

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

&gt; JSTests/stress/json-stringify-stack-overflow.js:29
&gt; +{
&gt; +    const obj = {};
&gt; +    obj.toJSON = function() { return {key: obj}; };
&gt; +
&gt; +    shouldThrow(function() {
&gt; +        JSON.stringify(obj);
&gt; +    });
&gt; +
&gt; +    shouldThrow(function() {
&gt; +        JSON.stringify({a: {b: obj}});
&gt; +    });
&gt; +}

This case is interesting in motivating this investigation.  From JS&apos; perspective, this looks like infinite recursion.  But if we look at bottom of Stringifier::appendStringifiedValue(), we&apos;ll see that we do our parsing using a side stack m_holderStack which is aches codetually a Vector.

Stepping thru the code, I see that we&apos;re stuck here:

    do {
        while (m_holderStack.last().appendNextProperty(*this, builder)) // &lt;========== this never returns false because we have an infinite number of objects to add.
            RETURN_IF_EXCEPTION(scope, StringifyFailed);

So, this code will happily iterate in that while loop until m_holderStack overflows.  Since m_holderStack is a Vector, it will only overflow when its size is &gt; UINT_MAX.  UINT_MAX is 4G worth of elements.  The script can run a very long time before it gets there.

With this in mind, Alexey&apos;s solution of imposing a cap on m_holderStack growth is a correct solution.  However, I&apos;d like to give a bit more thought to how and where that check should go.  More feedback in a bit ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658364</commentid>
    <comment_count>19</comment_count>
      <attachid>397192</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-02 10:26:27 -0700</bug_when>
    <thetext>Comment on attachment 397192
Patch

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

r=me with fixes.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:319
&gt; +constexpr unsigned maximumRecursion = 40000;

Let&apos;s call this &quot;maximumHolderStackRecursion&quot;.  &quot;maximumRecursion&quot; can logically work, but is just too misleading as it strongly suggests that it has to do with native stack recursion instead of the side stack.

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:410
&gt; +    if (UNLIKELY(m_holderStack.size() &gt; maximumRecursion)) {

Let&apos;s make this &quot;m_holderStack.size() &gt;= maximumRecursion&quot; instead of &quot;&gt;&quot;.  The reason is that we&apos;re about to add one more entry below.  If we check for &quot;&gt; max&quot;, then we&apos;ll end up allow max + 1 entries which is not what the name says.  Technically, &quot;== max&quot; is sufficient, but &quot;&gt;= max&quot; is a stronger guarantee in case bugs creep in later.

Additionally, since Stringifier::appendStringifiedValue() can call Stringifier::Holder::appendNextProperty(), and Stringifier::Holder::appendNextProperty() can call Stringifier::appendStringifiedValue(), we have the makings of true native stack recursion.  Though I don&apos;t think your tests will take this path of recursion (and I didn&apos;t work on it enough to figure out to get there), we should add a real stack recursion check.  Let&apos;s add the following to the top of Stringifier::appendStringifiedValue() after the declaration of the ThrowScope:

    if (UNLIKELY(!vm.isSafeToRecurseSoft())) {
        throwStackOverflowError(m_globalObject, scope);
        return StringifyFailed;
    }

Would be nice if you can figure out a test for this overflow too, but I won&apos;t insist on that.  If you do add just a test, I recommend that at the top of the test JS file, insert the following line:
//@ requireOptions(&quot;--maxPerThreadStackUsage=204800&quot;)

That will allow the test to run with a smaller stack, and cause vm.isSafeToRecurseSoft() to return false sooner.  In this example, I specified a stack size of 200 KB.  Please adjust it as needed to allow your test to run (in case it&apos;s too small or too big).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658635</commentid>
    <comment_count>20</comment_count>
      <attachid>400903</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-02 23:47:51 -0700</bug_when>
    <thetext>Created attachment 400903
Patch

Rename var, use &gt;=, add isSafeToRecurseSoft() check, and add 2 test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658638</commentid>
    <comment_count>21</comment_count>
      <attachid>400903</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-02 23:59:22 -0700</bug_when>
    <thetext>Comment on attachment 400903
Patch

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

&gt; Source/JavaScriptCore/runtime/JSONObject.cpp:652
&gt; +                if (UNLIKELY(markedStack.size() &gt;= maximumHolderStackRecursion))

The &quot;maximumHolderStackRecursion&quot; name doesn&apos;t work here since there&apos;s no holderStack in this function.  If you want to use this same symbol for both cases, how about renaming it to something like &quot;maximumSideStackRecursion&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658732</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-03 09:21:41 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #12)
&gt; Comment on attachment 397192 [details]
&gt; Patch
&gt; 
&gt; LGTM, but is there no test262 coverage for this?

Please see https://github.com/tc39/test262/pull/2517.

(In reply to Mark Lam from comment #19)
&gt; Comment on attachment 397192 [details]
&gt; Patch

Thank you for thorough investigation, Mark.

&gt; Would be nice if you can figure out a test for this overflow too, but I
&gt; won&apos;t insist on that.

I took some time to fiddle with various inputs and am quite positive that !vm.isSafeToRecurseSoft() check never passes:
Stringifier was carefully designed to prevent its methods from recursing.
The check will be useful in case of refactoring though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658734</commentid>
    <comment_count>23</comment_count>
      <attachid>400928</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-03 09:21:55 -0700</bug_when>
    <thetext>Created attachment 400928
Patch

Rename var to `maximumSideStackRecursion` and fix test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1658761</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-03 10:02:04 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #22)
&gt; (In reply to Ross Kirsling from comment #12)
&gt; &gt; Comment on attachment 397192 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; LGTM, but is there no test262 coverage for this?
&gt; 
&gt; Please see https://github.com/tc39/test262/pull/2517.
&gt; 
&gt; (In reply to Mark Lam from comment #19)
&gt; &gt; Comment on attachment 397192 [details]
&gt; &gt; Patch
&gt; 
&gt; Thank you for thorough investigation, Mark.
&gt; 
&gt; &gt; Would be nice if you can figure out a test for this overflow too, but I
&gt; &gt; won&apos;t insist on that.
&gt; 
&gt; I took some time to fiddle with various inputs and am quite positive that
&gt; !vm.isSafeToRecurseSoft() check never passes:
&gt; Stringifier was carefully designed to prevent its methods from recursing.
&gt; The check will be useful in case of refactoring though.

I can believe that though I can&apos;t say it with confidence since I don&apos;t understand yet how it achieves this.  Best practices for something like this would be to explain in the ChangeLog how the mechanism works to guarantee this, and then add an ASSERT or RELEASE_ASSERT on vm.isSafeToRecurseSoft() to document and enforce that guarantee in case someone breaks the mechanism with some edit in the future.

In terms of performance cost, the check you&apos;ve added costs the same as the check for the assertion (unless we go with a debug ASSERT).  One alternative you can do is keep the runtime check in case of bugs, and add a debug ASSERT(vm.isSafeToRecurseSoft()) before it so that if the mechanism breaks, our testing might catch it.  Probably needs a brief comment there to document that the runtime check is a conservative fail safe backup in case the mechanism that enforces no runaway recursion breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1659124</commentid>
    <comment_count>25</comment_count>
      <attachid>401028</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-04 09:15:33 -0700</bug_when>
    <thetext>Created attachment 401028
Patch

Add ASSERT and explanation on recursion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1660268</commentid>
    <comment_count>26</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-08 11:11:05 -0700</bug_when>
    <thetext>Committed r262727: &lt;https://trac.webkit.org/changeset/262727&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 401028.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397165</attachid>
            <date>2020-04-21 21:35:00 -0700</date>
            <delta_ts>2020-04-22 08:14:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143511-20200422073458.patch</filename>
            <type>text/plain</type>
            <size>8067</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjA1MDIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sg
b3ZlcmZsb3cgZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MzUxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL2pzb24tc3RyaW5naWZ5LWRlZXAtc3RhY2suanM6IEFk
ZGVkLgorICAgICAgICAqIHN0cmVzcy9qc29uLXN0cmluZ2lmeS1zdGFjay1vdmVyZmxvdy5qczog
QWRkZWQuCisKIDIwMjAtMDQtMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9s
ZVN0cmljdEVxIHNob3VsZCBleHBlY3QgQW55QmlnSW50VXNlCkluZGV4OiBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9qc29uLXN0cmluZ2lmeS1kZWVwLXN0YWNrLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2pzb24tc3RyaW5naWZ5LWRlZXAtc3RhY2suanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvanNvbi1zdHJpbmdpZnktZGVlcC1z
dGFjay5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUgQEAKK2NvbnN0IHZhbHVlID0ge307
Citmb3IgKGxldCBvYmogPSB2YWx1ZSwgaSA9IDA7IGkgPCAyMDA7ICsraSkKKyAgICBvYmogPSBv
YmpbaV0gPSB7fTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU0OyArK2kpCisgICAgSlNPTi5zdHJp
bmdpZnkodmFsdWUpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdpZnktc3RhY2st
b3ZlcmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdpZnkt
c3RhY2stb3ZlcmZsb3cuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvanNvbi1z
dHJpbmdpZnktc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MiBA
QAorLy9AIGlmICRidWlsZFR5cGUgPT0gInJlbGVhc2UiIHRoZW4gcnVuRGVmYXVsdCBlbHNlIHNr
aXAgZW5kCisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMpIHsKKyAgICBsZXQgY2F1Z2h0Owor
ICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAg
ICBjYXVnaHQgPSBlcnJvcjsKKyAgICB9CisKKyAgICBpZiAoIWNhdWdodCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJkaWQgbm90IHRocm93Iik7CisKKyAgICBpZiAoU3RyaW5nKGNhdWdodCkg
IT09ICJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIHN0YWNrIG92ZXJmbG93IGVycm9yLCBidXQg
Z290OiAke2NhdWdodH1gKTsKK30KKworeworICAgIGNvbnN0IG9iaiA9IHt9OworICAgIG9iai50
b0pTT04gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHtrZXk6IG9ian07IH07CisKKyAgICBzaG91bGRU
aHJvdyhmdW5jdGlvbigpIHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkob2JqKTsKKyAgICB9KTsK
KworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uKCkgeworICAgICAgICBKU09OLnN0cmluZ2lmeSh7
YToge2I6IG9ian19KTsKKyAgICB9KTsKK30KKworeworICAgIGNvbnN0IGFyciA9IFtdOworICAg
IGFyci50b0pTT04gPSBmdW5jdGlvbigpIHsgcmV0dXJuIFthcnJdOyB9OworCisgICAgc2hvdWxk
VGhyb3coZnVuY3Rpb24oKSB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KGFycik7CisgICAgfSk7
CisKKyAgICBzaG91bGRUaHJvdyhmdW5jdGlvbigpIHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnko
W1sxLCBhcnJdXSk7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBvYmogPSB7fTsKKyAgICBj
b25zdCBvYmpSZXBsYWNlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2tleTogb2JqfTsgfTsKKwor
ICAgIHNob3VsZFRocm93KGZ1bmN0aW9uKCkgeworICAgICAgICBKU09OLnN0cmluZ2lmeShudWxs
LCBvYmpSZXBsYWNlcik7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBhcnIgPSBbXTsKKyAg
ICBjb25zdCBhcnJSZXBsYWNlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gW2Fycl07IH07CisKKyAg
ICBzaG91bGRUaHJvdyhmdW5jdGlvbigpIHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkobnVsbCwg
YXJyUmVwbGFjZXIpOworICAgIH0pOworfQorCit7CisgICAgY29uc3Qgb2JqID0ge307CisgICAg
Y29uc3Qgb2JqUmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgICAgIHJldHVy
biBrZXkgPT09ICJiIiA/IHtiOiBvYmp9IDogdmFsdWU7CisgICAgfTsKKworICAgIHNob3VsZFRo
cm93KGZ1bmN0aW9uKCkgeworICAgICAgICBKU09OLnN0cmluZ2lmeSh7YToge2I6IDF9fSwgb2Jq
UmVwbGFjZXIpOworICAgIH0pOworfQorCit7CisgICAgY29uc3QgYXJyID0gW107CisgICAgY29u
c3QgYXJyUmVwbGFjZXIgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7CisgICAgICAgIHJldHVybiBr
ZXkgPT09ICIyIiA/IFsxLCAyLCBhcnJdIDogdmFsdWU7CisgICAgfTsKKworICAgIHNob3VsZFRo
cm93KGZ1bmN0aW9uKCkgeworICAgICAgICBKU09OLnN0cmluZ2lmeShbWzEsIDIsIDNdXSwgYXJy
UmVwbGFjZXIpOworICAgIH0pOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNjA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjAtMDQtMjEgIEFsZXhleSBTaHZheWthICA8c2h2
YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIEpTT04uc3RyaW5naWZ5IHNob3VsZCB0aHJv
dyBzdGFjayBvdmVyZmxvdyBlcnJvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQzNTExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaDoKKworICAgICAgICBhKSBBZGRzIHN0YWNrIHNpemUg
Y2hlY2ssIHJldXNpbmcgdGhlIGxpbWl0IG9mIEpTT04ucGFyc2UsIGFuZCB0aHJvd3MKKyAgICAg
ICAgU3RhY2tPdmVyZmxvd0Vycm9yIGlmIHVzZXItcHJvdmlkZWQgYHRvSlNPTmAgbWV0aG9kIG9y
IGZ1bmN0aW9uYWwgcmVwbGFjZXIKKyAgICAgICAgY2F1c2VkIGluZmluaXRlIHJlY3Vyc2lvbi4g
VGhpcyBtYXkgb2NjdXIgZXZlbiB3aXRoIGFsbCBjeWNsaWMgc3RydWN0dXJlcworICAgICAgICBj
aGVja3MgaW4gcGxhY2UuCisKKyAgICAgICAgYikgU2lnbmlmaWNhbnRseSBpbXByb3ZlcyBwZXJm
b3JtYW5jZSBvZiBjeWNsaWMgc3RydWN0dXJlcyBjaGVja3MgYnkgdXNpbmcKKyAgICAgICAgSGFz
aFNldDogNC4yJSBzcGVlZC11cCBvbiBwcm92aWRlZCBtaWNyb2JlbmNobWFyayB0aGF0IHRlc3Rz
IHNlcmlhbGl6YXRpb24KKyAgICAgICAgb2YgZGVlcGx5IG5lc3RlZCBvYmplY3QuCisKKyAgICAg
ICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6
YXBwZW5kU3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OldhbGtlcjo6d2Fsayk6CisK
IDIwMjAtMDQtMjAgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgRlRMIGRvZXNuJ3Qgb2JzZXJ2ZSB0aGUgdXNlIGtpbmQgb2YgQ2hlY2tJc0NvbnN0YW50
J3MgY2hpbGQxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMjYwNDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBwcml2
YXRlOgogICAgIENhbGxEYXRhIG1fcmVwbGFjZXJDYWxsRGF0YTsKICAgICBTdHJpbmcgbV9nYXA7
CiAKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBtX29iamVjdFN0YWNrOworICAgIEhhc2hTZXQ8
SlNPYmplY3QqPiBtX29iamVjdFN0YWNrOwogICAgIFZlY3RvcjxIb2xkZXIsIDE2LCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV9ob2xkZXJTdGFjazsKICAgICBTdHJpbmcgbV9yZXBlYXRlZEdhcDsK
ICAgICBTdHJpbmcgbV9pbmRlbnQ7CkBAIC0zMTUsNiArMzE1LDggQEAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIFN0cmluZ2lmaWVyOjp0b0pTTwogICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwg
Y2FsbChtX2dsb2JhbE9iamVjdCwgYXNPYmplY3QodG9KU09ORnVuY3Rpb24pLCBjYWxsVHlwZSwg
Y2FsbERhdGEsIGJhc2VWYWx1ZSwgYXJncykpOwogfQogCisvLyBXZSBjbGFtcCByZWN1cnNpb24g
d2VsbCBiZXlvbmQgYW55dGhpbmcgcmVhc29uYWJsZS4KK3N0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4aW11bVJlY3Vyc2lvbiA9IDQwMDAwOwogU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3Vs
dCBTdHJpbmdpZmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZShTdHJpbmdCdWlsZGVyJiBidWls
ZGVyLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBIb2xkZXImIGhvbGRlciwgY29uc3QgUHJvcGVydHlO
YW1lRm9yRnVuY3Rpb25DYWxsJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gbV9nbG9i
YWxPYmplY3QtPnZtKCk7CkBAIC0zOTgsMTYgKzQwMCwxOCBAQCBTdHJpbmdpZmllcjo6U3RyaW5n
aWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAK
ICAgICAvLyBIYW5kbGUgY3ljbGUgZGV0ZWN0aW9uLCBhbmQgcHV0IHRoZSBob2xkZXIgb24gdGhl
IHN0YWNrLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2hvbGRlclN0YWNrLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGlmIChtX2hvbGRlclN0YWNrW2ldLm9iamVjdCgpID09IG9iamVj
dCkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IobV9nbG9iYWxPYmplY3QsIHNjb3BlLCAi
SlNPTi5zdHJpbmdpZnkgY2Fubm90IHNlcmlhbGl6ZSBjeWNsaWMgc3RydWN0dXJlcy4iX3MpOwot
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKLSAgICAgICAgfQorICAgIGlmIChV
TkxJS0VMWSghbV9vYmplY3RTdGFjay5hZGQob2JqZWN0KS5pc05ld0VudHJ5KSkgeworICAgICAg
ICB0aHJvd1R5cGVFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUsICJKU09OLnN0cmluZ2lmeSBj
YW5ub3Qgc2VyaWFsaXplIGN5Y2xpYyBzdHJ1Y3R1cmVzLiJfcyk7CisgICAgICAgIHJldHVybiBT
dHJpbmdpZnlGYWlsZWQ7CisgICAgfQorCisgICAgaWYgKFVOTElLRUxZKG1faG9sZGVyU3RhY2su
c2l6ZSgpID4gbWF4aW11bVJlY3Vyc2lvbikpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93
RXJyb3IobV9nbG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZh
aWxlZDsKICAgICB9CiAKICAgICBib29sIGhvbGRlclN0YWNrV2FzRW1wdHkgPSBtX2hvbGRlclN0
YWNrLmlzRW1wdHkoKTsKICAgICBtX2hvbGRlclN0YWNrLmFwcGVuZChIb2xkZXIobV9nbG9iYWxP
YmplY3QsIG9iamVjdCkpOwotICAgIG1fb2JqZWN0U3RhY2suYXBwZW5kV2l0aENyYXNoT25PdmVy
ZmxvdyhvYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIFN0cmluZ2lmeUZh
aWxlZCk7CiAgICAgaWYgKCFob2xkZXJTdGFja1dhc0VtcHR5KQogICAgICAgICByZXR1cm4gU3Ry
aW5naWZ5U3VjY2VlZGVkOwpAQCAtNDE4LDggKzQyMiw4IEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdp
ZnlSZXN1bHQgU3RyaW5naWZpZXIKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
U3RyaW5naWZ5RmFpbGVkKTsKICAgICAgICAgaWYgKFVOTElLRUxZKGJ1aWxkZXIuaGFzT3ZlcmZs
b3dlZCgpKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CisgICAgICAgIG1f
b2JqZWN0U3RhY2sucmVtb3ZlKG1faG9sZGVyU3RhY2subGFzdCgpLm9iamVjdCgpKTsKICAgICAg
ICAgbV9ob2xkZXJTdGFjay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIG1fb2JqZWN0U3RhY2sucmVt
b3ZlTGFzdCgpOwogICAgIH0gd2hpbGUgKCFtX2hvbGRlclN0YWNrLmlzRW1wdHkoKSk7CiAgICAg
cmV0dXJuIFN0cmluZ2lmeVN1Y2NlZWRlZDsKIH0KQEAgLTYxNyw4ICs2MjEsNiBAQCBwcml2YXRl
OgogICAgIENhbGxEYXRhIG1fY2FsbERhdGE7CiB9OwogCi0vLyBXZSBjbGFtcCByZWN1cnNpb24g
d2VsbCBiZXlvbmQgYW55dGhpbmcgcmVhc29uYWJsZS4KLXN0YXRpYyBjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4aW11bUZpbHRlclJlY3Vyc2lvbiA9IDQwMDAwOwogZW51bSBXYWxrZXJTdGF0ZSB7IFN0
YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0YXJ0VmlzaXRNZW1iZXIsIEFycmF5
RW5kVmlzaXRNZW1iZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0
U3RhcnRTdGF0ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIg
fTsKIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHVlIHVuZmlsdGVyZWQp
CkBAIC02NDQsNyArNjQ2LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpT
VmFsdQogICAgICAgICAgICAgICAgIEFTU0VSVChpc0FycmF5KG1fZ2xvYmFsT2JqZWN0LCBpblZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG1hcmtlZFN0YWNrLnNpemUoKSA+IG1heGltdW1G
aWx0ZXJSZWN1cnNpb24pCisgICAgICAgICAgICAgICAgaWYgKG1hcmtlZFN0YWNrLnNpemUoKSA+
IG1heGltdW1SZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIGFycmF5ID0gYXNPYmplY3QoaW5WYWx1ZSk7CkBAIC02OTcsNyArNjk5LDcgQEAg
TkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgY2Fz
ZSBPYmplY3RTdGFydFN0YXRlOiB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNP
YmplY3QoKSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFpc0pTQXJyYXkoaW5WYWx1ZSkpOwot
ICAgICAgICAgICAgICAgIGlmIChtYXJrZWRTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVj
dXJzaW9uKQorICAgICAgICAgICAgICAgIGlmIChtYXJrZWRTdGFjay5zaXplKCkgPiBtYXhpbXVt
UmVjdXJzaW9uKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dTdGFja092ZXJmbG93
RXJyb3IobV9nbG9iYWxPYmplY3QsIHNjb3BlKTsKIAogICAgICAgICAgICAgICAgIEpTT2JqZWN0
KiBvYmplY3QgPSBhc09iamVjdChpblZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397192</attachid>
            <date>2020-04-22 08:15:01 -0700</date>
            <delta_ts>2020-06-02 23:47:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143511-20200422181459.patch</filename>
            <type>text/plain</type>
            <size>7109</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjA1MDIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTIyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sg
b3ZlcmZsb3cgZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MzUxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJmbG93LmpzOiBBZGRlZC4K
KyAgICAgICAgKiBzdHJlc3MvanNvbi1zdHJpbmdpZnktc3RyaW5nLWJ1aWxkZXItb3ZlcmZsb3cu
anM6CisKIDIwMjAtMDQtMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSlNDXSBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZVN0
cmljdEVxIHNob3VsZCBleHBlY3QgQW55QmlnSW50VXNlCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9q
c29uLXN0cmluZ2lmeS1zdGFjay1vdmVyZmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9qc29uLXN0cmluZ2lmeS1zdGFjay1vdmVyZmxvdy5qcwkobm9uZXhpc3RlbnQpCisrKyBK
U1Rlc3RzL3N0cmVzcy9qc29uLXN0cmluZ2lmeS1zdGFjay1vdmVyZmxvdy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDgyIEBACisvL0AgaWYgJGJ1aWxkVHlwZSA9PSAicmVsZWFzZSIgdGhl
biBydW5EZWZhdWx0IGVsc2Ugc2tpcCBlbmQKKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYykg
eworICAgIGxldCBjYXVnaHQ7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0
Y2ggKGVycm9yKSB7CisgICAgICAgIGNhdWdodCA9IGVycm9yOworICAgIH0KKworICAgIGlmICgh
Y2F1Z2h0KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImRpZCBub3QgdGhyb3ciKTsKKworICAg
IGlmIChTdHJpbmcoY2F1Z2h0KSAhPT0gIlJhbmdlRXJyb3I6IE1heGltdW0gY2FsbCBzdGFjayBz
aXplIGV4Y2VlZGVkLiIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgc3RhY2sg
b3ZlcmZsb3cgZXJyb3IsIGJ1dCBnb3Q6ICR7Y2F1Z2h0fWApOworfQorCit7CisgICAgY29uc3Qg
b2JqID0ge307CisgICAgb2JqLnRvSlNPTiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4ge2tleTogb2Jq
fTsgfTsKKworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uKCkgeworICAgICAgICBKU09OLnN0cmlu
Z2lmeShvYmopOworICAgIH0pOworCisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24oKSB7CisgICAg
ICAgIEpTT04uc3RyaW5naWZ5KHthOiB7Yjogb2JqfX0pOworICAgIH0pOworfQorCit7CisgICAg
Y29uc3QgYXJyID0gW107CisgICAgYXJyLnRvSlNPTiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gW2Fy
cl07IH07CisKKyAgICBzaG91bGRUaHJvdyhmdW5jdGlvbigpIHsKKyAgICAgICAgSlNPTi5zdHJp
bmdpZnkoYXJyKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uKCkgeworICAg
ICAgICBKU09OLnN0cmluZ2lmeShbWzEsIGFycl1dKTsKKyAgICB9KTsKK30KKworeworICAgIGNv
bnN0IG9iaiA9IHt9OworICAgIGNvbnN0IG9ialJlcGxhY2VyID0gZnVuY3Rpb24oKSB7IHJldHVy
biB7a2V5OiBvYmp9OyB9OworCisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24oKSB7CisgICAgICAg
IEpTT04uc3RyaW5naWZ5KG51bGwsIG9ialJlcGxhY2VyKTsKKyAgICB9KTsKK30KKworeworICAg
IGNvbnN0IGFyciA9IFtdOworICAgIGNvbnN0IGFyclJlcGxhY2VyID0gZnVuY3Rpb24oKSB7IHJl
dHVybiBbYXJyXTsgfTsKKworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uKCkgeworICAgICAgICBK
U09OLnN0cmluZ2lmeShudWxsLCBhcnJSZXBsYWNlcik7CisgICAgfSk7Cit9CisKK3sKKyAgICBj
b25zdCBvYmogPSB7fTsKKyAgICBjb25zdCBvYmpSZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFs
dWUpIHsKKyAgICAgICAgcmV0dXJuIGtleSA9PT0gImIiID8ge2I6IG9ian0gOiB2YWx1ZTsKKyAg
ICB9OworCisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24oKSB7CisgICAgICAgIEpTT04uc3RyaW5n
aWZ5KHthOiB7YjogMX19LCBvYmpSZXBsYWNlcik7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25z
dCBhcnIgPSBbXTsKKyAgICBjb25zdCBhcnJSZXBsYWNlciA9IGZ1bmN0aW9uKGtleSwgdmFsdWUp
IHsKKyAgICAgICAgcmV0dXJuIGtleSA9PT0gIjIiID8gWzEsIDIsIGFycl0gOiB2YWx1ZTsKKyAg
ICB9OworCisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24oKSB7CisgICAgICAgIEpTT04uc3RyaW5n
aWZ5KFtbMSwgMiwgM11dLCBhcnJSZXBsYWNlcik7CisgICAgfSk7Cit9CkluZGV4OiBKU1Rlc3Rz
L3N0cmVzcy9qc29uLXN0cmluZ2lmeS1zdHJpbmctYnVpbGRlci1vdmVyZmxvdy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9qc29uLXN0cmluZ2lmeS1zdHJpbmctYnVpbGRlci1vdmVy
Zmxvdy5qcwkocmV2aXNpb24gMjYwNDA0KQorKysgSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdp
Znktc3RyaW5nLWJ1aWxkZXItb3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTMsMjYgKzMs
MTIgQEAKIC8vQCBza2lwIGlmICRhcmNoaXRlY3R1cmUgIT0gImFybTY0IiBhbmQgJGFyY2hpdGVj
dHVyZSAhPSAieDg2LTY0IgogLy9AIHJ1bkRlZmF1bHQgaWYgISRtZW1vcnlMaW1pdGVkCiAKK3Zh
ciBsb25nU3RyaW5nID0gIngiLnJlcGVhdCgyICoqIDMwKTsKK3ZhciBhcnIgPSBBcnJheSg0KS5m
aWxsKGxvbmdTdHJpbmcpOworCiB2YXIgZXhjZXB0aW9uOwogdHJ5IHsKLSAgICB2YXIgc3RyID0g
SlNPTi5zdHJpbmdpZnkoewotICAgICAgICAnYTEnOiB7Ci0gICAgICAgICAgICAnYTInOiB7Ci0g
ICAgICAgICAgICAgICAgJ2EzJzogewotICAgICAgICAgICAgICAgICAgICAnYTQnOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAnYTUnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2E2JzogJ0FBQUFBQUFBQUEnCi0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9LCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgewotICAgICAgICB2YXIgdmFsID0gewotICAg
ICAgICAgICAgJ0EnOiB0cnVlLAotICAgICAgICB9OwotICAgICAgICByZXR1cm4gdmFsOwotICAg
IH0sIDEpOworICAgIEpTT04uc3RyaW5naWZ5KGFycik7CiB9IGNhdGNoIChlKSB7CiAgICAgZXhj
ZXB0aW9uID0gZTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYw
NDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDIwLTA0LTIyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sg
b3ZlcmZsb3cgZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MzUxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZHMgc3RhY2sgc2l6ZSBjaGVjaywgcmV1c2luZyB0aGUgbGltaXQgb2YgSlNPTi5w
YXJzZSwgYW5kIHRocm93cyBTdGFja092ZXJmbG93RXJyb3IKKyAgICAgICAgaWYgdXNlci1wcm92
aWRlZCBgdG9KU09OYCBtZXRob2Qgb3IgZnVuY3Rpb25hbCByZXBsYWNlciBjYXVzZWQgaW5maW5p
dGUgcmVjdXJzaW9uLAorICAgICAgICB3aGljaCBpcyBwb3NzaWJsZSBldmVuIHdpdGggYWxsIGN5
Y2xpYyBzdHJ1Y3R1cmVzIGNoZWNrcyBpbiBwbGFjZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBh
bGlnbnMgSlNDIHdpdGggVjggYW5kIFNwaWRlck1vbmtleS4KKworICAgICAgICAqIHJ1bnRpbWUv
SlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdp
ZmllZFZhbHVlKToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3YWxrKToKKwogMjAyMC0wNC0yMCAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGVEwgZG9l
c24ndCBvYnNlcnZlIHRoZSB1c2Uga2luZCBvZiBDaGVja0lzQ29uc3RhbnQncyBjaGlsZDEKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZp
c2lvbiAyNjA0MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDYgKzMxNSw4IEBAIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBTdHJpbmdpZmllcjo6dG9KU08KICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNh
bGwobV9nbG9iYWxPYmplY3QsIGFzT2JqZWN0KHRvSlNPTkZ1bmN0aW9uKSwgY2FsbFR5cGUsIGNh
bGxEYXRhLCBiYXNlVmFsdWUsIGFyZ3MpKTsKIH0KIAorLy8gV2UgY2xhbXAgcmVjdXJzaW9uIHdl
bGwgYmV5b25kIGFueXRoaW5nIHJlYXNvbmFibGUuCitjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11
bVJlY3Vyc2lvbiA9IDQwMDAwOwogU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdp
Zmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZShTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBKU1Zh
bHVlIHZhbHVlLCBjb25zdCBIb2xkZXImIGhvbGRlciwgY29uc3QgUHJvcGVydHlOYW1lRm9yRnVu
Y3Rpb25DYWxsJiBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgVk0mIHZtID0gbV9nbG9iYWxPYmplY3Qt
PnZtKCk7CkBAIC00MDUsNiArNDA3LDExIEBAIFN0cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQg
U3RyaW5naWZpZXIKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChVTkxJS0VMWShtX2hvbGRl
clN0YWNrLnNpemUoKSA+IG1heGltdW1SZWN1cnNpb24pKSB7CisgICAgICAgIHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKG1fZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBTdHJp
bmdpZnlGYWlsZWQ7CisgICAgfQorCiAgICAgYm9vbCBob2xkZXJTdGFja1dhc0VtcHR5ID0gbV9o
b2xkZXJTdGFjay5pc0VtcHR5KCk7CiAgICAgbV9ob2xkZXJTdGFjay5hcHBlbmQoSG9sZGVyKG1f
Z2xvYmFsT2JqZWN0LCBvYmplY3QpKTsKICAgICBtX29iamVjdFN0YWNrLmFwcGVuZFdpdGhDcmFz
aE9uT3ZlcmZsb3cob2JqZWN0KTsKQEAgLTYxNyw4ICs2MjQsNiBAQCBwcml2YXRlOgogICAgIENh
bGxEYXRhIG1fY2FsbERhdGE7CiB9OwogCi0vLyBXZSBjbGFtcCByZWN1cnNpb24gd2VsbCBiZXlv
bmQgYW55dGhpbmcgcmVhc29uYWJsZS4KLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4aW11
bUZpbHRlclJlY3Vyc2lvbiA9IDQwMDAwOwogZW51bSBXYWxrZXJTdGF0ZSB7IFN0YXRlVW5rbm93
biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0YXJ0VmlzaXRNZW1iZXIsIEFycmF5RW5kVmlzaXRN
ZW1iZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0U3RhcnRTdGF0
ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0RW5kVmlzaXRNZW1iZXIgfTsKIE5FVkVS
X0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHVlIHVuZmlsdGVyZWQpCkBAIC02NDQs
NyArNjQ5LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAg
ICAgICAgICAgICAgIEFTU0VSVChpc0FycmF5KG1fZ2xvYmFsT2JqZWN0LCBpblZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOwogCi0g
ICAgICAgICAgICAgICAgaWYgKG1hcmtlZFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1
cnNpb24pCisgICAgICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1hcmtlZFN0YWNrLnNpemUoKSA+
IG1heGltdW1SZWN1cnNpb24pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dTdGFj
a092ZXJmbG93RXJyb3IobV9nbG9iYWxPYmplY3QsIHNjb3BlKTsKIAogICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBhcnJheSA9IGFzT2JqZWN0KGluVmFsdWUpOwpAQCAtNjk3LDcgKzcwMiw3IEBA
IE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgIGNh
c2UgT2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgICAgIEFTU0VSVChpblZhbHVlLmlz
T2JqZWN0KCkpOwogICAgICAgICAgICAgICAgIEFTU0VSVCghaXNKU0FycmF5KGluVmFsdWUpKTsK
LSAgICAgICAgICAgICAgICBpZiAobWFya2VkU3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJl
Y3Vyc2lvbikKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkobWFya2VkU3RhY2suc2l6ZSgp
ID4gbWF4aW11bVJlY3Vyc2lvbikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1N0
YWNrT3ZlcmZsb3dFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGluVmFsdWUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400903</attachid>
            <date>2020-06-02 23:47:51 -0700</date>
            <delta_ts>2020-06-03 09:21:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143511-20200603094749.patch</filename>
            <type>text/plain</type>
            <size>7956</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjI0MzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sg
b3ZlcmZsb3cgZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MzUxMQorCisgICAgICAgIFJldmlld2VkIGJ5IFJvc3MgS2lyc2xpbmcgYW5kIE1h
cmsgTGFtLgorCisgICAgICAgICogc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJmbG93
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvanNvbi1zdHJpbmdpZnktc3RyaW5nLWJ1aWxk
ZXItb3ZlcmZsb3cuanM6CisKIDIwMjAtMDYtMDIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTXVsdGlEZWxldGVCeU9mZnNldCBzaG91bGQgbm90IGFsd2F5cyBk
ZWYKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJmbG93Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJm
bG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0
YWNrLW92ZXJmbG93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvL0AgaWYg
JGJ1aWxkVHlwZSA9PSAicmVsZWFzZSIgdGhlbiBydW5EZWZhdWx0IGVsc2Ugc2tpcCBlbmQKKwor
ZnVuY3Rpb24gc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KGZuKSB7CisgICAgbGV0IGNhdWdodDsK
KyAgICB0cnkgeworICAgICAgICBmbigpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAg
IGNhdWdodCA9IGVycm9yOworICAgIH0KKworICAgIGlmICghY2F1Z2h0KQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkRpZCBub3QgdGhyb3ciKTsKKyAgICBpZiAoU3RyaW5nKGNhdWdodCkgIT09
ICJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN0YWNrIG92ZXJmbG93IGVycm9yLCBidXQgZ290
OiAke2NhdWdodH1gKTsKK30KKworeworICAgIGNvbnN0IG9iaiA9IHt9OworICAgIGZvciAobGV0
IG5leHRPYmogPSBvYmosIGkgPSAwOyBpIDwgMWU2OyArK2kpCisgICAgICAgIG5leHRPYmogPSBu
ZXh0T2JqW2BrJHtpfWBdID0ge307CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZsb3coKCkg
PT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShvYmopOworICAgIH0pOworCisgICAgc2hvdWxk
VGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkoWzEsIDIs
IFtvYmpdXSk7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBhcnIgPSB7fTsKKyAgICBmb3Ig
KGxldCBuZXh0QXJyID0gYXJyLCBpID0gMDsgaSA8IDFlNjsgKytpKQorICAgICAgICBuZXh0QXJy
ID0gbmV4dEFyclswXSA9IFtdOworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+
IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXJyKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRo
cm93U3RhY2tPdmVyZmxvdygoKSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KHthOiB7Yjog
YXJyfX0pOworICAgIH0pOworfQorCit7CisgICAgY29uc3Qgb2JqID0geworICAgICAgICB0b0pT
T04oKSB7CisgICAgICAgICAgICByZXR1cm4ge2tleTogb2JqfTsKKyAgICAgICAgfSwKKyAgICB9
OworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5z
dHJpbmdpZnkob2JqKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygo
KSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KHthOiB7Yjogb2JqfX0pOworICAgIH0pOwor
fQorCit7CisgICAgY29uc3QgYXJyID0gW107CisgICAgYXJyLnRvSlNPTiA9ICgpID0+IFthcnJd
OworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5z
dHJpbmdpZnkoYXJyKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygo
KSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KFtbMSwgMiwgYXJyXV0pOworICAgIH0pOwor
fQorCit7CisgICAgY29uc3Qgb2JqID0ge307CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZs
b3coKCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShudWxsLCAoKSA9PiB7CisgICAgICAg
ICAgICByZXR1cm4ge2tleTogb2JqfTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBzaG91
bGRUaHJvd1N0YWNrT3ZlcmZsb3coKCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeSh7YTog
e2I6IDF9fSwgKGtleSwgdmFsKSA9PiB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09PSAiYiIg
PyB7Yjogb2JqfSA6IHZhbDsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25z
dCBhcnIgPSBbXTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygoKSA9PiB7CisgICAg
ICAgIEpTT04uc3RyaW5naWZ5KG51bGwsICgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBbYXJy
XTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZsb3co
KCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShbWzEsIDIsIDNdXSwgKGtleSwgdmFsKSA9
PiB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09PSAiMiIgPyBbMSwgYXJyXSA6IHZhbDsKKyAg
ICAgICAgfSk7CisgICAgfSk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9qc29uLXN0cmluZ2lm
eS1zdHJpbmctYnVpbGRlci1vdmVyZmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9qc29uLXN0cmluZ2lmeS1zdHJpbmctYnVpbGRlci1vdmVyZmxvdy5qcwkocmV2aXNpb24gMjYy
NDM5KQorKysgSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdpZnktc3RyaW5nLWJ1aWxkZXItb3Zl
cmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTMsMjYgKzMsMTIgQEAKIC8vQCBza2lwIGlmICRh
cmNoaXRlY3R1cmUgIT0gImFybTY0IiBhbmQgJGFyY2hpdGVjdHVyZSAhPSAieDg2LTY0IgogLy9A
IHJ1bkRlZmF1bHQgaWYgISRtZW1vcnlMaW1pdGVkCiAKK3ZhciBsb25nU3RyaW5nID0gIngiLnJl
cGVhdCgyICoqIDMwKTsKK3ZhciBhcnIgPSBBcnJheSg0KS5maWxsKGxvbmdTdHJpbmcpOworCiB2
YXIgZXhjZXB0aW9uOwogdHJ5IHsKLSAgICB2YXIgc3RyID0gSlNPTi5zdHJpbmdpZnkoewotICAg
ICAgICAnYTEnOiB7Ci0gICAgICAgICAgICAnYTInOiB7Ci0gICAgICAgICAgICAgICAgJ2EzJzog
ewotICAgICAgICAgICAgICAgICAgICAnYTQnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAn
YTUnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E2JzogJ0FBQUFBQUFBQUEnCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LCBmdW5jdGlvbiAoa2V5
LCB2YWx1ZSkgewotICAgICAgICB2YXIgdmFsID0gewotICAgICAgICAgICAgJ0EnOiB0cnVlLAot
ICAgICAgICB9OwotICAgICAgICByZXR1cm4gdmFsOwotICAgIH0sIDEpOworICAgIEpTT04uc3Ry
aW5naWZ5KGFycik7CiB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyNDM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDIw
LTA2LTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAg
ICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sgb3ZlcmZsb3cgZXJyb3IKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzUxMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IFJvc3MgS2lyc2xpbmcgYW5kIE1hcmsgTGFtLgorCisgICAgICAgIFRo
aXMgY2hhbmdlIGFkZHMgc3RhY2sgc2l6ZSBjaGVjaywgcmV1c2luZyB0aGUgbGltaXQgb2YgSlNP
Ti5wYXJzZSwgYW5kIHRocm93cworICAgICAgICBTdGFja092ZXJmbG93RXJyb3IgaWYgZXhjZWVk
ZWQsIGFsaWduaW5nIEpTQyB3aXRoIFY4IGFuZCBTcGlkZXJNb25rZXkuCisKKyAgICAgICAgRXZl
biB3aXRoIGFsbCB0aGUgY3ljbGljIHN0cnVjdHVyZSBjaGVja3MgaW4gcGxhY2UsIGV4Y2VzcyBp
cyBwb3NzaWJsZSBkdWUgdG8KKyAgICAgICAgZXh0cmVtZWx5IGRlZXAgbmVzdGVkIG9iamVjdCwg
dXNlci1wcm92aWRlZCAidG9KU09OIiBtZXRob2Qgb3IgZnVuY3Rpb25hbCByZXBsYWNlci4KKwor
ICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ2lm
aWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3YWxr
KToKKwogMjAyMC0wNi0wMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQ2hhbmdlIEdpZ2FjYWdlOjpDb25maWcgdG8gdXNlIHN0b3JhZ2UgaW4gV2ViQ29uZmlnOjpn
X2NvbmZpZyBpbnN0ZWFkIG9mIGl0cyBvd24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMjYyNDM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
NiwxMSArMzA2LDE4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9KU08K
ICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGwobV9nbG9iYWxPYmplY3QsIGFzT2Jq
ZWN0KHRvSlNPTkZ1bmN0aW9uKSwgY2FsbERhdGEsIGJhc2VWYWx1ZSwgYXJncykpOwogfQogCisv
LyBXZSBjbGFtcCByZWN1cnNpb24gd2VsbCBiZXlvbmQgYW55dGhpbmcgcmVhc29uYWJsZS4KK2Nv
bnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtSG9sZGVyU3RhY2tSZWN1cnNpb24gPSA0MDAwMDsKIFN0
cmluZ2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVk
VmFsdWUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgSG9sZGVy
JiBob2xkZXIsIGNvbnN0IFByb3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlOYW1l
KQogewogICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAorICAgIGlmIChVTkxJS0VMWSghdm0uaXNTYWZl
VG9SZWN1cnNlU29mdCgpKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihtX2ds
b2JhbE9iamVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOworICAg
IH0KKwogICAgIC8vIENhbGwgdGhlIHRvSlNPTiBmdW5jdGlvbi4KICAgICBpZiAodmFsdWUuaXNP
YmplY3QoKSB8fCB2YWx1ZS5pc0JpZ0ludCgpKSB7CiAgICAgICAgIHZhbHVlID0gdG9KU09OKHZh
bHVlLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMzk2LDYgKzQwMywxMSBAQCBTdHJpbmdpZmllcjo6U3Ry
aW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoVU5M
SUtFTFkobV9ob2xkZXJTdGFjay5zaXplKCkgPj0gbWF4aW11bUhvbGRlclN0YWNrUmVjdXJzaW9u
KSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihtX2dsb2JhbE9iamVjdCwgc2Nv
cGUpOworICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOworICAgIH0KKwogICAgIGJvb2wg
aG9sZGVyU3RhY2tXYXNFbXB0eSA9IG1faG9sZGVyU3RhY2suaXNFbXB0eSgpOwogICAgIG1faG9s
ZGVyU3RhY2suYXBwZW5kKEhvbGRlcihtX2dsb2JhbE9iamVjdCwgb2JqZWN0KSk7CiAgICAgbV9v
YmplY3RTdGFjay5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7CkBAIC02MTIsOCAr
NjI0LDYgQEAgcHJpdmF0ZToKICAgICBDYWxsRGF0YSBtX2NhbGxEYXRhOwogfTsKIAotLy8gV2Ug
Y2xhbXAgcmVjdXJzaW9uIHdlbGwgYmV5b25kIGFueXRoaW5nIHJlYXNvbmFibGUuCi1zdGF0aWMg
Y29uc3RleHByIHVuc2lnbmVkIG1heGltdW1GaWx0ZXJSZWN1cnNpb24gPSA0MDAwMDsKIGVudW0g
V2Fsa2VyU3RhdGUgeyBTdGF0ZVVua25vd24sIEFycmF5U3RhcnRTdGF0ZSwgQXJyYXlTdGFydFZp
c2l0TWVtYmVyLCBBcnJheUVuZFZpc2l0TWVtYmVyLCAKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE9iamVjdFN0YXJ0U3RhdGUsIE9iamVjdFN0YXJ0VmlzaXRNZW1iZXIsIE9iamVj
dEVuZFZpc2l0TWVtYmVyIH07CiBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6OndhbGsoSlNW
YWx1ZSB1bmZpbHRlcmVkKQpAQCAtNjM5LDcgKzY0OSw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVl
IFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNBcnJheShtX2ds
b2JhbE9iamVjdCwgaW5WYWx1ZSkpOwogICAgICAgICAgICAgICAgIEVYQ0VQVElPTl9BU1NFUlQo
IXNjb3BlLmV4Y2VwdGlvbigpKTsKIAotICAgICAgICAgICAgICAgIGlmIChtYXJrZWRTdGFjay5z
aXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQorICAgICAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShtYXJrZWRTdGFjay5zaXplKCkgPj0gbWF4aW11bUhvbGRlclN0YWNrUmVjdXJzaW9uKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKG1fZ2xv
YmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICAgICAgICAgICAgICBKU09iamVjdCogYXJyYXkgPSBh
c09iamVjdChpblZhbHVlKTsKQEAgLTY5Nyw3ICs3MDcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1
ZSBXYWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICBjYXNlIE9iamVjdFN0YXJ0U3RhdGU6
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pc09iamVjdCgpKTsKICAgICAgICAg
ICAgICAgICBBU1NFUlQoIWlzSlNBcnJheShpblZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KG1hcmtlZFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCisgICAgICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKG1hcmtlZFN0YWNrLnNpemUoKSA+PSBtYXhpbXVtSG9sZGVyU3Rh
Y2tSZWN1cnNpb24pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dTdGFja092ZXJm
bG93RXJyb3IobV9nbG9iYWxPYmplY3QsIHNjb3BlKTsKIAogICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdChpblZhbHVlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400928</attachid>
            <date>2020-06-03 09:21:55 -0700</date>
            <delta_ts>2020-06-04 09:15:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143511-20200603192154.patch</filename>
            <type>text/plain</type>
            <size>7951</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjI0MzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sg
b3ZlcmZsb3cgZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MzUxMQorCisgICAgICAgIFJldmlld2VkIGJ5IFJvc3MgS2lyc2xpbmcgYW5kIE1h
cmsgTGFtLgorCisgICAgICAgICogc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJmbG93
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvanNvbi1zdHJpbmdpZnktc3RyaW5nLWJ1aWxk
ZXItb3ZlcmZsb3cuanM6CisKIDIwMjAtMDYtMDIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTXVsdGlEZWxldGVCeU9mZnNldCBzaG91bGQgbm90IGFsd2F5cyBk
ZWYKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJmbG93Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJm
bG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0
YWNrLW92ZXJmbG93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvL0AgaWYg
JGJ1aWxkVHlwZSA9PSAicmVsZWFzZSIgdGhlbiBydW5EZWZhdWx0IGVsc2Ugc2tpcCBlbmQKKwor
ZnVuY3Rpb24gc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KGZuKSB7CisgICAgbGV0IGNhdWdodDsK
KyAgICB0cnkgeworICAgICAgICBmbigpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAg
IGNhdWdodCA9IGVycm9yOworICAgIH0KKworICAgIGlmICghY2F1Z2h0KQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkRpZCBub3QgdGhyb3ciKTsKKyAgICBpZiAoU3RyaW5nKGNhdWdodCkgIT09
ICJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN0YWNrIG92ZXJmbG93IGVycm9yLCBidXQgZ290
OiAke2NhdWdodH1gKTsKK30KKworeworICAgIGNvbnN0IG9iaiA9IHt9OworICAgIGZvciAobGV0
IG5leHRPYmogPSBvYmosIGkgPSAwOyBpIDwgMWU2OyArK2kpCisgICAgICAgIG5leHRPYmogPSBu
ZXh0T2JqW2BrJHtpfWBdID0ge307CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZsb3coKCkg
PT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShvYmopOworICAgIH0pOworCisgICAgc2hvdWxk
VGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkoWzEsIDIs
IFtvYmpdXSk7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBhcnIgPSB7fTsKKyAgICBmb3Ig
KGxldCBuZXh0QXJyID0gYXJyLCBpID0gMDsgaSA8IDFlNjsgKytpKQorICAgICAgICBuZXh0QXJy
ID0gbmV4dEFyclswXSA9IFtdOworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+
IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXJyKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRo
cm93U3RhY2tPdmVyZmxvdygoKSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KHthOiB7Yjog
YXJyfX0pOworICAgIH0pOworfQorCit7CisgICAgY29uc3Qgb2JqID0geworICAgICAgICB0b0pT
T04oKSB7CisgICAgICAgICAgICByZXR1cm4ge2tleTogb2JqfTsKKyAgICAgICAgfSwKKyAgICB9
OworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5z
dHJpbmdpZnkob2JqKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygo
KSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KHthOiB7Yjogb2JqfX0pOworICAgIH0pOwor
fQorCit7CisgICAgY29uc3QgYXJyID0gW107CisgICAgYXJyLnRvSlNPTiA9ICgpID0+IFthcnJd
OworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5z
dHJpbmdpZnkoYXJyKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygo
KSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KFtbMSwgMiwgYXJyXV0pOworICAgIH0pOwor
fQorCit7CisgICAgY29uc3Qgb2JqID0ge307CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZs
b3coKCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShudWxsLCAoKSA9PiB7CisgICAgICAg
ICAgICByZXR1cm4ge2tleTogb2JqfTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBzaG91
bGRUaHJvd1N0YWNrT3ZlcmZsb3coKCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeSh7YTog
e2I6IDF9fSwgKGtleSwgdmFsKSA9PiB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09PSAiYiIg
PyB7Yjogb2JqfSA6IHZhbDsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25z
dCBhcnIgPSBbXTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygoKSA9PiB7CisgICAg
ICAgIEpTT04uc3RyaW5naWZ5KG51bGwsICgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBbYXJy
XTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZsb3co
KCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShbWzEsIDIsIDNdXSwgKGtleSwgdmFsKSA9
PiB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09PSAiMiIgPyBbMSwgMiwgYXJyXSA6IHZhbDsK
KyAgICAgICAgfSk7CisgICAgfSk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9qc29uLXN0cmlu
Z2lmeS1zdHJpbmctYnVpbGRlci1vdmVyZmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9qc29uLXN0cmluZ2lmeS1zdHJpbmctYnVpbGRlci1vdmVyZmxvdy5qcwkocmV2aXNpb24g
MjYyNDM5KQorKysgSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdpZnktc3RyaW5nLWJ1aWxkZXIt
b3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTMsMjYgKzMsMTIgQEAKIC8vQCBza2lwIGlm
ICRhcmNoaXRlY3R1cmUgIT0gImFybTY0IiBhbmQgJGFyY2hpdGVjdHVyZSAhPSAieDg2LTY0Igog
Ly9AIHJ1bkRlZmF1bHQgaWYgISRtZW1vcnlMaW1pdGVkCiAKK3ZhciBsb25nU3RyaW5nID0gIngi
LnJlcGVhdCgyICoqIDMwKTsKK3ZhciBhcnIgPSBBcnJheSg0KS5maWxsKGxvbmdTdHJpbmcpOwor
CiB2YXIgZXhjZXB0aW9uOwogdHJ5IHsKLSAgICB2YXIgc3RyID0gSlNPTi5zdHJpbmdpZnkoewot
ICAgICAgICAnYTEnOiB7Ci0gICAgICAgICAgICAnYTInOiB7Ci0gICAgICAgICAgICAgICAgJ2Ez
JzogewotICAgICAgICAgICAgICAgICAgICAnYTQnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAnYTUnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E2JzogJ0FBQUFBQUFBQUEn
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LCBmdW5jdGlvbiAo
a2V5LCB2YWx1ZSkgewotICAgICAgICB2YXIgdmFsID0gewotICAgICAgICAgICAgJ0EnOiB0cnVl
LAotICAgICAgICB9OwotICAgICAgICByZXR1cm4gdmFsOwotICAgIH0sIDEpOworICAgIEpTT04u
c3RyaW5naWZ5KGFycik7CiB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyNDM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisy
MDIwLTA2LTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sgb3ZlcmZsb3cgZXJyb3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzUxMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IFJvc3MgS2lyc2xpbmcgYW5kIE1hcmsgTGFtLgorCisgICAgICAg
IFRoaXMgY2hhbmdlIGFkZHMgc3RhY2sgc2l6ZSBjaGVjaywgcmV1c2luZyB0aGUgbGltaXQgb2Yg
SlNPTi5wYXJzZSwgYW5kIHRocm93cworICAgICAgICBTdGFja092ZXJmbG93RXJyb3IgaWYgZXhj
ZWVkZWQsIGFsaWduaW5nIEpTQyB3aXRoIFY4IGFuZCBTcGlkZXJNb25rZXkuCisKKyAgICAgICAg
RXZlbiB3aXRoIGFsbCB0aGUgY3ljbGljIHN0cnVjdHVyZSBjaGVja3MgaW4gcGxhY2UsIGV4Y2Vz
cyBpcyBwb3NzaWJsZSBkdWUgdG8KKyAgICAgICAgZXh0cmVtZWx5IGRlZXAgbmVzdGVkIG9iamVj
dCwgdXNlci1wcm92aWRlZCAidG9KU09OIiBtZXRob2Qgb3IgZnVuY3Rpb25hbCByZXBsYWNlci4K
KworICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlN0cmlu
Z2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKToKKyAgICAgICAgKEpTQzo6V2Fsa2VyOjp3
YWxrKToKKwogMjAyMC0wNi0wMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQ2hhbmdlIEdpZ2FjYWdlOjpDb25maWcgdG8gdXNlIHN0b3JhZ2UgaW4gV2ViQ29uZmln
OjpnX2NvbmZpZyBpbnN0ZWFkIG9mIGl0cyBvd24uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAkocmV2aXNpb24gMjYyNDM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwNiwxMSArMzA2LDE4IEBAIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBTdHJpbmdpZmllcjo6dG9K
U08KICAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIGNhbGwobV9nbG9iYWxPYmplY3QsIGFz
T2JqZWN0KHRvSlNPTkZ1bmN0aW9uKSwgY2FsbERhdGEsIGJhc2VWYWx1ZSwgYXJncykpOwogfQog
CisvLyBXZSBjbGFtcCByZWN1cnNpb24gd2VsbCBiZXlvbmQgYW55dGhpbmcgcmVhc29uYWJsZS4K
K2NvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVtU2lkZVN0YWNrUmVjdXJzaW9uID0gNDAwMDA7CiBT
dHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmll
ZFZhbHVlKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEhvbGRl
ciYgaG9sZGVyLCBjb25zdCBQcm9wZXJ0eU5hbWVGb3JGdW5jdGlvbkNhbGwmIHByb3BlcnR5TmFt
ZSkKIHsKICAgICBWTSYgdm0gPSBtX2dsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKKyAgICBpZiAoVU5MSUtFTFkoIXZtLmlzU2Fm
ZVRvUmVjdXJzZVNvZnQoKSkpIHsKKyAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IobV9n
bG9iYWxPYmplY3QsIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ2lmeUZhaWxlZDsKKyAg
ICB9CisKICAgICAvLyBDYWxsIHRoZSB0b0pTT04gZnVuY3Rpb24uCiAgICAgaWYgKHZhbHVlLmlz
T2JqZWN0KCkgfHwgdmFsdWUuaXNCaWdJbnQoKSkgewogICAgICAgICB2YWx1ZSA9IHRvSlNPTih2
YWx1ZSwgcHJvcGVydHlOYW1lKTsKQEAgLTM5Niw2ICs0MDMsMTEgQEAgU3RyaW5naWZpZXI6OlN0
cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKFVO
TElLRUxZKG1faG9sZGVyU3RhY2suc2l6ZSgpID49IG1heGltdW1TaWRlU3RhY2tSZWN1cnNpb24p
KSB7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKG1fZ2xvYmFsT2JqZWN0LCBzY29w
ZSk7CisgICAgICAgIHJldHVybiBTdHJpbmdpZnlGYWlsZWQ7CisgICAgfQorCiAgICAgYm9vbCBo
b2xkZXJTdGFja1dhc0VtcHR5ID0gbV9ob2xkZXJTdGFjay5pc0VtcHR5KCk7CiAgICAgbV9ob2xk
ZXJTdGFjay5hcHBlbmQoSG9sZGVyKG1fZ2xvYmFsT2JqZWN0LCBvYmplY3QpKTsKICAgICBtX29i
amVjdFN0YWNrLmFwcGVuZFdpdGhDcmFzaE9uT3ZlcmZsb3cob2JqZWN0KTsKQEAgLTYxMiw4ICs2
MjQsNiBAQCBwcml2YXRlOgogICAgIENhbGxEYXRhIG1fY2FsbERhdGE7CiB9OwogCi0vLyBXZSBj
bGFtcCByZWN1cnNpb24gd2VsbCBiZXlvbmQgYW55dGhpbmcgcmVhc29uYWJsZS4KLXN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWF4aW11bUZpbHRlclJlY3Vyc2lvbiA9IDQwMDAwOwogZW51bSBX
YWxrZXJTdGF0ZSB7IFN0YXRlVW5rbm93biwgQXJyYXlTdGFydFN0YXRlLCBBcnJheVN0YXJ0Vmlz
aXRNZW1iZXIsIEFycmF5RW5kVmlzaXRNZW1iZXIsIAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT2JqZWN0U3RhcnRTdGF0ZSwgT2JqZWN0U3RhcnRWaXNpdE1lbWJlciwgT2JqZWN0
RW5kVmlzaXRNZW1iZXIgfTsKIE5FVkVSX0lOTElORSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1Zh
bHVlIHVuZmlsdGVyZWQpCkBAIC02MzksNyArNjQ5LDcgQEAgTkVWRVJfSU5MSU5FIEpTVmFsdWUg
V2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgICAgIEFTU0VSVChpc0FycmF5KG1fZ2xv
YmFsT2JqZWN0LCBpblZhbHVlKSk7CiAgICAgICAgICAgICAgICAgRVhDRVBUSU9OX0FTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG1hcmtlZFN0YWNrLnNp
emUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCisgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKG1hcmtlZFN0YWNrLnNpemUoKSA+PSBtYXhpbXVtU2lkZVN0YWNrUmVjdXJzaW9uKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vycm9yKG1fZ2xvYmFs
T2JqZWN0LCBzY29wZSk7CiAKICAgICAgICAgICAgICAgICBKU09iamVjdCogYXJyYXkgPSBhc09i
amVjdChpblZhbHVlKTsKQEAgLTY5Nyw3ICs3MDcsNyBAQCBORVZFUl9JTkxJTkUgSlNWYWx1ZSBX
YWxrZXI6OndhbGsoSlNWYWx1CiAgICAgICAgICAgICBjYXNlIE9iamVjdFN0YXJ0U3RhdGU6IHsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoaW5WYWx1ZS5pc09iamVjdCgpKTsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoIWlzSlNBcnJheShpblZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1h
cmtlZFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCisgICAgICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKG1hcmtlZFN0YWNrLnNpemUoKSA+PSBtYXhpbXVtU2lkZVN0YWNrUmVj
dXJzaW9uKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKG1fZ2xvYmFsT2JqZWN0LCBzY29wZSk7CiAKICAgICAgICAgICAgICAgICBKU09iamVjdCog
b2JqZWN0ID0gYXNPYmplY3QoaW5WYWx1ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401028</attachid>
            <date>2020-06-04 09:15:33 -0700</date>
            <delta_ts>2020-06-08 11:11:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143511-20200604191532.patch</filename>
            <type>text/plain</type>
            <size>8474</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjI0MzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDIwLTA2LTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sg
b3ZlcmZsb3cgZXJyb3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0MzUxMQorCisgICAgICAgIFJldmlld2VkIGJ5IFJvc3MgS2lyc2xpbmcgYW5kIE1h
cmsgTGFtLgorCisgICAgICAgICogc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJmbG93
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvanNvbi1zdHJpbmdpZnktc3RyaW5nLWJ1aWxk
ZXItb3ZlcmZsb3cuanM6CisKIDIwMjAtMDYtMDIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBs
ZS5jb20+CiAKICAgICAgICAgTXVsdGlEZWxldGVCeU9mZnNldCBzaG91bGQgbm90IGFsd2F5cyBk
ZWYKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJmbG93Lmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0YWNrLW92ZXJm
bG93LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2pzb24tc3RyaW5naWZ5LXN0
YWNrLW92ZXJmbG93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvL0AgaWYg
JGJ1aWxkVHlwZSA9PSAicmVsZWFzZSIgdGhlbiBydW5EZWZhdWx0IGVsc2Ugc2tpcCBlbmQKKwor
ZnVuY3Rpb24gc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KGZuKSB7CisgICAgbGV0IGNhdWdodDsK
KyAgICB0cnkgeworICAgICAgICBmbigpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAg
IGNhdWdodCA9IGVycm9yOworICAgIH0KKworICAgIGlmICghY2F1Z2h0KQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkRpZCBub3QgdGhyb3ciKTsKKyAgICBpZiAoU3RyaW5nKGNhdWdodCkgIT09
ICJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHN0YWNrIG92ZXJmbG93IGVycm9yLCBidXQgZ290
OiAke2NhdWdodH1gKTsKK30KKworeworICAgIGNvbnN0IG9iaiA9IHt9OworICAgIGZvciAobGV0
IG5leHRPYmogPSBvYmosIGkgPSAwOyBpIDwgMWU2OyArK2kpCisgICAgICAgIG5leHRPYmogPSBu
ZXh0T2JqW2BrJHtpfWBdID0ge307CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZsb3coKCkg
PT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShvYmopOworICAgIH0pOworCisgICAgc2hvdWxk
VGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkoWzEsIDIs
IFtvYmpdXSk7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25zdCBhcnIgPSB7fTsKKyAgICBmb3Ig
KGxldCBuZXh0QXJyID0gYXJyLCBpID0gMDsgaSA8IDFlNjsgKytpKQorICAgICAgICBuZXh0QXJy
ID0gbmV4dEFyclswXSA9IFtdOworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+
IHsKKyAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXJyKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRo
cm93U3RhY2tPdmVyZmxvdygoKSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KHthOiB7Yjog
YXJyfX0pOworICAgIH0pOworfQorCit7CisgICAgY29uc3Qgb2JqID0geworICAgICAgICB0b0pT
T04oKSB7CisgICAgICAgICAgICByZXR1cm4ge2tleTogb2JqfTsKKyAgICAgICAgfSwKKyAgICB9
OworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5z
dHJpbmdpZnkob2JqKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygo
KSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KHthOiB7Yjogb2JqfX0pOworICAgIH0pOwor
fQorCit7CisgICAgY29uc3QgYXJyID0gW107CisgICAgYXJyLnRvSlNPTiA9ICgpID0+IFthcnJd
OworCisgICAgc2hvdWxkVGhyb3dTdGFja092ZXJmbG93KCgpID0+IHsKKyAgICAgICAgSlNPTi5z
dHJpbmdpZnkoYXJyKTsKKyAgICB9KTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygo
KSA9PiB7CisgICAgICAgIEpTT04uc3RyaW5naWZ5KFtbMSwgMiwgYXJyXV0pOworICAgIH0pOwor
fQorCit7CisgICAgY29uc3Qgb2JqID0ge307CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZs
b3coKCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShudWxsLCAoKSA9PiB7CisgICAgICAg
ICAgICByZXR1cm4ge2tleTogb2JqfTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBzaG91
bGRUaHJvd1N0YWNrT3ZlcmZsb3coKCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeSh7YTog
e2I6IDF9fSwgKGtleSwgdmFsKSA9PiB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09PSAiYiIg
PyB7Yjogb2JqfSA6IHZhbDsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK3sKKyAgICBjb25z
dCBhcnIgPSBbXTsKKworICAgIHNob3VsZFRocm93U3RhY2tPdmVyZmxvdygoKSA9PiB7CisgICAg
ICAgIEpTT04uc3RyaW5naWZ5KG51bGwsICgpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBbYXJy
XTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBzaG91bGRUaHJvd1N0YWNrT3ZlcmZsb3co
KCkgPT4geworICAgICAgICBKU09OLnN0cmluZ2lmeShbWzEsIDIsIDNdXSwgKGtleSwgdmFsKSA9
PiB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09PSAiMiIgPyBbMSwgMiwgYXJyXSA6IHZhbDsK
KyAgICAgICAgfSk7CisgICAgfSk7Cit9CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9qc29uLXN0cmlu
Z2lmeS1zdHJpbmctYnVpbGRlci1vdmVyZmxvdy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0
cmVzcy9qc29uLXN0cmluZ2lmeS1zdHJpbmctYnVpbGRlci1vdmVyZmxvdy5qcwkocmV2aXNpb24g
MjYyNDM5KQorKysgSlNUZXN0cy9zdHJlc3MvanNvbi1zdHJpbmdpZnktc3RyaW5nLWJ1aWxkZXIt
b3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTMsMjYgKzMsMTIgQEAKIC8vQCBza2lwIGlm
ICRhcmNoaXRlY3R1cmUgIT0gImFybTY0IiBhbmQgJGFyY2hpdGVjdHVyZSAhPSAieDg2LTY0Igog
Ly9AIHJ1bkRlZmF1bHQgaWYgISRtZW1vcnlMaW1pdGVkCiAKK3ZhciBsb25nU3RyaW5nID0gIngi
LnJlcGVhdCgyICoqIDMwKTsKK3ZhciBhcnIgPSBBcnJheSg0KS5maWxsKGxvbmdTdHJpbmcpOwor
CiB2YXIgZXhjZXB0aW9uOwogdHJ5IHsKLSAgICB2YXIgc3RyID0gSlNPTi5zdHJpbmdpZnkoewot
ICAgICAgICAnYTEnOiB7Ci0gICAgICAgICAgICAnYTInOiB7Ci0gICAgICAgICAgICAgICAgJ2Ez
JzogewotICAgICAgICAgICAgICAgICAgICAnYTQnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAnYTUnOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2E2JzogJ0FBQUFBQUFBQUEn
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9LCBmdW5jdGlvbiAo
a2V5LCB2YWx1ZSkgewotICAgICAgICB2YXIgdmFsID0gewotICAgICAgICAgICAgJ0EnOiB0cnVl
LAotICAgICAgICB9OwotICAgICAgICByZXR1cm4gdmFsOwotICAgIH0sIDEpOworICAgIEpTT04u
c3RyaW5naWZ5KGFycik7CiB9IGNhdGNoIChlKSB7CiAgICAgZXhjZXB0aW9uID0gZTsKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYyNDM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisy
MDIwLTA2LTAyICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAg
ICAgICBKU09OLnN0cmluZ2lmeSBzaG91bGQgdGhyb3cgc3RhY2sgb3ZlcmZsb3cgZXJyb3IKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzUxMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IFJvc3MgS2lyc2xpbmcgYW5kIE1hcmsgTGFtLgorCisgICAgICAg
IFRoaXMgY2hhbmdlIGFkZHMgbV9ob2xkZXJTdGFjay5zaXplKCkgY2hlY2ssIHJldXNpbmcgdGhl
IGxpbWl0IG9mIEpTT04ucGFyc2UsCisgICAgICAgIGFuZCB0aHJvd3MgU3RhY2tPdmVyZmxvd0Vy
cm9yIGlmIGV4Y2VlZGVkLCBhbGlnbmluZyBKU0Mgd2l0aCBWOCBhbmQgU3BpZGVyTW9ua2V5Lgor
ICAgICAgICBFdmVuIHdpdGggYWxsIHRoZSBjeWNsaWMgc3RydWN0dXJlIGNoZWNrcyBpbiBwbGFj
ZSwgZXhjZXNzIGlzIHBvc3NpYmxlIGR1ZSB0bworICAgICAgICB2ZXJ5IGRlZXBseSBuZXN0ZWQg
b2JqZWN0LCB1c2VyLXByb3ZpZGVkICJ0b0pTT04iIG1ldGhvZCBvciBmdW5jdGlvbmFsIHJlcGxh
Y2VyLgorCisgICAgICAgIFdoaWxlIFN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVl
KCkgYW5kIEhvbGRlcjo6YXBwZW5kTmV4dFByb3BlcnR5KCkKKyAgICAgICAgbXV0dWFsbHkgY2Fs
bCBlYWNoIG90aGVyLCByZWN1cnNpb24gaXMgYXZvaWRlZCBieSAhaG9sZGVyU3RhY2tXYXNFbXB0
eSBjaGVjayBhbmQKKyAgICAgICAgZG8vd2hpbGUgbG9vcCBhdCB0aGUgZW5kIG9mIGFwcGVuZFN0
cmluZ2lmaWVkVmFsdWUoKSwgYXMgd2VsbCBhcyBjeWNsaWMgc3RydWN0dXJlCisgICAgICAgIGNo
ZWNrIGFzIHBlciBzcGVjIFsxXS4KKworICAgICAgICBbMV06IGh0dHBzOi8vdGMzOS5lcy9lY21h
MjYyLyNzZWMtc2VyaWFsaXplanNvbm9iamVjdCAoc3RlcCAxKQorCisgICAgICAgICogcnVudGlt
ZS9KU09OT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaW5naWZpZXI6OmFwcGVuZFN0cmlu
Z2lmaWVkVmFsdWUpOgorICAgICAgICAoSlNDOjpXYWxrZXI6OndhbGspOgorCiAyMDIwLTA2LTAy
ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgR2lnYWNh
Z2U6OkNvbmZpZyB0byB1c2Ugc3RvcmFnZSBpbiBXZWJDb25maWc6OmdfY29uZmlnIGluc3RlYWQg
b2YgaXRzIG93bi4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05P
YmplY3QuY3BwCShyZXZpc2lvbiAyNjI0MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA2LDExICszMDYsMjAgQEAg
QUxXQVlTX0lOTElORSBKU1ZhbHVlIFN0cmluZ2lmaWVyOjp0b0pTTwogICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgY2FsbChtX2dsb2JhbE9iamVjdCwgYXNPYmplY3QodG9KU09ORnVuY3Rp
b24pLCBjYWxsRGF0YSwgYmFzZVZhbHVlLCBhcmdzKSk7CiB9CiAKKy8vIFdlIGNsYW1wIHJlY3Vy
c2lvbiB3ZWxsIGJleW9uZCBhbnl0aGluZyByZWFzb25hYmxlLgorY29uc3RleHByIHVuc2lnbmVk
IG1heGltdW1TaWRlU3RhY2tSZWN1cnNpb24gPSA0MDAwMDsKIFN0cmluZ2lmaWVyOjpTdHJpbmdp
ZnlSZXN1bHQgU3RyaW5naWZpZXI6OmFwcGVuZFN0cmluZ2lmaWVkVmFsdWUoU3RyaW5nQnVpbGRl
ciYgYnVpbGRlciwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgSG9sZGVyJiBob2xkZXIsIGNvbnN0IFBy
b3BlcnR5TmFtZUZvckZ1bmN0aW9uQ2FsbCYgcHJvcGVydHlOYW1lKQogewogICAgIFZNJiB2bSA9
IG1fZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAorICAgIC8vIFJlY3Vyc2lvbiBpcyBhdm9pZGVkIGJ5ICFob2xkZXJTdGFja1dh
c0VtcHR5IGNoZWNrIGFuZCBkby93aGlsZSBsb29wIGF0IHRoZSBlbmQgb2YgdGhpcyBtZXRob2Qu
CisgICAgQVNTRVJUKHZtLmlzU2FmZVRvUmVjdXJzZVNvZnQoKSk7CisgICAgaWYgKFVOTElLRUxZ
KCF2bS5pc1NhZmVUb1JlY3Vyc2VTb2Z0KCkpKSB7CisgICAgICAgIHRocm93U3RhY2tPdmVyZmxv
d0Vycm9yKG1fZ2xvYmFsT2JqZWN0LCBzY29wZSk7CisgICAgICAgIHJldHVybiBTdHJpbmdpZnlG
YWlsZWQ7CisgICAgfQorCiAgICAgLy8gQ2FsbCB0aGUgdG9KU09OIGZ1bmN0aW9uLgogICAgIGlm
ICh2YWx1ZS5pc09iamVjdCgpIHx8IHZhbHVlLmlzQmlnSW50KCkpIHsKICAgICAgICAgdmFsdWUg
PSB0b0pTT04odmFsdWUsIHByb3BlcnR5TmFtZSk7CkBAIC0zOTYsNiArNDA1LDExIEBAIFN0cmlu
Z2lmaWVyOjpTdHJpbmdpZnlSZXN1bHQgU3RyaW5naWZpZXIKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGlmIChVTkxJS0VMWShtX2hvbGRlclN0YWNrLnNpemUoKSA+PSBtYXhpbXVtU2lkZVN0YWNr
UmVjdXJzaW9uKSkgeworICAgICAgICB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihtX2dsb2JhbE9i
amVjdCwgc2NvcGUpOworICAgICAgICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOworICAgIH0KKwog
ICAgIGJvb2wgaG9sZGVyU3RhY2tXYXNFbXB0eSA9IG1faG9sZGVyU3RhY2suaXNFbXB0eSgpOwog
ICAgIG1faG9sZGVyU3RhY2suYXBwZW5kKEhvbGRlcihtX2dsb2JhbE9iamVjdCwgb2JqZWN0KSk7
CiAgICAgbV9vYmplY3RTdGFjay5hcHBlbmRXaXRoQ3Jhc2hPbk92ZXJmbG93KG9iamVjdCk7CkBA
IC02MTIsOCArNjI2LDYgQEAgcHJpdmF0ZToKICAgICBDYWxsRGF0YSBtX2NhbGxEYXRhOwogfTsK
IAotLy8gV2UgY2xhbXAgcmVjdXJzaW9uIHdlbGwgYmV5b25kIGFueXRoaW5nIHJlYXNvbmFibGUu
Ci1zdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heGltdW1GaWx0ZXJSZWN1cnNpb24gPSA0MDAw
MDsKIGVudW0gV2Fsa2VyU3RhdGUgeyBTdGF0ZVVua25vd24sIEFycmF5U3RhcnRTdGF0ZSwgQXJy
YXlTdGFydFZpc2l0TWVtYmVyLCBBcnJheUVuZFZpc2l0TWVtYmVyLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9iamVjdFN0YXJ0U3RhdGUsIE9iamVjdFN0YXJ0VmlzaXRNZW1i
ZXIsIE9iamVjdEVuZFZpc2l0TWVtYmVyIH07CiBORVZFUl9JTkxJTkUgSlNWYWx1ZSBXYWxrZXI6
OndhbGsoSlNWYWx1ZSB1bmZpbHRlcmVkKQpAQCAtNjM5LDcgKzY1MSw3IEBAIE5FVkVSX0lOTElO
RSBKU1ZhbHVlIFdhbGtlcjo6d2FsayhKU1ZhbHUKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNB
cnJheShtX2dsb2JhbE9iamVjdCwgaW5WYWx1ZSkpOwogICAgICAgICAgICAgICAgIEVYQ0VQVElP
Tl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKIAotICAgICAgICAgICAgICAgIGlmIChtYXJr
ZWRTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQorICAgICAgICAgICAgICAg
IGlmIChVTkxJS0VMWShtYXJrZWRTdGFjay5zaXplKCkgPj0gbWF4aW11bVNpZGVTdGFja1JlY3Vy
c2lvbikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1N0YWNrT3ZlcmZsb3dFcnJv
cihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICAgICAgSlNPYmplY3QqIGFy
cmF5ID0gYXNPYmplY3QoaW5WYWx1ZSk7CkBAIC02OTcsNyArNzA5LDcgQEAgTkVWRVJfSU5MSU5F
IEpTVmFsdWUgV2Fsa2VyOjp3YWxrKEpTVmFsdQogICAgICAgICAgICAgY2FzZSBPYmplY3RTdGFy
dFN0YXRlOiB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGluVmFsdWUuaXNPYmplY3QoKSk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc0pTQXJyYXkoaW5WYWx1ZSkpOwotICAgICAgICAgICAg
ICAgIGlmIChtYXJrZWRTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQorICAg
ICAgICAgICAgICAgIGlmIChVTkxJS0VMWShtYXJrZWRTdGFjay5zaXplKCkgPj0gbWF4aW11bVNp
ZGVTdGFja1JlY3Vyc2lvbikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1N0YWNr
T3ZlcmZsb3dFcnJvcihtX2dsb2JhbE9iamVjdCwgc2NvcGUpOwogCiAgICAgICAgICAgICAgICAg
SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGluVmFsdWUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>