<?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>166901</bug_id>
          
          <creation_ts>2017-01-10 11:46:20 -0800</creation_ts>
          <short_desc>Web Inspector: long press on New Tab Tab Item should show context menu with recently closed tabs that are still closed</short_desc>
          <delta_ts>2017-01-23 15:07:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Blaze Burg">bburg</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1265473</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-01-10 11:46:20 -0800</bug_when>
    <thetext>Safari&apos;s New Tab Tab Item does this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265474</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-01-10 11:47:13 -0800</bug_when>
    <thetext>&lt;rdar://problem/29952392&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265674</commentid>
    <comment_count>2</comment_count>
      <attachid>298553</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-01-10 21:04:03 -0800</bug_when>
    <thetext>Created attachment 298553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265676</commentid>
    <comment_count>3</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-01-10 21:05:00 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Created attachment 298553 [details]
&gt; Patch

So this doesn&apos;t currently support long press, but I can add it.  I just wanted to know what constitutes a long press.  Is it just a certain timeframe (like 1s) or is it something more specific?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265793</commentid>
    <comment_count>4</comment_count>
      <attachid>298553</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-01-11 09:58:55 -0800</bug_when>
    <thetext>Comment on attachment 298553
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:80
&gt; +        this._closedTabClasses = [];

Why not a set? It provides stable iteration order based on insertion order, and you don&apos;t need to de-dupe it yourself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265800</commentid>
    <comment_count>5</comment_count>
      <attachid>298553</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-01-11 10:13:00 -0800</bug_when>
    <thetext>Comment on attachment 298553
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:80
&gt;&gt; +        this._closedTabClasses = [];
&gt; 
&gt; Why not a set? It provides stable iteration order based on insertion order, and you don&apos;t need to de-dupe it yourself.

For some reason I thought the JS Set was unordered.  Thanks for the clarification :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265807</commentid>
    <comment_count>6</comment_count>
      <attachid>298596</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-01-11 10:22:35 -0800</bug_when>
    <thetext>Created attachment 298596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265954</commentid>
    <comment_count>7</comment_count>
      <attachid>298596</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-01-11 16:31:15 -0800</bug_when>
    <thetext>Comment on attachment 298596
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:77
&gt; +        this._tabBar.addEventListener(WebInspector.TabBar.Event.NewTabContextmenu, this._handleNewTabContextmenu, this);

Is there any reason to track recent tabs in TabBrowser instead of TabBar? It seems unnecessary, maybe I&apos;m missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1265982</commentid>
    <comment_count>8</comment_count>
      <attachid>298596</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-01-11 17:13:54 -0800</bug_when>
    <thetext>Comment on attachment 298596
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:77
&gt;&gt; +        this._tabBar.addEventListener(WebInspector.TabBar.Event.NewTabContextmenu, this._handleNewTabContextmenu, this);
&gt; 
&gt; Is there any reason to track recent tabs in TabBrowser instead of TabBar? It seems unnecessary, maybe I&apos;m missing something.

Most of the other functions go through the TabBrowser, such as adding and removing the content views.  Also, the TabBrowser maintains a list of recent content views, so I figured that this was related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266190</commentid>
    <comment_count>9</comment_count>
      <attachid>298596</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-01-12 10:14:36 -0800</bug_when>
    <thetext>Comment on attachment 298596
Patch

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:77
&gt;&gt;&gt; +        this._tabBar.addEventListener(WebInspector.TabBar.Event.NewTabContextmenu, this._handleNewTabContextmenu, this);
&gt;&gt; 
&gt;&gt; Is there any reason to track recent tabs in TabBrowser instead of TabBar? It seems unnecessary, maybe I&apos;m missing something.
&gt; 
&gt; Most of the other functions go through the TabBrowser, such as adding and removing the content views.  Also, the TabBrowser maintains a list of recent content views, so I figured that this was related.

Sure, but the TabBar doesn&apos;t know anything about content views, just TabBarItems. I think this can be implemented just in terms of TabBarItems. If not, then we&apos;ll have to indirect as you did. But I&apos;d prefer to not do that unless necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1266417</commentid>
    <comment_count>10</comment_count>
      <attachid>298596</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-01-12 20:46:36 -0800</bug_when>
    <thetext>Comment on attachment 298596
Patch

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:77
&gt;&gt;&gt;&gt; +        this._tabBar.addEventListener(WebInspector.TabBar.Event.NewTabContextmenu, this._handleNewTabContextmenu, this);
&gt;&gt;&gt; 
&gt;&gt;&gt; Is there any reason to track recent tabs in TabBrowser instead of TabBar? It seems unnecessary, maybe I&apos;m missing something.
&gt;&gt; 
&gt;&gt; Most of the other functions go through the TabBrowser, such as adding and removing the content views.  Also, the TabBrowser maintains a list of recent content views, so I figured that this was related.
&gt; 
&gt; Sure, but the TabBar doesn&apos;t know anything about content views, just TabBarItems. I think this can be implemented just in terms of TabBarItems. If not, then we&apos;ll have to indirect as you did. But I&apos;d prefer to not do that unless necessary.

Either way I would need to use tabBarItem.representedObject, as that is how I can get the Type for the TabContentView class which is needed to open a tab of that type.  TabBar never deals with tabBarItem.representedObject, whereas TabBrowser does.  I think that it keeps consistency to have it handle the Set of closed tabs.  Additionally, the TabBar is an element wrapper with additional UI features (such as animating the tabs) while TabBrowser is more of a controller concept in that it holds the TabBar, sidebars, ContentView objects, and manages what is displayed at any time.  I think it makes more sense to keep this logic here, even though it is slightly uglier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269110</commentid>
    <comment_count>11</comment_count>
      <attachid>298596</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-23 11:21:32 -0800</bug_when>
    <thetext>Comment on attachment 298596
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/TabBar.js:52
&gt; +        this._newTabTabBarItem.element.addEventListener(&quot;contextmenu&quot;, this._handleNewTabContextmenu.bind(this));

Typo: &quot;Contextmenu&quot; =&gt; &quot;ContextMenu&quot;

&gt; Source/WebInspectorUI/UserInterface/Views/TabBar.js:753
&gt; +    NewTabContextmenu: &quot;tab-bar-new-tab-contextmenu&quot;,

Typo: &quot;Contextmenu&quot; =&gt; &quot;ContextMenu&quot;

&gt;&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:77
&gt;&gt;&gt;&gt;&gt; +        this._tabBar.addEventListener(WebInspector.TabBar.Event.NewTabContextmenu, this._handleNewTabContextmenu, this);
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Is there any reason to track recent tabs in TabBrowser instead of TabBar? It seems unnecessary, maybe I&apos;m missing something.
&gt;&gt;&gt; 
&gt;&gt;&gt; Most of the other functions go through the TabBrowser, such as adding and removing the content views.  Also, the TabBrowser maintains a list of recent content views, so I figured that this was related.
&gt;&gt; 
&gt;&gt; Sure, but the TabBar doesn&apos;t know anything about content views, just TabBarItems. I think this can be implemented just in terms of TabBarItems. If not, then we&apos;ll have to indirect as you did. But I&apos;d prefer to not do that unless necessary.
&gt; 
&gt; Either way I would need to use tabBarItem.representedObject, as that is how I can get the Type for the TabContentView class which is needed to open a tab of that type.  TabBar never deals with tabBarItem.representedObject, whereas TabBrowser does.  I think that it keeps consistency to have it handle the Set of closed tabs.  Additionally, the TabBar is an element wrapper with additional UI features (such as animating the tabs) while TabBrowser is more of a controller concept in that it holds the TabBar, sidebars, ContentView objects, and manages what is displayed at any time.  I think it makes more sense to keep this logic here, even though it is slightly uglier.

I agree with Brian that conceptually it makes sense for TabBar to have this logic. If we created a 2nd tab bar that had a NewTab button we would want the same behavior, without depending on a 2nd body. At the very least, the list of recently closed tabs could be known by TabBar and not require a controller.

