<?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>141867</bug_id>
          
          <creation_ts>2015-02-21 10:55:26 -0800</creation_ts>
          <short_desc>Crash loading local file with WebPageProxy::loadAlternateHTMLString</short_desc>
          <delta_ts>2015-02-24 09:11:49 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.gnome.org/show_bug.cgi?id=738213</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>adachan</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>sam</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1070978</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-02-21 10:55:26 -0800</bug_when>
    <thetext>WebPageProxy::loadAlternateHTMLString needs to assume read access to the &quot;unreachable file&quot; as well as the file it actually loads, because the unreachable file will get added to the back/forward list, causing us to crash. There is already a cross-platform test for this but in that test the unreachable file is the same as the file with the alternate HTML, so it didn&apos;t catch this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070979</commentid>
    <comment_count>1</comment_count>
      <attachid>247050</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-02-21 11:28:39 -0800</bug_when>
    <thetext>Created attachment 247050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070981</commentid>
    <comment_count>2</comment_count>
      <attachid>247050</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-02-21 11:31:49 -0800</bug_when>
    <thetext>Comment on attachment 247050
Patch

&gt;Subversion Revision: 180216
&gt;diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
&gt;index 7eeba7a1a7bb215fb21f51bd74f15142a1a58cef..88ac00dbbed670c4a7b16fbfa5fa353f13ab1e7e 100644
&gt;--- a/Source/WebKit2/ChangeLog
&gt;+++ b/Source/WebKit2/ChangeLog
&gt;@@ -1,3 +1,17 @@
&gt;+2015-02-21  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
&gt;+
&gt;+        Crash loading local file with WebPageProxy::loadAlternateHTMLString
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=141867
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        WebPageProxy::loadAlternateHTMLString needs to assume read access to unreachableURL as well
&gt;+        as baseURL, because unreachableURL will get added to the back/forward list, causing us to
&gt;+        crash later on when we notice the unexpected URL received in checkURLReceivedFromWebProcess.
&gt;+
&gt;+        * UIProcess/WebPageProxy.cpp:
&gt;+        (WebKit::WebPageProxy::loadAlternateHTMLString):
&gt;+
&gt; 2015-02-16  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
&gt; 
&gt;         [GTK] WebKitFrame objects are never released
&gt;diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
&gt;index 07dad60edf2d83fd7ccd5cc2a903f2dbc19f152a..25f124f1e8c39c33c7391f53e7b21df9b175172a 100644
&gt;--- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
&gt;+++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
&gt;@@ -922,6 +922,7 @@ void WebPageProxy::loadAlternateHTMLString(const String&amp; htmlString, const Strin
&gt;         m_mainFrame-&gt;setUnreachableURL(unreachableURL);
&gt; 
&gt;     m_process-&gt;assumeReadAccessToBaseURL(baseURL);
&gt;+    m_process-&gt;assumeReadAccessToBaseURL(unreachableURL);
&gt;     m_process-&gt;send(Messages::WebPage::LoadAlternateHTMLString(htmlString, baseURL, unreachableURL, UserData(process().transformObjectsToHandles(userData).get())), m_pageID);
&gt;     m_process-&gt;responsivenessTimer()-&gt;start();
&gt; }
&gt;diff --git a/Tools/ChangeLog b/Tools/ChangeLog
&gt;index d4cc5b036f1634021a0b9f2cdec93d85844f94e3..1cb0e842903d04d954e67e9cfc0947c510eff7d4 100644
&gt;--- a/Tools/ChangeLog
&gt;+++ b/Tools/ChangeLog
&gt;@@ -1,3 +1,18 @@
&gt;+2015-02-21  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
&gt;+
&gt;+        Crash loading local file with WebPageProxy::loadAlternateHTMLString
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=141867
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        * TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:
&gt;+        (TestWebKitAPI::loadAlternateHTMLString): Split most of this test into a function so it can
&gt;+        be shared with the new test.
&gt;+        (TestWebKitAPI::TEST): Add a cross-platform test for this crash.
&gt;+        * TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp: Add a GTK+ test for this crash.
&gt;+        (testLoadAlternateHTMLForLocalPage):
&gt;+        (beforeAll):
&gt;+
&gt; 2015-02-17  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
&gt; 
&gt;         Unreviewed. Fix /webkit2/WebKitDOMNode/dom-cache after r180214.
&gt;diff --git a/Tools/TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp b/Tools/TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp
&gt;index 73721dad06351a9b81166b581fedf9937099ad4e..668307a9a29bb84bb4cfa7b499bc79396e0fca5b 100644
&gt;--- a/Tools/TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp
&gt;+++ b/Tools/TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp
&gt;@@ -1,5 +1,6 @@
&gt; /*
&gt;  * Copyright (C) 2011 Apple Inc. All rights reserved.
&gt;+ * Copyright (C) 2015 Igalia S.L.
&gt;  *
&gt;  * Redistribution and use in source and binary forms, with or without
&gt;  * modification, are permitted provided that the following conditions
&gt;@@ -44,7 +45,7 @@ static void didFinishLoadForFrame(WKPageRef page, WKFrameRef frame, WKTypeRef us
&gt;     didFinishLoad = true;
&gt; }
&gt; 
&gt;-TEST(WebKit2, LoadAlternateHTMLStringWithNonDirectoryURL)
&gt;+static void loadAlternateHTMLString(WKURLRef baseURL, WKURLRef unreachableURL)
&gt; {
&gt;     WKRetainPtr&lt;WKContextRef&gt; context(AdoptWK, WKContextCreate());
&gt;     PlatformWebView webView(context.get());
&gt;@@ -56,16 +57,29 @@ TEST(WebKit2, LoadAlternateHTMLStringWithNonDirectoryURL)
&gt;     loaderClient.didFinishLoadForFrame = didFinishLoadForFrame;
&gt;     WKPageSetPageLoaderClient(webView.page(), &amp;loaderClient.base);
&gt; 
&gt;-    WKRetainPtr&lt;WKURLRef&gt; fileURL(AdoptWK, Util::createURLForResource(&quot;simple&quot;, &quot;html&quot;));
&gt;     WKRetainPtr&lt;WKStringRef&gt; alternateHTMLString(AdoptWK, WKStringCreateWithUTF8CString(&quot;&lt;html&gt;&lt;body&gt;&lt;img src=&apos;icon.png&apos;&gt;&lt;/body&gt;&lt;/html&gt;&quot;));
&gt;-    
&gt;-    // Call WKPageLoadAlternateHTMLString() with fileURL which does not point to a directory
&gt;-    WKPageLoadAlternateHTMLString(webView.page(), alternateHTMLString.get(), fileURL.get(), fileURL.get());
&gt;-    
&gt;+    WKPageLoadAlternateHTMLString(webView.page(), alternateHTMLString.get(), baseURL, unreachableURL);
&gt;+
&gt;     // If we can finish loading the html without resulting in an invalid message being sent from the WebProcess, this test passes.
&gt;     Util::run(&amp;didFinishLoad);
&gt; }
&gt; 
&gt;+TEST(WebKit2, LoadAlternateHTMLStringWithNonDirectoryURL)
&gt;+{
&gt;+    // Call WKPageLoadAlternateHTMLString() with fileURL which does not point to a directory.
&gt;+    WKRetainPtr&lt;WKURLRef&gt; fileURL(AdoptWK, Util::createURLForResource(&quot;simple&quot;, &quot;html&quot;));
&gt;+    loadAlternateHTMLString(fileURL.get(), fileURL.get());
&gt;+}
&gt;+
&gt;+TEST(WebKit2, LoadAlternateHTMLStringWithEmptyBaseURL)
&gt;+{
&gt;+    // Call WKPageLoadAlternateHTMLString() with empty baseURL to make sure this test works
&gt;+    // when baseURL does not grant read access to the unreachableURL. We use a separate test
&gt;+    // to ensure the previous test does not pollute the result.
&gt;+    WKRetainPtr&lt;WKURLRef&gt; unreachableURL(AdoptWK, Util::URLForNonExistentResource());
&gt;+    loadAlternateHTMLString(nullptr, unreachableURL.get());
&gt;+}
&gt;+
&gt; } // namespace TestWebKitAPI
&gt; 
&gt; #endif
&gt;diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp
&gt;index e1856c7d43c17b9bad254ccfafd34ba57c623bc6..416fc95bfaf4d562832dd57f28ebd39ce965214e 100644
&gt;--- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp
&gt;+++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestLoaderClient.cpp
&gt;@@ -82,6 +82,13 @@ static void testLoadAlternateHTML(LoadTrackingTest* test, gconstpointer)
&gt;     assertNormalLoadHappened(test-&gt;m_loadEvents);
&gt; }
&gt; 
&gt;+static void testLoadAlternateHTMLForLocalPage(LoadTrackingTest* test, gconstpointer)
&gt;+{
&gt;+    test-&gt;loadAlternateHTML(&quot;&lt;html&gt;&lt;body&gt;Alternate page&lt;/body&gt;&lt;/html&gt;&quot;, &quot;file:///not/actually/loaded.html&quot;, 0);
&gt;+    test-&gt;waitUntilLoadFinished();
&gt;+    assertNormalLoadHappened(test-&gt;m_loadEvents);
&gt;+}
&gt;+
&gt; static void testLoadPlainText(LoadTrackingTest* test, gconstpointer)
&gt; {
&gt;     test-&gt;loadPlainText(&quot;Hello WebKit-GTK+&quot;);
&gt;@@ -477,6 +484,7 @@ void beforeAll()
&gt;     LoadTrackingTest::add(&quot;WebKitWebView&quot;, &quot;loading-error&quot;, testLoadingError);
&gt;     LoadTrackingTest::add(&quot;WebKitWebView&quot;, &quot;load-html&quot;, testLoadHtml);
&gt;     LoadTrackingTest::add(&quot;WebKitWebView&quot;, &quot;load-alternate-html&quot;, testLoadAlternateHTML);
&gt;+    LoadTrackingTest::add(&quot;WebKitWebView&quot;, &quot;load-alternate-html-for-local-page&quot;, testLoadAlternateHTMLForLocalPage);
&gt;     LoadTrackingTest::add(&quot;WebKitWebView&quot;, &quot;load-plain-text&quot;, testLoadPlainText);
&gt;     LoadTrackingTest::add(&quot;WebKitWebView&quot;, &quot;load-bytes&quot;, testLoadBytes);
&gt;     LoadTrackingTest::add(&quot;WebKitWebView&quot;, &quot;load-request&quot;, testLoadRequest);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070982</commentid>
    <comment_count>3</comment_count>
      <attachid>247052</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-02-21 11:35:40 -0800</bug_when>
    <thetext>Created attachment 247052
patch

So the &quot;Edit Attachment As Comment&quot; button doesn&apos;t edit the attachment, but it does leave a comment. OK....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071151</commentid>
    <comment_count>4</comment_count>
      <attachid>247052</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-02-23 00:11:09 -0800</bug_when>
    <thetext>Comment on attachment 247052
patch

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

&gt; Source/WebKit2/ChangeLog:10
&gt; +        WebPageProxy::loadAlternateHTMLString needs to assume read access to unreachableURL as well
&gt; +        as baseURL, because unreachableURL will get added to the back/forward list, causing us to
&gt; +        crash later on when we notice the unexpected URL received in checkURLReceivedFromWebProcess.

What is the case for loadAlternateHTMLString being used without trying to load unreachableURL first? To know that it is unreachable, we need to try loading it first, which will assume the read access.

&gt; Tools/TestWebKitAPI/Tests/WebKit2/LoadAlternateHTMLStringWithNonDirectoryURL.cpp:77
&gt; +    // when baseURL does not grant read access to the unreachableURL. We use a seperate test

Typo, should be &quot;separate&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071198</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-02-23 08:15:50 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; What is the case for loadAlternateHTMLString being used without trying to
&gt; load unreachableURL first? To know that it is unreachable, we need to try
&gt; loading it first, which will assume the read access.

In the GTK+ wrapper API we call this parameter &quot;content_uri&quot; rather than &quot;unreachableURI&quot; since the functionality is useful for more than just network error pages. In Epiphany we use it to load a blank HTML page in each web view when the browser starts, with the content_uri set to the page that will be loaded when the tab is switched to.

It&apos;s easy to fix this in the GTK+ wrapper function instead, if you prefer; I just figured you might prefer it changed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071216</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-02-23 09:18:31 -0800</bug_when>
    <thetext>I&apos;ll defer to Sam and Anders - I don&apos;t fully understand the unreachableURL logic, and can&apos;t tell if that&apos;s the right way to do it. The patch seems safe though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071261</commentid>
    <comment_count>7</comment_count>
      <attachid>247130</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-02-23 11:25:27 -0800</bug_when>
    <thetext>Created attachment 247130
Fixed the typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071682</commentid>
    <comment_count>8</comment_count>
      <attachid>247130</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-24 09:11:44 -0800</bug_when>
    <thetext>Comment on attachment 247130
Fixed the typo

Clearing flags on attachment: 247130

Committed r180565: &lt;http://trac.webkit.org/changeset/180565&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071683</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-24 09:11:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247050</attachid>
            <date>2015-02-21 11:28:39 -0800</date>
            <delta_ts>2015-02-21 11:35:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141867-20150221132829.patch</filename>
            <type>text/plain</type>
            <size>7261</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggN2VlYmE3YTFhN2JiMjE1
ZmIyMWY1MWJkNzRmMTUxNDJhMWE1OGNlZi4uODhhYzAwZGJiZWQ2NzBjNGE3YjE2ZmJmYTVmYTM1
M2YxM2FiMWU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE1LTAyLTIxICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBDcmFzaCBs
b2FkaW5nIGxvY2FsIGZpbGUgd2l0aCBXZWJQYWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3Ry
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJQ
YWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nIG5lZWRzIHRvIGFzc3VtZSByZWFkIGFj
Y2VzcyB0byB1bnJlYWNoYWJsZVVSTCBhcyB3ZWxsCisgICAgICAgIGFzIGJhc2VVUkwsIGJlY2F1
c2UgdW5yZWFjaGFibGVVUkwgd2lsbCBnZXQgYWRkZWQgdG8gdGhlIGJhY2svZm9yd2FyZCBsaXN0
LCBjYXVzaW5nIHVzIHRvCisgICAgICAgIGNyYXNoIGxhdGVyIG9uIHdoZW4gd2Ugbm90aWNlIHRo
ZSB1bmV4cGVjdGVkIFVSTCByZWNlaXZlZCBpbiBjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nl
c3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyk6CisKIDIwMTUtMDIt
MTYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdIFdlYktpdEZyYW1lIG9iamVjdHMgYXJlIG5ldmVyIHJlbGVhc2VkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDA3ZGFkNjBlZGYyZDgzZmQ3Y2Nk
NWNjMmE5MDNmMmRiYzE5ZjE1MmEuLjI1ZjEyNGYxZThjMzljMzNjNzM5MWY1M2U3YjIxZGY5YjE3
NTE3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05
MjIsNiArOTIyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5n
KGNvbnN0IFN0cmluZyYgaHRtbFN0cmluZywgY29uc3QgU3RyaW4KICAgICAgICAgbV9tYWluRnJh
bWUtPnNldFVucmVhY2hhYmxlVVJMKHVucmVhY2hhYmxlVVJMKTsKIAogICAgIG1fcHJvY2Vzcy0+
YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTChiYXNlVVJMKTsKKyAgICBtX3Byb2Nlc3MtPmFzc3Vt
ZVJlYWRBY2Nlc3NUb0Jhc2VVUkwodW5yZWFjaGFibGVVUkwpOwogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoaHRtbFN0cmluZywg
YmFzZVVSTCwgdW5yZWFjaGFibGVVUkwsIFVzZXJEYXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmpl
Y3RzVG9IYW5kbGVzKHVzZXJEYXRhKS5nZXQoKSkpLCBtX3BhZ2VJRCk7CiAgICAgbV9wcm9jZXNz
LT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0YXJ0KCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDRjYzViMDM2ZjE2MzQwMjFhMGI5ZjJj
ZGVjOTNkODU4NDRmOTRlMy4uMWNiMGU4NDI5MDNkMDRkOTU0ZTY3ZTljZmMwOTQ3YzUxMGVmZjdk
NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDE1LTAyLTIxICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9A
aWdhbGlhLmNvbT4KKworICAgICAgICBDcmFzaCBsb2FkaW5nIGxvY2FsIGZpbGUgd2l0aCBXZWJQ
YWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9M
b2FkQWx0ZXJuYXRlSFRNTFN0cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6bG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcpOiBTcGxpdCBtb3N0IG9mIHRo
aXMgdGVzdCBpbnRvIGEgZnVuY3Rpb24gc28gaXQgY2FuCisgICAgICAgIGJlIHNoYXJlZCB3aXRo
IHRoZSBuZXcgdGVzdC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBBZGQgYSBjcm9z
cy1wbGF0Zm9ybSB0ZXN0IGZvciB0aGlzIGNyYXNoLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcDogQWRkIGEgR1RLKyB0ZXN0IGZv
ciB0aGlzIGNyYXNoLgorICAgICAgICAodGVzdExvYWRBbHRlcm5hdGVIVE1MRm9yTG9jYWxQYWdl
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisKIDIwMTUtMDItMTcgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCAvd2Vi
a2l0Mi9XZWJLaXRET01Ob2RlL2RvbS1jYWNoZSBhZnRlciByMTgwMjE0LgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0xvYWRBbHRlcm5hdGVIVE1MU3RyaW5n
V2l0aE5vbkRpcmVjdG9yeVVSTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJMLmNwcAppbmRleCA3
MzcyMWRhZDA2MzUxYTliODExNjZiNTgxZmVkZjk5MzcwOTlhZDRlLi42NjgzMDdhOWEyOWJiODRi
YjRjZmE3YjQ5OWJjNzkzOTZlMGZjYTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJM
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvTG9hZEFsdGVybmF0
ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJMLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ0LDcgKzQ1LDcgQEAgc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1l
KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXMKICAgICBkaWRG
aW5pc2hMb2FkID0gdHJ1ZTsKIH0KIAotVEVTVChXZWJLaXQyLCBMb2FkQWx0ZXJuYXRlSFRNTFN0
cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwpCitzdGF0aWMgdm9pZCBsb2FkQWx0ZXJuYXRlSFRNTFN0
cmluZyhXS1VSTFJlZiBiYXNlVVJMLCBXS1VSTFJlZiB1bnJlYWNoYWJsZVVSTCkKIHsKICAgICBX
S1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRXSywgV0tDb250ZXh0Q3JlYXRl
KCkpOwogICAgIFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOwpAQCAtNTYs
MTYgKzU3LDI5IEBAIFRFU1QoV2ViS2l0MiwgTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9u
RGlyZWN0b3J5VVJMKQogICAgIGxvYWRlckNsaWVudC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBk
aWRGaW5pc2hMb2FkRm9yRnJhbWU7CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCh3ZWJW
aWV3LnBhZ2UoKSwgJmxvYWRlckNsaWVudC5iYXNlKTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiBmaWxlVVJMKEFkb3B0V0ssIFV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJzaW1wbGUi
LCAiaHRtbCIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0ZXJuYXRlSFRNTFN0
cmluZyhBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiPGh0bWw+PGJvZHk+
PGltZyBzcmM9J2ljb24ucG5nJz48L2JvZHk+PC9odG1sPiIpKTsKLSAgICAKLSAgICAvLyBDYWxs
IFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKCkgd2l0aCBmaWxlVVJMIHdoaWNoIGRvZXMg
bm90IHBvaW50IHRvIGEgZGlyZWN0b3J5Ci0gICAgV0tQYWdlTG9hZEFsdGVybmF0ZUhUTUxTdHJp
bmcod2ViVmlldy5wYWdlKCksIGFsdGVybmF0ZUhUTUxTdHJpbmcuZ2V0KCksIGZpbGVVUkwuZ2V0
KCksIGZpbGVVUkwuZ2V0KCkpOwotICAgIAorICAgIFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1MU3Ry
aW5nKHdlYlZpZXcucGFnZSgpLCBhbHRlcm5hdGVIVE1MU3RyaW5nLmdldCgpLCBiYXNlVVJMLCB1
bnJlYWNoYWJsZVVSTCk7CisKICAgICAvLyBJZiB3ZSBjYW4gZmluaXNoIGxvYWRpbmcgdGhlIGh0
bWwgd2l0aG91dCByZXN1bHRpbmcgaW4gYW4gaW52YWxpZCBtZXNzYWdlIGJlaW5nIHNlbnQgZnJv
bSB0aGUgV2ViUHJvY2VzcywgdGhpcyB0ZXN0IHBhc3Nlcy4KICAgICBVdGlsOjpydW4oJmRpZEZp
bmlzaExvYWQpOwogfQogCitURVNUKFdlYktpdDIsIExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nV2l0
aE5vbkRpcmVjdG9yeVVSTCkKK3sKKyAgICAvLyBDYWxsIFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1M
U3RyaW5nKCkgd2l0aCBmaWxlVVJMIHdoaWNoIGRvZXMgbm90IHBvaW50IHRvIGEgZGlyZWN0b3J5
LgorICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBmaWxlVVJMKEFkb3B0V0ssIFV0aWw6OmNyZWF0
ZVVSTEZvclJlc291cmNlKCJzaW1wbGUiLCAiaHRtbCIpKTsKKyAgICBsb2FkQWx0ZXJuYXRlSFRN
TFN0cmluZyhmaWxlVVJMLmdldCgpLCBmaWxlVVJMLmdldCgpKTsKK30KKworVEVTVChXZWJLaXQy
LCBMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZ1dpdGhFbXB0eUJhc2VVUkwpCit7CisgICAgLy8gQ2Fs
bCBXS1BhZ2VMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZygpIHdpdGggZW1wdHkgYmFzZVVSTCB0byBt
YWtlIHN1cmUgdGhpcyB0ZXN0IHdvcmtzCisgICAgLy8gd2hlbiBiYXNlVVJMIGRvZXMgbm90IGdy
YW50IHJlYWQgYWNjZXNzIHRvIHRoZSB1bnJlYWNoYWJsZVVSTC4gV2UgdXNlIGEgVVJMIHRoYXQg
ZG9lcworICAgIC8vIG5vdCBleGlzdCBmb3IgdGhlIHVucmVhY2hhYmxlVVJMIHRvIGVuc3VyZSB0
aGUgcHJldmlvdXMgdGVzdCBkb2VzIG5vdCBwb2xsdXRlIHRoZSByZXN1bHQuCisgICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IHVucmVhY2hhYmxlVVJMKEFkb3B0V0ssIFV0aWw6OlVSTEZvck5vbkV4
aXN0ZW50UmVzb3VyY2UoKSk7CisgICAgbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcobnVsbHB0ciwg
dW5yZWFjaGFibGVVUkwuZ2V0KCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwCmluZGV4IGUxODU2YzdkNDNjMTdiOWJhZDI1NGNj
ZmFmZDM0YmE1N2M2MjNiYzYuLjQxNmZjOTViZmFmNGQ1NjI4MzJkZDU3ZjI4ZWJkMzljZTk2NTIx
NGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0
TG9hZGVyQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvVGVzdExvYWRlckNsaWVudC5jcHAKQEAgLTgyLDYgKzgyLDEzIEBAIHN0YXRpYyB2b2lkIHRl
c3RMb2FkQWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOwogfQog
CitzdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0ZUhUTUxGb3JMb2NhbFBhZ2UoTG9hZFRyYWNr
aW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkQWx0ZXJuYXRl
SFRNTCgiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIHBhZ2U8L2JvZHk+PC9odG1sPiIsICJmaWxlOi8v
L25vdC9hY3R1YWxseS9sb2FkZWQuaHRtbCIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVu
dHMpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0TG9hZFBsYWluVGV4dChMb2FkVHJhY2tpbmdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHRlc3QtPmxvYWRQbGFpblRleHQoIkhlbGxv
IFdlYktpdC1HVEsrIik7CkBAIC00NzcsNiArNDg0LDcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAg
IExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkaW5nLWVycm9yIiwg
dGVzdExvYWRpbmdFcnJvcik7CiAgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImxvYWQtaHRtbCIsIHRlc3RMb2FkSHRtbCk7CiAgICAgTG9hZFRyYWNraW5nVGVzdDo6
YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtYWx0ZXJuYXRlLWh0bWwiLCB0ZXN0TG9hZEFsdGVy
bmF0ZUhUTUwpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJs
b2FkLWFsdGVybmF0ZS1odG1sLWZvci1sb2NhbC1wYWdlIiwgdGVzdExvYWRBbHRlcm5hdGVIVE1M
Rm9yTG9jYWxQYWdlKTsKICAgICBMb2FkVHJhY2tpbmdUZXN0OjphZGQoIldlYktpdFdlYlZpZXci
LCAibG9hZC1wbGFpbi10ZXh0IiwgdGVzdExvYWRQbGFpblRleHQpOwogICAgIExvYWRUcmFja2lu
Z1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWJ5dGVzIiwgdGVzdExvYWRCeXRlcyk7
CiAgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtcmVxdWVz
dCIsIHRlc3RMb2FkUmVxdWVzdCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247052</attachid>
            <date>2015-02-21 11:35:40 -0800</date>
            <delta_ts>2015-02-23 11:25:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7228</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggN2VlYmE3YTFhN2JiMjE1
ZmIyMWY1MWJkNzRmMTUxNDJhMWE1OGNlZi4uODhhYzAwZGJiZWQ2NzBjNGE3YjE2ZmJmYTVmYTM1
M2YxM2FiMWU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE1LTAyLTIxICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBDcmFzaCBs
b2FkaW5nIGxvY2FsIGZpbGUgd2l0aCBXZWJQYWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3Ry
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJQ
YWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nIG5lZWRzIHRvIGFzc3VtZSByZWFkIGFj
Y2VzcyB0byB1bnJlYWNoYWJsZVVSTCBhcyB3ZWxsCisgICAgICAgIGFzIGJhc2VVUkwsIGJlY2F1
c2UgdW5yZWFjaGFibGVVUkwgd2lsbCBnZXQgYWRkZWQgdG8gdGhlIGJhY2svZm9yd2FyZCBsaXN0
LCBjYXVzaW5nIHVzIHRvCisgICAgICAgIGNyYXNoIGxhdGVyIG9uIHdoZW4gd2Ugbm90aWNlIHRo
ZSB1bmV4cGVjdGVkIFVSTCByZWNlaXZlZCBpbiBjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nl
c3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyk6CisKIDIwMTUtMDIt
MTYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdIFdlYktpdEZyYW1lIG9iamVjdHMgYXJlIG5ldmVyIHJlbGVhc2VkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDA3ZGFkNjBlZGYyZDgzZmQ3Y2Nk
NWNjMmE5MDNmMmRiYzE5ZjE1MmEuLjI1ZjEyNGYxZThjMzljMzNjNzM5MWY1M2U3YjIxZGY5YjE3
NTE3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05
MjIsNiArOTIyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5n
KGNvbnN0IFN0cmluZyYgaHRtbFN0cmluZywgY29uc3QgU3RyaW4KICAgICAgICAgbV9tYWluRnJh
bWUtPnNldFVucmVhY2hhYmxlVVJMKHVucmVhY2hhYmxlVVJMKTsKIAogICAgIG1fcHJvY2Vzcy0+
YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTChiYXNlVVJMKTsKKyAgICBtX3Byb2Nlc3MtPmFzc3Vt
ZVJlYWRBY2Nlc3NUb0Jhc2VVUkwodW5yZWFjaGFibGVVUkwpOwogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoaHRtbFN0cmluZywg
YmFzZVVSTCwgdW5yZWFjaGFibGVVUkwsIFVzZXJEYXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmpl
Y3RzVG9IYW5kbGVzKHVzZXJEYXRhKS5nZXQoKSkpLCBtX3BhZ2VJRCk7CiAgICAgbV9wcm9jZXNz
LT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0YXJ0KCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDRjYzViMDM2ZjE2MzQwMjFhMGI5ZjJj
ZGVjOTNkODU4NDRmOTRlMy4uMWNiMGU4NDI5MDNkMDRkOTU0ZTY3ZTljZmMwOTQ3YzUxMGVmZjdk
NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDE1LTAyLTIxICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9A
aWdhbGlhLmNvbT4KKworICAgICAgICBDcmFzaCBsb2FkaW5nIGxvY2FsIGZpbGUgd2l0aCBXZWJQ
YWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9M
b2FkQWx0ZXJuYXRlSFRNTFN0cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6bG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcpOiBTcGxpdCBtb3N0IG9mIHRo
aXMgdGVzdCBpbnRvIGEgZnVuY3Rpb24gc28gaXQgY2FuCisgICAgICAgIGJlIHNoYXJlZCB3aXRo
IHRoZSBuZXcgdGVzdC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBBZGQgYSBjcm9z
cy1wbGF0Zm9ybSB0ZXN0IGZvciB0aGlzIGNyYXNoLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcDogQWRkIGEgR1RLKyB0ZXN0IGZv
ciB0aGlzIGNyYXNoLgorICAgICAgICAodGVzdExvYWRBbHRlcm5hdGVIVE1MRm9yTG9jYWxQYWdl
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisKIDIwMTUtMDItMTcgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCAvd2Vi
a2l0Mi9XZWJLaXRET01Ob2RlL2RvbS1jYWNoZSBhZnRlciByMTgwMjE0LgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0xvYWRBbHRlcm5hdGVIVE1MU3RyaW5n
V2l0aE5vbkRpcmVjdG9yeVVSTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJMLmNwcAppbmRleCA3
MzcyMWRhZDA2MzUxYTliODExNjZiNTgxZmVkZjk5MzcwOTlhZDRlLi42NjgzMDdhOWEyOWJiODRi
YjRjZmE3YjQ5OWJjNzkzOTZlMGZjYTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJM
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvTG9hZEFsdGVybmF0
ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJMLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ0LDcgKzQ1LDcgQEAgc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1l
KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXMKICAgICBkaWRG
aW5pc2hMb2FkID0gdHJ1ZTsKIH0KIAotVEVTVChXZWJLaXQyLCBMb2FkQWx0ZXJuYXRlSFRNTFN0
cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwpCitzdGF0aWMgdm9pZCBsb2FkQWx0ZXJuYXRlSFRNTFN0
cmluZyhXS1VSTFJlZiBiYXNlVVJMLCBXS1VSTFJlZiB1bnJlYWNoYWJsZVVSTCkKIHsKICAgICBX
S1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRXSywgV0tDb250ZXh0Q3JlYXRl
KCkpOwogICAgIFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOwpAQCAtNTYs
MTYgKzU3LDI5IEBAIFRFU1QoV2ViS2l0MiwgTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9u
RGlyZWN0b3J5VVJMKQogICAgIGxvYWRlckNsaWVudC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBk
aWRGaW5pc2hMb2FkRm9yRnJhbWU7CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCh3ZWJW
aWV3LnBhZ2UoKSwgJmxvYWRlckNsaWVudC5iYXNlKTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiBmaWxlVVJMKEFkb3B0V0ssIFV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJzaW1wbGUi
LCAiaHRtbCIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0ZXJuYXRlSFRNTFN0
cmluZyhBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiPGh0bWw+PGJvZHk+
PGltZyBzcmM9J2ljb24ucG5nJz48L2JvZHk+PC9odG1sPiIpKTsKLSAgICAKLSAgICAvLyBDYWxs
IFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKCkgd2l0aCBmaWxlVVJMIHdoaWNoIGRvZXMg
bm90IHBvaW50IHRvIGEgZGlyZWN0b3J5Ci0gICAgV0tQYWdlTG9hZEFsdGVybmF0ZUhUTUxTdHJp
bmcod2ViVmlldy5wYWdlKCksIGFsdGVybmF0ZUhUTUxTdHJpbmcuZ2V0KCksIGZpbGVVUkwuZ2V0
KCksIGZpbGVVUkwuZ2V0KCkpOwotICAgIAorICAgIFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1MU3Ry
aW5nKHdlYlZpZXcucGFnZSgpLCBhbHRlcm5hdGVIVE1MU3RyaW5nLmdldCgpLCBiYXNlVVJMLCB1
bnJlYWNoYWJsZVVSTCk7CisKICAgICAvLyBJZiB3ZSBjYW4gZmluaXNoIGxvYWRpbmcgdGhlIGh0
bWwgd2l0aG91dCByZXN1bHRpbmcgaW4gYW4gaW52YWxpZCBtZXNzYWdlIGJlaW5nIHNlbnQgZnJv
bSB0aGUgV2ViUHJvY2VzcywgdGhpcyB0ZXN0IHBhc3Nlcy4KICAgICBVdGlsOjpydW4oJmRpZEZp
bmlzaExvYWQpOwogfQogCitURVNUKFdlYktpdDIsIExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nV2l0
aE5vbkRpcmVjdG9yeVVSTCkKK3sKKyAgICAvLyBDYWxsIFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1M
U3RyaW5nKCkgd2l0aCBmaWxlVVJMIHdoaWNoIGRvZXMgbm90IHBvaW50IHRvIGEgZGlyZWN0b3J5
LgorICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBmaWxlVVJMKEFkb3B0V0ssIFV0aWw6OmNyZWF0
ZVVSTEZvclJlc291cmNlKCJzaW1wbGUiLCAiaHRtbCIpKTsKKyAgICBsb2FkQWx0ZXJuYXRlSFRN
TFN0cmluZyhmaWxlVVJMLmdldCgpLCBmaWxlVVJMLmdldCgpKTsKK30KKworVEVTVChXZWJLaXQy
LCBMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZ1dpdGhFbXB0eUJhc2VVUkwpCit7CisgICAgLy8gQ2Fs
bCBXS1BhZ2VMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZygpIHdpdGggZW1wdHkgYmFzZVVSTCB0byBt
YWtlIHN1cmUgdGhpcyB0ZXN0IHdvcmtzCisgICAgLy8gd2hlbiBiYXNlVVJMIGRvZXMgbm90IGdy
YW50IHJlYWQgYWNjZXNzIHRvIHRoZSB1bnJlYWNoYWJsZVVSTC4gV2UgdXNlIGEgc2VwZXJhdGUg
dGVzdAorICAgIC8vIHRvIGVuc3VyZSB0aGUgcHJldmlvdXMgdGVzdCBkb2VzIG5vdCBwb2xsdXRl
IHRoZSByZXN1bHQuCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVucmVhY2hhYmxlVVJMKEFk
b3B0V0ssIFV0aWw6OlVSTEZvck5vbkV4aXN0ZW50UmVzb3VyY2UoKSk7CisgICAgbG9hZEFsdGVy
bmF0ZUhUTUxTdHJpbmcobnVsbHB0ciwgdW5yZWFjaGFibGVVUkwuZ2V0KCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwCmluZGV4
IGUxODU2YzdkNDNjMTdiOWJhZDI1NGNjZmFmZDM0YmE1N2M2MjNiYzYuLjQxNmZjOTViZmFmNGQ1
NjI4MzJkZDU3ZjI4ZWJkMzljZTk2NTIxNGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAKQEAgLTgyLDYg
KzgyLDEzIEBAIHN0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0
ZXN0LT5tX2xvYWRFdmVudHMpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0ZUhU
TUxGb3JMb2NhbFBhZ2UoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5sb2FkQWx0ZXJuYXRlSFRNTCgiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIHBhZ2U8
L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vL25vdC9hY3R1YWxseS9sb2FkZWQuaHRtbCIsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRI
YXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0TG9hZFBs
YWluVGV4dChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHRl
c3QtPmxvYWRQbGFpblRleHQoIkhlbGxvIFdlYktpdC1HVEsrIik7CkBAIC00NzcsNiArNDg0LDcg
QEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJsb2FkaW5nLWVycm9yIiwgdGVzdExvYWRpbmdFcnJvcik7CiAgICAgTG9hZFRyYWNr
aW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtaHRtbCIsIHRlc3RMb2FkSHRtbCk7
CiAgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtYWx0ZXJu
YXRlLWh0bWwiLCB0ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVybmF0ZS1odG1sLWZvci1sb2NhbC1wYWdl
IiwgdGVzdExvYWRBbHRlcm5hdGVIVE1MRm9yTG9jYWxQYWdlKTsKICAgICBMb2FkVHJhY2tpbmdU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1wbGFpbi10ZXh0IiwgdGVzdExvYWRQbGFp
blRleHQpOwogICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2Fk
LWJ5dGVzIiwgdGVzdExvYWRCeXRlcyk7CiAgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImxvYWQtcmVxdWVzdCIsIHRlc3RMb2FkUmVxdWVzdCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247130</attachid>
            <date>2015-02-23 11:25:27 -0800</date>
            <delta_ts>2015-02-24 09:11:44 -0800</delta_ts>
            <desc>Fixed the typo</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7228</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggN2VlYmE3YTFhN2JiMjE1
ZmIyMWY1MWJkNzRmMTUxNDJhMWE1OGNlZi4uODhhYzAwZGJiZWQ2NzBjNGE3YjE2ZmJmYTVmYTM1
M2YxM2FiMWU3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE1LTAyLTIxICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KKworICAgICAgICBDcmFzaCBs
b2FkaW5nIGxvY2FsIGZpbGUgd2l0aCBXZWJQYWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3Ry
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4
NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJQ
YWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nIG5lZWRzIHRvIGFzc3VtZSByZWFkIGFj
Y2VzcyB0byB1bnJlYWNoYWJsZVVSTCBhcyB3ZWxsCisgICAgICAgIGFzIGJhc2VVUkwsIGJlY2F1
c2UgdW5yZWFjaGFibGVVUkwgd2lsbCBnZXQgYWRkZWQgdG8gdGhlIGJhY2svZm9yd2FyZCBsaXN0
LCBjYXVzaW5nIHVzIHRvCisgICAgICAgIGNyYXNoIGxhdGVyIG9uIHdoZW4gd2Ugbm90aWNlIHRo
ZSB1bmV4cGVjdGVkIFVSTCByZWNlaXZlZCBpbiBjaGVja1VSTFJlY2VpdmVkRnJvbVdlYlByb2Nl
c3MuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpsb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyk6CisKIDIwMTUtMDIt
MTYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHVEtdIFdlYktpdEZyYW1lIG9iamVjdHMgYXJlIG5ldmVyIHJlbGVhc2VkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDA3ZGFkNjBlZGYyZDgzZmQ3Y2Nk
NWNjMmE5MDNmMmRiYzE5ZjE1MmEuLjI1ZjEyNGYxZThjMzljMzNjNzM5MWY1M2U3YjIxZGY5YjE3
NTE3MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05
MjIsNiArOTIyLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5n
KGNvbnN0IFN0cmluZyYgaHRtbFN0cmluZywgY29uc3QgU3RyaW4KICAgICAgICAgbV9tYWluRnJh
bWUtPnNldFVucmVhY2hhYmxlVVJMKHVucmVhY2hhYmxlVVJMKTsKIAogICAgIG1fcHJvY2Vzcy0+
YXNzdW1lUmVhZEFjY2Vzc1RvQmFzZVVSTChiYXNlVVJMKTsKKyAgICBtX3Byb2Nlc3MtPmFzc3Vt
ZVJlYWRBY2Nlc3NUb0Jhc2VVUkwodW5yZWFjaGFibGVVUkwpOwogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6TG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoaHRtbFN0cmluZywg
YmFzZVVSTCwgdW5yZWFjaGFibGVVUkwsIFVzZXJEYXRhKHByb2Nlc3MoKS50cmFuc2Zvcm1PYmpl
Y3RzVG9IYW5kbGVzKHVzZXJEYXRhKS5nZXQoKSkpLCBtX3BhZ2VJRCk7CiAgICAgbV9wcm9jZXNz
LT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0YXJ0KCk7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDRjYzViMDM2ZjE2MzQwMjFhMGI5ZjJj
ZGVjOTNkODU4NDRmOTRlMy4uMWNiMGU4NDI5MDNkMDRkOTU0ZTY3ZTljZmMwOTQ3YzUxMGVmZjdk
NCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDE1LTAyLTIxICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9A
aWdhbGlhLmNvbT4KKworICAgICAgICBDcmFzaCBsb2FkaW5nIGxvY2FsIGZpbGUgd2l0aCBXZWJQ
YWdlUHJveHk6OmxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4NjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9M
b2FkQWx0ZXJuYXRlSFRNTFN0cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6bG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcpOiBTcGxpdCBtb3N0IG9mIHRo
aXMgdGVzdCBpbnRvIGEgZnVuY3Rpb24gc28gaXQgY2FuCisgICAgICAgIGJlIHNoYXJlZCB3aXRo
IHRoZSBuZXcgdGVzdC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBBZGQgYSBjcm9z
cy1wbGF0Zm9ybSB0ZXN0IGZvciB0aGlzIGNyYXNoLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcDogQWRkIGEgR1RLKyB0ZXN0IGZv
ciB0aGlzIGNyYXNoLgorICAgICAgICAodGVzdExvYWRBbHRlcm5hdGVIVE1MRm9yTG9jYWxQYWdl
KToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisKIDIwMTUtMDItMTcgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCAvd2Vi
a2l0Mi9XZWJLaXRET01Ob2RlL2RvbS1jYWNoZSBhZnRlciByMTgwMjE0LgpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0xvYWRBbHRlcm5hdGVIVE1MU3RyaW5n
V2l0aE5vbkRpcmVjdG9yeVVSTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJMLmNwcAppbmRleCA3
MzcyMWRhZDA2MzUxYTliODExNjZiNTgxZmVkZjk5MzcwOTlhZDRlLi42NjgzMDdhOWEyOWJiODRi
YjRjZmE3YjQ5OWJjNzkzOTZlMGZjYTViIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdDIvTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJM
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvTG9hZEFsdGVybmF0
ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJMLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ0LDcgKzQ1LDcgQEAgc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvckZyYW1l
KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1R5cGVSZWYgdXMKICAgICBkaWRG
aW5pc2hMb2FkID0gdHJ1ZTsKIH0KIAotVEVTVChXZWJLaXQyLCBMb2FkQWx0ZXJuYXRlSFRNTFN0
cmluZ1dpdGhOb25EaXJlY3RvcnlVUkwpCitzdGF0aWMgdm9pZCBsb2FkQWx0ZXJuYXRlSFRNTFN0
cmluZyhXS1VSTFJlZiBiYXNlVVJMLCBXS1VSTFJlZiB1bnJlYWNoYWJsZVVSTCkKIHsKICAgICBX
S1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQoQWRvcHRXSywgV0tDb250ZXh0Q3JlYXRl
KCkpOwogICAgIFBsYXRmb3JtV2ViVmlldyB3ZWJWaWV3KGNvbnRleHQuZ2V0KCkpOwpAQCAtNTYs
MTYgKzU3LDI5IEBAIFRFU1QoV2ViS2l0MiwgTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9u
RGlyZWN0b3J5VVJMKQogICAgIGxvYWRlckNsaWVudC5kaWRGaW5pc2hMb2FkRm9yRnJhbWUgPSBk
aWRGaW5pc2hMb2FkRm9yRnJhbWU7CiAgICAgV0tQYWdlU2V0UGFnZUxvYWRlckNsaWVudCh3ZWJW
aWV3LnBhZ2UoKSwgJmxvYWRlckNsaWVudC5iYXNlKTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiBmaWxlVVJMKEFkb3B0V0ssIFV0aWw6OmNyZWF0ZVVSTEZvclJlc291cmNlKCJzaW1wbGUi
LCAiaHRtbCIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWx0ZXJuYXRlSFRNTFN0
cmluZyhBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiPGh0bWw+PGJvZHk+
PGltZyBzcmM9J2ljb24ucG5nJz48L2JvZHk+PC9odG1sPiIpKTsKLSAgICAKLSAgICAvLyBDYWxs
IFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKCkgd2l0aCBmaWxlVVJMIHdoaWNoIGRvZXMg
bm90IHBvaW50IHRvIGEgZGlyZWN0b3J5Ci0gICAgV0tQYWdlTG9hZEFsdGVybmF0ZUhUTUxTdHJp
bmcod2ViVmlldy5wYWdlKCksIGFsdGVybmF0ZUhUTUxTdHJpbmcuZ2V0KCksIGZpbGVVUkwuZ2V0
KCksIGZpbGVVUkwuZ2V0KCkpOwotICAgIAorICAgIFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1MU3Ry
aW5nKHdlYlZpZXcucGFnZSgpLCBhbHRlcm5hdGVIVE1MU3RyaW5nLmdldCgpLCBiYXNlVVJMLCB1
bnJlYWNoYWJsZVVSTCk7CisKICAgICAvLyBJZiB3ZSBjYW4gZmluaXNoIGxvYWRpbmcgdGhlIGh0
bWwgd2l0aG91dCByZXN1bHRpbmcgaW4gYW4gaW52YWxpZCBtZXNzYWdlIGJlaW5nIHNlbnQgZnJv
bSB0aGUgV2ViUHJvY2VzcywgdGhpcyB0ZXN0IHBhc3Nlcy4KICAgICBVdGlsOjpydW4oJmRpZEZp
bmlzaExvYWQpOwogfQogCitURVNUKFdlYktpdDIsIExvYWRBbHRlcm5hdGVIVE1MU3RyaW5nV2l0
aE5vbkRpcmVjdG9yeVVSTCkKK3sKKyAgICAvLyBDYWxsIFdLUGFnZUxvYWRBbHRlcm5hdGVIVE1M
U3RyaW5nKCkgd2l0aCBmaWxlVVJMIHdoaWNoIGRvZXMgbm90IHBvaW50IHRvIGEgZGlyZWN0b3J5
LgorICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBmaWxlVVJMKEFkb3B0V0ssIFV0aWw6OmNyZWF0
ZVVSTEZvclJlc291cmNlKCJzaW1wbGUiLCAiaHRtbCIpKTsKKyAgICBsb2FkQWx0ZXJuYXRlSFRN
TFN0cmluZyhmaWxlVVJMLmdldCgpLCBmaWxlVVJMLmdldCgpKTsKK30KKworVEVTVChXZWJLaXQy
LCBMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZ1dpdGhFbXB0eUJhc2VVUkwpCit7CisgICAgLy8gQ2Fs
bCBXS1BhZ2VMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZygpIHdpdGggZW1wdHkgYmFzZVVSTCB0byBt
YWtlIHN1cmUgdGhpcyB0ZXN0IHdvcmtzCisgICAgLy8gd2hlbiBiYXNlVVJMIGRvZXMgbm90IGdy
YW50IHJlYWQgYWNjZXNzIHRvIHRoZSB1bnJlYWNoYWJsZVVSTC4gV2UgdXNlIGEgc2VwYXJhdGUg
dGVzdAorICAgIC8vIHRvIGVuc3VyZSB0aGUgcHJldmlvdXMgdGVzdCBkb2VzIG5vdCBwb2xsdXRl
IHRoZSByZXN1bHQuCisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVucmVhY2hhYmxlVVJMKEFk
b3B0V0ssIFV0aWw6OlVSTEZvck5vbkV4aXN0ZW50UmVzb3VyY2UoKSk7CisgICAgbG9hZEFsdGVy
bmF0ZUhUTUxTdHJpbmcobnVsbHB0ciwgdW5yZWFjaGFibGVVUkwuZ2V0KCkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RMb2FkZXJDbGllbnQuY3BwCmluZGV4
IGUxODU2YzdkNDNjMTdiOWJhZDI1NGNjZmFmZDM0YmE1N2M2MjNiYzYuLjQxNmZjOTViZmFmNGQ1
NjI4MzJkZDU3ZjI4ZWJkMzljZTk2NTIxNGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0TG9hZGVyQ2xpZW50LmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdExvYWRlckNsaWVudC5jcHAKQEAgLTgyLDYg
KzgyLDEzIEBAIHN0YXRpYyB2b2lkIHRlc3RMb2FkQWx0ZXJuYXRlSFRNTChMb2FkVHJhY2tpbmdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGFzc2VydE5vcm1hbExvYWRIYXBwZW5lZCh0
ZXN0LT5tX2xvYWRFdmVudHMpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0TG9hZEFsdGVybmF0ZUhU
TUxGb3JMb2NhbFBhZ2UoTG9hZFRyYWNraW5nVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5sb2FkQWx0ZXJuYXRlSFRNTCgiPGh0bWw+PGJvZHk+QWx0ZXJuYXRlIHBhZ2U8
L2JvZHk+PC9odG1sPiIsICJmaWxlOi8vL25vdC9hY3R1YWxseS9sb2FkZWQuaHRtbCIsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGFzc2VydE5vcm1hbExvYWRI
YXBwZW5lZCh0ZXN0LT5tX2xvYWRFdmVudHMpOworfQorCiBzdGF0aWMgdm9pZCB0ZXN0TG9hZFBs
YWluVGV4dChMb2FkVHJhY2tpbmdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIHRl
c3QtPmxvYWRQbGFpblRleHQoIkhlbGxvIFdlYktpdC1HVEsrIik7CkBAIC00NzcsNiArNDg0LDcg
QEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJsb2FkaW5nLWVycm9yIiwgdGVzdExvYWRpbmdFcnJvcik7CiAgICAgTG9hZFRyYWNr
aW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtaHRtbCIsIHRlc3RMb2FkSHRtbCk7
CiAgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImxvYWQtYWx0ZXJu
YXRlLWh0bWwiLCB0ZXN0TG9hZEFsdGVybmF0ZUhUTUwpOworICAgIExvYWRUcmFja2luZ1Rlc3Q6
OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2FkLWFsdGVybmF0ZS1odG1sLWZvci1sb2NhbC1wYWdl
IiwgdGVzdExvYWRBbHRlcm5hdGVIVE1MRm9yTG9jYWxQYWdlKTsKICAgICBMb2FkVHJhY2tpbmdU
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAibG9hZC1wbGFpbi10ZXh0IiwgdGVzdExvYWRQbGFp
blRleHQpOwogICAgIExvYWRUcmFja2luZ1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJsb2Fk
LWJ5dGVzIiwgdGVzdExvYWRCeXRlcyk7CiAgICAgTG9hZFRyYWNraW5nVGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgImxvYWQtcmVxdWVzdCIsIHRlc3RMb2FkUmVxdWVzdCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>