<?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>201571</bug_id>
          
          <creation_ts>2019-09-06 18:40:47 -0700</creation_ts>
          <short_desc>Web Inspector: Styles: for rules that don&apos;t match selected node, property values always show as invalid</short_desc>
          <delta_ts>2019-10-02 14:54:49 -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>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Nikita Vasilyev">nvasilyev</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>mattbaker</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1568792</commentid>
    <comment_count>0</comment_count>
      <attachid>378260</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-09-06 18:40:47 -0700</bug_when>
    <thetext>Created attachment 378260
Reduction

Steps To Reproduce:
1. Inspect attached reduction.html
2. In the style sidebar, hit the + to add a new selector
3. Type “iframe” as the selector
4. Add “outline: 2px solid orange;”

Results:
Rule is marked as invalid, but applies.

&lt;rdar://problem/54530335&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568795</commentid>
    <comment_count>1</comment_count>
      <attachid>378262</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-09-06 18:48:19 -0700</bug_when>
    <thetext>Created attachment 378262
Patch

This fixes the bug but it also updates rules that do match selected node twice. I&apos;m still thinking of a better way of fixing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570915</commentid>
    <comment_count>2</comment_count>
      <attachid>378805</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-09-14 18:41:36 -0700</bug_when>
    <thetext>Created attachment 378805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572997</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2019-09-20 18:06:55 -0700</bug_when>
    <thetext>inspector/css/modify-inline-style.html seems to be failing after this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573002</commentid>
    <comment_count>4</comment_count>
      <attachid>378805</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-09-20 18:09:24 -0700</bug_when>
    <thetext>Comment on attachment 378805
Patch