That said, I think the logic of whether or not a tab is allowed (WebInspector.isNewTabWithTypeAllowed) is logic that should be separate of the TabBar (though it could be a delegate). So I&apos;m fine with the current implementation because it does this in TabBrowser.

We can revisit this if we ever use TabBar in another place.

&gt; Source/WebInspectorUI/UserInterface/Views/TabBrowser.js:290
&gt; +        let tabClassesToDisplay = closedTabClasses.concat(allTabClasses.filter((tabClass) =&gt; !closedTabClasses.includes(tabClass) &amp;&amp; WebInspector.isNewTabWithTypeAllowed(tabClass.Type) &amp;&amp; !tabClass.isEphemeral()));

This one line is too complex to be one line. I suggest breaking it up:

    let closedTabClasses = ...;
    let allTabClasses = ...;
    let otherTabClassesToDisplay = allTabClasses.filter((tabClass) =&gt; {
        if (closedTabClasses.includes(tabClass))
            return false;
        if (tabClass.isEphemeral())
            return false;
        return WebInspector.isNewTabWithTypeAllowed(tabClass.Type);
    });

    let tabClassesToDisplay = closedTabClasses.concat(otherTabClassesToDisplay);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269142</commentid>
    <comment_count>12</comment_count>
      <attachid>299533</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2017-01-23 12:42:19 -0800</bug_when>
    <thetext>Created attachment 299533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269170</commentid>
    <comment_count>13</comment_count>
      <attachid>299533</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-01-23 13:34:30 -0800</bug_when>
    <thetext>Comment on attachment 299533
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Views/TabBar.js:753
&gt; +    NewTabContextMenu: &quot;tab-bar-new-tab-contextmenu&quot;,

Nit: This could be context-menu on the right, but this is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269201</commentid>
    <comment_count>14</comment_count>
      <attachid>299533</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-23 15:07:42 -0800</bug_when>
    <thetext>Comment on attachment 299533
Patch

Clearing flags on attachment: 299533

Committed r211064: &lt;http://trac.webkit.org/changeset/211064&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1269202</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-23 15:07:47 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298553</attachid>
            <date>2017-01-10 21:04:03 -0800</date>
            <delta_ts>2017-01-11 10:22:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166901-20170110210226.patch</filename>
            <type>text/plain</type>
            <size>7613</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGU2NmJjODEwNWRhZjEzMTVlMmVhY2QwOWEyNzE0