This broken tests on wk1 and there only. Looking into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575115</commentid>
    <comment_count>5</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-09-28 18:55:24 -0700</bug_when>
    <thetext>(In reply to Nikita Vasilyev from comment #4)
&gt; Comment on attachment 378805 [details]
&gt; Patch
&gt; 
&gt; This broken tests on wk1 and there only. Looking into it.

Updating twice (after CSSAgent.setStyleText and on CSSAgent.getMatchedStylesForNode) caused a race condition on WK1. In my next patch, updates only happen once.

If it matches the selected DOM node, update on CSSAgent.getMatchedStylesForNode.
If it doesn&apos;t, update on CSSAgent.setStyleText.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575116</commentid>
    <comment_count>6</comment_count>
      <attachid>379798</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-09-28 18:55:59 -0700</bug_when>
    <thetext>Created attachment 379798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575796</commentid>
    <comment_count>7</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-10-01 16:39:43 -0700</bug_when>
    <thetext>I don&apos;t understand what is meant by &quot;rule is marked invalid, but applies&quot;.

1. Inspect test case
2. Open Elements tab (&lt;foo&gt; is selected by default)
2. Press &quot;+&quot; to add new selector
3. Adds selector:

      foo {
      }

4. Type &quot;frame&quot;, replacing the selection &quot;foo&quot;
5. Press tab. Type &quot;outline&quot;. Press tab. Type &quot;2px solid orange&quot;. Press tab.

Result:
Rule marked invalid, but style doesn&apos;t apply (there are no iframe elements in document)

Repeating the above without changing &quot;foo&quot; to &quot;iframe&quot; works as expected. Am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575804</commentid>
    <comment_count>8</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-10-01 16:50:58 -0700</bug_when>
    <thetext>(In reply to Matt Baker from comment #7)
&gt; I don&apos;t understand what is meant by &quot;rule is marked invalid, but applies&quot;.

Property value (e.g. &quot;2px solid orange&quot;) is marked invalid (has a red strikethrough and a warning), but applies.

See rdar://problem/54530335 if it&apos;s still unclear.

(In reply to Matt Baker from comment #7)
&gt; Repeating the above without changing &quot;foo&quot; to &quot;iframe&quot; works as expected. Am
&gt; I missing something?

Yes, repeating the above without changing &quot;foo&quot; to &quot;iframe&quot; works as expected, even before the patch.

The bug is specifically about the rules that don&apos;t match the selected node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575814</commentid>
    <comment_count>9</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-10-01 17:06:54 -0700</bug_when>
    <thetext>(In reply to Nikita Vasilyev from comment #8)
&gt; (In reply to Matt Baker from comment #7)
&gt; &gt; I don&apos;t understand what is meant by &quot;rule is marked invalid, but applies&quot;.
&gt; 
&gt; Property value (e.g. &quot;2px solid orange&quot;) is marked invalid (has a red
&gt; strikethrough and a warning), but applies.
&gt; 
&gt; See rdar://problem/54530335 if it&apos;s still unclear.
&gt; 
&gt; (In reply to Matt Baker from comment #7)
&gt; &gt; Repeating the above without changing &quot;foo&quot; to &quot;iframe&quot; works as expected. Am
&gt; &gt; I missing something?
&gt; 
&gt; Yes, repeating the above without changing &quot;foo&quot; to &quot;iframe&quot; works as
&gt; expected, even before the patch.
&gt; 
&gt; The bug is specifically about the rules that don&apos;t match the selected node.

Okay I get it. I think it would have been helpful to have an &lt;iframe&gt; in the test case, and mention this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575821</commentid>
    <comment_count>10</comment_count>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-10-01 17:28:10 -0700</bug_when>
    <thetext>I saw some strange results with the patch applied.

Test page:
&lt;div&gt;I&apos;m a div&lt;/div&gt;
&lt;p&gt;And I&apos;m a paragraph&lt;/p&gt;

Steps to Reproduce:
1. Inspect test page
2. Elements &gt; select the &lt;div&gt;
3. Press &quot;+&quot; to add new selector
4. Type &quot;p&quot;, replacing &quot;div&quot;
5. Hit tab. Type &quot;outline&quot;. Hit tab. Type &quot;20px solid orange&quot;. Hit tab.
=&gt; Selector not applied. Property value shown as invalid.
6. Select the &lt;p&gt; node in the DOM tree
=&gt; Style sidebar shows selector contents: 
p {
   outline: outline: 20;
   outline: 20p;
   utline: 20;
   outline: 20px;
   tline: 20;
   outline: 20p;
   utline: 20;
   outline: 20px saddlebrown;
   line: 20;
   outline: 20p;
   ...
}

Looks like a parsing step might be getting stuck in a loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575827</commentid>
    <comment_count>11</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-10-01 18:09:09 -0700</bug_when>
    <thetext>The console is full of &quot;_styleSheetTextRange data is invalid&quot; errors:

[Error] Assertion Failed: Cannot have negative numbers in TextRange 0:-2...0:9
	cloneAndModify (TextRange.js:134)
	_updateOwnerStyleText (CSSProperty.js:463)
	_updateStyleText (CSSProperty.js:438)
	rawValue (CSSProperty.js:257)
	_handleValueChange (SpreadsheetStyleProperty.js:736)
	spreadsheetTextFieldDidChange (SpreadsheetStyleProperty.js:348)
	_handleInput (SpreadsheetTextField.js:370)
	_handleInput
[Error] Assertion Failed: _styleSheetTextRange data is invalid.
	_updateOwnerStyleText (CSSProperty.js:468)
	_updateStyleText (CSSProperty.js:438)
	rawValue (CSSProperty.js:257)
	_handleValueChange (SpreadsheetStyleProperty.js:736)
	spreadsheetTextFieldDidChange (SpreadsheetStyleProperty.js:348)
	_handleInput (SpreadsheetTextField.js:370)
	_handleInput</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575843</commentid>
    <comment_count>12</comment_count>
      <attachid>379983</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-10-01 19:28:16 -0700</bug_when>
    <thetext>Created attachment 379983
Patch

The problem with the previous patch was that I updated CSSProperty#styleSheetTextRange but didn&apos;t update CSSStyleDeclaration#styleSheetTextRange, which caused data corruption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575844</commentid>
    <comment_count>13</comment_count>
      <attachid>379983</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-10-01 19:30:59 -0700</bug_when>
    <thetext>Comment on attachment 379983
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:595
&gt; -        let existingStyles = this._stylesMap.get(mapKey);
&gt; -        if (existingStyles &amp;&amp; !style) {
&gt; -            for (let existingStyle of existingStyles) {
&gt; -                if (existingStyle.node === node &amp;&amp; existingStyle.inherited === inherited) {
&gt; -                    style = existingStyle;
&gt; -                    break;
&gt; +        if (matchesNode) {
&gt; +            let existingStyles = this._stylesMap.get(mapKey);
&gt; +            if (existingStyles &amp;&amp; !style) {
&gt; +                for (let existingStyle of existingStyles) {
&gt; +                    if (existingStyle.node === node &amp;&amp; existingStyle.inherited === inherited) {
&gt; +                        style = existingStyle;
&gt; +                        break;
&gt; +                    }
&gt;                  }
&gt;              }
&gt; -        }
&gt;  
&gt; -        if (style)
&gt; -            this._stylesMap.add(mapKey, style);
&gt; +            if (style)
&gt; +                this._stylesMap.add(mapKey, style);
&gt;  
&gt; -        var shorthands = {};
&gt; -        for (var i = 0; payload.shorthandEntries &amp;&amp; i &lt; payload.shorthandEntries.length; ++i) {
&gt; -            var shorthand = payload.shorthandEntries[i];
&gt; -            shorthands[shorthand.name] = shorthand.value;
&gt; +            var shorthands = {};
&gt; +            for (var i = 0; payload.shorthandEntries &amp;&amp; i &lt; payload.shorthandEntries.length; ++i) {
&gt; +                var shorthand = payload.shorthandEntries[i];
&gt; +                shorthands[shorthand.name] = shorthand.value;
&gt; +            }

This seem like a lot of changes but I simply wrapped a chunk of code in `if (matchesNode) { ... }`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575883</commentid>
    <comment_count>14</comment_count>
      <attachid>379983</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-10-01 21:33:21 -0700</bug_when>
    <thetext>Comment on attachment 379983
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:459
&gt; +            // Update validity status of each property for rules that don&apos;t match the selected DOM node.

I&apos;d either say &quot;`valid` status&quot; or &quot;validity&quot;.

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:460
&gt; +            // These rules don&apos;t get updated by CSSAgent.getMatchedStylesForNode.

We haven&apos;t been adding the &quot;Agent&quot; to comments like these lately, as the `CSSAgent` is purely a frontend concept.  It should just be `CSS.getMatchedStylesForNode` (e.g. &quot;Domain.command&quot;).

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:464
&gt; +                const inherited = false;
&gt; +                const pseudoId = null;
&gt; +                const matchesNode = false;

We don&apos;t typically create `const` variables when calling functions that are in the same file (especially &quot;private&quot; functions) as it&apos;s easy to just scroll up/down, rather than having to switch files.

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:560
&gt; +    _parseStyleDeclarationPayload(payload, node, inherited, pseudoId, type, rule, matchesNode = true)

We usually put optional values like this in a bag, and often have the &quot;default&quot; case be `false`.
```
    _parseStyleDeclarationPayload(payload, node, type, {inherited, pseudoId, rule, nonMatching} = {})
```
This way, we can make all the callsites a bit cleaner in that they only have to pass what they actually need.

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:575
&gt;          let style = rule ? rule.style : null;

I&apos;d imagine that if `nonMatching` is provided, you&apos;d expect a `rule` to be provided.  We should assert as such:
```
    console.assert(!nonMatching || style);
```

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:578
&gt; +            let existingStyles = this._stylesMap.get(mapKey);

We still use `mapKey` below in this function, which adds a newly created `WI.CSSStyleDeclaration` to `_stylesMap`, so we should probably add a `console.assert(!nonMatching)` there.

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:594
&gt; +            var shorthands = {};
&gt; +            for (var i = 0; payload.shorthandEntries &amp;&amp; i &lt; payload.shorthandEntries.length; ++i) {
&gt; +                var shorthand = payload.shorthandEntries[i];
&gt; +                shorthands[shorthand.name] = shorthand.value;

Can we just remove this code?  It doesn&apos;t look like it&apos;s used for anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576096</commentid>
    <comment_count>15</comment_count>
      <attachid>379983</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-10-02 11:57:36 -0700</bug_when>
    <thetext>Comment on attachment 379983
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:459
&gt;&gt; +            // Update validity status of each property for rules that don&apos;t match the selected DOM node.
&gt; 
&gt; I&apos;d either say &quot;`valid` status&quot; or &quot;validity&quot;.

Thanks.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:460
&gt;&gt; +            // These rules don&apos;t get updated by CSSAgent.getMatchedStylesForNode.
&gt; 
&gt; We haven&apos;t been adding the &quot;Agent&quot; to comments like these lately, as the `CSSAgent` is purely a frontend concept.  It should just be `CSS.getMatchedStylesForNode` (e.g. &quot;Domain.command&quot;).

`CSSAgent.getMatchedStylesForNode` is something you can search for in this file and find a function call.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:560
&gt;&gt; +    _parseStyleDeclarationPayload(payload, node, inherited, pseudoId, type, rule, matchesNode = true)
&gt; 
&gt; We usually put optional values like this in a bag, and often have the &quot;default&quot; case be `false`.
&gt; ```
&gt;     _parseStyleDeclarationPayload(payload, node, type, {inherited, pseudoId, rule, nonMatching} = {})
&gt; ```
&gt; This way, we can make all the callsites a bit cleaner in that they only have to pass what they actually need.

I&apos;d prefer to update all _parseStyleDeclarationPayload and _parseRulePayload in a follow-up patch. I prefer to separate refactoring patches from bug fixes.

Also, I don&apos;t want to use `nonMatching` name because it&apos;s a negative. I&apos;d prefer to use `matchesNode` or `matchingNode`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576100</commentid>
    <comment_count>16</comment_count>
      <attachid>380046</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2019-10-02 12:03:00 -0700</bug_when>
    <thetext>Created attachment 380046
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576177</commentid>
    <comment_count>17</comment_count>
      <attachid>380046</attachid>
    <who name="Matt Baker">mattbaker</who>
    <bug_when>2019-10-02 14:09:06 -0700</bug_when>
    <thetext>Comment on attachment 380046
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576200</commentid>
    <comment_count>18</comment_count>
      <attachid>380046</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-02 14:54:47 -0700</bug_when>
    <thetext>Comment on attachment 380046
Patch

Clearing flags on attachment: 380046

Committed r250633: &lt;https://trac.webkit.org/changeset/250633&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576201</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-02 14:54:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>378260</attachid>
            <date>2019-09-06 18:40:47 -0700</date>
            <delta_ts>2019-09-06 18:48:19 -0700</delta_ts>
            <desc>Reduction</desc>
            <filename>reduction.html</filename>
            <type>text/html</type>
            <size>16</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">PGZvbz5BIGRpdjwvZm9vPg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378262</attachid>
            <date>2019-09-06 18:48:19 -0700</date>
            <delta_ts>2019-09-14 18:41:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>1393</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDUzZDJiYjg0YzgyLi41MzVlM2U5MDkzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMDktMDYgIE5pa2l0
YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogU3R5bGVzOiBmb3IgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCBzZWxlY3RlZCBub2RlLCBwcm9w
ZXJ0eSB2YWx1ZXMgYWx3YXlzIHNob3cgYXMgaW52YWxpZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2Rl
U3R5bGVzLmpzOgorICAgICAgICAoV0kuRE9NTm9kZVN0eWxlcy5wcm90b3R5cGUuY2hhbmdlU3R5
bGVUZXh0KToKKwogMjAxOS0wOS0wNCAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogdW5pZnkgdGhlIGludGVyYWN0aW9uIG9mIHNob3cv
aGlkZSBzdGF0dXMgaWNvbnMgaW4gU291cmNlcyBhbmQgQ2FudmFzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVz
LmpzCmluZGV4IDVkOWM3YmNkMGQ4Li5kZWZhMjBlYjUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMu
anMKQEAgLTQ1Niw2ICs0NTYsMTAgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVT
dHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY2Fs
bGJhY2soKTsKKworICAgICAgICAgICAgY29uc3QgaW5oZXJpdGVkID0gZmFsc2U7CisgICAgICAg
ICAgICBjb25zdCBwc2V1ZG9JZCA9IG51bGw7CisgICAgICAgICAgICB0aGlzLl9wYXJzZVN0eWxl
RGVjbGFyYXRpb25QYXlsb2FkKHN0eWxlUGF5bG9hZCwgdGhpcy5fbm9kZSwgaW5oZXJpdGVkLCBw
c2V1ZG9JZCwgc3R5bGUudHlwZSwgc3R5bGUub3duZXJSdWxlKTsKICAgICAgICAgICAgIHRoaXMu
cmVmcmVzaCgpOwogICAgICAgICB9OwogCg==
</data>
<flag name="commit-queue"
          id="393907"
          type_id="3"
          status="-"
          setter="nvasilyev"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378805</attachid>
            <date>2019-09-14 18:41:36 -0700</date>
            <delta_ts>2019-09-28 18:55:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>1917</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDc3MjQ1NjI4MmIyLi4yMWQyMjVmMDY2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTktMDktMTQgIE5pa2l0
YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogU3R5bGVzOiBmb3IgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCBzZWxlY3RlZCBub2RlLCBwcm9w
ZXJ0eSB2YWx1ZXMgYWx3YXlzIHNob3cgYXMgaW52YWxpZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGdpc3Qgb2YgdGhlIGJ1ZzoKKyAgICAgICAg
LSBXSS5DU1NQcm9wZXJ0eSBpcyBpbnN0YW50aWF0ZWQgd2l0aCBgdmFsaWRgIGZhbHNlLgorICAg
ICAgICAtIENTU0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlIG5ldmVyIHVwZGF0ZXMgV0ku
Q1NTUHJvcGVydHkgaW5zdGFuY2VzIGJlY2F1c2UKKyAgICAgICAgICB0aGUgZWRpdGVkIHN0eWxl
IGRvZXMgbm90IGluIGZhY3QgbWF0Y2ggdGhlIHNlbGVjdGVkIERPTSBub2RlLgorCisgICAgICAg
IFRvIHJlc29sdmUgdGhpcywgV0kuQ1NTUHJvcGVydHkgaW5zdGFuY2VzIGFyZSBub3cgYWx3YXlz
IHVwZGF0ZWQgYWZ0ZXIgZWRpdGluZworICAgICAgICBmcm9tIHRoZSBjYWxsYmFjayBvZiBgQ1NT
QWdlbnQuc2V0U3R5bGVUZXh0YC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0RP
TU5vZGVTdHlsZXMuanM6CisgICAgICAgIChXSS5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5jaGFu
Z2VTdHlsZVRleHQpOgorCiAyMDE5LTA4LTE1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDb2RlTWlycm9yIHN0aWxsIGluc2VydHMg
YSB0YWIgZXZlbiB3aGVuICJQcmVmZXIgaW5kZW50IHVzaW5nIiBpcyBzZXQgdG8gIlNwYWNlcyIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9E
T01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggNDMwOWI2YTYxZTMuLjU2ODA1MzRkNGRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9k
ZVN0eWxlcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2Rl
bHMvRE9NTm9kZVN0eWxlcy5qcwpAQCAtNDU1LDYgKzQ1NSwxMiBAQCBXSS5ET01Ob2RlU3R5bGVz
ID0gY2xhc3MgRE9NTm9kZVN0eWxlcyBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLy8gVXBkYXRlIHZhbGlkaXR5
IG9mIGVhY2ggcHJvcGVydHkuCisgICAgICAgICAgICBpZiAoc3R5bGVQYXlsb2FkLmNzc1Byb3Bl
cnRpZXMpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0eWxlUGF5bG9h
ZC5jc3NQcm9wZXJ0aWVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9w
YXJzZVN0eWxlUHJvcGVydHlQYXlsb2FkKHN0eWxlUGF5bG9hZC5jc3NQcm9wZXJ0aWVzW2ldLCBp
LCBzdHlsZSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAg
ICAgICAgICB0aGlzLnJlZnJlc2goKTsKICAgICAgICAgfTsK
</data>
<flag name="review"
          id="394455"
          type_id="1"
          status="-"
          setter="nvasilyev"
    />
    <flag name="commit-queue"
          id="394456"
          type_id="3"
          status="-"
          setter="nvasilyev"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379798</attachid>
            <date>2019-09-28 18:55:59 -0700</date>
            <delta_ts>2019-10-01 19:28:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>2090</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDZlMzVlZmRhNWI3Li40MTQzYzcwY2NmMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTktMDktMjggIE5pa2l0
YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogU3R5bGVzOiBmb3IgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCBzZWxlY3RlZCBub2RlLCBwcm9w
ZXJ0eSB2YWx1ZXMgYWx3YXlzIHNob3cgYXMgaW52YWxpZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGdpc3Qgb2YgdGhlIGJ1ZzoKKyAgICAgICAg
LSBXSS5DU1NQcm9wZXJ0eSBpcyBpbnN0YW50aWF0ZWQgd2l0aCBgdmFsaWRgIGZhbHNlLgorICAg
ICAgICAtIENTU0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlIG5ldmVyIHVwZGF0ZXMgV0ku
Q1NTUHJvcGVydHkgaW5zdGFuY2VzIGJlY2F1c2UKKyAgICAgICAgICB0aGUgZWRpdGVkIHN0eWxl
IGRvZXMgbm90IGluIGZhY3QgbWF0Y2ggdGhlIHNlbGVjdGVkIERPTSBub2RlLiBBIHZhbGlkIENT
UyBwcm9wZXJ0eQorICAgICAgICAgIGlzIHNob3duIGFzIGludmFsaWQuCisKKyAgICAgICAgVG8g
cmVzb2x2ZSB0aGlzLCBXSS5DU1NQcm9wZXJ0eSBpbnN0YW5jZXMgYXJlIG5vdyB1cGRhdGVkIGFm
dGVyIGVkaXRpbmcKKyAgICAgICAgaW4gdGhlIGNhbGxiYWNrIG9mIGBDU1NBZ2VudC5zZXRTdHls
ZVRleHRgLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5q
czoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmNoYW5nZVN0eWxlVGV4dCk6
CisKIDIwMTktMDktMTMgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBUaWdodGVyIGF1dG9jb21wbGV0ZSBidWJibGVzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9k
ZVN0eWxlcy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9E
T01Ob2RlU3R5bGVzLmpzCmluZGV4IDVkOWM3YmNkMGQ4Li5iNDIxMjAzZjViYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHls
ZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RP
TU5vZGVTdHlsZXMuanMKQEAgLTQ1NSw2ICs0NTUsMTMgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNs
YXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB2YWxpZGl0eSBzdGF0
dXMgb2YgZWFjaCBwcm9wZXJ0eSBmb3IgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgc2VsZWN0
ZWQgRE9NIG5vZGUuCisgICAgICAgICAgICAvLyBUaGVzZSBydWxlcyBkb24ndCBnZXQgdXBkYXRl
ZCBieSBDU1NBZ2VudC5nZXRNYXRjaGVkU3R5bGVzRm9yTm9kZS4KKyAgICAgICAgICAgIGlmIChz
dHlsZS5vd25lclJ1bGUgJiYgIXN0eWxlLm93bmVyUnVsZS5tYXRjaGVkU2VsZWN0b3JJbmRpY2Vz
Lmxlbmd0aCkgeworICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3R5bGVQYXls
b2FkLmNzc1Byb3BlcnRpZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X3BhcnNlU3R5bGVQcm9wZXJ0eVBheWxvYWQoc3R5bGVQYXlsb2FkLmNzc1Byb3BlcnRpZXNbaV0s
IGksIHN0eWxlKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY2FsbGJhY2soKTsKICAg
ICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICAgICB9Owo=
</data>
<flag name="review"
          id="395527"
          type_id="1"
          status="-"
          setter="nvasilyev"
    />
    <flag name="commit-queue"
          id="395528"
          type_id="3"
          status="-"
          setter="nvasilyev"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379983</attachid>
            <date>2019-10-01 19:28:16 -0700</date>
            <delta_ts>2019-10-02 12:03:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4498</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDZlMzVlZmRhNWI3Li5hNmE0NzFmODUzZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTktMTAtMDEgIE5pa2l0
YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogU3R5bGVzOiBmb3IgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCBzZWxlY3RlZCBub2RlLCBwcm9w
ZXJ0eSB2YWx1ZXMgYWx3YXlzIHNob3cgYXMgaW52YWxpZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGdpc3Qgb2YgdGhlIGJ1ZzoKKyAgICAgICAg
LSBXSS5DU1NQcm9wZXJ0eSBpcyBpbnN0YW50aWF0ZWQgd2l0aCBgdmFsaWRgIGZhbHNlLgorICAg
ICAgICAtIENTU0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlIG5ldmVyIHVwZGF0ZXMgV0ku
Q1NTUHJvcGVydHkgaW5zdGFuY2VzIGJlY2F1c2UKKyAgICAgICAgICB0aGUgZWRpdGVkIHN0eWxl
IGRvZXMgbm90IGluIGZhY3QgbWF0Y2ggdGhlIHNlbGVjdGVkIERPTSBub2RlLiBBIHZhbGlkIENT
UyBwcm9wZXJ0eQorICAgICAgICAgIGlzIHNob3duIGFzIGludmFsaWQuCisKKyAgICAgICAgVG8g
cmVzb2x2ZSB0aGlzLCBXSS5DU1NQcm9wZXJ0eSBpbnN0YW5jZXMgYXJlIG5vdyB1cGRhdGVkIGFm
dGVyIGVkaXRpbmcKKyAgICAgICAgaW4gdGhlIGNhbGxiYWNrIG9mIGBDU1NBZ2VudC5zZXRTdHls
ZVRleHRgLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5q
czoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmNoYW5nZVN0eWxlVGV4dCk6
CisgICAgICAgIChXSS5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZURlY2xhcmF0
aW9uUGF5bG9hZCk6CisgICAgICAgIERvbid0IHN0b3JlIGBzdHlsZWAgaW4gYHRoaXMuX3N0eWxl
c01hcGAgb2YgV0kuRE9NTm9kZVN0eWxlcyB3aGVuIHRoZSBzdHlsZSBkb2Vzbid0IG1hdGNoIHRo
ZSBzZWxlY3RlZCBub2RlLgorCiAyMDE5LTA5LTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVGlnaHRlciBhdXRvY29tcGxl
dGUgYnViYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwppbmRleCA1ZDljN2JjZDBkOC4uNmJiYTJj
ZmRmYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9ET01Ob2RlU3R5bGVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCkBAIC00NTQsOCArNDU0LDE3IEBAIFdJLkRP
TU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2FsbGJhY2soKTsKKworICAgICAgICAgICAgLy8g
VXBkYXRlIHZhbGlkaXR5IHN0YXR1cyBvZiBlYWNoIHByb3BlcnR5IGZvciBydWxlcyB0aGF0IGRv
bid0IG1hdGNoIHRoZSBzZWxlY3RlZCBET00gbm9kZS4KKyAgICAgICAgICAgIC8vIFRoZXNlIHJ1
bGVzIGRvbid0IGdldCB1cGRhdGVkIGJ5IENTU0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
LgorICAgICAgICAgICAgaWYgKHN0eWxlLm93bmVyUnVsZSAmJiAhc3R5bGUub3duZXJSdWxlLm1h
dGNoZWRTZWxlY3RvckluZGljZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgY29uc3QgaW5o
ZXJpdGVkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgY29uc3QgcHNldWRvSWQgPSBudWxsOwor
ICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNOb2RlID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgdGhpcy5fcGFyc2VTdHlsZURlY2xhcmF0aW9uUGF5bG9hZChzdHlsZVBheWxvYWQsIHRoaXMu
X25vZGUsIGluaGVyaXRlZCwgcHNldWRvSWQsIHN0eWxlLnR5cGUsIHN0eWxlLm93bmVyUnVsZSwg
bWF0Y2hlc05vZGUpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB0aGlzLnJlZnJlc2go
KTsKICAgICAgICAgfTsKIApAQCAtNTQ4LDcgKzU1Nyw3IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBj
bGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBuZXcg
V0kuQ1NTUHJvcGVydHkoaW5kZXgsIHRleHQsIG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgZW5hYmxl
ZCwgb3ZlcnJpZGRlbiwgaW1wbGljaXQsIGFub255bW91cywgdmFsaWQsIHN0eWxlU2hlZXRUZXh0
UmFuZ2UpOwogICAgIH0KIAotICAgIF9wYXJzZVN0eWxlRGVjbGFyYXRpb25QYXlsb2FkKHBheWxv
YWQsIG5vZGUsIGluaGVyaXRlZCwgcHNldWRvSWQsIHR5cGUsIHJ1bGUpCisgICAgX3BhcnNlU3R5
bGVEZWNsYXJhdGlvblBheWxvYWQocGF5bG9hZCwgbm9kZSwgaW5oZXJpdGVkLCBwc2V1ZG9JZCwg
dHlwZSwgcnVsZSwgbWF0Y2hlc05vZGUgPSB0cnVlKQogICAgIHsKICAgICAgICAgaWYgKCFwYXls
b2FkKQogICAgICAgICAgICAgcmV0dXJuIG51bGw7CkBAIC01NjUsMjMgKzU3NCwyNSBAQCBXSS5E
T01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxlcyBleHRlbmRzIFdJLk9iamVjdAogCiAg
ICAgICAgIGxldCBzdHlsZSA9IHJ1bGUgPyBydWxlLnN0eWxlIDogbnVsbDsKIAotICAgICAgICBs
ZXQgZXhpc3RpbmdTdHlsZXMgPSB0aGlzLl9zdHlsZXNNYXAuZ2V0KG1hcEtleSk7Ci0gICAgICAg
IGlmIChleGlzdGluZ1N0eWxlcyAmJiAhc3R5bGUpIHsKLSAgICAgICAgICAgIGZvciAobGV0IGV4
aXN0aW5nU3R5bGUgb2YgZXhpc3RpbmdTdHlsZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoZXhp
c3RpbmdTdHlsZS5ub2RlID09PSBub2RlICYmIGV4aXN0aW5nU3R5bGUuaW5oZXJpdGVkID09PSBp
bmhlcml0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBleGlzdGluZ1N0eWxlOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG1hdGNoZXNOb2RlKSB7Cisg
ICAgICAgICAgICBsZXQgZXhpc3RpbmdTdHlsZXMgPSB0aGlzLl9zdHlsZXNNYXAuZ2V0KG1hcEtl
eSk7CisgICAgICAgICAgICBpZiAoZXhpc3RpbmdTdHlsZXMgJiYgIXN0eWxlKSB7CisgICAgICAg
ICAgICAgICAgZm9yIChsZXQgZXhpc3RpbmdTdHlsZSBvZiBleGlzdGluZ1N0eWxlcykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdTdHlsZS5ub2RlID09PSBub2RlICYmIGV4aXN0
aW5nU3R5bGUuaW5oZXJpdGVkID09PSBpbmhlcml0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlID0gZXhpc3RpbmdTdHlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN0eWxlKQotICAgICAgICAgICAgdGhpcy5fc3R5
bGVzTWFwLmFkZChtYXBLZXksIHN0eWxlKTsKKyAgICAgICAgICAgIGlmIChzdHlsZSkKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zdHlsZXNNYXAuYWRkKG1hcEtleSwgc3R5bGUpOwogCi0gICAgICAg
IHZhciBzaG9ydGhhbmRzID0ge307Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBwYXlsb2FkLnNo
b3J0aGFuZEVudHJpZXMgJiYgaSA8IHBheWxvYWQuc2hvcnRoYW5kRW50cmllcy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgdmFyIHNob3J0aGFuZCA9IHBheWxvYWQuc2hvcnRoYW5kRW50cmll
c1tpXTsKLSAgICAgICAgICAgIHNob3J0aGFuZHNbc2hvcnRoYW5kLm5hbWVdID0gc2hvcnRoYW5k
LnZhbHVlOworICAgICAgICAgICAgdmFyIHNob3J0aGFuZHMgPSB7fTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBwYXlsb2FkLnNob3J0aGFuZEVudHJpZXMgJiYgaSA8IHBheWxvYWQuc2hv
cnRoYW5kRW50cmllcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBzaG9ydGhh
bmQgPSBwYXlsb2FkLnNob3J0aGFuZEVudHJpZXNbaV07CisgICAgICAgICAgICAgICAgc2hvcnRo
YW5kc1tzaG9ydGhhbmQubmFtZV0gPSBzaG9ydGhhbmQudmFsdWU7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIAogICAgICAgICB2YXIgaW5oZXJpdGVkUHJvcGVydHlDb3VudCA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380046</attachid>
            <date>2019-10-02 12:03:00 -0700</date>
            <delta_ts>2019-10-02 14:54:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4516</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDZlMzVlZmRhNWI3Li45MzdjYmM3ZDM5MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTktMTAtMDIgIE5pa2l0
YSBWYXNpbHlldiAgPG52YXNpbHlldkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogU3R5bGVzOiBmb3IgcnVsZXMgdGhhdCBkb24ndCBtYXRjaCBzZWxlY3RlZCBub2RlLCBwcm9w
ZXJ0eSB2YWx1ZXMgYWx3YXlzIHNob3cgYXMgaW52YWxpZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxNTcxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGdpc3Qgb2YgdGhlIGJ1ZzoKKyAgICAgICAg
LSBXSS5DU1NQcm9wZXJ0eSBpcyBpbnN0YW50aWF0ZWQgd2l0aCBgdmFsaWRgIGZhbHNlLgorICAg
ICAgICAtIENTU0FnZW50LmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlIG5ldmVyIHVwZGF0ZXMgV0ku
Q1NTUHJvcGVydHkgaW5zdGFuY2VzIGJlY2F1c2UKKyAgICAgICAgICB0aGUgZWRpdGVkIHN0eWxl
IGRvZXMgbm90IGluIGZhY3QgbWF0Y2ggdGhlIHNlbGVjdGVkIERPTSBub2RlLiBBIHZhbGlkIENT
UyBwcm9wZXJ0eQorICAgICAgICAgIGlzIHNob3duIGFzIGludmFsaWQuCisKKyAgICAgICAgVG8g
cmVzb2x2ZSB0aGlzLCBXSS5DU1NQcm9wZXJ0eSBpbnN0YW5jZXMgYXJlIG5vdyB1cGRhdGVkIGFm
dGVyIGVkaXRpbmcKKyAgICAgICAgaW4gdGhlIGNhbGxiYWNrIG9mIGBDU1NBZ2VudC5zZXRTdHls
ZVRleHRgLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5q
czoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMucHJvdG90eXBlLmNoYW5nZVN0eWxlVGV4dCk6
CisgICAgICAgIChXSS5ET01Ob2RlU3R5bGVzLnByb3RvdHlwZS5fcGFyc2VTdHlsZURlY2xhcmF0
aW9uUGF5bG9hZCk6CisgICAgICAgIERvbid0IHN0b3JlIGBzdHlsZWAgaW4gYHRoaXMuX3N0eWxl
c01hcGAgb2YgV0kuRE9NTm9kZVN0eWxlcyB3aGVuIHRoZSBzdHlsZSBkb2Vzbid0IG1hdGNoIHRo
ZSBzZWxlY3RlZCBub2RlLgorCiAyMDE5LTA5LTEzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFy
b0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogVGlnaHRlciBhdXRvY29tcGxl
dGUgYnViYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwppbmRleCA1ZDljN2JjZDBkOC4uZmVmMGZl
ODVlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9ET01Ob2RlU3R5bGVzLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzCkBAIC00NTQsOCArNDU0LDEzIEBAIFdJLkRP
TU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLQogICAgICAgICAgICAgY2FsbGJhY2soKTsKKworICAgICAgICAgICAgLy8g
VXBkYXRlIHZhbGlkaXR5IG9mIGVhY2ggcHJvcGVydHkgZm9yIHJ1bGVzIHRoYXQgZG9uJ3QgbWF0
Y2ggdGhlIHNlbGVjdGVkIERPTSBub2RlLgorICAgICAgICAgICAgLy8gVGhlc2UgcnVsZXMgZG9u
J3QgZ2V0IHVwZGF0ZWQgYnkgQ1NTQWdlbnQuZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUuCisgICAg
ICAgICAgICBpZiAoc3R5bGUub3duZXJSdWxlICYmICFzdHlsZS5vd25lclJ1bGUubWF0Y2hlZFNl
bGVjdG9ySW5kaWNlcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgdGhpcy5fcGFyc2VTdHlsZURl
Y2xhcmF0aW9uUGF5bG9hZChzdHlsZVBheWxvYWQsIHRoaXMuX25vZGUsIGZhbHNlLCBudWxsLCBz
dHlsZS50eXBlLCBzdHlsZS5vd25lclJ1bGUsIGZhbHNlKTsKKwogICAgICAgICAgICAgdGhpcy5y
ZWZyZXNoKCk7CiAgICAgICAgIH07CiAKQEAgLTU0OCw3ICs1NTMsNyBAQCBXSS5ET01Ob2RlU3R5
bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxlcyBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICByZXR1
cm4gbmV3IFdJLkNTU1Byb3BlcnR5KGluZGV4LCB0ZXh0LCBuYW1lLCB2YWx1ZSwgcHJpb3JpdHks
IGVuYWJsZWQsIG92ZXJyaWRkZW4sIGltcGxpY2l0LCBhbm9ueW1vdXMsIHZhbGlkLCBzdHlsZVNo
ZWV0VGV4dFJhbmdlKTsKICAgICB9CiAKLSAgICBfcGFyc2VTdHlsZURlY2xhcmF0aW9uUGF5bG9h
ZChwYXlsb2FkLCBub2RlLCBpbmhlcml0ZWQsIHBzZXVkb0lkLCB0eXBlLCBydWxlKQorICAgIF9w
YXJzZVN0eWxlRGVjbGFyYXRpb25QYXlsb2FkKHBheWxvYWQsIG5vZGUsIGluaGVyaXRlZCwgcHNl
dWRvSWQsIHR5cGUsIHJ1bGUsIG1hdGNoZXNOb2RlID0gdHJ1ZSkKICAgICB7CiAgICAgICAgIGlm
ICghcGF5bG9hZCkKICAgICAgICAgICAgIHJldHVybiBudWxsOwpAQCAtNTY0LDI0ICs1NjksMjEg
QEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmpl
Y3QKICAgICAgICAgICAgIG1hcEtleSArPSAiOiIgKyBub2RlLmlkICsgIjphdHRyaWJ1dGUiOwog
CiAgICAgICAgIGxldCBzdHlsZSA9IHJ1bGUgPyBydWxlLnN0eWxlIDogbnVsbDsKLQotICAgICAg
ICBsZXQgZXhpc3RpbmdTdHlsZXMgPSB0aGlzLl9zdHlsZXNNYXAuZ2V0KG1hcEtleSk7Ci0gICAg
ICAgIGlmIChleGlzdGluZ1N0eWxlcyAmJiAhc3R5bGUpIHsKLSAgICAgICAgICAgIGZvciAobGV0
IGV4aXN0aW5nU3R5bGUgb2YgZXhpc3RpbmdTdHlsZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZXhpc3RpbmdTdHlsZS5ub2RlID09PSBub2RlICYmIGV4aXN0aW5nU3R5bGUuaW5oZXJpdGVkID09
PSBpbmhlcml0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBleGlzdGluZ1N0eWxl
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY29uc29sZS5hc3NlcnQobWF0
Y2hlc05vZGUgfHwgc3R5bGUpOworCisgICAgICAgIGlmIChtYXRjaGVzTm9kZSkgeworICAgICAg
ICAgICAgbGV0IGV4aXN0aW5nU3R5bGVzID0gdGhpcy5fc3R5bGVzTWFwLmdldChtYXBLZXkpOwor
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nU3R5bGVzICYmICFzdHlsZSkgeworICAgICAgICAgICAg
ICAgIGZvciAobGV0IGV4aXN0aW5nU3R5bGUgb2YgZXhpc3RpbmdTdHlsZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4aXN0aW5nU3R5bGUubm9kZSA9PT0gbm9kZSAmJiBleGlzdGluZ1N0
eWxlLmluaGVyaXRlZCA9PT0gaW5oZXJpdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZSA9IGV4aXN0aW5nU3R5bGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChzdHlsZSkKLSAgICAgICAgICAgIHRoaXMuX3N0eWxlc01h
cC5hZGQobWFwS2V5LCBzdHlsZSk7CiAKLSAgICAgICAgdmFyIHNob3J0aGFuZHMgPSB7fTsKLSAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IHBheWxvYWQuc2hvcnRoYW5kRW50cmllcyAmJiBpIDwgcGF5
bG9hZC5zaG9ydGhhbmRFbnRyaWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgc2hv
cnRoYW5kID0gcGF5bG9hZC5zaG9ydGhhbmRFbnRyaWVzW2ldOwotICAgICAgICAgICAgc2hvcnRo
YW5kc1tzaG9ydGhhbmQubmFtZV0gPSBzaG9ydGhhbmQudmFsdWU7CisgICAgICAgICAgICBpZiAo
c3R5bGUpCisgICAgICAgICAgICAgICAgdGhpcy5fc3R5bGVzTWFwLmFkZChtYXBLZXksIHN0eWxl
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZhciBpbmhlcml0ZWRQcm9wZXJ0eUNvdW50ID0gMDsK
QEAgLTYwNSw2ICs2MDcsOSBAQCBXSS5ET01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxl
cyBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICAgICB9
CiAKKyAgICAgICAgaWYgKCFtYXRjaGVzTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOwor
CiAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gaWQgPyBXSS5jc3NNYW5hZ2VyLnN0eWxlU2hlZXRG
b3JJZGVudGlmaWVyKGlkLnN0eWxlU2hlZXRJZCkgOiBudWxsOwogICAgICAgICBpZiAoc3R5bGVT
aGVldCkgewogICAgICAgICAgICAgaWYgKHR5cGUgPT09IFdJLkNTU1N0eWxlRGVjbGFyYXRpb24u
VHlwZS5JbmxpbmUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>