ODcwNGQ1MmZmZDguLmVjMDUzNjkzMmMyMDdkMjdkMDgyMWRhYzY0ZGFjZjRhNzZiNmRiMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE3LTAxLTEwICBEZXZp
biBSb3Vzc28gIDxkY3JvdXNzbyt3ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGxvbmcgcHJlc3Mgb24gTmV3IFRhYiBUYWIgSXRlbSBzaG91bGQgc2hvdyBjb250ZXh0
IG1lbnUgd2l0aCByZWNlbnRseSBjbG9zZWQgdGFicyB0aGF0IGFyZSBzdGlsbCBjbG9zZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjkwMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTG9jYWxpemF0
aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvVGFiQmFyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRhYkJhci5FdmVudCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGFiQmFyLnByb3RvdHlwZS5faGFuZGxlTmV3VGFiQ29u
dGV4dG1lbnUpOgorICAgICAgICBBZGQgbGlzdGVuZXIgZGlzcGF0Y2ggZm9yIGNvbnRleHRtZW51
IGV2ZW50IG9uIE5ldyBUYWIgdGFiIGl0ZW0uCisKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UYWJC
YXIucHJvdG90eXBlLmdldCBuZXdUYWJUYWJCYXJJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgVW51
c2VkLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9UYWJCcm93c2VyLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRhYkJyb3dzZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRh
YkJyb3dzZXIucHJvdG90eXBlLl90YWJCYXJJdGVtQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRhYkJyb3dzZXIucHJvdG90eXBlLl90YWJCYXJJdGVtUmVtb3ZlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGFiQnJvd3Nlci5wcm90b3R5cGUuX2hhbmRsZU5ld1RhYkNvbnRleHRtZW51
KTogQWRkZWQuCisgICAgICAgIENyZWF0ZSBhbiBhcnJheSB0aGF0IGtlZXBzIHRyYWNrIG9mIHRh
YnMgYXMgdGhleSBhcmUgY2xvc2VkLCBhbmQgcG9wdWxhdGUgdGhlIGNvbnRleHQgbWVudQorICAg
ICAgICBvZiB0aGUgTmV3IFRhYiB0YWIgaXRlbSB3aXRoIGVudHJpZXMgZm9yIGVhY2ggb2YgdGhl
c2UgdGFicy4KKwogMjAxNy0wMS0wOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxMDI2MC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5s
cHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IDUwYjY2M2Q5Y2E3ZjA2MTI0ZjhmNmE0ZTlh
ZTg4YjA0NjBjNjBmMTEuLjFjMjY3ZGU3NWU2NGNlZThiYzMxNTE0MDlhMWU4YTFkZmUxNzNmOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9q
L2xvY2FsaXplZFN0cmluZ3MuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXph
dGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwpAQCAtNjEwLDYgKzYxMCw3IEBAIGxv
Y2FsaXplZFN0cmluZ3NbIlJhZGl1cyBZIl0gPSAiUmFkaXVzIFkiOwogbG9jYWxpemVkU3RyaW5n
c1siUmFuZ2UgSXNzdWUiXSA9ICJSYW5nZSBJc3N1ZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSZWFk
b25seSJdID0gIlJlYWRvbmx5IjsKIGxvY2FsaXplZFN0cmluZ3NbIlJlYXNvbnMgZm9yIGNvbXBv
c2l0aW5nOiJdID0gIlJlYXNvbnMgZm9yIGNvbXBvc2l0aW5nOiI7Citsb2NhbGl6ZWRTdHJpbmdz
WyJSZWNlbnRseSBDbG9zZWQgVGFicyJdID0gIlJlY2VudGx5IENsb3NlZCBUYWJzIjsKIGxvY2Fs
aXplZFN0cmluZ3NbIlJlY29yZGluZyBUaW1lbGluZSBEYXRhIl0gPSAiUmVjb3JkaW5nIFRpbWVs
aW5lIERhdGEiOwogbG9jYWxpemVkU3RyaW5nc1siUmVmZXJlbmNlIElzc3VlIl0gPSAiUmVmZXJl
bmNlIElzc3VlIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJlZmxlY3Rpb24iXSA9ICJSZWZsZWN0aW9u
IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1RhYkJhci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Rh
YkJhci5qcwppbmRleCBhNDlhZjk2MzE3ZmM3Yzk3ZTY0MmRkMjgxN2VhMjkxMzg1MWEwNjVjLi44
Yzk0NmYyZjk4Mzg3OTRhYmM0ZjgyN2UyMTc2ZmRlODJiYzRmOTVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UYWJCYXIuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFiQmFyLmpzCkBAIC00OSwx
MyArNDksMTIgQEAgV2ViSW5zcGVjdG9yLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdl
Ykluc3BlY3Rvci5WaWV3CiAgICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0gPSBuZXcgV2Vi
SW5zcGVjdG9yLlBpbm5lZFRhYkJhckl0ZW0oIkltYWdlcy9OZXdUYWJQbHVzLnN2ZyIsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiQ3JlYXRlIGEgbmV3IHRhYiIpKTsKICAgICAgICAgdGhpcy5fbmV3
VGFiVGFiQmFySXRlbS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCB0aGlz
Ll9oYW5kbGVOZXdUYWJNb3VzZUVudGVyLmJpbmQodGhpcykpOwogICAgICAgICB0aGlzLl9uZXdU
YWJUYWJCYXJJdGVtLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5k
bGVOZXdUYWJDbGljay5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbmV3VGFiVGFiQmFySXRl
bS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFuZGxlTmV3
VGFiQ29udGV4dG1lbnUuYmluZCh0aGlzKSk7CiAgICAgICAgIHRoaXMuYWRkVGFiQmFySXRlbSh0
aGlzLl9uZXdUYWJUYWJCYXJJdGVtLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBQdWJsaWMKIAot
ICAgIGdldCBuZXdUYWJUYWJCYXJJdGVtKCkgeyByZXR1cm4gdGhpcy5fbmV3VGFiVGFiQmFySXRl
bTsgfQotCiAgICAgdXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRlKCkKICAgICB7CiAgICAgICAg
IGxldCBuZXdUYWJFeGlzdHMgPSAhV2ViSW5zcGVjdG9yLmlzTmV3VGFiV2l0aFR5cGVBbGxvd2Vk
KFdlYkluc3BlY3Rvci5OZXdUYWJDb250ZW50Vmlldy5UeXBlKTsKQEAgLTczMCw2ICs3MjksMTMg
QEAgV2ViSW5zcGVjdG9yLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdlYkluc3BlY3Rv
ci5WaWV3CiAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93TmV3VGFiVGFiKHNob3VsZEFuaW1hdGUp
OwogICAgIH0KIAorICAgIF9oYW5kbGVOZXdUYWJDb250ZXh0bWVudShldmVudCkKKyAgICB7Cisg
ICAgICAgIGxldCBjb250ZXh0TWVudSA9IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5jcmVhdGVG
cm9tRXZlbnQoZXZlbnQpOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQuTmV3VGFiQ29udGV4dG1lbnUsIHtjb250ZXh0TWVu
dX0pOworICAgIH0KKwogICAgIF9oYW5kbGVOZXdUYWJNb3VzZUVudGVyKGV2ZW50KQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLl90YWJBbmltYXRlZENsb3NlZFNpbmNlTW91c2VFbnRlciB8fCAh
dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygic3RhdGljLWxheW91dCIpIHx8IHRoaXMu
ZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFuaW1hdGluZyIpKQpAQCAtNzQ0LDUgKzc1MCw2
IEBAIFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQgPSB7CiAgICAgVGFiQmFySXRlbUFkZGVkOiAi
dGFiLWJhci10YWItYmFyLWl0ZW0tYWRkZWQiLAogICAgIFRhYkJhckl0ZW1SZW1vdmVkOiAidGFi
LWJhci10YWItYmFyLWl0ZW0tcmVtb3ZlZCIsCiAgICAgVGFiQmFySXRlbXNSZW9yZGVyZWQ6ICJ0
YWItYmFyLXRhYi1iYXItaXRlbXMtcmVvcmRlcmVkIiwKKyAgICBOZXdUYWJDb250ZXh0bWVudTog
InRhYi1iYXItbmV3LXRhYi1jb250ZXh0bWVudSIsCiAgICAgT3BlbkRlZmF1bHRUYWI6ICJ0YWIt
YmFyLW9wZW4tZGVmYXVsdC10YWIiCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFiQnJvd3Nlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RhYkJyb3dzZXIuanMKaW5kZXggYWEzOTcwZDFhM2Zi
M2E2ZGQzZTk3ZTkzNWZlMjExZTMzMjljY2QyZS4uODMxMGJmZWZjODY4ZDYwNGZiNDUwOGVlYzBm
YzU1YmRhY2I5ZjFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVGFiQnJvd3Nlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UYWJCcm93c2VyLmpzCkBAIC03Miw5ICs3MiwxMiBAQCBXZWJJbnNw
ZWN0b3IuVGFiQnJvd3NlciA9IGNsYXNzIFRhYkJyb3dzZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3Iu
VmlldwogICAgICAgICB0aGlzLl9zaG93UHJldmlvdXNUYWJLZXlib2FyZFNob3J0Y3V0My5pbXBs
aWNpdGx5UHJldmVudHNEZWZhdWx0ID0gZmFsc2U7CiAKICAgICAgICAgdGhpcy5fdGFiQmFyLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtU2VsZWN0
ZWQsIHRoaXMuX3RhYkJhckl0ZW1TZWxlY3RlZCwgdGhpcyk7CisgICAgICAgIHRoaXMuX3RhYkJh
ci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQuVGFiQmFySXRlbUFk
ZGVkLCB0aGlzLl90YWJCYXJJdGVtQWRkZWQsIHRoaXMpOwogICAgICAgICB0aGlzLl90YWJCYXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1SZW1v
dmVkLCB0aGlzLl90YWJCYXJJdGVtUmVtb3ZlZCwgdGhpcyk7CisgICAgICAgIHRoaXMuX3RhYkJh
ci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQuTmV3VGFiQ29udGV4
dG1lbnUsIHRoaXMuX2hhbmRsZU5ld1RhYkNvbnRleHRtZW51LCB0aGlzKTsKIAogICAgICAgICB0
aGlzLl9yZWNlbnRUYWJDb250ZW50Vmlld3MgPSBbXTsKKyAgICAgICAgdGhpcy5fY2xvc2VkVGFi
Q2xhc3NlcyA9IFtdOwogICAgIH0KIAogICAgIC8vIFB1YmxpYwpAQCAtMjQ2LDYgKzI0OSwxNyBA
QCBXZWJJbnNwZWN0b3IuVGFiQnJvd3NlciA9IGNsYXNzIFRhYkJyb3dzZXIgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuVmlldwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuVGFiQnJvd3Nlci5FdmVudC5TZWxlY3RlZFRhYkNvbnRlbnRWaWV3RGlkQ2hhbmdl
KTsKICAgICB9CiAKKyAgICBfdGFiQmFySXRlbUFkZGVkKGV2ZW50KQorICAgIHsKKyAgICAgICAg
bGV0IHRhYkNvbnRlbnRWaWV3ID0gZXZlbnQuZGF0YS50YWJCYXJJdGVtLnJlcHJlc2VudGVkT2Jq
ZWN0OworCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRhYkNvbnRlbnRWaWV3KTsKKyAgICAgICAg
aWYgKCF0YWJDb250ZW50VmlldykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlz
Ll9jbG9zZWRUYWJDbGFzc2VzLnJlbW92ZSh0YWJDb250ZW50Vmlldy5jb25zdHJ1Y3Rvcik7Cisg
ICAgfQorCiAgICAgX3RhYkJhckl0ZW1SZW1vdmVkKGV2ZW50KQogICAgIHsKICAgICAgICAgbGV0
IHRhYkNvbnRlbnRWaWV3ID0gZXZlbnQuZGF0YS50YWJCYXJJdGVtLnJlcHJlc2VudGVkT2JqZWN0
OwpAQCAtMjU1LDYgKzI2OSwxMCBAQCBXZWJJbnNwZWN0b3IuVGFiQnJvd3NlciA9IGNsYXNzIFRh
YkJyb3dzZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3IuVmlldwogICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIHRoaXMuX3JlY2VudFRhYkNvbnRlbnRWaWV3cy5yZW1vdmUodGFiQ29udGVudFZp
ZXcpOworCisgICAgICAgIGlmICghdGFiQ29udGVudFZpZXcuY29uc3RydWN0b3IuaXNFcGhlbWVy
YWwoKSkKKyAgICAgICAgICAgIHRoaXMuX2Nsb3NlZFRhYkNsYXNzZXMudW5zaGlmdCh0YWJDb250
ZW50Vmlldy5jb25zdHJ1Y3Rvcik7CisKICAgICAgICAgdGhpcy5fY29udGVudFZpZXdDb250YWlu
ZXIuY2xvc2VDb250ZW50Vmlldyh0YWJDb250ZW50Vmlldyk7CiAKICAgICAgICAgdGFiQ29udGVu
dFZpZXcucGFyZW50VGFiQnJvd3NlciA9IG51bGw7CkBAIC0yNjMsNiArMjgxLDI0IEBAIFdlYklu
c3BlY3Rvci5UYWJCcm93c2VyID0gY2xhc3MgVGFiQnJvd3NlciBleHRlbmRzIFdlYkluc3BlY3Rv
ci5WaWV3CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KCF0aGlzLnNlbGVjdGVkVGFiQ29udGVudFZp
ZXcgfHwgdGhpcy5zZWxlY3RlZFRhYkNvbnRlbnRWaWV3ID09PSB0aGlzLl9yZWNlbnRUYWJDb250
ZW50Vmlld3NbMF0pOwogICAgIH0KIAorICAgIF9oYW5kbGVOZXdUYWJDb250ZXh0bWVudShldmVu
dCkKKyAgICB7CisgICAgICAgIGxldCBhbGxUYWJDbGFzc2VzID0gQXJyYXkuZnJvbShXZWJJbnNw
ZWN0b3Iua25vd25UYWJDbGFzc2VzKCkpOworICAgICAgICBsZXQgdGFiQ2xhc3NlcyA9IHRoaXMu
X2Nsb3NlZFRhYkNsYXNzZXMuY29uY2F0KGFsbFRhYkNsYXNzZXMuZmlsdGVyKCh0YWJDbGFzcykg
PT4gIXRoaXMuX2Nsb3NlZFRhYkNsYXNzZXMuaW5jbHVkZXModGFiQ2xhc3MpICYmIFdlYkluc3Bl
Y3Rvci5pc05ld1RhYldpdGhUeXBlQWxsb3dlZCh0YWJDbGFzcy5UeXBlKSAmJiAhdGFiQ2xhc3Mu
aXNFcGhlbWVyYWwoKSkpOworICAgICAgICBpZiAoIXRhYkNsYXNzZXMubGVuZ3RoKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGxldCBjb250ZXh0TWVudSA9IGV2ZW50LmRhdGEuY29u
dGV4dE1lbnU7CisKKyAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlJlY2VudGx5IENsb3NlZCBUYWJzIiksIG51bGwsIHRydWUpOworCisgICAgICAg
IGZvciAobGV0IHRhYkNsYXNzIG9mIHRhYkNsYXNzZXMpIHsKKyAgICAgICAgICAgIGNvbnRleHRN
ZW51LmFwcGVuZEl0ZW0odGFiQ2xhc3MudGFiSW5mbygpLnRpdGxlLCAoKSA9PiB7CisgICAgICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmNyZWF0ZU5ld1RhYldpdGhUeXBlKHRhYkNsYXNzLlR5cGUs
IHtzaG91bGRTaG93TmV3VGFiOiB0cnVlfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQor
ICAgIH0KKwogICAgIF9zaWRlYmFyUGFuZWxTZWxlY3RlZChldmVudCkKICAgICB7CiAgICAgICAg
IGlmICh0aGlzLl9pZ25vcmVTaWRlYmFyRXZlbnRzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>298596</attachid>
            <date>2017-01-11 10:22:35 -0800</date>
            <delta_ts>2017-01-23 12:42:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-166901-20170111102056.patch</filename>
            <type>text/plain</type>
            <size>7894</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGU2NmJjODEwNWRhZjEzMTVlMmVhY2QwOWEyNzE0
ODcwNGQ1MmZmZDguLjQwY2U1ZWY4MDdhNjAwZGY2YTQzNmEwOWQ5NjBkMjk2ZTMyODBkYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE3LTAxLTExICBEZXZp
biBSb3Vzc28gIDxkY3JvdXNzbyt3ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGxvbmcgcHJlc3Mgb24gTmV3IFRhYiBUYWIgSXRlbSBzaG91bGQgc2hvdyBjb250ZXh0
IG1lbnUgd2l0aCByZWNlbnRseSBjbG9zZWQgdGFicyB0aGF0IGFyZSBzdGlsbCBjbG9zZWQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjkwMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTG9jYWxpemF0
aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvVGFiQmFyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRhYkJhci5FdmVudCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGFiQmFyLnByb3RvdHlwZS5faGFuZGxlTmV3VGFiQ29u
dGV4dG1lbnUpOgorICAgICAgICBBZGQgbGlzdGVuZXIgZGlzcGF0Y2ggZm9yIGNvbnRleHRtZW51
IGV2ZW50IG9uIE5ldyBUYWIgdGFiIGl0ZW0uCisKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UYWJC
YXIucHJvdG90eXBlLmdldCBuZXdUYWJUYWJCYXJJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgVW51
c2VkLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9UYWJCcm93c2VyLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlRhYkJyb3dzZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRh
YkJyb3dzZXIucHJvdG90eXBlLl90YWJCYXJJdGVtQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRhYkJyb3dzZXIucHJvdG90eXBlLl90YWJCYXJJdGVtUmVtb3ZlZCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGFiQnJvd3Nlci5wcm90b3R5cGUuX2hhbmRsZU5ld1RhYkNvbnRleHRtZW51
KTogQWRkZWQuCisgICAgICAgIENyZWF0ZSBhbiBhcnJheSB0aGF0IGtlZXBzIHRyYWNrIG9mIHRh
YnMgYXMgdGhleSBhcmUgY2xvc2VkLCBhbmQgcG9wdWxhdGUgdGhlIGNvbnRleHQgbWVudQorICAg
ICAgICBvZiB0aGUgTmV3IFRhYiB0YWIgaXRlbSB3aXRoIGVudHJpZXMgZm9yIGVhY2ggb2YgdGhl
c2UgdGFicy4KKwogMjAxNy0wMS0wOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIxMDI2MC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2Fs
aXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0aW9ucy9lbi5s
cHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCmluZGV4IDUwYjY2M2Q5Y2E3ZjA2MTI0ZjhmNmE0ZTlh
ZTg4YjA0NjBjNjBmMTEuLjFjMjY3ZGU3NWU2NGNlZThiYzMxNTE0MDlhMWU4YTFkZmUxNzNmOGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9q
L2xvY2FsaXplZFN0cmluZ3MuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXph
dGlvbnMvZW4ubHByb2ovbG9jYWxpemVkU3RyaW5ncy5qcwpAQCAtNjEwLDYgKzYxMCw3IEBAIGxv
Y2FsaXplZFN0cmluZ3NbIlJhZGl1cyBZIl0gPSAiUmFkaXVzIFkiOwogbG9jYWxpemVkU3RyaW5n
c1siUmFuZ2UgSXNzdWUiXSA9ICJSYW5nZSBJc3N1ZSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSZWFk
b25seSJdID0gIlJlYWRvbmx5IjsKIGxvY2FsaXplZFN0cmluZ3NbIlJlYXNvbnMgZm9yIGNvbXBv
c2l0aW5nOiJdID0gIlJlYXNvbnMgZm9yIGNvbXBvc2l0aW5nOiI7Citsb2NhbGl6ZWRTdHJpbmdz
WyJSZWNlbnRseSBDbG9zZWQgVGFicyJdID0gIlJlY2VudGx5IENsb3NlZCBUYWJzIjsKIGxvY2Fs
aXplZFN0cmluZ3NbIlJlY29yZGluZyBUaW1lbGluZSBEYXRhIl0gPSAiUmVjb3JkaW5nIFRpbWVs
aW5lIERhdGEiOwogbG9jYWxpemVkU3RyaW5nc1siUmVmZXJlbmNlIElzc3VlIl0gPSAiUmVmZXJl
bmNlIElzc3VlIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJlZmxlY3Rpb24iXSA9ICJSZWZsZWN0aW9u
IjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1RhYkJhci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Rh
YkJhci5qcwppbmRleCBhNDlhZjk2MzE3ZmM3Yzk3ZTY0MmRkMjgxN2VhMjkxMzg1MWEwNjVjLi44
Yzk0NmYyZjk4Mzg3OTRhYmM0ZjgyN2UyMTc2ZmRlODJiYzRmOTVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UYWJCYXIuanMKKysrIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFiQmFyLmpzCkBAIC00OSwx
MyArNDksMTIgQEAgV2ViSW5zcGVjdG9yLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdl
Ykluc3BlY3Rvci5WaWV3CiAgICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0ZW0gPSBuZXcgV2Vi
SW5zcGVjdG9yLlBpbm5lZFRhYkJhckl0ZW0oIkltYWdlcy9OZXdUYWJQbHVzLnN2ZyIsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiQ3JlYXRlIGEgbmV3IHRhYiIpKTsKICAgICAgICAgdGhpcy5fbmV3
VGFiVGFiQmFySXRlbS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCB0aGlz
Ll9oYW5kbGVOZXdUYWJNb3VzZUVudGVyLmJpbmQodGhpcykpOwogICAgICAgICB0aGlzLl9uZXdU
YWJUYWJCYXJJdGVtLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLl9oYW5k
bGVOZXdUYWJDbGljay5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fbmV3VGFiVGFiQmFySXRl
bS5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbnRleHRtZW51IiwgdGhpcy5faGFuZGxlTmV3
VGFiQ29udGV4dG1lbnUuYmluZCh0aGlzKSk7CiAgICAgICAgIHRoaXMuYWRkVGFiQmFySXRlbSh0
aGlzLl9uZXdUYWJUYWJCYXJJdGVtLCB0cnVlKTsKICAgICB9CiAKICAgICAvLyBQdWJsaWMKIAot
ICAgIGdldCBuZXdUYWJUYWJCYXJJdGVtKCkgeyByZXR1cm4gdGhpcy5fbmV3VGFiVGFiQmFySXRl
bTsgfQotCiAgICAgdXBkYXRlTmV3VGFiVGFiQmFySXRlbVN0YXRlKCkKICAgICB7CiAgICAgICAg
IGxldCBuZXdUYWJFeGlzdHMgPSAhV2ViSW5zcGVjdG9yLmlzTmV3VGFiV2l0aFR5cGVBbGxvd2Vk
KFdlYkluc3BlY3Rvci5OZXdUYWJDb250ZW50Vmlldy5UeXBlKTsKQEAgLTczMCw2ICs3MjksMTMg
QEAgV2ViSW5zcGVjdG9yLlRhYkJhciA9IGNsYXNzIFRhYkJhciBleHRlbmRzIFdlYkluc3BlY3Rv
ci5WaWV3CiAgICAgICAgIFdlYkluc3BlY3Rvci5zaG93TmV3VGFiVGFiKHNob3VsZEFuaW1hdGUp
OwogICAgIH0KIAorICAgIF9oYW5kbGVOZXdUYWJDb250ZXh0bWVudShldmVudCkKKyAgICB7Cisg
ICAgICAgIGxldCBjb250ZXh0TWVudSA9IFdlYkluc3BlY3Rvci5Db250ZXh0TWVudS5jcmVhdGVG
cm9tRXZlbnQoZXZlbnQpOworCisgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQuTmV3VGFiQ29udGV4dG1lbnUsIHtjb250ZXh0TWVu
dX0pOworICAgIH0KKwogICAgIF9oYW5kbGVOZXdUYWJNb3VzZUVudGVyKGV2ZW50KQogICAgIHsK
ICAgICAgICAgaWYgKCF0aGlzLl90YWJBbmltYXRlZENsb3NlZFNpbmNlTW91c2VFbnRlciB8fCAh
dGhpcy5lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygic3RhdGljLWxheW91dCIpIHx8IHRoaXMu
ZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFuaW1hdGluZyIpKQpAQCAtNzQ0LDUgKzc1MCw2
IEBAIFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQgPSB7CiAgICAgVGFiQmFySXRlbUFkZGVkOiAi
dGFiLWJhci10YWItYmFyLWl0ZW0tYWRkZWQiLAogICAgIFRhYkJhckl0ZW1SZW1vdmVkOiAidGFi
LWJhci10YWItYmFyLWl0ZW0tcmVtb3ZlZCIsCiAgICAgVGFiQmFySXRlbXNSZW9yZGVyZWQ6ICJ0
YWItYmFyLXRhYi1iYXItaXRlbXMtcmVvcmRlcmVkIiwKKyAgICBOZXdUYWJDb250ZXh0bWVudTog
InRhYi1iYXItbmV3LXRhYi1jb250ZXh0bWVudSIsCiAgICAgT3BlbkRlZmF1bHRUYWI6ICJ0YWIt
YmFyLW9wZW4tZGVmYXVsdC10YWIiCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFiQnJvd3Nlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RhYkJyb3dzZXIuanMKaW5kZXggYWEzOTcwZDFhM2Zi
M2E2ZGQzZTk3ZTkzNWZlMjExZTMzMjljY2QyZS4uZmY5ZjAxZTYwZTM5MDY2NzgzZWI0NzVmZTlk
MTFjNmE5Zjg3MGUyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvVGFiQnJvd3Nlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9WaWV3cy9UYWJCcm93c2VyLmpzCkBAIC03Miw5ICs3MiwxMiBAQCBXZWJJbnNw
ZWN0b3IuVGFiQnJvd3NlciA9IGNsYXNzIFRhYkJyb3dzZXIgZXh0ZW5kcyBXZWJJbnNwZWN0b3Iu
VmlldwogICAgICAgICB0aGlzLl9zaG93UHJldmlvdXNUYWJLZXlib2FyZFNob3J0Y3V0My5pbXBs
aWNpdGx5UHJldmVudHNEZWZhdWx0ID0gZmFsc2U7CiAKICAgICAgICAgdGhpcy5fdGFiQmFyLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtU2VsZWN0
ZWQsIHRoaXMuX3RhYkJhckl0ZW1TZWxlY3RlZCwgdGhpcyk7CisgICAgICAgIHRoaXMuX3RhYkJh
ci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQuVGFiQmFySXRlbUFk
ZGVkLCB0aGlzLl90YWJCYXJJdGVtQWRkZWQsIHRoaXMpOwogICAgICAgICB0aGlzLl90YWJCYXIu
YWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1SZW1v
dmVkLCB0aGlzLl90YWJCYXJJdGVtUmVtb3ZlZCwgdGhpcyk7CisgICAgICAgIHRoaXMuX3RhYkJh
ci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQuTmV3VGFiQ29udGV4
dG1lbnUsIHRoaXMuX2hhbmRsZU5ld1RhYkNvbnRleHRtZW51LCB0aGlzKTsKIAogICAgICAgICB0
aGlzLl9yZWNlbnRUYWJDb250ZW50Vmlld3MgPSBbXTsKKyAgICAgICAgdGhpcy5fY2xvc2VkVGFi
Q2xhc3NlcyA9IG5ldyBTZXQ7CiAgICAgfQogCiAgICAgLy8gUHVibGljCkBAIC0yNDYsNiArMjQ5
LDE3IEBAIFdlYkluc3BlY3Rvci5UYWJCcm93c2VyID0gY2xhc3MgVGFiQnJvd3NlciBleHRlbmRz
IFdlYkluc3BlY3Rvci5WaWV3CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdlYkluc3BlY3Rvci5UYWJCcm93c2VyLkV2ZW50LlNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRD
aGFuZ2UpOwogICAgIH0KIAorICAgIF90YWJCYXJJdGVtQWRkZWQoZXZlbnQpCisgICAgeworICAg
ICAgICBsZXQgdGFiQ29udGVudFZpZXcgPSBldmVudC5kYXRhLnRhYkJhckl0ZW0ucmVwcmVzZW50
ZWRPYmplY3Q7CisKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGFiQ29udGVudFZpZXcpOworICAg
ICAgICBpZiAoIXRhYkNvbnRlbnRWaWV3KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHRoaXMuX2Nsb3NlZFRhYkNsYXNzZXMuZGVsZXRlKHRhYkNvbnRlbnRWaWV3LmNvbnN0cnVjdG9y
KTsKKyAgICB9CisKICAgICBfdGFiQmFySXRlbVJlbW92ZWQoZXZlbnQpCiAgICAgewogICAgICAg
ICBsZXQgdGFiQ29udGVudFZpZXcgPSBldmVudC5kYXRhLnRhYkJhckl0ZW0ucmVwcmVzZW50ZWRP
YmplY3Q7CkBAIC0yNTUsNiArMjY5LDEwIEBAIFdlYkluc3BlY3Rvci5UYWJCcm93c2VyID0gY2xh
c3MgVGFiQnJvd3NlciBleHRlbmRzIFdlYkluc3BlY3Rvci5WaWV3CiAgICAgICAgICAgICByZXR1
cm47CiAKICAgICAgICAgdGhpcy5fcmVjZW50VGFiQ29udGVudFZpZXdzLnJlbW92ZSh0YWJDb250
ZW50Vmlldyk7CisKKyAgICAgICAgaWYgKCF0YWJDb250ZW50Vmlldy5jb25zdHJ1Y3Rvci5pc0Vw
aGVtZXJhbCgpKQorICAgICAgICAgICAgdGhpcy5fY2xvc2VkVGFiQ2xhc3Nlcy5hZGQodGFiQ29u
dGVudFZpZXcuY29uc3RydWN0b3IpOworCiAgICAgICAgIHRoaXMuX2NvbnRlbnRWaWV3Q29udGFp
bmVyLmNsb3NlQ29udGVudFZpZXcodGFiQ29udGVudFZpZXcpOwogCiAgICAgICAgIHRhYkNvbnRl
bnRWaWV3LnBhcmVudFRhYkJyb3dzZXIgPSBudWxsOwpAQCAtMjYzLDYgKzI4MSwyNyBAQCBXZWJJ
bnNwZWN0b3IuVGFiQnJvd3NlciA9IGNsYXNzIFRhYkJyb3dzZXIgZXh0ZW5kcyBXZWJJbnNwZWN0
b3IuVmlldwogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5zZWxlY3RlZFRhYkNvbnRlbnRW
aWV3IHx8IHRoaXMuc2VsZWN0ZWRUYWJDb250ZW50VmlldyA9PT0gdGhpcy5fcmVjZW50VGFiQ29u
dGVudFZpZXdzWzBdKTsKICAgICB9CiAKKyAgICBfaGFuZGxlTmV3VGFiQ29udGV4dG1lbnUoZXZl
bnQpCisgICAgeworICAgICAgICAvLyBUaGUgYXJyYXkgbXVzdCBiZSByZXZlcnNlZCBiZWNhdXNl
IFNldHMgaW5zZXJ0IGludG8gdGhlIGVuZCwgYW5kIHdlIHdhbnQgdG8gZGlzcGxheSB0aGUKKyAg
ICAgICAgLy8gbW9zdCByZWNlbnRseSBjbG9zZWQgaXRlbSBmaXJzdCAod2hpY2ggaXMgdGhlIGxh
c3QgaXRlbSBhZGRlZCB0byB0aGUgc2V0KS4KKyAgICAgICAgbGV0IGNsb3NlZFRhYkNsYXNzZXMg
PSBBcnJheS5mcm9tKHRoaXMuX2Nsb3NlZFRhYkNsYXNzZXMpLnJldmVyc2UoKTsKKyAgICAgICAg
bGV0IGFsbFRhYkNsYXNzZXMgPSBBcnJheS5mcm9tKFdlYkluc3BlY3Rvci5rbm93blRhYkNsYXNz
ZXMoKSk7CisgICAgICAgIGxldCB0YWJDbGFzc2VzVG9EaXNwbGF5ID0gY2xvc2VkVGFiQ2xhc3Nl
cy5jb25jYXQoYWxsVGFiQ2xhc3Nlcy5maWx0ZXIoKHRhYkNsYXNzKSA9PiAhY2xvc2VkVGFiQ2xh
c3Nlcy5pbmNsdWRlcyh0YWJDbGFzcykgJiYgV2ViSW5zcGVjdG9yLmlzTmV3VGFiV2l0aFR5cGVB
bGxvd2VkKHRhYkNsYXNzLlR5cGUpICYmICF0YWJDbGFzcy5pc0VwaGVtZXJhbCgpKSk7CisgICAg
ICAgIGlmICghdGFiQ2xhc3Nlc1RvRGlzcGxheS5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbGV0IGNvbnRleHRNZW51ID0gZXZlbnQuZGF0YS5jb250ZXh0TWVudTsKKwor
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiUmVj
ZW50bHkgQ2xvc2VkIFRhYnMiKSwgbnVsbCwgdHJ1ZSk7CisKKyAgICAgICAgZm9yIChsZXQgdGFi
Q2xhc3Mgb2YgdGFiQ2xhc3Nlc1RvRGlzcGxheSkgeworICAgICAgICAgICAgY29udGV4dE1lbnUu
YXBwZW5kSXRlbSh0YWJDbGFzcy50YWJJbmZvKCkudGl0bGUsICgpID0+IHsKKyAgICAgICAgICAg
ICAgICBXZWJJbnNwZWN0b3IuY3JlYXRlTmV3VGFiV2l0aFR5cGUodGFiQ2xhc3MuVHlwZSwge3No
b3VsZFNob3dOZXdUYWI6IHRydWV9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg
fQorCiAgICAgX3NpZGViYXJQYW5lbFNlbGVjdGVkKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYg
KHRoaXMuX2lnbm9yZVNpZGViYXJFdmVudHMpCg==
</data>
<flag name="review"
          id="320717"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>299533</attachid>
            <date>2017-01-23 12:42:19 -0800</date>
            <delta_ts>2017-01-23 15:07:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>166901.diff</filename>
            <type>text/plain</type>
            <size>7832</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGJmN2RmMjMuLjY3MDQxOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDE3LTAxLTIzICBEZXZpbiBSb3Vzc28g
IDxkY3JvdXNzbyt3ZWJraXRAZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IGxv
bmcgcHJlc3Mgb24gTmV3IFRhYiBUYWIgSXRlbSBzaG91bGQgc2hvdyBjb250ZXh0IG1lbnUgd2l0
aCByZWNlbnRseSBjbG9zZWQgdGFicyB0aGF0IGFyZSBzdGlsbCBjbG9zZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NjkwMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAgICAqIExvY2FsaXphdGlvbnMvZW4u
bHByb2ovbG9jYWxpemVkU3RyaW5ncy5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdz
L1RhYkJhci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UYWJCYXIuRXZlbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlRhYkJhci5wcm90b3R5cGUuX2hhbmRsZU5ld1RhYkNvbnRleHRNZW51
KToKKyAgICAgICAgQWRkIGxpc3RlbmVyIGRpc3BhdGNoIGZvciBjb250ZXh0bWVudSBldmVudCBv
biBOZXcgVGFiIHRhYiBpdGVtLgorCisgICAgICAgIChXZWJJbnNwZWN0b3IuVGFiQmFyLnByb3Rv
dHlwZS5nZXQgbmV3VGFiVGFiQmFySXRlbSk6IERlbGV0ZWQuCisgICAgICAgIFVudXNlZC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGFiQnJvd3Nlci5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5UYWJCcm93c2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UYWJCcm93c2Vy
LnByb3RvdHlwZS5fdGFiQmFySXRlbUFkZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UYWJC
cm93c2VyLnByb3RvdHlwZS5fdGFiQmFySXRlbVJlbW92ZWQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRhYkJyb3dzZXIucHJvdG90eXBlLl9oYW5kbGVOZXdUYWJDb250ZXh0TWVudSk6IEFkZGVk
LgorICAgICAgICBDcmVhdGUgYW4gYXJyYXkgdGhhdCBrZWVwcyB0cmFjayBvZiB0YWJzIGFzIHRo
ZXkgYXJlIGNsb3NlZCwgYW5kIHBvcHVsYXRlIHRoZSBjb250ZXh0bWVudQorICAgICAgICBvZiB0
aGUgTmV3IFRhYiB0YWIgaXRlbSB3aXRoIGVudHJpZXMgZm9yIGVhY2ggb2YgdGhlc2UgdGFicy4K
KwogMjAxNy0wMS0yMCAgRGV2aW4gUm91c3NvICA8ZGNyb3Vzc28rd2Via2l0QGdtYWlsLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBTZWFyY2ggVGFiIHNob3VsZCBkaXNwbGF5IHNlYXJj
aCByZXN1bHRzIGltbWVkaWF0ZWx5IHdoZW4gY2xvc2luZyBhbmQgcmVvcGVuaW5nIEluc3BlY3Rv
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHBy
b2ovbG9jYWxpemVkU3RyaW5ncy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Mb2NhbGl6YXRp
b25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggMTg1NTQzNi4uMjkxYzRkYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0xvY2FsaXphdGlvbnMvZW4ubHByb2ov
bG9jYWxpemVkU3RyaW5ncy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvTG9jYWxpemF0
aW9ucy9lbi5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzCkBAIC02MDcsNiArNjA3LDcgQEAgbG9j
YWxpemVkU3RyaW5nc1siUmFkaXVzIFkiXSA9ICJSYWRpdXMgWSI7CiBsb2NhbGl6ZWRTdHJpbmdz
WyJSYW5nZSBJc3N1ZSJdID0gIlJhbmdlIElzc3VlIjsKIGxvY2FsaXplZFN0cmluZ3NbIlJlYWRv
bmx5Il0gPSAiUmVhZG9ubHkiOwogbG9jYWxpemVkU3RyaW5nc1siUmVhc29ucyBmb3IgY29tcG9z
aXRpbmc6Il0gPSAiUmVhc29ucyBmb3IgY29tcG9zaXRpbmc6IjsKK2xvY2FsaXplZFN0cmluZ3Nb
IlJlY2VudGx5IENsb3NlZCBUYWJzIl0gPSAiUmVjZW50bHkgQ2xvc2VkIFRhYnMiOwogbG9jYWxp
emVkU3RyaW5nc1siUmVjb3JkaW5nIFRpbWVsaW5lIERhdGEiXSA9ICJSZWNvcmRpbmcgVGltZWxp
bmUgRGF0YSI7CiBsb2NhbGl6ZWRTdHJpbmdzWyJSZWZlcmVuY2UgSXNzdWUiXSA9ICJSZWZlcmVu
Y2UgSXNzdWUiOwogbG9jYWxpemVkU3RyaW5nc1siUmVmbGVjdGlvbiJdID0gIlJlZmxlY3Rpb24i
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
VGFiQmFyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvVGFi
QmFyLmpzCmluZGV4IGE0OWFmOTYuLmQ2MjZjZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1RhYkJhci5qcworKysgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UYWJCYXIuanMKQEAgLTQ5LDEzICs0OSwxMiBA
QCBXZWJJbnNwZWN0b3IuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV2ViSW5zcGVjdG9y
LlZpZXcKICAgICAgICAgdGhpcy5fbmV3VGFiVGFiQmFySXRlbSA9IG5ldyBXZWJJbnNwZWN0b3Iu
UGlubmVkVGFiQmFySXRlbSgiSW1hZ2VzL05ld1RhYlBsdXMuc3ZnIiwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJDcmVhdGUgYSBuZXcgdGFiIikpOwogICAgICAgICB0aGlzLl9uZXdUYWJUYWJCYXJJ
dGVtLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIHRoaXMuX2hhbmRsZU5l
d1RhYk1vdXNlRW50ZXIuYmluZCh0aGlzKSk7CiAgICAgICAgIHRoaXMuX25ld1RhYlRhYkJhckl0
ZW0uZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2hhbmRsZU5ld1RhYkNs
aWNrLmJpbmQodGhpcykpOworICAgICAgICB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtLmVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCB0aGlzLl9oYW5kbGVOZXdUYWJDb250ZXh0
TWVudS5iaW5kKHRoaXMpKTsKICAgICAgICAgdGhpcy5hZGRUYWJCYXJJdGVtKHRoaXMuX25ld1Rh
YlRhYkJhckl0ZW0sIHRydWUpOwogICAgIH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgZ2V0IG5l
d1RhYlRhYkJhckl0ZW0oKSB7IHJldHVybiB0aGlzLl9uZXdUYWJUYWJCYXJJdGVtOyB9Ci0KICAg
ICB1cGRhdGVOZXdUYWJUYWJCYXJJdGVtU3RhdGUoKQogICAgIHsKICAgICAgICAgbGV0IG5ld1Rh
YkV4aXN0cyA9ICFXZWJJbnNwZWN0b3IuaXNOZXdUYWJXaXRoVHlwZUFsbG93ZWQoV2ViSW5zcGVj
dG9yLk5ld1RhYkNvbnRlbnRWaWV3LlR5cGUpOwpAQCAtNzMwLDYgKzcyOSwxMyBAQCBXZWJJbnNw
ZWN0b3IuVGFiQmFyID0gY2xhc3MgVGFiQmFyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLlZpZXcKICAg
ICAgICAgV2ViSW5zcGVjdG9yLnNob3dOZXdUYWJUYWIoc2hvdWxkQW5pbWF0ZSk7CiAgICAgfQog
CisgICAgX2hhbmRsZU5ld1RhYkNvbnRleHRNZW51KGV2ZW50KQorICAgIHsKKyAgICAgICAgbGV0
IGNvbnRleHRNZW51ID0gV2ViSW5zcGVjdG9yLkNvbnRleHRNZW51LmNyZWF0ZUZyb21FdmVudChl
dmVudCk7CisKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVj
dG9yLlRhYkJhci5FdmVudC5OZXdUYWJDb250ZXh0TWVudSwge2NvbnRleHRNZW51fSk7CisgICAg
fQorCiAgICAgX2hhbmRsZU5ld1RhYk1vdXNlRW50ZXIoZXZlbnQpCiAgICAgewogICAgICAgICBp
ZiAoIXRoaXMuX3RhYkFuaW1hdGVkQ2xvc2VkU2luY2VNb3VzZUVudGVyIHx8ICF0aGlzLmVsZW1l
bnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJzdGF0aWMtbGF5b3V0IikgfHwgdGhpcy5lbGVtZW50LmNs
YXNzTGlzdC5jb250YWlucygiYW5pbWF0aW5nIikpCkBAIC03NDQsNSArNzUwLDYgQEAgV2ViSW5z
cGVjdG9yLlRhYkJhci5FdmVudCA9IHsKICAgICBUYWJCYXJJdGVtQWRkZWQ6ICJ0YWItYmFyLXRh
Yi1iYXItaXRlbS1hZGRlZCIsCiAgICAgVGFiQmFySXRlbVJlbW92ZWQ6ICJ0YWItYmFyLXRhYi1i
YXItaXRlbS1yZW1vdmVkIiwKICAgICBUYWJCYXJJdGVtc1Jlb3JkZXJlZDogInRhYi1iYXItdGFi
LWJhci1pdGVtcy1yZW9yZGVyZWQiLAorICAgIE5ld1RhYkNvbnRleHRNZW51OiAidGFiLWJhci1u
ZXctdGFiLWNvbnRleHRtZW51IiwKICAgICBPcGVuRGVmYXVsdFRhYjogInRhYi1iYXItb3Blbi1k
ZWZhdWx0LXRhYiIKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9UYWJCcm93c2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvVGFiQnJvd3Nlci5qcwppbmRleCBhYTM5NzBkLi43NDUwNzM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UYWJCcm93
c2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Rh
YkJyb3dzZXIuanMKQEAgLTcyLDkgKzcyLDEyIEBAIFdlYkluc3BlY3Rvci5UYWJCcm93c2VyID0g
Y2xhc3MgVGFiQnJvd3NlciBleHRlbmRzIFdlYkluc3BlY3Rvci5WaWV3CiAgICAgICAgIHRoaXMu
X3Nob3dQcmV2aW91c1RhYktleWJvYXJkU2hvcnRjdXQzLmltcGxpY2l0bHlQcmV2ZW50c0RlZmF1
bHQgPSBmYWxzZTsKIAogICAgICAgICB0aGlzLl90YWJCYXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuVGFiQmFyLkV2ZW50LlRhYkJhckl0ZW1TZWxlY3RlZCwgdGhpcy5fdGFiQmFySXRl
bVNlbGVjdGVkLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fdGFiQmFyLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLlRhYkJhci5FdmVudC5UYWJCYXJJdGVtQWRkZWQsIHRoaXMuX3RhYkJhckl0
ZW1BZGRlZCwgdGhpcyk7CiAgICAgICAgIHRoaXMuX3RhYkJhci5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5UYWJCYXIuRXZlbnQuVGFiQmFySXRlbVJlbW92ZWQsIHRoaXMuX3RhYkJhckl0
ZW1SZW1vdmVkLCB0aGlzKTsKKyAgICAgICAgdGhpcy5fdGFiQmFyLmFkZEV2ZW50TGlzdGVuZXIo
V2ViSW5zcGVjdG9yLlRhYkJhci5FdmVudC5OZXdUYWJDb250ZXh0TWVudSwgdGhpcy5faGFuZGxl
TmV3VGFiQ29udGV4dE1lbnUsIHRoaXMpOwogCiAgICAgICAgIHRoaXMuX3JlY2VudFRhYkNvbnRl
bnRWaWV3cyA9IFtdOworICAgICAgICB0aGlzLl9jbG9zZWRUYWJDbGFzc2VzID0gbmV3IFNldDsK
ICAgICB9CiAKICAgICAvLyBQdWJsaWMKQEAgLTI0Niw2ICsyNDksMTcgQEAgV2ViSW5zcGVjdG9y
LlRhYkJyb3dzZXIgPSBjbGFzcyBUYWJCcm93c2VyIGV4dGVuZHMgV2ViSW5zcGVjdG9yLlZpZXcK
ICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLlRhYkJy
b3dzZXIuRXZlbnQuU2VsZWN0ZWRUYWJDb250ZW50Vmlld0RpZENoYW5nZSk7CiAgICAgfQogCisg
ICAgX3RhYkJhckl0ZW1BZGRlZChldmVudCkKKyAgICB7CisgICAgICAgIGxldCB0YWJDb250ZW50
VmlldyA9IGV2ZW50LmRhdGEudGFiQmFySXRlbS5yZXByZXNlbnRlZE9iamVjdDsKKworICAgICAg
ICBjb25zb2xlLmFzc2VydCh0YWJDb250ZW50Vmlldyk7CisgICAgICAgIGlmICghdGFiQ29udGVu
dFZpZXcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fY2xvc2VkVGFiQ2xh
c3Nlcy5kZWxldGUodGFiQ29udGVudFZpZXcuY29uc3RydWN0b3IpOworICAgIH0KKwogICAgIF90
YWJCYXJJdGVtUmVtb3ZlZChldmVudCkKICAgICB7CiAgICAgICAgIGxldCB0YWJDb250ZW50Vmll
dyA9IGV2ZW50LmRhdGEudGFiQmFySXRlbS5yZXByZXNlbnRlZE9iamVjdDsKQEAgLTI1NSw2ICsy
NjksMTAgQEAgV2ViSW5zcGVjdG9yLlRhYkJyb3dzZXIgPSBjbGFzcyBUYWJCcm93c2VyIGV4dGVu
ZHMgV2ViSW5zcGVjdG9yLlZpZXcKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB0aGlz
Ll9yZWNlbnRUYWJDb250ZW50Vmlld3MucmVtb3ZlKHRhYkNvbnRlbnRWaWV3KTsKKworICAgICAg
ICBpZiAoIXRhYkNvbnRlbnRWaWV3LmNvbnN0cnVjdG9yLmlzRXBoZW1lcmFsKCkpCisgICAgICAg
ICAgICB0aGlzLl9jbG9zZWRUYWJDbGFzc2VzLmFkZCh0YWJDb250ZW50Vmlldy5jb25zdHJ1Y3Rv
cik7CisKICAgICAgICAgdGhpcy5fY29udGVudFZpZXdDb250YWluZXIuY2xvc2VDb250ZW50Vmll
dyh0YWJDb250ZW50Vmlldyk7CiAKICAgICAgICAgdGFiQ29udGVudFZpZXcucGFyZW50VGFiQnJv
d3NlciA9IG51bGw7CkBAIC0yNjMsNiArMjgxLDM1IEBAIFdlYkluc3BlY3Rvci5UYWJCcm93c2Vy
ID0gY2xhc3MgVGFiQnJvd3NlciBleHRlbmRzIFdlYkluc3BlY3Rvci5WaWV3CiAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCF0aGlzLnNlbGVjdGVkVGFiQ29udGVudFZpZXcgfHwgdGhpcy5zZWxlY3Rl
ZFRhYkNvbnRlbnRWaWV3ID09PSB0aGlzLl9yZWNlbnRUYWJDb250ZW50Vmlld3NbMF0pOwogICAg
IH0KIAorICAgIF9oYW5kbGVOZXdUYWJDb250ZXh0TWVudShldmVudCkKKyAgICB7CisgICAgICAg
IC8vIFRoZSBhcnJheSBtdXN0IGJlIHJldmVyc2VkIGJlY2F1c2UgU2V0cyBpbnNlcnQgaW50byB0
aGUgZW5kLCBhbmQgd2Ugd2FudCB0byBkaXNwbGF5IHRoZQorICAgICAgICAvLyBtb3N0IHJlY2Vu
dGx5IGNsb3NlZCBpdGVtIGZpcnN0ICh3aGljaCBpcyB0aGUgbGFzdCBpdGVtIGFkZGVkIHRvIHRo
ZSBzZXQpLgorICAgICAgICBsZXQgY2xvc2VkVGFiQ2xhc3NlcyA9IEFycmF5LmZyb20odGhpcy5f
Y2xvc2VkVGFiQ2xhc3NlcykucmV2ZXJzZSgpOworICAgICAgICBsZXQgYWxsVGFiQ2xhc3NlcyA9
IEFycmF5LmZyb20oV2ViSW5zcGVjdG9yLmtub3duVGFiQ2xhc3NlcygpKTsKKyAgICAgICAgbGV0
IHRhYkNsYXNzZXNUb0Rpc3BsYXkgPSBjbG9zZWRUYWJDbGFzc2VzLmNvbmNhdChhbGxUYWJDbGFz
c2VzLmZpbHRlcigodGFiQ2xhc3MpID0+IHsKKyAgICAgICAgICAgIGlmIChjbG9zZWRUYWJDbGFz
c2VzLmluY2x1ZGVzKHRhYkNsYXNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgIGlmICh0YWJDbGFzcy5pc0VwaGVtZXJhbCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5pc05ld1Rh
YldpdGhUeXBlQWxsb3dlZCh0YWJDbGFzcy5UeXBlKTsKKyAgICAgICAgfSkpOworICAgICAgICBp
ZiAoIXRhYkNsYXNzZXNUb0Rpc3BsYXkubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGxldCBjb250ZXh0TWVudSA9IGV2ZW50LmRhdGEuY29udGV4dE1lbnU7CisKKyAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlJlY2VudGx5
IENsb3NlZCBUYWJzIiksIG51bGwsIHRydWUpOworCisgICAgICAgIGZvciAobGV0IHRhYkNsYXNz
IG9mIHRhYkNsYXNzZXNUb0Rpc3BsYXkpIHsKKyAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0odGFiQ2xhc3MudGFiSW5mbygpLnRpdGxlLCAoKSA9PiB7CisgICAgICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLmNyZWF0ZU5ld1RhYldpdGhUeXBlKHRhYkNsYXNzLlR5cGUsIHtzaG91bGRT
aG93TmV3VGFiOiB0cnVlfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIF9zaWRlYmFyUGFuZWxTZWxlY3RlZChldmVudCkKICAgICB7CiAgICAgICAgIGlmICh0aGlz
Ll9pZ25vcmVTaWRlYmFyRXZlbnRzKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>