<?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>68509</bug_id>
          
          <creation_ts>2011-09-21 01:29:06 -0700</creation_ts>
          <short_desc>[EFL] Implementation of Unit Tests framework for the WebKit-Efl port</short_desc>
          <delta_ts>2012-07-04 00:58:48 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90136</dependson>
          <blocked>68510</blocked>
    
    <blocked>86092</blocked>
    
    <blocked>87251</blocked>
    
    <blocked>90525</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Krzysztof Czech">k.czech</reporter>
          <assigned_to name="Krzysztof Czech">k.czech</assigned_to>
          <cc>cshu</cc>
    
    <cc>d-r</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jaesik.chang</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>s.choi</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>470652</commentid>
    <comment_count>0</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-09-21 01:29:06 -0700</bug_when>
    <thetext>Unit Tests for the WebKit-Efl port are based on the gtest library.
There&apos;s also been added a simple framework for running tests that require instance of a webview and example of unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470653</commentid>
    <comment_count>1</comment_count>
      <attachid>108121</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-09-21 01:30:48 -0700</bug_when>
    <thetext>Created attachment 108121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470661</commentid>
    <comment_count>2</comment_count>
      <attachid>108121</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-21 01:47:29 -0700</bug_when>
    <thetext>Comment on attachment 108121
Patch

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

Could you let me know how to run? and what is the result ?

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:40
&gt; +EFLTestEcoreEvas::EFLTestEcoreEvas(const char *engine_name, int viewport_x, int viewport_y, int viewport_w, int viewport_h, const char *extra_options)

Move &apos;*&apos; type to data type.

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:76
&gt; +EFLTestView::EFLTestView(Evas *evas, const char* url)

ditto.

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:98
&gt; +EFLTestView::EFLTestView(Evas *evas, EwkViewType type, const char* url, int width, int height)

ditto.

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h:30
&gt; +    EFLTestEcoreEvas(const char *engine_name, int viewport_x, int viewport_y, int viewport_w, int viewport_h, const char *extra_options);

ditto.

In addition, do not use _ for parameter name. We are trying to use WebKit coding style except for public APIs

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h:37
&gt; +    Ecore_Evas *m_ecore_evas;

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470667</commentid>
    <comment_count>3</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-09-21 02:00:08 -0700</bug_when>
    <thetext>You have to applied all the patches first, build WebKit again and run ./Tools/Scripts/run-efl-tests. I added two simple unit tests to demonstrate what is all about. The result you will see after run it run-efl-tests script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470670</commentid>
    <comment_count>4</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-09-21 02:04:49 -0700</bug_when>
    <thetext>I meant all patches by 68509, 68510, 68511</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470775</commentid>
    <comment_count>5</comment_count>
      <attachid>108121</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-21 07:10:05 -0700</bug_when>
    <thetext>Comment on attachment 108121
Patch

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

The patch looks OK overall (even though I&apos;ve never used gtest).

However, there are coding style issues that need to be fixed (I see m_fooBar and m_foo_bar as member variables, there are the issues Gyuyoung pointed out). I would also prefer to use as many &quot;native&quot; C++ and WebKit types as possible, so you have bool instead of Eina_Bool where possible, and you use Strings instead of char*&apos;s whose memory you need to manage manually. Speaking of memory management, you could also use OwnPtrs for the Evas_Objects and other pointers so you also don&apos;t need to manage their memory by hand.

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp:32
&gt; +Eina_Bool EFLTestLauncher::init()

Shouldn&apos;t you have to call the respective _shutdown() functions as well?

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:73
&gt; +    m_url = createTestUrl(EFLUnitTests::Config::defaultTestPage);

Why the double assignment?

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:84
&gt; +    m_url = createTestUrl(url);

Why the double assignment?

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:95
&gt; +    m_url = createTestUrl(url);

Why the double assignment?

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:106
&gt; +    m_url = createTestUrl(url);

Why the double assignment?

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h:61
&gt; +protected:

Small nitpick: an extra empty line before this keyword would be nice

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h:63
&gt; +private:

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471431</commentid>
    <comment_count>6</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-09-22 01:35:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 108121 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108121&amp;action=review
&gt; 
&gt; The patch looks OK overall (even though I&apos;ve never used gtest).
&gt; 
&gt; However, there are coding style issues that need to be fixed (I see m_fooBar and m_foo_bar as member variables, there are the issues Gyuyoung pointed out). I would also prefer to use as many &quot;native&quot; C++ and WebKit types as possible, so you have bool instead of Eina_Bool where possible, and you use Strings instead of char*&apos;s whose memory you need to manage manually. Speaking of memory management, you could also use OwnPtrs for the Evas_Objects and other pointers so you also don&apos;t need to manage their memory by hand.

I think it might be a problem using WebKit&apos;s OwnPtrs in unit tests context.
Tests are linked against WebKit library. Those internals like OwnPtr are not publicly exported. Other way I am not sure if is a good idea to mix Evas_Object&apos;s with smart pointers. How do you think ?
&gt; 
&gt; &gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp:32
&gt; &gt; +Eina_Bool EFLTestLauncher::init()
&gt; 
&gt; Shouldn&apos;t you have to call the respective _shutdown() functions as well?
&gt; 
&gt; &gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:73
&gt; &gt; +    m_url = createTestUrl(EFLUnitTests::Config::defaultTestPage);
&gt; 
&gt; Why the double assignment?
You mean one in initialization list and one above. In case something goes wrong with the above initialization m_url points at null. Other way is good to have default initialization.
&gt; 
&gt; &gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:84
&gt; &gt; +    m_url = createTestUrl(url);
&gt; 
&gt; Why the double assignment?
&gt; 
&gt; &gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:95
&gt; &gt; +    m_url = createTestUrl(url);
&gt; 
&gt; Why the double assignment?
&gt; 
&gt; &gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:106
&gt; &gt; +    m_url = createTestUrl(url);
&gt; 
&gt; Why the double assignment?
&gt; 
&gt; &gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h:61
&gt; &gt; +protected:
&gt; 
&gt; Small nitpick: an extra empty line before this keyword would be nice
&gt; 
&gt; &gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h:63
&gt; &gt; +private:
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473093</commentid>
    <comment_count>7</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-09-26 07:34:44 -0700</bug_when>
    <thetext>&gt; prefer to use as many &quot;native&quot; C++ and WebKit types as possible, so you have
&gt; bool instead of Eina_Bool where possible, and you use Strings instead of char*

I wondering if including c++ string is really necessary, in this particular context having char* is OK, since only one array is declared on heap and is cleaned when test goes out of the scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478246</commentid>
    <comment_count>8</comment_count>
      <attachid>109766</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-10-05 02:39:46 -0700</bug_when>
    <thetext>Created attachment 109766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478316</commentid>
    <comment_count>9</comment_count>
      <attachid>109766</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-10-05 06:58:19 -0700</bug_when>
    <thetext>Comment on attachment 109766
Patch

&gt;diff --git a/Source/WebKit/efl/ChangeLog b/Source/WebKit/efl/ChangeLog
&gt;index 69c60a2..c6336c7 100755
&gt;--- a/Source/WebKit/efl/ChangeLog
&gt;+++ b/Source/WebKit/efl/ChangeLog
&gt;@@ -1,3 +1,47 @@
&gt;+2011-09-21  Krzysztof Czech  &lt;k.czech@samsung.com&gt;
&gt;+
&gt;+        Implementation of Unit Tests framework for the WebKit-Efl port.
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=XXXXX
&gt;+
&gt;+        Unit Tests for the WebKit-Efl port are based on the gtest library.
&gt;+        There&apos;s also been added a simple framework for running tests that require instance of a webview
&gt;+        and example of unit tests.
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        * tests/default_test_page.html: Added.
&gt;+        * tests/src/EFLTestsRun.cpp: Added.
&gt;+        (main):
&gt;+        * tests/src/EwkEditableTests.cpp: Added.
&gt;+        (editableSetTestCallback):
&gt;+        (TEST):
&gt;+        * tests/src/EwkUriTests.cpp: Added.
&gt;+        (ewkUriSetTestCallback):
&gt;+        (TEST):
&gt;+        * tests/src/UnitTestLauncher/EFLTestConfig.h: Added.
&gt;+        * tests/src/UnitTestLauncher/EFLTestLauncher.cpp: Added.
&gt;+        (EFLUnitTests::EFLTestLauncher::init):
&gt;+        (EFLUnitTests::EFLTestLauncher::startTest):
&gt;+        (EFLUnitTests::EFLTestLauncher::endTest):
&gt;+        (EFLUnitTests::EFLTestLauncher::createTest):
&gt;+        (EFLUnitTests::EFLTestLauncher::runTest):
&gt;+        * tests/src/UnitTestLauncher/EFLTestLauncher.h: Added.
&gt;+        * tests/src/UnitTestLauncher/EFLTestView.cpp: Added.
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::EFLTestEcoreEvas):
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::~EFLTestEcoreEvas):
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::getEvas):
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::show):
&gt;+        (EFLUnitTests::EFLTestView::EFLTestView):
&gt;+        (EFLUnitTests::EFLTestView::~EFLTestView):
&gt;+        (EFLUnitTests::EFLTestView::createTestUrl):
&gt;+        (EFLUnitTests::EFLTestView::init):
&gt;+        (EFLUnitTests::EFLTestView::show):
&gt;+        (EFLUnitTests::EFLTestView::getMainFrame):
&gt;+        (EFLUnitTests::EFLTestView::getEvas):
&gt;+        (EFLUnitTests::EFLTestView::bindEvents):
&gt;+        * tests/src/UnitTestLauncher/EFLTestView.h: Added.
&gt;+        (EFLUnitTests::EFLTestView::getWebView):
&gt;+
&gt; 2011-09-17  Mihai Parparita  &lt;mihaip@chromium.org&gt;
&gt; 
&gt;         FrameLoaderClient BackForwardList-related methods are unsued
&gt;diff --git a/Source/WebKit/efl/tests/default_test_page.html b/Source/WebKit/efl/tests/default_test_page.html
&gt;new file mode 100644
&gt;index 0000000..edd81e7
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/default_test_page.html
&gt;@@ -0,0 +1,6 @@
&gt;+&lt;HTML&gt;
&gt;+&lt;BODY&gt;
&gt;+&lt;H2 align=&quot;center&quot;&gt;EFL Unit Tests&lt;/H2&gt;
&gt;+&lt;H2 align=&quot;center&quot;&gt;Default Testing Web Page&lt;/H2&gt;
&gt;+&lt;/BODY&gt;
&gt;+&lt;/HTML&gt;
&gt;diff --git a/Source/WebKit/efl/tests/src/EFLTestsRun.cpp b/Source/WebKit/efl/tests/src/EFLTestsRun.cpp
&gt;new file mode 100644
&gt;index 0000000..a22a61c
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/EFLTestsRun.cpp
&gt;@@ -0,0 +1,30 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &lt;EFLTestLauncher.h&gt;
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+#include &lt;stdio.h&gt;
&gt;+
&gt;+using namespace EFLUnitTests;
&gt;+
&gt;+int main(int argc, char** argv)
&gt;+{
&gt;+    atexit(EFLTestLauncher::shutdownAll);
&gt;+    ::testing::InitGoogleTest(&amp;argc, argv);
&gt;+    return RUN_ALL_TESTS();
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/EwkEditableTests.cpp b/Source/WebKit/efl/tests/src/EwkEditableTests.cpp
&gt;new file mode 100644
&gt;index 0000000..e866026
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/EwkEditableTests.cpp
&gt;@@ -0,0 +1,35 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;EFLTestLauncher.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+
&gt;+using namespace EFLUnitTests;
&gt;+
&gt;+void editableSetTestCallback(void* eventInfo, Evas_Object* o, void* data)
&gt;+{
&gt;+    EXPECT_EQ(EINA_TRUE, ewk_view_editable_set(o, EINA_FALSE));
&gt;+    EXPECT_EQ(EINA_FALSE, ewk_view_editable_get(o));
&gt;+    END_TEST();
&gt;+}
&gt;+
&gt;+TEST(EwkEditableTests, EditableSetTest)
&gt;+{
&gt;+    RUN_TEST(editableSetTestCallback, &quot;load,finished&quot;, 0);
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/EwkUriTests.cpp b/Source/WebKit/efl/tests/src/EwkUriTests.cpp
&gt;new file mode 100644
&gt;index 0000000..eccd060
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/EwkUriTests.cpp
&gt;@@ -0,0 +1,34 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;EFLTestLauncher.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+
&gt;+using namespace EFLUnitTests;
&gt;+
&gt;+void ewkUriSetTestCallback(void* eventInfo, Evas_Object* o, void* data)
&gt;+{
&gt;+    EXPECT_STREQ(&quot;http://www.webkit.org/&quot;, ewk_view_uri_get(o));
&gt;+    END_TEST();
&gt;+}
&gt;+
&gt;+TEST(EwkUriTests, EwkUriSetTest)
&gt;+{
&gt;+    RUN_TEST(&quot;http://www.webkit.org&quot;, ewkUriSetTestCallback, &quot;load,finished&quot;, 0);
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestConfig.h b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestConfig.h
&gt;new file mode 100644
&gt;index 0000000..ddcfcb6
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestConfig.h
&gt;@@ -0,0 +1,31 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#ifndef EFLTestConfig_h
&gt;+#define EFLTestConfig_h
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+namespace Config {
&gt;+static const int defaultViewWidth = 600;
&gt;+static const int defaultViewHeight = 800;
&gt;+static const char* defaultThemePath = DEFAULT_THEME_PATH&quot;/default.edj&quot;;
&gt;+static const char* defaultTestPage = &quot;file://&quot;DEFAULT_TEST_PAGE_DIR&quot;/default_test_page.html&quot;;
&gt;+}
&gt;+}
&gt;+
&gt;+#endif
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp
&gt;new file mode 100644
&gt;index 0000000..0b46e18
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp
&gt;@@ -0,0 +1,102 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;config.h&quot;
&gt;+#include &quot;EFLTestLauncher.h&quot;
&gt;+
&gt;+#include &quot;EFLTestConfig.h&quot;
&gt;+#include &quot;EFLTestView.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+
&gt;+#include &lt;Ecore.h&gt;
&gt;+#include &lt;Edje.h&gt;
&gt;+#include &lt;Eina.h&gt;
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+bool EFLTestLauncher::init()
&gt;+{
&gt;+    if (!ecore_evas_init())
&gt;+        return false;
&gt;+
&gt;+    if (!edje_init()) {
&gt;+        ecore_evas_shutdown();
&gt;+        return false;
&gt;+    }
&gt;+    ewk_init();
&gt;+    return true;
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::shutdown()
&gt;+{
&gt;+    ecore_evas_shutdown();
&gt;+    edje_shutdown();
&gt;+    ewk_shutdown();
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::shutdownAll()
&gt;+{
&gt;+    int count = 0;
&gt;+
&gt;+    while ((count = ecore_evas_shutdown()) &gt; 0) { }
&gt;+    while ((count = edje_shutdown()) &gt; 0) { }
&gt;+    while ((count = ewk_shutdown()) &gt; 0) { }
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::startTest()
&gt;+{
&gt;+    ecore_main_loop_begin();
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::endTest()
&gt;+{
&gt;+    ecore_main_loop_quit();
&gt;+}
&gt;+
&gt;+bool EFLTestLauncher::createTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data)
&gt;+{
&gt;+    EFL_INIT_RET();
&gt;+
&gt;+    EFLTestEcoreEvas evas;
&gt;+    if (!evas.getEvas())
&gt;+        return false;
&gt;+    evas.show();
&gt;+
&gt;+    EFLTestView view(evas.getEvas(), url);
&gt;+    if (!view.init())
&gt;+        return false;
&gt;+
&gt;+    view.bindEvents(event_callback, event_name, event_data);
&gt;+    view.show();
&gt;+
&gt;+    START_TEST();
&gt;+
&gt;+    return true;
&gt;+}
&gt;+
&gt;+bool EFLTestLauncher::runTest(void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data)
&gt;+{
&gt;+    return createTest(EFLUnitTests::Config::defaultTestPage, event_callback, event_name, event_data);
&gt;+}
&gt;+
&gt;+bool EFLTestLauncher::runTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data)
&gt;+{
&gt;+    return createTest(url, event_callback, event_name, event_data);
&gt;+}
&gt;+
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.h b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.h
&gt;new file mode 100644
&gt;index 0000000..746f95d
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.h
&gt;@@ -0,0 +1,88 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#ifndef EFLTestLauncher_h
&gt;+#define EFLTestLauncher_h
&gt;+
&gt;+#include &lt;Evas.h&gt;
&gt;+
&gt;+#ifdef GTEST_TEST_FRAMEWORK
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+#endif
&gt;+
&gt;+#ifdef GTEST_TEST_FRAMEWORK
&gt;+    #define RUN_TEST(args...)   \
&gt;+        do {    \
&gt;+            ASSERT_EQ(true, EFLTestLauncher::runTest(args));    \
&gt;+        } while (0)
&gt;+#else
&gt;+    #define RUN_TEST(args...)   \
&gt;+    do {    \
&gt;+        EFLTestLauncher::runTest(args); \
&gt;+    } while (0)
&gt;+#endif
&gt;+
&gt;+#define START_TEST()    \
&gt;+    do {    \
&gt;+        EFLTestLauncher::startTest();   \
&gt;+    } while (0)
&gt;+
&gt;+#define END_TEST()    \
&gt;+    do {    \
&gt;+        EFLTestLauncher::endTest(); \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_INIT_RET()  \
&gt;+    do {    \
&gt;+        if (!EFLTestLauncher::init())   \
&gt;+            return false;    \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_INIT()  \
&gt;+    do {    \
&gt;+        EFLTestLauncher::init();    \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_SHUTDOWN()  \
&gt;+    do {    \
&gt;+        EFLTestLauncher::shutdown();    \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_SHUTDOWN_ALL()  \
&gt;+    do {    \
&gt;+        EFLTestLauncher::shutdownAll(); \
&gt;+    } while (0)
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+class EFLTestLauncher {
&gt;+    static bool createTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data);
&gt;+public:
&gt;+    static bool init();
&gt;+    static void shutdown();
&gt;+    static void shutdownAll();
&gt;+    static void startTest();
&gt;+    static void endTest();
&gt;+
&gt;+    static bool runTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data);
&gt;+    static bool runTest(void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data);
&gt;+};
&gt;+
&gt;+}
&gt;+
&gt;+#endif
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp
&gt;new file mode 100644
&gt;index 0000000..8053b3a
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp
&gt;@@ -0,0 +1,177 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;config.h&quot;
&gt;+#include &quot;EFLTestView.h&quot;
&gt;+
&gt;+#include &quot;EFLTestConfig.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+
&gt;+#include &lt;Ecore.h&gt;
&gt;+#include &lt;Ecore_File.h&gt;
&gt;+#include &lt;Edje.h&gt;
&gt;+#include &lt;Eina.h&gt;
&gt;+
&gt;+#include &lt;string.h&gt;
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+EFLTestEcoreEvas::EFLTestEcoreEvas()
&gt;+    : m_ecoreEvas(0)
&gt;+{
&gt;+    m_ecoreEvas = ecore_evas_new(0, 0, 0, EFLUnitTests::Config::defaultViewWidth, EFLUnitTests::Config::defaultViewHeight, 0);
&gt;+}
&gt;+
&gt;+EFLTestEcoreEvas::EFLTestEcoreEvas(const char* engine_name, int viewport_x, int viewport_y, int viewport_w, int viewport_h, const char* extra_options)
&gt;+    : m_ecoreEvas(0)
&gt;+{
&gt;+    m_ecoreEvas = ecore_evas_new(engine_name, viewport_x, viewport_y, viewport_w, viewport_h, extra_options);
&gt;+}
&gt;+
&gt;+EFLTestEcoreEvas::~EFLTestEcoreEvas()
&gt;+{
&gt;+    if (m_ecoreEvas)
&gt;+        ecore_evas_free(m_ecoreEvas);
&gt;+}
&gt;+
&gt;+Evas* EFLTestEcoreEvas::getEvas()
&gt;+{
&gt;+    if (m_ecoreEvas)
&gt;+        return ecore_evas_get(m_ecoreEvas);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+void EFLTestEcoreEvas::show()
&gt;+{
&gt;+    if (m_ecoreEvas)
&gt;+        ecore_evas_show(m_ecoreEvas);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(TiledView)
&gt;+    , m_width(EFLUnitTests::Config::defaultViewWidth)
&gt;+    , m_height(EFLUnitTests::Config::defaultViewHeight)
&gt;+{
&gt;+    m_url = createTestUrl(EFLUnitTests::Config::defaultTestPage);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas, const char* url)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(TiledView)
&gt;+    , m_width(EFLUnitTests::Config::defaultViewWidth)
&gt;+    , m_height(EFLUnitTests::Config::defaultViewHeight)
&gt;+{
&gt;+    m_url = createTestUrl(url);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas, EwkViewType type, const char* url)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(type)
&gt;+    , m_width(EFLUnitTests::Config::defaultViewWidth)
&gt;+    , m_height(EFLUnitTests::Config::defaultViewHeight)
&gt;+{
&gt;+    m_url = createTestUrl(url);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas, EwkViewType type, const char* url, int width, int height)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(type)
&gt;+    , m_width(width)
&gt;+    , m_height(height)
&gt;+{
&gt;+    m_url = createTestUrl(url);
&gt;+}
&gt;+
&gt;+EFLTestView::~EFLTestView()
&gt;+{
&gt;+    if (m_webView)
&gt;+        evas_object_del(m_webView);
&gt;+    free(m_url);
&gt;+}
&gt;+
&gt;+char* EFLTestView::createTestUrl(const char* url)
&gt;+{
&gt;+    if (url)
&gt;+        return strdup(url);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+bool EFLTestView::init()
&gt;+{
&gt;+    if (!m_evas || !m_url)
&gt;+        return false;
&gt;+
&gt;+    switch (m_defaultViewType) {
&gt;+    case SingleView:
&gt;+        m_webView = ewk_view_single_add(m_evas);
&gt;+        break;
&gt;+
&gt;+    case TiledView:
&gt;+        m_webView = ewk_view_tiled_add(m_evas);
&gt;+        break;
&gt;+    }
&gt;+
&gt;+    if (!m_webView)
&gt;+        return false;
&gt;+
&gt;+    ewk_view_theme_set(m_webView, EFLUnitTests::Config::defaultThemePath);
&gt;+    ewk_view_uri_set(m_webView, m_url);
&gt;+}
&gt;+
&gt;+void EFLTestView::show()
&gt;+{
&gt;+    if (!m_webView)
&gt;+        return;
&gt;+    evas_object_resize(m_webView, m_width, m_height);
&gt;+    evas_object_show(m_webView);
&gt;+    evas_object_focus_set(m_webView, EINA_TRUE);
&gt;+}
&gt;+
&gt;+Evas_Object* EFLTestView::getMainFrame()
&gt;+{
&gt;+    if (m_webView)
&gt;+        return ewk_view_frame_main_get(m_webView);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+Evas* EFLTestView::getEvas()
&gt;+{
&gt;+    if (m_webView)
&gt;+        return evas_object_evas_get(m_webView);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+void EFLTestView::bindEvents(void (*callback)(void*, Evas_Object*, void*), const char* eventName, void* ptr)
&gt;+{
&gt;+    if (!m_webView)
&gt;+        return;
&gt;+
&gt;+    evas_object_smart_callback_del(m_webView, eventName, callback);
&gt;+    evas_object_smart_callback_add(m_webView, eventName, callback, ptr);
&gt;+}
&gt;+
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h
&gt;new file mode 100644
&gt;index 0000000..9cb2469
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h
&gt;@@ -0,0 +1,77 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#ifndef EFLTestView_h
&gt;+#define EFLTestView_h
&gt;+
&gt;+#include &lt;Ecore_Evas.h&gt;
&gt;+#include &lt;Evas.h&gt;
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+class EFLTestEcoreEvas {
&gt;+public:
&gt;+    EFLTestEcoreEvas();
&gt;+    EFLTestEcoreEvas(const char* engine_name, int viewport_x, int viewport_y, int viewport_w, int viewport_h, const char* extra_options);
&gt;+    ~EFLTestEcoreEvas();
&gt;+
&gt;+    Evas* getEvas();
&gt;+    void show();
&gt;+
&gt;+private:
&gt;+    Ecore_Evas* m_ecoreEvas;
&gt;+};
&gt;+
&gt;+class EFLTestView {
&gt;+public:
&gt;+    enum EwkViewType {
&gt;+        SingleView = 0,
&gt;+        TiledView,
&gt;+    };
&gt;+
&gt;+    explicit EFLTestView(Evas*);
&gt;+    EFLTestView(Evas*, const char* url);
&gt;+    EFLTestView(Evas*, EwkViewType, const char* url);
&gt;+    EFLTestView(Evas*, EwkViewType, const char* url, int width, int height);
&gt;+
&gt;+    virtual ~EFLTestView();
&gt;+
&gt;+    Evas_Object* getWebView() { return m_webView; }
&gt;+    Evas_Object* getMainFrame();
&gt;+    Evas* getEvas();
&gt;+    void show();
&gt;+
&gt;+    bool init();
&gt;+    void bindEvents(void (*callback)(void*, Evas_Object*, void*), const char* eventName, void* ptr);
&gt;+protected:
&gt;+    char* createTestUrl(const char* url);
&gt;+private:
&gt;+    EFLTestView(const EFLTestView&amp;);
&gt;+    EFLTestView operator=(const EFLTestView&amp;);
&gt;+
&gt;+    Evas* m_evas;
&gt;+    Evas_Object* m_webView;
&gt;+
&gt;+    char* m_url;
&gt;+    int m_width, m_height;
&gt;+    EwkViewType m_defaultViewType;
&gt;+};
&gt;+
&gt;+}
&gt;+
&gt;+#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478323</commentid>
    <comment_count>10</comment_count>
      <attachid>109785</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-10-05 07:12:20 -0700</bug_when>
    <thetext>Created attachment 109785
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486593</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-19 00:26:03 -0700</bug_when>
    <thetext>Attachment 109785 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/efl/ChangeLog&apos;, u&apos;Source/Web...&quot; exit_code: 1

Source/WebKit/efl/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486610</commentid>
    <comment_count>12</comment_count>
      <attachid>109785</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-10-19 01:23:43 -0700</bug_when>
    <thetext>Comment on attachment 109785
Patch

&gt;diff --git a/Source/WebKit/efl/ChangeLog b/Source/WebKit/efl/ChangeLog
&gt;index 69c60a2..c6336c7 100755
&gt;--- a/Source/WebKit/efl/ChangeLog
&gt;+++ b/Source/WebKit/efl/ChangeLog
&gt;@@ -1,3 +1,47 @@
&gt;+2011-09-21  Krzysztof Czech  &lt;k.czech@samsung.com&gt;
&gt;+
&gt;+        Implementation of Unit Tests framework for the WebKit-Efl port.
&gt;+        https://bugs.webkit.org/show_bug.cgi?id=68509
&gt;+
&gt;+        Unit Tests for the WebKit-Efl port are based on the gtest library.
&gt;+        There&apos;s also been added a simple framework for running tests that require instance of a webview
&gt;+        and example of unit tests.
&gt;+
&gt;+        Reviewed by NOBODY (OOPS!).
&gt;+
&gt;+        * tests/default_test_page.html: Added.
&gt;+        * tests/src/EFLTestsRun.cpp: Added.
&gt;+        (main):
&gt;+        * tests/src/EwkEditableTests.cpp: Added.
&gt;+        (editableSetTestCallback):
&gt;+        (TEST):
&gt;+        * tests/src/EwkUriTests.cpp: Added.
&gt;+        (ewkUriSetTestCallback):
&gt;+        (TEST):
&gt;+        * tests/src/UnitTestLauncher/EFLTestConfig.h: Added.
&gt;+        * tests/src/UnitTestLauncher/EFLTestLauncher.cpp: Added.
&gt;+        (EFLUnitTests::EFLTestLauncher::init):
&gt;+        (EFLUnitTests::EFLTestLauncher::startTest):
&gt;+        (EFLUnitTests::EFLTestLauncher::endTest):
&gt;+        (EFLUnitTests::EFLTestLauncher::createTest):
&gt;+        (EFLUnitTests::EFLTestLauncher::runTest):
&gt;+        * tests/src/UnitTestLauncher/EFLTestLauncher.h: Added.
&gt;+        * tests/src/UnitTestLauncher/EFLTestView.cpp: Added.
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::EFLTestEcoreEvas):
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::~EFLTestEcoreEvas):
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::getEvas):
&gt;+        (EFLUnitTests::EFLTestEcoreEvas::show):
&gt;+        (EFLUnitTests::EFLTestView::EFLTestView):
&gt;+        (EFLUnitTests::EFLTestView::~EFLTestView):
&gt;+        (EFLUnitTests::EFLTestView::createTestUrl):
&gt;+        (EFLUnitTests::EFLTestView::init):
&gt;+        (EFLUnitTests::EFLTestView::show):
&gt;+        (EFLUnitTests::EFLTestView::getMainFrame):
&gt;+        (EFLUnitTests::EFLTestView::getEvas):
&gt;+        (EFLUnitTests::EFLTestView::bindEvents):
&gt;+        * tests/src/UnitTestLauncher/EFLTestView.h: Added.
&gt;+        (EFLUnitTests::EFLTestView::getWebView):
&gt;+
&gt; 2011-09-17  Mihai Parparita  &lt;mihaip@chromium.org&gt;
&gt; 
&gt;         FrameLoaderClient BackForwardList-related methods are unsued
&gt;diff --git a/Source/WebKit/efl/tests/default_test_page.html b/Source/WebKit/efl/tests/default_test_page.html
&gt;new file mode 100644
&gt;index 0000000..edd81e7
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/default_test_page.html
&gt;@@ -0,0 +1,6 @@
&gt;+&lt;HTML&gt;
&gt;+&lt;BODY&gt;
&gt;+&lt;H2 align=&quot;center&quot;&gt;EFL Unit Tests&lt;/H2&gt;
&gt;+&lt;H2 align=&quot;center&quot;&gt;Default Testing Web Page&lt;/H2&gt;
&gt;+&lt;/BODY&gt;
&gt;+&lt;/HTML&gt;
&gt;diff --git a/Source/WebKit/efl/tests/src/EFLTestsRun.cpp b/Source/WebKit/efl/tests/src/EFLTestsRun.cpp
&gt;new file mode 100644
&gt;index 0000000..a22a61c
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/EFLTestsRun.cpp
&gt;@@ -0,0 +1,30 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &lt;EFLTestLauncher.h&gt;
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+#include &lt;stdio.h&gt;
&gt;+
&gt;+using namespace EFLUnitTests;
&gt;+
&gt;+int main(int argc, char** argv)
&gt;+{
&gt;+    atexit(EFLTestLauncher::shutdownAll);
&gt;+    ::testing::InitGoogleTest(&amp;argc, argv);
&gt;+    return RUN_ALL_TESTS();
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/EwkEditableTests.cpp b/Source/WebKit/efl/tests/src/EwkEditableTests.cpp
&gt;new file mode 100644
&gt;index 0000000..e866026
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/EwkEditableTests.cpp
&gt;@@ -0,0 +1,35 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;EFLTestLauncher.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+
&gt;+using namespace EFLUnitTests;
&gt;+
&gt;+void editableSetTestCallback(void* eventInfo, Evas_Object* o, void* data)
&gt;+{
&gt;+    EXPECT_EQ(EINA_TRUE, ewk_view_editable_set(o, EINA_FALSE));
&gt;+    EXPECT_EQ(EINA_FALSE, ewk_view_editable_get(o));
&gt;+    END_TEST();
&gt;+}
&gt;+
&gt;+TEST(EwkEditableTests, EditableSetTest)
&gt;+{
&gt;+    RUN_TEST(editableSetTestCallback, &quot;load,finished&quot;, 0);
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/EwkUriTests.cpp b/Source/WebKit/efl/tests/src/EwkUriTests.cpp
&gt;new file mode 100644
&gt;index 0000000..eccd060
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/EwkUriTests.cpp
&gt;@@ -0,0 +1,34 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;EFLTestLauncher.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+
&gt;+using namespace EFLUnitTests;
&gt;+
&gt;+void ewkUriSetTestCallback(void* eventInfo, Evas_Object* o, void* data)
&gt;+{
&gt;+    EXPECT_STREQ(&quot;http://www.webkit.org/&quot;, ewk_view_uri_get(o));
&gt;+    END_TEST();
&gt;+}
&gt;+
&gt;+TEST(EwkUriTests, EwkUriSetTest)
&gt;+{
&gt;+    RUN_TEST(&quot;http://www.webkit.org&quot;, ewkUriSetTestCallback, &quot;load,finished&quot;, 0);
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestConfig.h b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestConfig.h
&gt;new file mode 100644
&gt;index 0000000..ddcfcb6
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestConfig.h
&gt;@@ -0,0 +1,31 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#ifndef EFLTestConfig_h
&gt;+#define EFLTestConfig_h
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+namespace Config {
&gt;+static const int defaultViewWidth = 600;
&gt;+static const int defaultViewHeight = 800;
&gt;+static const char* defaultThemePath = DEFAULT_THEME_PATH&quot;/default.edj&quot;;
&gt;+static const char* defaultTestPage = &quot;file://&quot;DEFAULT_TEST_PAGE_DIR&quot;/default_test_page.html&quot;;
&gt;+}
&gt;+}
&gt;+
&gt;+#endif
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp
&gt;new file mode 100644
&gt;index 0000000..0b46e18
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp
&gt;@@ -0,0 +1,102 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;config.h&quot;
&gt;+#include &quot;EFLTestLauncher.h&quot;
&gt;+
&gt;+#include &quot;EFLTestConfig.h&quot;
&gt;+#include &quot;EFLTestView.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+
&gt;+#include &lt;Ecore.h&gt;
&gt;+#include &lt;Edje.h&gt;
&gt;+#include &lt;Eina.h&gt;
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+bool EFLTestLauncher::init()
&gt;+{
&gt;+    if (!ecore_evas_init())
&gt;+        return false;
&gt;+
&gt;+    if (!edje_init()) {
&gt;+        ecore_evas_shutdown();
&gt;+        return false;
&gt;+    }
&gt;+    ewk_init();
&gt;+    return true;
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::shutdown()
&gt;+{
&gt;+    ecore_evas_shutdown();
&gt;+    edje_shutdown();
&gt;+    ewk_shutdown();
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::shutdownAll()
&gt;+{
&gt;+    int count = 0;
&gt;+
&gt;+    while ((count = ecore_evas_shutdown()) &gt; 0) { }
&gt;+    while ((count = edje_shutdown()) &gt; 0) { }
&gt;+    while ((count = ewk_shutdown()) &gt; 0) { }
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::startTest()
&gt;+{
&gt;+    ecore_main_loop_begin();
&gt;+}
&gt;+
&gt;+void EFLTestLauncher::endTest()
&gt;+{
&gt;+    ecore_main_loop_quit();
&gt;+}
&gt;+
&gt;+bool EFLTestLauncher::createTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data)
&gt;+{
&gt;+    EFL_INIT_RET();
&gt;+
&gt;+    EFLTestEcoreEvas evas;
&gt;+    if (!evas.getEvas())
&gt;+        return false;
&gt;+    evas.show();
&gt;+
&gt;+    EFLTestView view(evas.getEvas(), url);
&gt;+    if (!view.init())
&gt;+        return false;
&gt;+
&gt;+    view.bindEvents(event_callback, event_name, event_data);
&gt;+    view.show();
&gt;+
&gt;+    START_TEST();
&gt;+
&gt;+    return true;
&gt;+}
&gt;+
&gt;+bool EFLTestLauncher::runTest(void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data)
&gt;+{
&gt;+    return createTest(EFLUnitTests::Config::defaultTestPage, event_callback, event_name, event_data);
&gt;+}
&gt;+
&gt;+bool EFLTestLauncher::runTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data)
&gt;+{
&gt;+    return createTest(url, event_callback, event_name, event_data);
&gt;+}
&gt;+
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.h b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.h
&gt;new file mode 100644
&gt;index 0000000..746f95d
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.h
&gt;@@ -0,0 +1,88 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#ifndef EFLTestLauncher_h
&gt;+#define EFLTestLauncher_h
&gt;+
&gt;+#include &lt;Evas.h&gt;
&gt;+
&gt;+#ifdef GTEST_TEST_FRAMEWORK
&gt;+#include &lt;gtest/gtest.h&gt;
&gt;+#endif
&gt;+
&gt;+#ifdef GTEST_TEST_FRAMEWORK
&gt;+    #define RUN_TEST(args...)   \
&gt;+        do {    \
&gt;+            ASSERT_EQ(true, EFLTestLauncher::runTest(args));    \
&gt;+        } while (0)
&gt;+#else
&gt;+    #define RUN_TEST(args...)   \
&gt;+    do {    \
&gt;+        EFLTestLauncher::runTest(args); \
&gt;+    } while (0)
&gt;+#endif
&gt;+
&gt;+#define START_TEST()    \
&gt;+    do {    \
&gt;+        EFLTestLauncher::startTest();   \
&gt;+    } while (0)
&gt;+
&gt;+#define END_TEST()    \
&gt;+    do {    \
&gt;+        EFLTestLauncher::endTest(); \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_INIT_RET()  \
&gt;+    do {    \
&gt;+        if (!EFLTestLauncher::init())   \
&gt;+            return false;    \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_INIT()  \
&gt;+    do {    \
&gt;+        EFLTestLauncher::init();    \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_SHUTDOWN()  \
&gt;+    do {    \
&gt;+        EFLTestLauncher::shutdown();    \
&gt;+    } while (0)
&gt;+
&gt;+#define EFL_SHUTDOWN_ALL()  \
&gt;+    do {    \
&gt;+        EFLTestLauncher::shutdownAll(); \
&gt;+    } while (0)
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+class EFLTestLauncher {
&gt;+    static bool createTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data);
&gt;+public:
&gt;+    static bool init();
&gt;+    static void shutdown();
&gt;+    static void shutdownAll();
&gt;+    static void startTest();
&gt;+    static void endTest();
&gt;+
&gt;+    static bool runTest(const char* url, void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data);
&gt;+    static bool runTest(void (*event_callback)(void*, Evas_Object*, void*), const char* event_name, void* event_data);
&gt;+};
&gt;+
&gt;+}
&gt;+
&gt;+#endif
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp
&gt;new file mode 100644
&gt;index 0000000..8053b3a
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp
&gt;@@ -0,0 +1,177 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#include &quot;config.h&quot;
&gt;+#include &quot;EFLTestView.h&quot;
&gt;+
&gt;+#include &quot;EFLTestConfig.h&quot;
&gt;+#include &quot;EWebKit.h&quot;
&gt;+
&gt;+#include &lt;Ecore.h&gt;
&gt;+#include &lt;Ecore_File.h&gt;
&gt;+#include &lt;Edje.h&gt;
&gt;+#include &lt;Eina.h&gt;
&gt;+
&gt;+#include &lt;string.h&gt;
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+EFLTestEcoreEvas::EFLTestEcoreEvas()
&gt;+    : m_ecoreEvas(0)
&gt;+{
&gt;+    m_ecoreEvas = ecore_evas_new(0, 0, 0, EFLUnitTests::Config::defaultViewWidth, EFLUnitTests::Config::defaultViewHeight, 0);
&gt;+}
&gt;+
&gt;+EFLTestEcoreEvas::EFLTestEcoreEvas(const char* engine_name, int viewport_x, int viewport_y, int viewport_w, int viewport_h, const char* extra_options)
&gt;+    : m_ecoreEvas(0)
&gt;+{
&gt;+    m_ecoreEvas = ecore_evas_new(engine_name, viewport_x, viewport_y, viewport_w, viewport_h, extra_options);
&gt;+}
&gt;+
&gt;+EFLTestEcoreEvas::~EFLTestEcoreEvas()
&gt;+{
&gt;+    if (m_ecoreEvas)
&gt;+        ecore_evas_free(m_ecoreEvas);
&gt;+}
&gt;+
&gt;+Evas* EFLTestEcoreEvas::getEvas()
&gt;+{
&gt;+    if (m_ecoreEvas)
&gt;+        return ecore_evas_get(m_ecoreEvas);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+void EFLTestEcoreEvas::show()
&gt;+{
&gt;+    if (m_ecoreEvas)
&gt;+        ecore_evas_show(m_ecoreEvas);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(TiledView)
&gt;+    , m_width(EFLUnitTests::Config::defaultViewWidth)
&gt;+    , m_height(EFLUnitTests::Config::defaultViewHeight)
&gt;+{
&gt;+    m_url = createTestUrl(EFLUnitTests::Config::defaultTestPage);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas, const char* url)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(TiledView)
&gt;+    , m_width(EFLUnitTests::Config::defaultViewWidth)
&gt;+    , m_height(EFLUnitTests::Config::defaultViewHeight)
&gt;+{
&gt;+    m_url = createTestUrl(url);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas, EwkViewType type, const char* url)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(type)
&gt;+    , m_width(EFLUnitTests::Config::defaultViewWidth)
&gt;+    , m_height(EFLUnitTests::Config::defaultViewHeight)
&gt;+{
&gt;+    m_url = createTestUrl(url);
&gt;+}
&gt;+
&gt;+EFLTestView::EFLTestView(Evas* evas, EwkViewType type, const char* url, int width, int height)
&gt;+    : m_webView(0)
&gt;+    , m_evas(evas)
&gt;+    , m_url(0)
&gt;+    , m_defaultViewType(type)
&gt;+    , m_width(width)
&gt;+    , m_height(height)
&gt;+{
&gt;+    m_url = createTestUrl(url);
&gt;+}
&gt;+
&gt;+EFLTestView::~EFLTestView()
&gt;+{
&gt;+    if (m_webView)
&gt;+        evas_object_del(m_webView);
&gt;+    free(m_url);
&gt;+}
&gt;+
&gt;+char* EFLTestView::createTestUrl(const char* url)
&gt;+{
&gt;+    if (url)
&gt;+        return strdup(url);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+bool EFLTestView::init()
&gt;+{
&gt;+    if (!m_evas || !m_url)
&gt;+        return false;
&gt;+
&gt;+    switch (m_defaultViewType) {
&gt;+    case SingleView:
&gt;+        m_webView = ewk_view_single_add(m_evas);
&gt;+        break;
&gt;+
&gt;+    case TiledView:
&gt;+        m_webView = ewk_view_tiled_add(m_evas);
&gt;+        break;
&gt;+    }
&gt;+
&gt;+    if (!m_webView)
&gt;+        return false;
&gt;+
&gt;+    ewk_view_theme_set(m_webView, EFLUnitTests::Config::defaultThemePath);
&gt;+    ewk_view_uri_set(m_webView, m_url);
&gt;+}
&gt;+
&gt;+void EFLTestView::show()
&gt;+{
&gt;+    if (!m_webView)
&gt;+        return;
&gt;+    evas_object_resize(m_webView, m_width, m_height);
&gt;+    evas_object_show(m_webView);
&gt;+    evas_object_focus_set(m_webView, EINA_TRUE);
&gt;+}
&gt;+
&gt;+Evas_Object* EFLTestView::getMainFrame()
&gt;+{
&gt;+    if (m_webView)
&gt;+        return ewk_view_frame_main_get(m_webView);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+Evas* EFLTestView::getEvas()
&gt;+{
&gt;+    if (m_webView)
&gt;+        return evas_object_evas_get(m_webView);
&gt;+    return 0;
&gt;+}
&gt;+
&gt;+void EFLTestView::bindEvents(void (*callback)(void*, Evas_Object*, void*), const char* eventName, void* ptr)
&gt;+{
&gt;+    if (!m_webView)
&gt;+        return;
&gt;+
&gt;+    evas_object_smart_callback_del(m_webView, eventName, callback);
&gt;+    evas_object_smart_callback_add(m_webView, eventName, callback, ptr);
&gt;+}
&gt;+
&gt;+}
&gt;diff --git a/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h
&gt;new file mode 100644
&gt;index 0000000..9cb2469
&gt;--- /dev/null
&gt;+++ b/Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.h
&gt;@@ -0,0 +1,77 @@
&gt;+/*
&gt;+    Copyright (C) 2011 Samsung Electronics
&gt;+
&gt;+    This library is free software; you can redistribute it and/or
&gt;+    modify it under the terms of the GNU Lesser General Public
&gt;+    License as published by the Free Software Foundation; either
&gt;+    version 2.1 of the License, or (at your option) any later version.
&gt;+
&gt;+    This library is distributed in the hope that it will be useful,
&gt;+    but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt;+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
&gt;+    Lesser General Public License for more details.
&gt;+
&gt;+    You should have received a copy of the GNU Lesser General Public License
&gt;+    along with this library; if not, write to the Free Software Foundation,
&gt;+    Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
&gt;+*/
&gt;+
&gt;+#ifndef EFLTestView_h
&gt;+#define EFLTestView_h
&gt;+
&gt;+#include &lt;Ecore_Evas.h&gt;
&gt;+#include &lt;Evas.h&gt;
&gt;+
&gt;+namespace EFLUnitTests {
&gt;+
&gt;+class EFLTestEcoreEvas {
&gt;+public:
&gt;+    EFLTestEcoreEvas();
&gt;+    EFLTestEcoreEvas(const char* engine_name, int viewport_x, int viewport_y, int viewport_w, int viewport_h, const char* extra_options);
&gt;+    ~EFLTestEcoreEvas();
&gt;+
&gt;+    Evas* getEvas();
&gt;+    void show();
&gt;+
&gt;+private:
&gt;+    Ecore_Evas* m_ecoreEvas;
&gt;+};
&gt;+
&gt;+class EFLTestView {
&gt;+public:
&gt;+    enum EwkViewType {
&gt;+        SingleView = 0,
&gt;+        TiledView,
&gt;+    };
&gt;+
&gt;+    explicit EFLTestView(Evas*);
&gt;+    EFLTestView(Evas*, const char* url);
&gt;+    EFLTestView(Evas*, EwkViewType, const char* url);
&gt;+    EFLTestView(Evas*, EwkViewType, const char* url, int width, int height);
&gt;+
&gt;+    virtual ~EFLTestView();
&gt;+
&gt;+    Evas_Object* getWebView() { return m_webView; }
&gt;+    Evas_Object* getMainFrame();
&gt;+    Evas* getEvas();
&gt;+    void show();
&gt;+
&gt;+    bool init();
&gt;+    void bindEvents(void (*callback)(void*, Evas_Object*, void*), const char* eventName, void* ptr);
&gt;+protected:
&gt;+    char* createTestUrl(const char* url);
&gt;+private:
&gt;+    EFLTestView(const EFLTestView&amp;);
&gt;+    EFLTestView operator=(const EFLTestView&amp;);
&gt;+
&gt;+    Evas* m_evas;
&gt;+    Evas_Object* m_webView;
&gt;+
&gt;+    char* m_url;
&gt;+    int m_width, m_height;
&gt;+    EwkViewType m_defaultViewType;
&gt;+};
&gt;+
&gt;+}
&gt;+
&gt;+#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486611</commentid>
    <comment_count>13</comment_count>
      <attachid>111574</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2011-10-19 01:28:16 -0700</bug_when>
    <thetext>Created attachment 111574
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528383</commentid>
    <comment_count>14</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-01-01 16:25:06 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; I would also prefer to use as many &quot;native&quot; C++ and WebKit types as possible, so you have bool instead of Eina_Bool where possible, and you use Strings instead of char*&apos;s whose memory you need to manage manually. Speaking of memory management, you could also use OwnPtrs for the Evas_Objects and other pointers so you also don&apos;t need to manage their memory by hand.
&gt; 
&gt; I think it might be a problem using WebKit&apos;s OwnPtrs in unit tests context.
&gt; Tests are linked against WebKit library. Those internals like OwnPtr are not publicly exported.

From the latest patch in bug 68510, the tests actually link against WebCore, JSC and many other libraries, so there should be no problem with using OwnPtr&apos;s.

&gt; Other way I am not sure if is a good idea to mix Evas_Object&apos;s with smart pointers. How do you think ?

What problems do you see? It is already done in other places in ewk and EFL&apos;s DumpRenderTree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528481</commentid>
    <comment_count>15</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-02 05:50:12 -0800</bug_when>
    <thetext>I see potential problems with mixing c++ and c routines regarding to memory management. I don&apos;t mind using OwnPtr to Evas_Object and other structures created by the &quot;new&quot; statement. I rather think about the situation when OwnPtr adopts a pointer crated by the malloc and then it calls a destructor which cleans the pointer by using &quot;delete&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528491</commentid>
    <comment_count>16</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-02 06:18:52 -0800</bug_when>
    <thetext>Regarding to my last post and potential problems, I meant about the situation like as follows:
OwnPtr&lt;Ecore_Evas&gt; ee = adoptPtr(ecore_evas_new(...));
Will OwnPtr call ecore_evas_free, I think it might be a problem.
What do you think about this?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>528543</commentid>
    <comment_count>17</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-01-02 09:30:34 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; Regarding to my last post and potential problems, I meant about the situation like as follows:
&gt; OwnPtr&lt;Ecore_Evas&gt; ee = adoptPtr(ecore_evas_new(...));
&gt; Will OwnPtr call ecore_evas_free, I think it might be a problem.

Was your last sentence actually a question? If so, then yes, OwnPtr will destroy the object with ecore_evas_free (see Sources/JavaScriptCore/wtf/efl/OwnPtrEfl.cpp). Why is that a problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535694</commentid>
    <comment_count>18</comment_count>
      <attachid>122431</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-13 08:28:51 -0800</bug_when>
    <thetext>Created attachment 122431
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535700</commentid>
    <comment_count>19</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-13 08:31:39 -0800</bug_when>
    <thetext>I added new patch. It consists of build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535717</commentid>
    <comment_count>20</comment_count>
      <attachid>122431</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-13 08:59:58 -0800</bug_when>
    <thetext>Comment on attachment 122431
Corrected patch with build scripts and implementation

Attachment 122431 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11236047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536514</commentid>
    <comment_count>21</comment_count>
      <attachid>122623</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-16 06:05:16 -0800</bug_when>
    <thetext>Created attachment 122623
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536518</commentid>
    <comment_count>22</comment_count>
      <attachid>122623</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-01-16 06:17:55 -0800</bug_when>
    <thetext>Comment on attachment 122623
Corrected patch with build scripts and implementation

Attachment 122623 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11255162</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536533</commentid>
    <comment_count>23</comment_count>
      <attachid>122630</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-16 07:03:17 -0800</bug_when>
    <thetext>Created attachment 122630
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536926</commentid>
    <comment_count>24</comment_count>
      <attachid>122725</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-17 00:25:48 -0800</bug_when>
    <thetext>Created attachment 122725
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537147</commentid>
    <comment_count>25</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-01-17 09:13:39 -0800</bug_when>
    <thetext>Hello Raphael would you make a review of this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622925</commentid>
    <comment_count>26</comment_count>
      <attachid>141718</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-05-14 06:41:55 -0700</bug_when>
    <thetext>Created attachment 141718
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627438</commentid>
    <comment_count>27</comment_count>
      <attachid>142656</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-05-18 00:49:56 -0700</bug_when>
    <thetext>Created attachment 142656
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632798</commentid>
    <comment_count>28</comment_count>
      <attachid>142656</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-05-24 07:52:18 -0700</bug_when>
    <thetext>Comment on attachment 142656
Corrected patch with build scripts and implementation

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

One general problem that I see here is that our tests should be written in C, not C++, since the main customer of ours API are C programs. Not sure if this is really a big deal or not, but writing tests in C makes us consumers of our own API and might influence some design decisions.

&gt; Source/WebKit/PlatformEfl.cmake:297
&gt; +    ${EFLDEPS_LIBRARIES}

I don&apos;t think we need to link with all these libraries directly since we are not using it.

&gt; Source/WebKit/PlatformEfl.cmake:305
&gt; +    &quot;${JAVASCRIPTCORE_DIR}/wtf&quot;

Should use &quot;${WTF_DIR}&quot; here instead.

&gt; Source/WebKit/PlatformEfl.cmake:306
&gt; +    &quot;${JAVASCRIPTCORE_DIR}/ForwardingHeaders&quot;

Ditto.

&gt; Source/WebKit/PlatformEfl.cmake:315
&gt; +    ${EFLDEPS_LDFLAGS}

IMO not all are needed here.

&gt; Source/WebKit/PlatformEfl.cmake:329
&gt; +SET(DEFAULT_TEST_PAGE_DIR ${CMAKE_SOURCE_DIR}/Source/WebKit/efl/tests)

I would put it on resources like GTK.

&gt; Source/WebKit/PlatformEfl.cmake:333
&gt; +

I don&apos;t know if efl_test_launcher is a good name for this. If I understood correctly, this is a convenience around gtest, that loads a page for you. Maybe the class should be named EFLTestBase (or EWK?) instead of EFLTestLauncher and the library something like efl_test_utils.

&gt; Source/WebKit/PlatformEfl.cmake:336
&gt; +    ${WEBKIT_DIR}/efl/tests/src/UnitTestLauncher/EFLTestView.cpp

I don&apos;t see a need for this ./src/ folder here.

&gt; Source/WebKit/PlatformEfl.cmake:339
&gt; +SET(EUnitTests_SOURCES

This is a test example right?

I like the approach of having a file named after the subject of the test. The idea here is to test ewk_*.h right? And also would be nice to have one executable per tested API. It will make it easier to debug and find memory leaks. CMake + CTest can take care of creating a global test runner.

What about test_ewk_settings.cpp, test_ewk_view.cpp, etc.?

&gt; Source/WebKit/efl/tests/src/EFLTestsRun.cpp:17
&gt; +*/

Nit, needs a blank line here.

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestLauncher.cpp:42
&gt; +    return true;

What if ewk_init() fails?

return ewk_init(); maybe?

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:24
&gt; +

Nit. I think these headers should be packed and alpha sorted.

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:66
&gt; +{ }

{
}

&gt; Source/WebKit/efl/tests/src/UnitTestLauncher/EFLTestView.cpp:74
&gt; +{ }

Ditto, same for the others bellow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633722</commentid>
    <comment_count>29</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-05-25 02:08:49 -0700</bug_when>
    <thetext>&gt; One general problem that I see here is that our tests should be written in C, 
&gt; not C++, since the main customer of ours API are C programs. Not sure if this
&gt; is really a big deal or not, but writing tests in C makes us consumers of our
&gt; own API and might influence some design decisions.

What do you mean that tests should be written in C?.
Generally if you look at the example tests sources (EwkUriTests.cpp), there are no any specific C++ features.
I guess, you probably thought about EFLTestView.h and &quot;explicit&quot; keyword.
I agree with you that our main targets are C programs, so in this case mixing C++ may not be a good idea.
It will not be a big effort to tailor it for our needs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642409</commentid>
    <comment_count>30</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-06 06:15:57 -0700</bug_when>
    <thetext>&gt;&gt; Source/WebKit/PlatformEfl.cmake:329
&gt;&gt; +SET(DEFAULT_TEST_PAGE_DIR ${CMAKE_SOURCE_DIR}/Source/WebKit/efl/tests)

&gt;I would put it on resources like GTK.

Do you mean resources as a separate folder under &quot;tests&quot; directory and change the path to DEFAULT_TEST_PAGE_DIR ?. What I see, GTK does it similar, but resources are under ./WebKit/gtk/ and access to this path is via some WebCore&apos;s API.

GTK&apos;s solution could be done as a next step, since it requires some discussion. I think having DEFAULT_TEST_PAGE_DIR under ./efl/tests directory looks good, since it&apos;s internal part of unit tests.

&gt; What about test_ewk_settings.cpp, test_ewk_view.cpp, etc.?

I also thought about this, but on the other way, it might cause some mess. It wouldn&apos;t be readable. What do you think ?. One function can have couple of test cases and it&apos;s good to have them in one file for further debugging and understanding.
What do you think, if we have separate folders for each test&apos;s category under WebKit/efl/tests/. Example ./WebKit/efl/tests/ewk_view. All the test related to ewk_view API would be placed there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642421</commentid>
    <comment_count>31</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-06 06:42:16 -0700</bug_when>
    <thetext>&gt; &gt; What about test_ewk_settings.cpp, test_ewk_view.cpp, etc.?
&gt; 
&gt; I also thought about this, but on the other way, it might cause some mess. It wouldn&apos;t be readable. What do you think ?. One function can have couple of test cases and it&apos;s good to have them in one file for further debugging and understanding.
&gt; What do you think, if we have separate folders for each test&apos;s category under WebKit/efl/tests/. Example ./WebKit/efl/tests/ewk_view. All the test related to ewk_view API would be placed there.

I like the idea of using a prefix because it is easier for the test runner to list what has to be executed.

I&apos;m fine on using: prefix_realm.cpp (test_settings.cpp, test_localization.cpp, test_webview.cpp, test_view_single.cpp, test_view_tiled.cpp, etc). But I don&apos;t think that a separated folder is necessary since it is likely that most of the folders will have just one file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642430</commentid>
    <comment_count>32</comment_count>
      <attachid>146014</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-06 06:59:48 -0700</bug_when>
    <thetext>Created attachment 146014
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642465</commentid>
    <comment_count>33</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-06 07:53:21 -0700</bug_when>
    <thetext>&gt; I like the idea of using a prefix because it is easier for the test runner to list what has to be executed.

&gt; I&apos;m fine on using: prefix_realm.cpp (test_settings.cpp, test_localization.cpp, test_webview.cpp, test_view_single.cpp, test_view_tiled.cpp, etc). 
&gt; But I don&apos;t think that a separated folder is necessary since it is likely that most of the folders will have just one file.


Folders would have test cases. In this solution one test file would test one API&apos;s function. One test file might have several test cases.
Generally I also agree with having test_webview.cpp, etc. My only concerns was readability and tests&apos;s management.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642485</commentid>
    <comment_count>34</comment_count>
      <attachid>146014</attachid>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-06 08:13:39 -0700</bug_when>
    <thetext>Comment on attachment 146014
Corrected patch with build scripts and implementation

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

&gt; Source/WebKit/PlatformEfl.cmake:318
&gt; +    &quot;${WEBKIT_DIR}/efl/tests/src/UnitTestLauncher&quot;

UnitTestLauncher does not exists

&gt; Source/WebKit/PlatformEfl.cmake:320
&gt; +    &quot;${WTF_DIR}/ForwardingHeaders&quot;

${WTF_DIR}/ForwardingHeaders does not exists

&gt; Source/WebKit/PlatformEfl.cmake:370
&gt; +    ADD_EXECUTABLE(bin/${testName} ${WEBKIT_EFL_TEST_DIR}/${testName}.cpp ${WEBKIT_EFL_TEST_DIR}/EwkTestsMain.cpp)

IMO is important to prefix the tests with something. We will get here:

$ ls WebKitBuild/Debug/bin/
DumpRenderTree
EWebLauncher
EwkViewUriGetTest
EwkViewEditableGetTest
ImageDiff
jsc


I personally would like to see something more intuitive like:

$ ls WebKitBuild/Debug/bin/
DumpRenderTree
EWebLauncher
ImageDiff
jsc
test_EwkViewUriGetTest
test_EwkViewEditableGetTest

&gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestBase.h:51
&gt; +#define EFL_SHUTDOWN()  \

EFL_SHUTDOWN* macros are not in use.

&gt; Source/WebKit/efl/tests/default_test_page.html:1
&gt; +&lt;HTML&gt;

I still don&apos;t like the idea of mixing test &quot;resources&quot; with source code. IMO it should be placed in:
Source/WebKit/efl/tests/resources/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642506</commentid>
    <comment_count>35</comment_count>
      <attachid>146014</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-06 08:52:11 -0700</bug_when>
    <thetext>Comment on attachment 146014
Corrected patch with build scripts and implementation

Attachment 146014 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12906634</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647861</commentid>
    <comment_count>36</comment_count>
      <attachid>147276</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-13 03:29:38 -0700</bug_when>
    <thetext>Created attachment 147276
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648184</commentid>
    <comment_count>37</comment_count>
      <attachid>147276</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-13 10:06:58 -0700</bug_when>
    <thetext>Comment on attachment 147276
Corrected patch with build scripts and implementation

Attachment 147276 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12953234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649056</commentid>
    <comment_count>38</comment_count>
      <attachid>147550</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-14 03:51:02 -0700</bug_when>
    <thetext>Created attachment 147550
Corrected patch with build scripts and implementation - correcting build problems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652469</commentid>
    <comment_count>39</comment_count>
      <attachid>148338</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-19 08:24:30 -0700</bug_when>
    <thetext>Created attachment 148338
Corrected patch with build scripts and implementation - updating</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653323</commentid>
    <comment_count>40</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-20 03:28:13 -0700</bug_when>
    <thetext>Patch looks great to me. Just tried the last version on my machine. Thank you for this important QA tool that will help a lot to stabilize EFL public API&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653361</commentid>
    <comment_count>41</comment_count>
      <attachid>148338</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-06-20 05:28:09 -0700</bug_when>
    <thetext>Comment on attachment 148338
Corrected patch with build scripts and implementation - updating

This patch is important for WebKit-EFL but before landing it requires some changes especially in styles. Please use CamelCase coding styles for variables.

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

&gt; Source/WebKit/efl/ChangeLog:6
&gt; +        Patch by Krzysztof Czech &lt;k.czech@samsung.com&gt;, Tomasz Morawski &lt;t.morawski@samsung.com&gt; on 2012-01-16

If those changes are made by two developers please mention about it in first line of ChangeLog.

&gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestConfig.h:26
&gt; +static const char* defaultThemePath = DEFAULT_THEME_PATH&quot;/default.edj&quot;;

For initialization like this it&apos;s recommend to use tables instead of pointers.
static const char* defaultThemePath = .... -&gt; static const char defaultThemePath[] = ...

&gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestConfig.h:27
&gt; +static const char* defaultTestPage = &quot;file://&quot;DEFAULT_TEST_PAGE_DIR&quot;/default_test_page.html&quot;;

Ditto.

&gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestView.cpp:29
&gt; +EWKTestEcoreEvas::EWKTestEcoreEvas()

I think that this constructor isn&apos;t needed if we can call EWKTestEcoreEvas::EWKTestEcoreEvas(1) with the same result. It&apos;s better to add a default value of constructor&apos;s parameter.

&gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestView.cpp:103
&gt; +EWKTestView::~EWKTestView()

Can be removed.

&gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestView.h:55
&gt; +    virtual ~EWKTestView();

virtual is not needed in this case.

&gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestView.h:57
&gt; +    Evas_Object* getWebView() { return m_webView.get(); }

WebKit doesn&apos;t use get prefixes (only for setter set prefix is added).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653378</commentid>
    <comment_count>42</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-20 06:02:22 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestConfig.h:26
&gt; &gt; +static const char* defaultThemePath = DEFAULT_THEME_PATH&quot;/default.edj&quot;;
&gt; 
&gt; For initialization like this it&apos;s recommend to use tables instead of pointers.
&gt; static const char* defaultThemePath = .... -&gt; static const char defaultThemePath[] = ...

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653557</commentid>
    <comment_count>43</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-20 09:42:33 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; &gt; &gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestConfig.h:26
&gt; &gt; &gt; +static const char* defaultThemePath = DEFAULT_THEME_PATH&quot;/default.edj&quot;;
&gt; &gt; 
&gt; &gt; For initialization like this it&apos;s recommend to use tables instead of pointers.
&gt; &gt; static const char* defaultThemePath = .... -&gt; static const char defaultThemePath[] = ...
&gt; 
&gt; Why?

I&apos;m also wondering why it is recommended of using char arrays to char pointers ?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654301</commentid>
    <comment_count>44</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-06-21 00:52:44 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #42)
&gt; &gt; &gt; &gt; Source/WebKit/efl/tests/UnitTestUtils/EWKTestConfig.h:26
&gt; &gt; &gt; &gt; +static const char* defaultThemePath = DEFAULT_THEME_PATH&quot;/default.edj&quot;;
&gt; &gt; &gt; 
&gt; &gt; &gt; For initialization like this it&apos;s recommend to use tables instead of pointers.
&gt; &gt; &gt; static const char* defaultThemePath = .... -&gt; static const char defaultThemePath[] = ...
&gt; &gt; 
&gt; &gt; Why?
&gt; 
&gt; I&apos;m also wondering why it is recommended of using char arrays to char pointers ?.

I am not C pedantic but this issue has been discussed a lot. You&apos;re declaring the pointer and it&apos;s initialized to point to a string constant but the pointer may subsequently be modified to point elsewhere. It can&apos;t be done if you define the string as an array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654333</commentid>
    <comment_count>45</comment_count>
      <attachid>148752</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-21 02:23:07 -0700</bug_when>
    <thetext>Created attachment 148752
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654338</commentid>
    <comment_count>46</comment_count>
      <attachid>148755</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-21 02:50:44 -0700</bug_when>
    <thetext>Created attachment 148755
Corrected patch with build scripts and implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654375</commentid>
    <comment_count>47</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2012-06-21 04:27:34 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; Created an attachment (id=148755) [details]
&gt; Corrected patch with build scripts and implementation

LGTM! Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657757</commentid>
    <comment_count>48</comment_count>
      <attachid>148755</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2012-06-26 11:10:57 -0700</bug_when>
    <thetext>Comment on attachment 148755
Corrected patch with build scripts and implementation

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

Very nice! I am looking forward to seeing the unit tests up and running.

&gt; Source/WebKit/efl/ChangeLog:10
&gt; +        of each test.

Could you please fix the line wrapping above?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658600</commentid>
    <comment_count>49</comment_count>
      <attachid>149747</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-27 07:48:32 -0700</bug_when>
    <thetext>Created attachment 149747
Corrected patch with build scripts and implementation - updating</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659062</commentid>
    <comment_count>50</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-06-27 18:23:55 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; Created an attachment (id=149747) [details]
&gt; Corrected patch with build scripts and implementation - updating

Chang Shu already set r+. So, you don&apos;t need to request review again. Please request cq? again after adding reviewer name to ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659084</commentid>
    <comment_count>51</comment_count>
      <attachid>149747</attachid>
    <who name="Chang Shu">cshu</who>
    <bug_when>2012-06-27 19:00:59 -0700</bug_when>
    <thetext>Comment on attachment 149747
Corrected patch with build scripts and implementation - updating

For your convenience. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659095</commentid>
    <comment_count>52</comment_count>
      <attachid>149747</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-27 19:17:55 -0700</bug_when>
    <thetext>Comment on attachment 149747
Corrected patch with build scripts and implementation - updating

Clearing flags on attachment: 149747

Committed r121398: &lt;http://trac.webkit.org/changeset/121398&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659096</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-27 19:18:04 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659205</commentid>
    <comment_count>54</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-27 22:30:57 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 90136</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659216</commentid>
    <comment_count>55</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-06-27 22:39:17 -0700</bug_when>
    <thetext>I am not sure why this got the green bot.

I got below error message.

/usr/bin/ld: ../../lib/libewkTestUtils.a(EWKTestBase.cpp.o): undefined reference to symbol &apos;ecore_main_loop_quit&apos;
/usr/bin/ld: note: &apos;ecore_main_loop_quit&apos; is defined in DSO /home/ryuan/workspace/webkit/efl-webkit/WebKitBuild/Dependencies/Root/lib/libecore.so so try adding it to the linker command line
/home/ryuan/workspace/webkit/efl-webkit/WebKitBuild/Dependencies/Root/lib/libecore.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[2]: *** [bin/test_ewk_view] Error 1
make[1]: *** [Source/WebKit/CMakeFiles/bin/test_ewk_view.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[100%] Built target ewebkit2
make: *** [all] Error 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659225</commentid>
    <comment_count>56</comment_count>
      <attachid>149747</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-06-27 22:56:53 -0700</bug_when>
    <thetext>Comment on attachment 149747
Corrected patch with build scripts and implementation - updating

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

Additionally, I found some nit to cleanup.

&gt; Source/WebKit/PlatformEfl.cmake:340
&gt; +        ${Gdk_LIBRARIES}

We don&apos;t use Gdk. so it should be removed.

&gt; Source/WebKit/PlatformEfl.cmake:367
&gt; +    ADD_EXECUTABLE(bin/${testName} ${WEBKIT_EFL_TEST_DIR}/${testName}.cpp ${WEBKIT_EFL_TEST_DIR}/test_runner.cpp)
&gt; +    TARGET_LINK_LIBRARIES(bin/${testName} ${EWKUnitTests_LIBRARIES} ewkTestUtils gtest pthread)
&gt; +    ADD_TARGET_PROPERTIES(bin/${testName} LINK_FLAGS &quot;${EWKUnitTests_LINK_FLAGS}&quot;)
&gt; +    SET_TARGET_PROPERTIES(bin/${testName} PROPERTIES FOLDER &quot;WebKit&quot;)
&gt; +    SET_TARGET_PROPERTIES(bin/${testName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY &quot;${CMAKE_BINARY_DIR}&quot;)

We removed &apos;bin/&apos; because EXEC_INSTALL_DIR was given in OptionsCommon.cmake.
And please remove RUNTIME_OUTPUT_DIRECTORY also.

Please refer to http://trac.webkit.org/changeset/120024 .

&gt; +    TARGET_LINK_LIBRARIES(bin/${testName} ${EWKUnitTests_LIBRARIES} ewkTestUtils gtest pthread)
Can you test whether pthread is really required ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659511</commentid>
    <comment_count>57</comment_count>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-28 08:22:58 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; (From update of attachment 149747 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149747&amp;action=review
&gt; 
&gt; Additionally, I found some nit to cleanup.
&gt; 
&gt; &gt; Source/WebKit/PlatformEfl.cmake:340
&gt; &gt; +        ${Gdk_LIBRARIES}
&gt; 
&gt; We don&apos;t use Gdk. so it should be removed.
&gt; 
&gt; &gt; Source/WebKit/PlatformEfl.cmake:367
&gt; &gt; +    ADD_EXECUTABLE(bin/${testName} ${WEBKIT_EFL_TEST_DIR}/${testName}.cpp ${WEBKIT_EFL_TEST_DIR}/test_runner.cpp)
&gt; &gt; +    TARGET_LINK_LIBRARIES(bin/${testName} ${EWKUnitTests_LIBRARIES} ewkTestUtils gtest pthread)
&gt; &gt; +    ADD_TARGET_PROPERTIES(bin/${testName} LINK_FLAGS &quot;${EWKUnitTests_LINK_FLAGS}&quot;)
&gt; &gt; +    SET_TARGET_PROPERTIES(bin/${testName} PROPERTIES FOLDER &quot;WebKit&quot;)
&gt; &gt; +    SET_TARGET_PROPERTIES(bin/${testName} PROPERTIES RUNTIME_OUTPUT_DIRECTORY &quot;${CMAKE_BINARY_DIR}&quot;)
&gt; 
&gt; We removed &apos;bin/&apos; because EXEC_INSTALL_DIR was given in OptionsCommon.cmake.
&gt; And please remove RUNTIME_OUTPUT_DIRECTORY also.
&gt; 
&gt; Please refer to http://trac.webkit.org/changeset/120024 .
&gt; 
&gt; &gt; +    TARGET_LINK_LIBRARIES(bin/${testName} ${EWKUnitTests_LIBRARIES} ewkTestUtils gtest pthread)
&gt; Can you test whether pthread is really required ?
Yes pthread is required, gtest library depends on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660497</commentid>
    <comment_count>58</comment_count>
      <attachid>150180</attachid>
    <who name="Krzysztof Czech">k.czech</who>
    <bug_when>2012-06-29 08:12:13 -0700</bug_when>
    <thetext>Created attachment 150180
Corrected patch with build scripts and implementation - updating</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660882</commentid>
    <comment_count>59</comment_count>
      <attachid>150180</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2012-06-29 17:27:13 -0700</bug_when>
    <thetext>Comment on attachment 150180
Corrected patch with build scripts and implementation - updating

Thank you.
I double checked in my local.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660908</commentid>
    <comment_count>60</comment_count>
      <attachid>150180</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 18:20:35 -0700</bug_when>
    <thetext>Comment on attachment 150180
Corrected patch with build scripts and implementation - updating

Clearing flags on attachment: 150180

Committed r121608: &lt;http://trac.webkit.org/changeset/121608&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660909</commentid>
    <comment_count>61</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 18:20:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108121</attachid>
            <date>2011-09-21 01:30:48 -0700</date>
            <delta_ts>2011-10-05 02:39:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>webkit-efl-unit-tests-sources.patch</filename>
            <type>text/plain</type>
            <size>20728</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwppbmRleCA2OWM2MGEyLi5jNjMzNmM3IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTEtMDktMjEgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gSW1wbGVtZW50YXRpb24gb2YgVW5pdCBUZXN0cyBm
cmFtZXdvcmsgZm9yIHRoZSBXZWJLaXQtRWZsIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVuaXQgVGVzdHMgZm9yIHRoZSBXZWJLaXQtRWZsIHBv
cnQgYXJlIGJhc2VkIG9uIHRoZSBndGVzdCBsaWJyYXJ5LgorICAgICAgICBUaGVyZSdzIGFsc28g
YmVlbiBhZGRlZCBhIHNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGVzdHMgdGhhdCByZXF1
aXJlIGluc3RhbmNlIG9mIGEgd2VidmlldworICAgICAgICBhbmQgZXhhbXBsZSBvZiB1bml0IHRl
c3RzLgorCisgICAgICAgICogdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcDogQWRkZWQuCisgICAgICAgIChtYWlu
KToKKyAgICAgICAgKiB0ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHA6IEFkZGVkLgorICAg
ICAgICAoZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAg
ICogdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChld2tVcmlTZXRU
ZXN0Q2FsbGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRU
ZXN0TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMv
VW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVG
TFVuaXRUZXN0czo6RUZMVGVzdExhdW5jaGVyOjppbml0KToKKyAgICAgICAgKEVGTFVuaXRUZXN0
czo6RUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpF
RkxUZXN0TGF1bmNoZXI6OmVuZFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
TGF1bmNoZXI6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1
bmNoZXI6OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VG
TFRlc3RMYXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVu
Y2hlci9FRkxUZXN0Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxU
ZXN0RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6
RUZMVGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRl
c3RzOjpFRkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6
RUZMVGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RW
aWV3OjpFRkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+
RUZMVGVzdFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6Y3JlYXRl
VGVzdFVybCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojppbml0KToKKyAg
ICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6OnNob3cpOgorICAgICAgICAoRUZMVW5p
dFRlc3RzOjpFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKToKKyAgICAgICAgKEVGTFVuaXRUZXN0
czo6RUZMVGVzdFZpZXc6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
Vmlldzo6YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIv
RUZMVGVzdFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3
OjpnZXRXZWJWaWV3KToKKwogMjAxMS0wOS0xNyAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBGcmFtZUxvYWRlckNsaWVudCBCYWNrRm9yd2FyZExpc3Qt
cmVsYXRlZCBtZXRob2RzIGFyZSB1bnN1ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9k
ZWZhdWx0X3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmVkZDgxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZh
dWx0X3Rlc3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBh
bGlnbj0iY2VudGVyIj5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVm
YXVsdCBUZXN0aW5nIFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmM2YTVkYjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBH
TlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKwor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKK3sKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgICBy
ZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
c3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmRiNmY0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9z
cmMvRXdrRWRpdGFibGVUZXN0cy5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQor
ICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5j
bHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisKK3ZvaWQg
ZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVjdCogbywg
dm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgZXdrX3ZpZXdfZWRpdGFibGVfc2V0
KG8sIEVJTkFfRkFMU0UpKTsKKyAgICBFWFBFQ1RfRVEoRUlOQV9GQUxTRSwgZXdrX3ZpZXdfZWRp
dGFibGVfZ2V0KG8pKTsKKyAgICBFTkRfVEVTVCgpOworfQorCitURVNUKEV3a0VkaXRhYmxlVGVz
dHMsIEVkaXRhYmxlU2V0VGVzdCkKK3sKKyAgICBSVU5fVEVTVChlZGl0YWJsZVNldFRlc3RDYWxs
YmFjaywgImxvYWQsZmluaXNoZWQiLCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9z
cmMvRXdrVXJpVGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1
ODE1ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdr
VXJpVGVzdHMuY3BwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1
aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgIkVGTFRl
c3RMYXVuY2hlci5oIgorI2luY2x1ZGUgIkVXZWJLaXQuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgRUZMVW5pdFRlc3RzOworCit2b2lkIGV3a1VyaVNldFRl
c3RDYWxsYmFjayh2b2lkKiBldmVudEluZm8sIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQor
eworICAgIEVYUEVDVF9TVFJFUSgiaHR0cDovL3d3dy53ZWJraXQub3JnLyIsIGV3a192aWV3X3Vy
aV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RFU1QoRXdrVXJpVGVzdHMsIEV3a1Vy
aVNldFRlc3QpCit7CisgICAgUlVOX1RFU1QoImh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIGV3a1Vy
aVNldFRlc3RDYWxsYmFjaywgImxvYWQsZmluaXNoZWQiLCAwKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcu
aCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RD
b25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNmY2I2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdENvbmZpZy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBF
RkxUZXN0Q29uZmlnX2gKKyNkZWZpbmUgRUZMVGVzdENvbmZpZ19oCisKK25hbWVzcGFjZSBFRkxV
bml0VGVzdHMgeworbmFtZXNwYWNlIENvbmZpZyB7CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRW
aWV3V2lkdGggPSA2MDA7CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3SGVpZ2h0ID0gODAw
Oworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRUaGVtZVBhdGggPSBERUZBVUxUX1RIRU1FX1BB
VEgiL2RlZmF1bHQuZWRqIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0VGVzdFBhZ2UgPSAi
ZmlsZTovLyJERUZBVUxUX1RFU1RfUEFHRV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwiOwor
fQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZDM0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIu
Y3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwg
Qm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkVGTFRlc3RMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiRUZMVGVzdENvbmZpZy5oIgor
I2luY2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorCisjaW5jbHVk
ZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RWluYS5oPgorCituYW1l
c3BhY2UgRUZMVW5pdFRlc3RzIHsKKworRWluYV9Cb29sIEVGTFRlc3RMYXVuY2hlcjo6aW5pdCgp
Cit7CisgICAgaWYgKCFlY29yZV9ldmFzX2luaXQoKSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisKKyAgICBpZiAoIWVkamVfaW5pdCgpKSB7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRv
d24oKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorICAgIGV3a19pbml0KCk7
CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnN0YXJ0
VGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Cit9CisKK3ZvaWQgRUZMVGVz
dExhdW5jaGVyOjplbmRUZXN0KCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworfQor
CitFaW5hX0Jvb2wgRUZMVGVzdExhdW5jaGVyOjpjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVybCwg
dm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0
IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgRUZMX0lOSVRfUkVU
KCk7CisKKyAgICBFRkxUZXN0RWNvcmVFdmFzIGV2YXM7CisgICAgaWYgKCFldmFzLmdldEV2YXMo
KSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgZXZhcy5zaG93KCk7CisKKyAgICBF
RkxUZXN0VmlldyB2aWV3KGV2YXMuZ2V0RXZhcygpLCB1cmwpOworICAgIGlmICghdmlldy5pbml0
KCkpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgdmlldy5iaW5kRXZlbnRzKGV2
ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKKyAgICB2aWV3LnNob3coKTsK
KworICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFf
Qm9vbCBFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3Qodm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2
ZW50X2RhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRlc3QoRUZMVW5pdFRlc3RzOjpDb25maWc6
OmRlZmF1bHRUZXN0UGFnZSwgZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEp
OworfQorCitFaW5hX0Jvb2wgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHVy
bCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNv
bnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZVRlc3QodXJsLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExh
dW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1Vu
aXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTZlZmZlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFRkxUZXN0TGF1bmNoZXJfaAorI2RlZmluZSBFRkxU
ZXN0TGF1bmNoZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgR1RFU1RfVEVTVF9G
UkFNRVdPUksKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2VuZGlmCisKKyNpZmRlZiBHVEVT
VF9URVNUX0ZSQU1FV09SSworICAgICNkZWZpbmUgUlVOX1RFU1QoYXJncy4uLikgICBcCisgICAg
ICAgIGRvIHsgICAgXAorICAgICAgICAgICAgQVNTRVJUX0VRKEVJTkFfVFJVRSwgRUZMVGVzdExh
dW5jaGVyOjpydW5UZXN0KGFyZ3MpKTsgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorI2Vsc2UK
KyAgICAjZGVmaW5lIFJVTl9URVNUKGFyZ3MuLi4pICAgXAorICAgIGRvIHsgICAgXAorICAgICAg
ICBFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3QoYXJncyk7IFwKKyAgICB9IHdoaWxlICgwKQorI2Vu
ZGlmCisKKyNkZWZpbmUgU1RBUlRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAg
RUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QoKTsgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2Rl
ZmluZSBFTkRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5j
aGVyOjplbmRUZXN0KCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklUX1JF
VCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIGlmICghRUZMVGVzdExhdW5jaGVyOjppbml0
KCkpICAgXAorICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7ICAgIFwKKyAgICB9IHdoaWxl
ICgwKQorCisjZGVmaW5lIEVGTF9JTklUKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZM
VGVzdExhdW5jaGVyOjppbml0KCk7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCituYW1lc3BhY2Ug
RUZMVW5pdFRlc3RzIHsKKworY2xhc3MgRUZMVGVzdExhdW5jaGVyIHsKKyAgICBzdGF0aWMgRWlu
YV9Cb29sIGNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2sp
KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9p
ZCogZXZlbnRfZGF0YSk7CitwdWJsaWM6CisgICAgc3RhdGljIEVpbmFfQm9vbCBpbml0KCk7Cisg
ICAgc3RhdGljIHZvaWQgc3RhcnRUZXN0KCk7CisgICAgc3RhdGljIHZvaWQgZW5kVGVzdCgpOwor
CisgICAgc3RhdGljIEVpbmFfQm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2
ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2
ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworICAgIHN0YXRpYyBFaW5hX0Jvb2wgcnVuVGVz
dCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29u
c3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0
TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFmNjMxYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9z
cmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKQEAgLTAsMCArMSwxNzcgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
U2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVT
QQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisK
KyNpbmNsdWRlICJFRkxUZXN0Q29uZmlnLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorCisjaW5j
bHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9GaWxlLmg+CisjaW5jbHVkZSA8RWRqZS5o
PgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCituYW1lc3BhY2Ug
RUZMVW5pdFRlc3RzIHsKKworRUZMVGVzdEVjb3JlRXZhczo6RUZMVGVzdEVjb3JlRXZhcygpCisg
ICAgOiBtX2Vjb3JlX2V2YXMoMCkKK3sKKyAgICBtX2Vjb3JlX2V2YXMgPSBlY29yZV9ldmFzX25l
dygwLCAwLCAwLCBFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCwgRUZMVW5p
dFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0LCAwKTsKK30KKworRUZMVGVzdEVjb3Jl
RXZhczo6RUZMVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyICplbmdpbmVfbmFtZSwgaW50IHZpZXdw
b3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRfdywgaW50IHZpZXdwb3J0X2gsIGNv
bnN0IGNoYXIgKmV4dHJhX29wdGlvbnMpCisgICAgOiBtX2Vjb3JlX2V2YXMoMCkKK3sKKyAgICBt
X2Vjb3JlX2V2YXMgPSBlY29yZV9ldmFzX25ldyhlbmdpbmVfbmFtZSwgdmlld3BvcnRfeCwgdmll
d3BvcnRfeSwgdmlld3BvcnRfdywgdmlld3BvcnRfaCwgZXh0cmFfb3B0aW9ucyk7Cit9CisKK0VG
TFRlc3RFY29yZUV2YXM6On5FRkxUZXN0RWNvcmVFdmFzKCkKK3sKKyAgICBpZiAobV9lY29yZV9l
dmFzKQorICAgICAgICBlY29yZV9ldmFzX2ZyZWUobV9lY29yZV9ldmFzKTsKK30KKworRXZhcyog
RUZMVGVzdEVjb3JlRXZhczo6Z2V0RXZhcygpCit7CisgICAgaWYgKG1fZWNvcmVfZXZhcykKKyAg
ICAgICAgcmV0dXJuIGVjb3JlX2V2YXNfZ2V0KG1fZWNvcmVfZXZhcyk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgRUZMVGVzdEVjb3JlRXZhczo6c2hvdygpCit7CisgICAgaWYgKG1fZWNvcmVf
ZXZhcykKKyAgICAgICAgZWNvcmVfZXZhc19zaG93KG1fZWNvcmVfZXZhcyk7Cit9CisKK0VGTFRl
c3RWaWV3OjpFRkxUZXN0VmlldyhFdmFzKiBldmFzKQorICAgIDogbV93ZWJWaWV3KDApCisgICAg
LCBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKDApCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZShU
aWxlZFZpZXcpCisgICAgLCBtX3dpZHRoKEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmll
d1dpZHRoKQorICAgICwgbV9oZWlnaHQoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3
SGVpZ2h0KQoreworICAgIG1fdXJsID0gY3JlYXRlVGVzdFVybChFRkxVbml0VGVzdHM6OkNvbmZp
Zzo6ZGVmYXVsdFRlc3RQYWdlKTsKK30KKworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMg
KmV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fd2ViVmlldygwKQorICAgICwgbV9ldmFz
KGV2YXMpCisgICAgLCBtX3VybCgwKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3
KQorICAgICwgbV93aWR0aChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkK
KyAgICAsIG1faGVpZ2h0KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkK
K3sKKyAgICBtX3VybCA9IGNyZWF0ZVRlc3RVcmwodXJsKTsKK30KKworRUZMVGVzdFZpZXc6OkVG
TFRlc3RWaWV3KEV2YXMgKmV2YXMsIEV3a1ZpZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCkK
KyAgICA6IG1fd2ViVmlldygwKQorICAgICwgbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCgwKQor
ICAgICwgbV9kZWZhdWx0Vmlld1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRlc3Rz
OjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVzdHM6
OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7CisgICAgbV91cmwgPSBjcmVhdGVUZXN0VXJs
KHVybCk7Cit9CisKK0VGTFRlc3RWaWV3OjpFRkxUZXN0VmlldyhFdmFzICpldmFzLCBFd2tWaWV3
VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICA6
IG1fd2ViVmlldygwKQorICAgICwgbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCgwKQorICAgICwg
bV9kZWZhdWx0Vmlld1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgLCBtX2hl
aWdodChoZWlnaHQpCit7CisgICAgbV91cmwgPSBjcmVhdGVUZXN0VXJsKHVybCk7Cit9CisKK0VG
TFRlc3RWaWV3Ojp+RUZMVGVzdFZpZXcoKQoreworICAgIGlmIChtX3dlYlZpZXcpCisgICAgICAg
IGV2YXNfb2JqZWN0X2RlbChtX3dlYlZpZXcpOworICAgIGZyZWUobV91cmwpOworfQorCitjaGFy
KiBFRkxUZXN0Vmlldzo6Y3JlYXRlVGVzdFVybChjb25zdCBjaGFyKiB1cmwpCit7CisgICAgaWYg
KHVybCkKKyAgICAgICAgcmV0dXJuIHN0cmR1cCh1cmwpOworICAgIHJldHVybiAwOworfQorCitF
aW5hX0Jvb2wgRUZMVGVzdFZpZXc6OmluaXQoKQoreworICAgIGlmICghbV9ldmFzIHx8ICFtX3Vy
bCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBzd2l0Y2ggKG1fZGVmYXVsdFZp
ZXdUeXBlKSB7CisgICAgY2FzZSBTaW5nbGVWaWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBld2tf
dmlld19zaW5nbGVfYWRkKG1fZXZhcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUaWxl
ZFZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGV3a192aWV3X3RpbGVkX2FkZChtX2V2YXMpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CisKKyAgICBld2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3LCBFRkxV
bml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFRoZW1lUGF0aCk7CisgICAgZXdrX3ZpZXdfdXJpX3Nl
dChtX3dlYlZpZXcsIG1fdXJsKTsKK30KKwordm9pZCBFRkxUZXN0Vmlldzo6c2hvdygpCit7Cisg
ICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVybjsKKyAgICBldmFzX29iamVjdF9yZXNp
emUobV93ZWJWaWV3LCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgZXZhc19vYmplY3Rfc2hvdyht
X3dlYlZpZXcpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dlYlZpZXcsIEVJTkFfVFJV
RSk7Cit9CisKK0V2YXNfT2JqZWN0KiBFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKCkKK3sKKyAg
ICBpZiAobV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQo
bV93ZWJWaWV3KTsKKyAgICByZXR1cm4gMDsKK30KKworRXZhcyogRUZMVGVzdFZpZXc6OmdldEV2
YXMoKQoreworICAgIGlmIChtX3dlYlZpZXcpCisgICAgICAgIHJldHVybiBldmFzX29iamVjdF9l
dmFzX2dldChtX3dlYlZpZXcpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEVGTFRlc3RWaWV3
OjpiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCop
LCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIW1fd2ViVmll
dykKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVs
KG1fd2ViVmlldywgZXZlbnROYW1lLCBjYWxsYmFjayk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKG1fd2ViVmlldywgZXZlbnROYW1lLCBjYWxsYmFjaywgcHRyKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExh
dW5jaGVyL0VGTFRlc3RWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OGJkYjdjNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl
IEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLwor
CisjaWZuZGVmIEVGTFRlc3RWaWV3X2gKKyNkZWZpbmUgRUZMVGVzdFZpZXdfaAorCisjaW5jbHVk
ZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKworbmFtZXNwYWNlIEVGTFVuaXRU
ZXN0cyB7CisKK2NsYXNzIEVGTFRlc3RFY29yZUV2YXMgeworcHVibGljOgorICAgIEVGTFRlc3RF
Y29yZUV2YXMoKTsKKyAgICBFRkxUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIgKmVuZ2luZV9uYW1l
LCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmll
d3BvcnRfaCwgY29uc3QgY2hhciAqZXh0cmFfb3B0aW9ucyk7CisgICAgfkVGTFRlc3RFY29yZUV2
YXMoKTsKKworICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKworcHJpdmF0
ZToKKyAgICBFY29yZV9FdmFzICptX2Vjb3JlX2V2YXM7Cit9OworCitjbGFzcyBFRkxUZXN0Vmll
dyB7CitwdWJsaWM6CisgICAgZW51bSBFd2tWaWV3VHlwZSB7CisgICAgICAgIFNpbmdsZVZpZXcg
PSAwLAorICAgICAgICBUaWxlZFZpZXcsCisgICAgfTsKKworICAgIGV4cGxpY2l0IEVGTFRlc3RW
aWV3KEV2YXMqKTsKKyAgICBFRkxUZXN0VmlldyhFdmFzKiwgY29uc3QgY2hhciogdXJsKTsKKyAg
ICBFRkxUZXN0VmlldyhFdmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCk7CisgICAg
RUZMVGVzdFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIH5FRkxUZXN0VmlldygpOworCisgICAgRXZh
c19PYmplY3QqIGdldFdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXc7IH0KKyAgICBFdmFzX09i
amVjdCogZ2V0TWFpbkZyYW1lKCk7CisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZvaWQgc2hv
dygpOworCisgICAgRWluYV9Cb29sIGluaXQoKTsKKyAgICB2b2lkIGJpbmRFdmVudHModm9pZCAo
KmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgdm9pZCogcHRyKTsKK3Byb3RlY3RlZDoKKyAgICBjaGFyKiBjcmVhdGVUZXN0VXJsKGNv
bnN0IGNoYXIqIHVybCk7Citwcml2YXRlOgorICAgIEVGTFRlc3RWaWV3KGNvbnN0IEVGTFRlc3RW
aWV3Jik7CisgICAgRUZMVGVzdFZpZXcgb3BlcmF0b3I9KGNvbnN0IEVGTFRlc3RWaWV3Jik7CisK
KyAgICBFdmFzKiBtX2V2YXM7CisgICAgRXZhc19PYmplY3QqIG1fd2ViVmlldzsKKworICAgIGNo
YXIqIG1fdXJsOworICAgIGludCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBt
X2RlZmF1bHRWaWV3VHlwZTsKK307CisKK30KKworI2VuZGlmCg==
</data>
<flag name="review"
          id="105011"
          type_id="1"
          status="-"
          setter="rakuco"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109766</attachid>
            <date>2011-10-05 02:39:46 -0700</date>
            <delta_ts>2011-10-05 07:12:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>webkit-efl-unit-tests-sources.patch</filename>
            <type>text/plain</type>
            <size>21347</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwppbmRleCA2OWM2MGEyLi5jNjMzNmM3IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTEtMDktMjEgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgVW5pdCBUZXN0cyBmcmFtZXdv
cmsgZm9yIHRoZSBXZWJLaXQtRWZsIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD1YWFhYWAorCisgICAgICAgIFVuaXQgVGVzdHMgZm9yIHRoZSBX
ZWJLaXQtRWZsIHBvcnQgYXJlIGJhc2VkIG9uIHRoZSBndGVzdCBsaWJyYXJ5LgorICAgICAgICBU
aGVyZSdzIGFsc28gYmVlbiBhZGRlZCBhIHNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGVz
dHMgdGhhdCByZXF1aXJlIGluc3RhbmNlIG9mIGEgd2VidmlldworICAgICAgICBhbmQgZXhhbXBs
ZSBvZiB1bml0IHRlc3RzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAg
ICAgICAgKiB0ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAo
ZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVz
dHMvc3JjL0V3a1VyaVRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChld2tVcmlTZXRUZXN0Q2Fs
bGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1
bmNoZXIvRUZMVGVzdENvbmZpZy5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRl
c3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVGTFVuaXRU
ZXN0czo6RUZMVGVzdExhdW5jaGVyOjppbml0KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdExhdW5jaGVyOjpzdGFydFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
TGF1bmNoZXI6OmVuZFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNo
ZXI6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNoZXI6
OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RM
YXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9F
RkxUZXN0Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0RWNv
cmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpF
RkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpF
RkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+RUZMVGVz
dFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6Y3JlYXRlVGVzdFVy
bCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojppbml0KToKKyAgICAgICAg
KEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6OnNob3cpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdFZpZXc6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6
YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVz
dFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpnZXRX
ZWJWaWV3KToKKwogMjAxMS0wOS0xNyAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBGcmFtZUxvYWRlckNsaWVudCBCYWNrRm9yd2FyZExpc3QtcmVsYXRl
ZCBtZXRob2RzIGFyZSB1bnN1ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0
X3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgx
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rl
c3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBhbGlnbj0i
Y2VudGVyIj5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVmYXVsdCBU
ZXN0aW5nIFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEyMmE2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9zcmMvRUZMVGVzdHNSdW4uY3BwCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAg
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1
ZGUgPEVGTFRlc3RMYXVuY2hlci5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKwordXNpbmcgbmFtZXNwYWNlIEVGTFVuaXRUZXN0czsKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGF0ZXhpdChFRkxUZXN0TGF1bmNoZXI6OnNo
dXRkb3duQWxsKTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsK
KyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmU4NjYwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl
IEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLwor
CisjaW5jbHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisK
K3ZvaWQgZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVj
dCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEoRUlOQV9UUlVFLCBld2tfdmlld19l
ZGl0YWJsZV9zZXQobywgRUlOQV9GQUxTRSkpOworICAgIEVYUEVDVF9FUShFSU5BX0ZBTFNFLCBl
d2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RFU1QoRXdr
RWRpdGFibGVUZXN0cywgRWRpdGFibGVTZXRUZXN0KQoreworICAgIFJVTl9URVNUKGVkaXRhYmxl
U2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZWNjZDA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rl
c3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQor
ICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5j
bHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7Citzc3Nzcwor
dm9pZCBld2tVcmlTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVjdCog
bywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoImh0dHA6Ly93d3cud2Via2l0Lm9y
Zy8iLCBld2tfdmlld191cmlfZ2V0KG8pKTsKKyAgICBFTkRfVEVTVCgpOworfQorCitURVNUKEV3
a1VyaVRlc3RzLCBFd2tVcmlTZXRUZXN0KQoreworICAgIFJVTl9URVNUKCJodHRwOi8vd3d3Lndl
YmtpdC5vcmciLCBld2tVcmlTZXRUZXN0Q2FsbGJhY2ssICJsb2FkLGZpbmlzaGVkIiwgMCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hl
ci9FRkxUZXN0Q29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RM
YXVuY2hlci9FRkxUZXN0Q29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGRjZmNiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Ny
Yy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcuaApAQCAtMCwwICsxLDMxIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl
ZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EK
KyovCisKKyNpZm5kZWYgRUZMVGVzdENvbmZpZ19oCisjZGVmaW5lIEVGTFRlc3RDb25maWdfaAor
CituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKK25hbWVzcGFjZSBDb25maWcgeworc3RhdGljIGNv
bnN0IGludCBkZWZhdWx0Vmlld1dpZHRoID0gNjAwOworc3RhdGljIGNvbnN0IGludCBkZWZhdWx0
Vmlld0hlaWdodCA9IDgwMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0VGhlbWVQYXRoID0g
REVGQVVMVF9USEVNRV9QQVRIIi9kZWZhdWx0LmVkaiI7CitzdGF0aWMgY29uc3QgY2hhciogZGVm
YXVsdFRlc3RQYWdlID0gImZpbGU6Ly8iREVGQVVMVF9URVNUX1BBR0VfRElSIi9kZWZhdWx0X3Rl
c3RfcGFnZS5odG1sIjsKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwIGIvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjQ2ZTE4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIv
RUZMVGVzdExhdW5jaGVyLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAg
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJF
RkxUZXN0Q29uZmlnLmgiCisjaW5jbHVkZSAiRUZMVGVzdFZpZXcuaCIKKyNpbmNsdWRlICJFV2Vi
S2l0LmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVkamUuaD4KKyNpbmNsdWRl
IDxFaW5hLmg+CisKK25hbWVzcGFjZSBFRkxVbml0VGVzdHMgeworCitib29sIEVGTFRlc3RMYXVu
Y2hlcjo6aW5pdCgpCit7CisgICAgaWYgKCFlY29yZV9ldmFzX2luaXQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKCFlZGplX2luaXQoKSkgeworICAgICAgICBlY29yZV9ldmFz
X3NodXRkb3duKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZXdrX2luaXQo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3du
KCkKK3sKKyAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CisgICAgZWRqZV9zaHV0ZG93bigpOwor
ICAgIGV3a19zaHV0ZG93bigpOworfQorCit2b2lkIEVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd25B
bGwoKQoreworICAgIGludCBjb3VudCA9IDA7CisKKyAgICB3aGlsZSAoKGNvdW50ID0gZWNvcmVf
ZXZhc19zaHV0ZG93bigpKSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBlZGplX3NodXRk
b3duKCkpID4gMCkgeyB9CisgICAgd2hpbGUgKChjb3VudCA9IGV3a19zaHV0ZG93bigpKSA+IDAp
IHsgfQorfQorCit2b2lkIEVGTFRlc3RMYXVuY2hlcjo6c3RhcnRUZXN0KCkKK3sKKyAgICBlY29y
ZV9tYWluX2xvb3BfYmVnaW4oKTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OmVuZFRlc3Qo
KQoreworICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7Cit9CisKK2Jvb2wgRUZMVGVzdExhdW5j
aGVyOjpjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2
b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQq
IGV2ZW50X2RhdGEpCit7CisgICAgRUZMX0lOSVRfUkVUKCk7CisKKyAgICBFRkxUZXN0RWNvcmVF
dmFzIGV2YXM7CisgICAgaWYgKCFldmFzLmdldEV2YXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGV2YXMuc2hvdygpOworCisgICAgRUZMVGVzdFZpZXcgdmlldyhldmFzLmdldEV2YXMo
KSwgdXJsKTsKKyAgICBpZiAoIXZpZXcuaW5pdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB2aWV3LmJpbmRFdmVudHMoZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2Rh
dGEpOworICAgIHZpZXcuc2hvdygpOworCisgICAgU1RBUlRfVEVTVCgpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KHZvaWQgKCpldmVudF9j
YWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9u
YW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIHJldHVybiBjcmVhdGVUZXN0KEVGTFVuaXRU
ZXN0czo6Q29uZmlnOjpkZWZhdWx0VGVzdFBhZ2UsIGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1l
LCBldmVudF9kYXRhKTsKK30KKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3QoY29uc3Qg
Y2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZv
aWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlVGVzdCh1cmwsIGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9k
YXRhKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1Vu
aXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43NDZmOTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJv
bmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s
IE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVGTFRlc3RMYXVuY2hlcl9oCisjZGVm
aW5lIEVGTFRlc3RMYXVuY2hlcl9oCisKKyNpbmNsdWRlIDxFdmFzLmg+CisKKyNpZmRlZiBHVEVT
VF9URVNUX0ZSQU1FV09SSworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjZW5kaWYKKworI2lm
ZGVmIEdURVNUX1RFU1RfRlJBTUVXT1JLCisgICAgI2RlZmluZSBSVU5fVEVTVChhcmdzLi4uKSAg
IFwKKyAgICAgICAgZG8geyAgICBcCisgICAgICAgICAgICBBU1NFUlRfRVEodHJ1ZSwgRUZMVGVz
dExhdW5jaGVyOjpydW5UZXN0KGFyZ3MpKTsgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorI2Vs
c2UKKyAgICAjZGVmaW5lIFJVTl9URVNUKGFyZ3MuLi4pICAgXAorICAgIGRvIHsgICAgXAorICAg
ICAgICBFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3QoYXJncyk7IFwKKyAgICB9IHdoaWxlICgwKQor
I2VuZGlmCisKKyNkZWZpbmUgU1RBUlRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAg
ICAgRUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QoKTsgICBcCisgICAgfSB3aGlsZSAoMCkKKwor
I2RlZmluZSBFTkRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExh
dW5jaGVyOjplbmRUZXN0KCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklU
X1JFVCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIGlmICghRUZMVGVzdExhdW5jaGVyOjpp
bml0KCkpICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICBcCisgICAgfSB3aGlsZSAo
MCkKKworI2RlZmluZSBFRkxfSU5JVCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRl
c3RMYXVuY2hlcjo6aW5pdCgpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxf
U0hVVERPV04oKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OnNo
dXRkb3duKCk7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9TSFVURE9XTl9B
TEwoKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3du
QWxsKCk7IFwKKyAgICB9IHdoaWxlICgwKQorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKwor
Y2xhc3MgRUZMVGVzdExhdW5jaGVyIHsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVUZXN0KGNvbnN0
IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOwor
ICAgIHN0YXRpYyB2b2lkIHNodXRkb3duQWxsKCk7CisgICAgc3RhdGljIHZvaWQgc3RhcnRUZXN0
KCk7CisgICAgc3RhdGljIHZvaWQgZW5kVGVzdCgpOworCisgICAgc3RhdGljIGJvb2wgcnVuVGVz
dChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsK
KyAgICBzdGF0aWMgYm9vbCBydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2
YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9k
YXRhKTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1M2IzYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmNw
cApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBF
bGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC
b3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRUZMVGVzdFZpZXcuaCIKKworI2luY2x1ZGUgIkVGTFRlc3RDb25maWcuaCIKKyNpbmNs
dWRlICJFV2ViS2l0LmgiCisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVjb3JlX0Zp
bGUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RWluYS5oPgorCisjaW5jbHVkZSA8
c3RyaW5nLmg+CisKK25hbWVzcGFjZSBFRkxVbml0VGVzdHMgeworCitFRkxUZXN0RWNvcmVFdmFz
OjpFRkxUZXN0RWNvcmVFdmFzKCkKKyAgICA6IG1fZWNvcmVFdmFzKDApCit7CisgICAgbV9lY29y
ZUV2YXMgPSBlY29yZV9ldmFzX25ldygwLCAwLCAwLCBFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVm
YXVsdFZpZXdXaWR0aCwgRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0LCAw
KTsKK30KKworRUZMVGVzdEVjb3JlRXZhczo6RUZMVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBl
bmdpbmVfbmFtZSwgaW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRf
dywgaW50IHZpZXdwb3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMpCisgICAgOiBtX2Vj
b3JlRXZhcygwKQoreworICAgIG1fZWNvcmVFdmFzID0gZWNvcmVfZXZhc19uZXcoZW5naW5lX25h
bWUsIHZpZXdwb3J0X3gsIHZpZXdwb3J0X3ksIHZpZXdwb3J0X3csIHZpZXdwb3J0X2gsIGV4dHJh
X29wdGlvbnMpOworfQorCitFRkxUZXN0RWNvcmVFdmFzOjp+RUZMVGVzdEVjb3JlRXZhcygpCit7
CisgICAgaWYgKG1fZWNvcmVFdmFzKQorICAgICAgICBlY29yZV9ldmFzX2ZyZWUobV9lY29yZUV2
YXMpOworfQorCitFdmFzKiBFRkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKCkKK3sKKyAgICBpZiAo
bV9lY29yZUV2YXMpCisgICAgICAgIHJldHVybiBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcyk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRUZMVGVzdEVjb3JlRXZhczo6c2hvdygpCit7Cisg
ICAgaWYgKG1fZWNvcmVFdmFzKQorICAgICAgICBlY29yZV9ldmFzX3Nob3cobV9lY29yZUV2YXMp
OworfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcykKKyAgICA6IG1fd2Vi
VmlldygwKQorICAgICwgbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCgwKQorICAgICwgbV9kZWZh
dWx0Vmlld1R5cGUoVGlsZWRWaWV3KQorICAgICwgbV93aWR0aChFRkxVbml0VGVzdHM6OkNvbmZp
Zzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KEVGTFVuaXRUZXN0czo6Q29uZmln
OjpkZWZhdWx0Vmlld0hlaWdodCkKK3sKKyAgICBtX3VybCA9IGNyZWF0ZVRlc3RVcmwoRUZMVW5p
dFRlc3RzOjpDb25maWc6OmRlZmF1bHRUZXN0UGFnZSk7Cit9CisKK0VGTFRlc3RWaWV3OjpFRkxU
ZXN0VmlldyhFdmFzKiBldmFzLCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX3dlYlZpZXcoMCkK
KyAgICAsIG1fZXZhcyhldmFzKQorICAgICwgbV91cmwoMCkKKyAgICAsIG1fZGVmYXVsdFZpZXdU
eXBlKFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1
bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVs
dFZpZXdIZWlnaHQpCit7CisgICAgbV91cmwgPSBjcmVhdGVUZXN0VXJsKHVybCk7Cit9CisKK0VG
TFRlc3RWaWV3OjpFRkxUZXN0VmlldyhFdmFzKiBldmFzLCBFd2tWaWV3VHlwZSB0eXBlLCBjb25z
dCBjaGFyKiB1cmwpCisgICAgOiBtX3dlYlZpZXcoMCkKKyAgICAsIG1fZXZhcyhldmFzKQorICAg
ICwgbV91cmwoMCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dpZHRo
KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQo
RUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworICAgIG1fdXJsID0g
Y3JlYXRlVGVzdFVybCh1cmwpOworfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyog
ZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCisgICAgOiBtX3dlYlZpZXcoMCkKKyAgICAsIG1fZXZhcyhldmFzKQorICAgICwgbV91
cmwoMCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dpZHRoKHdpZHRo
KQorICAgICwgbV9oZWlnaHQoaGVpZ2h0KQoreworICAgIG1fdXJsID0gY3JlYXRlVGVzdFVybCh1
cmwpOworfQorCitFRkxUZXN0Vmlldzo6fkVGTFRlc3RWaWV3KCkKK3sKKyAgICBpZiAobV93ZWJW
aWV3KQorICAgICAgICBldmFzX29iamVjdF9kZWwobV93ZWJWaWV3KTsKKyAgICBmcmVlKG1fdXJs
KTsKK30KKworY2hhciogRUZMVGVzdFZpZXc6OmNyZWF0ZVRlc3RVcmwoY29uc3QgY2hhciogdXJs
KQoreworICAgIGlmICh1cmwpCisgICAgICAgIHJldHVybiBzdHJkdXAodXJsKTsKKyAgICByZXR1
cm4gMDsKK30KKworYm9vbCBFRkxUZXN0Vmlldzo6aW5pdCgpCit7CisgICAgaWYgKCFtX2V2YXMg
fHwgIW1fdXJsKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fZGVmYXVs
dFZpZXdUeXBlKSB7CisgICAgY2FzZSBTaW5nbGVWaWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBl
d2tfdmlld19zaW5nbGVfYWRkKG1fZXZhcyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBU
aWxlZFZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGV3a192aWV3X3RpbGVkX2FkZChtX2V2YXMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fd2ViVmlldywgRUZMVW5p
dFRlc3RzOjpDb25maWc6OmRlZmF1bHRUaGVtZVBhdGgpOworICAgIGV3a192aWV3X3VyaV9zZXQo
bV93ZWJWaWV3LCBtX3VybCk7Cit9CisKK3ZvaWQgRUZMVGVzdFZpZXc6OnNob3coKQoreworICAg
IGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm47CisgICAgZXZhc19vYmplY3RfcmVzaXpl
KG1fd2ViVmlldywgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93
ZWJWaWV3KTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93ZWJWaWV3LCBFSU5BX1RSVUUp
OworfQorCitFdmFzX09iamVjdCogRUZMVGVzdFZpZXc6OmdldE1haW5GcmFtZSgpCit7CisgICAg
aWYgKG1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuIGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG1f
d2ViVmlldyk7CisgICAgcmV0dXJuIDA7Cit9CisKK0V2YXMqIEVGTFRlc3RWaWV3OjpnZXRFdmFz
KCkKK3sKKyAgICBpZiAobV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gZXZhc19vYmplY3RfZXZh
c19nZXQobV93ZWJWaWV3KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBFRkxUZXN0Vmlldzo6
YmluZEV2ZW50cyh2b2lkICgqY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwg
Y29uc3QgY2hhciogZXZlbnROYW1lLCB2b2lkKiBwdHIpCit7CisgICAgaWYgKCFtX3dlYlZpZXcp
CisgICAgICAgIHJldHVybjsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCht
X3dlYlZpZXcsIGV2ZW50TmFtZSwgY2FsbGJhY2spOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZChtX3dlYlZpZXcsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIHB0cik7Cit9CisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVu
Y2hlci9FRkxUZXN0Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlj
YjI0NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5p
dFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBH
TlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKwor
I2lmbmRlZiBFRkxUZXN0Vmlld19oCisjZGVmaW5lIEVGTFRlc3RWaWV3X2gKKworI2luY2x1ZGUg
PEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisKK25hbWVzcGFjZSBFRkxVbml0VGVz
dHMgeworCitjbGFzcyBFRkxUZXN0RWNvcmVFdmFzIHsKK3B1YmxpYzoKKyAgICBFRkxUZXN0RWNv
cmVFdmFzKCk7CisgICAgRUZMVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBlbmdpbmVfbmFtZSwg
aW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRfdywgaW50IHZpZXdw
b3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMpOworICAgIH5FRkxUZXN0RWNvcmVFdmFz
KCk7CisKKyAgICBFdmFzKiBnZXRFdmFzKCk7CisgICAgdm9pZCBzaG93KCk7CisKK3ByaXZhdGU6
CisgICAgRWNvcmVfRXZhcyogbV9lY29yZUV2YXM7Cit9OworCitjbGFzcyBFRkxUZXN0VmlldyB7
CitwdWJsaWM6CisgICAgZW51bSBFd2tWaWV3VHlwZSB7CisgICAgICAgIFNpbmdsZVZpZXcgPSAw
LAorICAgICAgICBUaWxlZFZpZXcsCisgICAgfTsKKworICAgIGV4cGxpY2l0IEVGTFRlc3RWaWV3
KEV2YXMqKTsKKyAgICBFRkxUZXN0VmlldyhFdmFzKiwgY29uc3QgY2hhciogdXJsKTsKKyAgICBF
RkxUZXN0VmlldyhFdmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRUZM
VGVzdFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIH5FRkxUZXN0VmlldygpOworCisgICAgRXZhc19P
YmplY3QqIGdldFdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXc7IH0KKyAgICBFdmFzX09iamVj
dCogZ2V0TWFpbkZyYW1lKCk7CisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZvaWQgc2hvdygp
OworCisgICAgYm9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFj
aykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZv
aWQqIHB0cik7Citwcm90ZWN0ZWQ6CisgICAgY2hhciogY3JlYXRlVGVzdFVybChjb25zdCBjaGFy
KiB1cmwpOworcHJpdmF0ZToKKyAgICBFRkxUZXN0Vmlldyhjb25zdCBFRkxUZXN0VmlldyYpOwor
ICAgIEVGTFRlc3RWaWV3IG9wZXJhdG9yPShjb25zdCBFRkxUZXN0VmlldyYpOworCisgICAgRXZh
cyogbV9ldmFzOworICAgIEV2YXNfT2JqZWN0KiBtX3dlYlZpZXc7CisKKyAgICBjaGFyKiBtX3Vy
bDsKKyAgICBpbnQgbV93aWR0aCwgbV9oZWlnaHQ7CisgICAgRXdrVmlld1R5cGUgbV9kZWZhdWx0
Vmlld1R5cGU7Cit9OworCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109785</attachid>
            <date>2011-10-05 07:12:20 -0700</date>
            <delta_ts>2011-10-19 01:28:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>webkit-efl-unit-tests-sources.patch</filename>
            <type>text/plain</type>
            <size>21342</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwppbmRleCA2OWM2MGEyLi5jNjMzNmM3IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTEtMDktMjEgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgVW5pdCBUZXN0cyBmcmFtZXdv
cmsgZm9yIHRoZSBXZWJLaXQtRWZsIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD1YWFhYWAorCisgICAgICAgIFVuaXQgVGVzdHMgZm9yIHRoZSBX
ZWJLaXQtRWZsIHBvcnQgYXJlIGJhc2VkIG9uIHRoZSBndGVzdCBsaWJyYXJ5LgorICAgICAgICBU
aGVyZSdzIGFsc28gYmVlbiBhZGRlZCBhIHNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGVz
dHMgdGhhdCByZXF1aXJlIGluc3RhbmNlIG9mIGEgd2VidmlldworICAgICAgICBhbmQgZXhhbXBs
ZSBvZiB1bml0IHRlc3RzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAg
ICAgICAgKiB0ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAo
ZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVz
dHMvc3JjL0V3a1VyaVRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChld2tVcmlTZXRUZXN0Q2Fs
bGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1
bmNoZXIvRUZMVGVzdENvbmZpZy5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRl
c3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVGTFVuaXRU
ZXN0czo6RUZMVGVzdExhdW5jaGVyOjppbml0KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdExhdW5jaGVyOjpzdGFydFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
TGF1bmNoZXI6OmVuZFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNo
ZXI6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNoZXI6
OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RM
YXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9F
RkxUZXN0Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0RWNv
cmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpF
RkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpF
RkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+RUZMVGVz
dFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6Y3JlYXRlVGVzdFVy
bCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojppbml0KToKKyAgICAgICAg
KEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6OnNob3cpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdFZpZXc6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6
YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVz
dFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpnZXRX
ZWJWaWV3KToKKwogMjAxMS0wOS0xNyAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBGcmFtZUxvYWRlckNsaWVudCBCYWNrRm9yd2FyZExpc3QtcmVsYXRl
ZCBtZXRob2RzIGFyZSB1bnN1ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0
X3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgx
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rl
c3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBhbGlnbj0i
Y2VudGVyIj5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVmYXVsdCBU
ZXN0aW5nIFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEyMmE2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9zcmMvRUZMVGVzdHNSdW4uY3BwCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAg
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1
ZGUgPEVGTFRlc3RMYXVuY2hlci5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKwordXNpbmcgbmFtZXNwYWNlIEVGTFVuaXRUZXN0czsKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGF0ZXhpdChFRkxUZXN0TGF1bmNoZXI6OnNo
dXRkb3duQWxsKTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsK
KyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmU4NjYwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl
IEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLwor
CisjaW5jbHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisK
K3ZvaWQgZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVj
dCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEoRUlOQV9UUlVFLCBld2tfdmlld19l
ZGl0YWJsZV9zZXQobywgRUlOQV9GQUxTRSkpOworICAgIEVYUEVDVF9FUShFSU5BX0ZBTFNFLCBl
d2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RFU1QoRXdr
RWRpdGFibGVUZXN0cywgRWRpdGFibGVTZXRUZXN0KQoreworICAgIFJVTl9URVNUKGVkaXRhYmxl
U2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZWNjZDA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rl
c3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQor
ICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5j
bHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisKK3ZvaWQg
ZXdrVXJpU2V0VGVzdENhbGxiYWNrKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZv
aWQqIGRhdGEpCit7CisgICAgRVhQRUNUX1NUUkVRKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwg
ZXdrX3ZpZXdfdXJpX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsKK30KKworVEVTVChFd2tVcmlU
ZXN0cywgRXdrVXJpU2V0VGVzdCkKK3sKKyAgICBSVU5fVEVTVCgiaHR0cDovL3d3dy53ZWJraXQu
b3JnIiwgZXdrVXJpU2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZM
VGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdENvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRk
Y2ZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5p
dFRlc3RMYXVuY2hlci9FRkxUZXN0Q29uZmlnLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl
IEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLwor
CisjaWZuZGVmIEVGTFRlc3RDb25maWdfaAorI2RlZmluZSBFRkxUZXN0Q29uZmlnX2gKKworbmFt
ZXNwYWNlIEVGTFVuaXRUZXN0cyB7CituYW1lc3BhY2UgQ29uZmlnIHsKK3N0YXRpYyBjb25zdCBp
bnQgZGVmYXVsdFZpZXdXaWR0aCA9IDYwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFZpZXdI
ZWlnaHQgPSA4MDA7CitzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdFRoZW1lUGF0aCA9IERFRkFV
TFRfVEhFTUVfUEFUSCIvZGVmYXVsdC5lZGoiOworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRU
ZXN0UGFnZSA9ICJmaWxlOi8vIkRFRkFVTFRfVEVTVF9QQUdFX0RJUiIvZGVmYXVsdF90ZXN0X3Bh
Z2UuaHRtbCI7Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0NmUxOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRl
c3RMYXVuY2hlci5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2Us
IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiRUZMVGVz
dENvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisjaW5jbHVkZSAiRVdlYktpdC5o
IgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RWlu
YS5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6
OmluaXQoKQoreworICAgIGlmICghZWNvcmVfZXZhc19pbml0KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZWRqZV9pbml0KCkpIHsKKyAgICAgICAgZWNvcmVfZXZhc19zaHV0
ZG93bigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGV3a19pbml0KCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bigpCit7
CisgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgIGVkamVfc2h1dGRvd24oKTsKKyAgICBl
d2tfc2h1dGRvd24oKTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKCkK
K3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgd2hpbGUgKChjb3VudCA9IGVjb3JlX2V2YXNf
c2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9zaHV0ZG93bigp
KSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkgPiAwKSB7IH0K
K30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnN0YXJ0VGVzdCgpCit7CisgICAgZWNvcmVfbWFp
bl9sb29wX2JlZ2luKCk7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjplbmRUZXN0KCkKK3sK
KyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6
Y3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCos
IEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVu
dF9kYXRhKQoreworICAgIEVGTF9JTklUX1JFVCgpOworCisgICAgRUZMVGVzdEVjb3JlRXZhcyBl
dmFzOworICAgIGlmICghZXZhcy5nZXRFdmFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBldmFzLnNob3coKTsKKworICAgIEVGTFRlc3RWaWV3IHZpZXcoZXZhcy5nZXRFdmFzKCksIHVy
bCk7CisgICAgaWYgKCF2aWV3LmluaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
dmlldy5iaW5kRXZlbnRzKGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsK
KyAgICB2aWV3LnNob3coKTsKKworICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6cnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJh
Y2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwg
dm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGVzdChFRkxVbml0VGVzdHM6
OkNvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZl
bnRfZGF0YSk7Cit9CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGNvbnN0IGNoYXIq
IHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiks
IGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgcmV0dXJu
IGNyZWF0ZVRlc3QodXJsLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVz
dExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3Jj
L1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzQ2Zjk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAw
MjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFRkxUZXN0TGF1bmNoZXJfaAorI2RlZmluZSBF
RkxUZXN0TGF1bmNoZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgR1RFU1RfVEVT
VF9GUkFNRVdPUksKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2VuZGlmCisKKyNpZmRlZiBH
VEVTVF9URVNUX0ZSQU1FV09SSworICAgICNkZWZpbmUgUlVOX1RFU1QoYXJncy4uLikgICBcCisg
ICAgICAgIGRvIHsgICAgXAorICAgICAgICAgICAgQVNTRVJUX0VRKHRydWUsIEVGTFRlc3RMYXVu
Y2hlcjo6cnVuVGVzdChhcmdzKSk7ICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNlbHNlCisg
ICAgI2RlZmluZSBSVU5fVEVTVChhcmdzLi4uKSAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAg
RUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGFyZ3MpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNlbmRp
ZgorCisjZGVmaW5lIFNUQVJUX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVG
TFRlc3RMYXVuY2hlcjo6c3RhcnRUZXN0KCk7ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZp
bmUgRU5EX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRlc3RMYXVuY2hl
cjo6ZW5kVGVzdCgpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVF9SRVQo
KSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBpZiAoIUVGTFRlc3RMYXVuY2hlcjo6aW5pdCgp
KSAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgXAorICAgIH0gd2hpbGUgKDApCisK
KyNkZWZpbmUgRUZMX0lOSVQoKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1
bmNoZXI6OmluaXQoKTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX1NIVVRE
T1dOKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93
bigpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfU0hVVERPV05fQUxMKCkg
IFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bkFsbCgp
OyBcCisgICAgfSB3aGlsZSAoMCkKKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK2NsYXNz
IEVGTFRlc3RMYXVuY2hlciB7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlVGVzdChjb25zdCBjaGFy
KiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCop
LCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBpbml0KCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKKyAgICBz
dGF0aWMgdm9pZCBzaHV0ZG93bkFsbCgpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0VGVzdCgpOwor
ICAgIHN0YXRpYyB2b2lkIGVuZFRlc3QoKTsKKworICAgIHN0YXRpYyBib29sIHJ1blRlc3QoY29u
c3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CisgICAg
c3RhdGljIGJvb2wgcnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7
Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
c3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTNiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKQEAg
LTAsMCArMSwxNzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u
LCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkVGTFRlc3RWaWV3LmgiCisKKyNpbmNsdWRlICJFRkxUZXN0Q29uZmlnLmgiCisjaW5jbHVkZSAi
RVdlYktpdC5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9GaWxlLmg+
CisjaW5jbHVkZSA8RWRqZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2luY2x1ZGUgPHN0cmlu
Zy5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworRUZMVGVzdEVjb3JlRXZhczo6RUZM
VGVzdEVjb3JlRXZhcygpCisgICAgOiBtX2Vjb3JlRXZhcygwKQoreworICAgIG1fZWNvcmVFdmFz
ID0gZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRW
aWV3V2lkdGgsIEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCwgMCk7Cit9
CisKK0VGTFRlc3RFY29yZUV2YXM6OkVGTFRlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5naW5l
X25hbWUsIGludCB2aWV3cG9ydF94LCBpbnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3csIGlu
dCB2aWV3cG9ydF9oLCBjb25zdCBjaGFyKiBleHRyYV9vcHRpb25zKQorICAgIDogbV9lY29yZUV2
YXMoMCkKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2
aWV3cG9ydF94LCB2aWV3cG9ydF95LCB2aWV3cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRp
b25zKTsKK30KKworRUZMVGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMoKQoreworICAg
IGlmIChtX2Vjb3JlRXZhcykKKyAgICAgICAgZWNvcmVfZXZhc19mcmVlKG1fZWNvcmVFdmFzKTsK
K30KKworRXZhcyogRUZMVGVzdEVjb3JlRXZhczo6Z2V0RXZhcygpCit7CisgICAgaWYgKG1fZWNv
cmVFdmFzKQorICAgICAgICByZXR1cm4gZWNvcmVfZXZhc19nZXQobV9lY29yZUV2YXMpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIEVGTFRlc3RFY29yZUV2YXM6OnNob3coKQoreworICAgIGlm
IChtX2Vjb3JlRXZhcykKKyAgICAgICAgZWNvcmVfZXZhc19zaG93KG1fZWNvcmVFdmFzKTsKK30K
KworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMpCisgICAgOiBtX3dlYlZpZXco
MCkKKyAgICAsIG1fZXZhcyhldmFzKQorICAgICwgbV91cmwoMCkKKyAgICAsIG1fZGVmYXVsdFZp
ZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRl
ZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVm
YXVsdFZpZXdIZWlnaHQpCit7CisgICAgbV91cmwgPSBjcmVhdGVUZXN0VXJsKEVGTFVuaXRUZXN0
czo6Q29uZmlnOjpkZWZhdWx0VGVzdFBhZ2UpOworfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZp
ZXcoRXZhcyogZXZhcywgY29uc3QgY2hhciogdXJsKQorICAgIDogbV93ZWJWaWV3KDApCisgICAg
LCBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKDApCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZShU
aWxlZFZpZXcpCisgICAgLCBtX3dpZHRoKEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmll
d1dpZHRoKQorICAgICwgbV9oZWlnaHQoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3
SGVpZ2h0KQoreworICAgIG1fdXJsID0gY3JlYXRlVGVzdFVybCh1cmwpOworfQorCitFRkxUZXN0
Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hh
ciogdXJsKQorICAgIDogbV93ZWJWaWV3KDApCisgICAgLCBtX2V2YXMoZXZhcykKKyAgICAsIG1f
dXJsKDApCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aChFRkxV
bml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KEVGTFVu
aXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sKKyAgICBtX3VybCA9IGNyZWF0
ZVRlc3RVcmwodXJsKTsKK30KKworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMs
IEV3a1ZpZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQorICAgIDogbV93ZWJWaWV3KDApCisgICAgLCBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKDAp
CisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aCh3aWR0aCkKKyAg
ICAsIG1faGVpZ2h0KGhlaWdodCkKK3sKKyAgICBtX3VybCA9IGNyZWF0ZVRlc3RVcmwodXJsKTsK
K30KKworRUZMVGVzdFZpZXc6On5FRkxUZXN0VmlldygpCit7CisgICAgaWYgKG1fd2ViVmlldykK
KyAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fd2ViVmlldyk7CisgICAgZnJlZShtX3VybCk7Cit9
CisKK2NoYXIqIEVGTFRlc3RWaWV3OjpjcmVhdGVUZXN0VXJsKGNvbnN0IGNoYXIqIHVybCkKK3sK
KyAgICBpZiAodXJsKQorICAgICAgICByZXR1cm4gc3RyZHVwKHVybCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2Jvb2wgRUZMVGVzdFZpZXc6OmluaXQoKQoreworICAgIGlmICghbV9ldmFzIHx8ICFt
X3VybCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2RlZmF1bHRWaWV3
VHlwZSkgeworICAgIGNhc2UgU2luZ2xlVmlldzoKKyAgICAgICAgbV93ZWJWaWV3ID0gZXdrX3Zp
ZXdfc2luZ2xlX2FkZChtX2V2YXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVGlsZWRW
aWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBld2tfdmlld190aWxlZF9hZGQobV9ldmFzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGV3a192aWV3X3RoZW1lX3NldChtX3dlYlZpZXcsIEVGTFVuaXRUZXN0
czo6Q29uZmlnOjpkZWZhdWx0VGhlbWVQYXRoKTsKKyAgICBld2tfdmlld191cmlfc2V0KG1fd2Vi
VmlldywgbV91cmwpOworfQorCit2b2lkIEVGTFRlc3RWaWV3OjpzaG93KCkKK3sKKyAgICBpZiAo
IW1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3dl
YlZpZXcsIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fd2ViVmll
dyk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2ViVmlldywgRUlOQV9UUlVFKTsKK30K
KworRXZhc19PYmplY3QqIEVGTFRlc3RWaWV3OjpnZXRNYWluRnJhbWUoKQoreworICAgIGlmICht
X3dlYlZpZXcpCisgICAgICAgIHJldHVybiBld2tfdmlld19mcmFtZV9tYWluX2dldChtX3dlYlZp
ZXcpOworICAgIHJldHVybiAwOworfQorCitFdmFzKiBFRkxUZXN0Vmlldzo6Z2V0RXZhcygpCit7
CisgICAgaWYgKG1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KG1fd2ViVmlldyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRUZMVGVzdFZpZXc6OmJpbmRF
dmVudHModm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgdm9pZCogcHRyKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwobV93ZWJW
aWV3LCBldmVudE5hbWUsIGNhbGxiYWNrKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19hZGQobV93ZWJWaWV3LCBldmVudE5hbWUsIGNhbGxiYWNrLCBwdHIpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxU
ZXN0Vmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIv
RUZMVGVzdFZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IyNDY5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0
TGF1bmNoZXIvRUZMVGVzdFZpZXcuaApAQCAtMCwwICsxLDc3IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisg
ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5k
ZWYgRUZMVGVzdFZpZXdfaAorI2RlZmluZSBFRkxUZXN0Vmlld19oCisKKyNpbmNsdWRlIDxFY29y
ZV9FdmFzLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsK
KworY2xhc3MgRUZMVGVzdEVjb3JlRXZhcyB7CitwdWJsaWM6CisgICAgRUZMVGVzdEVjb3JlRXZh
cygpOworICAgIEVGTFRlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5naW5lX25hbWUsIGludCB2
aWV3cG9ydF94LCBpbnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3csIGludCB2aWV3cG9ydF9o
LCBjb25zdCBjaGFyKiBleHRyYV9vcHRpb25zKTsKKyAgICB+RUZMVGVzdEVjb3JlRXZhcygpOwor
CisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZvaWQgc2hvdygpOworCitwcml2YXRlOgorICAg
IEVjb3JlX0V2YXMqIG1fZWNvcmVFdmFzOworfTsKKworY2xhc3MgRUZMVGVzdFZpZXcgeworcHVi
bGljOgorICAgIGVudW0gRXdrVmlld1R5cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0gMCwKKyAg
ICAgICAgVGlsZWRWaWV3LAorICAgIH07CisKKyAgICBleHBsaWNpdCBFRkxUZXN0VmlldyhFdmFz
Kik7CisgICAgRUZMVGVzdFZpZXcoRXZhcyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRUZMVGVz
dFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVGTFRlc3RW
aWV3KEV2YXMqLCBFd2tWaWV3VHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOworCisgICAgdmlydHVhbCB+RUZMVGVzdFZpZXcoKTsKKworICAgIEV2YXNfT2JqZWN0
KiBnZXRXZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3OyB9CisgICAgRXZhc19PYmplY3QqIGdl
dE1haW5GcmFtZSgpOworICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKwor
ICAgIGJvb2wgaW5pdCgpOworICAgIHZvaWQgYmluZEV2ZW50cyh2b2lkICgqY2FsbGJhY2spKHZv
aWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnROYW1lLCB2b2lkKiBw
dHIpOworcHJvdGVjdGVkOgorICAgIGNoYXIqIGNyZWF0ZVRlc3RVcmwoY29uc3QgY2hhciogdXJs
KTsKK3ByaXZhdGU6CisgICAgRUZMVGVzdFZpZXcoY29uc3QgRUZMVGVzdFZpZXcmKTsKKyAgICBF
RkxUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRUZMVGVzdFZpZXcmKTsKKworICAgIEV2YXMqIG1f
ZXZhczsKKyAgICBFdmFzX09iamVjdCogbV93ZWJWaWV3OworCisgICAgY2hhciogbV91cmw7Cisg
ICAgaW50IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIEV3a1ZpZXdUeXBlIG1fZGVmYXVsdFZpZXdU
eXBlOworfTsKKworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111574</attachid>
            <date>2011-10-19 01:28:16 -0700</date>
            <delta_ts>2012-01-13 08:28:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>webkit-efl-unit-tests-sources.patch</filename>
            <type>text/plain</type>
            <size>21342</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwppbmRleCA2OWM2MGEyLi5jNjMzNmM3IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTEtMDktMjEgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ft
c3VuZy5jb20+CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgVW5pdCBUZXN0cyBmcmFtZXdv
cmsgZm9yIHRoZSBXZWJLaXQtRWZsIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02ODUwOQorCisgICAgICAgIFVuaXQgVGVzdHMgZm9yIHRoZSBX
ZWJLaXQtRWZsIHBvcnQgYXJlIGJhc2VkIG9uIHRoZSBndGVzdCBsaWJyYXJ5LgorICAgICAgICBU
aGVyZSdzIGFsc28gYmVlbiBhZGRlZCBhIHNpbXBsZSBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGVz
dHMgdGhhdCByZXF1aXJlIGluc3RhbmNlIG9mIGEgd2VidmlldworICAgICAgICBhbmQgZXhhbXBs
ZSBvZiB1bml0IHRlc3RzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAg
ICAgICAgKiB0ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAo
ZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVz
dHMvc3JjL0V3a1VyaVRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChld2tVcmlTZXRUZXN0Q2Fs
bGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1
bmNoZXIvRUZMVGVzdENvbmZpZy5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRl
c3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVGTFVuaXRU
ZXN0czo6RUZMVGVzdExhdW5jaGVyOjppbml0KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdExhdW5jaGVyOjpzdGFydFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
TGF1bmNoZXI6OmVuZFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNo
ZXI6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNoZXI6
OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RM
YXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9F
RkxUZXN0Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0RWNv
cmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpF
RkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpF
RkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+RUZMVGVz
dFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6Y3JlYXRlVGVzdFVy
bCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojppbml0KToKKyAgICAgICAg
KEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6OnNob3cpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdFZpZXc6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6
YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVz
dFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpnZXRX
ZWJWaWV3KToKKwogMjAxMS0wOS0xNyAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBGcmFtZUxvYWRlckNsaWVudCBCYWNrRm9yd2FyZExpc3QtcmVsYXRl
ZCBtZXRob2RzIGFyZSB1bnN1ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0
X3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgx
ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rl
c3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBhbGlnbj0i
Y2VudGVyIj5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVmYXVsdCBU
ZXN0aW5nIFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmEyMmE2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9zcmMvRUZMVGVzdHNSdW4uY3BwCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAg
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1
ZGUgPEVGTFRlc3RMYXVuY2hlci5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKwordXNpbmcgbmFtZXNwYWNlIEVGTFVuaXRUZXN0czsKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGF0ZXhpdChFRkxUZXN0TGF1bmNoZXI6OnNo
dXRkb3duQWxsKTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsK
KyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmU4NjYwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl
IEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLwor
CisjaW5jbHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisK
K3ZvaWQgZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVj
dCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEoRUlOQV9UUlVFLCBld2tfdmlld19l
ZGl0YWJsZV9zZXQobywgRUlOQV9GQUxTRSkpOworICAgIEVYUEVDVF9FUShFSU5BX0ZBTFNFLCBl
d2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RFU1QoRXdr
RWRpdGFibGVUZXN0cywgRWRpdGFibGVTZXRUZXN0KQoreworICAgIFJVTl9URVNUKGVkaXRhYmxl
U2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZWNjZDA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rl
c3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQor
ICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5j
bHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSAiRVdlYktpdC5oIgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisKK3ZvaWQg
ZXdrVXJpU2V0VGVzdENhbGxiYWNrKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZv
aWQqIGRhdGEpCit7CisgICAgRVhQRUNUX1NUUkVRKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwg
ZXdrX3ZpZXdfdXJpX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsKK30KKworVEVTVChFd2tVcmlU
ZXN0cywgRXdrVXJpU2V0VGVzdCkKK3sKKyAgICBSVU5fVEVTVCgiaHR0cDovL3d3dy53ZWJraXQu
b3JnIiwgZXdrVXJpU2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZM
VGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdENvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRk
Y2ZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5p
dFRlc3RMYXVuY2hlci9FRkxUZXN0Q29uZmlnLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl
IEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLwor
CisjaWZuZGVmIEVGTFRlc3RDb25maWdfaAorI2RlZmluZSBFRkxUZXN0Q29uZmlnX2gKKworbmFt
ZXNwYWNlIEVGTFVuaXRUZXN0cyB7CituYW1lc3BhY2UgQ29uZmlnIHsKK3N0YXRpYyBjb25zdCBp
bnQgZGVmYXVsdFZpZXdXaWR0aCA9IDYwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFZpZXdI
ZWlnaHQgPSA4MDA7CitzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdFRoZW1lUGF0aCA9IERFRkFV
TFRfVEhFTUVfUEFUSCIvZGVmYXVsdC5lZGoiOworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRU
ZXN0UGFnZSA9ICJmaWxlOi8vIkRFRkFVTFRfVEVTVF9QQUdFX0RJUiIvZGVmYXVsdF90ZXN0X3Bh
Z2UuaHRtbCI7Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI0NmUxOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRl
c3RMYXVuY2hlci5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2Us
IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiRUZMVGVz
dENvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisjaW5jbHVkZSAiRVdlYktpdC5o
IgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RWlu
YS5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6
OmluaXQoKQoreworICAgIGlmICghZWNvcmVfZXZhc19pbml0KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmICghZWRqZV9pbml0KCkpIHsKKyAgICAgICAgZWNvcmVfZXZhc19zaHV0
ZG93bigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGV3a19pbml0KCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bigpCit7
CisgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgIGVkamVfc2h1dGRvd24oKTsKKyAgICBl
d2tfc2h1dGRvd24oKTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKCkK
K3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgd2hpbGUgKChjb3VudCA9IGVjb3JlX2V2YXNf
c2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9zaHV0ZG93bigp
KSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkgPiAwKSB7IH0K
K30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnN0YXJ0VGVzdCgpCit7CisgICAgZWNvcmVfbWFp
bl9sb29wX2JlZ2luKCk7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjplbmRUZXN0KCkKK3sK
KyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6
Y3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCos
IEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVu
dF9kYXRhKQoreworICAgIEVGTF9JTklUX1JFVCgpOworCisgICAgRUZMVGVzdEVjb3JlRXZhcyBl
dmFzOworICAgIGlmICghZXZhcy5nZXRFdmFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBldmFzLnNob3coKTsKKworICAgIEVGTFRlc3RWaWV3IHZpZXcoZXZhcy5nZXRFdmFzKCksIHVy
bCk7CisgICAgaWYgKCF2aWV3LmluaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
dmlldy5iaW5kRXZlbnRzKGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsK
KyAgICB2aWV3LnNob3coKTsKKworICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6cnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJh
Y2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwg
dm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGVzdChFRkxVbml0VGVzdHM6
OkNvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZl
bnRfZGF0YSk7Cit9CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGNvbnN0IGNoYXIq
IHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiks
IGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgcmV0dXJu
IGNyZWF0ZVRlc3QodXJsLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVz
dExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3Jj
L1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzQ2Zjk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAw
MjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFRkxUZXN0TGF1bmNoZXJfaAorI2RlZmluZSBF
RkxUZXN0TGF1bmNoZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgR1RFU1RfVEVT
VF9GUkFNRVdPUksKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2VuZGlmCisKKyNpZmRlZiBH
VEVTVF9URVNUX0ZSQU1FV09SSworICAgICNkZWZpbmUgUlVOX1RFU1QoYXJncy4uLikgICBcCisg
ICAgICAgIGRvIHsgICAgXAorICAgICAgICAgICAgQVNTRVJUX0VRKHRydWUsIEVGTFRlc3RMYXVu
Y2hlcjo6cnVuVGVzdChhcmdzKSk7ICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNlbHNlCisg
ICAgI2RlZmluZSBSVU5fVEVTVChhcmdzLi4uKSAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAg
RUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGFyZ3MpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNlbmRp
ZgorCisjZGVmaW5lIFNUQVJUX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVG
TFRlc3RMYXVuY2hlcjo6c3RhcnRUZXN0KCk7ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZp
bmUgRU5EX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRlc3RMYXVuY2hl
cjo6ZW5kVGVzdCgpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVF9SRVQo
KSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBpZiAoIUVGTFRlc3RMYXVuY2hlcjo6aW5pdCgp
KSAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgXAorICAgIH0gd2hpbGUgKDApCisK
KyNkZWZpbmUgRUZMX0lOSVQoKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1
bmNoZXI6OmluaXQoKTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX1NIVVRE
T1dOKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93
bigpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfU0hVVERPV05fQUxMKCkg
IFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bkFsbCgp
OyBcCisgICAgfSB3aGlsZSAoMCkKKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK2NsYXNz
IEVGTFRlc3RMYXVuY2hlciB7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlVGVzdChjb25zdCBjaGFy
KiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCop
LCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBpbml0KCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKKyAgICBz
dGF0aWMgdm9pZCBzaHV0ZG93bkFsbCgpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0VGVzdCgpOwor
ICAgIHN0YXRpYyB2b2lkIGVuZFRlc3QoKTsKKworICAgIHN0YXRpYyBib29sIHJ1blRlc3QoY29u
c3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CisgICAg
c3RhdGljIGJvb2wgcnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7
Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
c3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNTNiM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKQEAg
LTAsMCArMSwxNzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u
LCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkVGTFRlc3RWaWV3LmgiCisKKyNpbmNsdWRlICJFRkxUZXN0Q29uZmlnLmgiCisjaW5jbHVkZSAi
RVdlYktpdC5oIgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9GaWxlLmg+
CisjaW5jbHVkZSA8RWRqZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2luY2x1ZGUgPHN0cmlu
Zy5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworRUZMVGVzdEVjb3JlRXZhczo6RUZM
VGVzdEVjb3JlRXZhcygpCisgICAgOiBtX2Vjb3JlRXZhcygwKQoreworICAgIG1fZWNvcmVFdmFz
ID0gZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRW
aWV3V2lkdGgsIEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCwgMCk7Cit9
CisKK0VGTFRlc3RFY29yZUV2YXM6OkVGTFRlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5naW5l
X25hbWUsIGludCB2aWV3cG9ydF94LCBpbnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3csIGlu
dCB2aWV3cG9ydF9oLCBjb25zdCBjaGFyKiBleHRyYV9vcHRpb25zKQorICAgIDogbV9lY29yZUV2
YXMoMCkKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2
aWV3cG9ydF94LCB2aWV3cG9ydF95LCB2aWV3cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRp
b25zKTsKK30KKworRUZMVGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMoKQoreworICAg
IGlmIChtX2Vjb3JlRXZhcykKKyAgICAgICAgZWNvcmVfZXZhc19mcmVlKG1fZWNvcmVFdmFzKTsK
K30KKworRXZhcyogRUZMVGVzdEVjb3JlRXZhczo6Z2V0RXZhcygpCit7CisgICAgaWYgKG1fZWNv
cmVFdmFzKQorICAgICAgICByZXR1cm4gZWNvcmVfZXZhc19nZXQobV9lY29yZUV2YXMpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIEVGTFRlc3RFY29yZUV2YXM6OnNob3coKQoreworICAgIGlm
IChtX2Vjb3JlRXZhcykKKyAgICAgICAgZWNvcmVfZXZhc19zaG93KG1fZWNvcmVFdmFzKTsKK30K
KworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMpCisgICAgOiBtX3dlYlZpZXco
MCkKKyAgICAsIG1fZXZhcyhldmFzKQorICAgICwgbV91cmwoMCkKKyAgICAsIG1fZGVmYXVsdFZp
ZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRl
ZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVm
YXVsdFZpZXdIZWlnaHQpCit7CisgICAgbV91cmwgPSBjcmVhdGVUZXN0VXJsKEVGTFVuaXRUZXN0
czo6Q29uZmlnOjpkZWZhdWx0VGVzdFBhZ2UpOworfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZp
ZXcoRXZhcyogZXZhcywgY29uc3QgY2hhciogdXJsKQorICAgIDogbV93ZWJWaWV3KDApCisgICAg
LCBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKDApCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZShU
aWxlZFZpZXcpCisgICAgLCBtX3dpZHRoKEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmll
d1dpZHRoKQorICAgICwgbV9oZWlnaHQoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3
SGVpZ2h0KQoreworICAgIG1fdXJsID0gY3JlYXRlVGVzdFVybCh1cmwpOworfQorCitFRkxUZXN0
Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hh
ciogdXJsKQorICAgIDogbV93ZWJWaWV3KDApCisgICAgLCBtX2V2YXMoZXZhcykKKyAgICAsIG1f
dXJsKDApCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aChFRkxV
bml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KEVGTFVu
aXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sKKyAgICBtX3VybCA9IGNyZWF0
ZVRlc3RVcmwodXJsKTsKK30KKworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMs
IEV3a1ZpZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQorICAgIDogbV93ZWJWaWV3KDApCisgICAgLCBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKDAp
CisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aCh3aWR0aCkKKyAg
ICAsIG1faGVpZ2h0KGhlaWdodCkKK3sKKyAgICBtX3VybCA9IGNyZWF0ZVRlc3RVcmwodXJsKTsK
K30KKworRUZMVGVzdFZpZXc6On5FRkxUZXN0VmlldygpCit7CisgICAgaWYgKG1fd2ViVmlldykK
KyAgICAgICAgZXZhc19vYmplY3RfZGVsKG1fd2ViVmlldyk7CisgICAgZnJlZShtX3VybCk7Cit9
CisKK2NoYXIqIEVGTFRlc3RWaWV3OjpjcmVhdGVUZXN0VXJsKGNvbnN0IGNoYXIqIHVybCkKK3sK
KyAgICBpZiAodXJsKQorICAgICAgICByZXR1cm4gc3RyZHVwKHVybCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2Jvb2wgRUZMVGVzdFZpZXc6OmluaXQoKQoreworICAgIGlmICghbV9ldmFzIHx8ICFt
X3VybCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChtX2RlZmF1bHRWaWV3
VHlwZSkgeworICAgIGNhc2UgU2luZ2xlVmlldzoKKyAgICAgICAgbV93ZWJWaWV3ID0gZXdrX3Zp
ZXdfc2luZ2xlX2FkZChtX2V2YXMpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVGlsZWRW
aWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBld2tfdmlld190aWxlZF9hZGQobV9ldmFzKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX3dlYlZpZXcpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGV3a192aWV3X3RoZW1lX3NldChtX3dlYlZpZXcsIEVGTFVuaXRUZXN0
czo6Q29uZmlnOjpkZWZhdWx0VGhlbWVQYXRoKTsKKyAgICBld2tfdmlld191cmlfc2V0KG1fd2Vi
VmlldywgbV91cmwpOworfQorCit2b2lkIEVGTFRlc3RWaWV3OjpzaG93KCkKK3sKKyAgICBpZiAo
IW1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3dl
YlZpZXcsIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fd2ViVmll
dyk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2ViVmlldywgRUlOQV9UUlVFKTsKK30K
KworRXZhc19PYmplY3QqIEVGTFRlc3RWaWV3OjpnZXRNYWluRnJhbWUoKQoreworICAgIGlmICht
X3dlYlZpZXcpCisgICAgICAgIHJldHVybiBld2tfdmlld19mcmFtZV9tYWluX2dldChtX3dlYlZp
ZXcpOworICAgIHJldHVybiAwOworfQorCitFdmFzKiBFRkxUZXN0Vmlldzo6Z2V0RXZhcygpCit7
CisgICAgaWYgKG1fd2ViVmlldykKKyAgICAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KG1fd2ViVmlldyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRUZMVGVzdFZpZXc6OmJpbmRF
dmVudHModm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0
IGNoYXIqIGV2ZW50TmFtZSwgdm9pZCogcHRyKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwobV93ZWJW
aWV3LCBldmVudE5hbWUsIGNhbGxiYWNrKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19hZGQobV93ZWJWaWV3LCBldmVudE5hbWUsIGNhbGxiYWNrLCBwdHIpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxU
ZXN0Vmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIv
RUZMVGVzdFZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2IyNDY5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0
TGF1bmNoZXIvRUZMVGVzdFZpZXcuaApAQCAtMCwwICsxLDc3IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisg
ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5k
ZWYgRUZMVGVzdFZpZXdfaAorI2RlZmluZSBFRkxUZXN0Vmlld19oCisKKyNpbmNsdWRlIDxFY29y
ZV9FdmFzLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsK
KworY2xhc3MgRUZMVGVzdEVjb3JlRXZhcyB7CitwdWJsaWM6CisgICAgRUZMVGVzdEVjb3JlRXZh
cygpOworICAgIEVGTFRlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5naW5lX25hbWUsIGludCB2
aWV3cG9ydF94LCBpbnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3csIGludCB2aWV3cG9ydF9o
LCBjb25zdCBjaGFyKiBleHRyYV9vcHRpb25zKTsKKyAgICB+RUZMVGVzdEVjb3JlRXZhcygpOwor
CisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZvaWQgc2hvdygpOworCitwcml2YXRlOgorICAg
IEVjb3JlX0V2YXMqIG1fZWNvcmVFdmFzOworfTsKKworY2xhc3MgRUZMVGVzdFZpZXcgeworcHVi
bGljOgorICAgIGVudW0gRXdrVmlld1R5cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0gMCwKKyAg
ICAgICAgVGlsZWRWaWV3LAorICAgIH07CisKKyAgICBleHBsaWNpdCBFRkxUZXN0VmlldyhFdmFz
Kik7CisgICAgRUZMVGVzdFZpZXcoRXZhcyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRUZMVGVz
dFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVGTFRlc3RW
aWV3KEV2YXMqLCBFd2tWaWV3VHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOworCisgICAgdmlydHVhbCB+RUZMVGVzdFZpZXcoKTsKKworICAgIEV2YXNfT2JqZWN0
KiBnZXRXZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3OyB9CisgICAgRXZhc19PYmplY3QqIGdl
dE1haW5GcmFtZSgpOworICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKwor
ICAgIGJvb2wgaW5pdCgpOworICAgIHZvaWQgYmluZEV2ZW50cyh2b2lkICgqY2FsbGJhY2spKHZv
aWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnROYW1lLCB2b2lkKiBw
dHIpOworcHJvdGVjdGVkOgorICAgIGNoYXIqIGNyZWF0ZVRlc3RVcmwoY29uc3QgY2hhciogdXJs
KTsKK3ByaXZhdGU6CisgICAgRUZMVGVzdFZpZXcoY29uc3QgRUZMVGVzdFZpZXcmKTsKKyAgICBF
RkxUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRUZMVGVzdFZpZXcmKTsKKworICAgIEV2YXMqIG1f
ZXZhczsKKyAgICBFdmFzX09iamVjdCogbV93ZWJWaWV3OworCisgICAgY2hhciogbV91cmw7Cisg
ICAgaW50IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIEV3a1ZpZXdUeXBlIG1fZGVmYXVsdFZpZXdU
eXBlOworfTsKKworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122431</attachid>
            <date>2012-01-13 08:28:51 -0800</date>
            <delta_ts>2012-01-16 06:05:16 -0800</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>unit-tests.patch</filename>
            <type>text/plain</type>
            <size>24164</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggYzVlZjY1Ni4uNTMyOTljMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTI1NiwzICsyNTYsNSBAQCBJTlNUQUxM
KEZJTEVTICR7RVdlYktpdF9IRUFERVJTfQogCiBJTlNUQUxMKEZJTEVTICR7V2ViS2l0X1RIRU1F
fQogICAgICAgICBERVNUSU5BVElPTiAke0RBVEFfSU5TVEFMTF9ESVJ9L3RoZW1lcykKKworSU5D
TFVERV9JRl9FWElTVFMoJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvQ01ha2VMaXN0c0VmbC50eHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKaW5kZXggOGY3MjU4Yi4uMDE0M2Y0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ5IEBACisyMDEyLTAxLTEzICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHVuaXQgdGVzdHMg
YW5kIHRlc3RpbmcgZnJhbWV3b3JrIGZvciBXZWJLaXQtRUZMIHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTA5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGluZyBmcmFtZXdvcmsgaXMgdXNl
ZCBmb3IgcnVubmluZyB1bml0IHRlc3RzIHRoYXQgcmVxdWlyZQorICAgICAgICBpbnN0YW5jZSBv
ZiBhIHdlYnZpZXcuIFVuaXQgdGVzdHMgYXJlIGJhc2VkIG9uIGd0ZXN0IGxpYnJhcnkuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzRWZsLnR4dDoKKyAgICAgICAgKiB0ZXN0cy9DTWFrZUxpc3RzRWZs
LnR4dDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcDogQWRkZWQuCisgICAgICAg
IChtYWluKToKKyAgICAgICAgKiB0ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHA6IEFkZGVk
LgorICAgICAgICAoZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2spOgorICAgICAgICAoVEVTVCk6Cisg
ICAgICAgICogdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChld2tV
cmlTZXRUZXN0Q2FsbGJhY2spOgorICAgICAgICAoVEVTVCk6CisgICAgICAgICogdGVzdHMvc3Jj
L1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEVGTFVuaXRUZXN0czo6RUZMVGVzdExhdW5jaGVyOjppbml0KToKKyAgICAgICAgKEVGTFVu
aXRUZXN0czo6RUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bik6CisgICAgICAgIChFRkxVbml0VGVz
dHM6OkVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd25BbGwpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0TGF1bmNoZXI6OnN0YXJ0VGVzdCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVG
TFRlc3RMYXVuY2hlcjo6ZW5kVGVzdCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RM
YXVuY2hlcjo6Y3JlYXRlVGVzdCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVu
Y2hlcjo6cnVuVGVzdCk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZM
VGVzdExhdW5jaGVyLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5j
aGVyL0VGTFRlc3RWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRl
c3RFY29yZUV2YXM6OkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpF
RkxUZXN0RWNvcmVFdmFzOjp+RUZMVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChFRkxVbml0VGVz
dHM6OkVGTFRlc3RFY29yZUV2YXM6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpF
RkxUZXN0RWNvcmVFdmFzOjpzaG93KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVzdFZp
ZXc6OkVGTFRlc3RWaWV3KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6On5F
RkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojppbml0KToK
KyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6OnNob3cpOgorICAgICAgICAoRUZM
VW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKToKKyAgICAgICAgKEVGTFVuaXRU
ZXN0czo6RUZMVGVzdFZpZXc6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxU
ZXN0Vmlldzo6YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RW
aWV3OjpnZXRXZWJWaWV3KToKKwogMjAxMi0wMS0wMSAgRXVubWkgTGVlICA8ZXVubWkxNS5sZWVA
c2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gTW92ZSBmdW5jdGlvbiB0byBnZXQgZHBpIHRv
IHRoZSBXZWJDb3JlL3BsYXRmb3JtL2VmbC9FZmxTY3JlZW5VdGlsaXRpZXMuY3BwLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvQ01ha2VMaXN0c0VmbC50eHQgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9DTWFrZUxpc3RzRWZsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kNDg5MTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvdGVzdHMvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTAsMCArMSw3NyBAQAorSU5DTFVERV9ESVJF
Q1RPUklFUygke1RISVJEUEFSVFlfRElSfS9ndGVzdAorICAgICAgICAgICAgICAgICAgICAke1RI
SVJEUEFSVFlfRElSfS9ndGVzdC9pbmNsdWRlCispCisKK1NFVChHVEVTVF9TT1VSQ0VTICIke1RI
SVJEUEFSVFlfRElSfS9ndGVzdC9zcmMiKQorQUREX0xJQlJBUlkoZ3Rlc3QKKyAgICAke0dURVNU
X1NPVVJDRVN9L2d0ZXN0LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1kZWF0aC10ZXN0
LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdF9tYWluLmNjCisgICAgJHtHVEVTVF9TT1VS
Q0VTfS9ndGVzdC1maWxlcGF0aC5jYworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtcG9ydC5j
YworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtdGVzdC1wYXJ0LmNjCisgICAgJHtHVEVTVF9T
T1VSQ0VTfS9ndGVzdC10eXBlZC10ZXN0LmNjCispCisKK1NFVChFVW5pdFRlc3RzX0xJQlJBUklF
UworICAgICR7SmF2YVNjcmlwdENvcmVfTElCUkFSWV9OQU1FfQorICAgICR7V2ViQ29yZV9MSUJS
QVJZX05BTUV9CisgICAgJHtXZWJLaXRfTElCUkFSWV9OQU1FfQorICAgICR7RUNPUkVfWF9MSUJS
QVJJRVN9CisgICAgJHtFREpFX0xJQlJBUklFU30KKyAgICAke0VGTERFUFNfTElCUkFSSUVTfQor
ICAgICR7RVZBU19MSUJSQVJJRVN9CispCisKK1NFVChFVW5pdFRlc3RzX0lOQ0xVREVfRElSRUNU
T1JJRVMKKyAgICAke0NNQUtFX1NPVVJDRV9ESVJ9CisgICAgJHtXRUJLSVRfRElSfS9lZmwvZXdr
CisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIKKyAgICAk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0KKyAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmCisgICAg
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L0ZvcndhcmRpbmdIZWFkZXJzCisgICAgJHtFREpFX0lOQ0xV
REVfRElSU30KKyAgICAke0VGTERFUFNfSU5DTFVERV9ESVJTfQorICAgICR7RVZBU19JTkNMVURF
X0RJUlN9CispCisKKworU0VUKEVVbml0VGVzdHNfTElOS19GTEFHUworICAgICR7RUNPUkVfWF9M
REZMQUdTfQorICAgICR7RURKRV9MREZMQUdTfQorICAgICR7RUZMREVQU19MREZMQUdTfQorICAg
ICR7RVZBU19MREZMQUdTfQorKQorCitJRiAoRU5BQkxFX0dMSUJfU1VQUE9SVCkKKyAgICBMSVNU
KEFQUEVORCBFVW5pdFRlc3RzX0lOQ0xVREVfRElSRUNUT1JJRVMgIiR7SkFWQVNDUklQVENPUkVf
RElSfS93dGYvZ29iamVjdCIpCisKKyAgICBMSVNUKEFQUEVORCBFVW5pdFRlc3RzX0xJQlJBUklF
UworICAgICAgICAke0dka19MSUJSQVJJRVN9CisgICAgICAgICR7R2xpYl9MSUJSQVJJRVN9Cisg
ICAgICAgICR7R3RocmVhZF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYgKCkKKworU0VUKERFRkFV
TFRfVEVTVF9QQUdFX0RJUiAke0NNQUtFX0JJTkFSWV9ESVJ9L1dlYktpdC9lZmwvdGVzdHMpCisK
K0FERF9ERUZJTklUSU9OUygtRERFRkFVTFRfVEVTVF9QQUdFX0RJUj1cIiR7REVGQVVMVF9URVNU
X1BBR0VfRElSfVwiKQorQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9USEVNRV9QQVRIPVwiJHtU
SEVNRV9CSU5BUllfRElSfVwiKQorQUREX0RFRklOSVRJT05TKC1ER1RFU1RfVEVTVF9GUkFNRVdP
UkspCisKK0FERF9MSUJSQVJZKGVmbF90ZXN0X2xhdW5jaGVyCisgICAgJHtXRUJLSVRfRElSfS9l
ZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcAorICAgICR7
V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmNw
cAorKQorCitTRVQoRVVuaXRUZXN0c19TT1VSQ0VTCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVz
dHMvc3JjL0VGTFRlc3RzUnVuLmNwcAorICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9F
d2tVcmlUZXN0cy5jcHAKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvRXdrRWRpdGFi
bGVUZXN0cy5jcHAKKykKKworSU5DTFVERV9ESVJFQ1RPUklFUygke0VVbml0VGVzdHNfSU5DTFVE
RV9ESVJFQ1RPUklFU30pCitBRERfRVhFQ1VUQUJMRShQcm9ncmFtcy9FVW5pdFRlc3RzICR7RVVu
aXRUZXN0c19TT1VSQ0VTfSkKK1RBUkdFVF9MSU5LX0xJQlJBUklFUyhQcm9ncmFtcy9FVW5pdFRl
c3RzICR7RVVuaXRUZXN0c19MSUJSQVJJRVN9IGVmbF90ZXN0X2xhdW5jaGVyIGd0ZXN0KQorQURE
X1RBUkdFVF9QUk9QRVJUSUVTKFByb2dyYW1zL0VVbml0VGVzdHMgTElOS19GTEFHUyAiJHtFVW5p
dFRlc3RzX0xJTktfRkxBR1N9IikKK1NFVF9UQVJHRVRfUFJPUEVSVElFUyhQcm9ncmFtcy9FVW5p
dFRlc3RzIFBST1BFUlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0JJTkFS
WV9ESVJ9IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL2RlZmF1bHRfdGVz
dF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgxZTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1s
CkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBhbGlnbj0iY2VudGVyIj5FRkwg
VW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVmYXVsdCBUZXN0aW5nIFdlYiBQ
YWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMv
RUZMVGVzdHNSdW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjhl
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRUZMVGVz
dHNSdW4uY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRl
IDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKyNpbmNsdWRlICJVbml0VGVzdExh
dW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBhdGV4aXQoRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bkFsbCk7CisgICAg
Ojp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7CisgICAgcmV0dXJuIFJVTl9B
TExfVEVTVFMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9F
d2tFZGl0YWJsZVRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tFZGl0
YWJsZVRlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA5NGI0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRh
YmxlVGVzdHMuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1
aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaCIKKyNp
bmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEVGTFVuaXRUZXN0czsKKwordm9pZCBlZGl0YWJsZVNldFRlc3RDYWxsYmFjayh2b2lk
KiBldmVudEluZm8sIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQoreworICAgIEVYUEVDVF9F
UShFSU5BX1RSVUUsIGV3a192aWV3X2VkaXRhYmxlX3NldChvLCBFSU5BX0ZBTFNFKSk7CisgICAg
RVhQRUNUX0VRKEVJTkFfRkFMU0UsIGV3a192aWV3X2VkaXRhYmxlX2dldChvKSk7CisgICAgRU5E
X1RFU1QoKTsKK30KKworVEVTVChFd2tFZGl0YWJsZVRlc3RzLCBFZGl0YWJsZVNldFRlc3QpCit7
CisgICAgUlVOX1RFU1QoZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2ssICJsb2FkLGZpbmlzaGVkIiwg
MCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrVXJpVGVz
dHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDZjYjRlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcApAQCAtMCwwICsx
LDM2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRU
ZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisK
K3ZvaWQgZXdrVXJpU2V0VGVzdENhbGxiYWNrKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3Qq
IG8sIHZvaWQqIGRhdGEpCit7CisgICAgRVhQRUNUX1NUUkVRKCJodHRwOi8vd3d3LndlYmtpdC5v
cmcvIiwgZXdrX3ZpZXdfdXJpX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsKK30KKworVEVTVChF
d2tVcmlUZXN0cywgRXdrVXJpU2V0VGVzdCkKK3sKKyAgICBSVU5fVEVTVCgiaHR0cDovL3d3dy53
ZWJraXQub3JnIiwgZXdrVXJpU2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0
TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmRkY2ZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9z
cmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Q29uZmlnLmgKQEAgLTAsMCArMSwzMSBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBT
ZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNB
CisqLworCisjaWZuZGVmIEVGTFRlc3RDb25maWdfaAorI2RlZmluZSBFRkxUZXN0Q29uZmlnX2gK
KworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CituYW1lc3BhY2UgQ29uZmlnIHsKK3N0YXRpYyBj
b25zdCBpbnQgZGVmYXVsdFZpZXdXaWR0aCA9IDYwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVs
dFZpZXdIZWlnaHQgPSA4MDA7CitzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdFRoZW1lUGF0aCA9
IERFRkFVTFRfVEhFTUVfUEFUSCIvZGVmYXVsdC5lZGoiOworc3RhdGljIGNvbnN0IGNoYXIqIGRl
ZmF1bHRUZXN0UGFnZSA9ICJmaWxlOi8vIkRFRkFVTFRfVEVTVF9QQUdFX0RJUiIvZGVmYXVsdF90
ZXN0X3BhZ2UuaHRtbCI7Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4M2QzNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RMYXVuY2hlci5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAg
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RMYXVuY2hlci5oIgorCisjaW5jbHVkZSAi
RUZMVGVzdENvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisjaW5jbHVkZSA8RVdl
YktpdC5oPgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVk
ZSA8RWluYS5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworYm9vbCBFRkxUZXN0TGF1
bmNoZXI6OmluaXQoKQoreworICAgIGlmICghZWNvcmVfZXZhc19pbml0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghZWRqZV9pbml0KCkpIHsKKyAgICAgICAgZWNvcmVfZXZh
c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGV3a19pbml0
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93
bigpCit7CisgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgIGVkamVfc2h1dGRvd24oKTsK
KyAgICBld2tfc2h1dGRvd24oKTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3du
QWxsKCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgd2hpbGUgKChjb3VudCA9IGVjb3Jl
X2V2YXNfc2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9zaHV0
ZG93bigpKSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkgPiAw
KSB7IH0KK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnN0YXJ0VGVzdCgpCit7CisgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjplbmRUZXN0
KCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworfQorCitib29sIEVGTFRlc3RMYXVu
Y2hlcjo6Y3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjayko
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lk
KiBldmVudF9kYXRhKQoreworICAgIEVGTF9JTklUX1JFVCgpOworCisgICAgRUZMVGVzdEVjb3Jl
RXZhcyBldmFzOworICAgIGlmICghZXZhcy5nZXRFdmFzKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBldmFzLnNob3coKTsKKworICAgIEVGTFRlc3RWaWV3IHZpZXcoZXZhcy5nZXRFdmFz
KCksIHVybCk7CisgICAgaWYgKCF2aWV3LmluaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgdmlldy5iaW5kRXZlbnRzKGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9k
YXRhKTsKKyAgICB2aWV3LnNob3coKTsKKworICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6cnVuVGVzdCh2b2lkICgqZXZlbnRf
Y2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRf
bmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGVzdChFRkxVbml0
VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFt
ZSwgZXZlbnRfZGF0YSk7Cit9CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGNvbnN0
IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVRlc3QodXJsLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRf
ZGF0YSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVz
dHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2Zjk1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u
LCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFRkxUZXN0TGF1bmNoZXJfaAorI2Rl
ZmluZSBFRkxUZXN0TGF1bmNoZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgR1RF
U1RfVEVTVF9GUkFNRVdPUksKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2VuZGlmCisKKyNp
ZmRlZiBHVEVTVF9URVNUX0ZSQU1FV09SSworICAgICNkZWZpbmUgUlVOX1RFU1QoYXJncy4uLikg
ICBcCisgICAgICAgIGRvIHsgICAgXAorICAgICAgICAgICAgQVNTRVJUX0VRKHRydWUsIEVGTFRl
c3RMYXVuY2hlcjo6cnVuVGVzdChhcmdzKSk7ICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNl
bHNlCisgICAgI2RlZmluZSBSVU5fVEVTVChhcmdzLi4uKSAgIFwKKyAgICBkbyB7ICAgIFwKKyAg
ICAgICAgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGFyZ3MpOyBcCisgICAgfSB3aGlsZSAoMCkK
KyNlbmRpZgorCisjZGVmaW5lIFNUQVJUX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAg
ICAgIEVGTFRlc3RMYXVuY2hlcjo6c3RhcnRUZXN0KCk7ICAgXAorICAgIH0gd2hpbGUgKDApCisK
KyNkZWZpbmUgRU5EX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRlc3RM
YXVuY2hlcjo6ZW5kVGVzdCgpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5J
VF9SRVQoKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBpZiAoIUVGTFRlc3RMYXVuY2hlcjo6
aW5pdCgpKSAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgICAgXAorICAgIH0gd2hpbGUg
KDApCisKKyNkZWZpbmUgRUZMX0lOSVQoKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxU
ZXN0TGF1bmNoZXI6OmluaXQoKTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZM
X1NIVVRET1dOKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpz
aHV0ZG93bigpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfU0hVVERPV05f
QUxMKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93
bkFsbCgpOyBcCisgICAgfSB3aGlsZSAoMCkKKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisK
K2NsYXNzIEVGTFRlc3RMYXVuY2hlciB7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlVGVzdChjb25z
dCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwg
dm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBpbml0KCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsK
KyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bkFsbCgpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0VGVz
dCgpOworICAgIHN0YXRpYyB2b2lkIGVuZFRlc3QoKTsKKworICAgIHN0YXRpYyBib29sIHJ1blRl
c3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7
CisgICAgc3RhdGljIGJvb2wgcnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBF
dmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRf
ZGF0YSk7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDg2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5j
cHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcg
RWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwg
Qm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisKKyNpbmNsdWRlICJFRkxUZXN0Q29uZmlnLmgiCisjaW5j
bHVkZSA8RVdlYktpdC5oPgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9G
aWxlLmg+CisjaW5jbHVkZSA8RWRqZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBFRkxVbml0VGVzdHMgeworCitFRkxUZXN0
RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKCkKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0
UHRyKGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0
Vmlld1dpZHRoLCBFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQsIDApKTsK
K30KKworRUZMVGVzdEVjb3JlRXZhczo6RUZMVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBlbmdp
bmVfbmFtZSwgaW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRfdywg
aW50IHZpZXdwb3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMpCit7CisgICAgbV9lY29y
ZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX25ldyhlbmdpbmVfbmFtZSwgdmlld3BvcnRfeCwg
dmlld3BvcnRfeSwgdmlld3BvcnRfdywgdmlld3BvcnRfaCwgZXh0cmFfb3B0aW9ucykpOworfQor
CitFRkxUZXN0RWNvcmVFdmFzOjp+RUZMVGVzdEVjb3JlRXZhcygpCit7IH0KKworRXZhcyogRUZM
VGVzdEVjb3JlRXZhczo6Z2V0RXZhcygpCit7CisgICAgaWYgKG1fZWNvcmVFdmFzLmdldCgpKQor
ICAgICAgICByZXR1cm4gZWNvcmVfZXZhc19nZXQobV9lY29yZUV2YXMuZ2V0KCkpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEVGTFRlc3RFY29yZUV2YXM6OnNob3coKQoreworICAgIGlmICht
X2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAgICAgZWNvcmVfZXZhc19zaG93KG1fZWNvcmVFdmFzLmdl
dCgpKTsKK30KKworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMpCisgICAgOiBt
X2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0VGVz
dFBhZ2UpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZShUaWxlZFZpZXcpCisgICAgLCBtX3dpZHRo
KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQo
RUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreyB9CisKK0VGTFRlc3RW
aWV3OjpFRkxUZXN0VmlldyhFdmFzKiBldmFzLCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX2V2
YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVk
VmlldykKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lk
dGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWln
aHQpCit7IH0KKworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMsIEV3a1ZpZXdU
eXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91
cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgoRUZM
VW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxV
bml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7IH0KKworRUZMVGVzdFZpZXc6
OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMsIEV3a1ZpZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVy
bCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3Vy
bCh1cmwpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aCh3aWR0
aCkKKyAgICAsIG1faGVpZ2h0KGhlaWdodCkKK3sgfQorCitFRkxUZXN0Vmlldzo6fkVGTFRlc3RW
aWV3KCkKK3sgfQorCitib29sIEVGTFRlc3RWaWV3Ojppbml0KCkKK3sKKyAgICBpZiAoIW1fZXZh
cyB8fCBtX3VybC5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2gg
KG1fZGVmYXVsdFZpZXdUeXBlKSB7CisgICAgY2FzZSBTaW5nbGVWaWV3OgorICAgICAgICBtX3dl
YlZpZXcgPSBhZG9wdFB0cihld2tfdmlld19zaW5nbGVfYWRkKG1fZXZhcykpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgVGlsZWRWaWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdFB0
cihld2tfdmlld190aWxlZF9hZGQobV9ldmFzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBl
d2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3LmdldCgpLCBFRkxVbml0VGVzdHM6OkNvbmZpZzo6
ZGVmYXVsdFRoZW1lUGF0aCk7CisgICAgZXdrX3ZpZXdfdXJpX3NldChtX3dlYlZpZXcuZ2V0KCks
IG1fdXJsLmNfc3RyKCkpOworfQorCit2b2lkIEVGTFRlc3RWaWV3OjpzaG93KCkKK3sKKyAgICBp
ZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShtX3dlYlZpZXcuZ2V0KCksIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBldmFzX29iamVj
dF9zaG93KG1fd2ViVmlldy5nZXQoKSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2Vi
Vmlldy5nZXQoKSwgRUlOQV9UUlVFKTsKK30KKworRXZhc19PYmplY3QqIEVGTFRlc3RWaWV3Ojpn
ZXRNYWluRnJhbWUoKQoreworICAgIGlmIChtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVy
biBld2tfdmlld19mcmFtZV9tYWluX2dldChtX3dlYlZpZXcuZ2V0KCkpOworICAgIHJldHVybiAw
OworfQorCitFdmFzKiBFRkxUZXN0Vmlldzo6Z2V0RXZhcygpCit7CisgICAgaWYgKG1fd2ViVmll
dy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fd2ViVmlldy5n
ZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRUZMVGVzdFZpZXc6OmJpbmRFdmVudHMo
dm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgdm9pZCogcHRyKQoreworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwobV93ZWJW
aWV3LmdldCgpLCBldmVudE5hbWUsIGNhbGxiYWNrKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19hZGQobV93ZWJWaWV3LmdldCgpLCBldmVudE5hbWUsIGNhbGxiYWNrLCBwdHIpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RM
YXVuY2hlci9FRkxUZXN0Vmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRU
ZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44NmM0NzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
c3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuaApAQCAtMCwwICsxLDc4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl
ZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EK
KyovCisKKyNpZm5kZWYgRUZMVGVzdFZpZXdfaAorI2RlZmluZSBFRkxUZXN0Vmlld19oCisKKyNp
bmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHN0cmlu
Zz4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBFRkxVbml0VGVzdHMgewor
CitjbGFzcyBFRkxUZXN0RWNvcmVFdmFzIHsKK3B1YmxpYzoKKyAgICBFRkxUZXN0RWNvcmVFdmFz
KCk7CisgICAgRUZMVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBlbmdpbmVfbmFtZSwgaW50IHZp
ZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRfdywgaW50IHZpZXdwb3J0X2gs
IGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMpOworICAgIH5FRkxUZXN0RWNvcmVFdmFzKCk7CisK
KyAgICBFdmFzKiBnZXRFdmFzKCk7CisgICAgdm9pZCBzaG93KCk7CisKK3ByaXZhdGU6CisgICAg
T3duUHRyPEVjb3JlX0V2YXM+IG1fZWNvcmVFdmFzOworfTsKKworY2xhc3MgRUZMVGVzdFZpZXcg
eworcHVibGljOgorICAgIGVudW0gRXdrVmlld1R5cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0g
MCwKKyAgICAgICAgVGlsZWRWaWV3LAorICAgIH07CisKKyAgICBleHBsaWNpdCBFRkxUZXN0Vmll
dyhFdmFzKik7CisgICAgRUZMVGVzdFZpZXcoRXZhcyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAg
RUZMVGVzdFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVG
TFRlc3RWaWV3KEV2YXMqLCBFd2tWaWV3VHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpOworCisgICAgdmlydHVhbCB+RUZMVGVzdFZpZXcoKTsKKworICAgIEV2YXNf
T2JqZWN0KiBnZXRXZWJWaWV3KCkgeyByZXR1cm4gbV93ZWJWaWV3LmdldCgpOyB9CisgICAgRXZh
c19PYmplY3QqIGdldE1haW5GcmFtZSgpOworICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lk
IHNob3coKTsKKworICAgIGJvb2wgaW5pdCgpOworICAgIHZvaWQgYmluZEV2ZW50cyh2b2lkICgq
Y2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRO
YW1lLCB2b2lkKiBwdHIpOworCitwcml2YXRlOgorICAgIEVGTFRlc3RWaWV3KGNvbnN0IEVGTFRl
c3RWaWV3Jik7CisgICAgRUZMVGVzdFZpZXcgb3BlcmF0b3I9KGNvbnN0IEVGTFRlc3RWaWV3Jik7
CisKKyAgICBFdmFzKiBtX2V2YXM7CisgICAgT3duUHRyPEV2YXNfT2JqZWN0PiBtX3dlYlZpZXc7
CisKKyAgICBpbnQgbV93aWR0aCwgbV9oZWlnaHQ7CisgICAgRXdrVmlld1R5cGUgbV9kZWZhdWx0
Vmlld1R5cGU7CisgICAgc3RkOjpzdHJpbmcgbV91cmw7Cit9OworCit9CisKKyNlbmRpZgo=
</data>
<flag name="commit-queue"
          id="123219"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122623</attachid>
            <date>2012-01-16 06:05:16 -0800</date>
            <delta_ts>2012-01-16 07:03:17 -0800</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>unit-tests.patch</filename>
            <type>text/plain</type>
            <size>24268</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZWMwYzdkOC4uMDQ2ODZiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTI1OCwzICsyNTgsNSBAQCBJTlNUQUxM
KEZJTEVTICR7RVdlYktpdF9IRUFERVJTfQogCiBJTlNUQUxMKEZJTEVTICR7V2ViS2l0X1RIRU1F
fQogICAgICAgICBERVNUSU5BVElPTiAke0RBVEFfSU5TVEFMTF9ESVJ9L3RoZW1lcykKKworSU5D
TFVERV9JRl9FWElTVFMoJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvQ01ha2VMaXN0c0VmbC50eHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKaW5kZXggMjI0NjIyYi4uMDQwMzgxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTE2ICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHVuaXQgdGVzdHMg
YW5kIHRlc3RpbmcgZnJhbWV3b3JrIGZvciBXZWJLaXQtRUZMIHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTA5CisKKyAgICAgICAgUGF0Y2gg
YnkgS3J6eXN6dG9mIEN6ZWNoIDxrLmN6ZWNoQHNhbXN1bmcuY29tPiwgVG9tYXN6IE1vcmF3c2tp
IDx0Lm1vcmF3c2tpQHNhbXN1bmcuY29tPiBvbiAyMDEyLTAxLTE2CisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RpbmcgZnJhbWV3b3JrIGlzIHVzZWQg
Zm9yIHJ1bm5pbmcgdW5pdCB0ZXN0cyB0aGF0IHJlcXVpcmUKKyAgICAgICAgaW5zdGFuY2Ugb2Yg
YSB3ZWJ2aWV3LiBVbml0IHRlc3RzIGFyZSBiYXNlZCBvbiBndGVzdCBsaWJyYXJ5LgorCisgICAg
ICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogdGVzdHMvQ01ha2VMaXN0c0VmbC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHA6IEFkZGVkLgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGVkaXRhYmxlU2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIHRlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrVXJp
U2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIHRlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcuaDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
c3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6aW5pdCk6CisgICAgICAgIChFRkxVbml0
VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd24pOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6
RUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxU
ZXN0TGF1bmNoZXI6OmVuZFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1
bmNoZXI6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNo
ZXI6OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRl
c3RMYXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hl
ci9FRkxUZXN0Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3
OjpFRkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+RUZM
VGVzdFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6aW5pdCk6Cisg
ICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpzaG93KToKKyAgICAgICAgKEVGTFVu
aXRUZXN0czo6RUZMVGVzdFZpZXc6OmdldE1haW5GcmFtZSk6CisgICAgICAgIChFRkxVbml0VGVz
dHM6OkVGTFRlc3RWaWV3OjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmll
dzo6Z2V0V2ViVmlldyk6CisKIDIwMTItMDEtMTMgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9A
cHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0gU2VjdXJpdHlQb2xpY3kgd2hpdGVsaXN0
IGludGVyZmFjZSBzaG91bGQgYmUgZXhwb3NlZCB0byBFV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC90ZXN0cy9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL0NNYWtlTGlzdHNFZmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmQ0ODkxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9D
TWFrZUxpc3RzRWZsLnR4dApAQCAtMCwwICsxLDc3IEBACitJTkNMVURFX0RJUkVDVE9SSUVTKCR7
VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0CisgICAgICAgICAgICAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L2d0ZXN0L2luY2x1ZGUKKykKKworU0VUKEdURVNUX1NPVVJDRVMgIiR7VEhJUkRQQVJUWV9E
SVJ9L2d0ZXN0L3NyYyIpCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNFU30v
Z3Rlc3QuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAgICAk
e0dURVNUX1NPVVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0
LWZpbGVwYXRoLmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAgJHtH
VEVTVF9TT1VSQ0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0
ZXN0LXR5cGVkLXRlc3QuY2MKKykKKworU0VUKEVVbml0VGVzdHNfTElCUkFSSUVTCisgICAgJHtK
YXZhU2NyaXB0Q29yZV9MSUJSQVJZX05BTUV9CisgICAgJHtXZWJDb3JlX0xJQlJBUllfTkFNRX0K
KyAgICAke1dlYktpdF9MSUJSQVJZX05BTUV9CisgICAgJHtFQ09SRV9YX0xJQlJBUklFU30KKyAg
ICAke0VESkVfTElCUkFSSUVTfQorICAgICR7RUZMREVQU19MSUJSQVJJRVN9CisgICAgJHtFVkFT
X0xJQlJBUklFU30KKykKKworU0VUKEVVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUworICAg
ICR7Q01BS0VfU09VUkNFX0RJUn0KKyAgICAke1dFQktJVF9ESVJ9L2VmbC9ld2sKKyAgICAke1dF
QktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlcgorICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfQorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS93dGYKKyAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMKKyAgICAke0VESkVfSU5DTFVERV9ESVJTfQor
ICAgICR7RUZMREVQU19JTkNMVURFX0RJUlN9CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKykK
KworCitTRVQoRVVuaXRUZXN0c19MSU5LX0ZMQUdTCisgICAgJHtFQ09SRV9YX0xERkxBR1N9Cisg
ICAgJHtFREpFX0xERkxBR1N9CisgICAgJHtFRkxERVBTX0xERkxBR1N9CisgICAgJHtFVkFTX0xE
RkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAgIExJU1QoQVBQRU5EIEVV
bml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9n
b2JqZWN0IikKKworICAgIExJU1QoQVBQRU5EIEVVbml0VGVzdHNfTElCUkFSSUVTCisgICAgICAg
ICR7R2RrX0xJQlJBUklFU30KKyAgICAgICAgJHtHbGliX0xJQlJBUklFU30KKyAgICAgICAgJHtH
dGhyZWFkX0xJQlJBUklFU30KKyAgICApCitFTkRJRiAoKQorCitTRVQoREVGQVVMVF9URVNUX1BB
R0VfRElSICR7Q01BS0VfQklOQVJZX0RJUn0vV2ViS2l0L2VmbC90ZXN0cykKKworQUREX0RFRklO
SVRJT05TKC1EREVGQVVMVF9URVNUX1BBR0VfRElSPVwiJHtERUZBVUxUX1RFU1RfUEFHRV9ESVJ9
XCIpCitBRERfREVGSU5JVElPTlMoLURERUZBVUxUX1RIRU1FX1BBVEg9XCIke1RIRU1FX0JJTkFS
WV9ESVJ9XCIpCitBRERfREVGSU5JVElPTlMoLURHVEVTVF9URVNUX0ZSQU1FV09SSykKKworQURE
X0xJQlJBUlkoZWZsX3Rlc3RfbGF1bmNoZXIKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9z
cmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwCisgICAgJHtXRUJLSVRfRElS
fS9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuY3BwCispCisKK1NF
VChFVW5pdFRlc3RzX1NPVVJDRVMKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvRUZM
VGVzdHNSdW4uY3BwCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3Rz
LmNwcAorICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Fd2tFZGl0YWJsZVRlc3RzLmNw
cAorKQorCitJTkNMVURFX0RJUkVDVE9SSUVTKCR7RVVuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9S
SUVTfSkKK0FERF9FWEVDVVRBQkxFKFByb2dyYW1zL0VVbml0VGVzdHMgJHtFVW5pdFRlc3RzX1NP
VVJDRVN9KQorVEFSR0VUX0xJTktfTElCUkFSSUVTKFByb2dyYW1zL0VVbml0VGVzdHMgJHtFVW5p
dFRlc3RzX0xJQlJBUklFU30gZWZsX3Rlc3RfbGF1bmNoZXIgZ3Rlc3QpCitBRERfVEFSR0VUX1BS
T1BFUlRJRVMoUHJvZ3JhbXMvRVVuaXRUZXN0cyBMSU5LX0ZMQUdTICIke0VVbml0VGVzdHNfTElO
S19GTEFHU30iKQorU0VUX1RBUkdFVF9QUk9QRVJUSUVTKFByb2dyYW1zL0VVbml0VGVzdHMgUFJP
UEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7Q01BS0VfQklOQVJZX0RJUn0iKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRt
bCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkODFlNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwKQEAgLTAsMCAr
MSw2IEBACis8SFRNTD4KKzxCT0RZPgorPEgyIGFsaWduPSJjZW50ZXIiPkVGTCBVbml0IFRlc3Rz
PC9IMj4KKzxIMiBhbGlnbj0iY2VudGVyIj5EZWZhdWx0IFRlc3RpbmcgV2ViIFBhZ2U8L0gyPgor
PC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3Jj
L0VGTFRlc3RzUnVuLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEyOGVjNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAK
QEAgLTAsMCArMSwyOCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVj
dHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0
b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworI2luY2x1ZGUgIlVuaXRUZXN0TGF1bmNoZXIvRUZM
VGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNw
YWNlIEVGTFVuaXRUZXN0czsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQorewor
ICAgIGF0ZXhpdChFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKTsKKyAgICA6OnRlc3Rpbmc6
OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRhYmxl
VGVzdHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDk0YjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5j
cHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBF
bGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBC
b3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJVbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIgorI2luY2x1ZGUgPEVX
ZWJLaXQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRUZM
VW5pdFRlc3RzOworCit2b2lkIGVkaXRhYmxlU2V0VGVzdENhbGxiYWNrKHZvaWQqIGV2ZW50SW5m
bywgRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCit7CisgICAgRVhQRUNUX0VRKEVJTkFfVFJV
RSwgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KG8sIEVJTkFfRkFMU0UpKTsKKyAgICBFWFBFQ1RfRVEo
RUlOQV9GQUxTRSwgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KG8pKTsKKyAgICBFTkRfVEVTVCgpOwor
fQorCitURVNUKEV3a0VkaXRhYmxlVGVzdHMsIEVkaXRhYmxlU2V0VGVzdCkKK3sKKyAgICBSVU5f
VEVTVChlZGl0YWJsZVNldFRlc3RDYWxsYmFjaywgImxvYWQsZmluaXNoZWQiLCAwKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrVXJpVGVzdHMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNmNiNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrVXJpVGVzdHMuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
U2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVT
QQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RMYXVuY2hl
ci9FRkxUZXN0TGF1bmNoZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVGTFVuaXRUZXN0czsKKwordm9pZCBld2tV
cmlTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVjdCogbywgdm9pZCog
ZGF0YSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoImh0dHA6Ly93d3cud2Via2l0Lm9yZy8iLCBld2tf
dmlld191cmlfZ2V0KG8pKTsKKyAgICBFTkRfVEVTVCgpOworfQorCitURVNUKEV3a1VyaVRlc3Rz
LCBFd2tVcmlTZXRUZXN0KQoreworICAgIFJVTl9URVNUKCJodHRwOi8vd3d3LndlYmtpdC5vcmci
LCBld2tVcmlTZXRUZXN0Q2FsbGJhY2ssICJsb2FkLGZpbmlzaGVkIiwgMCk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0
Q29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9F
RkxUZXN0Q29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRjZmNi
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVz
dExhdW5jaGVyL0VGTFRlc3RDb25maWcuaApAQCAtMCwwICsxLDMxIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05V
CisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNp
Zm5kZWYgRUZMVGVzdENvbmZpZ19oCisjZGVmaW5lIEVGTFRlc3RDb25maWdfaAorCituYW1lc3Bh
Y2UgRUZMVW5pdFRlc3RzIHsKK25hbWVzcGFjZSBDb25maWcgeworc3RhdGljIGNvbnN0IGludCBk
ZWZhdWx0Vmlld1dpZHRoID0gNjAwOworc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Vmlld0hlaWdo
dCA9IDgwMDsKK3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0VGhlbWVQYXRoID0gREVGQVVMVF9U
SEVNRV9QQVRIIi9kZWZhdWx0LmVkaiI7CitzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdFRlc3RQ
YWdlID0gImZpbGU6Ly8iREVGQVVMVF9URVNUX1BBR0VfRElSIi9kZWZhdWx0X3Rlc3RfcGFnZS5o
dG1sIjsKK30KK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTgzZDM1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExh
dW5jaGVyLmNwcApAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
U2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3Vp
dGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRUZMVGVzdExhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJFRkxUZXN0Q29u
ZmlnLmgiCisjaW5jbHVkZSAiRUZMVGVzdFZpZXcuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisK
KyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVkamUuaD4KKyNpbmNsdWRlIDxFaW5hLmg+
CisKK25hbWVzcGFjZSBFRkxVbml0VGVzdHMgeworCitib29sIEVGTFRlc3RMYXVuY2hlcjo6aW5p
dCgpCit7CisgICAgaWYgKCFlY29yZV9ldmFzX2luaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFlZGplX2luaXQoKSkgeworICAgICAgICBlY29yZV9ldmFzX3NodXRkb3du
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZXdrX2luaXQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duKCkKK3sKKyAg
ICBlY29yZV9ldmFzX3NodXRkb3duKCk7CisgICAgZWRqZV9zaHV0ZG93bigpOworICAgIGV3a19z
aHV0ZG93bigpOworfQorCit2b2lkIEVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd25BbGwoKQorewor
ICAgIGludCBjb3VudCA9IDA7CisKKyAgICB3aGlsZSAoKGNvdW50ID0gZWNvcmVfZXZhc19zaHV0
ZG93bigpKSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBlZGplX3NodXRkb3duKCkpID4g
MCkgeyB9CisgICAgd2hpbGUgKChjb3VudCA9IGV3a19zaHV0ZG93bigpKSA+IDApIHsgfQorfQor
Cit2b2lkIEVGTFRlc3RMYXVuY2hlcjo6c3RhcnRUZXN0KCkKK3sKKyAgICBlY29yZV9tYWluX2xv
b3BfYmVnaW4oKTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OmVuZFRlc3QoKQoreworICAg
IGVjb3JlX21haW5fbG9vcF9xdWl0KCk7Cit9CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjpjcmVh
dGVUZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZh
c19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2Rh
dGEpCit7CisgICAgRUZMX0lOSVRfUkVUKCk7CisKKyAgICBFRkxUZXN0RWNvcmVFdmFzIGV2YXM7
CisgICAgaWYgKCFldmFzLmdldEV2YXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV2
YXMuc2hvdygpOworCisgICAgRUZMVGVzdFZpZXcgdmlldyhldmFzLmdldEV2YXMoKSwgdXJsKTsK
KyAgICBpZiAoIXZpZXcuaW5pdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2aWV3
LmJpbmRFdmVudHMoZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworICAg
IHZpZXcuc2hvdygpOworCisgICAgU1RBUlRfVEVTVCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjayko
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lk
KiBldmVudF9kYXRhKQoreworICAgIHJldHVybiBjcmVhdGVUZXN0KEVGTFVuaXRUZXN0czo6Q29u
ZmlnOjpkZWZhdWx0VGVzdFBhZ2UsIGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9k
YXRhKTsKK30KKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdXJs
LCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29u
c3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlVGVzdCh1cmwsIGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1
bmNoZXIvRUZMVGVzdExhdW5jaGVyLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5p
dFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NDZmOTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgKQEAgLTAsMCArMSw4
OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTEx
LTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVGTFRlc3RMYXVuY2hlcl9oCisjZGVmaW5lIEVGTFRl
c3RMYXVuY2hlcl9oCisKKyNpbmNsdWRlIDxFdmFzLmg+CisKKyNpZmRlZiBHVEVTVF9URVNUX0ZS
QU1FV09SSworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjZW5kaWYKKworI2lmZGVmIEdURVNU
X1RFU1RfRlJBTUVXT1JLCisgICAgI2RlZmluZSBSVU5fVEVTVChhcmdzLi4uKSAgIFwKKyAgICAg
ICAgZG8geyAgICBcCisgICAgICAgICAgICBBU1NFUlRfRVEodHJ1ZSwgRUZMVGVzdExhdW5jaGVy
OjpydW5UZXN0KGFyZ3MpKTsgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorI2Vsc2UKKyAgICAj
ZGVmaW5lIFJVTl9URVNUKGFyZ3MuLi4pICAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxU
ZXN0TGF1bmNoZXI6OnJ1blRlc3QoYXJncyk7IFwKKyAgICB9IHdoaWxlICgwKQorI2VuZGlmCisK
KyNkZWZpbmUgU1RBUlRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVz
dExhdW5jaGVyOjpzdGFydFRlc3QoKTsgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBF
TkRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpl
bmRUZXN0KCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklUX1JFVCgpICBc
CisgICAgZG8geyAgICBcCisgICAgICAgIGlmICghRUZMVGVzdExhdW5jaGVyOjppbml0KCkpICAg
XAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2Rl
ZmluZSBFRkxfSU5JVCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRlc3RMYXVuY2hl
cjo6aW5pdCgpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfU0hVVERPV04o
KSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duKCk7
ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9TSFVURE9XTl9BTEwoKSAgXAor
ICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKCk7IFwK
KyAgICB9IHdoaWxlICgwKQorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworY2xhc3MgRUZM
VGVzdExhdW5jaGVyIHsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVy
bCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNv
bnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworcHVibGljOgorICAgIHN0
YXRpYyBib29sIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIHN0YXRp
YyB2b2lkIHNodXRkb3duQWxsKCk7CisgICAgc3RhdGljIHZvaWQgc3RhcnRUZXN0KCk7CisgICAg
c3RhdGljIHZvaWQgZW5kVGVzdCgpOworCisgICAgc3RhdGljIGJvb2wgcnVuVGVzdChjb25zdCBj
aGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKyAgICBzdGF0
aWMgYm9vbCBydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0
Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMv
VW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZTcwODY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmNwcApAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1B
IDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUZM
VGVzdFZpZXcuaCIKKworI2luY2x1ZGUgIkVGTFRlc3RDb25maWcuaCIKKyNpbmNsdWRlIDxFV2Vi
S2l0Lmg+CisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVjb3JlX0ZpbGUuaD4KKyNp
bmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RWluYS5oPgorCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK0VGTFRlc3RFY29yZUV2YXM6
OkVGTFRlc3RFY29yZUV2YXMoKQoreworICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVf
ZXZhc19uZXcoMCwgMCwgMCwgRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgs
IEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCwgMCkpOworfQorCitFRkxU
ZXN0RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBp
bnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3Bv
cnRfaCwgY29uc3QgY2hhciogZXh0cmFfb3B0aW9ucykKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGFk
b3B0UHRyKGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2aWV3cG9ydF94LCB2aWV3cG9ydF95
LCB2aWV3cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRpb25zKSk7Cit9CisKK0VGTFRlc3RF
Y29yZUV2YXM6On5FRkxUZXN0RWNvcmVFdmFzKCkKK3sgfQorCitFdmFzKiBFRkxUZXN0RWNvcmVF
dmFzOjpnZXRFdmFzKCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0KCkpCisgICAgICAgIHJl
dHVybiBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9
CisKK3ZvaWQgRUZMVGVzdEVjb3JlRXZhczo6c2hvdygpCit7CisgICAgaWYgKG1fZWNvcmVFdmFz
LmdldCgpKQorICAgICAgICBlY29yZV9ldmFzX3Nob3cobV9lY29yZUV2YXMuZ2V0KCkpOworfQor
CitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcykKKyAgICA6IG1fZXZhcyhldmFz
KQorICAgICwgbV91cmwoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRUZXN0UGFnZSkKKyAg
ICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRl
c3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVz
dHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7IH0KKworRUZMVGVzdFZpZXc6OkVGTFRl
c3RWaWV3KEV2YXMqIGV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhldmFzKQor
ICAgICwgbV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3KQorICAg
ICwgbV93aWR0aChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAs
IG1faGVpZ2h0KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sgfQor
CitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwg
Y29uc3QgY2hhciogdXJsKQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCh1cmwpCisg
ICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aChFRkxVbml0VGVzdHM6
OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KEVGTFVuaXRUZXN0czo6
Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sgfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZp
ZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAg
ICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICwg
bV9oZWlnaHQoaGVpZ2h0KQoreyB9CisKK0VGTFRlc3RWaWV3Ojp+RUZMVGVzdFZpZXcoKQoreyB9
CisKK2Jvb2wgRUZMVGVzdFZpZXc6OmluaXQoKQoreworICAgIGlmICghbV9ldmFzIHx8IG1fdXJs
LmVtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9kZWZhdWx0
Vmlld1R5cGUpIHsKKyAgICBjYXNlIFNpbmdsZVZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGFk
b3B0UHRyKGV3a192aWV3X3NpbmdsZV9hZGQobV9ldmFzKSk7CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBUaWxlZFZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0UHRyKGV3a192aWV3
X3RpbGVkX2FkZChtX2V2YXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFt
X3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGV3a192aWV3X3Ro
ZW1lX3NldChtX3dlYlZpZXcuZ2V0KCksIEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0VGhl
bWVQYXRoKTsKKyAgICBld2tfdmlld191cmlfc2V0KG1fd2ViVmlldy5nZXQoKSwgbV91cmwuY19z
dHIoKSk7Cit9CisKK3ZvaWQgRUZMVGVzdFZpZXc6OnNob3coKQoreworICAgIGlmICghbV93ZWJW
aWV3LmdldCgpKQorICAgICAgICByZXR1cm47CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2Vi
Vmlldy5nZXQoKSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93
ZWJWaWV3LmdldCgpKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93ZWJWaWV3LmdldCgp
LCBFSU5BX1RSVUUpOworfQorCitFdmFzX09iamVjdCogRUZMVGVzdFZpZXc6OmdldE1haW5GcmFt
ZSgpCit7CisgICAgaWYgKG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGV3a192aWV3
X2ZyYW1lX21haW5fZ2V0KG1fd2ViVmlldy5nZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0V2
YXMqIEVGTFRlc3RWaWV3OjpnZXRFdmFzKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LmdldCgpKQor
ICAgICAgICByZXR1cm4gZXZhc19vYmplY3RfZXZhc19nZXQobV93ZWJWaWV3LmdldCgpKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBFRkxUZXN0Vmlldzo6YmluZEV2ZW50cyh2b2lkICgqY2Fs
bGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnROYW1l
LCB2b2lkKiBwdHIpCit7CisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbChtX3dlYlZpZXcuZ2V0KCks
IGV2ZW50TmFtZSwgY2FsbGJhY2spOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZChtX3dlYlZpZXcuZ2V0KCksIGV2ZW50TmFtZSwgY2FsbGJhY2ssIHB0cik7Cit9CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VG
TFRlc3RWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hl
ci9FRkxUZXN0Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzQ3
NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRl
c3RMYXVuY2hlci9FRkxUZXN0Vmlldy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUK
KyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lm
bmRlZiBFRkxUZXN0Vmlld19oCisjZGVmaW5lIEVGTFRlc3RWaWV3X2gKKworI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK2NsYXNzIEVG
TFRlc3RFY29yZUV2YXMgeworcHVibGljOgorICAgIEVGTFRlc3RFY29yZUV2YXMoKTsKKyAgICBF
RkxUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwg
aW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29uc3QgY2hh
ciogZXh0cmFfb3B0aW9ucyk7CisgICAgfkVGTFRlc3RFY29yZUV2YXMoKTsKKworICAgIEV2YXMq
IGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8RWNv
cmVfRXZhcz4gbV9lY29yZUV2YXM7Cit9OworCitjbGFzcyBFRkxUZXN0VmlldyB7CitwdWJsaWM6
CisgICAgZW51bSBFd2tWaWV3VHlwZSB7CisgICAgICAgIFNpbmdsZVZpZXcgPSAwLAorICAgICAg
ICBUaWxlZFZpZXcsCisgICAgfTsKKworICAgIGV4cGxpY2l0IEVGTFRlc3RWaWV3KEV2YXMqKTsK
KyAgICBFRkxUZXN0VmlldyhFdmFzKiwgY29uc3QgY2hhciogdXJsKTsKKyAgICBFRkxUZXN0Vmll
dyhFdmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRUZMVGVzdFZpZXco
RXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0aCwgaW50IGhlaWdo
dCk7CisKKyAgICB2aXJ0dWFsIH5FRkxUZXN0VmlldygpOworCisgICAgRXZhc19PYmplY3QqIGdl
dFdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBFdmFzX09iamVjdCog
Z2V0TWFpbkZyYW1lKCk7CisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZvaWQgc2hvdygpOwor
CisgICAgYm9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFjayko
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZvaWQq
IHB0cik7CisKK3ByaXZhdGU6CisgICAgRUZMVGVzdFZpZXcoY29uc3QgRUZMVGVzdFZpZXcmKTsK
KyAgICBFRkxUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRUZMVGVzdFZpZXcmKTsKKworICAgIEV2
YXMqIG1fZXZhczsKKyAgICBPd25QdHI8RXZhc19PYmplY3Q+IG1fd2ViVmlldzsKKworICAgIGlu
dCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBtX2RlZmF1bHRWaWV3VHlwZTsK
KyAgICBzdGQ6OnN0cmluZyBtX3VybDsKK307CisKK30KKworI2VuZGlmCg==
</data>
<flag name="commit-queue"
          id="123474"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122630</attachid>
            <date>2012-01-16 07:03:17 -0800</date>
            <delta_ts>2012-01-17 00:25:48 -0800</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>unit-tests.patch</filename>
            <type>text/plain</type>
            <size>24422</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZWMwYzdkOC4uMDQ2ODZiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTI1OCwzICsyNTgsNSBAQCBJTlNUQUxM
KEZJTEVTICR7RVdlYktpdF9IRUFERVJTfQogCiBJTlNUQUxMKEZJTEVTICR7V2ViS2l0X1RIRU1F
fQogICAgICAgICBERVNUSU5BVElPTiAke0RBVEFfSU5TVEFMTF9ESVJ9L3RoZW1lcykKKworSU5D
TFVERV9JRl9FWElTVFMoJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvQ01ha2VMaXN0c0VmbC50eHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKaW5kZXggMjI0NjIyYi4uMDQwMzgxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTE2ICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHVuaXQgdGVzdHMg
YW5kIHRlc3RpbmcgZnJhbWV3b3JrIGZvciBXZWJLaXQtRUZMIHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTA5CisKKyAgICAgICAgUGF0Y2gg
YnkgS3J6eXN6dG9mIEN6ZWNoIDxrLmN6ZWNoQHNhbXN1bmcuY29tPiwgVG9tYXN6IE1vcmF3c2tp
IDx0Lm1vcmF3c2tpQHNhbXN1bmcuY29tPiBvbiAyMDEyLTAxLTE2CisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RpbmcgZnJhbWV3b3JrIGlzIHVzZWQg
Zm9yIHJ1bm5pbmcgdW5pdCB0ZXN0cyB0aGF0IHJlcXVpcmUKKyAgICAgICAgaW5zdGFuY2Ugb2Yg
YSB3ZWJ2aWV3LiBVbml0IHRlc3RzIGFyZSBiYXNlZCBvbiBndGVzdCBsaWJyYXJ5LgorCisgICAg
ICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogdGVzdHMvQ01ha2VMaXN0c0VmbC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHA6IEFkZGVkLgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGVkaXRhYmxlU2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIHRlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrVXJp
U2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIHRlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcuaDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
c3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6aW5pdCk6CisgICAgICAgIChFRkxVbml0
VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd24pOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6
RUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxU
ZXN0TGF1bmNoZXI6OmVuZFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1
bmNoZXI6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNo
ZXI6OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRl
c3RMYXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hl
ci9FRkxUZXN0Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3
OjpFRkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+RUZM
VGVzdFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6aW5pdCk6Cisg
ICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpzaG93KToKKyAgICAgICAgKEVGTFVu
aXRUZXN0czo6RUZMVGVzdFZpZXc6OmdldE1haW5GcmFtZSk6CisgICAgICAgIChFRkxVbml0VGVz
dHM6OkVGTFRlc3RWaWV3OjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmll
dzo6Z2V0V2ViVmlldyk6CisKIDIwMTItMDEtMTMgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9A
cHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0gU2VjdXJpdHlQb2xpY3kgd2hpdGVsaXN0
IGludGVyZmFjZSBzaG91bGQgYmUgZXhwb3NlZCB0byBFV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC90ZXN0cy9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL0NNYWtlTGlzdHNFZmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjBjNDY4ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9D
TWFrZUxpc3RzRWZsLnR4dApAQCAtMCwwICsxLDgyIEBACitJTkNMVURFX0RJUkVDVE9SSUVTKCR7
VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0CisgICAgICAgICAgICAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L2d0ZXN0L2luY2x1ZGUKKykKKworU0VUKEdURVNUX1NPVVJDRVMgIiR7VEhJUkRQQVJUWV9E
SVJ9L2d0ZXN0L3NyYyIpCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNFU30v
Z3Rlc3QuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAgICAk
e0dURVNUX1NPVVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0
LWZpbGVwYXRoLmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAgJHtH
VEVTVF9TT1VSQ0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0
ZXN0LXR5cGVkLXRlc3QuY2MKKykKKworU0VUKEVVbml0VGVzdHNfTElCUkFSSUVTCisgICAgJHtK
YXZhU2NyaXB0Q29yZV9MSUJSQVJZX05BTUV9CisgICAgJHtXZWJDb3JlX0xJQlJBUllfTkFNRX0K
KyAgICAke1dlYktpdF9MSUJSQVJZX05BTUV9CisgICAgJHtFQ09SRV9YX0xJQlJBUklFU30KKyAg
ICAke0VESkVfTElCUkFSSUVTfQorICAgICR7RUZMREVQU19MSUJSQVJJRVN9CisgICAgJHtFVkFT
X0xJQlJBUklFU30KKykKKworU0VUKEVVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUworICAg
ICR7Q01BS0VfU09VUkNFX0RJUn0KKyAgICAke1dFQktJVF9ESVJ9L2VmbC9ld2sKKyAgICAke1dF
QktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlcgorICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfQorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS93dGYKKyAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMKKyAgICAke0VESkVfSU5DTFVERV9ESVJTfQor
ICAgICR7RUZMREVQU19JTkNMVURFX0RJUlN9CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKykK
KworCitTRVQoRVVuaXRUZXN0c19MSU5LX0ZMQUdTCisgICAgJHtFQ09SRV9YX0xERkxBR1N9Cisg
ICAgJHtFREpFX0xERkxBR1N9CisgICAgJHtFRkxERVBTX0xERkxBR1N9CisgICAgJHtFVkFTX0xE
RkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAgIExJU1QoQVBQRU5EIEVV
bml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9n
b2JqZWN0IikKKworICAgIExJU1QoQVBQRU5EIEVVbml0VGVzdHNfTElCUkFSSUVTCisgICAgICAg
ICR7R2RrX0xJQlJBUklFU30KKyAgICAgICAgJHtHbGliX0xJQlJBUklFU30KKyAgICAgICAgJHtH
dGhyZWFkX0xJQlJBUklFU30KKyAgICApCitFTkRJRiAoKQorCitJRiAoV1RGX1VTRV9TT1VQKQor
ICAgIExJU1QoQVBQRU5EIEVVbml0VGVzdHNfTElCUkFSSUVTICR7TElCU09VUDI0X0xJQlJBUklF
U30pCisgICAgTElTVChBUFBFTkQgRVVuaXRUZXN0c19MSU5LX0ZMQUdTICR7TElCU09VUDI0X0xE
RkxBR1N9KQorRU5ESUYgKCkKKworU0VUKERFRkFVTFRfVEVTVF9QQUdFX0RJUiAke0NNQUtFX0JJ
TkFSWV9ESVJ9L1dlYktpdC9lZmwvdGVzdHMpCisKK0FERF9ERUZJTklUSU9OUygtRERFRkFVTFRf
VEVTVF9QQUdFX0RJUj1cIiR7REVGQVVMVF9URVNUX1BBR0VfRElSfVwiKQorQUREX0RFRklOSVRJ
T05TKC1EREVGQVVMVF9USEVNRV9QQVRIPVwiJHtUSEVNRV9CSU5BUllfRElSfVwiKQorQUREX0RF
RklOSVRJT05TKC1ER1RFU1RfVEVTVF9GUkFNRVdPUkspCisKK0FERF9MSUJSQVJZKGVmbF90ZXN0
X2xhdW5jaGVyCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdExhdW5jaGVyLmNwcAorICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmNwcAorKQorCitTRVQoRVVuaXRUZXN0c19TT1VS
Q0VTCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcAorICAg
ICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKKyAgICAke1dFQktJ
VF9ESVJ9L2VmbC90ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHAKKykKKworSU5DTFVERV9E
SVJFQ1RPUklFUygke0VVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFU30pCitBRERfRVhFQ1VU
QUJMRShQcm9ncmFtcy9FVW5pdFRlc3RzICR7RVVuaXRUZXN0c19TT1VSQ0VTfSkKK1RBUkdFVF9M
SU5LX0xJQlJBUklFUyhQcm9ncmFtcy9FVW5pdFRlc3RzICR7RVVuaXRUZXN0c19MSUJSQVJJRVN9
IGVmbF90ZXN0X2xhdW5jaGVyIGd0ZXN0KQorQUREX1RBUkdFVF9QUk9QRVJUSUVTKFByb2dyYW1z
L0VVbml0VGVzdHMgTElOS19GTEFHUyAiJHtFVW5pdFRlc3RzX0xJTktfRkxBR1N9IikKK1NFVF9U
QVJHRVRfUFJPUEVSVElFUyhQcm9ncmFtcy9FVW5pdFRlc3RzIFBST1BFUlRJRVMgUlVOVElNRV9P
VVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0JJTkFSWV9ESVJ9IikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmVkZDgxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8
Qk9EWT4KKzxIMiBhbGlnbj0iY2VudGVyIj5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249
ImNlbnRlciI+RGVmYXVsdCBUZXN0aW5nIFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjhlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwCkBAIC0wLDAgKzEsMjggQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAg
ICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3
IFVTQQorKi8KKyNpbmNsdWRlICJVbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7
CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBhdGV4aXQoRUZMVGVz
dExhdW5jaGVyOjpzaHV0ZG93bkFsbCk7CisgICAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgm
YXJnYywgYXJndik7CisgICAgcmV0dXJuIFJVTl9BTExfVEVTVFMoKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tFZGl0YWJsZVRlc3RzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tFZGl0YWJsZVRlc3RzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA5NGI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwK
KyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0x
MzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RM
YXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVGTFVuaXRUZXN0czsKKwordm9p
ZCBlZGl0YWJsZVNldFRlc3RDYWxsYmFjayh2b2lkKiBldmVudEluZm8sIEV2YXNfT2JqZWN0KiBv
LCB2b2lkKiBkYXRhKQoreworICAgIEVYUEVDVF9FUShFSU5BX1RSVUUsIGV3a192aWV3X2VkaXRh
YmxlX3NldChvLCBFSU5BX0ZBTFNFKSk7CisgICAgRVhQRUNUX0VRKEVJTkFfRkFMU0UsIGV3a192
aWV3X2VkaXRhYmxlX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsKK30KKworVEVTVChFd2tFZGl0
YWJsZVRlc3RzLCBFZGl0YWJsZVNldFRlc3QpCit7CisgICAgUlVOX1RFU1QoZWRpdGFibGVTZXRU
ZXN0Q2FsbGJhY2ssICJsb2FkLGZpbmlzaGVkIiwgMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrVXJpVGVzdHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zMDZjYjRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
c3JjL0V3a1VyaVRlc3RzLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVy
LmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisKK3ZvaWQgZXdrVXJpU2V0VGVzdENhbGxiYWNr
KHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCit7CisgICAgRVhQ
RUNUX1NUUkVRKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwgZXdrX3ZpZXdfdXJpX2dldChvKSk7
CisgICAgRU5EX1RFU1QoKTsKK30KKworVEVTVChFd2tVcmlUZXN0cywgRXdrVXJpU2V0VGVzdCkK
K3sKKyAgICBSVU5fVEVTVCgiaHR0cDovL3d3dy53ZWJraXQub3JnIiwgZXdrVXJpU2V0VGVzdENh
bGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5oIGIvU291cmNl
L1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2ZjYjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0
Q29uZmlnLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ft
c3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg
MzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVGTFRlc3RDb25m
aWdfaAorI2RlZmluZSBFRkxUZXN0Q29uZmlnX2gKKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7
CituYW1lc3BhY2UgQ29uZmlnIHsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFZpZXdXaWR0aCA9
IDYwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFZpZXdIZWlnaHQgPSA4MDA7CitzdGF0aWMg
Y29uc3QgY2hhciogZGVmYXVsdFRoZW1lUGF0aCA9IERFRkFVTFRfVEhFTUVfUEFUSCIvZGVmYXVs
dC5lZGoiOworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRUZXN0UGFnZSA9ICJmaWxlOi8vIkRF
RkFVTFRfVEVTVF9QQUdFX0RJUiIvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbCI7Cit9Cit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1
bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZWE4M2QzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5jcHAKQEAgLTAs
MCArMSwxMDIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBN
QSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVG
TFRlc3RMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiRUZMVGVzdENvbmZpZy5oIgorI2luY2x1ZGUg
IkVGTFRlc3RWaWV3LmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorCisjaW5jbHVkZSA8RWNvcmUu
aD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RWluYS5oPgorCituYW1lc3BhY2UgRUZM
VW5pdFRlc3RzIHsKKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6OmluaXQoKQoreworICAgIGlmICgh
ZWNvcmVfZXZhc19pbml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZWRq
ZV9pbml0KCkpIHsKKyAgICAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGV3a19pbml0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bigpCit7CisgICAgZWNvcmVfZXZhc19zaHV0
ZG93bigpOworICAgIGVkamVfc2h1dGRvd24oKTsKKyAgICBld2tfc2h1dGRvd24oKTsKK30KKwor
dm9pZCBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKCkKK3sKKyAgICBpbnQgY291bnQgPSAw
OworCisgICAgd2hpbGUgKChjb3VudCA9IGVjb3JlX2V2YXNfc2h1dGRvd24oKSkgPiAwKSB7IH0K
KyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9zaHV0ZG93bigpKSA+IDApIHsgfQorICAgIHdoaWxl
ICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkgPiAwKSB7IH0KK30KKwordm9pZCBFRkxUZXN0TGF1
bmNoZXI6OnN0YXJ0VGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Cit9CisK
K3ZvaWQgRUZMVGVzdExhdW5jaGVyOjplbmRUZXN0KCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3Bf
cXVpdCgpOworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6Y3JlYXRlVGVzdChjb25zdCBjaGFy
KiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCop
LCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIEVGTF9J
TklUX1JFVCgpOworCisgICAgRUZMVGVzdEVjb3JlRXZhcyBldmFzOworICAgIGlmICghZXZhcy5n
ZXRFdmFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBldmFzLnNob3coKTsKKworICAg
IEVGTFRlc3RWaWV3IHZpZXcoZXZhcy5nZXRFdmFzKCksIHVybCk7CisgICAgaWYgKCF2aWV3Lmlu
aXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmlldy5iaW5kRXZlbnRzKGV2ZW50
X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKKyAgICB2aWV3LnNob3coKTsKKwor
ICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVGTFRlc3RM
YXVuY2hlcjo6cnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVj
dCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sK
KyAgICByZXR1cm4gY3JlYXRlVGVzdChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFRlc3RQ
YWdlLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7Cit9CisKK2Jvb2wg
RUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2Nh
bGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25h
bWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRlc3QodXJsLCBldmVu
dF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVu
Y2hlci5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZM
VGVzdExhdW5jaGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2Zjk1
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVz
dExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBH
TlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKwor
I2lmbmRlZiBFRkxUZXN0TGF1bmNoZXJfaAorI2RlZmluZSBFRkxUZXN0TGF1bmNoZXJfaAorCisj
aW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgR1RFU1RfVEVTVF9GUkFNRVdPUksKKyNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgorI2VuZGlmCisKKyNpZmRlZiBHVEVTVF9URVNUX0ZSQU1FV09SSwor
ICAgICNkZWZpbmUgUlVOX1RFU1QoYXJncy4uLikgICBcCisgICAgICAgIGRvIHsgICAgXAorICAg
ICAgICAgICAgQVNTRVJUX0VRKHRydWUsIEVGTFRlc3RMYXVuY2hlcjo6cnVuVGVzdChhcmdzKSk7
ICAgIFwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNlbHNlCisgICAgI2RlZmluZSBSVU5fVEVTVChh
cmdzLi4uKSAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpydW5U
ZXN0KGFyZ3MpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIFNUQVJUX1RF
U1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRlc3RMYXVuY2hlcjo6c3RhcnRU
ZXN0KCk7ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRU5EX1RFU1QoKSAgICBcCisg
ICAgZG8geyAgICBcCisgICAgICAgIEVGTFRlc3RMYXVuY2hlcjo6ZW5kVGVzdCgpOyBcCisgICAg
fSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVF9SRVQoKSAgXAorICAgIGRvIHsgICAgXAor
ICAgICAgICBpZiAoIUVGTFRlc3RMYXVuY2hlcjo6aW5pdCgpKSAgIFwKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX0lOSVQoKSAg
XAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OmluaXQoKTsgICAgXAor
ICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX1NIVVRET1dOKCkgIFwKKyAgICBkbyB7ICAg
IFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bigpOyAgICBcCisgICAgfSB3aGls
ZSAoMCkKKworI2RlZmluZSBFRkxfU0hVVERPV05fQUxMKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAg
ICAgICAgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bkFsbCgpOyBcCisgICAgfSB3aGlsZSAoMCkK
KworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK2NsYXNzIEVGTFRlc3RMYXVuY2hlciB7Cisg
ICAgc3RhdGljIGJvb2wgY3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9j
YWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9u
YW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpbml0KCk7
CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bkFs
bCgpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0VGVzdCgpOworICAgIHN0YXRpYyB2b2lkIGVuZFRl
c3QoKTsKKworICAgIHN0YXRpYyBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgq
ZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciog
ZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CisgICAgc3RhdGljIGJvb2wgcnVuVGVzdCh2
b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3Qg
Y2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7Cit9OworCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIv
RUZMVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1
bmNoZXIvRUZMVGVzdFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmU3MDg2N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMv
VW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisg
ICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2Vl
IHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisKKyNp
bmNsdWRlICJFRkxUZXN0Q29uZmlnLmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorCisjaW5jbHVk
ZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFY29yZV9GaWxlLmg+CisjaW5jbHVkZSA8RWRqZS5oPgor
I2luY2x1ZGUgPEVpbmEuaD4KKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVz
cGFjZSBFRkxVbml0VGVzdHMgeworCitFRkxUZXN0RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFz
KCkKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAs
IEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoLCBFRkxVbml0VGVzdHM6OkNv
bmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQsIDApKTsKK30KKworRUZMVGVzdEVjb3JlRXZhczo6RUZM
VGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBlbmdpbmVfbmFtZSwgaW50IHZpZXdwb3J0X3gsIGlu
dCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRfdywgaW50IHZpZXdwb3J0X2gsIGNvbnN0IGNoYXIq
IGV4dHJhX29wdGlvbnMpCit7CisgICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFz
X25ldyhlbmdpbmVfbmFtZSwgdmlld3BvcnRfeCwgdmlld3BvcnRfeSwgdmlld3BvcnRfdywgdmll
d3BvcnRfaCwgZXh0cmFfb3B0aW9ucykpOworfQorCitFRkxUZXN0RWNvcmVFdmFzOjp+RUZMVGVz
dEVjb3JlRXZhcygpCit7IH0KKworRXZhcyogRUZMVGVzdEVjb3JlRXZhczo6Z2V0RXZhcygpCit7
CisgICAgaWYgKG1fZWNvcmVFdmFzLmdldCgpKQorICAgICAgICByZXR1cm4gZWNvcmVfZXZhc19n
ZXQobV9lY29yZUV2YXMuZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEVGTFRlc3RF
Y29yZUV2YXM6OnNob3coKQoreworICAgIGlmIChtX2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAgICAg
ZWNvcmVfZXZhc19zaG93KG1fZWNvcmVFdmFzLmdldCgpKTsKK30KKworRUZMVGVzdFZpZXc6OkVG
TFRlc3RWaWV3KEV2YXMqIGV2YXMpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKEVG
TFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0VGVzdFBhZ2UpCisgICAgLCBtX2RlZmF1bHRWaWV3
VHlwZShUaWxlZFZpZXcpCisgICAgLCBtX3dpZHRoKEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZh
dWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1
bHRWaWV3SGVpZ2h0KQoreyB9CisKK0VGTFRlc3RWaWV3OjpFRkxUZXN0VmlldyhFdmFzKiBldmFz
LCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkK
KyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRUZMVW5p
dFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0
VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7IH0KKworRUZMVGVzdFZpZXc6OkVG
TFRlc3RWaWV3KEV2YXMqIGV2YXMsIEV3a1ZpZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCkK
KyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmll
d1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRW
aWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZp
ZXdIZWlnaHQpCit7IH0KKworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMsIEV3
a1ZpZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQor
ICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2RlZmF1bHRWaWV3
VHlwZSh0eXBlKQorICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAsIG1faGVpZ2h0KGhlaWdodCkK
K3sgfQorCitFRkxUZXN0Vmlldzo6fkVGTFRlc3RWaWV3KCkKK3sgfQorCitib29sIEVGTFRlc3RW
aWV3Ojppbml0KCkKK3sKKyAgICBpZiAoIW1fZXZhcyB8fCBtX3VybC5lbXB0eSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fZGVmYXVsdFZpZXdUeXBlKSB7CisgICAg
Y2FzZSBTaW5nbGVWaWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdFB0cihld2tfdmlld19z
aW5nbGVfYWRkKG1fZXZhcykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVGlsZWRWaWV3
OgorICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdFB0cihld2tfdmlld190aWxlZF9hZGQobV9ldmFz
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBld2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3
LmdldCgpLCBFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFRoZW1lUGF0aCk7CisgICAgZXdr
X3ZpZXdfdXJpX3NldChtX3dlYlZpZXcuZ2V0KCksIG1fdXJsLmNfc3RyKCkpOworfQorCit2b2lk
IEVGTFRlc3RWaWV3OjpzaG93KCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3dlYlZpZXcuZ2V0KCksIG1fd2lk
dGgsIG1faGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fd2ViVmlldy5nZXQoKSk7Cisg
ICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2ViVmlldy5nZXQoKSwgRUlOQV9UUlVFKTsKK30K
KworRXZhc19PYmplY3QqIEVGTFRlc3RWaWV3OjpnZXRNYWluRnJhbWUoKQoreworICAgIGlmICht
X3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBld2tfdmlld19mcmFtZV9tYWluX2dldCht
X3dlYlZpZXcuZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCitFdmFzKiBFRkxUZXN0Vmlldzo6
Z2V0RXZhcygpCit7CisgICAgaWYgKG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG1fd2ViVmlldy5nZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgRUZMVGVzdFZpZXc6OmJpbmRFdmVudHModm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwgRXZh
c19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgdm9pZCogcHRyKQorewor
ICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19kZWwobV93ZWJWaWV3LmdldCgpLCBldmVudE5hbWUsIGNhbGxi
YWNrKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQobV93ZWJWaWV3LmdldCgp
LCBldmVudE5hbWUsIGNhbGxiYWNrLCBwdHIpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5oIGIvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM0NzVjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVz
dFZpZXcuaApAQCAtMCwwICsxLDc4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1z
dW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz
MzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5kZWYgRUZMVGVzdFZpZXdf
aAorI2RlZmluZSBFRkxUZXN0Vmlld19oCisKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5j
bHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBFRkxVbml0VGVzdHMgeworCitjbGFzcyBFRkxUZXN0RWNvcmVFdmFzIHsK
K3B1YmxpYzoKKyAgICBFRkxUZXN0RWNvcmVFdmFzKCk7CisgICAgRUZMVGVzdEVjb3JlRXZhcyhj
b25zdCBjaGFyKiBlbmdpbmVfbmFtZSwgaW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBp
bnQgdmlld3BvcnRfdywgaW50IHZpZXdwb3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMp
OworICAgIH5FRkxUZXN0RWNvcmVFdmFzKCk7CisKKyAgICBFdmFzKiBnZXRFdmFzKCk7CisgICAg
dm9pZCBzaG93KCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEVjb3JlX0V2YXM+IG1fZWNvcmVF
dmFzOworfTsKKworY2xhc3MgRUZMVGVzdFZpZXcgeworcHVibGljOgorICAgIGVudW0gRXdrVmll
d1R5cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0gMCwKKyAgICAgICAgVGlsZWRWaWV3LAorICAg
IH07CisKKyAgICBleHBsaWNpdCBFRkxUZXN0VmlldyhFdmFzKik7CisgICAgRUZMVGVzdFZpZXco
RXZhcyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRUZMVGVzdFZpZXcoRXZhcyosIEV3a1ZpZXdU
eXBlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVGTFRlc3RWaWV3KEV2YXMqLCBFd2tWaWV3VHlw
ZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgdmlydHVh
bCB+RUZMVGVzdFZpZXcoKTsKKworICAgIEV2YXNfT2JqZWN0KiBnZXRXZWJWaWV3KCkgeyByZXR1
cm4gbV93ZWJWaWV3LmdldCgpOyB9CisgICAgRXZhc19PYmplY3QqIGdldE1haW5GcmFtZSgpOwor
ICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKworICAgIGJvb2wgaW5pdCgp
OworICAgIHZvaWQgYmluZEV2ZW50cyh2b2lkICgqY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVj
dCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnROYW1lLCB2b2lkKiBwdHIpOworCitwcml2YXRl
OgorICAgIEVGTFRlc3RWaWV3KGNvbnN0IEVGTFRlc3RWaWV3Jik7CisgICAgRUZMVGVzdFZpZXcg
b3BlcmF0b3I9KGNvbnN0IEVGTFRlc3RWaWV3Jik7CisKKyAgICBFdmFzKiBtX2V2YXM7CisgICAg
T3duUHRyPEV2YXNfT2JqZWN0PiBtX3dlYlZpZXc7CisKKyAgICBpbnQgbV93aWR0aCwgbV9oZWln
aHQ7CisgICAgRXdrVmlld1R5cGUgbV9kZWZhdWx0Vmlld1R5cGU7CisgICAgc3RkOjpzdHJpbmcg
bV91cmw7Cit9OworCit9CisKKyNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122725</attachid>
            <date>2012-01-17 00:25:48 -0800</date>
            <delta_ts>2012-05-14 06:41:55 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>unit-tests.patch</filename>
            <type>text/plain</type>
            <size>24172</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZWMwYzdkOC4uMDQ2ODZiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTI1OCwzICsyNTgsNSBAQCBJTlNUQUxM
KEZJTEVTICR7RVdlYktpdF9IRUFERVJTfQogCiBJTlNUQUxMKEZJTEVTICR7V2ViS2l0X1RIRU1F
fQogICAgICAgICBERVNUSU5BVElPTiAke0RBVEFfSU5TVEFMTF9ESVJ9L3RoZW1lcykKKworSU5D
TFVERV9JRl9FWElTVFMoJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvQ01ha2VMaXN0c0VmbC50eHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKaW5kZXggMjI0NjIyYi4uMDQwMzgxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDUwIEBACisyMDEyLTAxLTE2ICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHVuaXQgdGVzdHMg
YW5kIHRlc3RpbmcgZnJhbWV3b3JrIGZvciBXZWJLaXQtRUZMIHBvcnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTA5CisKKyAgICAgICAgUGF0Y2gg
YnkgS3J6eXN6dG9mIEN6ZWNoIDxrLmN6ZWNoQHNhbXN1bmcuY29tPiwgVG9tYXN6IE1vcmF3c2tp
IDx0Lm1vcmF3c2tpQHNhbXN1bmcuY29tPiBvbiAyMDEyLTAxLTE2CisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RpbmcgZnJhbWV3b3JrIGlzIHVzZWQg
Zm9yIHJ1bm5pbmcgdW5pdCB0ZXN0cyB0aGF0IHJlcXVpcmUKKyAgICAgICAgaW5zdGFuY2Ugb2Yg
YSB3ZWJ2aWV3LiBVbml0IHRlc3RzIGFyZSBiYXNlZCBvbiBndGVzdCBsaWJyYXJ5LgorCisgICAg
ICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogdGVzdHMvQ01ha2VMaXN0c0VmbC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHA6IEFkZGVkLgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKGVkaXRhYmxlU2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgorICAg
ICAgICAqIHRlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrVXJp
U2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIHRlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcuaDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
c3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6aW5pdCk6CisgICAgICAgIChFRkxVbml0
VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd24pOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6
RUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxU
ZXN0TGF1bmNoZXI6OmVuZFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1
bmNoZXI6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNo
ZXI6OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRl
c3RMYXVuY2hlci5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hl
ci9FRkxUZXN0Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3
OjpFRkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+RUZM
VGVzdFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6aW5pdCk6Cisg
ICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpzaG93KToKKyAgICAgICAgKEVGTFVu
aXRUZXN0czo6RUZMVGVzdFZpZXc6OmdldE1haW5GcmFtZSk6CisgICAgICAgIChFRkxVbml0VGVz
dHM6OkVGTFRlc3RWaWV3OjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmll
dzo6Z2V0V2ViVmlldyk6CisKIDIwMTItMDEtMTMgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5kcm9A
cHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0gU2VjdXJpdHlQb2xpY3kgd2hpdGVsaXN0
IGludGVyZmFjZSBzaG91bGQgYmUgZXhwb3NlZCB0byBFV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC90ZXN0cy9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL0NNYWtlTGlzdHNFZmwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmZiYTQyNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9D
TWFrZUxpc3RzRWZsLnR4dApAQCAtMCwwICsxLDgxIEBACitJTkNMVURFX0RJUkVDVE9SSUVTKCR7
VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0CisgICAgICAgICAgICAgICAgICAgICR7VEhJUkRQQVJUWV9E
SVJ9L2d0ZXN0L2luY2x1ZGUKKykKKworU0VUKEdURVNUX1NPVVJDRVMgIiR7VEhJUkRQQVJUWV9E
SVJ9L2d0ZXN0L3NyYyIpCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNFU30v
Z3Rlc3QuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAgICAk
e0dURVNUX1NPVVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0
LWZpbGVwYXRoLmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAgJHtH
VEVTVF9TT1VSQ0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0
ZXN0LXR5cGVkLXRlc3QuY2MKKykKKworU0VUKEVVbml0VGVzdHNfTElCUkFSSUVTCisgICAgJHtK
YXZhU2NyaXB0Q29yZV9MSUJSQVJZX05BTUV9CisgICAgJHtXZWJDb3JlX0xJQlJBUllfTkFNRX0K
KyAgICAke1dlYktpdF9MSUJSQVJZX05BTUV9CisgICAgJHtFQ09SRV9YX0xJQlJBUklFU30KKyAg
ICAke0VESkVfTElCUkFSSUVTfQorICAgICR7RUZMREVQU19MSUJSQVJJRVN9CisgICAgJHtFVkFT
X0xJQlJBUklFU30KKykKKworU0VUKEVVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUworICAg
ICR7Q01BS0VfU09VUkNFX0RJUn0KKyAgICAke1dFQktJVF9ESVJ9L2VmbC9ld2sKKyAgICAke1dF
QktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlcgorICAgICR7SkFWQVNDUklQ
VENPUkVfRElSfQorICAgICR7SkFWQVNDUklQVENPUkVfRElSfS93dGYKKyAgICAke0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMKKyAgICAke0VESkVfSU5DTFVERV9ESVJTfQor
ICAgICR7RUZMREVQU19JTkNMVURFX0RJUlN9CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKykK
KworCitTRVQoRVVuaXRUZXN0c19MSU5LX0ZMQUdTCisgICAgJHtFQ09SRV9YX0xERkxBR1N9Cisg
ICAgJHtFREpFX0xERkxBR1N9CisgICAgJHtFRkxERVBTX0xERkxBR1N9CisgICAgJHtFVkFTX0xE
RkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAgIExJU1QoQVBQRU5EIEVV
bml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9n
b2JqZWN0IikKKworICAgIExJU1QoQVBQRU5EIEVVbml0VGVzdHNfTElCUkFSSUVTCisgICAgICAg
ICR7R2RrX0xJQlJBUklFU30KKyAgICAgICAgJHtHbGliX0xJQlJBUklFU30KKyAgICAgICAgJHtH
dGhyZWFkX0xJQlJBUklFU30KKyAgICApCitFTkRJRiAoKQorCitJRiAoV1RGX1VTRV9TT1VQKQor
ICAgIExJU1QoQVBQRU5EIEVVbml0VGVzdHNfTElCUkFSSUVTICR7TElCU09VUDI0X0xJQlJBUklF
U30pCisgICAgTElTVChBUFBFTkQgRVVuaXRUZXN0c19MSU5LX0ZMQUdTICR7TElCU09VUDI0X0xE
RkxBR1N9KQorRU5ESUYgKCkKKworU0VUKERFRkFVTFRfVEVTVF9QQUdFX0RJUiAke0NNQUtFX0JJ
TkFSWV9ESVJ9L1dlYktpdC9lZmwvdGVzdHMpCisKK0FERF9ERUZJTklUSU9OUygtRERFRkFVTFRf
VEVTVF9QQUdFX0RJUj1cIiR7REVGQVVMVF9URVNUX1BBR0VfRElSfVwiKQorQUREX0RFRklOSVRJ
T05TKC1EREVGQVVMVF9USEVNRV9QQVRIPVwiJHtUSEVNRV9CSU5BUllfRElSfVwiKQorCitBRERf
TElCUkFSWShlZmxfdGVzdF9sYXVuY2hlcgorICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3Ny
Yy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5jcHAKKyAgICAke1dFQktJVF9ESVJ9
L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKKykKKworU0VU
KEVVbml0VGVzdHNfU09VUkNFUworICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9FRkxU
ZXN0c1J1bi5jcHAKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvRXdrVXJpVGVzdHMu
Y3BwCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3Bw
CispCisKK0lOQ0xVREVfRElSRUNUT1JJRVMoJHtFVW5pdFRlc3RzX0lOQ0xVREVfRElSRUNUT1JJ
RVN9KQorQUREX0VYRUNVVEFCTEUoUHJvZ3JhbXMvRVVuaXRUZXN0cyAke0VVbml0VGVzdHNfU09V
UkNFU30pCitUQVJHRVRfTElOS19MSUJSQVJJRVMoUHJvZ3JhbXMvRVVuaXRUZXN0cyAke0VVbml0
VGVzdHNfTElCUkFSSUVTfSBlZmxfdGVzdF9sYXVuY2hlciBndGVzdCkKK0FERF9UQVJHRVRfUFJP
UEVSVElFUyhQcm9ncmFtcy9FVW5pdFRlc3RzIExJTktfRkxBR1MgIiR7RVVuaXRUZXN0c19MSU5L
X0ZMQUdTfSIpCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoUHJvZ3JhbXMvRVVuaXRUZXN0cyBQUk9Q
RVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllfRElSfSIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1s
IGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQ4MWU3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvdGVzdHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbApAQCAtMCwwICsx
LDYgQEAKKzxIVE1MPgorPEJPRFk+Cis8SDIgYWxpZ249ImNlbnRlciI+RUZMIFVuaXQgVGVzdHM8
L0gyPgorPEgyIGFsaWduPSJjZW50ZXIiPkRlZmF1bHQgVGVzdGluZyBXZWIgUGFnZTwvSDI+Cis8
L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMv
RUZMVGVzdHNSdW4uY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0VGTFRlc3RzUnVu
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTI4ZWM1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcApA
QCAtMCwwICsxLDI4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0
cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisjaW5jbHVkZSAiVW5pdFRlc3RMYXVuY2hlci9FRkxU
ZXN0TGF1bmNoZXIuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgRUZMVW5pdFRlc3RzOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgYXRleGl0KEVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd25BbGwpOworICAgIDo6dGVzdGluZzo6
SW5pdEdvb2dsZVRlc3QoJmFyZ2MsIGFyZ3YpOworICAgIHJldHVybiBSVU5fQUxMX1RFU1RTKCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrRWRpdGFibGVU
ZXN0cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwOTRiNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tFZGl0YWJsZVRlc3RzLmNw
cApAQCAtMCwwICsxLDM3IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlVuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSA8RVdl
YktpdC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxV
bml0VGVzdHM7CisKK3ZvaWQgZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZv
LCBFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEoRUlOQV9UUlVF
LCBld2tfdmlld19lZGl0YWJsZV9zZXQobywgRUlOQV9GQUxTRSkpOworICAgIEVYUEVDVF9FUShF
SU5BX0ZBTFNFLCBld2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9
CisKK1RFU1QoRXdrRWRpdGFibGVUZXN0cywgRWRpdGFibGVTZXRUZXN0KQoreworICAgIFJVTl9U
RVNUKGVkaXRhYmxlU2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2Y2I0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBT
ZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNB
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RMYXVuY2hlci5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKyNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRUZMVW5pdFRlc3RzOworCit2b2lkIGV3a1Vy
aVNldFRlc3RDYWxsYmFjayh2b2lkKiBldmVudEluZm8sIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBk
YXRhKQoreworICAgIEVYUEVDVF9TVFJFUSgiaHR0cDovL3d3dy53ZWJraXQub3JnLyIsIGV3a192
aWV3X3VyaV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RFU1QoRXdrVXJpVGVzdHMs
IEV3a1VyaVNldFRlc3QpCit7CisgICAgUlVOX1RFU1QoImh0dHA6Ly93d3cud2Via2l0Lm9yZyIs
IGV3a1VyaVNldFRlc3RDYWxsYmFjaywgImxvYWQsZmluaXNoZWQiLCAwKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RD
b25maWcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VG
TFRlc3RDb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNmY2I2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0
TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUK
KyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lm
bmRlZiBFRkxUZXN0Q29uZmlnX2gKKyNkZWZpbmUgRUZMVGVzdENvbmZpZ19oCisKK25hbWVzcGFj
ZSBFRkxVbml0VGVzdHMgeworbmFtZXNwYWNlIENvbmZpZyB7CitzdGF0aWMgY29uc3QgaW50IGRl
ZmF1bHRWaWV3V2lkdGggPSA2MDA7CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3SGVpZ2h0
ID0gODAwOworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRUaGVtZVBhdGggPSBERUZBVUxUX1RI
RU1FX1BBVEgiL2RlZmF1bHQuZWRqIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0VGVzdFBh
Z2UgPSAiZmlsZTovLyJERUZBVUxUX1RFU1RfUEFHRV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0
bWwiOworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhODNkMzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1
bmNoZXIuY3BwCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0
ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJFRkxUZXN0TGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIkVGTFRlc3RDb25m
aWcuaCIKKyNpbmNsdWRlICJFRkxUZXN0Vmlldy5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKwor
I2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWRqZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4K
KworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjppbml0
KCkKK3sKKyAgICBpZiAoIWVjb3JlX2V2YXNfaW5pdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWVkamVfaW5pdCgpKSB7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24o
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBld2tfaW5pdCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd24oKQoreworICAg
IGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICBlZGplX3NodXRkb3duKCk7CisgICAgZXdrX3No
dXRkb3duKCk7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bkFsbCgpCit7Cisg
ICAgaW50IGNvdW50ID0gMDsKKworICAgIHdoaWxlICgoY291bnQgPSBlY29yZV9ldmFzX3NodXRk
b3duKCkpID4gMCkgeyB9CisgICAgd2hpbGUgKChjb3VudCA9IGVkamVfc2h1dGRvd24oKSkgPiAw
KSB7IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZXdrX3NodXRkb3duKCkpID4gMCkgeyB9Cit9CisK
K3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QoKQoreworICAgIGVjb3JlX21haW5fbG9v
cF9iZWdpbigpOworfQorCit2b2lkIEVGTFRlc3RMYXVuY2hlcjo6ZW5kVGVzdCgpCit7CisgICAg
ZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKK30KKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6OmNyZWF0
ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFz
X09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0
YSkKK3sKKyAgICBFRkxfSU5JVF9SRVQoKTsKKworICAgIEVGTFRlc3RFY29yZUV2YXMgZXZhczsK
KyAgICBpZiAoIWV2YXMuZ2V0RXZhcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXZh
cy5zaG93KCk7CisKKyAgICBFRkxUZXN0VmlldyB2aWV3KGV2YXMuZ2V0RXZhcygpLCB1cmwpOwor
ICAgIGlmICghdmlldy5pbml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZpZXcu
YmluZEV2ZW50cyhldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7CisgICAg
dmlldy5zaG93KCk7CisKKyAgICBTVEFSVF9URVNUKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3Qodm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2
b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQq
IGV2ZW50X2RhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRlc3QoRUZMVW5pdFRlc3RzOjpDb25m
aWc6OmRlZmF1bHRUZXN0UGFnZSwgZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2Rh
dGEpOworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6cnVuVGVzdChjb25zdCBjaGFyKiB1cmws
IHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25z
dCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIHJldHVybiBjcmVh
dGVUZXN0KHVybCwgZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVu
Y2hlci9FRkxUZXN0TGF1bmNoZXIuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0
VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjI2ODAxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaApAQCAtMCwwICsxLDc4
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
CisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNyBVU0EKKyovCisKKyNpZm5kZWYgRUZMVGVzdExhdW5jaGVyX2gKKyNkZWZpbmUgRUZMVGVz
dExhdW5jaGVyX2gKKworI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorCisjZGVmaW5lIFJVTl9URVNUKGFyZ3MuLi4pICAgXAorICAgIGRvIHsgICAgXAorICAgICAg
ICBBU1NFUlRfRVEodHJ1ZSwgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGFyZ3MpKTsgICAgXAor
ICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU1RBUlRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAg
IFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjpzdGFydFRlc3QoKTsgICBcCisgICAgfSB3aGls
ZSAoMCkKKworI2RlZmluZSBFTkRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAg
RUZMVGVzdExhdW5jaGVyOjplbmRUZXN0KCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5l
IEVGTF9JTklUX1JFVCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIGlmICghRUZMVGVzdExh
dW5jaGVyOjppbml0KCkpICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICBcCisgICAg
fSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVCgpICBcCisgICAgZG8geyAgICBcCisgICAg
ICAgIEVGTFRlc3RMYXVuY2hlcjo6aW5pdCgpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2Rl
ZmluZSBFRkxfU0hVVERPV04oKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1
bmNoZXI6OnNodXRkb3duKCk7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9T
SFVURE9XTl9BTEwoKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6
OnNodXRkb3duQWxsKCk7IFwKKyAgICB9IHdoaWxlICgwKQorCituYW1lc3BhY2UgRUZMVW5pdFRl
c3RzIHsKKworY2xhc3MgRUZMVGVzdExhdW5jaGVyIHsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVU
ZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19P
YmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEp
OworcHVibGljOgorICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0
ZG93bigpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duQWxsKCk7CisgICAgc3RhdGljIHZvaWQg
c3RhcnRUZXN0KCk7CisgICAgc3RhdGljIHZvaWQgZW5kVGVzdCgpOworCisgICAgc3RhdGljIGJv
b2wgcnVuVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCos
IEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVu
dF9kYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjayko
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lk
KiBldmVudF9kYXRhKTsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwODY3ZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRl
c3RWaWV3LmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
U2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3Vp
dGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRUZMVGVzdFZpZXcuaCIKKworI2luY2x1ZGUgIkVGTFRlc3RDb25maWcu
aCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUg
PEVjb3JlX0ZpbGUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVkZSA8RWluYS5oPgorCisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisK
K0VGTFRlc3RFY29yZUV2YXM6OkVGTFRlc3RFY29yZUV2YXMoKQoreworICAgIG1fZWNvcmVFdmFz
ID0gYWRvcHRQdHIoZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgRUZMVW5pdFRlc3RzOjpDb25maWc6
OmRlZmF1bHRWaWV3V2lkdGgsIEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdo
dCwgMCkpOworfQorCitFRkxUZXN0RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKGNvbnN0IGNo
YXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3
cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29uc3QgY2hhciogZXh0cmFfb3B0aW9ucykKK3sKKyAg
ICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2aWV3
cG9ydF94LCB2aWV3cG9ydF95LCB2aWV3cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRpb25z
KSk7Cit9CisKK0VGTFRlc3RFY29yZUV2YXM6On5FRkxUZXN0RWNvcmVFdmFzKCkKK3sgfQorCitF
dmFzKiBFRkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMu
Z2V0KCkpCisgICAgICAgIHJldHVybiBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRUZMVGVzdEVjb3JlRXZhczo6c2hvdygpCit7Cisg
ICAgaWYgKG1fZWNvcmVFdmFzLmdldCgpKQorICAgICAgICBlY29yZV9ldmFzX3Nob3cobV9lY29y
ZUV2YXMuZ2V0KCkpOworfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcykK
KyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRl
ZmF1bHRUZXN0UGFnZSkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAs
IG1fd2lkdGgoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBt
X2hlaWdodChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7IH0KKwor
RUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KEV2YXMqIGV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAg
ICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5
cGUoVGlsZWRWaWV3KQorICAgICwgbV93aWR0aChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVs
dFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0
Vmlld0hlaWdodCkKK3sgfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcywg
RXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsKQorICAgIDogbV9ldmFzKGV2YXMpCisg
ICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93
aWR0aChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVp
Z2h0KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sgfQorCitFRkxU
ZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3Qg
Y2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAg
ICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dp
ZHRoKHdpZHRoKQorICAgICwgbV9oZWlnaHQoaGVpZ2h0KQoreyB9CisKK0VGTFRlc3RWaWV3Ojp+
RUZMVGVzdFZpZXcoKQoreyB9CisKK2Jvb2wgRUZMVGVzdFZpZXc6OmluaXQoKQoreworICAgIGlm
ICghbV9ldmFzIHx8IG1fdXJsLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHN3aXRjaCAobV9kZWZhdWx0Vmlld1R5cGUpIHsKKyAgICBjYXNlIFNpbmdsZVZpZXc6CisgICAg
ICAgIG1fd2ViVmlldyA9IGFkb3B0UHRyKGV3a192aWV3X3NpbmdsZV9hZGQobV9ldmFzKSk7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUaWxlZFZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9
IGFkb3B0UHRyKGV3a192aWV3X3RpbGVkX2FkZChtX2V2YXMpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGV3a192aWV3X3RoZW1lX3NldChtX3dlYlZpZXcuZ2V0KCksIEVGTFVuaXRUZXN0czo6
Q29uZmlnOjpkZWZhdWx0VGhlbWVQYXRoKTsKKyAgICBld2tfdmlld191cmlfc2V0KG1fd2ViVmll
dy5nZXQoKSwgbV91cmwuY19zdHIoKSk7Cit9CisKK3ZvaWQgRUZMVGVzdFZpZXc6OnNob3coKQor
eworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm47CisgICAgZXZhc19v
YmplY3RfcmVzaXplKG1fd2ViVmlldy5nZXQoKSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIGV2
YXNfb2JqZWN0X3Nob3cobV93ZWJWaWV3LmdldCgpKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQobV93ZWJWaWV3LmdldCgpLCBFSU5BX1RSVUUpOworfQorCitFdmFzX09iamVjdCogRUZMVGVz
dFZpZXc6OmdldE1haW5GcmFtZSgpCit7CisgICAgaWYgKG1fd2ViVmlldy5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG1fd2ViVmlldy5nZXQoKSk7CisgICAg
cmV0dXJuIDA7Cit9CisKK0V2YXMqIEVGTFRlc3RWaWV3OjpnZXRFdmFzKCkKK3sKKyAgICBpZiAo
bV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gZXZhc19vYmplY3RfZXZhc19nZXQobV93
ZWJWaWV3LmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBFRkxUZXN0Vmlldzo6Ymlu
ZEV2ZW50cyh2b2lkICgqY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29u
c3QgY2hhciogZXZlbnROYW1lLCB2b2lkKiBwdHIpCit7CisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Rl
bChtX3dlYlZpZXcuZ2V0KCksIGV2ZW50TmFtZSwgY2FsbGJhY2spOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3dlYlZpZXcuZ2V0KCksIGV2ZW50TmFtZSwgY2FsbGJhY2ss
IHB0cik7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9z
cmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjg2YzQ3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5oCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwK
KyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0x
MzA3IFVTQQorKi8KKworI2lmbmRlZiBFRkxUZXN0Vmlld19oCisjZGVmaW5lIEVGTFRlc3RWaWV3
X2gKKworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVk
ZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIEVGTFVuaXRU
ZXN0cyB7CisKK2NsYXNzIEVGTFRlc3RFY29yZUV2YXMgeworcHVibGljOgorICAgIEVGTFRlc3RF
Y29yZUV2YXMoKTsKKyAgICBFRkxUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1l
LCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmll
d3BvcnRfaCwgY29uc3QgY2hhciogZXh0cmFfb3B0aW9ucyk7CisgICAgfkVGTFRlc3RFY29yZUV2
YXMoKTsKKworICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKworcHJpdmF0
ZToKKyAgICBPd25QdHI8RWNvcmVfRXZhcz4gbV9lY29yZUV2YXM7Cit9OworCitjbGFzcyBFRkxU
ZXN0VmlldyB7CitwdWJsaWM6CisgICAgZW51bSBFd2tWaWV3VHlwZSB7CisgICAgICAgIFNpbmds
ZVZpZXcgPSAwLAorICAgICAgICBUaWxlZFZpZXcsCisgICAgfTsKKworICAgIGV4cGxpY2l0IEVG
TFRlc3RWaWV3KEV2YXMqKTsKKyAgICBFRkxUZXN0VmlldyhFdmFzKiwgY29uc3QgY2hhciogdXJs
KTsKKyAgICBFRkxUZXN0VmlldyhFdmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCk7
CisgICAgRUZMVGVzdFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIH5FRkxUZXN0VmlldygpOworCisg
ICAgRXZhc19PYmplY3QqIGdldFdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0K
KyAgICBFdmFzX09iamVjdCogZ2V0TWFpbkZyYW1lKCk7CisgICAgRXZhcyogZ2V0RXZhcygpOwor
ICAgIHZvaWQgc2hvdygpOworCisgICAgYm9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRz
KHZvaWQgKCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIHZvaWQqIHB0cik7CisKK3ByaXZhdGU6CisgICAgRUZMVGVzdFZpZXcoY29u
c3QgRUZMVGVzdFZpZXcmKTsKKyAgICBFRkxUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRUZMVGVz
dFZpZXcmKTsKKworICAgIEV2YXMqIG1fZXZhczsKKyAgICBPd25QdHI8RXZhc19PYmplY3Q+IG1f
d2ViVmlldzsKKworICAgIGludCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBt
X2RlZmF1bHRWaWV3VHlwZTsKKyAgICBzdGQ6OnN0cmluZyBtX3VybDsKK307CisKK30KKworI2Vu
ZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141718</attachid>
            <date>2012-05-14 06:41:55 -0700</date>
            <delta_ts>2012-05-18 00:49:56 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>24639</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMDIwMzU1Zi4uZGMwNmE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNS0xNCAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA1LTEwICBTYW0gRCAgPGRzYW0yOTEyQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiByZW5hbWUgSW5zcGVjdG9yQmFja2VuZFN0dWIuanMgdG8gSW5zcGVjdG9yQmFj
a2VuZENvbW1hbmRzLmpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNt
YWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmYzQzYjQ2Li44MTA3
OGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI3MSwzICsyNzEsNzkgQEAgSU5TVEFM
TChGSUxFUyAke0VXZWJLaXRfSEVBREVSU30KIAogSU5TVEFMTChGSUxFUyAke1dlYktpdF9USEVN
RX0KICAgICAgICAgREVTVElOQVRJT04gJHtEQVRBX0lOU1RBTExfRElSfS90aGVtZXMpCisKK0lO
Q0xVREVfRElSRUNUT1JJRVMoJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3QKKyAgICAgICAgICAgICAg
ICAgICAgJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3QvaW5jbHVkZQorKQorCitTRVQoR1RFU1RfU09V
UkNFUyAiJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3Qvc3JjIikKK0FERF9MSUJSQVJZKGd0ZXN0Cisg
ICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC5jYworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3Qt
ZGVhdGgtdGVzdC5jYworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3RfbWFpbi5jYworICAgICR7
R1RFU1RfU09VUkNFU30vZ3Rlc3QtZmlsZXBhdGguY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0
ZXN0LXBvcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LXRlc3QtcGFydC5jYworICAg
ICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtdHlwZWQtdGVzdC5jYworKQorCitTRVQoRVVuaXRUZXN0
c19MSUJSQVJJRVMKKyAgICAke0phdmFTY3JpcHRDb3JlX0xJQlJBUllfTkFNRX0KKyAgICAke1dl
YkNvcmVfTElCUkFSWV9OQU1FfQorICAgICR7V2ViS2l0X0xJQlJBUllfTkFNRX0KKyAgICAke0VD
T1JFX1hfTElCUkFSSUVTfQorICAgICR7RURKRV9MSUJSQVJJRVN9CisgICAgJHtFRkxERVBTX0xJ
QlJBUklFU30KKyAgICAke0VWQVNfTElCUkFSSUVTfQorKQorCitTRVQoRVVuaXRUZXN0c19JTkNM
VURFX0RJUkVDVE9SSUVTCisgICAgIiR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlIgorICAgICIk
e1dFQktJVF9ESVJ9L2VmbC9ld2siCisgICAgIiR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyIgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vd3RmIgorICAgICIk
e0pBVkFTQ1JJUFRDT1JFX0RJUn0vRm9yd2FyZGluZ0hlYWRlcnMiCisgICAgJHtFREpFX0lOQ0xV
REVfRElSU30KKyAgICAke0VGTERFUFNfSU5DTFVERV9ESVJTfQorICAgICR7RVZBU19JTkNMVURF
X0RJUlN9CispCisKK1NFVChFVW5pdFRlc3RzX0xJTktfRkxBR1MKKyAgICAke0VDT1JFX1hfTERG
TEFHU30KKyAgICAke0VESkVfTERGTEFHU30KKyAgICAke0VGTERFUFNfTERGTEFHU30KKyAgICAk
e0VWQVNfTERGTEFHU30KKykKKworSUYgKEVOQUJMRV9HTElCX1NVUFBPUlQpCisgICAgTElTVChB
UFBFTkQgRVVuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vd3RmL2dvYmplY3QiKQorCisgICAgTElTVChBUFBFTkQgRVVuaXRUZXN0c19MSUJSQVJJRVMK
KyAgICAgICAgJHtHZGtfTElCUkFSSUVTfQorICAgICAgICAke0dsaWJfTElCUkFSSUVTfQorICAg
ICAgICAke0d0aHJlYWRfTElCUkFSSUVTfQorICAgICkKK0VORElGICgpCisKK1NFVChERUZBVUxU
X1RFU1RfUEFHRV9ESVIgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cykKKworQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9URVNUX1BBR0VfRElSPVwiJHtERUZBVUxU
X1RFU1RfUEFHRV9ESVJ9XCIpCitBRERfREVGSU5JVElPTlMoLURERUZBVUxUX1RIRU1FX1BBVEg9
XCIke1RIRU1FX0JJTkFSWV9ESVJ9XCIpCisKK0FERF9MSUJSQVJZKGVmbF90ZXN0X2xhdW5jaGVy
CisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVz
dExhdW5jaGVyLmNwcAorICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExh
dW5jaGVyL0VGTFRlc3RWaWV3LmNwcAorKQorCitTRVQoRVVuaXRUZXN0c19TT1VSQ0VTCisgICAg
JHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcAorICAgICR7V0VCS0lU
X0RJUn0vZWZsL3Rlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHAKKyAgICAke1dFQktJVF9ESVJ9L2Vm
bC90ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHAKKykKKworSU5DTFVERV9ESVJFQ1RPUklF
Uygke0VVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFU30pCitBRERfRVhFQ1VUQUJMRShiaW4v
RVVuaXRUZXN0cyAke0VVbml0VGVzdHNfU09VUkNFU30pCitUQVJHRVRfTElOS19MSUJSQVJJRVMo
YmluL0VVbml0VGVzdHMgJHtFVW5pdFRlc3RzX0xJQlJBUklFU30gZWZsX3Rlc3RfbGF1bmNoZXIg
Z3Rlc3QpCitBRERfVEFSR0VUX1BST1BFUlRJRVMoYmluL0VVbml0VGVzdHMgTElOS19GTEFHUyAi
JHtFVW5pdFRlc3RzX0xJTktfRkxBR1N9IikKK1NFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4vRVVu
aXRUZXN0cyBQUk9QRVJUSUVTIEZPTERFUiAiV2ViS2l0IikKK1NFVF9UQVJHRVRfUFJPUEVSVElF
UyhiaW4vRVVuaXRUZXN0cyBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtD
TUFLRV9CSU5BUllfRElSfSIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggODk4OTM5Yy4uNjhjMDcxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTA1LTE0ICBLcnp5c3p0b2Yg
Q3plY2ggIDxrLmN6ZWNoQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIEltcGxlbWVudGF0
aW9uIG9mIHRlc3RpbmcgZnJhbWV3b3JrIGFuZCB1bml0IHRlc3RzIGZvciBXZWJLaXQtRUZMIHBv
cnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODUw
OQorCisgICAgICAgIFBhdGNoIGJ5IEtyenlzenRvZiBDemVjaCA8ay5jemVjaEBzYW1zdW5nLmNv
bT4sIFRvbWFzeiBNb3Jhd3NraSA8dC5tb3Jhd3NraUBzYW1zdW5nLmNvbT4gb24gMjAxMi0wMS0x
NgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0aW5n
IGZyYW1ld29yayBpcyBiYXNlZCBvbiBndGVzdCBsaWJyYXJ5LiBHdGVzdCBsaWJyYXJ5IGlzIHBh
cnQgb2YgV2ViS2l0IHByb2plY3QuIEZyYW1ld29yayBjb25zaXN0cyBvZgorICAgICAgICBsYXVu
Y2hlciBhbmQgdmlldyBwYXJ0LiBMYXVuY2hlciB0YWtlcyBjYXJlIG9mIGVmbCBpbml0aWFsaXph
dGlvbiBhbmQgc3RhcnQgdGVzdHMuIFZpZXcgcGFydCBpcyBhIGNvbnRleHQgCisgICAgICAgIG9m
IGVhY2ggdGVzdC4KKworICAgICAgICAqIHRlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHA6IEFkZGVkLgorICAgICAg
ICAobWFpbik6CisgICAgICAgICogdGVzdHMvc3JjL0V3a0VkaXRhYmxlVGVzdHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKGVkaXRhYmxlU2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIHRlc3RzL3NyYy9Fd2tVcmlUZXN0cy5jcHA6IEFkZGVkLgorICAgICAgICAoZXdr
VXJpU2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAqIHRlc3RzL3Ny
Yy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcuaDogQWRkZWQuCisgICAgICAgIChDb25m
aWcpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzKToKKyAgICAgICAgKEVGTFVuaXRU
ZXN0czo6RUZMVGVzdExhdW5jaGVyOjppbml0KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdExhdW5jaGVyOjpzaHV0ZG93bik6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RM
YXVuY2hlcjo6c2h1dGRvd25BbGwpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1
bmNoZXI6OnN0YXJ0VGVzdCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVuY2hl
cjo6ZW5kVGVzdCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6Y3Jl
YXRlVGVzdCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVuY2hlcjo6cnVuVGVz
dCk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVy
Lmg6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzKToKKyAgICAgICAgKEVGTFRlc3RMYXVu
Y2hlcik6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEVGTFVuaXRUZXN0cyk6CisgICAgICAgIChFRkxVbml0VGVz
dHM6OkVGTFRlc3RFY29yZUV2YXM6OkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5p
dFRlc3RzOjpFRkxUZXN0RWNvcmVFdmFzOjp+RUZMVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChF
RkxVbml0VGVzdHM6OkVGTFRlc3RFY29yZUV2YXM6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5p
dFRlc3RzOjpFRkxUZXN0RWNvcmVFdmFzOjpzaG93KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6
RUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dFZpZXc6On5FRkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3
Ojppbml0KToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6OnNob3cpOgorICAg
ICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKToKKyAgICAgICAg
KEVGTFVuaXRUZXN0czo6RUZMVGVzdFZpZXc6OmdldEV2YXMpOgorICAgICAgICAoRUZMVW5pdFRl
c3RzOjpFRkxUZXN0Vmlldzo6YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvc3JjL1VuaXRU
ZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFRkxVbml0VGVzdHMp
OgorICAgICAgICAoRUZMVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChFRkxUZXN0Vmlldyk6Cisg
ICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpnZXRXZWJWaWV3KToKKwogMjAxMi0w
NS0xMSAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgog
CiAgICAgICAgIFtFRkxdW0RSVF0gSW5wdXQgQXR0cmlidXRlIFBsYWNlaG9sZGVyIFJlZlRlc3Rz
IGZhaWxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL2RlZmF1bHRfdGVz
dF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgxZTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1s
CkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBhbGlnbj0iY2VudGVyIj5FRkwg
VW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVmYXVsdCBUZXN0aW5nIFdlYiBQ
YWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMv
RUZMVGVzdHNSdW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMjhl
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRUZMVGVz
dHNSdW4uY3BwCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRl
IDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKyNpbmNsdWRlICJVbml0VGVzdExh
dW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKK3sKKyAgICBhdGV4aXQoRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93bkFsbCk7CisgICAg
Ojp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7CisgICAgcmV0dXJuIFJVTl9B
TExfVEVTVFMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9F
d2tFZGl0YWJsZVRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tFZGl0
YWJsZVRlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjA5NGI0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a0VkaXRh
YmxlVGVzdHMuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1
aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaCIKKyNp
bmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIEVGTFVuaXRUZXN0czsKKwordm9pZCBlZGl0YWJsZVNldFRlc3RDYWxsYmFjayh2b2lk
KiBldmVudEluZm8sIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQoreworICAgIEVYUEVDVF9F
UShFSU5BX1RSVUUsIGV3a192aWV3X2VkaXRhYmxlX3NldChvLCBFSU5BX0ZBTFNFKSk7CisgICAg
RVhQRUNUX0VRKEVJTkFfRkFMU0UsIGV3a192aWV3X2VkaXRhYmxlX2dldChvKSk7CisgICAgRU5E
X1RFU1QoKTsKK30KKworVEVTVChFd2tFZGl0YWJsZVRlc3RzLCBFZGl0YWJsZVNldFRlc3QpCit7
CisgICAgUlVOX1RFU1QoZWRpdGFibGVTZXRUZXN0Q2FsbGJhY2ssICJsb2FkLGZpbmlzaGVkIiwg
MCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrVXJpVGVz
dHMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDZjYjRlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcApAQCAtMCwwICsx
LDM2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRU
ZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisK
K3ZvaWQgZXdrVXJpU2V0VGVzdENhbGxiYWNrKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3Qq
IG8sIHZvaWQqIGRhdGEpCit7CisgICAgRVhQRUNUX1NUUkVRKCJodHRwOi8vd3d3LndlYmtpdC5v
cmcvIiwgZXdrX3ZpZXdfdXJpX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsKK30KKworVEVTVChF
d2tVcmlUZXN0cywgRXdrVXJpU2V0VGVzdCkKK3sKKyAgICBSVU5fVEVTVCgiaHR0cDovL3d3dy53
ZWJraXQub3JnIiwgZXdrVXJpU2V0VGVzdENhbGxiYWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNo
ZXIvRUZMVGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0
TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmRkY2ZjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9z
cmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Q29uZmlnLmgKQEAgLTAsMCArMSwzMSBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBT
ZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNB
CisqLworCisjaWZuZGVmIEVGTFRlc3RDb25maWdfaAorI2RlZmluZSBFRkxUZXN0Q29uZmlnX2gK
KworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CituYW1lc3BhY2UgQ29uZmlnIHsKK3N0YXRpYyBj
b25zdCBpbnQgZGVmYXVsdFZpZXdXaWR0aCA9IDYwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVs
dFZpZXdIZWlnaHQgPSA4MDA7CitzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdFRoZW1lUGF0aCA9
IERFRkFVTFRfVEhFTUVfUEFUSCIvZGVmYXVsdC5lZGoiOworc3RhdGljIGNvbnN0IGNoYXIqIGRl
ZmF1bHRUZXN0UGFnZSA9ICJmaWxlOi8vIkRFRkFVTFRfVEVTVF9QQUdFX0RJUiIvZGVmYXVsdF90
ZXN0X3BhZ2UuaHRtbCI7Cit9Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4M2QzNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RMYXVuY2hlci5jcHAKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAg
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RMYXVuY2hlci5oIgorCisjaW5jbHVkZSAi
RUZMVGVzdENvbmZpZy5oIgorI2luY2x1ZGUgIkVGTFRlc3RWaWV3LmgiCisjaW5jbHVkZSA8RVdl
YktpdC5oPgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisjaW5jbHVk
ZSA8RWluYS5oPgorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworYm9vbCBFRkxUZXN0TGF1
bmNoZXI6OmluaXQoKQoreworICAgIGlmICghZWNvcmVfZXZhc19pbml0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghZWRqZV9pbml0KCkpIHsKKyAgICAgICAgZWNvcmVfZXZh
c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGV3a19pbml0
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpzaHV0ZG93
bigpCit7CisgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgIGVkamVfc2h1dGRvd24oKTsK
KyAgICBld2tfc2h1dGRvd24oKTsKK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3du
QWxsKCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgd2hpbGUgKChjb3VudCA9IGVjb3Jl
X2V2YXNfc2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9zaHV0
ZG93bigpKSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkgPiAw
KSB7IH0KK30KKwordm9pZCBFRkxUZXN0TGF1bmNoZXI6OnN0YXJ0VGVzdCgpCit7CisgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjplbmRUZXN0
KCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworfQorCitib29sIEVGTFRlc3RMYXVu
Y2hlcjo6Y3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjayko
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lk
KiBldmVudF9kYXRhKQoreworICAgIEVGTF9JTklUX1JFVCgpOworCisgICAgRUZMVGVzdEVjb3Jl
RXZhcyBldmFzOworICAgIGlmICghZXZhcy5nZXRFdmFzKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBldmFzLnNob3coKTsKKworICAgIEVGTFRlc3RWaWV3IHZpZXcoZXZhcy5nZXRFdmFz
KCksIHVybCk7CisgICAgaWYgKCF2aWV3LmluaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgdmlldy5iaW5kRXZlbnRzKGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9k
YXRhKTsKKyAgICB2aWV3LnNob3coKTsKKworICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEVGTFRlc3RMYXVuY2hlcjo6cnVuVGVzdCh2b2lkICgqZXZlbnRf
Y2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRf
bmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGVzdChFRkxVbml0
VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFt
ZSwgZXZlbnRfZGF0YSk7Cit9CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjpydW5UZXN0KGNvbnN0
IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVRlc3QodXJsLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRf
ZGF0YSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9V
bml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVz
dHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdExhdW5jaGVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjY4MDEwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u
LCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFRkxUZXN0TGF1bmNoZXJfaAorI2Rl
ZmluZSBFRkxUZXN0TGF1bmNoZXJfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisKKyNkZWZpbmUgUlVOX1RFU1QoYXJncy4uLikgICBcCisgICAgZG8geyAg
ICBcCisgICAgICAgIEFTU0VSVF9FUSh0cnVlLCBFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3QoYXJn
cykpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVEFSVF9URVNUKCkgICAgXAor
ICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OnN0YXJ0VGVzdCgpOyAgIFwK
KyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVORF9URVNUKCkgICAgXAorICAgIGRvIHsgICAg
XAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OmVuZFRlc3QoKTsgXAorICAgIH0gd2hpbGUgKDAp
CisKKyNkZWZpbmUgRUZMX0lOSVRfUkVUKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgaWYg
KCFFRkxUZXN0TGF1bmNoZXI6OmluaXQoKSkgICBcCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklUKCkgIFwKKyAgICBkbyB7
ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjppbml0KCk7ICAgIFwKKyAgICB9IHdoaWxl
ICgwKQorCisjZGVmaW5lIEVGTF9TSFVURE9XTigpICBcCisgICAgZG8geyAgICBcCisgICAgICAg
IEVGTFRlc3RMYXVuY2hlcjo6c2h1dGRvd24oKTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNk
ZWZpbmUgRUZMX1NIVVRET1dOX0FMTCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRl
c3RMYXVuY2hlcjo6c2h1dGRvd25BbGwoKTsgXAorICAgIH0gd2hpbGUgKDApCisKK25hbWVzcGFj
ZSBFRkxVbml0VGVzdHMgeworCitjbGFzcyBFRkxUZXN0TGF1bmNoZXIgeworICAgIHN0YXRpYyBi
b29sIGNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZv
aWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCog
ZXZlbnRfZGF0YSk7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaW5pdCgpOworICAgIHN0YXRp
YyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd25BbGwoKTsKKyAgICBz
dGF0aWMgdm9pZCBzdGFydFRlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCBlbmRUZXN0KCk7CisKKyAg
ICBzdGF0aWMgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxi
YWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUs
IHZvaWQqIGV2ZW50X2RhdGEpOworICAgIHN0YXRpYyBib29sIHJ1blRlc3Qodm9pZCAoKmV2ZW50
X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50
X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRl
c3RWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA4NjdmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1
bmNoZXIvRUZMVGVzdFZpZXcuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisg
ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFRkxUZXN0Vmlldy5oIgorCisjaW5jbHVkZSAiRUZM
VGVzdENvbmZpZy5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKworI2luY2x1ZGUgPEVjb3JlLmg+
CisjaW5jbHVkZSA8RWNvcmVfRmlsZS5oPgorI2luY2x1ZGUgPEVkamUuaD4KKyNpbmNsdWRlIDxF
aW5hLmg+CisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgRUZMVW5p
dFRlc3RzIHsKKworRUZMVGVzdEVjb3JlRXZhczo6RUZMVGVzdEVjb3JlRXZhcygpCit7CisgICAg
bV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX25ldygwLCAwLCAwLCBFRkxVbml0VGVz
dHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCwgRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1
bHRWaWV3SGVpZ2h0LCAwKSk7Cit9CisKK0VGTFRlc3RFY29yZUV2YXM6OkVGTFRlc3RFY29yZUV2
YXMoY29uc3QgY2hhciogZW5naW5lX25hbWUsIGludCB2aWV3cG9ydF94LCBpbnQgdmlld3BvcnRf
eSwgaW50IHZpZXdwb3J0X3csIGludCB2aWV3cG9ydF9oLCBjb25zdCBjaGFyKiBleHRyYV9vcHRp
b25zKQoreworICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19uZXcoZW5naW5l
X25hbWUsIHZpZXdwb3J0X3gsIHZpZXdwb3J0X3ksIHZpZXdwb3J0X3csIHZpZXdwb3J0X2gsIGV4
dHJhX29wdGlvbnMpKTsKK30KKworRUZMVGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMo
KQoreyB9CisKK0V2YXMqIEVGTFRlc3RFY29yZUV2YXM6OmdldEV2YXMoKQoreworICAgIGlmICht
X2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGVjb3JlX2V2YXNfZ2V0KG1fZWNvcmVF
dmFzLmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBFRkxUZXN0RWNvcmVFdmFzOjpz
aG93KCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0KCkpCisgICAgICAgIGVjb3JlX2V2YXNf
c2hvdyhtX2Vjb3JlRXZhcy5nZXQoKSk7Cit9CisKK0VGTFRlc3RWaWV3OjpFRkxUZXN0VmlldyhF
dmFzKiBldmFzKQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybChFRkxVbml0VGVzdHM6
OkNvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRW
aWV3KQorICAgICwgbV93aWR0aChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0
aCkKKyAgICAsIG1faGVpZ2h0KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdo
dCkKK3sgfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcywgY29uc3QgY2hh
ciogdXJsKQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2Rl
ZmF1bHRWaWV3VHlwZShUaWxlZFZpZXcpCisgICAgLCBtX3dpZHRoKEVGTFVuaXRUZXN0czo6Q29u
ZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQoRUZMVW5pdFRlc3RzOjpDb25m
aWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreyB9CisKK0VGTFRlc3RWaWV3OjpFRkxUZXN0VmlldyhF
dmFzKiBldmFzLCBFd2tWaWV3VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX2V2
YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUp
CisgICAgLCBtX3dpZHRoKEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQor
ICAgICwgbV9oZWlnaHQoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQor
eyB9CisKK0VGTFRlc3RWaWV3OjpFRkxUZXN0VmlldyhFdmFzKiBldmFzLCBFd2tWaWV3VHlwZSB0
eXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICA6IG1fZXZh
cyhldmFzKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUodHlwZSkK
KyAgICAsIG1fd2lkdGgod2lkdGgpCisgICAgLCBtX2hlaWdodChoZWlnaHQpCit7IH0KKworRUZM
VGVzdFZpZXc6On5FRkxUZXN0VmlldygpCit7IH0KKworYm9vbCBFRkxUZXN0Vmlldzo6aW5pdCgp
Cit7CisgICAgaWYgKCFtX2V2YXMgfHwgbV91cmwuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgc3dpdGNoIChtX2RlZmF1bHRWaWV3VHlwZSkgeworICAgIGNhc2UgU2luZ2xl
VmlldzoKKyAgICAgICAgbV93ZWJWaWV3ID0gYWRvcHRQdHIoZXdrX3ZpZXdfc2luZ2xlX2FkZCht
X2V2YXMpKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRpbGVkVmlldzoKKyAgICAgICAg
bV93ZWJWaWV3ID0gYWRvcHRQdHIoZXdrX3ZpZXdfdGlsZWRfYWRkKG1fZXZhcykpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fd2ViVmlldy5nZXQoKSwgRUZM
VW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRUaGVtZVBhdGgpOworICAgIGV3a192aWV3X3VyaV9z
ZXQobV93ZWJWaWV3LmdldCgpLCBtX3VybC5jX3N0cigpKTsKK30KKwordm9pZCBFRkxUZXN0Vmll
dzo6c2hvdygpCit7CisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBldmFzX29iamVjdF9yZXNpemUobV93ZWJWaWV3LmdldCgpLCBtX3dpZHRoLCBtX2hlaWdo
dCk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhtX3dlYlZpZXcuZ2V0KCkpOworICAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldChtX3dlYlZpZXcuZ2V0KCksIEVJTkFfVFJVRSk7Cit9CisKK0V2YXNfT2Jq
ZWN0KiBFRkxUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3Lmdl
dCgpKQorICAgICAgICByZXR1cm4gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobV93ZWJWaWV3Lmdl
dCgpKTsKKyAgICByZXR1cm4gMDsKK30KKworRXZhcyogRUZMVGVzdFZpZXc6OmdldEV2YXMoKQor
eworICAgIGlmIChtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBldmFzX29iamVjdF9l
dmFzX2dldChtX3dlYlZpZXcuZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEVGTFRl
c3RWaWV3OjpiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwg
dm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIW1f
d2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfZGVsKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFjayk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1l
LCBjYWxsYmFjaywgcHRyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdFZpZXcuaCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZjNDc1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmgKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJv
bmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24s
IE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVGTFRlc3RWaWV3X2gKKyNkZWZpbmUg
RUZMVGVzdFZpZXdfaAorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2YXMu
aD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3Bh
Y2UgRUZMVW5pdFRlc3RzIHsKKworY2xhc3MgRUZMVGVzdEVjb3JlRXZhcyB7CitwdWJsaWM6Cisg
ICAgRUZMVGVzdEVjb3JlRXZhcygpOworICAgIEVGTFRlc3RFY29yZUV2YXMoY29uc3QgY2hhciog
ZW5naW5lX25hbWUsIGludCB2aWV3cG9ydF94LCBpbnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0
X3csIGludCB2aWV3cG9ydF9oLCBjb25zdCBjaGFyKiBleHRyYV9vcHRpb25zKTsKKyAgICB+RUZM
VGVzdEVjb3JlRXZhcygpOworCisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZvaWQgc2hvdygp
OworCitwcml2YXRlOgorICAgIE93blB0cjxFY29yZV9FdmFzPiBtX2Vjb3JlRXZhczsKK307CisK
K2NsYXNzIEVGTFRlc3RWaWV3IHsKK3B1YmxpYzoKKyAgICBlbnVtIEV3a1ZpZXdUeXBlIHsKKyAg
ICAgICAgU2luZ2xlVmlldyA9IDAsCisgICAgICAgIFRpbGVkVmlldywKKyAgICB9OworCisgICAg
ZXhwbGljaXQgRUZMVGVzdFZpZXcoRXZhcyopOworICAgIEVGTFRlc3RWaWV3KEV2YXMqLCBjb25z
dCBjaGFyKiB1cmwpOworICAgIEVGTFRlc3RWaWV3KEV2YXMqLCBFd2tWaWV3VHlwZSwgY29uc3Qg
Y2hhciogdXJsKTsKKyAgICBFRkxUZXN0VmlldyhFdmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNo
YXIqIHVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZpcnR1YWwgfkVGTFRlc3RW
aWV3KCk7CisKKyAgICBFdmFzX09iamVjdCogZ2V0V2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmll
dy5nZXQoKTsgfQorICAgIEV2YXNfT2JqZWN0KiBnZXRNYWluRnJhbWUoKTsKKyAgICBFdmFzKiBn
ZXRFdmFzKCk7CisgICAgdm9pZCBzaG93KCk7CisKKyAgICBib29sIGluaXQoKTsKKyAgICB2b2lk
IGJpbmRFdmVudHModm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiks
IGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgdm9pZCogcHRyKTsKKworcHJpdmF0ZToKKyAgICBFRkxU
ZXN0Vmlldyhjb25zdCBFRkxUZXN0VmlldyYpOworICAgIEVGTFRlc3RWaWV3IG9wZXJhdG9yPShj
b25zdCBFRkxUZXN0VmlldyYpOworCisgICAgRXZhcyogbV9ldmFzOworICAgIE93blB0cjxFdmFz
X09iamVjdD4gbV93ZWJWaWV3OworCisgICAgaW50IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIEV3
a1ZpZXdUeXBlIG1fZGVmYXVsdFZpZXdUeXBlOworICAgIHN0ZDo6c3RyaW5nIG1fdXJsOworfTsK
KworfQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142656</attachid>
            <date>2012-05-18 00:49:56 -0700</date>
            <delta_ts>2012-06-06 06:59:48 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>24661</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMGEzZWFiMC4uN2U3MzkyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNS0xNyAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA1LTE2ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIFtFRkxdIFN1cHBvcnQgZm9yIEJhdHRlcnkgU3RhdHVzIEFQSSBvbiB0aGUgV2ViS2l0
LUVmbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggODQ5OTU0ZS4uZDhkYTMyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yNzIsMyArMjcyLDc5IEBAIElOU1RBTEwoRklMRVMgJHtF
V2ViS2l0X0hFQURFUlN9CiAKIElOU1RBTEwoRklMRVMgJHtXZWJLaXRfVEhFTUV9CiAgICAgICAg
IERFU1RJTkFUSU9OICR7REFUQV9JTlNUQUxMX0RJUn0vdGhlbWVzKQorCitJTkNMVURFX0RJUkVD
VE9SSUVTKCR7VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0CisgICAgICAgICAgICAgICAgICAgICR7VEhJ
UkRQQVJUWV9ESVJ9L2d0ZXN0L2luY2x1ZGUKKykKKworU0VUKEdURVNUX1NPVVJDRVMgIiR7VEhJ
UkRQQVJUWV9ESVJ9L2d0ZXN0L3NyYyIpCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1Rf
U09VUkNFU30vZ3Rlc3QuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3Qu
Y2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJD
RVN9L2d0ZXN0LWZpbGVwYXRoLmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNj
CisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NP
VVJDRVN9L2d0ZXN0LXR5cGVkLXRlc3QuY2MKKykKKworU0VUKEVVbml0VGVzdHNfTElCUkFSSUVT
CisgICAgJHtKYXZhU2NyaXB0Q29yZV9MSUJSQVJZX05BTUV9CisgICAgJHtXZWJDb3JlX0xJQlJB
UllfTkFNRX0KKyAgICAke1dlYktpdF9MSUJSQVJZX05BTUV9CisgICAgJHtFQ09SRV9YX0xJQlJB
UklFU30KKyAgICAke0VESkVfTElCUkFSSUVTfQorICAgICR7RUZMREVQU19MSUJSQVJJRVN9Cisg
ICAgJHtFVkFTX0xJQlJBUklFU30KKykKKworU0VUKEVVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RP
UklFUworICAgICIke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZSIKKyAgICAiJHtXRUJLSVRfRElS
fS9lZmwvZXdrIgorICAgICIke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVu
Y2hlciIKKyAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0ZiIKKyAgICAiJHtKQVZBU0NSSVBU
Q09SRV9ESVJ9L0ZvcndhcmRpbmdIZWFkZXJzIgorICAgICR7RURKRV9JTkNMVURFX0RJUlN9Cisg
ICAgJHtFRkxERVBTX0lOQ0xVREVfRElSU30KKyAgICAke0VWQVNfSU5DTFVERV9ESVJTfQorKQor
CitTRVQoRVVuaXRUZXN0c19MSU5LX0ZMQUdTCisgICAgJHtFQ09SRV9YX0xERkxBR1N9CisgICAg
JHtFREpFX0xERkxBR1N9CisgICAgJHtFRkxERVBTX0xERkxBR1N9CisgICAgJHtFVkFTX0xERkxB
R1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAgIExJU1QoQVBQRU5EIEVVbml0
VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L3d0Zi9nb2Jq
ZWN0IikKKworICAgIExJU1QoQVBQRU5EIEVVbml0VGVzdHNfTElCUkFSSUVTCisgICAgICAgICR7
R2RrX0xJQlJBUklFU30KKyAgICAgICAgJHtHbGliX0xJQlJBUklFU30KKyAgICAgICAgJHtHdGhy
ZWFkX0xJQlJBUklFU30KKyAgICApCitFTkRJRiAoKQorCitTRVQoREVGQVVMVF9URVNUX1BBR0Vf
RElSICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9lZmwvdGVzdHMpCisKK0FERF9E
RUZJTklUSU9OUygtRERFRkFVTFRfVEVTVF9QQUdFX0RJUj1cIiR7REVGQVVMVF9URVNUX1BBR0Vf
RElSfVwiKQorQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9USEVNRV9QQVRIPVwiJHtUSEVNRV9C
SU5BUllfRElSfVwiKQorCitBRERfTElCUkFSWShlZmxfdGVzdF9sYXVuY2hlcgorICAgICR7V0VC
S0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5j
cHAKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxU
ZXN0Vmlldy5jcHAKKykKKworU0VUKEVVbml0VGVzdHNfU09VUkNFUworICAgICR7V0VCS0lUX0RJ
Un0vZWZsL3Rlc3RzL3NyYy9FRkxUZXN0c1J1bi5jcHAKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90
ZXN0cy9zcmMvRXdrVXJpVGVzdHMuY3BwCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3Jj
L0V3a0VkaXRhYmxlVGVzdHMuY3BwCispCisKK0lOQ0xVREVfRElSRUNUT1JJRVMoJHtFVW5pdFRl
c3RzX0lOQ0xVREVfRElSRUNUT1JJRVN9KQorQUREX0VYRUNVVEFCTEUoYmluL0VVbml0VGVzdHMg
JHtFVW5pdFRlc3RzX1NPVVJDRVN9KQorVEFSR0VUX0xJTktfTElCUkFSSUVTKGJpbi9FVW5pdFRl
c3RzICR7RVVuaXRUZXN0c19MSUJSQVJJRVN9IGVmbF90ZXN0X2xhdW5jaGVyIGd0ZXN0KQorQURE
X1RBUkdFVF9QUk9QRVJUSUVTKGJpbi9FVW5pdFRlc3RzIExJTktfRkxBR1MgIiR7RVVuaXRUZXN0
c19MSU5LX0ZMQUdTfSIpCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoYmluL0VVbml0VGVzdHMgUFJP
UEVSVElFUyBGT0xERVIgIldlYktpdCIpCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoYmluL0VVbml0
VGVzdHMgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7Q01BS0VfQklOQVJZ
X0RJUn0iKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDE0NTc1MmUuLjY4ZjFjMTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMi0wNS0xNyAgS3J6eXN6dG9mIEN6ZWNoICA8ay5j
emVjaEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiB0ZXN0
aW5nIGZyYW1ld29yayBhbmQgdW5pdCB0ZXN0cyBmb3IgV2ViS2l0LUVGTCBwb3J0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1MDkKKworICAgICAg
ICBQYXRjaCBieSBLcnp5c3p0b2YgQ3plY2ggPGsuY3plY2hAc2Ftc3VuZy5jb20+LCBUb21hc3og
TW9yYXdza2kgPHQubW9yYXdza2lAc2Ftc3VuZy5jb20+IG9uIDIwMTItMDEtMTYKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGluZyBmcmFtZXdvcmsg
aXMgYmFzZWQgb24gZ3Rlc3QgbGlicmFyeS4gR3Rlc3QgbGlicmFyeSBpcyBwYXJ0IG9mIFdlYktp
dCBwcm9qZWN0LiBGcmFtZXdvcmsgY29uc2lzdHMgb2YKKyAgICAgICAgbGF1bmNoZXIgYW5kIHZp
ZXcgcGFydC4gTGF1bmNoZXIgdGFrZXMgY2FyZSBvZiBlZmwgaW5pdGlhbGl6YXRpb24gYW5kIHN0
YXJ0IHRlc3RzLiBWaWV3IHBhcnQgaXMgYSBjb250ZXh0IAorICAgICAgICBvZiBlYWNoIHRlc3Qu
CisKKyAgICAgICAgKiB0ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiB0ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgor
ICAgICAgICAqIHRlc3RzL3NyYy9Fd2tFZGl0YWJsZVRlc3RzLmNwcDogQWRkZWQuCisgICAgICAg
IChlZGl0YWJsZVNldFRlc3RDYWxsYmFjayk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiB0
ZXN0cy9zcmMvRXdrVXJpVGVzdHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKGV3a1VyaVNldFRlc3RD
YWxsYmFjayk6CisgICAgICAgIChURVNUKToKKyAgICAgICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RM
YXVuY2hlci9FRkxUZXN0Q29uZmlnLmg6IEFkZGVkLgorICAgICAgICAoQ29uZmlnKToKKyAgICAg
ICAgKiB0ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEVGTFVuaXRUZXN0cyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRl
c3RMYXVuY2hlcjo6aW5pdCk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RMYXVuY2hl
cjo6c2h1dGRvd24pOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNoZXI6OnNo
dXRkb3duQWxsKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVzdExhdW5jaGVyOjpzdGFy
dFRlc3QpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNoZXI6OmVuZFRlc3Qp
OgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNoZXI6OmNyZWF0ZVRlc3QpOgor
ICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0TGF1bmNoZXI6OnJ1blRlc3QpOgorICAgICAg
ICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oOiBBZGRlZC4K
KyAgICAgICAgKEVGTFVuaXRUZXN0cyk6CisgICAgICAgIChFRkxUZXN0TGF1bmNoZXIpOgorICAg
ICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmNwcDogQWRkZWQu
CisgICAgICAgIChFRkxVbml0VGVzdHMpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0
RWNvcmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6fkVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVW5pdFRlc3Rz
OjpFRkxUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZM
VGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3
OjpFRkxUZXN0Vmlldyk6CisgICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3Ojp+RUZM
VGVzdFZpZXcpOgorICAgICAgICAoRUZMVW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6aW5pdCk6Cisg
ICAgICAgIChFRkxVbml0VGVzdHM6OkVGTFRlc3RWaWV3OjpzaG93KToKKyAgICAgICAgKEVGTFVu
aXRUZXN0czo6RUZMVGVzdFZpZXc6OmdldE1haW5GcmFtZSk6CisgICAgICAgIChFRkxVbml0VGVz
dHM6OkVGTFRlc3RWaWV3OjpnZXRFdmFzKToKKyAgICAgICAgKEVGTFVuaXRUZXN0czo6RUZMVGVz
dFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVy
L0VGTFRlc3RWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoRUZMVW5pdFRlc3RzKToKKyAgICAgICAg
KEVGTFRlc3RFY29yZUV2YXMpOgorICAgICAgICAoRUZMVGVzdFZpZXcpOgorICAgICAgICAoRUZM
VW5pdFRlc3RzOjpFRkxUZXN0Vmlldzo6Z2V0V2ViVmlldyk6CisKIDIwMTItMDUtMTcgIE1hcml1
c3ogR3J6ZWdvcmN6eWsgIDxtYXJpdXN6LmdAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0g
W0RSVF0gRUZMJ3MgRHVtcFJlbmRlclRyZWUgc2hvdWxkIHN1cHBvcnQgTGF5b3V0VGVzdENvbnRy
b2xsZXIncyBkdW1wRWRpdGluZ0NhbGxiYWNrcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sIGIvU291cmNlL1dlYktpdC9lZmwvdGVz
dHMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lZGQ4MWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
ZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxIVE1MPgorPEJPRFk+Cis8
SDIgYWxpZ249ImNlbnRlciI+RUZMIFVuaXQgVGVzdHM8L0gyPgorPEgyIGFsaWduPSJjZW50ZXIi
PkRlZmF1bHQgVGVzdGluZyBXZWIgUGFnZTwvSDI+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvRUZMVGVzdHNSdW4uY3BwIGIvU291cmNl
L1dlYktpdC9lZmwvdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5kYTI4ZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvc3JjL0VGTFRlc3RzUnVuLmNwcApAQCAtMCwwICsxLDI4IEBACisvKgorICAg
IENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0
aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwg
NTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyov
CisjaW5jbHVkZSAiVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaCIKKyNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRUZMVW5pdFRlc3RzOworCitpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgYXRleGl0KEVGTFRlc3RMYXVuY2hl
cjo6c2h1dGRvd25BbGwpOworICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZVRlc3QoJmFyZ2MsIGFy
Z3YpOworICAgIHJldHVybiBSVU5fQUxMX1RFU1RTKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9zcmMvRXdrRWRpdGFibGVUZXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjYwOTRiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Fd2tFZGl0YWJsZVRlc3RzLmNwcApAQCAtMCwwICsxLDM3IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl
ZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EK
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0TGF1bmNoZXIv
RUZMVGVzdExhdW5jaGVyLmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFRkxVbml0VGVzdHM7CisKK3ZvaWQgZWRpdGFi
bGVTZXRUZXN0Q2FsbGJhY2sodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVjdCogbywgdm9pZCog
ZGF0YSkKK3sKKyAgICBFWFBFQ1RfRVEoRUlOQV9UUlVFLCBld2tfdmlld19lZGl0YWJsZV9zZXQo
bywgRUlOQV9GQUxTRSkpOworICAgIEVYUEVDVF9FUShFSU5BX0ZBTFNFLCBld2tfdmlld19lZGl0
YWJsZV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RFU1QoRXdrRWRpdGFibGVUZXN0
cywgRWRpdGFibGVTZXRUZXN0KQoreworICAgIFJVTl9URVNUKGVkaXRhYmxlU2V0VGVzdENhbGxi
YWNrLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvdGVzdHMvc3JjL0V3a1VyaVRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Ny
Yy9Fd2tVcmlUZXN0cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2
Y2I0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Fd2tV
cmlUZXN0cy5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
U2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3Vp
dGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJVbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVuY2hlci5oIgorI2lu
Y2x1ZGUgPEVXZWJLaXQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgRUZMVW5pdFRlc3RzOworCit2b2lkIGV3a1VyaVNldFRlc3RDYWxsYmFjayh2b2lkKiBl
dmVudEluZm8sIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQoreworICAgIEVYUEVDVF9TVFJF
USgiaHR0cDovL3d3dy53ZWJraXQub3JnLyIsIGV3a192aWV3X3VyaV9nZXQobykpOworICAgIEVO
RF9URVNUKCk7Cit9CisKK1RFU1QoRXdrVXJpVGVzdHMsIEV3a1VyaVNldFRlc3QpCit7CisgICAg
UlVOX1RFU1QoImh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIGV3a1VyaVNldFRlc3RDYWxsYmFjaywg
ImxvYWQsZmluaXNoZWQiLCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rl
c3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcuaCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RDb25maWcuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNmY2I2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvc3JjL1VuaXRUZXN0TGF1bmNoZXIvRUZMVGVzdENvbmZpZy5o
CkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9z
dG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFRkxUZXN0Q29uZmlnX2gKKyNk
ZWZpbmUgRUZMVGVzdENvbmZpZ19oCisKK25hbWVzcGFjZSBFRkxVbml0VGVzdHMgeworbmFtZXNw
YWNlIENvbmZpZyB7CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3V2lkdGggPSA2MDA7Citz
dGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3SGVpZ2h0ID0gODAwOworc3RhdGljIGNvbnN0IGNo
YXIqIGRlZmF1bHRUaGVtZVBhdGggPSBERUZBVUxUX1RIRU1FX1BBVEgiL2RlZmF1bHQuZWRqIjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0VGVzdFBhZ2UgPSAiZmlsZTovLyJERUZBVUxUX1RF
U1RfUEFHRV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwiOworfQorfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VG
TFRlc3RMYXVuY2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RM
YXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmVhODNkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuY3BwCkBAIC0wLDAgKzEsMTAy
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
CisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFRkxUZXN0TGF1
bmNoZXIuaCIKKworI2luY2x1ZGUgIkVGTFRlc3RDb25maWcuaCIKKyNpbmNsdWRlICJFRkxUZXN0
Vmlldy5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5j
bHVkZSA8RWRqZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0
cyB7CisKK2Jvb2wgRUZMVGVzdExhdW5jaGVyOjppbml0KCkKK3sKKyAgICBpZiAoIWVjb3JlX2V2
YXNfaW5pdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkamVfaW5pdCgp
KSB7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBld2tfaW5pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEVG
TFRlc3RMYXVuY2hlcjo6c2h1dGRvd24oKQoreworICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsK
KyAgICBlZGplX3NodXRkb3duKCk7CisgICAgZXdrX3NodXRkb3duKCk7Cit9CisKK3ZvaWQgRUZM
VGVzdExhdW5jaGVyOjpzaHV0ZG93bkFsbCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAg
IHdoaWxlICgoY291bnQgPSBlY29yZV9ldmFzX3NodXRkb3duKCkpID4gMCkgeyB9CisgICAgd2hp
bGUgKChjb3VudCA9IGVkamVfc2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGlsZSAoKGNvdW50
ID0gZXdrX3NodXRkb3duKCkpID4gMCkgeyB9Cit9CisKK3ZvaWQgRUZMVGVzdExhdW5jaGVyOjpz
dGFydFRlc3QoKQoreworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworfQorCit2b2lkIEVG
TFRlc3RMYXVuY2hlcjo6ZW5kVGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsK
K30KKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6OmNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2
b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3Qg
Y2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICBFRkxfSU5JVF9SRVQo
KTsKKworICAgIEVGTFRlc3RFY29yZUV2YXMgZXZhczsKKyAgICBpZiAoIWV2YXMuZ2V0RXZhcygp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXZhcy5zaG93KCk7CisKKyAgICBFRkxUZXN0
VmlldyB2aWV3KGV2YXMuZ2V0RXZhcygpLCB1cmwpOworICAgIGlmICghdmlldy5pbml0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZpZXcuYmluZEV2ZW50cyhldmVudF9jYWxsYmFj
aywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7CisgICAgdmlldy5zaG93KCk7CisKKyAgICBTVEFS
VF9URVNUKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFRkxUZXN0TGF1bmNoZXI6
OnJ1blRlc3Qodm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lk
KiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgcmV0
dXJuIGNyZWF0ZVRlc3QoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRUZXN0UGFnZSwgZXZl
bnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworfQorCitib29sIEVGTFRlc3RM
YXVuY2hlcjo6cnVuVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjayko
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lk
KiBldmVudF9kYXRhKQoreworICAgIHJldHVybiBjcmVhdGVUZXN0KHVybCwgZXZlbnRfY2FsbGJh
Y2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0TGF1bmNoZXIuaCBi
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RMYXVu
Y2hlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ODAxMDAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hl
ci9FRkxUZXN0TGF1bmNoZXIuaApAQCAtMCwwICsxLDc4IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5kZWYg
RUZMVGVzdExhdW5jaGVyX2gKKyNkZWZpbmUgRUZMVGVzdExhdW5jaGVyX2gKKworI2luY2x1ZGUg
PEV2YXMuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjZGVmaW5lIFJVTl9URVNUKGFy
Z3MuLi4pICAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBBU1NFUlRfRVEodHJ1ZSwgRUZMVGVz
dExhdW5jaGVyOjpydW5UZXN0KGFyZ3MpKTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZp
bmUgU1RBUlRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5j
aGVyOjpzdGFydFRlc3QoKTsgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFTkRfVEVT
VCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRUZMVGVzdExhdW5jaGVyOjplbmRUZXN0
KCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklUX1JFVCgpICBcCisgICAg
ZG8geyAgICBcCisgICAgICAgIGlmICghRUZMVGVzdExhdW5jaGVyOjppbml0KCkpICAgXAorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBF
RkxfSU5JVCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVGTFRlc3RMYXVuY2hlcjo6aW5p
dCgpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfU0hVVERPV04oKSAgXAor
ICAgIGRvIHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duKCk7ICAgIFwK
KyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9TSFVURE9XTl9BTEwoKSAgXAorICAgIGRv
IHsgICAgXAorICAgICAgICBFRkxUZXN0TGF1bmNoZXI6OnNodXRkb3duQWxsKCk7IFwKKyAgICB9
IHdoaWxlICgwKQorCituYW1lc3BhY2UgRUZMVW5pdFRlc3RzIHsKKworY2xhc3MgRUZMVGVzdExh
dW5jaGVyIHsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9p
ZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNo
YXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIHN0YXRpYyB2b2lk
IHNodXRkb3duQWxsKCk7CisgICAgc3RhdGljIHZvaWQgc3RhcnRUZXN0KCk7CisgICAgc3RhdGlj
IHZvaWQgZW5kVGVzdCgpOworCisgICAgc3RhdGljIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB1
cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBj
b25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKyAgICBzdGF0aWMgYm9v
bCBydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK307CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRl
c3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMv
VW5pdFRlc3RMYXVuY2hlci9FRkxUZXN0Vmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTcwODY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RWaWV3LmNwcApAQCAtMCwwICsxLDE0
OSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisg
ICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTEx
LTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRUZMVGVzdFZp
ZXcuaCIKKworI2luY2x1ZGUgIkVGTFRlc3RDb25maWcuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+
CisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVjb3JlX0ZpbGUuaD4KKyNpbmNsdWRl
IDxFZGplLmg+CisjaW5jbHVkZSA8RWluYS5oPgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK0VGTFRlc3RFY29yZUV2YXM6OkVGTFRl
c3RFY29yZUV2YXMoKQoreworICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19u
ZXcoMCwgMCwgMCwgRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgsIEVGTFVu
aXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCwgMCkpOworfQorCitFRkxUZXN0RWNv
cmVFdmFzOjpFRkxUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBpbnQgdmll
d3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3BvcnRfaCwg
Y29uc3QgY2hhciogZXh0cmFfb3B0aW9ucykKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRy
KGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2aWV3cG9ydF94LCB2aWV3cG9ydF95LCB2aWV3
cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRpb25zKSk7Cit9CisKK0VGTFRlc3RFY29yZUV2
YXM6On5FRkxUZXN0RWNvcmVFdmFzKCkKK3sgfQorCitFdmFzKiBFRkxUZXN0RWNvcmVFdmFzOjpn
ZXRFdmFzKCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBl
Y29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgRUZMVGVzdEVjb3JlRXZhczo6c2hvdygpCit7CisgICAgaWYgKG1fZWNvcmVFdmFzLmdldCgp
KQorICAgICAgICBlY29yZV9ldmFzX3Nob3cobV9lY29yZUV2YXMuZ2V0KCkpOworfQorCitFRkxU
ZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcykKKyAgICA6IG1fZXZhcyhldmFzKQorICAg
ICwgbV91cmwoRUZMVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRUZXN0UGFnZSkKKyAgICAsIG1f
ZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRUZMVW5pdFRlc3RzOjpD
b25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFRkxVbml0VGVzdHM6OkNv
bmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7IH0KKworRUZMVGVzdFZpZXc6OkVGTFRlc3RWaWV3
KEV2YXMqIGV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwg
bV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3KQorICAgICwgbV93
aWR0aChFRkxVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVp
Z2h0KEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sgfQorCitFRkxU
ZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3Qg
Y2hhciogdXJsKQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBt
X2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aChFRkxVbml0VGVzdHM6OkNvbmZp
Zzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KEVGTFVuaXRUZXN0czo6Q29uZmln
OjpkZWZhdWx0Vmlld0hlaWdodCkKK3sgfQorCitFRkxUZXN0Vmlldzo6RUZMVGVzdFZpZXcoRXZh
cyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1f
ZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICwgbV9oZWln
aHQoaGVpZ2h0KQoreyB9CisKK0VGTFRlc3RWaWV3Ojp+RUZMVGVzdFZpZXcoKQoreyB9CisKK2Jv
b2wgRUZMVGVzdFZpZXc6OmluaXQoKQoreworICAgIGlmICghbV9ldmFzIHx8IG1fdXJsLmVtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9kZWZhdWx0Vmlld1R5
cGUpIHsKKyAgICBjYXNlIFNpbmdsZVZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0UHRy
KGV3a192aWV3X3NpbmdsZV9hZGQobV9ldmFzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz
ZSBUaWxlZFZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0UHRyKGV3a192aWV3X3RpbGVk
X2FkZChtX2V2YXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX3dlYlZp
ZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGV3a192aWV3X3RoZW1lX3Nl
dChtX3dlYlZpZXcuZ2V0KCksIEVGTFVuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0VGhlbWVQYXRo
KTsKKyAgICBld2tfdmlld191cmlfc2V0KG1fd2ViVmlldy5nZXQoKSwgbV91cmwuY19zdHIoKSk7
Cit9CisKK3ZvaWQgRUZMVGVzdFZpZXc6OnNob3coKQoreworICAgIGlmICghbV93ZWJWaWV3Lmdl
dCgpKQorICAgICAgICByZXR1cm47CisgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2ViVmlldy5n
ZXQoKSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Nob3cobV93ZWJWaWV3
LmdldCgpKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV93ZWJWaWV3LmdldCgpLCBFSU5B
X1RSVUUpOworfQorCitFdmFzX09iamVjdCogRUZMVGVzdFZpZXc6OmdldE1haW5GcmFtZSgpCit7
CisgICAgaWYgKG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGV3a192aWV3X2ZyYW1l
X21haW5fZ2V0KG1fd2ViVmlldy5nZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK0V2YXMqIEVG
TFRlc3RWaWV3OjpnZXRFdmFzKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LmdldCgpKQorICAgICAg
ICByZXR1cm4gZXZhc19vYmplY3RfZXZhc19nZXQobV93ZWJWaWV3LmdldCgpKTsKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBFRkxUZXN0Vmlldzo6YmluZEV2ZW50cyh2b2lkICgqY2FsbGJhY2sp
KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnROYW1lLCB2b2lk
KiBwdHIpCit7CisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbChtX3dlYlZpZXcuZ2V0KCksIGV2ZW50
TmFtZSwgY2FsbGJhY2spOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3dl
YlZpZXcuZ2V0KCksIGV2ZW50TmFtZSwgY2FsbGJhY2ssIHB0cik7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdExhdW5jaGVyL0VGTFRlc3RW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVuY2hlci9FRkxU
ZXN0Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzQ3NWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9zcmMvVW5pdFRlc3RMYXVu
Y2hlci9FRkxUZXN0Vmlldy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBF
RkxUZXN0Vmlld19oCisjZGVmaW5lIEVGTFRlc3RWaWV3X2gKKworI2luY2x1ZGUgPEVjb3JlX0V2
YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIEVGTFVuaXRUZXN0cyB7CisKK2NsYXNzIEVGTFRlc3RF
Y29yZUV2YXMgeworcHVibGljOgorICAgIEVGTFRlc3RFY29yZUV2YXMoKTsKKyAgICBFRkxUZXN0
RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwgaW50IHZp
ZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29uc3QgY2hhciogZXh0
cmFfb3B0aW9ucyk7CisgICAgfkVGTFRlc3RFY29yZUV2YXMoKTsKKworICAgIEV2YXMqIGdldEV2
YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8RWNvcmVfRXZh
cz4gbV9lY29yZUV2YXM7Cit9OworCitjbGFzcyBFRkxUZXN0VmlldyB7CitwdWJsaWM6CisgICAg
ZW51bSBFd2tWaWV3VHlwZSB7CisgICAgICAgIFNpbmdsZVZpZXcgPSAwLAorICAgICAgICBUaWxl
ZFZpZXcsCisgICAgfTsKKworICAgIGV4cGxpY2l0IEVGTFRlc3RWaWV3KEV2YXMqKTsKKyAgICBF
RkxUZXN0VmlldyhFdmFzKiwgY29uc3QgY2hhciogdXJsKTsKKyAgICBFRkxUZXN0VmlldyhFdmFz
KiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRUZMVGVzdFZpZXcoRXZhcyos
IEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisK
KyAgICB2aXJ0dWFsIH5FRkxUZXN0VmlldygpOworCisgICAgRXZhc19PYmplY3QqIGdldFdlYlZp
ZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBFdmFzX09iamVjdCogZ2V0TWFp
bkZyYW1lKCk7CisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZvaWQgc2hvdygpOworCisgICAg
Ym9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFjaykodm9pZCos
IEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZvaWQqIHB0cik7
CisKK3ByaXZhdGU6CisgICAgRUZMVGVzdFZpZXcoY29uc3QgRUZMVGVzdFZpZXcmKTsKKyAgICBF
RkxUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRUZMVGVzdFZpZXcmKTsKKworICAgIEV2YXMqIG1f
ZXZhczsKKyAgICBPd25QdHI8RXZhc19PYmplY3Q+IG1fd2ViVmlldzsKKworICAgIGludCBtX3dp
ZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBtX2RlZmF1bHRWaWV3VHlwZTsKKyAgICBz
dGQ6OnN0cmluZyBtX3VybDsKK307CisKK30KKworI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146014</attachid>
            <date>2012-06-06 06:59:48 -0700</date>
            <delta_ts>2012-06-13 03:29:38 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>24912</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggN2YwOWJlOC4uZmY0NzY0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0wNiAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA2LTA0ICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNv
bT4KIAogICAgICAgICBbUXRdIERvbid0IHVzZSBXZWJLaXQgSEFWRSgpIG1hY3JvIGluIHB1Ymxp
YyBRdCBoZWFkZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtl
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAyZGVmODY5Li5iNzNkY2Iy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTI4NiwzICsyODYsOTYgQEAgSU5TVEFMTChG
SUxFUyAke0VXZWJLaXRfSEVBREVSU30KIAogSU5TVEFMTChGSUxFUyAke1dlYktpdF9USEVNRX0K
ICAgICAgICAgREVTVElOQVRJT04gJHtEQVRBX0lOU1RBTExfRElSfS90aGVtZXMpCisKK0lOQ0xV
REVfRElSRUNUT1JJRVMoJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3QKKyAgICAgICAgICAgICAgICAg
ICAgJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3QvaW5jbHVkZQorKQorCitTRVQoR1RFU1RfU09VUkNF
UyAiJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3Qvc3JjIikKK0FERF9MSUJSQVJZKGd0ZXN0CisgICAg
JHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC5jYworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtZGVh
dGgtdGVzdC5jYworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3RfbWFpbi5jYworICAgICR7R1RF
U1RfU09VUkNFU30vZ3Rlc3QtZmlsZXBhdGguY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0
LXBvcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LXRlc3QtcGFydC5jYworICAgICR7
R1RFU1RfU09VUkNFU30vZ3Rlc3QtdHlwZWQtdGVzdC5jYworKQorCitTRVQoRVdLVW5pdFRlc3Rz
X0xJQlJBUklFUworICAgICR7SmF2YVNjcmlwdENvcmVfTElCUkFSWV9OQU1FfQorICAgICR7V2Vi
Q29yZV9MSUJSQVJZX05BTUV9CisgICAgJHtXZWJLaXRfTElCUkFSWV9OQU1FfQorICAgICR7RUNP
UkVfTElCUkFSSUVTfQorICAgICR7RUNPUkVfRVZBU19MSUJSQVJJRVN9CisgICAgJHtFVkFTX0xJ
QlJBUklFU30KKyAgICAke0VESkVfTElCUkFSSUVTfQorKQorCitTRVQoRVdLVW5pdFRlc3RzX0lO
Q0xVREVfRElSRUNUT1JJRVMKKyAgICAiJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UiCisgICAg
IiR7V0VCS0lUX0RJUn0vZWZsL2V3ayIKKyAgICAiJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvc3Jj
L1VuaXRUZXN0TGF1bmNoZXIiCisgICAgIiR7V1RGX0RJUn0vd3RmIgorICAgICIke1dURl9ESVJ9
L0ZvcndhcmRpbmdIZWFkZXJzIgorICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQorICAgICR7RUNP
UkVfRVZBU19JTkNMVURFX0RJUlN9CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKyAgICAke0VE
SkVfSU5DTFVERV9ESVJTfQorKQorCitTRVQoRVdLVW5pdFRlc3RzX0xJTktfRkxBR1MKKyAgICAk
e0VDT1JFX0xERkxBR1N9CisgICAgJHtFQ09SRV9FVkFTX0xERkxBR1N9CisgICAgJHtFVkFTX0xE
RkxBR1N9CisgICAgJHtFREpFX0xERkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JU
KQorICAgIExJU1QoQVBQRU5EIEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTICIke1dU
Rl9ESVJ9L3d0Zi9nb2JqZWN0IikKKworICAgIExJU1QoQVBQRU5EIEVXS1VuaXRUZXN0c19MSUJS
QVJJRVMKKyAgICAgICAgJHtHZGtfTElCUkFSSUVTfQorICAgICAgICAke0dsaWJfTElCUkFSSUVT
fQorICAgICAgICAke0d0aHJlYWRfTElCUkFSSUVTfQorICAgICkKK0VORElGICgpCisKK1NFVChE
RUZBVUxUX1RFU1RfUEFHRV9ESVIgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cykKKworQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9URVNUX1BBR0VfRElSPVwiJHtE
RUZBVUxUX1RFU1RfUEFHRV9ESVJ9XCIpCitBRERfREVGSU5JVElPTlMoLURERUZBVUxUX1RIRU1F
X1BBVEg9XCIke1RIRU1FX0JJTkFSWV9ESVJ9XCIpCisKK0FERF9MSUJSQVJZKGV3a1Rlc3RVdGls
cworICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2Uu
Y3BwCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmll
dy5jcHAKKykKKworU0VUKFdFQktJVF9FRkxfVEVTVF9ESVIgIiR7V0VCS0lUX0RJUn0vZWZsL3Rl
c3RzLyIpCisKK1NFVChFV0tVbml0VGVzdHNfU09VUkNFUworICAgICR7V0VCS0lUX0VGTF9URVNU
X0RJUn0vRXdrVGVzdHNNYWluLmNwcAorICAgICR7V0VCS0lUX0VGTF9URVNUX0RJUn0vRXdrVmll
d1VyaUdldFRlc3QuY3BwCisgICAgJHtXRUJLSVRfRUZMX1RFU1RfRElSfS9Fd2tWaWV3RWRpdGFi
bGVHZXRUZXN0LmNwcAorKQorCitTRVQoRVdLVW5pdFRlc3RzX0JJTkFSSUVTCisgICAgRXdrVmll
d1VyaUdldFRlc3QKKyAgICBFd2tWaWV3RWRpdGFibGVHZXRUZXN0CispCisKK0lOQ0xVREVfRElS
RUNUT1JJRVMoJHtFV0tVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFU30pCisKK2ZvcmVhY2go
dGVzdE5hbWUgJHtFV0tVbml0VGVzdHNfQklOQVJJRVN9KQorICAgIEFERF9FWEVDVVRBQkxFKGJp
bi8ke3Rlc3ROYW1lfSAke1dFQktJVF9FRkxfVEVTVF9ESVJ9LyR7dGVzdE5hbWV9LmNwcCAke1dF
QktJVF9FRkxfVEVTVF9ESVJ9L0V3a1Rlc3RzTWFpbi5jcHApCisgICAgVEFSR0VUX0xJTktfTElC
UkFSSUVTKGJpbi8ke3Rlc3ROYW1lfSAke0VXS1VuaXRUZXN0c19MSUJSQVJJRVN9IGV3a1Rlc3RV
dGlscyBndGVzdCkKKyAgICBBRERfVEFSR0VUX1BST1BFUlRJRVMoYmluLyR7dGVzdE5hbWV9IExJ
TktfRkxBR1MgIiR7RVdLVW5pdFRlc3RzX0xJTktfRkxBR1N9IikKKyAgICBTRVRfVEFSR0VUX1BS
T1BFUlRJRVMoYmluLyR7dGVzdE5hbWV9IFBST1BFUlRJRVMgRk9MREVSICJXZWJLaXQiKQorICAg
IFNFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4vJHt0ZXN0TmFtZX0gUFJPUEVSVElFUyBSVU5USU1F
X09VVFBVVF9ESVJFQ1RPUlkgIiR7Q01BS0VfQklOQVJZX0RJUn0iKQorZW5kZm9yZWFjaCgpCisK
K0FERF9FWEVDVVRBQkxFKGJpbi9Fd2tUZXN0c1J1biAke0VXS1VuaXRUZXN0c19TT1VSQ0VTfSkK
K1RBUkdFVF9MSU5LX0xJQlJBUklFUyhiaW4vRXdrVGVzdHNSdW4gJHtFV0tVbml0VGVzdHNfTElC
UkFSSUVTfSBld2tUZXN0VXRpbHMgZ3Rlc3QpCitBRERfVEFSR0VUX1BST1BFUlRJRVMoYmluL0V3
a1Rlc3RzUnVuIExJTktfRkxBR1MgIiR7RVdLVW5pdFRlc3RzX0xJTktfRkxBR1N9IikKK1NFVF9U
QVJHRVRfUFJPUEVSVElFUyhiaW4vRXdrVGVzdHNSdW4gUFJPUEVSVElFUyBGT0xERVIgIldlYktp
dCIpCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoYmluL0V3a1Rlc3RzUnVuIFBST1BFUlRJRVMgUlVO
VElNRV9PVVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0JJTkFSWV9ESVJ9IikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZwppbmRleCA4OTcwMTBlLi40ZTBlMWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkg
QEAKKzIwMTItMDYtMDYgIEtyenlzenRvZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CisK
KyAgICAgICAgW0VGTF0gSW1wbGVtZW50YXRpb24gb2YgdGVzdGluZyBmcmFtZXdvcmsgYW5kIHVu
aXQgdGVzdHMgZm9yIFdlYktpdC1FRkwgcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUGF0Y2ggYnkgS3J6eXN6dG9mIEN6ZWNoIDxrLmN6ZWNoQHNh
bXN1bmcuY29tPiwgVG9tYXN6IE1vcmF3c2tpIDx0Lm1vcmF3c2tpQHNhbXN1bmcuY29tPiBvbiAy
MDEyLTAxLTE2CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3RpbmcgZnJhbWV3b3JrIGlzIGJhc2VkIG9uIGd0ZXN0IGxpYnJhcnkuIEd0ZXN0IGxpYnJh
cnkgaXMgcGFydCBvZiBXZWJLaXQgcHJvamVjdC4gRnJhbWV3b3JrIGNvbnNpc3RzIG9mCisgICAg
ICAgIGxhdW5jaGVyIGFuZCB2aWV3IHBhcnQuIExhdW5jaGVyIHRha2VzIGNhcmUgb2YgZWZsIGlu
aXRpYWxpemF0aW9uIGFuZCBzdGFydCB0ZXN0cy4gVmlldyBwYXJ0IGlzIGEgY29udGV4dCAKKyAg
ICAgICAgb2YgZWFjaCB0ZXN0LgorCisgICAgICAgICogdGVzdHMvRXdrVGVzdHNNYWluLmNwcDog
QWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiB0ZXN0cy9Fd2tWaWV3RWRpdGFibGVH
ZXRUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChlZGl0YWJsZVNldFRlc3RDYWxsYmFjayk6Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKiB0ZXN0cy9Fd2tWaWV3VXJpR2V0VGVzdC5jcHA6IEFk
ZGVkLgorICAgICAgICAoZXdrVXJpU2V0VGVzdENhbGxiYWNrKToKKyAgICAgICAgKFRFU1QpOgor
ICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNl
Ojppbml0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duKToK
KyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKToKKyAgICAg
ICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnN0YXJ0VGVzdCk6CisgICAgICAgIChFV0tV
bml0VGVzdHM6OkVXS1Rlc3RCYXNlOjplbmRUZXN0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6
RVdLVGVzdEJhc2U6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0
QmFzZTo6cnVuVGVzdCk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFz
ZS5oOiBBZGRlZC4KKyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tUZXN0QmFz
ZSk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmg6IEFkZGVk
LgorICAgICAgICAoQ29uZmlnKToKKyAgICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rl
c3RWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdL
VW5pdFRlc3RzOjpFV0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKToKKyAgICAgICAg
KEVXS1VuaXRUZXN0czo6RVdLVGVzdEVjb3JlRXZhczo6fkVXS1Rlc3RFY29yZUV2YXMpOgorICAg
ICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAg
KEVXS1VuaXRUZXN0czo6RVdLVGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFV0tVbml0
VGVzdHM6OkVXS1Rlc3RWaWV3OjpFV0tUZXN0Vmlldyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6
OkVXS1Rlc3RWaWV3Ojp+RVdLVGVzdFZpZXcpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tU
ZXN0Vmlldzo6aW5pdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpzaG93
KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OmdldE1haW5GcmFtZSk6Cisg
ICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpnZXRFdmFzKToKKyAgICAgICAgKEVX
S1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL1Vu
aXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMp
OgorICAgICAgICAoRVdLVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChFV0tUZXN0Vmlldyk6Cisg
ICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpnZXRXZWJWaWV3KToKKyAgICAgICAg
KiB0ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wNi0wNSAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZv
ciB0YXJnZXQtZGVuc2l0eWRwaSBpbiB0aGUgdmlld3BvcnQgbWV0YSB0YWcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL0V3a1Rlc3RzTWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9Fd2tUZXN0c01haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjAyOWMzYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9Fd2tUZXN0c01haW4uY3BwCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUg
IlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgRVdLVW5pdFRlc3RzOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCit7CisgICAgYXRleGl0KEVXS1Rlc3RCYXNlOjpzaHV0ZG93bkFsbCk7CisgICAg
Ojp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7CisgICAgcmV0dXJuIFJVTl9B
TExfVEVTVFMoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL0V3a1Zp
ZXdFZGl0YWJsZUdldFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvRXdrVmlld0Vk
aXRhYmxlR2V0VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRk
MjA4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL0V3a1ZpZXdF
ZGl0YWJsZUdldFRlc3QuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIgorI2lu
Y2x1ZGUgPEVXZWJLaXQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1l
c3BhY2UgRVdLVW5pdFRlc3RzOworCit2b2lkIGVkaXRhYmxlU2V0VGVzdENhbGxiYWNrKHZvaWQq
IGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCit7CisgICAgRVhQRUNUX0VR
KEVJTkFfVFJVRSwgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KG8sIEVJTkFfRkFMU0UpKTsKKyAgICBF
WFBFQ1RfRVEoRUlOQV9GQUxTRSwgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KG8pKTsKKyAgICBFTkRf
VEVTVCgpOworfQorCitURVNUKEV3a0VkaXRhYmxlVGVzdHMsIEVkaXRhYmxlU2V0VGVzdCkKK3sK
KyAgICBSVU5fVEVTVChlZGl0YWJsZVNldFRlc3RDYWxsYmFjaywgImxvYWQsZmluaXNoZWQiLCAw
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL0V3a1ZpZXdVcmlHZXRU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL0V3a1ZpZXdVcmlHZXRUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDU3NTZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvRXdrVmlld1VyaUdldFRlc3QuY3BwCkBAIC0w
LDAgKzEsMzYgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBN
QSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
VW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLVW5pdFRlc3RzOworCit2
b2lkIGV3a1VyaVNldFRlc3RDYWxsYmFjayh2b2lkKiBldmVudEluZm8sIEV2YXNfT2JqZWN0KiBv
LCB2b2lkKiBkYXRhKQoreworICAgIEVYUEVDVF9TVFJFUSgiaHR0cDovL3d3dy53ZWJraXQub3Jn
LyIsIGV3a192aWV3X3VyaV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RFU1QoRXdr
VXJpVGVzdHMsIEV3a1VyaVNldFRlc3QpCit7CisgICAgUlVOX1RFU1QoImh0dHA6Ly93d3cud2Vi
a2l0Lm9yZyIsIGV3a1VyaVNldFRlc3RDYWxsYmFjaywgImxvYWQsZmluaXNoZWQiLCAwKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVz
dEJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0
QmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiZDE0MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdL
VGVzdEJhc2UuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT
dWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0QmFzZS5oIgorCisjaW5jbHVkZSAiRVdLVGVzdENvbmZp
Zy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RWaWV3LmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorCisj
aW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisKK25hbWVzcGFjZSBFV0tVbml0
VGVzdHMgeworCitib29sIEVXS1Rlc3RCYXNlOjppbml0KCkKK3sKKyAgICBpZiAoIWVjb3JlX2V2
YXNfaW5pdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkamVfaW5pdCgp
KSB7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gZXdrX2luaXQoKTsKK30KKwordm9pZCBFV0tUZXN0QmFzZTo6
c2h1dGRvd24oKQoreworICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICBlZGplX3NodXRk
b3duKCk7CisgICAgZXdrX3NodXRkb3duKCk7Cit9CisKK3ZvaWQgRVdLVGVzdEJhc2U6OnNodXRk
b3duQWxsKCkKK3sKKyAgICBpbnQgY291bnQgPSAwOworCisgICAgd2hpbGUgKChjb3VudCA9IGVj
b3JlX2V2YXNfc2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9z
aHV0ZG93bigpKSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkg
PiAwKSB7IH0KK30KKwordm9pZCBFV0tUZXN0QmFzZTo6c3RhcnRUZXN0KCkKK3sKKyAgICBlY29y
ZV9tYWluX2xvb3BfYmVnaW4oKTsKK30KKwordm9pZCBFV0tUZXN0QmFzZTo6ZW5kVGVzdCgpCit7
CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKK30KKworYm9vbCBFV0tUZXN0QmFzZTo6Y3Jl
YXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2
YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9k
YXRhKQoreworICAgIEVGTF9JTklUX1JFVCgpOworCisgICAgRVdLVGVzdEVjb3JlRXZhcyBldmFz
OworICAgIGlmICghZXZhcy5nZXRFdmFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBl
dmFzLnNob3coKTsKKworICAgIEVXS1Rlc3RWaWV3IHZpZXcoZXZhcy5nZXRFdmFzKCksIHVybCk7
CisgICAgaWYgKCF2aWV3LmluaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmll
dy5iaW5kRXZlbnRzKGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKKyAg
ICB2aWV3LnNob3coKTsKKworICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEVXS1Rlc3RCYXNlOjpydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9p
ZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBl
dmVudF9kYXRhKQoreworICAgIHJldHVybiBjcmVhdGVUZXN0KEVXS1VuaXRUZXN0czo6Q29uZmln
OjpkZWZhdWx0VGVzdFBhZ2UsIGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRh
KTsKK30KKworYm9vbCBFV0tUZXN0QmFzZTo6cnVuVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQg
KCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFy
KiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIHJldHVybiBjcmVhdGVUZXN0
KHVybCwgZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworfQorCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RC
YXNlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViNzY0MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJh
c2UuaApAQCAtMCwwICsxLDc4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5n
IEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4x
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5kZWYgRVdLVGVzdEJhc2VfaAor
I2RlZmluZSBFV0tUZXN0QmFzZV9oCisKKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKworI2RlZmluZSBSVU5fVEVTVChhcmdzLi4uKSAgIFwKKyAgICBkbyB7ICAg
IFwKKyAgICAgICAgQVNTRVJUX0VRKHRydWUsIEVXS1Rlc3RCYXNlOjpydW5UZXN0KGFyZ3MpKTsg
ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU1RBUlRfVEVTVCgpICAgIFwKKyAgICBk
byB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OnN0YXJ0VGVzdCgpOyAgIFwKKyAgICB9IHdo
aWxlICgwKQorCisjZGVmaW5lIEVORF9URVNUKCkgICAgXAorICAgIGRvIHsgICAgXAorICAgICAg
ICBFV0tUZXN0QmFzZTo6ZW5kVGVzdCgpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBF
RkxfSU5JVF9SRVQoKSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBpZiAoIUVXS1Rlc3RCYXNl
Ojppbml0KCkpICAgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICBcCisgICAgfSB3aGls
ZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVX
S1Rlc3RCYXNlOjppbml0KCk7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9T
SFVURE9XTigpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RCYXNlOjpzaHV0ZG93
bigpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfU0hVVERPV05fQUxMKCkg
IFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKCk7IFwK
KyAgICB9IHdoaWxlICgwKQorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdL
VGVzdEJhc2UgeworICAgIHN0YXRpYyBib29sIGNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2
b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3Qg
Y2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgaW5pdCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIHZv
aWQgc2h1dGRvd25BbGwoKTsKKyAgICBzdGF0aWMgdm9pZCBzdGFydFRlc3QoKTsKKyAgICBzdGF0
aWMgdm9pZCBlbmRUZXN0KCk7CisKKyAgICBzdGF0aWMgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIq
IHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiks
IGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworICAgIHN0YXRpYyBi
b29sIHJ1blRlc3Qodm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0
VXRpbHMvRVdLVGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RV
dGlscy9FV0tUZXN0Q29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2E3NjI5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUK
KyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lm
bmRlZiBFV0tUZXN0Q29uZmlnX2gKKyNkZWZpbmUgRVdLVGVzdENvbmZpZ19oCisKK25hbWVzcGFj
ZSBFV0tVbml0VGVzdHMgeworbmFtZXNwYWNlIENvbmZpZyB7CitzdGF0aWMgY29uc3QgaW50IGRl
ZmF1bHRWaWV3V2lkdGggPSA2MDA7CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3SGVpZ2h0
ID0gODAwOworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRUaGVtZVBhdGggPSBERUZBVUxUX1RI
RU1FX1BBVEgiL2RlZmF1bHQuZWRqIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0VGVzdFBh
Z2UgPSAiZmlsZTovLyJERUZBVUxUX1RFU1RfUEFHRV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0
bWwiOworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
VW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzQ1MjU0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rl
c3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl
ZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EK
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0Vmlldy5oIgorCisj
aW5jbHVkZSAiRVdLVGVzdENvbmZpZy5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKworI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitFV0tU
ZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKCkKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGFk
b3B0UHRyKGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIEVXS1VuaXRUZXN0czo6Q29uZmlnOjpkZWZh
dWx0Vmlld1dpZHRoLCBFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQsIDAp
KTsKK30KKworRVdLVGVzdEVjb3JlRXZhczo6RVdLVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBl
bmdpbmVfbmFtZSwgaW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRf
dywgaW50IHZpZXdwb3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMpCit7CisgICAgbV9l
Y29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX25ldyhlbmdpbmVfbmFtZSwgdmlld3BvcnRf
eCwgdmlld3BvcnRfeSwgdmlld3BvcnRfdywgdmlld3BvcnRfaCwgZXh0cmFfb3B0aW9ucykpOwor
fQorCitFV0tUZXN0RWNvcmVFdmFzOjp+RVdLVGVzdEVjb3JlRXZhcygpCit7IAorfQorCitFdmFz
KiBFV0tUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0
KCkpCisgICAgICAgIHJldHVybiBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRVdLVGVzdEVjb3JlRXZhczo6c2hvdygpCit7CisgICAg
aWYgKG1fZWNvcmVFdmFzLmdldCgpKQorICAgICAgICBlY29yZV9ldmFzX3Nob3cobV9lY29yZUV2
YXMuZ2V0KCkpOworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZhcyogZXZhcykKKyAg
ICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1
bHRUZXN0UGFnZSkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1f
d2lkdGgoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hl
aWdodChFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7Cit9CisKK0VX
S1Rlc3RWaWV3OjpFV0tUZXN0VmlldyhFdmFzKiBldmFzLCBjb25zdCBjaGFyKiB1cmwpCisgICAg
OiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBl
KFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRW
aWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZp
ZXdIZWlnaHQpCit7Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tUZXN0VmlldyhFdmFzKiBldmFzLCBF
d2tWaWV3VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX2V2YXMoZXZhcykKKyAg
ICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dp
ZHRoKEVXS1VuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWln
aHQoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tU
ZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3Qg
Y2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAg
ICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dp
ZHRoKHdpZHRoKQorICAgICwgbV9oZWlnaHQoaGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6
fkVXS1Rlc3RWaWV3KCkKK3sKK30KKworYm9vbCBFV0tUZXN0Vmlldzo6aW5pdCgpCit7CisgICAg
aWYgKCFtX2V2YXMgfHwgbV91cmwuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoIChtX2RlZmF1bHRWaWV3VHlwZSkgeworICAgIGNhc2UgU2luZ2xlVmlldzoKKyAg
ICAgICAgbV93ZWJWaWV3ID0gYWRvcHRQdHIoZXdrX3ZpZXdfc2luZ2xlX2FkZChtX2V2YXMpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRpbGVkVmlldzoKKyAgICAgICAgbV93ZWJWaWV3
ID0gYWRvcHRQdHIoZXdrX3ZpZXdfdGlsZWRfYWRkKG1fZXZhcykpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fd2ViVmlldy5nZXQoKSwgRVdLVW5pdFRlc3Rz
OjpDb25maWc6OmRlZmF1bHRUaGVtZVBhdGgpOworICAgIGV3a192aWV3X3VyaV9zZXQobV93ZWJW
aWV3LmdldCgpLCBtX3VybC5jX3N0cigpKTsKK30KKwordm9pZCBFV0tUZXN0Vmlldzo6c2hvdygp
Cit7CisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBldmFz
X29iamVjdF9yZXNpemUobV93ZWJWaWV3LmdldCgpLCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAg
ZXZhc19vYmplY3Rfc2hvdyhtX3dlYlZpZXcuZ2V0KCkpOworICAgIGV2YXNfb2JqZWN0X2ZvY3Vz
X3NldChtX3dlYlZpZXcuZ2V0KCksIEVJTkFfVFJVRSk7Cit9CisKK0V2YXNfT2JqZWN0KiBFV0tU
ZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LmdldCgpKQorICAg
ICAgICByZXR1cm4gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobV93ZWJWaWV3LmdldCgpKTsKKyAg
ICByZXR1cm4gMDsKK30KKworRXZhcyogRVdLVGVzdFZpZXc6OmdldEV2YXMoKQoreworICAgIGlm
IChtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBldmFzX29iamVjdF9ldmFzX2dldCht
X3dlYlZpZXcuZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEVXS1Rlc3RWaWV3Ojpi
aW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIW1fd2ViVmlldy5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
ZGVsKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFjayk7CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFj
aywgcHRyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5p
dFRlc3RVdGlscy9FV0tUZXN0Vmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRl
c3RVdGlscy9FV0tUZXN0Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljc5NzFjZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0
VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQor
ICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZu
ZGVmIEVXS1Rlc3RWaWV3X2gKKyNkZWZpbmUgRVdLVGVzdFZpZXdfaAorCisjaW5jbHVkZSA8RWNv
cmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdL
VGVzdEVjb3JlRXZhcyB7CitwdWJsaWM6CisgICAgRVdLVGVzdEVjb3JlRXZhcygpOworICAgIEVX
S1Rlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5naW5lX25hbWUsIGludCB2aWV3cG9ydF94LCBp
bnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3csIGludCB2aWV3cG9ydF9oLCBjb25zdCBjaGFy
KiBleHRyYV9vcHRpb25zKTsKKyAgICB+RVdLVGVzdEVjb3JlRXZhcygpOworCisgICAgRXZhcyog
Z2V0RXZhcygpOworICAgIHZvaWQgc2hvdygpOworCitwcml2YXRlOgorICAgIE93blB0cjxFY29y
ZV9FdmFzPiBtX2Vjb3JlRXZhczsKK307CisKK2NsYXNzIEVXS1Rlc3RWaWV3IHsKK3B1YmxpYzoK
KyAgICBlbnVtIEV3a1ZpZXdUeXBlIHsKKyAgICAgICAgU2luZ2xlVmlldyA9IDAsCisgICAgICAg
IFRpbGVkVmlldywKKyAgICB9OworCisgICAgZXhwbGljaXQgRVdLVGVzdFZpZXcoRXZhcyopOwor
ICAgIEVXS1Rlc3RWaWV3KEV2YXMqLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVXS1Rlc3RWaWV3
KEV2YXMqLCBFd2tWaWV3VHlwZSwgY29uc3QgY2hhciogdXJsKTsKKyAgICBFV0tUZXN0VmlldyhF
dmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKKworICAgIHZpcnR1YWwgfkVXS1Rlc3RWaWV3KCk7CisKKyAgICBFdmFzX09iamVjdCogZ2V0
V2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldy5nZXQoKTsgfQorICAgIEV2YXNfT2JqZWN0KiBn
ZXRNYWluRnJhbWUoKTsKKyAgICBFdmFzKiBnZXRFdmFzKCk7CisgICAgdm9pZCBzaG93KCk7CisK
KyAgICBib29sIGluaXQoKTsKKyAgICB2b2lkIGJpbmRFdmVudHModm9pZCAoKmNhbGxiYWNrKSh2
b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgdm9pZCog
cHRyKTsKKworcHJpdmF0ZToKKyAgICBFV0tUZXN0Vmlldyhjb25zdCBFV0tUZXN0VmlldyYpOwor
ICAgIEVXS1Rlc3RWaWV3IG9wZXJhdG9yPShjb25zdCBFV0tUZXN0VmlldyYpOworCisgICAgRXZh
cyogbV9ldmFzOworICAgIE93blB0cjxFdmFzX09iamVjdD4gbV93ZWJWaWV3OworCisgICAgaW50
IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIEV3a1ZpZXdUeXBlIG1fZGVmYXVsdFZpZXdUeXBlOwor
ICAgIHN0ZDo6c3RyaW5nIG1fdXJsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmVkZDgxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+
Cis8Qk9EWT4KKzxIMiBhbGlnbj0iY2VudGVyIj5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxp
Z249ImNlbnRlciI+RGVmYXVsdCBUZXN0aW5nIFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRN
TD4K
</data>
<flag name="commit-queue"
          id="153270"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147276</attachid>
            <date>2012-06-13 03:29:38 -0700</date>
            <delta_ts>2012-06-14 03:51:02 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>23399</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYThiZjdhNy4uMzcxNTI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0xMyAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA2LTEyICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5j
b20+CiAKICAgICAgICAgW0VGTF0gRW5hYmxlIFNIQURPV19ET00gZmxhZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1F
ZmwuY21ha2UKaW5kZXggMmRlZjg2OS4uYzNlMjVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC0yODYsMyArMjg2LDkzIEBAIElOU1RBTEwoRklMRVMgJHtFV2ViS2l0X0hFQURFUlN9CiAK
IElOU1RBTEwoRklMRVMgJHtXZWJLaXRfVEhFTUV9CiAgICAgICAgIERFU1RJTkFUSU9OICR7REFU
QV9JTlNUQUxMX0RJUn0vdGhlbWVzKQorCitJTkNMVURFX0RJUkVDVE9SSUVTKCR7VEhJUkRQQVJU
WV9ESVJ9L2d0ZXN0CisgICAgICAgICAgICAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0
L2luY2x1ZGUKKykKKworU0VUKEdURVNUX1NPVVJDRVMgIiR7VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0
L3NyYyIpCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QuY2MK
KyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAgICAke0dURVNUX1NP
VVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWZpbGVwYXRo
LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAgJHtHVEVTVF9TT1VS
Q0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LXR5cGVk
LXRlc3QuY2MKKykKKworU0VUKEVXS1VuaXRUZXN0c19MSUJSQVJJRVMKKyAgICAke0phdmFTY3Jp
cHRDb3JlX0xJQlJBUllfTkFNRX0KKyAgICAke1dlYkNvcmVfTElCUkFSWV9OQU1FfQorICAgICR7
V2ViS2l0X0xJQlJBUllfTkFNRX0KKyAgICAke0VDT1JFX0xJQlJBUklFU30KKyAgICAke0VDT1JF
X0VWQVNfTElCUkFSSUVTfQorICAgICR7RVZBU19MSUJSQVJJRVN9CisgICAgJHtFREpFX0xJQlJB
UklFU30KKykKKworU0VUKEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7
Q01BS0VfU09VUkNFX0RJUn0vU291cmNlIgorICAgICIke1dFQktJVF9ESVJ9L2VmbC9ld2siCisg
ICAgIiR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdFV0aWxzIgorICAgICIke1dU
Rl9ESVJ9L3d0ZiIKKyAgICAke0VDT1JFX0lOQ0xVREVfRElSU30KKyAgICAke0VDT1JFX0VWQVNf
SU5DTFVERV9ESVJTfQorICAgICR7RVZBU19JTkNMVURFX0RJUlN9CisgICAgJHtFREpFX0lOQ0xV
REVfRElSU30KKykKKworU0VUKEVXS1VuaXRUZXN0c19MSU5LX0ZMQUdTCisgICAgJHtFQ09SRV9M
REZMQUdTfQorICAgICR7RUNPUkVfRVZBU19MREZMQUdTfQorICAgICR7RVZBU19MREZMQUdTfQor
ICAgICR7RURKRV9MREZMQUdTfQorKQorCitJRiAoRU5BQkxFX0dMSUJfU1VQUE9SVCkKKyAgICBM
SVNUKEFQUEVORCBFV0tVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtXVEZfRElSfS93
dGYvZ29iamVjdCIpCisKKyAgICBMSVNUKEFQUEVORCBFV0tVbml0VGVzdHNfTElCUkFSSUVTCisg
ICAgICAgICR7R2RrX0xJQlJBUklFU30KKyAgICAgICAgJHtHbGliX0xJQlJBUklFU30KKyAgICAg
ICAgJHtHdGhyZWFkX0xJQlJBUklFU30KKyAgICApCitFTkRJRiAoKQorCitTRVQoREVGQVVMVF9U
RVNUX1BBR0VfRElSICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
cmVzb3VyY2VzKQorCitBRERfREVGSU5JVElPTlMoLURERUZBVUxUX1RFU1RfUEFHRV9ESVI9XCIk
e0RFRkFVTFRfVEVTVF9QQUdFX0RJUn1cIikKK0FERF9ERUZJTklUSU9OUygtRERFRkFVTFRfVEhF
TUVfUEFUSD1cIiR7VEhFTUVfQklOQVJZX0RJUn1cIikKKworQUREX0xJQlJBUlkoZXdrVGVzdFV0
aWxzCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFz
ZS5jcHAKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RW
aWV3LmNwcAorKQorCitTRVQoV0VCS0lUX0VGTF9URVNUX0RJUiAiJHtXRUJLSVRfRElSfS9lZmwv
dGVzdHMvIikKKworU0VUKEVXS1VuaXRUZXN0c19TT1VSQ0VTCisgICAgJHtXRUJLSVRfRUZMX1RF
U1RfRElSfS90ZXN0X3J1bm5lci5jcHAKKyAgICAke1dFQktJVF9FRkxfVEVTVF9ESVJ9L3Rlc3Rf
ZXdrX3ZpZXcuY3BwCispCisKK1NFVChFV0tVbml0VGVzdHNfQklOQVJJRVMKKyAgICB0ZXN0X2V3
a192aWV3CispCisKK0lOQ0xVREVfRElSRUNUT1JJRVMoJHtFV0tVbml0VGVzdHNfSU5DTFVERV9E
SVJFQ1RPUklFU30pCisKK2ZvcmVhY2godGVzdE5hbWUgJHtFV0tVbml0VGVzdHNfQklOQVJJRVN9
KQorICAgIEFERF9FWEVDVVRBQkxFKGJpbi8ke3Rlc3ROYW1lfSAke1dFQktJVF9FRkxfVEVTVF9E
SVJ9LyR7dGVzdE5hbWV9LmNwcCAke1dFQktJVF9FRkxfVEVTVF9ESVJ9L3Rlc3RfcnVubmVyLmNw
cCkKKyAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMoYmluLyR7dGVzdE5hbWV9ICR7RVdLVW5pdFRl
c3RzX0xJQlJBUklFU30gZXdrVGVzdFV0aWxzIGd0ZXN0KQorICAgIEFERF9UQVJHRVRfUFJPUEVS
VElFUyhiaW4vJHt0ZXN0TmFtZX0gTElOS19GTEFHUyAiJHtFV0tVbml0VGVzdHNfTElOS19GTEFH
U30iKQorICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4vJHt0ZXN0TmFtZX0gUFJPUEVSVElF
UyBGT0xERVIgIldlYktpdCIpCisgICAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGJpbi8ke3Rlc3RO
YW1lfSBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllf
RElSfSIpCitlbmRmb3JlYWNoKCkKKworQUREX0VYRUNVVEFCTEUoYmluL3Rlc3RfcnVubmVyICR7
RVdLVW5pdFRlc3RzX1NPVVJDRVN9KQorVEFSR0VUX0xJTktfTElCUkFSSUVTKGJpbi90ZXN0X3J1
bm5lciAke0VXS1VuaXRUZXN0c19MSUJSQVJJRVN9IGV3a1Rlc3RVdGlscyBndGVzdCkKK0FERF9U
QVJHRVRfUFJPUEVSVElFUyhiaW4vdGVzdF9ydW5uZXIgTElOS19GTEFHUyAiJHtFV0tVbml0VGVz
dHNfTElOS19GTEFHU30iKQorU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGJpbi90ZXN0X3J1bm5lciBQ
Uk9QRVJUSUVTIEZPTERFUiAiV2ViS2l0IikKK1NFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4vdGVz
dF9ydW5uZXIgUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7Q01BS0VfQklO
QVJZX0RJUn0iKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDk0YTUwNGMuLmRkMGViNGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMi0wNi0xMyAgS3J6eXN6dG9mIEN6ZWNoICA8
ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBJbXBsZW1lbnRhdGlvbiBvZiB0
ZXN0aW5nIGZyYW1ld29yayBhbmQgdW5pdCB0ZXN0cyBmb3IgV2ViS2l0LUVGTCBwb3J0LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg1MDkKKworICAg
ICAgICBQYXRjaCBieSBLcnp5c3p0b2YgQ3plY2ggPGsuY3plY2hAc2Ftc3VuZy5jb20+LCBUb21h
c3ogTW9yYXdza2kgPHQubW9yYXdza2lAc2Ftc3VuZy5jb20+IG9uIDIwMTItMDEtMTYKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGluZyBmcmFtZXdv
cmsgaXMgYmFzZWQgb24gZ3Rlc3QgbGlicmFyeS4gR3Rlc3QgbGlicmFyeSBpcyBwYXJ0IG9mIHRo
ZSBXZWJLaXQgcHJvamVjdC4gRnJhbWV3b3JrIGlzIGRldmlkZWQgdG8KKyAgICAgICAgYmFzZSBw
YXJ0IGFuZCB2aWV3IHBhcnQuIEJhc2UgcGFydCB0YWtlcyBjYXJlIG9mIGVmbCBpbml0aWFsaXph
dGlvbiwgZGVmaW5lcyB0ZXN0IG1hY3JvcyBhbmQgcHJlcGFyZXMgdGVzdCB0byBydW4uIFZpZXcg
cGFydCBpcyBhIGNvbnRleHQgCisgICAgICAgIG9mIGVhY2ggdGVzdC4KKworICAgICAgICAqIHRl
c3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVXS1Vu
aXRUZXN0cyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjppbml0KToKKyAg
ICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duKToKKyAgICAgICAgKEVX
S1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKToKKyAgICAgICAgKEVXS1VuaXRU
ZXN0czo6RVdLVGVzdEJhc2U6OnN0YXJ0VGVzdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVX
S1Rlc3RCYXNlOjplbmRUZXN0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6
OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6cnVuVGVz
dCk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oOiBBZGRlZC4K
KyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tUZXN0QmFzZSk6CisgICAgICAg
ICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmg6IEFkZGVkLgorICAgICAgICAo
Q29uZmlnKToKKyAgICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmNwcDog
QWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpF
V0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0
czo6RVdLVGVzdEVjb3JlRXZhczo6fkVXS1Rlc3RFY29yZUV2YXMpOgorICAgICAgICAoRVdLVW5p
dFRlc3RzOjpFV0tUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0
czo6RVdLVGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rl
c3RWaWV3OjpFV0tUZXN0Vmlldyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3
Ojp+RVdLVGVzdFZpZXcpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6aW5p
dCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpzaG93KToKKyAgICAgICAg
KEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OmdldE1haW5GcmFtZSk6CisgICAgICAgIChFV0tV
bml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpnZXRFdmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6
RVdLVGVzdFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMv
RVdLVGVzdFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAo
RVdLVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChFV0tUZXN0Vmlldyk6CisgICAgICAgIChFV0tV
bml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpnZXRXZWJWaWV3KToKKyAgICAgICAgKiB0ZXN0cy9yZXNv
dXJjZXMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvdGVz
dF9ld2tfdmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrVmlld0VkaXRhYmxlR2V0Q2IpOgor
ICAgICAgICAoVEVTVCk6CisgICAgICAgIChld2tWaWV3VXJpR2V0Q2IpOgorICAgICAgICAqIHRl
c3RzL3Rlc3RfcnVubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKwogMjAxMi0wNi0x
MiAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpAaW50ZWwuY29tPgogCiAgICAg
ICAgIFtFRkxdIEVuYWJsZSBTSEFET1dfRE9NIGZsYWcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZjhmYjljYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwCkBAIC0wLDAgKzEs
MTAwIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0
QmFzZS5oIgorCisjaW5jbHVkZSAiRVdLVGVzdENvbmZpZy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RW
aWV3LmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNs
dWRlIDxFZGplLmg+CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitib29sIEVXS1Rlc3RC
YXNlOjppbml0KCkKK3sKKyAgICBpZiAoIWVjb3JlX2V2YXNfaW5pdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkamVfaW5pdCgpKSB7CisgICAgICAgIGVjb3JlX2V2YXNf
c2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZXdr
X2luaXQoKTsKK30KKwordm9pZCBFV0tUZXN0QmFzZTo6c2h1dGRvd24oKQoreworICAgIGVjb3Jl
X2V2YXNfc2h1dGRvd24oKTsKKyAgICBlZGplX3NodXRkb3duKCk7CisgICAgZXdrX3NodXRkb3du
KCk7Cit9CisKK3ZvaWQgRVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKCkKK3sKKyAgICBpbnQgY291
bnQgPSAwOworCisgICAgd2hpbGUgKChjb3VudCA9IGVjb3JlX2V2YXNfc2h1dGRvd24oKSkgPiAw
KSB7IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9zaHV0ZG93bigpKSA+IDApIHsgfQorICAg
IHdoaWxlICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkgPiAwKSB7IH0KK30KKwordm9pZCBFV0tU
ZXN0QmFzZTo6c3RhcnRUZXN0KCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKK30K
Kwordm9pZCBFV0tUZXN0QmFzZTo6ZW5kVGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1
aXQoKTsKK30KKworYm9vbCBFV0tUZXN0QmFzZTo6Y3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmws
IHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25z
dCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIEVGTF9JTklUX1JF
VCgpOworCisgICAgRVdLVGVzdEVjb3JlRXZhcyBldmFzOworICAgIGlmICghZXZhcy5nZXRFdmFz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBldmFzLnNob3coKTsKKworICAgIEVXS1Rl
c3RWaWV3IHZpZXcoZXZhcy5nZXRFdmFzKCksIHVybCk7CisgICAgaWYgKCF2aWV3LmluaXQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmlldy5iaW5kRXZlbnRzKGV2ZW50X2NhbGxi
YWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKKyAgICB2aWV3LnNob3coKTsKKworICAgIFNU
QVJUX1RFU1QoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVXS1Rlc3RCYXNlOjpy
dW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCop
LCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIHJldHVy
biBjcmVhdGVUZXN0KEVXS1VuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0VGVzdFBhZ2UsIGV2ZW50
X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKK30KKworYm9vbCBFV0tUZXN0QmFz
ZTo6cnVuVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCos
IEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVu
dF9kYXRhKQoreworICAgIHJldHVybiBjcmVhdGVUZXN0KHVybCwgZXZlbnRfY2FsbGJhY2ssIGV2
ZW50X25hbWUsIGV2ZW50X2RhdGEpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMjFkZDJhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaApAQCAtMCwwICsxLDY4IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
IFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBV
U0EKKyovCisKKyNpZm5kZWYgRVdLVGVzdEJhc2VfaAorI2RlZmluZSBFV0tUZXN0QmFzZV9oCisK
KyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2RlZmluZSBS
VU5fVEVTVChhcmdzLi4uKSAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgQVNTRVJUX0VRKHRy
dWUsIEVXS1Rlc3RCYXNlOjpydW5UZXN0KGFyZ3MpKTsgICAgXAorICAgIH0gd2hpbGUgKDApCisK
KyNkZWZpbmUgU1RBUlRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRVdLVGVz
dEJhc2U6OnN0YXJ0VGVzdCgpOyAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVORF9U
RVNUKCkgICAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFV0tUZXN0QmFzZTo6ZW5kVGVzdCgp
OyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVF9SRVQoKSAgXAorICAgIGRv
IHsgICAgXAorICAgICAgICBpZiAoIUVXS1Rlc3RCYXNlOjppbml0KCkpICAgXAorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5J
VCgpICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RCYXNlOjppbml0KCk7ICAgIFwK
KyAgICB9IHdoaWxlICgwKQorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdL
VGVzdEJhc2UgeworICAgIHN0YXRpYyBib29sIGNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2
b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3Qg
Y2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgaW5pdCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIHZv
aWQgc2h1dGRvd25BbGwoKTsKKyAgICBzdGF0aWMgdm9pZCBzdGFydFRlc3QoKTsKKyAgICBzdGF0
aWMgdm9pZCBlbmRUZXN0KCk7CisKKyAgICBzdGF0aWMgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIq
IHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiks
IGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworICAgIHN0YXRpYyBi
b29sIHJ1blRlc3Qodm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0
VXRpbHMvRVdLVGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RV
dGlscy9FV0tUZXN0Q29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
N2IzZWIwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUK
KyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lm
bmRlZiBFV0tUZXN0Q29uZmlnX2gKKyNkZWZpbmUgRVdLVGVzdENvbmZpZ19oCisKK25hbWVzcGFj
ZSBFV0tVbml0VGVzdHMgeworbmFtZXNwYWNlIENvbmZpZyB7CitzdGF0aWMgY29uc3QgaW50IGRl
ZmF1bHRWaWV3V2lkdGggPSA2MDA7CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3SGVpZ2h0
ID0gODAwOworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRUaGVtZVBhdGggPSBERUZBVUxUX1RI
RU1FX1BBVEgiL2RlZmF1bHQuZWRqIjsKK3N0YXRpYyBjb25zdCBjaGFyKiBkZWZhdWx0VGVzdFBh
Z2UgPSAiZmlsZTovLyJERUZBVUxUX1RFU1RfUEFHRV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0
bWwiOworfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
VW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZjQ0YTkxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rl
c3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwCkBAIC0wLDAgKzEsMTUwIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl
ZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EK
KyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0Vmlldy5oIgorCisj
aW5jbHVkZSAiRVdLVGVzdENvbmZpZy5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKworI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitFV0tU
ZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKCkKK3sKKyAgICBtX2Vjb3JlRXZhcyA9IGFk
b3B0UHRyKGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIEVXS1VuaXRUZXN0czo6Q29uZmlnOjpkZWZh
dWx0Vmlld1dpZHRoLCBFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQsIDAp
KTsKK30KKworRVdLVGVzdEVjb3JlRXZhczo6RVdLVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBl
bmdpbmVfbmFtZSwgaW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRf
dywgaW50IHZpZXdwb3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMpCit7CisgICAgbV9l
Y29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX25ldyhlbmdpbmVfbmFtZSwgdmlld3BvcnRf
eCwgdmlld3BvcnRfeSwgdmlld3BvcnRfdywgdmlld3BvcnRfaCwgZXh0cmFfb3B0aW9ucykpOwor
fQorCitFV0tUZXN0RWNvcmVFdmFzOjp+RVdLVGVzdEVjb3JlRXZhcygpCit7IAorfQorCitFdmFz
KiBFV0tUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0
KCkpCisgICAgICAgIHJldHVybiBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5nZXQoKSk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRVdLVGVzdEVjb3JlRXZhczo6c2hvdygpCit7CisgICAg
aWYgKG1fZWNvcmVFdmFzLmdldCgpKQorICAgICAgICBlY29yZV9ldmFzX3Nob3cobV9lY29yZUV2
YXMuZ2V0KCkpOworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZhcyogZXZhcykKKyAg
ICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1
bHRUZXN0UGFnZSkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1f
d2lkdGgoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hl
aWdodChFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7Cit9CisKK0VX
S1Rlc3RWaWV3OjpFV0tUZXN0VmlldyhFdmFzKiBldmFzLCBjb25zdCBjaGFyKiB1cmwpCisgICAg
OiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBl
KFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRW
aWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZp
ZXdIZWlnaHQpCit7Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tUZXN0VmlldyhFdmFzKiBldmFzLCBF
d2tWaWV3VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX2V2YXMoZXZhcykKKyAg
ICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dp
ZHRoKEVXS1VuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWln
aHQoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tU
ZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3Qg
Y2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAg
ICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dp
ZHRoKHdpZHRoKQorICAgICwgbV9oZWlnaHQoaGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6
fkVXS1Rlc3RWaWV3KCkKK3sKK30KKworYm9vbCBFV0tUZXN0Vmlldzo6aW5pdCgpCit7CisgICAg
aWYgKCFtX2V2YXMgfHwgbV91cmwuZW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoIChtX2RlZmF1bHRWaWV3VHlwZSkgeworICAgIGNhc2UgU2luZ2xlVmlldzoKKyAg
ICAgICAgbV93ZWJWaWV3ID0gYWRvcHRQdHIoZXdrX3ZpZXdfc2luZ2xlX2FkZChtX2V2YXMpKTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRpbGVkVmlldzoKKyAgICAgICAgbV93ZWJWaWV3
ID0gYWRvcHRQdHIoZXdrX3ZpZXdfdGlsZWRfYWRkKG1fZXZhcykpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fd2ViVmlldy5nZXQoKSwgRVdLVW5pdFRlc3Rz
OjpDb25maWc6OmRlZmF1bHRUaGVtZVBhdGgpOworICAgIGV3a192aWV3X3VyaV9zZXQobV93ZWJW
aWV3LmdldCgpLCBtX3VybC5jX3N0cigpKTsKK30KKwordm9pZCBFV0tUZXN0Vmlldzo6c2hvdygp
Cit7CisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBldmFz
X29iamVjdF9yZXNpemUobV93ZWJWaWV3LmdldCgpLCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAg
ZXZhc19vYmplY3Rfc2hvdyhtX3dlYlZpZXcuZ2V0KCkpOworICAgIGV2YXNfb2JqZWN0X2ZvY3Vz
X3NldChtX3dlYlZpZXcuZ2V0KCksIEVJTkFfVFJVRSk7Cit9CisKK0V2YXNfT2JqZWN0KiBFV0tU
ZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LmdldCgpKQorICAg
ICAgICByZXR1cm4gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobV93ZWJWaWV3LmdldCgpKTsKKyAg
ICByZXR1cm4gMDsKK30KKworRXZhcyogRVdLVGVzdFZpZXc6OmdldEV2YXMoKQoreworICAgIGlm
IChtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBldmFzX29iamVjdF9ldmFzX2dldCht
X3dlYlZpZXcuZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEVXS1Rlc3RWaWV3Ojpi
aW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBj
b25zdCBjaGFyKiBldmVudE5hbWUsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIW1fd2ViVmlldy5n
ZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
ZGVsKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFjayk7CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFj
aywgcHRyKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5p
dFRlc3RVdGlscy9FV0tUZXN0Vmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRl
c3RVdGlscy9FV0tUZXN0Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmNjMGFmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0
VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQor
ICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZu
ZGVmIEVXS1Rlc3RWaWV3X2gKKyNkZWZpbmUgRVdLVGVzdFZpZXdfaAorCisjaW5jbHVkZSA8RWNv
cmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdL
VGVzdEVjb3JlRXZhcyB7CitwdWJsaWM6CisgICAgRVdLVGVzdEVjb3JlRXZhcygpOworICAgIEVX
S1Rlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5naW5lX25hbWUsIGludCB2aWV3cG9ydF94LCBp
bnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3csIGludCB2aWV3cG9ydF9oLCBjb25zdCBjaGFy
KiBleHRyYV9vcHRpb25zKTsKKyAgICB+RVdLVGVzdEVjb3JlRXZhcygpOworCisgICAgRXZhcyog
Z2V0RXZhcygpOworICAgIHZvaWQgc2hvdygpOworCitwcml2YXRlOgorICAgIE93blB0cjxFY29y
ZV9FdmFzPiBtX2Vjb3JlRXZhczsKK307CisKK2NsYXNzIEVXS1Rlc3RWaWV3IHsKK3B1YmxpYzoK
KyAgICBlbnVtIEV3a1ZpZXdUeXBlIHsKKyAgICAgICAgU2luZ2xlVmlldyA9IDAsCisgICAgICAg
IFRpbGVkVmlldywKKyAgICB9OworCisgICAgZXhwbGljaXQgRVdLVGVzdFZpZXcoRXZhcyopOwor
ICAgIEVXS1Rlc3RWaWV3KEV2YXMqLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVXS1Rlc3RWaWV3
KEV2YXMqLCBFd2tWaWV3VHlwZSwgY29uc3QgY2hhciogdXJsKTsKKyAgICBFV0tUZXN0VmlldyhF
dmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKKworICAgIHZpcnR1YWwgfkVXS1Rlc3RWaWV3KCk7CisKKyAgICBFdmFzX09iamVjdCogZ2V0
V2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldy5nZXQoKTsgfQorICAgIEV2YXNfT2JqZWN0KiBn
ZXRNYWluRnJhbWUoKTsKKyAgICBFdmFzKiBnZXRFdmFzKCk7CisgICAgdm9pZCBzaG93KCk7CisK
KyAgICBib29sIGluaXQoKTsKKyAgICB2b2lkIGJpbmRFdmVudHModm9pZCAoKmNhbGxiYWNrKSh2
b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgdm9pZCog
cHRyKTsKKworcHJpdmF0ZToKKyAgICBFV0tUZXN0Vmlldyhjb25zdCBFV0tUZXN0VmlldyYpOwor
ICAgIEVXS1Rlc3RWaWV3IG9wZXJhdG9yPShjb25zdCBFV0tUZXN0VmlldyYpOworCisgICAgRXZh
cyogbV9ldmFzOworICAgIE93blB0cjxFdmFzX09iamVjdD4gbV93ZWJWaWV3OworCisgICAgaW50
IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIEV3a1ZpZXdUeXBlIG1fZGVmYXVsdFZpZXdUeXBlOwor
ICAgIHN0ZDo6c3RyaW5nIG1fdXJsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sIGIv
U291cmNlL1dlYktpdC9lZmwvdGVzdHMvcmVzb3VyY2VzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkODFlNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rlc3RfcGFn
ZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBhbGlnbj0iY2VudGVy
Ij5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVmYXVsdCBUZXN0aW5n
IFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZWZsL3Rlc3RzL3Rlc3RfZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
dGVzdF9ld2tfdmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRh
MWM4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfZXdr
X3ZpZXcuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRl
IDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIgorI2luY2x1ZGUgPEVX
ZWJLaXQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdL
VW5pdFRlc3RzOworCisvKioKKyogQGJyaWVmIENoZWNraW5nIHdoZXRoZXIgZnVuY3Rpb24gcHJv
cGVybHkgcmV0dXJucyBjb3JyZWN0IHZhbHVlLgorKi8KK3ZvaWQgZXdrVmlld0VkaXRhYmxlR2V0
Q2Iodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBl
d2tfdmlld19lZGl0YWJsZV9zZXQobywgRUlOQV9GQUxTRSk7CisgICAgRVhQRUNUX0VRKEVJTkFf
RkFMU0UsIGV3a192aWV3X2VkaXRhYmxlX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsKK30KKwor
VEVTVCh0ZXN0X2V3a192aWV3LCBld2tfdmlld19lZGl0YWJsZV9nZXQpCit7CisgICAgUlVOX1RF
U1QoZXdrVmlld0VkaXRhYmxlR2V0Q2IsICJsb2FkLGZpbmlzaGVkIiwgMCk7Cit9CisKKy8qKgor
KiBAYnJpZWYgQ2hlY2tpbmcgd2hldGhlciBmdW5jdGlvbiByZXR1cm5zIGNvcnJlY3QgdXJpIHN0
cmluZy4KKyovCit2b2lkIGV3a1ZpZXdVcmlHZXRDYih2b2lkKiBldmVudEluZm8sIEV2YXNfT2Jq
ZWN0KiBvLCB2b2lkKiBkYXRhKQoreworICAgIEVYUEVDVF9TVFJFUSgiaHR0cDovL3d3dy53ZWJr
aXQub3JnLyIsIGV3a192aWV3X3VyaV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RF
U1QodGVzdF9ld2tfdmlldywgZXdrX3ZpZXdfdXJpX2dldCkKK3sKKyAgICBSVU5fVEVTVCgiaHR0
cDovL3d3dy53ZWJraXQub3JnIiwgZXdrVmlld1VyaUdldENiLCAibG9hZCxmaW5pc2hlZCIsIDAp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ydW5uZXIuY3Bw
IGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ydW5uZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGU5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy90ZXN0X3J1bm5lci5jcHAKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUg
dGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisq
LworCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0tVbml0VGVzdHM7CisKK2ludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBhdGV4aXQoRVdLVGVzdEJhc2U6OnNodXRk
b3duQWxsKTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAg
ICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQo=
</data>
<flag name="commit-queue"
          id="154830"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147550</attachid>
            <date>2012-06-14 03:51:02 -0700</date>
            <delta_ts>2012-06-19 08:24:30 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation - correcting build problems</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>23446</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYThiZjdhNy4uMzcxNTI4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0xMyAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA2LTEyICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5j
b20+CiAKICAgICAgICAgW0VGTF0gRW5hYmxlIFNIQURPV19ET00gZmxhZwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1F
ZmwuY21ha2UKaW5kZXggMmRlZjg2OS4uMGM2MzcwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC0yODYsMyArMjg2LDk1IEBAIElOU1RBTEwoRklMRVMgJHtFV2ViS2l0X0hFQURFUlN9CiAK
IElOU1RBTEwoRklMRVMgJHtXZWJLaXRfVEhFTUV9CiAgICAgICAgIERFU1RJTkFUSU9OICR7REFU
QV9JTlNUQUxMX0RJUn0vdGhlbWVzKQorCitJTkNMVURFX0RJUkVDVE9SSUVTKCR7VEhJUkRQQVJU
WV9ESVJ9L2d0ZXN0CisgICAgICAgICAgICAgICAgICAgICR7VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0
L2luY2x1ZGUKKykKKworU0VUKEdURVNUX1NPVVJDRVMgIiR7VEhJUkRQQVJUWV9ESVJ9L2d0ZXN0
L3NyYyIpCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QuY2MK
KyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAgICAke0dURVNUX1NP
VVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWZpbGVwYXRo
LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAgJHtHVEVTVF9TT1VS
Q0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LXR5cGVk
LXRlc3QuY2MKKykKKworU0VUKEVXS1VuaXRUZXN0c19MSUJSQVJJRVMKKyAgICAke0phdmFTY3Jp
cHRDb3JlX0xJQlJBUllfTkFNRX0KKyAgICAke1dlYkNvcmVfTElCUkFSWV9OQU1FfQorICAgICR7
V2ViS2l0X0xJQlJBUllfTkFNRX0KKyAgICAke0VDT1JFX0xJQlJBUklFU30KKyAgICAke0VDT1JF
X0VWQVNfTElCUkFSSUVTfQorICAgICR7RVZBU19MSUJSQVJJRVN9CisgICAgJHtFREpFX0xJQlJB
UklFU30KKykKKworU0VUKEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7
Q01BS0VfU09VUkNFX0RJUn0vU291cmNlIgorICAgICIke1dFQktJVF9ESVJ9L2VmbC9ld2siCisg
ICAgIiR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdFV0aWxzIgorICAgICIke0pB
VkFTQ1JJUFRDT1JFX0RJUn0iCisgICAgIiR7V1RGX0RJUn0iCisgICAgIiR7V1RGX0RJUn0vd3Rm
IgorICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQorICAgICR7RUNPUkVfRVZBU19JTkNMVURFX0RJ
UlN9CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKyAgICAke0VESkVfSU5DTFVERV9ESVJTfQor
KQorCitTRVQoRVdLVW5pdFRlc3RzX0xJTktfRkxBR1MKKyAgICAke0VDT1JFX0xERkxBR1N9Cisg
ICAgJHtFQ09SRV9FVkFTX0xERkxBR1N9CisgICAgJHtFVkFTX0xERkxBR1N9CisgICAgJHtFREpF
X0xERkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAgIExJU1QoQVBQRU5E
IEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTICIke1dURl9ESVJ9L3d0Zi9nb2JqZWN0
IikKKworICAgIExJU1QoQVBQRU5EIEVXS1VuaXRUZXN0c19MSUJSQVJJRVMKKyAgICAgICAgJHtH
ZGtfTElCUkFSSUVTfQorICAgICAgICAke0dsaWJfTElCUkFSSUVTfQorICAgICAgICAke0d0aHJl
YWRfTElCUkFSSUVTfQorICAgICkKK0VORElGICgpCisKK1NFVChERUZBVUxUX1RFU1RfUEFHRV9E
SVIgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMp
CisKK0FERF9ERUZJTklUSU9OUygtRERFRkFVTFRfVEVTVF9QQUdFX0RJUj1cIiR7REVGQVVMVF9U
RVNUX1BBR0VfRElSfVwiKQorQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9USEVNRV9QQVRIPVwi
JHtUSEVNRV9CSU5BUllfRElSfVwiKQorCitBRERfTElCUkFSWShld2tUZXN0VXRpbHMKKyAgICAk
e1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmNwcAorICAg
ICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwCisp
CisKK1NFVChXRUJLSVRfRUZMX1RFU1RfRElSICIke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy8iKQor
CitTRVQoRVdLVW5pdFRlc3RzX1NPVVJDRVMKKyAgICAke1dFQktJVF9FRkxfVEVTVF9ESVJ9L3Rl
c3RfcnVubmVyLmNwcAorICAgICR7V0VCS0lUX0VGTF9URVNUX0RJUn0vdGVzdF9ld2tfdmlldy5j
cHAKKykKKworU0VUKEVXS1VuaXRUZXN0c19CSU5BUklFUworICAgIHRlc3RfZXdrX3ZpZXcKKykK
KworSU5DTFVERV9ESVJFQ1RPUklFUygke0VXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVT
fSkKKworZm9yZWFjaCh0ZXN0TmFtZSAke0VXS1VuaXRUZXN0c19CSU5BUklFU30pCisgICAgQURE
X0VYRUNVVEFCTEUoYmluLyR7dGVzdE5hbWV9ICR7V0VCS0lUX0VGTF9URVNUX0RJUn0vJHt0ZXN0
TmFtZX0uY3BwICR7V0VCS0lUX0VGTF9URVNUX0RJUn0vdGVzdF9ydW5uZXIuY3BwKQorICAgIFRB
UkdFVF9MSU5LX0xJQlJBUklFUyhiaW4vJHt0ZXN0TmFtZX0gJHtFV0tVbml0VGVzdHNfTElCUkFS
SUVTfSBld2tUZXN0VXRpbHMgZ3Rlc3QpCisgICAgQUREX1RBUkdFVF9QUk9QRVJUSUVTKGJpbi8k
e3Rlc3ROYW1lfSBMSU5LX0ZMQUdTICIke0VXS1VuaXRUZXN0c19MSU5LX0ZMQUdTfSIpCisgICAg
U0VUX1RBUkdFVF9QUk9QRVJUSUVTKGJpbi8ke3Rlc3ROYW1lfSBQUk9QRVJUSUVTIEZPTERFUiAi
V2ViS2l0IikKKyAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoYmluLyR7dGVzdE5hbWV9IFBST1BF
UlRJRVMgUlVOVElNRV9PVVRQVVRfRElSRUNUT1JZICIke0NNQUtFX0JJTkFSWV9ESVJ9IikKK2Vu
ZGZvcmVhY2goKQorCitBRERfRVhFQ1VUQUJMRShiaW4vdGVzdF9ydW5uZXIgJHtFV0tVbml0VGVz
dHNfU09VUkNFU30pCitUQVJHRVRfTElOS19MSUJSQVJJRVMoYmluL3Rlc3RfcnVubmVyICR7RVdL
VW5pdFRlc3RzX0xJQlJBUklFU30gZXdrVGVzdFV0aWxzIGd0ZXN0KQorQUREX1RBUkdFVF9QUk9Q
RVJUSUVTKGJpbi90ZXN0X3J1bm5lciBMSU5LX0ZMQUdTICIke0VXS1VuaXRUZXN0c19MSU5LX0ZM
QUdTfSIpCitTRVRfVEFSR0VUX1BST1BFUlRJRVMoYmluL3Rlc3RfcnVubmVyIFBST1BFUlRJRVMg
Rk9MREVSICJXZWJLaXQiKQorU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGJpbi90ZXN0X3J1bm5lciBQ
Uk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllfRElSfSIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKaW5kZXggOTRhNTA0Yy4uZGQwZWI0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU1IEBACisyMDEyLTA2LTEzICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIEltcGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgZnJh
bWV3b3JrIGFuZCB1bml0IHRlc3RzIGZvciBXZWJLaXQtRUZMIHBvcnQuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODUwOQorCisgICAgICAgIFBhdGNo
IGJ5IEtyenlzenRvZiBDemVjaCA8ay5jemVjaEBzYW1zdW5nLmNvbT4sIFRvbWFzeiBNb3Jhd3Nr
aSA8dC5tb3Jhd3NraUBzYW1zdW5nLmNvbT4gb24gMjAxMi0wMS0xNgorICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0aW5nIGZyYW1ld29yayBpcyBiYXNl
ZCBvbiBndGVzdCBsaWJyYXJ5LiBHdGVzdCBsaWJyYXJ5IGlzIHBhcnQgb2YgdGhlIFdlYktpdCBw
cm9qZWN0LiBGcmFtZXdvcmsgaXMgZGV2aWRlZCB0bworICAgICAgICBiYXNlIHBhcnQgYW5kIHZp
ZXcgcGFydC4gQmFzZSBwYXJ0IHRha2VzIGNhcmUgb2YgZWZsIGluaXRpYWxpemF0aW9uLCBkZWZp
bmVzIHRlc3QgbWFjcm9zIGFuZCBwcmVwYXJlcyB0ZXN0IHRvIHJ1bi4gVmlldyBwYXJ0IGlzIGEg
Y29udGV4dCAKKyAgICAgICAgb2YgZWFjaCB0ZXN0LgorCisgICAgICAgICogdGVzdHMvVW5pdFRl
c3RVdGlscy9FV0tUZXN0QmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoRVdLVW5pdFRlc3RzKToK
KyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OmluaXQpOgorICAgICAgICAoRVdL
VW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6c2h1dGRvd24pOgorICAgICAgICAoRVdLVW5pdFRlc3Rz
OjpFV0tUZXN0QmFzZTo6c2h1dGRvd25BbGwpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tU
ZXN0QmFzZTo6c3RhcnRUZXN0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6
OmVuZFRlc3QpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6Y3JlYXRlVGVz
dCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjpydW5UZXN0KToKKyAgICAg
ICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmg6IEFkZGVkLgorICAgICAgICAo
RVdLVW5pdFRlc3RzKToKKyAgICAgICAgKEVXS1Rlc3RCYXNlKToKKyAgICAgICAgKiB0ZXN0cy9V
bml0VGVzdFV0aWxzL0VXS1Rlc3RDb25maWcuaDogQWRkZWQuCisgICAgICAgIChDb25maWcpOgor
ICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RFY29y
ZUV2YXM6OkVXS1Rlc3RFY29yZUV2YXMpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0
RWNvcmVFdmFzOjp+RVdLVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVX
S1Rlc3RFY29yZUV2YXM6OmdldEV2YXMpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0
RWNvcmVFdmFzOjpzaG93KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OkVX
S1Rlc3RWaWV3KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6On5FV0tUZXN0
Vmlldyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3Ojppbml0KToKKyAgICAg
ICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OnNob3cpOgorICAgICAgICAoRVdLVW5pdFRl
c3RzOjpFV0tUZXN0Vmlldzo6Z2V0TWFpbkZyYW1lKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6
RVdLVGVzdFZpZXc6OmdldEV2YXMpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmll
dzo6YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmll
dy5oOiBBZGRlZC4KKyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tUZXN0RWNv
cmVFdmFzKToKKyAgICAgICAgKEVXS1Rlc3RWaWV3KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6
RVdLVGVzdFZpZXc6OmdldFdlYlZpZXcpOgorICAgICAgICAqIHRlc3RzL3Jlc291cmNlcy9kZWZh
dWx0X3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy90ZXN0X2V3a192aWV3
LmNwcDogQWRkZWQuCisgICAgICAgIChld2tWaWV3RWRpdGFibGVHZXRDYik6CisgICAgICAgIChU
RVNUKToKKyAgICAgICAgKGV3a1ZpZXdVcmlHZXRDYik6CisgICAgICAgICogdGVzdHMvdGVzdF9y
dW5uZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTA2LTEyICBDaHJpc3Rv
cGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0g
RW5hYmxlIFNIQURPV19ET00gZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mOGZiOWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5jcHAKQEAgLTAsMCArMSwxMDAgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
U2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVT
QQorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RCYXNlLmgiCisK
KyNpbmNsdWRlICJFV0tUZXN0Q29uZmlnLmgiCisjaW5jbHVkZSAiRVdLVGVzdFZpZXcuaCIKKyNp
bmNsdWRlIDxFV2ViS2l0Lmg+CisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVkamUu
aD4KKworbmFtZXNwYWNlIEVXS1VuaXRUZXN0cyB7CisKK2Jvb2wgRVdLVGVzdEJhc2U6OmluaXQo
KQoreworICAgIGlmICghZWNvcmVfZXZhc19pbml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZWRqZV9pbml0KCkpIHsKKyAgICAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBld2tfaW5pdCgpOwor
fQorCit2b2lkIEVXS1Rlc3RCYXNlOjpzaHV0ZG93bigpCit7CisgICAgZWNvcmVfZXZhc19zaHV0
ZG93bigpOworICAgIGVkamVfc2h1dGRvd24oKTsKKyAgICBld2tfc2h1dGRvd24oKTsKK30KKwor
dm9pZCBFV0tUZXN0QmFzZTo6c2h1dGRvd25BbGwoKQoreworICAgIGludCBjb3VudCA9IDA7CisK
KyAgICB3aGlsZSAoKGNvdW50ID0gZWNvcmVfZXZhc19zaHV0ZG93bigpKSA+IDApIHsgfQorICAg
IHdoaWxlICgoY291bnQgPSBlZGplX3NodXRkb3duKCkpID4gMCkgeyB9CisgICAgd2hpbGUgKChj
b3VudCA9IGV3a19zaHV0ZG93bigpKSA+IDApIHsgfQorfQorCit2b2lkIEVXS1Rlc3RCYXNlOjpz
dGFydFRlc3QoKQoreworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworfQorCit2b2lkIEVX
S1Rlc3RCYXNlOjplbmRUZXN0KCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworfQor
Citib29sIEVXS1Rlc3RCYXNlOjpjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2
ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2
ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgRUZMX0lOSVRfUkVUKCk7CisKKyAg
ICBFV0tUZXN0RWNvcmVFdmFzIGV2YXM7CisgICAgaWYgKCFldmFzLmdldEV2YXMoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGV2YXMuc2hvdygpOworCisgICAgRVdLVGVzdFZpZXcgdmll
dyhldmFzLmdldEV2YXMoKSwgdXJsKTsKKyAgICBpZiAoIXZpZXcuaW5pdCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB2aWV3LmJpbmRFdmVudHMoZXZlbnRfY2FsbGJhY2ssIGV2ZW50
X25hbWUsIGV2ZW50X2RhdGEpOworICAgIHZpZXcuc2hvdygpOworCisgICAgU1RBUlRfVEVTVCgp
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRVdLVGVzdEJhc2U6OnJ1blRlc3Qodm9p
ZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNo
YXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRl
c3QoRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRUZXN0UGFnZSwgZXZlbnRfY2FsbGJhY2ss
IGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworfQorCitib29sIEVXS1Rlc3RCYXNlOjpydW5UZXN0
KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7
CisgICAgcmV0dXJuIGNyZWF0ZVRlc3QodXJsLCBldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwg
ZXZlbnRfZGF0YSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1Vu
aXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yMWRkMmEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
VW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgICAgQ29w
eXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBH
TlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
CisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKwor
I2lmbmRlZiBFV0tUZXN0QmFzZV9oCisjZGVmaW5lIEVXS1Rlc3RCYXNlX2gKKworI2luY2x1ZGUg
PEV2YXMuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjZGVmaW5lIFJVTl9URVNUKGFy
Z3MuLi4pICAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBBU1NFUlRfRVEodHJ1ZSwgRVdLVGVz
dEJhc2U6OnJ1blRlc3QoYXJncykpOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBT
VEFSVF9URVNUKCkgICAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFV0tUZXN0QmFzZTo6c3Rh
cnRUZXN0KCk7ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRU5EX1RFU1QoKSAgICBc
CisgICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RCYXNlOjplbmRUZXN0KCk7IFwKKyAgICB9
IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklUX1JFVCgpICBcCisgICAgZG8geyAgICBcCisg
ICAgICAgIGlmICghRVdLVGVzdEJhc2U6OmluaXQoKSkgICBcCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklUKCkgIFwKKyAg
ICBkbyB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OmluaXQoKTsgICAgXAorICAgIH0gd2hp
bGUgKDApCisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitjbGFzcyBFV0tUZXN0QmFzZSB7
CisgICAgc3RhdGljIGJvb2wgY3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVu
dF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVu
dF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpbml0
KCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93
bkFsbCgpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0VGVzdCgpOworICAgIHN0YXRpYyB2b2lkIGVu
ZFRlc3QoKTsKKworICAgIHN0YXRpYyBib29sIHJ1blRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lk
ICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hh
ciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CisgICAgc3RhdGljIGJvb2wgcnVuVGVz
dCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29u
c3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tU
ZXN0Q29uZmlnLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rl
c3RDb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjNlYjA1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0tUZXN0Q29uZmlnLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwg
U3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVXS1Rl
c3RDb25maWdfaAorI2RlZmluZSBFV0tUZXN0Q29uZmlnX2gKKworbmFtZXNwYWNlIEVXS1VuaXRU
ZXN0cyB7CituYW1lc3BhY2UgQ29uZmlnIHsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFZpZXdX
aWR0aCA9IDYwMDsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFZpZXdIZWlnaHQgPSA4MDA7Citz
dGF0aWMgY29uc3QgY2hhciogZGVmYXVsdFRoZW1lUGF0aCA9IERFRkFVTFRfVEhFTUVfUEFUSCIv
ZGVmYXVsdC5lZGoiOworc3RhdGljIGNvbnN0IGNoYXIqIGRlZmF1bHRUZXN0UGFnZSA9ICJmaWxl
Oi8vIkRFRkFVTFRfVEVTVF9QQUdFX0RJUiIvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbCI7Cit9Cit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RV
dGlscy9FV0tUZXN0Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0
aWxzL0VXS1Rlc3RWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
NDRhOTFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRl
c3RVdGlscy9FV0tUZXN0Vmlldy5jcHAKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUK
KyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RWaWV3LmgiCisKKyNpbmNsdWRlICJF
V0tUZXN0Q29uZmlnLmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorCisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEVXS1VuaXRUZXN0cyB7CisKK0VXS1Rlc3RFY29yZUV2
YXM6OkVXS1Rlc3RFY29yZUV2YXMoKQoreworICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNv
cmVfZXZhc19uZXcoMCwgMCwgMCwgRVdLVW5pdFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lk
dGgsIEVXS1VuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCwgMCkpOworfQorCitF
V0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1l
LCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmll
d3BvcnRfaCwgY29uc3QgY2hhciogZXh0cmFfb3B0aW9ucykKK3sKKyAgICBtX2Vjb3JlRXZhcyA9
IGFkb3B0UHRyKGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2aWV3cG9ydF94LCB2aWV3cG9y
dF95LCB2aWV3cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRpb25zKSk7Cit9CisKK0VXS1Rl
c3RFY29yZUV2YXM6On5FV0tUZXN0RWNvcmVFdmFzKCkKK3sgCit9CisKK0V2YXMqIEVXS1Rlc3RF
Y29yZUV2YXM6OmdldEV2YXMoKQoreworICAgIGlmIChtX2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuIGVjb3JlX2V2YXNfZ2V0KG1fZWNvcmVFdmFzLmdldCgpKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBFV0tUZXN0RWNvcmVFdmFzOjpzaG93KCkKK3sKKyAgICBpZiAobV9lY29y
ZUV2YXMuZ2V0KCkpCisgICAgICAgIGVjb3JlX2V2YXNfc2hvdyhtX2Vjb3JlRXZhcy5nZXQoKSk7
Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tUZXN0VmlldyhFdmFzKiBldmFzKQorICAgIDogbV9ldmFz
KGV2YXMpCisgICAgLCBtX3VybChFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFRlc3RQYWdl
KQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3KQorICAgICwgbV93aWR0aChFV0tV
bml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KEVXS1Vu
aXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sKK30KKworRVdLVGVzdFZpZXc6
OkVXS1Rlc3RWaWV3KEV2YXMqIGV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhl
dmFzKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3
KQorICAgICwgbV93aWR0aChFV0tVbml0VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkK
KyAgICAsIG1faGVpZ2h0KEVXS1VuaXRUZXN0czo6Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkK
K3sKK30KKworRVdLVGVzdFZpZXc6OkVXS1Rlc3RWaWV3KEV2YXMqIGV2YXMsIEV3a1ZpZXdUeXBl
IHR5cGUsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwo
dXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgoRVdLVW5p
dFRlc3RzOjpDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChFV0tVbml0
VGVzdHM6OkNvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7Cit9CisKK0VXS1Rlc3RWaWV3OjpF
V0tUZXN0VmlldyhFdmFzKiBldmFzLCBFd2tWaWV3VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmws
IGludCB3aWR0aCwgaW50IGhlaWdodCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwo
dXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgod2lkdGgp
CisgICAgLCBtX2hlaWdodChoZWlnaHQpCit7Cit9CisKK0VXS1Rlc3RWaWV3Ojp+RVdLVGVzdFZp
ZXcoKQoreworfQorCitib29sIEVXS1Rlc3RWaWV3Ojppbml0KCkKK3sKKyAgICBpZiAoIW1fZXZh
cyB8fCBtX3VybC5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2gg
KG1fZGVmYXVsdFZpZXdUeXBlKSB7CisgICAgY2FzZSBTaW5nbGVWaWV3OgorICAgICAgICBtX3dl
YlZpZXcgPSBhZG9wdFB0cihld2tfdmlld19zaW5nbGVfYWRkKG1fZXZhcykpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgVGlsZWRWaWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdFB0
cihld2tfdmlld190aWxlZF9hZGQobV9ldmFzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBl
d2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3LmdldCgpLCBFV0tVbml0VGVzdHM6OkNvbmZpZzo6
ZGVmYXVsdFRoZW1lUGF0aCk7CisgICAgZXdrX3ZpZXdfdXJpX3NldChtX3dlYlZpZXcuZ2V0KCks
IG1fdXJsLmNfc3RyKCkpOworfQorCit2b2lkIEVXS1Rlc3RWaWV3OjpzaG93KCkKK3sKKyAgICBp
ZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShtX3dlYlZpZXcuZ2V0KCksIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBldmFzX29iamVj
dF9zaG93KG1fd2ViVmlldy5nZXQoKSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2Vi
Vmlldy5nZXQoKSwgRUlOQV9UUlVFKTsKK30KKworRXZhc19PYmplY3QqIEVXS1Rlc3RWaWV3Ojpn
ZXRNYWluRnJhbWUoKQoreworICAgIGlmIChtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVy
biBld2tfdmlld19mcmFtZV9tYWluX2dldChtX3dlYlZpZXcuZ2V0KCkpOworICAgIHJldHVybiAw
OworfQorCitFdmFzKiBFV0tUZXN0Vmlldzo6Z2V0RXZhcygpCit7CisgICAgaWYgKG1fd2ViVmll
dy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fd2ViVmlldy5n
ZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRVdLVGVzdFZpZXc6OmJpbmRFdmVudHMo
dm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIq
IGV2ZW50TmFtZSwgdm9pZCogcHRyKQoreworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwobV93ZWJW
aWV3LmdldCgpLCBldmVudE5hbWUsIGNhbGxiYWNrKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19hZGQobV93ZWJWaWV3LmdldCgpLCBldmVudE5hbWUsIGNhbGxiYWNrLCBwdHIpOwor
fQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXS1Rlc3RWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VX
S1Rlc3RWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwYWY5OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMv
RVdLVGVzdFZpZXcuaApAQCAtMCwwICsxLDc4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT
dWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5kZWYgRVdLVGVz
dFZpZXdfaAorI2RlZmluZSBFV0tUZXN0Vmlld19oCisKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+
CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitjbGFzcyBFV0tUZXN0RWNvcmVF
dmFzIHsKK3B1YmxpYzoKKyAgICBFV0tUZXN0RWNvcmVFdmFzKCk7CisgICAgRVdLVGVzdEVjb3Jl
RXZhcyhjb25zdCBjaGFyKiBlbmdpbmVfbmFtZSwgaW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9y
dF95LCBpbnQgdmlld3BvcnRfdywgaW50IHZpZXdwb3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29w
dGlvbnMpOworICAgIH5FV0tUZXN0RWNvcmVFdmFzKCk7CisKKyAgICBFdmFzKiBnZXRFdmFzKCk7
CisgICAgdm9pZCBzaG93KCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEVjb3JlX0V2YXM+IG1f
ZWNvcmVFdmFzOworfTsKKworY2xhc3MgRVdLVGVzdFZpZXcgeworcHVibGljOgorICAgIGVudW0g
RXdrVmlld1R5cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0gMCwKKyAgICAgICAgVGlsZWRWaWV3
LAorICAgIH07CisKKyAgICBleHBsaWNpdCBFV0tUZXN0VmlldyhFdmFzKik7CisgICAgRVdLVGVz
dFZpZXcoRXZhcyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRVdLVGVzdFZpZXcoRXZhcyosIEV3
a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVXS1Rlc3RWaWV3KEV2YXMqLCBFd2tW
aWV3VHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAg
dmlydHVhbCB+RVdLVGVzdFZpZXcoKTsKKworICAgIEV2YXNfT2JqZWN0KiBnZXRXZWJWaWV3KCkg
eyByZXR1cm4gbV93ZWJWaWV3LmdldCgpOyB9CisgICAgRXZhc19PYmplY3QqIGdldE1haW5GcmFt
ZSgpOworICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKworICAgIGJvb2wg
aW5pdCgpOworICAgIHZvaWQgYmluZEV2ZW50cyh2b2lkICgqY2FsbGJhY2spKHZvaWQqLCBFdmFz
X09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnROYW1lLCB2b2lkKiBwdHIpOworCitw
cml2YXRlOgorICAgIEVXS1Rlc3RWaWV3KGNvbnN0IEVXS1Rlc3RWaWV3Jik7CisgICAgRVdLVGVz
dFZpZXcgb3BlcmF0b3I9KGNvbnN0IEVXS1Rlc3RWaWV3Jik7CisKKyAgICBFdmFzKiBtX2V2YXM7
CisgICAgT3duUHRyPEV2YXNfT2JqZWN0PiBtX3dlYlZpZXc7CisKKyAgICBpbnQgbV93aWR0aCwg
bV9oZWlnaHQ7CisgICAgRXdrVmlld1R5cGUgbV9kZWZhdWx0Vmlld1R5cGU7CisgICAgc3RkOjpz
dHJpbmcgbV91cmw7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvcmVzb3VyY2VzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGQ4MWU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvcmVzb3VyY2VzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwKQEAg
LTAsMCArMSw2IEBACis8SFRNTD4KKzxCT0RZPgorPEgyIGFsaWduPSJjZW50ZXIiPkVGTCBVbml0
IFRlc3RzPC9IMj4KKzxIMiBhbGlnbj0iY2VudGVyIj5EZWZhdWx0IFRlc3RpbmcgV2ViIFBhZ2U8
L0gyPgorPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVz
dHMvdGVzdF9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy90ZXN0X2V3a192
aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGExYzg5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ld2tfdmlldy5jcHAK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0
b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJVbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgor
I2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0tVbml0VGVzdHM7
CisKKy8qKgorKiBAYnJpZWYgQ2hlY2tpbmcgd2hldGhlciBmdW5jdGlvbiBwcm9wZXJseSByZXR1
cm5zIGNvcnJlY3QgdmFsdWUuCisqLwordm9pZCBld2tWaWV3RWRpdGFibGVHZXRDYih2b2lkKiBl
dmVudEluZm8sIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQoreworICAgIGV3a192aWV3X2Vk
aXRhYmxlX3NldChvLCBFSU5BX0ZBTFNFKTsKKyAgICBFWFBFQ1RfRVEoRUlOQV9GQUxTRSwgZXdr
X3ZpZXdfZWRpdGFibGVfZ2V0KG8pKTsKKyAgICBFTkRfVEVTVCgpOworfQorCitURVNUKHRlc3Rf
ZXdrX3ZpZXcsIGV3a192aWV3X2VkaXRhYmxlX2dldCkKK3sKKyAgICBSVU5fVEVTVChld2tWaWV3
RWRpdGFibGVHZXRDYiwgImxvYWQsZmluaXNoZWQiLCAwKTsKK30KKworLyoqCisqIEBicmllZiBD
aGVja2luZyB3aGV0aGVyIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdCB1cmkgc3RyaW5nLgorKi8K
K3ZvaWQgZXdrVmlld1VyaUdldENiKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZv
aWQqIGRhdGEpCit7CisgICAgRVhQRUNUX1NUUkVRKCJodHRwOi8vd3d3LndlYmtpdC5vcmcvIiwg
ZXdrX3ZpZXdfdXJpX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsKK30KKworVEVTVCh0ZXN0X2V3
a192aWV3LCBld2tfdmlld191cmlfZ2V0KQoreworICAgIFJVTl9URVNUKCJodHRwOi8vd3d3Lndl
YmtpdC5vcmciLCBld2tWaWV3VXJpR2V0Q2IsICJsb2FkLGZpbmlzaGVkIiwgMCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy90ZXN0X3J1bm5lci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy90ZXN0X3J1bm5lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTNkZTllYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL3Rlc3RfcnVubmVyLmNwcApAQCAtMCwwICsxLDI5IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisg
ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNs
dWRlICJVbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEVXS1VuaXRUZXN0czsKKworaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQoreworICAgIGF0ZXhpdChFV0tUZXN0QmFzZTo6c2h1dGRvd25BbGwpOwor
ICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZVRlc3QoJmFyZ2MsIGFyZ3YpOworICAgIHJldHVybiBS
VU5fQUxMX1RFU1RTKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148338</attachid>
            <date>2012-06-19 08:24:30 -0700</date>
            <delta_ts>2012-06-21 02:23:07 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation - updating</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>23939</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZWM4Mzg4NS4uYTBkZTllYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0xOSAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA2LTEzICBSb2JpbiBDYW8gIDxyb2Jpbi5jYW9AdG9yY2htb2JpbGUuY29tLmNuPgog
CiAgICAgICAgIFtCbGFja0JlcnJ5XSBFbmFibGUgTUVESUFfU1RSRUFNIGJ5IGRlZmF1bHQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDJkZWY4NjkuLjlkYzY0MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtMjg2LDMgKzI4Niw4MyBAQCBJTlNUQUxMKEZJTEVTICR7RVdlYktpdF9I
RUFERVJTfQogCiBJTlNUQUxMKEZJTEVTICR7V2ViS2l0X1RIRU1FfQogICAgICAgICBERVNUSU5B
VElPTiAke0RBVEFfSU5TVEFMTF9ESVJ9L3RoZW1lcykKKworSU5DTFVERV9ESVJFQ1RPUklFUygk
e1RISVJEUEFSVFlfRElSfS9ndGVzdAorICAgICAgICAgICAgICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9ndGVzdC9pbmNsdWRlCispCisKK1NFVChHVEVTVF9TT1VSQ0VTICIke1RISVJEUEFSVFlf
RElSfS9ndGVzdC9zcmMiKQorCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNF
U30vZ3Rlc3QuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAg
ICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0
ZXN0LWZpbGVwYXRoLmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAg
JHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9
L2d0ZXN0LXR5cGVkLXRlc3QuY2MKKykKKworU0VUKEVXS1VuaXRUZXN0c19MSUJSQVJJRVMKKyAg
ICAke0phdmFTY3JpcHRDb3JlX0xJQlJBUllfTkFNRX0KKyAgICAke1dlYkNvcmVfTElCUkFSWV9O
QU1FfQorICAgICR7V2ViS2l0X0xJQlJBUllfTkFNRX0KKyAgICAke0VDT1JFX0xJQlJBUklFU30K
KyAgICAke0VDT1JFX0VWQVNfTElCUkFSSUVTfQorICAgICR7RVZBU19MSUJSQVJJRVN9CisgICAg
JHtFREpFX0xJQlJBUklFU30KKykKKworU0VUKEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9S
SUVTCisgICAgIiR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlIgorICAgICIke1dFQktJVF9ESVJ9
L2VmbC9ld2siCisgICAgIiR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdFV0aWxz
IgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0iCisgICAgIiR7V1RGX0RJUn0iCisgICAgIiR7
V1RGX0RJUn0vd3RmIgorICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQorICAgICR7RUNPUkVfRVZB
U19JTkNMVURFX0RJUlN9CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKyAgICAke0VESkVfSU5D
TFVERV9ESVJTfQorKQorCitTRVQoRVdLVW5pdFRlc3RzX0xJTktfRkxBR1MKKyAgICAke0VDT1JF
X0xERkxBR1N9CisgICAgJHtFQ09SRV9FVkFTX0xERkxBR1N9CisgICAgJHtFVkFTX0xERkxBR1N9
CisgICAgJHtFREpFX0xERkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAg
IExJU1QoQVBQRU5EIEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTICIke1dURl9ESVJ9
L3d0Zi9nb2JqZWN0IikKKworICAgIExJU1QoQVBQRU5EIEVXS1VuaXRUZXN0c19MSUJSQVJJRVMK
KyAgICAgICAgJHtHZGtfTElCUkFSSUVTfQorICAgICAgICAke0dsaWJfTElCUkFSSUVTfQorICAg
ICAgICAke0d0aHJlYWRfTElCUkFSSUVTfQorICAgICkKK0VORElGICgpCisKK1NFVChERUZBVUxU
X1RFU1RfUEFHRV9ESVIgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9yZXNvdXJjZXMpCisKK0FERF9ERUZJTklUSU9OUygtRERFRkFVTFRfVEVTVF9QQUdFX0RJUj1c
IiR7REVGQVVMVF9URVNUX1BBR0VfRElSfVwiKQorQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9U
SEVNRV9QQVRIPVwiJHtUSEVNRV9CSU5BUllfRElSfVwiKQorCitBRERfTElCUkFSWShld2tUZXN0
VXRpbHMKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RC
YXNlLmNwcAorICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVz
dFZpZXcuY3BwCispCisKK1NFVChXRUJLSVRfRUZMX1RFU1RfRElSICIke1dFQktJVF9ESVJ9L2Vm
bC90ZXN0cy8iKQorCitTRVQoRVdLVW5pdFRlc3RzX0JJTkFSSUVTCisgICAgdGVzdF9ld2tfdmll
dworKQorCitGT1JFQUNIKHRlc3ROYW1lICR7RVdLVW5pdFRlc3RzX0JJTkFSSUVTfSkKKyAgICBB
RERfRVhFQ1VUQUJMRShiaW4vJHt0ZXN0TmFtZX0gJHtXRUJLSVRfRUZMX1RFU1RfRElSfS8ke3Rl
c3ROYW1lfS5jcHAgJHtXRUJLSVRfRUZMX1RFU1RfRElSfS90ZXN0X3J1bm5lci5jcHApCisgICAg
VEFSR0VUX0xJTktfTElCUkFSSUVTKGJpbi8ke3Rlc3ROYW1lfSAke0VXS1VuaXRUZXN0c19MSUJS
QVJJRVN9IGV3a1Rlc3RVdGlscyBndGVzdCBwdGhyZWFkKQorICAgIEFERF9UQVJHRVRfUFJPUEVS
VElFUyhiaW4vJHt0ZXN0TmFtZX0gTElOS19GTEFHUyAiJHtFV0tVbml0VGVzdHNfTElOS19GTEFH
U30iKQorICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4vJHt0ZXN0TmFtZX0gUFJPUEVSVElF
UyBGT0xERVIgIldlYktpdCIpCisgICAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGJpbi8ke3Rlc3RO
YW1lfSBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllf
RElSfSIpCitFTkRGT1JFQUNIKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA2MzEyMGI5Li42Y2YwM2Rk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTItMDYtMTkgIEtyenlzenRv
ZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gSW1wbGVtZW50
YXRpb24gb2YgdGVzdGluZyBmcmFtZXdvcmsgYW5kIHVuaXQgdGVzdHMgZm9yIFdlYktpdC1FRkwg
cG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4
NTA5CisKKyAgICAgICAgUGF0Y2ggYnkgS3J6eXN6dG9mIEN6ZWNoIDxrLmN6ZWNoQHNhbXN1bmcu
Y29tPiwgVG9tYXN6IE1vcmF3c2tpIDx0Lm1vcmF3c2tpQHNhbXN1bmcuY29tPiBvbiAyMDEyLTAx
LTE2CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Rp
bmcgZnJhbWV3b3JrIGlzIGJhc2VkIG9uIGd0ZXN0IGxpYnJhcnkuIEd0ZXN0IGxpYnJhcnkgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuIEZyYW1ld29yayBpcyBkZXZpZGVkIHRvCisgICAg
ICAgIGJhc2UgcGFydCBhbmQgdmlldyBwYXJ0LiBCYXNlIHBhcnQgdGFrZXMgY2FyZSBvZiBlZmwg
aW5pdGlhbGl6YXRpb24sIGRlZmluZXMgdGVzdCBtYWNyb3MgYW5kIHByZXBhcmVzIHRlc3QgdG8g
cnVuLiBWaWV3IHBhcnQgaXMgYSBjb250ZXh0IAorICAgICAgICBvZiBlYWNoIHRlc3QuCisKKyAg
ICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmNwcDogQWRkZWQuCisgICAg
ICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6
aW5pdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjpzaHV0ZG93bik6Cisg
ICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjpzaHV0ZG93bkFsbCk6CisgICAgICAg
IChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjpzdGFydFRlc3QpOgorICAgICAgICAoRVdLVW5p
dFRlc3RzOjpFV0tUZXN0QmFzZTo6ZW5kVGVzdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVX
S1Rlc3RCYXNlOjpjcmVhdGVUZXN0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJh
c2U6OnJ1blRlc3QpOgorICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2Uu
aDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdLVGVzdEJhc2Up
OgorICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oOiBBZGRlZC4K
KyAgICAgICAgKENvbmZpZyk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0
Vmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoRVdLVW5pdFRlc3RzKToKKyAgICAgICAgKEVXS1Vu
aXRUZXN0czo6RVdLVGVzdEVjb3JlRXZhczo6RVdLVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChF
V0tVbml0VGVzdHM6OkVXS1Rlc3RFY29yZUV2YXM6On5FV0tUZXN0RWNvcmVFdmFzKToKKyAgICAg
ICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEVjb3JlRXZhczo6Z2V0RXZhcyk6CisgICAgICAgIChF
V0tVbml0VGVzdHM6OkVXS1Rlc3RFY29yZUV2YXM6OnNob3cpOgorICAgICAgICAoRVdLVW5pdFRl
c3RzOjpFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpF
V0tUZXN0Vmlldzo6fkVXS1Rlc3RWaWV3KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVz
dFZpZXc6OmluaXQpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6c2hvdyk6
CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpnZXRNYWluRnJhbWUpOgorICAg
ICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6Z2V0RXZhcyk6CisgICAgICAgIChFV0tV
bml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpiaW5kRXZlbnRzKToKKyAgICAgICAgKiB0ZXN0cy9Vbml0
VGVzdFV0aWxzL0VXS1Rlc3RWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoRVdLVW5pdFRlc3RzKToK
KyAgICAgICAgKEVXS1Rlc3RFY29yZUV2YXMpOgorICAgICAgICAoRVdLVGVzdFZpZXcpOgorICAg
ICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6Z2V0V2ViVmlldyk6CisgICAgICAgICog
dGVzdHMvcmVzb3VyY2VzL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHRlc3RzL3Rlc3RfZXdrX3ZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKGV3a1ZpZXdFZGl0YWJs
ZUdldENiKToKKyAgICAgICAgKFRFU1QpOgorICAgICAgICAoZXdrVmlld1VyaUdldENiKToKKyAg
ICAgICAgKiB0ZXN0cy90ZXN0X3J1bm5lci5jcHA6IEFkZGVkLgorICAgICAgICAocGFyc2VDdXN0
b21Bcmd1bWVudHMpOgorICAgICAgICAobWFpbik6CisKIDIwMTItMDYtMTkgIFNlcmdpbyBWaWxs
YXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ2FsbGluZyBuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpIGNhdXNlcyBhc3NlcnRpb24gZmFpbHVyZTogbV92ZXJpZmll
ci5pc1NhZmVUb1VzZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0
VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmYzMjllNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9V
bml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhl
IEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRVdLVGVzdEJhc2UuaCIKKworI2luY2x1
ZGUgIkVXS1Rlc3RDb25maWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0Vmlldy5oIgorI2luY2x1ZGUg
PEVXZWJLaXQuaD4KKworI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWRqZS5oPgorCitp
bnQgRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6dXNlWDExV2luZG93OworCituYW1lc3BhY2Ug
RVdLVW5pdFRlc3RzIHsKKworYm9vbCBFV0tUZXN0QmFzZTo6aW5pdCgpCit7CisgICAgaWYgKCFl
Y29yZV9ldmFzX2luaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFlZGpl
X2luaXQoKSkgeworICAgICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgcmV0ID0gZXdrX2luaXQoKTsKKyAgICBjb25zdCBj
aGFyKiBwcm94eVVyaSA9IGdldGVudigiaHR0cF9wcm94eSIpOworCisgICAgaWYgKHJldCAmJiBw
cm94eVVyaSkKKyAgICAgICAgZXdrX25ldHdvcmtfcHJveHlfdXJpX3NldChwcm94eVVyaSk7CisK
KyAgICByZXR1cm4gcmV0OworfQorCit2b2lkIEVXS1Rlc3RCYXNlOjpzaHV0ZG93bigpCit7Cisg
ICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgIGVkamVfc2h1dGRvd24oKTsKKyAgICBld2tf
c2h1dGRvd24oKTsKK30KKwordm9pZCBFV0tUZXN0QmFzZTo6c2h1dGRvd25BbGwoKQoreworICAg
IGludCBjb3VudCA9IDA7CisKKyAgICB3aGlsZSAoKGNvdW50ID0gZWNvcmVfZXZhc19zaHV0ZG93
bigpKSA+IDApIHsgfQorICAgIHdoaWxlICgoY291bnQgPSBlZGplX3NodXRkb3duKCkpID4gMCkg
eyB9CisgICAgd2hpbGUgKChjb3VudCA9IGV3a19zaHV0ZG93bigpKSA+IDApIHsgfQorfQorCit2
b2lkIEVXS1Rlc3RCYXNlOjpzdGFydFRlc3QoKQoreworICAgIGVjb3JlX21haW5fbG9vcF9iZWdp
bigpOworfQorCit2b2lkIEVXS1Rlc3RCYXNlOjplbmRUZXN0KCkKK3sKKyAgICBlY29yZV9tYWlu
X2xvb3BfcXVpdCgpOworfQorCitib29sIEVXS1Rlc3RCYXNlOjpjcmVhdGVUZXN0KGNvbnN0IGNo
YXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lk
KiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAgRUZM
X0lOSVRfUkVUKCk7CisKKyAgICBFV0tUZXN0RWNvcmVFdmFzIGV2YXModXNlWDExV2luZG93KTsK
KyAgICBpZiAoIWV2YXMuZ2V0RXZhcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZXZh
cy5zaG93KCk7CisKKyAgICBFV0tUZXN0VmlldyB2aWV3KGV2YXMuZ2V0RXZhcygpLCB1cmwpOwor
ICAgIGlmICghdmlldy5pbml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHZpZXcu
YmluZEV2ZW50cyhldmVudF9jYWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7CisgICAg
dmlldy5zaG93KCk7CisKKyAgICBTVEFSVF9URVNUKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBFV0tUZXN0QmFzZTo6cnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQq
LCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZl
bnRfZGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGVzdChDb25maWc6OmRlZmF1bHRUZXN0UGFn
ZSwgZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworfQorCitib29sIEVX
S1Rlc3RCYXNlOjpydW5UZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxiYWNr
KSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZv
aWQqIGV2ZW50X2RhdGEpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRlc3QodXJsLCBldmVudF9jYWxs
YmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGQzNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFV0tUZXN0QmFzZV9oCisjZGVmaW5lIEVXS1Rlc3RC
YXNlX2gKKworI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisj
ZGVmaW5lIFJVTl9URVNUKGFyZ3MuLi4pICAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBBU1NF
UlRfRVEodHJ1ZSwgRVdLVGVzdEJhc2U6OnJ1blRlc3QoYXJncykpOyAgICBcCisgICAgfSB3aGls
ZSAoMCkKKworI2RlZmluZSBTVEFSVF9URVNUKCkgICAgXAorICAgIGRvIHsgICAgXAorICAgICAg
ICBFV0tUZXN0QmFzZTo6c3RhcnRUZXN0KCk7ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZp
bmUgRU5EX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RCYXNlOjpl
bmRUZXN0KCk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVGTF9JTklUX1JFVCgpICBc
CisgICAgZG8geyAgICBcCisgICAgICAgIGlmICghRVdLVGVzdEJhc2U6OmluaXQoKSkgICBcCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5l
IEVGTF9JTklUKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OmluaXQo
KTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitj
bGFzcyBFV0tUZXN0QmFzZSB7CisgICAgc3RhdGljIGJvb2wgY3JlYXRlVGVzdChjb25zdCBjaGFy
KiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCop
LCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBpbml0KCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRvd24oKTsKKyAgICBz
dGF0aWMgdm9pZCBzaHV0ZG93bkFsbCgpOworICAgIHN0YXRpYyB2b2lkIHN0YXJ0VGVzdCgpOwor
ICAgIHN0YXRpYyB2b2lkIGVuZFRlc3QoKTsKKworICAgIHN0YXRpYyBib29sIHJ1blRlc3QoY29u
c3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CisgICAg
c3RhdGljIGJvb2wgcnVuVGVzdCh2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7
CisKKyAgICBzdGF0aWMgaW50IHVzZVgxMVdpbmRvdzsKK307CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RDb25m
aWcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZp
Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiM2ViMDUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RD
b25maWcuaApAQCAtMCwwICsxLDMxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz
MzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5kZWYgRVdLVGVzdENvbmZp
Z19oCisjZGVmaW5lIEVXS1Rlc3RDb25maWdfaAorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsK
K25hbWVzcGFjZSBDb25maWcgeworc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Vmlld1dpZHRoID0g
NjAwOworc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Vmlld0hlaWdodCA9IDgwMDsKK3N0YXRpYyBj
b25zdCBjaGFyKiBkZWZhdWx0VGhlbWVQYXRoID0gREVGQVVMVF9USEVNRV9QQVRIIi9kZWZhdWx0
LmVkaiI7CitzdGF0aWMgY29uc3QgY2hhciogZGVmYXVsdFRlc3RQYWdlID0gImZpbGU6Ly8iREVG
QVVMVF9URVNUX1BBR0VfRElSIi9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sIjsKK30KK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VX
S1Rlc3RWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdL
VGVzdFZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5OTRlZjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXS1Rlc3RWaWV3LmNwcApAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMp
IDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg
ICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRVdLVGVzdFZpZXcuaCIKKworI2luY2x1ZGUgIkVXS1Rlc3RD
b25maWcuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworRVdLVGVzdEVjb3JlRXZhczo6RVdL
VGVzdEVjb3JlRXZhcygpCit7CisgICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFz
X25ldygwLCAwLCAwLCBDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgsIENvbmZpZzo6ZGVmYXVsdFZp
ZXdIZWlnaHQsIDApKTsKK30KKworRVdLVGVzdEVjb3JlRXZhczo6RVdLVGVzdEVjb3JlRXZhcyhp
bnQgdXNlWDExV2luZG93KQoreworICAgIGlmICh1c2VYMTFXaW5kb3cpCisgICAgICAgIG1fZWNv
cmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgQ29uZmlnOjpkZWZhdWx0
Vmlld1dpZHRoLCBDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0LCAwKSk7CisgICAgZWxzZQorICAg
ICAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfYnVmZmVyX25ldyhDb25maWc6
OmRlZmF1bHRWaWV3V2lkdGgsIENvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpKTsKK30KKworRVdL
VGVzdEVjb3JlRXZhczo6RVdLVGVzdEVjb3JlRXZhcyhjb25zdCBjaGFyKiBlbmdpbmVfbmFtZSwg
aW50IHZpZXdwb3J0X3gsIGludCB2aWV3cG9ydF95LCBpbnQgdmlld3BvcnRfdywgaW50IHZpZXdw
b3J0X2gsIGNvbnN0IGNoYXIqIGV4dHJhX29wdGlvbnMsIGludCB1c2VYMTFXaW5kb3cpCit7Cisg
ICAgaWYgKHVzZVgxMVdpbmRvdykKKyAgICAgICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29y
ZV9ldmFzX25ldyhlbmdpbmVfbmFtZSwgdmlld3BvcnRfeCwgdmlld3BvcnRfeSwgdmlld3BvcnRf
dywgdmlld3BvcnRfaCwgZXh0cmFfb3B0aW9ucykpOworICAgIGVsc2UKKyAgICAgICAgbV9lY29y
ZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX2J1ZmZlcl9uZXcodmlld3BvcnRfeCwgdmlld3Bv
cnRfeSkpOworfQorCitFV0tUZXN0RWNvcmVFdmFzOjp+RVdLVGVzdEVjb3JlRXZhcygpCit7IAor
fQorCitFdmFzKiBFV0tUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKCkKK3sKKyAgICBpZiAobV9lY29y
ZUV2YXMuZ2V0KCkpCisgICAgICAgIHJldHVybiBlY29yZV9ldmFzX2dldChtX2Vjb3JlRXZhcy5n
ZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRVdLVGVzdEVjb3JlRXZhczo6c2hvdygp
Cit7CisgICAgaWYgKG1fZWNvcmVFdmFzLmdldCgpKQorICAgICAgICBlY29yZV9ldmFzX3Nob3co
bV9lY29yZUV2YXMuZ2V0KCkpOworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZhcyog
ZXZhcykKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwoQ29uZmlnOjpkZWZhdWx0VGVz
dFBhZ2UpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZShUaWxlZFZpZXcpCisgICAgLCBtX3dpZHRo
KENvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KENvbmZpZzo6ZGVmYXVs
dFZpZXdIZWlnaHQpCit7Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tUZXN0VmlldyhFdmFzKiBldmFz
LCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkK
KyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAsIG1fd2lkdGgoQ29uZmln
OjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQoQ29uZmlnOjpkZWZhdWx0Vmlld0hl
aWdodCkKK3sKK30KKworRVdLVGVzdFZpZXc6OkVXS1Rlc3RWaWV3KEV2YXMqIGV2YXMsIEV3a1Zp
ZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwg
bV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgo
Q29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQoQ29uZmlnOjpkZWZhdWx0
Vmlld0hlaWdodCkKK3sKK30KKworRVdLVGVzdFZpZXc6OkVXS1Rlc3RWaWV3KEV2YXMqIGV2YXMs
IEV3a1ZpZXdUeXBlIHR5cGUsIGNvbnN0IGNoYXIqIHVybCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2RlZmF1bHRW
aWV3VHlwZSh0eXBlKQorICAgICwgbV93aWR0aCh3aWR0aCkKKyAgICAsIG1faGVpZ2h0KGhlaWdo
dCkKK3sKK30KKworRVdLVGVzdFZpZXc6On5FV0tUZXN0VmlldygpCit7Cit9CisKK2Jvb2wgRVdL
VGVzdFZpZXc6OmluaXQoKQoreworICAgIGlmICghbV9ldmFzIHx8IG1fdXJsLmVtcHR5KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9kZWZhdWx0Vmlld1R5cGUpIHsK
KyAgICBjYXNlIFNpbmdsZVZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0UHRyKGV3a192
aWV3X3NpbmdsZV9hZGQobV9ldmFzKSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUaWxl
ZFZpZXc6CisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0UHRyKGV3a192aWV3X3RpbGVkX2FkZCht
X2V2YXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGV3a192aWV3X3RoZW1lX3NldChtX3dl
YlZpZXcuZ2V0KCksIENvbmZpZzo6ZGVmYXVsdFRoZW1lUGF0aCk7CisgICAgZXdrX3ZpZXdfdXJp
X3NldChtX3dlYlZpZXcuZ2V0KCksIG1fdXJsLmNfc3RyKCkpOworfQorCit2b2lkIEVXS1Rlc3RW
aWV3OjpzaG93KCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3dlYlZpZXcuZ2V0KCksIG1fd2lkdGgsIG1faGVp
Z2h0KTsKKyAgICBldmFzX29iamVjdF9zaG93KG1fd2ViVmlldy5nZXQoKSk7CisgICAgZXZhc19v
YmplY3RfZm9jdXNfc2V0KG1fd2ViVmlldy5nZXQoKSwgRUlOQV9UUlVFKTsKK30KKworRXZhc19P
YmplY3QqIEVXS1Rlc3RWaWV3OjpnZXRNYWluRnJhbWUoKQoreworICAgIGlmIChtX3dlYlZpZXcu
Z2V0KCkpCisgICAgICAgIHJldHVybiBld2tfdmlld19mcmFtZV9tYWluX2dldChtX3dlYlZpZXcu
Z2V0KCkpOworICAgIHJldHVybiAwOworfQorCitFdmFzKiBFV0tUZXN0Vmlldzo6Z2V0RXZhcygp
Cit7CisgICAgaWYgKG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KG1fd2ViVmlldy5nZXQoKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRVdL
VGVzdFZpZXc6OmJpbmRFdmVudHModm9pZCAoKmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3Qq
LCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwgdm9pZCogcHRyKQoreworICAgIGlmICgh
bV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19kZWwobV93ZWJWaWV3LmdldCgpLCBldmVudE5hbWUsIGNhbGxiYWNrKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQobV93ZWJWaWV3LmdldCgpLCBldmVudE5h
bWUsIGNhbGxiYWNrLCBwdHIpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uODc2YzVjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuaApAQCAtMCwwICsxLDc5IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNl
ZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EK
KyovCisKKyNpZm5kZWYgRVdLVGVzdFZpZXdfaAorI2RlZmluZSBFV0tUZXN0Vmlld19oCisKKyNp
bmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHN0cmlu
Zz4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgewor
CitjbGFzcyBFV0tUZXN0RWNvcmVFdmFzIHsKK3B1YmxpYzoKKyAgICBFV0tUZXN0RWNvcmVFdmFz
KCk7CisgICAgRVdLVGVzdEVjb3JlRXZhcyhpbnQgdXNlWDExV2luZG93KTsKKyAgICBFV0tUZXN0
RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwgaW50IHZp
ZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29uc3QgY2hhciogZXh0
cmFfb3B0aW9ucywgaW50IHVzZVgxMVdpbmRvdyk7CisgICAgfkVXS1Rlc3RFY29yZUV2YXMoKTsK
KworICAgIEV2YXMqIGdldEV2YXMoKTsKKyAgICB2b2lkIHNob3coKTsKKworcHJpdmF0ZToKKyAg
ICBPd25QdHI8RWNvcmVfRXZhcz4gbV9lY29yZUV2YXM7Cit9OworCitjbGFzcyBFV0tUZXN0Vmll
dyB7CitwdWJsaWM6CisgICAgZW51bSBFd2tWaWV3VHlwZSB7CisgICAgICAgIFNpbmdsZVZpZXcg
PSAwLAorICAgICAgICBUaWxlZFZpZXcsCisgICAgfTsKKworICAgIGV4cGxpY2l0IEVXS1Rlc3RW
aWV3KEV2YXMqKTsKKyAgICBFV0tUZXN0VmlldyhFdmFzKiwgY29uc3QgY2hhciogdXJsKTsKKyAg
ICBFV0tUZXN0VmlldyhFdmFzKiwgRXdrVmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCk7CisgICAg
RVdLVGVzdFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0
aCwgaW50IGhlaWdodCk7CisKKyAgICB2aXJ0dWFsIH5FV0tUZXN0VmlldygpOworCisgICAgRXZh
c19PYmplY3QqIGdldFdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBF
dmFzX09iamVjdCogZ2V0TWFpbkZyYW1lKCk7CisgICAgRXZhcyogZ2V0RXZhcygpOworICAgIHZv
aWQgc2hvdygpOworCisgICAgYm9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRzKHZvaWQg
KCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIHZvaWQqIHB0cik7CisKK3ByaXZhdGU6CisgICAgRVdLVGVzdFZpZXcoY29uc3QgRVdL
VGVzdFZpZXcmKTsKKyAgICBFV0tUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRVdLVGVzdFZpZXcm
KTsKKworICAgIEV2YXMqIG1fZXZhczsKKyAgICBPd25QdHI8RXZhc19PYmplY3Q+IG1fd2ViVmll
dzsKKworICAgIGludCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBtX2RlZmF1
bHRWaWV3VHlwZTsKKyAgICBzdGQ6OnN0cmluZyBtX3VybDsKK307CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0
X3BhZ2UuaHRtbCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rl
c3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgxZTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVm
YXVsdF90ZXN0X3BhZ2UuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxIVE1MPgorPEJPRFk+Cis8SDIg
YWxpZ249ImNlbnRlciI+RUZMIFVuaXQgVGVzdHM8L0gyPgorPEgyIGFsaWduPSJjZW50ZXIiPkRl
ZmF1bHQgVGVzdGluZyBXZWIgUGFnZTwvSDI+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy90ZXN0X2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL3Rlc3RzL3Rlc3RfZXdrX3ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjI0YTFjODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy90ZXN0X2V3a192aWV3LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisg
ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIK
KyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEVXS1VuaXRUZXN0czsKKworLyoqCisqIEBicmllZiBDaGVja2luZyB3aGV0aGVy
IGZ1bmN0aW9uIHByb3Blcmx5IHJldHVybnMgY29ycmVjdCB2YWx1ZS4KKyovCit2b2lkIGV3a1Zp
ZXdFZGl0YWJsZUdldENiKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZvaWQqIGRh
dGEpCit7CisgICAgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KG8sIEVJTkFfRkFMU0UpOworICAgIEVY
UEVDVF9FUShFSU5BX0ZBTFNFLCBld2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9U
RVNUKCk7Cit9CisKK1RFU1QodGVzdF9ld2tfdmlldywgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KQor
eworICAgIFJVTl9URVNUKGV3a1ZpZXdFZGl0YWJsZUdldENiLCAibG9hZCxmaW5pc2hlZCIsIDAp
OworfQorCisvKioKKyogQGJyaWVmIENoZWNraW5nIHdoZXRoZXIgZnVuY3Rpb24gcmV0dXJucyBj
b3JyZWN0IHVyaSBzdHJpbmcuCisqLwordm9pZCBld2tWaWV3VXJpR2V0Q2Iodm9pZCogZXZlbnRJ
bmZvLCBFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoImh0
dHA6Ly93d3cud2Via2l0Lm9yZy8iLCBld2tfdmlld191cmlfZ2V0KG8pKTsKKyAgICBFTkRfVEVT
VCgpOworfQorCitURVNUKHRlc3RfZXdrX3ZpZXcsIGV3a192aWV3X3VyaV9nZXQpCit7CisgICAg
UlVOX1RFU1QoImh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIGV3a1ZpZXdVcmlHZXRDYiwgImxvYWQs
ZmluaXNoZWQiLCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rl
c3RfcnVubmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfcnVubmVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJhNjFmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ydW5uZXIuY3BwCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIK
KyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCitzdGF0aWMg
dm9pZCBwYXJzZUN1c3RvbUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
c3RhdGljIGNvbnN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgIHsidXNlWDExV2luZG93
Iiwgbm9fYXJndW1lbnQsICZFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjp1c2VYMTFXaW5kb3cs
IHRydWV9LAorICAgICAgICB7MCwgMCwgMCwgMH0KKyAgICB9OworCisgICAgaW50IG9wdGlvbjsK
KyAgICB3aGlsZSAoKG9wdGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIiLCBvcHRpb25z
LCAwKSkgIT0gLTEpIHsgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgYXRleGl0KEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKTsKKyAg
ICBwYXJzZUN1c3RvbUFyZ3VtZW50cyhhcmdjLCBhcmd2KTsKKyAgICA6OnRlc3Rpbmc6OkluaXRH
b29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQo=
</data>
<flag name="commit-queue"
          id="156296"
          type_id="3"
          status="-"
          setter="g.czajkowski"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148752</attachid>
            <date>2012-06-21 02:23:07 -0700</date>
            <delta_ts>2012-06-21 02:50:44 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>23531</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZWM4Mzg4NS4uYTBkZTllYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0xOSAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA2LTEzICBSb2JpbiBDYW8gIDxyb2Jpbi5jYW9AdG9yY2htb2JpbGUuY29tLmNuPgog
CiAgICAgICAgIFtCbGFja0JlcnJ5XSBFbmFibGUgTUVESUFfU1RSRUFNIGJ5IGRlZmF1bHQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0
L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDJkZWY4NjkuLjlkYzY0MmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bUVmbC5jbWFrZQpAQCAtMjg2LDMgKzI4Niw4MyBAQCBJTlNUQUxMKEZJTEVTICR7RVdlYktpdF9I
RUFERVJTfQogCiBJTlNUQUxMKEZJTEVTICR7V2ViS2l0X1RIRU1FfQogICAgICAgICBERVNUSU5B
VElPTiAke0RBVEFfSU5TVEFMTF9ESVJ9L3RoZW1lcykKKworSU5DTFVERV9ESVJFQ1RPUklFUygk
e1RISVJEUEFSVFlfRElSfS9ndGVzdAorICAgICAgICAgICAgICAgICAgICAke1RISVJEUEFSVFlf
RElSfS9ndGVzdC9pbmNsdWRlCispCisKK1NFVChHVEVTVF9TT1VSQ0VTICIke1RISVJEUEFSVFlf
RElSfS9ndGVzdC9zcmMiKQorCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNF
U30vZ3Rlc3QuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAg
ICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0
ZXN0LWZpbGVwYXRoLmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAg
JHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9
L2d0ZXN0LXR5cGVkLXRlc3QuY2MKKykKKworU0VUKEVXS1VuaXRUZXN0c19MSUJSQVJJRVMKKyAg
ICAke0phdmFTY3JpcHRDb3JlX0xJQlJBUllfTkFNRX0KKyAgICAke1dlYkNvcmVfTElCUkFSWV9O
QU1FfQorICAgICR7V2ViS2l0X0xJQlJBUllfTkFNRX0KKyAgICAke0VDT1JFX0xJQlJBUklFU30K
KyAgICAke0VDT1JFX0VWQVNfTElCUkFSSUVTfQorICAgICR7RVZBU19MSUJSQVJJRVN9CisgICAg
JHtFREpFX0xJQlJBUklFU30KKykKKworU0VUKEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9S
SUVTCisgICAgIiR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlIgorICAgICIke1dFQktJVF9ESVJ9
L2VmbC9ld2siCisgICAgIiR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdFV0aWxz
IgorICAgICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0iCisgICAgIiR7V1RGX0RJUn0iCisgICAgIiR7
V1RGX0RJUn0vd3RmIgorICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQorICAgICR7RUNPUkVfRVZB
U19JTkNMVURFX0RJUlN9CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKyAgICAke0VESkVfSU5D
TFVERV9ESVJTfQorKQorCitTRVQoRVdLVW5pdFRlc3RzX0xJTktfRkxBR1MKKyAgICAke0VDT1JF
X0xERkxBR1N9CisgICAgJHtFQ09SRV9FVkFTX0xERkxBR1N9CisgICAgJHtFVkFTX0xERkxBR1N9
CisgICAgJHtFREpFX0xERkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAg
IExJU1QoQVBQRU5EIEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTICIke1dURl9ESVJ9
L3d0Zi9nb2JqZWN0IikKKworICAgIExJU1QoQVBQRU5EIEVXS1VuaXRUZXN0c19MSUJSQVJJRVMK
KyAgICAgICAgJHtHZGtfTElCUkFSSUVTfQorICAgICAgICAke0dsaWJfTElCUkFSSUVTfQorICAg
ICAgICAke0d0aHJlYWRfTElCUkFSSUVTfQorICAgICkKK0VORElGICgpCisKK1NFVChERUZBVUxU
X1RFU1RfUEFHRV9ESVIgJHtDTUFLRV9TT1VSQ0VfRElSfS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9yZXNvdXJjZXMpCisKK0FERF9ERUZJTklUSU9OUygtRERFRkFVTFRfVEVTVF9QQUdFX0RJUj1c
IiR7REVGQVVMVF9URVNUX1BBR0VfRElSfVwiKQorQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9U
SEVNRV9QQVRIPVwiJHtUSEVNRV9CSU5BUllfRElSfVwiKQorCitBRERfTElCUkFSWShld2tUZXN0
VXRpbHMKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RC
YXNlLmNwcAorICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVz
dFZpZXcuY3BwCispCisKK1NFVChXRUJLSVRfRUZMX1RFU1RfRElSICIke1dFQktJVF9ESVJ9L2Vm
bC90ZXN0cy8iKQorCitTRVQoRVdLVW5pdFRlc3RzX0JJTkFSSUVTCisgICAgdGVzdF9ld2tfdmll
dworKQorCitGT1JFQUNIKHRlc3ROYW1lICR7RVdLVW5pdFRlc3RzX0JJTkFSSUVTfSkKKyAgICBB
RERfRVhFQ1VUQUJMRShiaW4vJHt0ZXN0TmFtZX0gJHtXRUJLSVRfRUZMX1RFU1RfRElSfS8ke3Rl
c3ROYW1lfS5jcHAgJHtXRUJLSVRfRUZMX1RFU1RfRElSfS90ZXN0X3J1bm5lci5jcHApCisgICAg
VEFSR0VUX0xJTktfTElCUkFSSUVTKGJpbi8ke3Rlc3ROYW1lfSAke0VXS1VuaXRUZXN0c19MSUJS
QVJJRVN9IGV3a1Rlc3RVdGlscyBndGVzdCBwdGhyZWFkKQorICAgIEFERF9UQVJHRVRfUFJPUEVS
VElFUyhiaW4vJHt0ZXN0TmFtZX0gTElOS19GTEFHUyAiJHtFV0tVbml0VGVzdHNfTElOS19GTEFH
U30iKQorICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4vJHt0ZXN0TmFtZX0gUFJPUEVSVElF
UyBGT0xERVIgIldlYktpdCIpCisgICAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKGJpbi8ke3Rlc3RO
YW1lfSBQUk9QRVJUSUVTIFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWSAiJHtDTUFLRV9CSU5BUllf
RElSfSIpCitFTkRGT1JFQUNIKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA2MzEyMGI5Li5iY2I0NjU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTItMDYtMTkgIEtyenlzenRv
ZiBDemVjaCAgPGsuY3plY2hAc2Ftc3VuZy5jb20+LCBUb21hc3ogTW9yYXdza2kgPHQubW9yYXdz
a2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gSW1wbGVtZW50YXRpb24gb2YgdGVzdGlu
ZyBmcmFtZXdvcmsgYW5kIHVuaXQgdGVzdHMgZm9yIFdlYktpdC1FRkwgcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4NTA5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGluZyBmcmFtZXdvcmsg
aXMgYmFzZWQgb24gZ3Rlc3QgbGlicmFyeS4gR3Rlc3QgbGlicmFyeSBpcyBwYXJ0IG9mIHRoZSBX
ZWJLaXQgcHJvamVjdC4gRnJhbWV3b3JrIGlzIGRldmlkZWQgdG8KKyAgICAgICAgYmFzZSBwYXJ0
IGFuZCB2aWV3IHBhcnQuIEJhc2UgcGFydCB0YWtlcyBjYXJlIG9mIGVmbCBpbml0aWFsaXphdGlv
biwgZGVmaW5lcyB0ZXN0IG1hY3JvcyBhbmQgcHJlcGFyZXMgdGVzdCB0byBydW4uIFZpZXcgcGFy
dCBpcyBhIGNvbnRleHQgCisgICAgICAgIG9mIGVhY2ggdGVzdC4KKworICAgICAgICAqIHRlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVXS1VuaXRU
ZXN0cyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjppbml0KToKKyAgICAg
ICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duKToKKyAgICAgICAgKEVXS1Vu
aXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKToKKyAgICAgICAgKEVXS1VuaXRUZXN0
czo6RVdLVGVzdEJhc2U6OnN0YXJ0VGVzdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rl
c3RCYXNlOjplbmRUZXN0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OmNy
ZWF0ZVRlc3QpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6cnVuVGVzdCk6
CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tUZXN0QmFzZSk6CisgICAgICAgICog
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmg6IEFkZGVkLgorICAgICAgICAoQ29u
ZmlnKToKKyAgICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmNwcDogQWRk
ZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tU
ZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6
RVdLVGVzdEVjb3JlRXZhczo6fkVXS1Rlc3RFY29yZUV2YXMpOgorICAgICAgICAoRVdLVW5pdFRl
c3RzOjpFV0tUZXN0RWNvcmVFdmFzOjpnZXRFdmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6
RVdLVGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RW
aWV3OjpFV0tUZXN0Vmlldyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3Ojp+
RVdLVGVzdFZpZXcpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6aW5pdCk6
CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpzaG93KToKKyAgICAgICAgKEVX
S1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OmdldE1haW5GcmFtZSk6CisgICAgICAgIChFV0tVbml0
VGVzdHM6OkVXS1Rlc3RWaWV3OjpnZXRFdmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdL
VGVzdFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdL
VGVzdFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdL
VGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChFV0tUZXN0Vmlldyk6CisgICAgICAgIChFV0tVbml0
VGVzdHM6OkVXS1Rlc3RWaWV3OjpnZXRXZWJWaWV3KToKKyAgICAgICAgKiB0ZXN0cy9yZXNvdXJj
ZXMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvdGVzdF9l
d2tfdmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrVmlld0VkaXRhYmxlR2V0Q2IpOgorICAg
ICAgICAoVEVTVCk6CisgICAgICAgIChld2tWaWV3VXJpR2V0Q2IpOgorICAgICAgICAqIHRlc3Rz
L3Rlc3RfcnVubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChwYXJzZUN1c3RvbUFyZ3VtZW50cyk6
CisgICAgICAgIChtYWluKToKKwogMjAxMi0wNi0xOSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2
aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBDYWxsaW5nIG5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCkgY2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlOiBtX3ZlcmlmaWVyLmlzU2FmZVRvVXNl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdL
VGVzdEJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tU
ZXN0QmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4MzAwYQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMv
RVdLVGVzdEJhc2UuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNl
LCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0QmFzZS5oIgorCisjaW5jbHVkZSAiRVdLVGVzdENv
bmZpZy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RWaWV3LmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgor
CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisKK2ludCBFV0tVbml0VGVz
dHM6OkVXS1Rlc3RCYXNlOjp1c2VYMTFXaW5kb3c7CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMg
eworCitib29sIEVXS1Rlc3RCYXNlOjppbml0KCkKK3sKKyAgICBpZiAoIWVjb3JlX2V2YXNfaW5p
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkamVfaW5pdCgpKSB7Cisg
ICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIGludCByZXQgPSBld2tfaW5pdCgpOworICAgIGNvbnN0IGNoYXIqIHByb3h5VXJp
ID0gZ2V0ZW52KCJodHRwX3Byb3h5Iik7CisKKyAgICBpZiAocmV0ICYmIHByb3h5VXJpKQorICAg
ICAgICBld2tfbmV0d29ya19wcm94eV91cmlfc2V0KHByb3h5VXJpKTsKKworICAgIHJldHVybiBy
ZXQ7Cit9CisKK3ZvaWQgRVdLVGVzdEJhc2U6OnNodXRkb3duKCkKK3sKKyAgICBlY29yZV9ldmFz
X3NodXRkb3duKCk7CisgICAgZWRqZV9zaHV0ZG93bigpOworICAgIGV3a19zaHV0ZG93bigpOwor
fQorCit2b2lkIEVXS1Rlc3RCYXNlOjpzaHV0ZG93bkFsbCgpCit7CisgICAgaW50IGNvdW50ID0g
MDsKKworICAgIHdoaWxlICgoY291bnQgPSBlY29yZV9ldmFzX3NodXRkb3duKCkpID4gMCkgeyB9
CisgICAgd2hpbGUgKChjb3VudCA9IGVkamVfc2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGls
ZSAoKGNvdW50ID0gZXdrX3NodXRkb3duKCkpID4gMCkgeyB9Cit9CisKK3ZvaWQgRVdLVGVzdEJh
c2U6OnN0YXJ0VGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Cit9CisKK3Zv
aWQgRVdLVGVzdEJhc2U6OmVuZFRlc3QoKQoreworICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7
Cit9CisKK2Jvb2wgRVdLVGVzdEJhc2U6OmNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lk
ICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hh
ciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICBFRkxfSU5JVF9SRVQoKTsK
KworICAgIEVXS1Rlc3RFY29yZUV2YXMgZXZhcyh1c2VYMTFXaW5kb3cpOworICAgIGlmICghZXZh
cy5ldmFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBldmFzLnNob3coKTsKKworICAg
IEVXS1Rlc3RWaWV3IHZpZXcoZXZhcy5ldmFzKCksIHVybCk7CisgICAgaWYgKCF2aWV3LmluaXQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmlldy5iaW5kRXZlbnRzKGV2ZW50X2Nh
bGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKKyAgICB2aWV3LnNob3coKTsKKworICAg
IFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVXS1Rlc3RCYXNl
OjpydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIHJl
dHVybiBjcmVhdGVUZXN0KENvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlLCBldmVudF9jYWxsYmFjaywg
ZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7Cit9CisKK2Jvb2wgRVdLVGVzdEJhc2U6OnJ1blRlc3Qo
Y29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVj
dCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sK
KyAgICByZXR1cm4gY3JlYXRlVGVzdCh1cmwsIGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBl
dmVudF9kYXRhKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMv
VW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5p
dFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmMwZDM3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9V
bml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdO
VQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisj
aWZuZGVmIEVXS1Rlc3RCYXNlX2gKKyNkZWZpbmUgRVdLVGVzdEJhc2VfaAorCisjaW5jbHVkZSA8
RXZhcy5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNkZWZpbmUgUlVOX1RFU1QoYXJn
cy4uLikgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEFTU0VSVF9FUSh0cnVlLCBFV0tUZXN0
QmFzZTo6cnVuVGVzdChhcmdzKSk7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNU
QVJUX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RCYXNlOjpzdGFy
dFRlc3QoKTsgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFTkRfVEVTVCgpICAgIFwK
KyAgICBkbyB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OmVuZFRlc3QoKTsgXAorICAgIH0g
d2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX0lOSVRfUkVUKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAg
ICAgICAgaWYgKCFFV0tUZXN0QmFzZTo6aW5pdCgpKSAgIFwKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX0lOSVQoKSAgXAorICAg
IGRvIHsgICAgXAorICAgICAgICBFV0tUZXN0QmFzZTo6aW5pdCgpOyAgICBcCisgICAgfSB3aGls
ZSAoMCkKKworbmFtZXNwYWNlIEVXS1VuaXRUZXN0cyB7CisKK2NsYXNzIEVXS1Rlc3RCYXNlIHsK
KyAgICBzdGF0aWMgYm9vbCBjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50
X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50
X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworcHVibGljOgorICAgIHN0YXRpYyBib29sIGluaXQo
KTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3du
QWxsKCk7CisgICAgc3RhdGljIHZvaWQgc3RhcnRUZXN0KCk7CisgICAgc3RhdGljIHZvaWQgZW5k
VGVzdCgpOworCisgICAgc3RhdGljIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQg
KCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFy
KiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBydW5UZXN0
KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25z
dCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKworICAgIHN0YXRpYyBpbnQg
dXNlWDExV2luZG93OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktp
dC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjZjZlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oCkBAIC0wLDAgKzEs
MzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFV0tUZXN0Q29uZmlnX2gKKyNkZWZpbmUgRVdLVGVz
dENvbmZpZ19oCisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworbmFtZXNwYWNlIENvbmZpZyB7
CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3V2lkdGggPSA2MDA7CitzdGF0aWMgY29uc3Qg
aW50IGRlZmF1bHRWaWV3SGVpZ2h0ID0gODAwOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRl
ZmF1bHRUaGVtZVBhdGggPSBERUZBVUxUX1RIRU1FX1BBVEgiL2RlZmF1bHQuZWRqIjsKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBkZWZhdWx0VGVzdFBhZ2UgPSAiZmlsZTovLyJERUZBVUxUX1RF
U1RfUEFHRV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwiOworfQorfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmll
dy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyOWI4MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVz
dFZpZXcuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0
ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJFV0tUZXN0Vmlldy5oIgorCisjaW5jbHVkZSAiRVdLVGVzdENvbmZpZy5o
IgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitFV0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNv
cmVFdmFzKGludCB1c2VYMTFXaW5kb3cpCit7CisgICAgaWYgKHVzZVgxMVdpbmRvdykKKyAgICAg
ICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX25ldygwLCAwLCAwLCBDb25maWc6
OmRlZmF1bHRWaWV3V2lkdGgsIENvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQsIDApKTsKKyAgICBl
bHNlCisgICAgICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19idWZmZXJfbmV3
KENvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCwgQ29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkpOwor
fQorCitFV0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2lu
ZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBp
bnQgdmlld3BvcnRfaCwgY29uc3QgY2hhciogZXh0cmFfb3B0aW9ucywgaW50IHVzZVgxMVdpbmRv
dykKK3sKKyAgICBpZiAodXNlWDExV2luZG93KQorICAgICAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0
UHRyKGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2aWV3cG9ydF94LCB2aWV3cG9ydF95LCB2
aWV3cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRpb25zKSk7CisgICAgZWxzZQorICAgICAg
ICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfYnVmZmVyX25ldyh2aWV3cG9ydF94
LCB2aWV3cG9ydF95KSk7Cit9CisKK0V2YXMqIEVXS1Rlc3RFY29yZUV2YXM6OmV2YXMoKQorewor
ICAgIGlmIChtX2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGVjb3JlX2V2YXNfZ2V0
KG1fZWNvcmVFdmFzLmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBFV0tUZXN0RWNv
cmVFdmFzOjpzaG93KCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0KCkpCisgICAgICAgIGVj
b3JlX2V2YXNfc2hvdyhtX2Vjb3JlRXZhcy5nZXQoKSk7Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tU
ZXN0VmlldyhFdmFzKiBldmFzKQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybChDb25m
aWc6OmRlZmF1bHRUZXN0UGFnZSkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykK
KyAgICAsIG1fd2lkdGgoQ29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQo
Q29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sKK30KKworRVdLVGVzdFZpZXc6OkVXS1Rlc3RW
aWV3KEV2YXMqIGV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAg
ICwgbV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3KQorICAgICwg
bV93aWR0aChDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChDb25maWc6
OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZh
cyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsKQorICAgIDogbV9ldmFz
KGV2YXMpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQor
ICAgICwgbV93aWR0aChDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChD
b25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVzdFZp
ZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAg
ICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICwg
bV9oZWlnaHQoaGVpZ2h0KQoreworfQorCitib29sIEVXS1Rlc3RWaWV3Ojppbml0KCkKK3sKKyAg
ICBpZiAoIW1fZXZhcyB8fCBtX3VybC5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKG1fZGVmYXVsdFZpZXdUeXBlKSB7CisgICAgY2FzZSBTaW5nbGVWaWV3Ogor
ICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdFB0cihld2tfdmlld19zaW5nbGVfYWRkKG1fZXZhcykp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVGlsZWRWaWV3OgorICAgICAgICBtX3dlYlZp
ZXcgPSBhZG9wdFB0cihld2tfdmlld190aWxlZF9hZGQobV9ldmFzKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBld2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3LmdldCgpLCBDb25maWc6OmRl
ZmF1bHRUaGVtZVBhdGgpOworICAgIGV3a192aWV3X3VyaV9zZXQobV93ZWJWaWV3LmdldCgpLCBt
X3VybC5jX3N0cigpKTsKK30KKwordm9pZCBFV0tUZXN0Vmlldzo6c2hvdygpCit7CisgICAgaWYg
KCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBldmFzX29iamVjdF9yZXNp
emUobV93ZWJWaWV3LmdldCgpLCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgZXZhc19vYmplY3Rf
c2hvdyhtX3dlYlZpZXcuZ2V0KCkpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dlYlZp
ZXcuZ2V0KCksIEVJTkFfVFJVRSk7Cit9CisKK0V2YXNfT2JqZWN0KiBFV0tUZXN0Vmlldzo6bWFp
bkZyYW1lKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gZXdr
X3ZpZXdfZnJhbWVfbWFpbl9nZXQobV93ZWJWaWV3LmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30K
KworRXZhcyogRVdLVGVzdFZpZXc6OmV2YXMoKQoreworICAgIGlmIChtX3dlYlZpZXcuZ2V0KCkp
CisgICAgICAgIHJldHVybiBldmFzX29iamVjdF9ldmFzX2dldChtX3dlYlZpZXcuZ2V0KCkpOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIEVXS1Rlc3RWaWV3OjpiaW5kRXZlbnRzKHZvaWQgKCpj
YWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5h
bWUsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKG1fd2ViVmlldy5nZXQo
KSwgZXZlbnROYW1lLCBjYWxsYmFjayk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFjaywgcHRyKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0
Vmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmll
dy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTVkMGQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RW
aWV3LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3Vu
ZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIu
MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMw
LCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVXS1Rlc3RWaWV3X2gK
KyNkZWZpbmUgRVdLVGVzdFZpZXdfaAorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1
ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
CituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdLVGVzdEVjb3JlRXZhcyB7Citw
dWJsaWM6CisgICAgRVdLVGVzdEVjb3JlRXZhcyhpbnQgdXNlWDExV2luZG93KTsKKyAgICBFV0tU
ZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwgaW50
IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29uc3QgY2hhciog
ZXh0cmFfb3B0aW9ucywgaW50IHVzZVgxMVdpbmRvdyk7CisKKyAgICBFdmFzKiBldmFzKCk7Cisg
ICAgdm9pZCBzaG93KCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEVjb3JlX0V2YXM+IG1fZWNv
cmVFdmFzOworfTsKKworY2xhc3MgRVdLVGVzdFZpZXcgeworcHVibGljOgorICAgIGVudW0gRXdr
Vmlld1R5cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0gMCwKKyAgICAgICAgVGlsZWRWaWV3LAor
ICAgIH07CisKKyAgICBleHBsaWNpdCBFV0tUZXN0VmlldyhFdmFzKik7CisgICAgRVdLVGVzdFZp
ZXcoRXZhcyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRVdLVGVzdFZpZXcoRXZhcyosIEV3a1Zp
ZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVXS1Rlc3RWaWV3KEV2YXMqLCBFd2tWaWV3
VHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgRXZh
c19PYmplY3QqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBFdmFz
X09iamVjdCogbWFpbkZyYW1lKCk7CisgICAgRXZhcyogZXZhcygpOworICAgIHZvaWQgc2hvdygp
OworCisgICAgYm9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFj
aykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZv
aWQqIHB0cik7CisKK3ByaXZhdGU6CisgICAgRVdLVGVzdFZpZXcoY29uc3QgRVdLVGVzdFZpZXcm
KTsKKyAgICBFV0tUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRVdLVGVzdFZpZXcmKTsKKworICAg
IEV2YXMqIG1fZXZhczsKKyAgICBPd25QdHI8RXZhc19PYmplY3Q+IG1fd2ViVmlldzsKKworICAg
IGludCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBtX2RlZmF1bHRWaWV3VHlw
ZTsKKyAgICBzdGQ6OnN0cmluZyBtX3VybDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRt
bCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rlc3RfcGFnZS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgxZTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0
X3BhZ2UuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxIVE1MPgorPEJPRFk+Cis8SDIgYWxpZ249ImNl
bnRlciI+RUZMIFVuaXQgVGVzdHM8L0gyPgorPEgyIGFsaWduPSJjZW50ZXIiPkRlZmF1bHQgVGVz
dGluZyBXZWIgUGFnZTwvSDI+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC90ZXN0cy90ZXN0X2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rl
c3RzL3Rlc3RfZXdrX3ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI0YTFjODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy90ZXN0
X2V3a192aWV3LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT
dWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIKKyNpbmNsdWRl
IDxFV2ViS2l0Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEVXS1VuaXRUZXN0czsKKworLyoqCisqIEBicmllZiBDaGVja2luZyB3aGV0aGVyIGZ1bmN0aW9u
IHByb3Blcmx5IHJldHVybnMgY29ycmVjdCB2YWx1ZS4KKyovCit2b2lkIGV3a1ZpZXdFZGl0YWJs
ZUdldENiKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCit7Cisg
ICAgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KG8sIEVJTkFfRkFMU0UpOworICAgIEVYUEVDVF9FUShF
SU5BX0ZBTFNFLCBld2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9
CisKK1RFU1QodGVzdF9ld2tfdmlldywgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KQoreworICAgIFJV
Tl9URVNUKGV3a1ZpZXdFZGl0YWJsZUdldENiLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQorCisv
KioKKyogQGJyaWVmIENoZWNraW5nIHdoZXRoZXIgZnVuY3Rpb24gcmV0dXJucyBjb3JyZWN0IHVy
aSBzdHJpbmcuCisqLwordm9pZCBld2tWaWV3VXJpR2V0Q2Iodm9pZCogZXZlbnRJbmZvLCBFdmFz
X09iamVjdCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoImh0dHA6Ly93d3cu
d2Via2l0Lm9yZy8iLCBld2tfdmlld191cmlfZ2V0KG8pKTsKKyAgICBFTkRfVEVTVCgpOworfQor
CitURVNUKHRlc3RfZXdrX3ZpZXcsIGV3a192aWV3X3VyaV9nZXQpCit7CisgICAgUlVOX1RFU1Qo
Imh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIGV3a1ZpZXdVcmlHZXRDYiwgImxvYWQsZmluaXNoZWQi
LCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfcnVubmVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfcnVubmVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJhNjFmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ydW5uZXIuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
U2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJ
bmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVT
QQorKi8KKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIKKyNpbmNsdWRl
IDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCitzdGF0aWMgdm9pZCBwYXJz
ZUN1c3RvbUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgc3RhdGljIGNv
bnN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgIHsidXNlWDExV2luZG93Iiwgbm9fYXJn
dW1lbnQsICZFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjp1c2VYMTFXaW5kb3csIHRydWV9LAor
ICAgICAgICB7MCwgMCwgMCwgMH0KKyAgICB9OworCisgICAgaW50IG9wdGlvbjsKKyAgICB3aGls
ZSAoKG9wdGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIiLCBvcHRpb25zLCAwKSkgIT0g
LTEpIHsgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgYXRl
eGl0KEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKTsKKyAgICBwYXJzZUN1
c3RvbUFyZ3VtZW50cyhhcmdjLCBhcmd2KTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0
KCZhcmdjLCBhcmd2KTsKKyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148755</attachid>
            <date>2012-06-21 02:50:44 -0700</date>
            <delta_ts>2012-06-27 07:48:32 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>23369</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYzdlMGU1NS4uM2I4Njg3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0yMSAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA2LTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgW0NNYWtlXSBVbnJldmlld2VkIHNwZWN1bGF0aXZlIGJ1aWxkZml4IGFmdGVyIHIxMjA3
ODYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAyZGVmODY5Li45ZGM2NDJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI4NiwzICsyODYsODMgQEAgSU5TVEFMTChGSUxFUyAke0VX
ZWJLaXRfSEVBREVSU30KIAogSU5TVEFMTChGSUxFUyAke1dlYktpdF9USEVNRX0KICAgICAgICAg
REVTVElOQVRJT04gJHtEQVRBX0lOU1RBTExfRElSfS90aGVtZXMpCisKK0lOQ0xVREVfRElSRUNU
T1JJRVMoJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3QKKyAgICAgICAgICAgICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vZ3Rlc3QvaW5jbHVkZQorKQorCitTRVQoR1RFU1RfU09VUkNFUyAiJHtUSElS
RFBBUlRZX0RJUn0vZ3Rlc3Qvc3JjIikKKworQUREX0xJQlJBUlkoZ3Rlc3QKKyAgICAke0dURVNU
X1NPVVJDRVN9L2d0ZXN0LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1kZWF0aC10ZXN0
LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdF9tYWluLmNjCisgICAgJHtHVEVTVF9TT1VS
Q0VTfS9ndGVzdC1maWxlcGF0aC5jYworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtcG9ydC5j
YworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtdGVzdC1wYXJ0LmNjCisgICAgJHtHVEVTVF9T
T1VSQ0VTfS9ndGVzdC10eXBlZC10ZXN0LmNjCispCisKK1NFVChFV0tVbml0VGVzdHNfTElCUkFS
SUVTCisgICAgJHtKYXZhU2NyaXB0Q29yZV9MSUJSQVJZX05BTUV9CisgICAgJHtXZWJDb3JlX0xJ
QlJBUllfTkFNRX0KKyAgICAke1dlYktpdF9MSUJSQVJZX05BTUV9CisgICAgJHtFQ09SRV9MSUJS
QVJJRVN9CisgICAgJHtFQ09SRV9FVkFTX0xJQlJBUklFU30KKyAgICAke0VWQVNfTElCUkFSSUVT
fQorICAgICR7RURKRV9MSUJSQVJJRVN9CispCisKK1NFVChFV0tVbml0VGVzdHNfSU5DTFVERV9E
SVJFQ1RPUklFUworICAgICIke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZSIKKyAgICAiJHtXRUJL
SVRfRElSfS9lZmwvZXdrIgorICAgICIke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvVW5pdFRl
c3RVdGlscyIKKyAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9IgorICAgICIke1dURl9ESVJ9Igor
ICAgICIke1dURl9ESVJ9L3d0ZiIKKyAgICAke0VDT1JFX0lOQ0xVREVfRElSU30KKyAgICAke0VD
T1JFX0VWQVNfSU5DTFVERV9ESVJTfQorICAgICR7RVZBU19JTkNMVURFX0RJUlN9CisgICAgJHtF
REpFX0lOQ0xVREVfRElSU30KKykKKworU0VUKEVXS1VuaXRUZXN0c19MSU5LX0ZMQUdTCisgICAg
JHtFQ09SRV9MREZMQUdTfQorICAgICR7RUNPUkVfRVZBU19MREZMQUdTfQorICAgICR7RVZBU19M
REZMQUdTfQorICAgICR7RURKRV9MREZMQUdTfQorKQorCitJRiAoRU5BQkxFX0dMSUJfU1VQUE9S
VCkKKyAgICBMSVNUKEFQUEVORCBFV0tVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtX
VEZfRElSfS93dGYvZ29iamVjdCIpCisKKyAgICBMSVNUKEFQUEVORCBFV0tVbml0VGVzdHNfTElC
UkFSSUVTCisgICAgICAgICR7R2RrX0xJQlJBUklFU30KKyAgICAgICAgJHtHbGliX0xJQlJBUklF
U30KKyAgICAgICAgJHtHdGhyZWFkX0xJQlJBUklFU30KKyAgICApCitFTkRJRiAoKQorCitTRVQo
REVGQVVMVF9URVNUX1BBR0VfRElSICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9l
ZmwvdGVzdHMvcmVzb3VyY2VzKQorCitBRERfREVGSU5JVElPTlMoLURERUZBVUxUX1RFU1RfUEFH
RV9ESVI9XCIke0RFRkFVTFRfVEVTVF9QQUdFX0RJUn1cIikKK0FERF9ERUZJTklUSU9OUygtRERF
RkFVTFRfVEhFTUVfUEFUSD1cIiR7VEhFTUVfQklOQVJZX0RJUn1cIikKKworQUREX0xJQlJBUlko
ZXdrVGVzdFV0aWxzCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0tUZXN0QmFzZS5jcHAKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXS1Rlc3RWaWV3LmNwcAorKQorCitTRVQoV0VCS0lUX0VGTF9URVNUX0RJUiAiJHtXRUJLSVRf
RElSfS9lZmwvdGVzdHMvIikKKworU0VUKEVXS1VuaXRUZXN0c19CSU5BUklFUworICAgIHRlc3Rf
ZXdrX3ZpZXcKKykKKworRk9SRUFDSCh0ZXN0TmFtZSAke0VXS1VuaXRUZXN0c19CSU5BUklFU30p
CisgICAgQUREX0VYRUNVVEFCTEUoYmluLyR7dGVzdE5hbWV9ICR7V0VCS0lUX0VGTF9URVNUX0RJ
Un0vJHt0ZXN0TmFtZX0uY3BwICR7V0VCS0lUX0VGTF9URVNUX0RJUn0vdGVzdF9ydW5uZXIuY3Bw
KQorICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhiaW4vJHt0ZXN0TmFtZX0gJHtFV0tVbml0VGVz
dHNfTElCUkFSSUVTfSBld2tUZXN0VXRpbHMgZ3Rlc3QgcHRocmVhZCkKKyAgICBBRERfVEFSR0VU
X1BST1BFUlRJRVMoYmluLyR7dGVzdE5hbWV9IExJTktfRkxBR1MgIiR7RVdLVW5pdFRlc3RzX0xJ
TktfRkxBR1N9IikKKyAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoYmluLyR7dGVzdE5hbWV9IFBS
T1BFUlRJRVMgRk9MREVSICJXZWJLaXQiKQorICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4v
JHt0ZXN0TmFtZX0gUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7Q01BS0Vf
QklOQVJZX0RJUn0iKQorRU5ERk9SRUFDSCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggNjMxMjBiOS4u
YzM2YTg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDEyLTA2LTIxICBL
cnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIElt
cGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgZnJhbWV3b3JrIGFuZCB1bml0IHRlc3RzIGZvciBXZWJL
aXQtRUZMIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RpbmcgZnJhbWV3b3JrIGlzIGJhc2VkIG9uIGd0ZXN0IGxpYnJhcnkuIEd0ZXN0IGxp
YnJhcnkgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuIEZyYW1ld29yayBpcyBkZXZpZGVk
IHRvCisgICAgICAgIGJhc2UgcGFydCBhbmQgdmlldyBwYXJ0LiBCYXNlIHBhcnQgdGFrZXMgY2Fy
ZSBvZiBlZmwgaW5pdGlhbGl6YXRpb24sIGRlZmluZXMgdGVzdCBtYWNyb3MgYW5kIHByZXBhcmVz
IHRlc3QgdG8gcnVuLiBWaWV3IHBhcnQgaXMgYSBjb250ZXh0CisgICAgICAgIG9mIGVhY2ggdGVz
dC4KKworICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rl
c3RCYXNlOjppbml0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRk
b3duKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKToK
KyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnN0YXJ0VGVzdCk6CisgICAgICAg
IChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjplbmRUZXN0KToKKyAgICAgICAgKEVXS1VuaXRU
ZXN0czo6RVdLVGVzdEJhc2U6OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpF
V0tUZXN0QmFzZTo6cnVuVGVzdCk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tU
ZXN0QmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tU
ZXN0QmFzZSk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmg6
IEFkZGVkLgorICAgICAgICAoQ29uZmlnKToKKyAgICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXS1Rlc3RWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAg
ICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKToKKyAg
ICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEVjb3JlRXZhczo6ZXZhcyk6CisgICAgICAgIChF
V0tVbml0VGVzdHM6OkVXS1Rlc3RFY29yZUV2YXM6OnNob3cpOgorICAgICAgICAoRVdLVW5pdFRl
c3RzOjpFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpF
V0tUZXN0Vmlldzo6aW5pdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3Ojpz
aG93KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6Om1haW5GcmFtZSk6Cisg
ICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpldmFzKToKKyAgICAgICAgKEVXS1Vu
aXRUZXN0czo6RVdLVGVzdFZpZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLVGVzdFZpZXcuaDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgor
ICAgICAgICAoRVdLVGVzdEVjb3JlRXZhcyk6CisgICAgICAgIChFV0tUZXN0Vmlldyk6CisgICAg
ICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiB0ZXN0
cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvdGVzdF9ld2tfdmlldy5jcHA6IEFkZGVkLgorICAgICAgICAoZXdrVmlld0VkaXRhYmxlR2V0
Q2IpOgorICAgICAgICAoVEVTVCk6CisgICAgICAgIChld2tWaWV3VXJpR2V0Q2IpOgorICAgICAg
ICAqIHRlc3RzL3Rlc3RfcnVubmVyLmNwcDogQWRkZWQuCisgICAgICAgIChwYXJzZUN1c3RvbUFy
Z3VtZW50cyk6CisgICAgICAgIChtYWluKToKKwogMjAxMi0wNi0xOSAgU2VyZ2lvIFZpbGxhciBT
ZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBDYWxsaW5nIG5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKCkgY2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlOiBtX3ZlcmlmaWVyLmlz
U2FmZVRvVXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0
VXRpbHMvRVdLVGVzdEJhc2UuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RV
dGlscy9FV0tUZXN0QmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NjA4MzAwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRU
ZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAg
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05V
CisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
ICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0QmFzZS5oIgorCisjaW5jbHVkZSAi
RVdLVGVzdENvbmZpZy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RWaWV3LmgiCisjaW5jbHVkZSA8RVdl
YktpdC5oPgorCisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisKK2ludCBF
V0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjp1c2VYMTFXaW5kb3c7CisKK25hbWVzcGFjZSBFV0tV
bml0VGVzdHMgeworCitib29sIEVXS1Rlc3RCYXNlOjppbml0KCkKK3sKKyAgICBpZiAoIWVjb3Jl
X2V2YXNfaW5pdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkamVfaW5p
dCgpKSB7CisgICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGludCByZXQgPSBld2tfaW5pdCgpOworICAgIGNvbnN0IGNoYXIq
IHByb3h5VXJpID0gZ2V0ZW52KCJodHRwX3Byb3h5Iik7CisKKyAgICBpZiAocmV0ICYmIHByb3h5
VXJpKQorICAgICAgICBld2tfbmV0d29ya19wcm94eV91cmlfc2V0KHByb3h5VXJpKTsKKworICAg
IHJldHVybiByZXQ7Cit9CisKK3ZvaWQgRVdLVGVzdEJhc2U6OnNodXRkb3duKCkKK3sKKyAgICBl
Y29yZV9ldmFzX3NodXRkb3duKCk7CisgICAgZWRqZV9zaHV0ZG93bigpOworICAgIGV3a19zaHV0
ZG93bigpOworfQorCit2b2lkIEVXS1Rlc3RCYXNlOjpzaHV0ZG93bkFsbCgpCit7CisgICAgaW50
IGNvdW50ID0gMDsKKworICAgIHdoaWxlICgoY291bnQgPSBlY29yZV9ldmFzX3NodXRkb3duKCkp
ID4gMCkgeyB9CisgICAgd2hpbGUgKChjb3VudCA9IGVkamVfc2h1dGRvd24oKSkgPiAwKSB7IH0K
KyAgICB3aGlsZSAoKGNvdW50ID0gZXdrX3NodXRkb3duKCkpID4gMCkgeyB9Cit9CisKK3ZvaWQg
RVdLVGVzdEJhc2U6OnN0YXJ0VGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7
Cit9CisKK3ZvaWQgRVdLVGVzdEJhc2U6OmVuZFRlc3QoKQoreworICAgIGVjb3JlX21haW5fbG9v
cF9xdWl0KCk7Cit9CisKK2Jvb2wgRVdLVGVzdEJhc2U6OmNyZWF0ZVRlc3QoY29uc3QgY2hhciog
dXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwg
Y29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICBFRkxfSU5J
VF9SRVQoKTsKKworICAgIEVXS1Rlc3RFY29yZUV2YXMgZXZhcyh1c2VYMTFXaW5kb3cpOworICAg
IGlmICghZXZhcy5ldmFzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBldmFzLnNob3co
KTsKKworICAgIEVXS1Rlc3RWaWV3IHZpZXcoZXZhcy5ldmFzKCksIHVybCk7CisgICAgaWYgKCF2
aWV3LmluaXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmlldy5iaW5kRXZlbnRz
KGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKKyAgICB2aWV3LnNob3co
KTsKKworICAgIFNUQVJUX1RFU1QoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVX
S1Rlc3RCYXNlOjpydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQor
eworICAgIHJldHVybiBjcmVhdGVUZXN0KENvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlLCBldmVudF9j
YWxsYmFjaywgZXZlbnRfbmFtZSwgZXZlbnRfZGF0YSk7Cit9CisKK2Jvb2wgRVdLVGVzdEJhc2U6
OnJ1blRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBF
dmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRf
ZGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlVGVzdCh1cmwsIGV2ZW50X2NhbGxiYWNrLCBldmVu
dF9uYW1lLCBldmVudF9kYXRhKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmMwZDM3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmgKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBT
ZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNB
CisqLworCisjaWZuZGVmIEVXS1Rlc3RCYXNlX2gKKyNkZWZpbmUgRVdLVGVzdEJhc2VfaAorCisj
aW5jbHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNkZWZpbmUgUlVO
X1RFU1QoYXJncy4uLikgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEFTU0VSVF9FUSh0cnVl
LCBFV0tUZXN0QmFzZTo6cnVuVGVzdChhcmdzKSk7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisj
ZGVmaW5lIFNUQVJUX1RFU1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RC
YXNlOjpzdGFydFRlc3QoKTsgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFTkRfVEVT
VCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OmVuZFRlc3QoKTsg
XAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX0lOSVRfUkVUKCkgIFwKKyAgICBkbyB7
ICAgIFwKKyAgICAgICAgaWYgKCFFV0tUZXN0QmFzZTo6aW5pdCgpKSAgIFwKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX0lOSVQo
KSAgXAorICAgIGRvIHsgICAgXAorICAgICAgICBFV0tUZXN0QmFzZTo6aW5pdCgpOyAgICBcCisg
ICAgfSB3aGlsZSAoMCkKKworbmFtZXNwYWNlIEVXS1VuaXRUZXN0cyB7CisKK2NsYXNzIEVXS1Rl
c3RCYXNlIHsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9p
ZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNo
YXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGluaXQoKTsKKyAgICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIHN0YXRpYyB2b2lk
IHNodXRkb3duQWxsKCk7CisgICAgc3RhdGljIHZvaWQgc3RhcnRUZXN0KCk7CisgICAgc3RhdGlj
IHZvaWQgZW5kVGVzdCgpOworCisgICAgc3RhdGljIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB1
cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBj
b25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKyAgICBzdGF0aWMgYm9v
bCBydW5UZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKworICAgIHN0
YXRpYyBpbnQgdXNlWDExV2luZG93OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oIGIvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjZjZlYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oCkBA
IC0wLDAgKzEsMzEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ry
b25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9u
LCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2lmbmRlZiBFV0tUZXN0Q29uZmlnX2gKKyNkZWZp
bmUgRVdLVGVzdENvbmZpZ19oCisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworbmFtZXNwYWNl
IENvbmZpZyB7CitzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3V2lkdGggPSA2MDA7CitzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3SGVpZ2h0ID0gODAwOworc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGRlZmF1bHRUaGVtZVBhdGggPSBERUZBVUxUX1RIRU1FX1BBVEgiL2RlZmF1bHQuZWRq
IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkZWZhdWx0VGVzdFBhZ2UgPSAiZmlsZTovLyJE
RUZBVUxUX1RFU1RfUEFHRV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwiOworfQorfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMv
RVdLVGVzdFZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0tUZXN0Vmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyOWI4
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRp
bHMvRVdLVGVzdFZpZXcuY3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJFV0tUZXN0Vmlldy5oIgorCisjaW5jbHVkZSAiRVdLVGVz
dENvbmZpZy5oIgorI2luY2x1ZGUgPEVXZWJLaXQuaD4KKworI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitFV0tUZXN0RWNvcmVFdmFzOjpF
V0tUZXN0RWNvcmVFdmFzKGludCB1c2VYMTFXaW5kb3cpCit7CisgICAgaWYgKHVzZVgxMVdpbmRv
dykKKyAgICAgICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX25ldygwLCAwLCAw
LCBDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgsIENvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQsIDAp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19i
dWZmZXJfbmV3KENvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCwgQ29uZmlnOjpkZWZhdWx0Vmlld0hl
aWdodCkpOworfQorCitFV0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKGNvbnN0IGNo
YXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3
cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29uc3QgY2hhciogZXh0cmFfb3B0aW9ucywgaW50IHVz
ZVgxMVdpbmRvdykKK3sKKyAgICBpZiAodXNlWDExV2luZG93KQorICAgICAgICBtX2Vjb3JlRXZh
cyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2aWV3cG9ydF94LCB2aWV3
cG9ydF95LCB2aWV3cG9ydF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRpb25zKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfYnVmZmVyX25ldyh2
aWV3cG9ydF94LCB2aWV3cG9ydF95KSk7Cit9CisKK0V2YXMqIEVXS1Rlc3RFY29yZUV2YXM6OmV2
YXMoKQoreworICAgIGlmIChtX2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGVjb3Jl
X2V2YXNfZ2V0KG1fZWNvcmVFdmFzLmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBF
V0tUZXN0RWNvcmVFdmFzOjpzaG93KCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0KCkpCisg
ICAgICAgIGVjb3JlX2V2YXNfc2hvdyhtX2Vjb3JlRXZhcy5nZXQoKSk7Cit9CisKK0VXS1Rlc3RW
aWV3OjpFV0tUZXN0VmlldyhFdmFzKiBldmFzKQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBt
X3VybChDb25maWc6OmRlZmF1bHRUZXN0UGFnZSkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRp
bGVkVmlldykKKyAgICAsIG1fd2lkdGgoQ29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwg
bV9oZWlnaHQoQ29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkKK3sKK30KKworRVdLVGVzdFZpZXc6
OkVXS1Rlc3RWaWV3KEV2YXMqIGV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhl
dmFzKQorICAgICwgbV91cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3
KQorICAgICwgbV93aWR0aChDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdo
dChDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVz
dFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsKQorICAg
IDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlw
ZSh0eXBlKQorICAgICwgbV93aWR0aChDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBt
X2hlaWdodChDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6
RVdLVGVzdFZpZXcoRXZhcyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJs
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJs
KHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dpZHRoKHdpZHRo
KQorICAgICwgbV9oZWlnaHQoaGVpZ2h0KQoreworfQorCitib29sIEVXS1Rlc3RWaWV3Ojppbml0
KCkKK3sKKyAgICBpZiAoIW1fZXZhcyB8fCBtX3VybC5lbXB0eSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzd2l0Y2ggKG1fZGVmYXVsdFZpZXdUeXBlKSB7CisgICAgY2FzZSBTaW5n
bGVWaWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBhZG9wdFB0cihld2tfdmlld19zaW5nbGVfYWRk
KG1fZXZhcykpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgVGlsZWRWaWV3OgorICAgICAg
ICBtX3dlYlZpZXcgPSBhZG9wdFB0cihld2tfdmlld190aWxlZF9hZGQobV9ldmFzKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBld2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3LmdldCgpLCBD
b25maWc6OmRlZmF1bHRUaGVtZVBhdGgpOworICAgIGV3a192aWV3X3VyaV9zZXQobV93ZWJWaWV3
LmdldCgpLCBtX3VybC5jX3N0cigpKTsKK30KKwordm9pZCBFV0tUZXN0Vmlldzo6c2hvdygpCit7
CisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBldmFzX29i
amVjdF9yZXNpemUobV93ZWJWaWV3LmdldCgpLCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgZXZh
c19vYmplY3Rfc2hvdyhtX3dlYlZpZXcuZ2V0KCkpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dChtX3dlYlZpZXcuZ2V0KCksIEVJTkFfVFJVRSk7Cit9CisKK0V2YXNfT2JqZWN0KiBFV0tUZXN0
Vmlldzo6bWFpbkZyYW1lKCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LmdldCgpKQorICAgICAgICBy
ZXR1cm4gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobV93ZWJWaWV3LmdldCgpKTsKKyAgICByZXR1
cm4gMDsKK30KKworRXZhcyogRVdLVGVzdFZpZXc6OmV2YXMoKQoreworICAgIGlmIChtX3dlYlZp
ZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBldmFzX29iamVjdF9ldmFzX2dldChtX3dlYlZpZXcu
Z2V0KCkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEVXS1Rlc3RWaWV3OjpiaW5kRXZlbnRz
KHZvaWQgKCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFy
KiBldmVudE5hbWUsIHZvaWQqIHB0cikKK3sKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKG1fd2Vi
Vmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFjayk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKG1fd2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFjaywgcHRyKTsK
K30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGls
cy9FV0tUZXN0Vmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0tUZXN0Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTVkMGQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXS1Rlc3RWaWV3LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwg
U3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVXS1Rl
c3RWaWV3X2gKKyNkZWZpbmUgRVdLVGVzdFZpZXdfaAorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5o
PgorI2luY2x1ZGUgPEV2YXMuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdLVGVzdEVjb3Jl
RXZhcyB7CitwdWJsaWM6CisgICAgRVdLVGVzdEVjb3JlRXZhcyhpbnQgdXNlWDExV2luZG93KTsK
KyAgICBFV0tUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3Bv
cnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29u
c3QgY2hhciogZXh0cmFfb3B0aW9ucywgaW50IHVzZVgxMVdpbmRvdyk7CisKKyAgICBFdmFzKiBl
dmFzKCk7CisgICAgdm9pZCBzaG93KCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEVjb3JlX0V2
YXM+IG1fZWNvcmVFdmFzOworfTsKKworY2xhc3MgRVdLVGVzdFZpZXcgeworcHVibGljOgorICAg
IGVudW0gRXdrVmlld1R5cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0gMCwKKyAgICAgICAgVGls
ZWRWaWV3LAorICAgIH07CisKKyAgICBleHBsaWNpdCBFV0tUZXN0VmlldyhFdmFzKik7CisgICAg
RVdLVGVzdFZpZXcoRXZhcyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRVdLVGVzdFZpZXcoRXZh
cyosIEV3a1ZpZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVXS1Rlc3RWaWV3KEV2YXMq
LCBFd2tWaWV3VHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwor
CisgICAgRXZhc19PYmplY3QqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0K
KyAgICBFdmFzX09iamVjdCogbWFpbkZyYW1lKCk7CisgICAgRXZhcyogZXZhcygpOworICAgIHZv
aWQgc2hvdygpOworCisgICAgYm9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRzKHZvaWQg
KCpjYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVu
dE5hbWUsIHZvaWQqIHB0cik7CisKK3ByaXZhdGU6CisgICAgRVdLVGVzdFZpZXcoY29uc3QgRVdL
VGVzdFZpZXcmKTsKKyAgICBFV0tUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRVdLVGVzdFZpZXcm
KTsKKworICAgIEV2YXMqIG1fZXZhczsKKyAgICBPd25QdHI8RXZhc19PYmplY3Q+IG1fd2ViVmll
dzsKKworICAgIGludCBtX3dpZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBtX2RlZmF1
bHRWaWV3VHlwZTsKKyAgICBzdGQ6OnN0cmluZyBtX3VybDsKK307CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0
X3BhZ2UuaHRtbCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rl
c3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgxZTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVm
YXVsdF90ZXN0X3BhZ2UuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxIVE1MPgorPEJPRFk+Cis8SDIg
YWxpZ249ImNlbnRlciI+RUZMIFVuaXQgVGVzdHM8L0gyPgorPEgyIGFsaWduPSJjZW50ZXIiPkRl
ZmF1bHQgVGVzdGluZyBXZWIgUGFnZTwvSDI+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy90ZXN0X2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL3Rlc3RzL3Rlc3RfZXdrX3ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjI0YTFjODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90
ZXN0cy90ZXN0X2V3a192aWV3LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisg
ICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxl
IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIK
KyNpbmNsdWRlIDxFV2ViS2l0Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcg
bmFtZXNwYWNlIEVXS1VuaXRUZXN0czsKKworLyoqCisqIEBicmllZiBDaGVja2luZyB3aGV0aGVy
IGZ1bmN0aW9uIHByb3Blcmx5IHJldHVybnMgY29ycmVjdCB2YWx1ZS4KKyovCit2b2lkIGV3a1Zp
ZXdFZGl0YWJsZUdldENiKHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZvaWQqIGRh
dGEpCit7CisgICAgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KG8sIEVJTkFfRkFMU0UpOworICAgIEVY
UEVDVF9FUShFSU5BX0ZBTFNFLCBld2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9U
RVNUKCk7Cit9CisKK1RFU1QodGVzdF9ld2tfdmlldywgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KQor
eworICAgIFJVTl9URVNUKGV3a1ZpZXdFZGl0YWJsZUdldENiLCAibG9hZCxmaW5pc2hlZCIsIDAp
OworfQorCisvKioKKyogQGJyaWVmIENoZWNraW5nIHdoZXRoZXIgZnVuY3Rpb24gcmV0dXJucyBj
b3JyZWN0IHVyaSBzdHJpbmcuCisqLwordm9pZCBld2tWaWV3VXJpR2V0Q2Iodm9pZCogZXZlbnRJ
bmZvLCBFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoImh0
dHA6Ly93d3cud2Via2l0Lm9yZy8iLCBld2tfdmlld191cmlfZ2V0KG8pKTsKKyAgICBFTkRfVEVT
VCgpOworfQorCitURVNUKHRlc3RfZXdrX3ZpZXcsIGV3a192aWV3X3VyaV9nZXQpCit7CisgICAg
UlVOX1RFU1QoImh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIGV3a1ZpZXdVcmlHZXRDYiwgImxvYWQs
ZmluaXNoZWQiLCAwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rl
c3RfcnVubmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfcnVubmVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDJhNjFmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ydW5uZXIuY3BwCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjEx
MS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIK
KyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCitzdGF0aWMg
dm9pZCBwYXJzZUN1c3RvbUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAg
c3RhdGljIGNvbnN0IG9wdGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgIHsidXNlWDExV2luZG93
Iiwgbm9fYXJndW1lbnQsICZFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjp1c2VYMTFXaW5kb3cs
IHRydWV9LAorICAgICAgICB7MCwgMCwgMCwgMH0KKyAgICB9OworCisgICAgaW50IG9wdGlvbjsK
KyAgICB3aGlsZSAoKG9wdGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIiLCBvcHRpb25z
LCAwKSkgIT0gLTEpIHsgfQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7
CisgICAgYXRleGl0KEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKTsKKyAg
ICBwYXJzZUN1c3RvbUFyZ3VtZW50cyhhcmdjLCBhcmd2KTsKKyAgICA6OnRlc3Rpbmc6OkluaXRH
b29nbGVUZXN0KCZhcmdjLCBhcmd2KTsKKyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQo=
</data>
<flag name="review"
          id="156589"
          type_id="1"
          status="+"
          setter="cshu"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149747</attachid>
            <date>2012-06-27 07:48:32 -0700</date>
            <delta_ts>2012-06-29 08:12:13 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation - updating</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>23362</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYzdlMGU1NS4uM2I4Njg3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0yMSAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBjb25maWd1cmF0aW9uIGZvciBidWlsZGluZyBndGVzdCBsaWJyYXJ5LCB0ZXN0aW5nIGZy
YW1ld29yayBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgor
CiAyMDEyLTA2LTE5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgW0NNYWtlXSBVbnJldmlld2VkIHNwZWN1bGF0aXZlIGJ1aWxkZml4IGFmdGVyIHIxMjA3
ODYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAyZGVmODY5Li45ZGM2NDJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1FZmwuY21ha2UKQEAgLTI4NiwzICsyODYsODMgQEAgSU5TVEFMTChGSUxFUyAke0VX
ZWJLaXRfSEVBREVSU30KIAogSU5TVEFMTChGSUxFUyAke1dlYktpdF9USEVNRX0KICAgICAgICAg
REVTVElOQVRJT04gJHtEQVRBX0lOU1RBTExfRElSfS90aGVtZXMpCisKK0lOQ0xVREVfRElSRUNU
T1JJRVMoJHtUSElSRFBBUlRZX0RJUn0vZ3Rlc3QKKyAgICAgICAgICAgICAgICAgICAgJHtUSElS
RFBBUlRZX0RJUn0vZ3Rlc3QvaW5jbHVkZQorKQorCitTRVQoR1RFU1RfU09VUkNFUyAiJHtUSElS
RFBBUlRZX0RJUn0vZ3Rlc3Qvc3JjIikKKworQUREX0xJQlJBUlkoZ3Rlc3QKKyAgICAke0dURVNU
X1NPVVJDRVN9L2d0ZXN0LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1kZWF0aC10ZXN0
LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdF9tYWluLmNjCisgICAgJHtHVEVTVF9TT1VS
Q0VTfS9ndGVzdC1maWxlcGF0aC5jYworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtcG9ydC5j
YworICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QtdGVzdC1wYXJ0LmNjCisgICAgJHtHVEVTVF9T
T1VSQ0VTfS9ndGVzdC10eXBlZC10ZXN0LmNjCispCisKK1NFVChFV0tVbml0VGVzdHNfTElCUkFS
SUVTCisgICAgJHtKYXZhU2NyaXB0Q29yZV9MSUJSQVJZX05BTUV9CisgICAgJHtXZWJDb3JlX0xJ
QlJBUllfTkFNRX0KKyAgICAke1dlYktpdF9MSUJSQVJZX05BTUV9CisgICAgJHtFQ09SRV9MSUJS
QVJJRVN9CisgICAgJHtFQ09SRV9FVkFTX0xJQlJBUklFU30KKyAgICAke0VWQVNfTElCUkFSSUVT
fQorICAgICR7RURKRV9MSUJSQVJJRVN9CispCisKK1NFVChFV0tVbml0VGVzdHNfSU5DTFVERV9E
SVJFQ1RPUklFUworICAgICIke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZSIKKyAgICAiJHtXRUJL
SVRfRElSfS9lZmwvZXdrIgorICAgICIke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9zcmMvVW5pdFRl
c3RVdGlscyIKKyAgICAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9IgorICAgICIke1dURl9ESVJ9Igor
ICAgICIke1dURl9ESVJ9L3d0ZiIKKyAgICAke0VDT1JFX0lOQ0xVREVfRElSU30KKyAgICAke0VD
T1JFX0VWQVNfSU5DTFVERV9ESVJTfQorICAgICR7RVZBU19JTkNMVURFX0RJUlN9CisgICAgJHtF
REpFX0lOQ0xVREVfRElSU30KKykKKworU0VUKEVXS1VuaXRUZXN0c19MSU5LX0ZMQUdTCisgICAg
JHtFQ09SRV9MREZMQUdTfQorICAgICR7RUNPUkVfRVZBU19MREZMQUdTfQorICAgICR7RVZBU19M
REZMQUdTfQorICAgICR7RURKRV9MREZMQUdTfQorKQorCitJRiAoRU5BQkxFX0dMSUJfU1VQUE9S
VCkKKyAgICBMSVNUKEFQUEVORCBFV0tVbml0VGVzdHNfSU5DTFVERV9ESVJFQ1RPUklFUyAiJHtX
VEZfRElSfS93dGYvZ29iamVjdCIpCisKKyAgICBMSVNUKEFQUEVORCBFV0tVbml0VGVzdHNfTElC
UkFSSUVTCisgICAgICAgICR7R2RrX0xJQlJBUklFU30KKyAgICAgICAgJHtHbGliX0xJQlJBUklF
U30KKyAgICAgICAgJHtHdGhyZWFkX0xJQlJBUklFU30KKyAgICApCitFTkRJRiAoKQorCitTRVQo
REVGQVVMVF9URVNUX1BBR0VfRElSICR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlL1dlYktpdC9l
ZmwvdGVzdHMvcmVzb3VyY2VzKQorCitBRERfREVGSU5JVElPTlMoLURERUZBVUxUX1RFU1RfUEFH
RV9ESVI9XCIke0RFRkFVTFRfVEVTVF9QQUdFX0RJUn1cIikKK0FERF9ERUZJTklUSU9OUygtRERF
RkFVTFRfVEhFTUVfUEFUSD1cIiR7VEhFTUVfQklOQVJZX0RJUn1cIikKKworQUREX0xJQlJBUlko
ZXdrVGVzdFV0aWxzCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0tUZXN0QmFzZS5jcHAKKyAgICAke1dFQktJVF9ESVJ9L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXS1Rlc3RWaWV3LmNwcAorKQorCitTRVQoV0VCS0lUX0VGTF9URVNUX0RJUiAiJHtXRUJLSVRf
RElSfS9lZmwvdGVzdHMvIikKKworU0VUKEVXS1VuaXRUZXN0c19CSU5BUklFUworICAgIHRlc3Rf
ZXdrX3ZpZXcKKykKKworRk9SRUFDSCh0ZXN0TmFtZSAke0VXS1VuaXRUZXN0c19CSU5BUklFU30p
CisgICAgQUREX0VYRUNVVEFCTEUoYmluLyR7dGVzdE5hbWV9ICR7V0VCS0lUX0VGTF9URVNUX0RJ
Un0vJHt0ZXN0TmFtZX0uY3BwICR7V0VCS0lUX0VGTF9URVNUX0RJUn0vdGVzdF9ydW5uZXIuY3Bw
KQorICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhiaW4vJHt0ZXN0TmFtZX0gJHtFV0tVbml0VGVz
dHNfTElCUkFSSUVTfSBld2tUZXN0VXRpbHMgZ3Rlc3QgcHRocmVhZCkKKyAgICBBRERfVEFSR0VU
X1BST1BFUlRJRVMoYmluLyR7dGVzdE5hbWV9IExJTktfRkxBR1MgIiR7RVdLVW5pdFRlc3RzX0xJ
TktfRkxBR1N9IikKKyAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMoYmluLyR7dGVzdE5hbWV9IFBS
T1BFUlRJRVMgRk9MREVSICJXZWJLaXQiKQorICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhiaW4v
JHt0ZXN0TmFtZX0gUFJPUEVSVElFUyBSVU5USU1FX09VVFBVVF9ESVJFQ1RPUlkgIiR7Q01BS0Vf
QklOQVJZX0RJUn0iKQorRU5ERk9SRUFDSCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggNjMxMjBiOS4u
OWZjNThiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEyLTA2LTIxICBL
cnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIElt
cGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgZnJhbWV3b3JrIGFuZCB1bml0IHRlc3RzIGZvciBXZWJL
aXQtRUZMIHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRlc3RpbmcgZnJhbWV3b3JrIGlzIGJhc2VkIG9uIGd0ZXN0IGxpYnJhcnkuIEd0ZXN0IGxp
YnJhcnkgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuIEZyYW1ld29yayBpcyBkZXZpZGVk
IGludG8gYmFzZSBwYXJ0IGFuZCB2aWV3IHBhcnQuCisgICAgICAgIEJhc2UgcGFydCB0YWtlcyBj
YXJlIG9mIGVmbCBpbml0aWFsaXphdGlvbiwgZGVmaW5lcyB0ZXN0IG1hY3JvcyBhbmQgcHJlcGFy
ZXMgdGVzdCB0byBydW4uIFZpZXcgcGFydCBpcyBhIGNvbnRleHQgb2YgZWFjaCB0ZXN0LgorCisg
ICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoRVdLVW5pdFRlc3RzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6
OmluaXQpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6c2h1dGRvd24pOgor
ICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6c2h1dGRvd25BbGwpOgorICAgICAg
ICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6c3RhcnRUZXN0KToKKyAgICAgICAgKEVXS1Vu
aXRUZXN0czo6RVdLVGVzdEJhc2U6OmVuZFRlc3QpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpF
V0tUZXN0QmFzZTo6Y3JlYXRlVGVzdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RC
YXNlOjpydW5UZXN0KToKKyAgICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNl
Lmg6IEFkZGVkLgorICAgICAgICAoRVdLVW5pdFRlc3RzKToKKyAgICAgICAgKEVXS1Rlc3RCYXNl
KToKKyAgICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RDb25maWcuaDogQWRkZWQu
CisgICAgICAgIChDb25maWcpOgorICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVz
dFZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tV
bml0VGVzdHM6OkVXS1Rlc3RFY29yZUV2YXM6OkVXS1Rlc3RFY29yZUV2YXMpOgorICAgICAgICAo
RVdLVW5pdFRlc3RzOjpFV0tUZXN0RWNvcmVFdmFzOjpldmFzKToKKyAgICAgICAgKEVXS1VuaXRU
ZXN0czo6RVdLVGVzdEVjb3JlRXZhczo6c2hvdyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVX
S1Rlc3RWaWV3OjpFV0tUZXN0Vmlldyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RW
aWV3Ojppbml0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OnNob3cpOgor
ICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6bWFpbkZyYW1lKToKKyAgICAgICAg
KEVXS1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OmV2YXMpOgorICAgICAgICAoRVdLVW5pdFRlc3Rz
OjpFV0tUZXN0Vmlldzo6YmluZEV2ZW50cyk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGls
cy9FV0tUZXN0Vmlldy5oOiBBZGRlZC4KKyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAg
IChFV0tUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVXS1Rlc3RWaWV3KToKKyAgICAgICAgKEVX
S1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6OndlYlZpZXcpOgorICAgICAgICAqIHRlc3RzL3Jlc291
cmNlcy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy90ZXN0
X2V3a192aWV3LmNwcDogQWRkZWQuCisgICAgICAgIChld2tWaWV3RWRpdGFibGVHZXRDYik6Cisg
ICAgICAgIChURVNUKToKKyAgICAgICAgKGV3a1ZpZXdVcmlHZXRDYik6CisgICAgICAgICogdGVz
dHMvdGVzdF9ydW5uZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHBhcnNlQ3VzdG9tQXJndW1lbnRz
KToKKyAgICAgICAgKG1haW4pOgorCiAyMDEyLTA2LTE5ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIENhbGxpbmcgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSBjYXVzZXMgYXNzZXJ0aW9uIGZhaWx1cmU6IG1fdmVyaWZpZXIuaXNTYWZlVG9V
c2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0tUZXN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VX
S1Rlc3RCYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDgzMDBh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGls
cy9FV0tUZXN0QmFzZS5jcHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RCYXNlLmgiCisKKyNpbmNsdWRlICJFV0tUZXN0
Q29uZmlnLmgiCisjaW5jbHVkZSAiRVdLVGVzdFZpZXcuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Lmg+
CisKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVkamUuaD4KKworaW50IEVXS1VuaXRU
ZXN0czo6RVdLVGVzdEJhc2U6OnVzZVgxMVdpbmRvdzsKKworbmFtZXNwYWNlIEVXS1VuaXRUZXN0
cyB7CisKK2Jvb2wgRVdLVGVzdEJhc2U6OmluaXQoKQoreworICAgIGlmICghZWNvcmVfZXZhc19p
bml0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZWRqZV9pbml0KCkpIHsK
KyAgICAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaW50IHJldCA9IGV3a19pbml0KCk7CisgICAgY29uc3QgY2hhciogcHJveHlV
cmkgPSBnZXRlbnYoImh0dHBfcHJveHkiKTsKKworICAgIGlmIChyZXQgJiYgcHJveHlVcmkpCisg
ICAgICAgIGV3a19uZXR3b3JrX3Byb3h5X3VyaV9zZXQocHJveHlVcmkpOworCisgICAgcmV0dXJu
IHJldDsKK30KKwordm9pZCBFV0tUZXN0QmFzZTo6c2h1dGRvd24oKQoreworICAgIGVjb3JlX2V2
YXNfc2h1dGRvd24oKTsKKyAgICBlZGplX3NodXRkb3duKCk7CisgICAgZXdrX3NodXRkb3duKCk7
Cit9CisKK3ZvaWQgRVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKCkKK3sKKyAgICBpbnQgY291bnQg
PSAwOworCisgICAgd2hpbGUgKChjb3VudCA9IGVjb3JlX2V2YXNfc2h1dGRvd24oKSkgPiAwKSB7
IH0KKyAgICB3aGlsZSAoKGNvdW50ID0gZWRqZV9zaHV0ZG93bigpKSA+IDApIHsgfQorICAgIHdo
aWxlICgoY291bnQgPSBld2tfc2h1dGRvd24oKSkgPiAwKSB7IH0KK30KKwordm9pZCBFV0tUZXN0
QmFzZTo6c3RhcnRUZXN0KCkKK3sKKyAgICBlY29yZV9tYWluX2xvb3BfYmVnaW4oKTsKK30KKwor
dm9pZCBFV0tUZXN0QmFzZTo6ZW5kVGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQo
KTsKK30KKworYm9vbCBFV0tUZXN0QmFzZTo6Y3JlYXRlVGVzdChjb25zdCBjaGFyKiB1cmwsIHZv
aWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBj
aGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIEVGTF9JTklUX1JFVCgp
OworCisgICAgRVdLVGVzdEVjb3JlRXZhcyBldmFzKHVzZVgxMVdpbmRvdyk7CisgICAgaWYgKCFl
dmFzLmV2YXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGV2YXMuc2hvdygpOworCisg
ICAgRVdLVGVzdFZpZXcgdmlldyhldmFzLmV2YXMoKSwgdXJsKTsKKyAgICBpZiAoIXZpZXcuaW5p
dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB2aWV3LmJpbmRFdmVudHMoZXZlbnRf
Y2FsbGJhY2ssIGV2ZW50X25hbWUsIGV2ZW50X2RhdGEpOworICAgIHZpZXcuc2hvdygpOworCisg
ICAgU1RBUlRfVEVTVCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRVdLVGVzdEJh
c2U6OnJ1blRlc3Qodm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpCit7CisgICAg
cmV0dXJuIGNyZWF0ZVRlc3QoQ29uZmlnOjpkZWZhdWx0VGVzdFBhZ2UsIGV2ZW50X2NhbGxiYWNr
LCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKK30KKworYm9vbCBFV0tUZXN0QmFzZTo6cnVuVGVz
dChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2Jq
ZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQor
eworICAgIHJldHVybiBjcmVhdGVUZXN0KHVybCwgZXZlbnRfY2FsbGJhY2ssIGV2ZW50X25hbWUs
IGV2ZW50X2RhdGEpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9V
bml0VGVzdFV0aWxzL0VXS1Rlc3RCYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzBkMzc3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaApAQCAtMCwwICsxLDcwIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUg
R05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkg
VGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisK
KyNpZm5kZWYgRVdLVGVzdEJhc2VfaAorI2RlZmluZSBFV0tUZXN0QmFzZV9oCisKKyNpbmNsdWRl
IDxFdmFzLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2RlZmluZSBSVU5fVEVTVChh
cmdzLi4uKSAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgQVNTRVJUX0VRKHRydWUsIEVXS1Rl
c3RCYXNlOjpydW5UZXN0KGFyZ3MpKTsgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUg
U1RBUlRfVEVTVCgpICAgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OnN0
YXJ0VGVzdCgpOyAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEVORF9URVNUKCkgICAg
XAorICAgIGRvIHsgICAgXAorICAgICAgICBFV0tUZXN0QmFzZTo6ZW5kVGVzdCgpOyBcCisgICAg
fSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVF9SRVQoKSAgXAorICAgIGRvIHsgICAgXAor
ICAgICAgICBpZiAoIUVXS1Rlc3RCYXNlOjppbml0KCkpICAgXAorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOyAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFRkxfSU5JVCgpICBcCisg
ICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RCYXNlOjppbml0KCk7ICAgIFwKKyAgICB9IHdo
aWxlICgwKQorCituYW1lc3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdLVGVzdEJhc2Ug
eworICAgIHN0YXRpYyBib29sIGNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZl
bnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZl
bnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSk7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaW5p
dCgpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duKCk7CisgICAgc3RhdGljIHZvaWQgc2h1dGRv
d25BbGwoKTsKKyAgICBzdGF0aWMgdm9pZCBzdGFydFRlc3QoKTsKKyAgICBzdGF0aWMgdm9pZCBl
bmRUZXN0KCk7CisKKyAgICBzdGF0aWMgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9p
ZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNo
YXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworICAgIHN0YXRpYyBib29sIHJ1blRl
c3Qodm9pZCAoKmV2ZW50X2NhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNv
bnN0IGNoYXIqIGV2ZW50X25hbWUsIHZvaWQqIGV2ZW50X2RhdGEpOworCisgICAgc3RhdGljIGlu
dCB1c2VYMTFXaW5kb3c7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmggYi9Tb3VyY2UvV2Vi
S2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RDb25maWcuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWNmNmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmgKQEAgLTAsMCAr
MSwzMSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAy
MTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVXS1Rlc3RDb25maWdfaAorI2RlZmluZSBFV0tU
ZXN0Q29uZmlnX2gKKworbmFtZXNwYWNlIEVXS1VuaXRUZXN0cyB7CituYW1lc3BhY2UgQ29uZmln
IHsKK3N0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFZpZXdXaWR0aCA9IDYwMDsKK3N0YXRpYyBjb25z
dCBpbnQgZGVmYXVsdFZpZXdIZWlnaHQgPSA4MDA7CitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZGVmYXVsdFRoZW1lUGF0aCA9IERFRkFVTFRfVEhFTUVfUEFUSCIvZGVmYXVsdC5lZGoiOworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlZmF1bHRUZXN0UGFnZSA9ICJmaWxlOi8vIkRFRkFVTFRf
VEVTVF9QQUdFX0RJUiIvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbCI7Cit9Cit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RW
aWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDI5YjgxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tU
ZXN0Vmlldy5jcHAKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1
aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkVXS1Rlc3RWaWV3LmgiCisKKyNpbmNsdWRlICJFV0tUZXN0Q29uZmln
LmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworbmFtZXNwYWNlIEVXS1VuaXRUZXN0cyB7CisKK0VXS1Rlc3RFY29yZUV2YXM6OkVXS1Rlc3RF
Y29yZUV2YXMoaW50IHVzZVgxMVdpbmRvdykKK3sKKyAgICBpZiAodXNlWDExV2luZG93KQorICAg
ICAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfbmV3KDAsIDAsIDAsIENvbmZp
Zzo6ZGVmYXVsdFZpZXdXaWR0aCwgQ29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCwgMCkpOworICAg
IGVsc2UKKyAgICAgICAgbV9lY29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX2J1ZmZlcl9u
ZXcoQ29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoLCBDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KSk7
Cit9CisKK0VXS1Rlc3RFY29yZUV2YXM6OkVXS1Rlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5n
aW5lX25hbWUsIGludCB2aWV3cG9ydF94LCBpbnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3cs
IGludCB2aWV3cG9ydF9oLCBjb25zdCBjaGFyKiBleHRyYV9vcHRpb25zLCBpbnQgdXNlWDExV2lu
ZG93KQoreworICAgIGlmICh1c2VYMTFXaW5kb3cpCisgICAgICAgIG1fZWNvcmVFdmFzID0gYWRv
cHRQdHIoZWNvcmVfZXZhc19uZXcoZW5naW5lX25hbWUsIHZpZXdwb3J0X3gsIHZpZXdwb3J0X3ks
IHZpZXdwb3J0X3csIHZpZXdwb3J0X2gsIGV4dHJhX29wdGlvbnMpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19idWZmZXJfbmV3KHZpZXdwb3J0
X3gsIHZpZXdwb3J0X3kpKTsKK30KKworRXZhcyogRVdLVGVzdEVjb3JlRXZhczo6ZXZhcygpCit7
CisgICAgaWYgKG1fZWNvcmVFdmFzLmdldCgpKQorICAgICAgICByZXR1cm4gZWNvcmVfZXZhc19n
ZXQobV9lY29yZUV2YXMuZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEVXS1Rlc3RF
Y29yZUV2YXM6OnNob3coKQoreworICAgIGlmIChtX2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAgICAg
ZWNvcmVfZXZhc19zaG93KG1fZWNvcmVFdmFzLmdldCgpKTsKK30KKworRVdLVGVzdFZpZXc6OkVX
S1Rlc3RWaWV3KEV2YXMqIGV2YXMpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKENv
bmZpZzo6ZGVmYXVsdFRlc3RQYWdlKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3
KQorICAgICwgbV93aWR0aChDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdo
dChDb25maWc6OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVz
dFZpZXcoRXZhcyogZXZhcywgY29uc3QgY2hhciogdXJsKQorICAgIDogbV9ldmFzKGV2YXMpCisg
ICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZShUaWxlZFZpZXcpCisgICAg
LCBtX3dpZHRoKENvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0KENvbmZp
Zzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tUZXN0VmlldyhF
dmFzKiBldmFzLCBFd2tWaWV3VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmwpCisgICAgOiBtX2V2
YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKHR5cGUp
CisgICAgLCBtX3dpZHRoKENvbmZpZzo6ZGVmYXVsdFZpZXdXaWR0aCkKKyAgICAsIG1faGVpZ2h0
KENvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQpCit7Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tUZXN0
VmlldyhFdmFzKiBldmFzLCBFd2tWaWV3VHlwZSB0eXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3
aWR0aCwgaW50IGhlaWdodCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91cmwodXJsKQor
ICAgICwgbV9kZWZhdWx0Vmlld1R5cGUodHlwZSkKKyAgICAsIG1fd2lkdGgod2lkdGgpCisgICAg
LCBtX2hlaWdodChoZWlnaHQpCit7Cit9CisKK2Jvb2wgRVdLVGVzdFZpZXc6OmluaXQoKQorewor
ICAgIGlmICghbV9ldmFzIHx8IG1fdXJsLmVtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHN3aXRjaCAobV9kZWZhdWx0Vmlld1R5cGUpIHsKKyAgICBjYXNlIFNpbmdsZVZpZXc6
CisgICAgICAgIG1fd2ViVmlldyA9IGFkb3B0UHRyKGV3a192aWV3X3NpbmdsZV9hZGQobV9ldmFz
KSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUaWxlZFZpZXc6CisgICAgICAgIG1fd2Vi
VmlldyA9IGFkb3B0UHRyKGV3a192aWV3X3RpbGVkX2FkZChtX2V2YXMpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgaWYgKCFtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGV3a192aWV3X3RoZW1lX3NldChtX3dlYlZpZXcuZ2V0KCksIENvbmZpZzo6
ZGVmYXVsdFRoZW1lUGF0aCk7CisgICAgZXdrX3ZpZXdfdXJpX3NldChtX3dlYlZpZXcuZ2V0KCks
IG1fdXJsLmNfc3RyKCkpOworfQorCit2b2lkIEVXS1Rlc3RWaWV3OjpzaG93KCkKK3sKKyAgICBp
ZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShtX3dlYlZpZXcuZ2V0KCksIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBldmFzX29iamVj
dF9zaG93KG1fd2ViVmlldy5nZXQoKSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fd2Vi
Vmlldy5nZXQoKSwgRUlOQV9UUlVFKTsKK30KKworRXZhc19PYmplY3QqIEVXS1Rlc3RWaWV3Ojpt
YWluRnJhbWUoKQoreworICAgIGlmIChtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBl
d2tfdmlld19mcmFtZV9tYWluX2dldChtX3dlYlZpZXcuZ2V0KCkpOworICAgIHJldHVybiAwOwor
fQorCitFdmFzKiBFV0tUZXN0Vmlldzo6ZXZhcygpCit7CisgICAgaWYgKG1fd2ViVmlldy5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fd2ViVmlldy5nZXQoKSk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRVdLVGVzdFZpZXc6OmJpbmRFdmVudHModm9pZCAo
KmNhbGxiYWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZSwgdm9pZCogcHRyKQoreworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwobV93ZWJWaWV3Lmdl
dCgpLCBldmVudE5hbWUsIGNhbGxiYWNrKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19hZGQobV93ZWJWaWV3LmdldCgpLCBldmVudE5hbWUsIGNhbGxiYWNrLCBwdHIpOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rl
c3RWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RW
aWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQxNWQwZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVz
dFZpZXcuaApAQCAtMCwwICsxLDc1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz
MzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpZm5kZWYgRVdLVGVzdFZpZXdf
aAorI2RlZmluZSBFV0tUZXN0Vmlld19oCisKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5j
bHVkZSA8RXZhcy5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCitjbGFzcyBFV0tUZXN0RWNvcmVFdmFzIHsK
K3B1YmxpYzoKKyAgICBFV0tUZXN0RWNvcmVFdmFzKGludCB1c2VYMTFXaW5kb3cpOworICAgIEVX
S1Rlc3RFY29yZUV2YXMoY29uc3QgY2hhciogZW5naW5lX25hbWUsIGludCB2aWV3cG9ydF94LCBp
bnQgdmlld3BvcnRfeSwgaW50IHZpZXdwb3J0X3csIGludCB2aWV3cG9ydF9oLCBjb25zdCBjaGFy
KiBleHRyYV9vcHRpb25zLCBpbnQgdXNlWDExV2luZG93KTsKKworICAgIEV2YXMqIGV2YXMoKTsK
KyAgICB2b2lkIHNob3coKTsKKworcHJpdmF0ZToKKyAgICBPd25QdHI8RWNvcmVfRXZhcz4gbV9l
Y29yZUV2YXM7Cit9OworCitjbGFzcyBFV0tUZXN0VmlldyB7CitwdWJsaWM6CisgICAgZW51bSBF
d2tWaWV3VHlwZSB7CisgICAgICAgIFNpbmdsZVZpZXcgPSAwLAorICAgICAgICBUaWxlZFZpZXcs
CisgICAgfTsKKworICAgIGV4cGxpY2l0IEVXS1Rlc3RWaWV3KEV2YXMqKTsKKyAgICBFV0tUZXN0
VmlldyhFdmFzKiwgY29uc3QgY2hhciogdXJsKTsKKyAgICBFV0tUZXN0VmlldyhFdmFzKiwgRXdr
Vmlld1R5cGUsIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRVdLVGVzdFZpZXcoRXZhcyosIEV3a1Zp
ZXdUeXBlLCBjb25zdCBjaGFyKiB1cmwsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICBF
dmFzX09iamVjdCogd2ViVmlldygpIHsgcmV0dXJuIG1fd2ViVmlldy5nZXQoKTsgfQorICAgIEV2
YXNfT2JqZWN0KiBtYWluRnJhbWUoKTsKKyAgICBFdmFzKiBldmFzKCk7CisgICAgdm9pZCBzaG93
KCk7CisKKyAgICBib29sIGluaXQoKTsKKyAgICB2b2lkIGJpbmRFdmVudHModm9pZCAoKmNhbGxi
YWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSwg
dm9pZCogcHRyKTsKKworcHJpdmF0ZToKKyAgICBFV0tUZXN0Vmlldyhjb25zdCBFV0tUZXN0Vmll
dyYpOworICAgIEVXS1Rlc3RWaWV3IG9wZXJhdG9yPShjb25zdCBFV0tUZXN0VmlldyYpOworCisg
ICAgRXZhcyogbV9ldmFzOworICAgIE93blB0cjxFdmFzX09iamVjdD4gbV93ZWJWaWV3OworCisg
ICAgaW50IG1fd2lkdGgsIG1faGVpZ2h0OworICAgIEV3a1ZpZXdUeXBlIG1fZGVmYXVsdFZpZXdU
eXBlOworICAgIHN0ZDo6c3RyaW5nIG1fdXJsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rlc3RfcGFnZS5o
dG1sIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvcmVzb3VyY2VzL2RlZmF1bHRfdGVzdF9wYWdl
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRkODFlNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rl
c3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsNiBAQAorPEhUTUw+Cis8Qk9EWT4KKzxIMiBhbGlnbj0i
Y2VudGVyIj5FRkwgVW5pdCBUZXN0czwvSDI+Cis8SDIgYWxpZ249ImNlbnRlciI+RGVmYXVsdCBU
ZXN0aW5nIFdlYiBQYWdlPC9IMj4KKzwvQk9EWT4KKzwvSFRNTD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvdGVzdF9ld2tfdmlldy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjRhMWM4OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rl
c3RfZXdrX3ZpZXcuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAy
MDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyAgICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1OSBUZW1wbGUgUGxhY2Us
IFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIgorI2luY2x1
ZGUgPEVXZWJLaXQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgRVdLVW5pdFRlc3RzOworCisvKioKKyogQGJyaWVmIENoZWNraW5nIHdoZXRoZXIgZnVuY3Rp
b24gcHJvcGVybHkgcmV0dXJucyBjb3JyZWN0IHZhbHVlLgorKi8KK3ZvaWQgZXdrVmlld0VkaXRh
YmxlR2V0Q2Iodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKK3sK
KyAgICBld2tfdmlld19lZGl0YWJsZV9zZXQobywgRUlOQV9GQUxTRSk7CisgICAgRVhQRUNUX0VR
KEVJTkFfRkFMU0UsIGV3a192aWV3X2VkaXRhYmxlX2dldChvKSk7CisgICAgRU5EX1RFU1QoKTsK
K30KKworVEVTVCh0ZXN0X2V3a192aWV3LCBld2tfdmlld19lZGl0YWJsZV9nZXQpCit7CisgICAg
UlVOX1RFU1QoZXdrVmlld0VkaXRhYmxlR2V0Q2IsICJsb2FkLGZpbmlzaGVkIiwgMCk7Cit9CisK
Ky8qKgorKiBAYnJpZWYgQ2hlY2tpbmcgd2hldGhlciBmdW5jdGlvbiByZXR1cm5zIGNvcnJlY3Qg
dXJpIHN0cmluZy4KKyovCit2b2lkIGV3a1ZpZXdVcmlHZXRDYih2b2lkKiBldmVudEluZm8sIEV2
YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQoreworICAgIEVYUEVDVF9TVFJFUSgiaHR0cDovL3d3
dy53ZWJraXQub3JnLyIsIGV3a192aWV3X3VyaV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9
CisKK1RFU1QodGVzdF9ld2tfdmlldywgZXdrX3ZpZXdfdXJpX2dldCkKK3sKKyAgICBSVU5fVEVT
VCgiaHR0cDovL3d3dy53ZWJraXQub3JnIiwgZXdrVmlld1VyaUdldENiLCAibG9hZCxmaW5pc2hl
ZCIsIDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ydW5u
ZXIuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvdGVzdF9ydW5uZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMmE2MWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC90ZXN0cy90ZXN0X3J1bm5lci5jcHAKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAg
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcg
VVNBCisqLworCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oIgorI2luY2x1
ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3N0YXRpYyB2b2lkIHBh
cnNlQ3VzdG9tQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBzdGF0aWMg
Y29uc3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKKyAgICAgICAgeyJ1c2VYMTFXaW5kb3ciLCBub19h
cmd1bWVudCwgJkVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnVzZVgxMVdpbmRvdywgdHJ1ZX0s
CisgICAgICAgIHswLCAwLCAwLCAwfQorICAgIH07CisKKyAgICBpbnQgb3B0aW9uOworICAgIHdo
aWxlICgob3B0aW9uID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIiIsIG9wdGlvbnMsIDApKSAh
PSAtMSkgeyB9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBh
dGV4aXQoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6c2h1dGRvd25BbGwpOworICAgIHBhcnNl
Q3VzdG9tQXJndW1lbnRzKGFyZ2MsIGFyZ3YpOworICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZVRl
c3QoJmFyZ2MsIGFyZ3YpOworICAgIHJldHVybiBSVU5fQUxMX1RFU1RTKCk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150180</attachid>
            <date>2012-06-29 08:12:13 -0700</date>
            <delta_ts>2012-06-29 18:20:35 -0700</delta_ts>
            <desc>Corrected patch with build scripts and implementation - updating</desc>
            <filename>ut-patch.patch</filename>
            <type>text/plain</type>
            <size>23240</size>
            <attacher name="Krzysztof Czech">k.czech</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMTIyNjU3MS4uMjczZGE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAor
MjAxMi0wNi0yOSAgS3J6eXN6dG9mIEN6ZWNoICA8ay5jemVjaEBzYW1zdW5nLmNvbT4KKworICAg
ICAgICBbRUZMXSBBZGQgc3VwcG9ydCBmb3IgVW5pdCBUZXN0cywgYmFzZWQgb24gdGhlIGd0ZXN0
IGxpYnJhcnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IENoYW5nIFNodS4KKworICAgICAgICBBZGQg
Y29uZmlndXJhdGlvbiBmb3IgYnVpbGRpbmcgZ3Rlc3QgbGlicmFyeSwgdGVzdGluZyBmcmFtZXdv
cmsgYW5kIHVuaXQgdGVzdHMuCisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKwogMjAx
Mi0wNi0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMTM5OC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNt
YWtlCmluZGV4IGUxYTk5ZTIuLmZmMzI0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
MjkzLDMgKzI5Myw4MSBAQCBJTlNUQUxMKEZJTEVTICR7RVdlYktpdF9IRUFERVJTfQogCiBJTlNU
QUxMKEZJTEVTICR7V2ViS2l0X1RIRU1FfQogICAgICAgICBERVNUSU5BVElPTiAke0RBVEFfSU5T
VEFMTF9ESVJ9L3RoZW1lcykKKworSU5DTFVERV9ESVJFQ1RPUklFUygke1RISVJEUEFSVFlfRElS
fS9ndGVzdAorICAgICAgICAgICAgICAgICAgICAke1RISVJEUEFSVFlfRElSfS9ndGVzdC9pbmNs
dWRlCispCisKK1NFVChHVEVTVF9TT1VSQ0VTICIke1RISVJEUEFSVFlfRElSfS9ndGVzdC9zcmMi
KQorCitBRERfTElCUkFSWShndGVzdAorICAgICR7R1RFU1RfU09VUkNFU30vZ3Rlc3QuY2MKKyAg
ICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWRlYXRoLXRlc3QuY2MKKyAgICAke0dURVNUX1NPVVJD
RVN9L2d0ZXN0X21haW4uY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LWZpbGVwYXRoLmNj
CisgICAgJHtHVEVTVF9TT1VSQ0VTfS9ndGVzdC1wb3J0LmNjCisgICAgJHtHVEVTVF9TT1VSQ0VT
fS9ndGVzdC10ZXN0LXBhcnQuY2MKKyAgICAke0dURVNUX1NPVVJDRVN9L2d0ZXN0LXR5cGVkLXRl
c3QuY2MKKykKKworU0VUKEVXS1VuaXRUZXN0c19MSUJSQVJJRVMKKyAgICAke0phdmFTY3JpcHRD
b3JlX0xJQlJBUllfTkFNRX0KKyAgICAke1dlYkNvcmVfTElCUkFSWV9OQU1FfQorICAgICR7V2Vi
S2l0X0xJQlJBUllfTkFNRX0KKyAgICAke0VDT1JFX0xJQlJBUklFU30KKyAgICAke0VDT1JFX0VW
QVNfTElCUkFSSUVTfQorICAgICR7RVZBU19MSUJSQVJJRVN9CisgICAgJHtFREpFX0xJQlJBUklF
U30KKykKKworU0VUKEVXS1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgIiR7Q01B
S0VfU09VUkNFX0RJUn0vU291cmNlIgorICAgICIke1dFQktJVF9ESVJ9L2VmbC9ld2siCisgICAg
IiR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL3NyYy9Vbml0VGVzdFV0aWxzIgorICAgICIke0pBVkFT
Q1JJUFRDT1JFX0RJUn0iCisgICAgIiR7V1RGX0RJUn0iCisgICAgIiR7V1RGX0RJUn0vd3RmIgor
ICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQorICAgICR7RUNPUkVfRVZBU19JTkNMVURFX0RJUlN9
CisgICAgJHtFVkFTX0lOQ0xVREVfRElSU30KKyAgICAke0VESkVfSU5DTFVERV9ESVJTfQorKQor
CitTRVQoRVdLVW5pdFRlc3RzX0xJTktfRkxBR1MKKyAgICAke0VDT1JFX0xERkxBR1N9CisgICAg
JHtFQ09SRV9FVkFTX0xERkxBR1N9CisgICAgJHtFVkFTX0xERkxBR1N9CisgICAgJHtFREpFX0xE
RkxBR1N9CispCisKK0lGIChFTkFCTEVfR0xJQl9TVVBQT1JUKQorICAgIExJU1QoQVBQRU5EIEVX
S1VuaXRUZXN0c19JTkNMVURFX0RJUkVDVE9SSUVTICIke1dURl9ESVJ9L3d0Zi9nb2JqZWN0IikK
KyAgICBMSVNUKEFQUEVORCBFV0tVbml0VGVzdHNfTElCUkFSSUVTCisgICAgICAgICR7R2xpYl9M
SUJSQVJJRVN9CisgICAgICAgICR7R3RocmVhZF9MSUJSQVJJRVN9CisgICAgKQorRU5ESUYgKCkK
KworU0VUKERFRkFVTFRfVEVTVF9QQUdFX0RJUiAke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJjZS9X
ZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcykKKworQUREX0RFRklOSVRJT05TKC1EREVGQVVMVF9U
RVNUX1BBR0VfRElSPVwiJHtERUZBVUxUX1RFU1RfUEFHRV9ESVJ9XCIpCitBRERfREVGSU5JVElP
TlMoLURERUZBVUxUX1RIRU1FX1BBVEg9XCIke1RIRU1FX0JJTkFSWV9ESVJ9XCIpCisKK0FERF9M
SUJSQVJZKGV3a1Rlc3RVdGlscworICAgICR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzL1VuaXRUZXN0
VXRpbHMvRVdLVGVzdEJhc2UuY3BwCisgICAgJHtXRUJLSVRfRElSfS9lZmwvdGVzdHMvVW5pdFRl
c3RVdGlscy9FV0tUZXN0Vmlldy5jcHAKKykKK1RBUkdFVF9MSU5LX0xJQlJBUklFUyhld2tUZXN0
VXRpbHMgJHtFV0tVbml0VGVzdHNfTElCUkFSSUVTfSkKKworU0VUKFdFQktJVF9FRkxfVEVTVF9E
SVIgIiR7V0VCS0lUX0RJUn0vZWZsL3Rlc3RzLyIpCisKK1NFVChFV0tVbml0VGVzdHNfQklOQVJJ
RVMKKyAgICB0ZXN0X2V3a192aWV3CispCisKK0ZPUkVBQ0godGVzdE5hbWUgJHtFV0tVbml0VGVz
dHNfQklOQVJJRVN9KQorICAgIEFERF9FWEVDVVRBQkxFKCR7dGVzdE5hbWV9ICR7V0VCS0lUX0VG
TF9URVNUX0RJUn0vJHt0ZXN0TmFtZX0uY3BwICR7V0VCS0lUX0VGTF9URVNUX0RJUn0vdGVzdF9y
dW5uZXIuY3BwKQorICAgIFRBUkdFVF9MSU5LX0xJQlJBUklFUygke3Rlc3ROYW1lfSAke0VXS1Vu
aXRUZXN0c19MSUJSQVJJRVN9IGV3a1Rlc3RVdGlscyBndGVzdCBwdGhyZWFkKQorICAgIEFERF9U
QVJHRVRfUFJPUEVSVElFUygke3Rlc3ROYW1lfSBMSU5LX0ZMQUdTICIke0VXS1VuaXRUZXN0c19M
SU5LX0ZMQUdTfSIpCisgICAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKCR7dGVzdE5hbWV9IFBST1BF
UlRJRVMgRk9MREVSICJXZWJLaXQiKQorRU5ERk9SRUFDSCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXgg
ZDQ2ZDMxZC4uYjc5ZWJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEy
LTA2LTI5ICBLcnp5c3p0b2YgQ3plY2ggIDxrLmN6ZWNoQHNhbXN1bmcuY29tPiwgVG9tYXN6IE1v
cmF3c2tpIDx0Lm1vcmF3c2tpQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIEltcGxlbWVu
dGF0aW9uIG9mIHRlc3RpbmcgZnJhbWV3b3JrIGFuZCB1bml0IHRlc3RzIGZvciBXZWJLaXQtRUZM
IHBvcnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODUwOQorCisgICAgICAgIFJldmlld2VkIGJ5IENoYW5nIFNodS4KKworICAgICAgICBUZXN0aW5n
IGZyYW1ld29yayBpcyBiYXNlZCBvbiBndGVzdCBsaWJyYXJ5LiBHdGVzdCBsaWJyYXJ5IGlzIHBh
cnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0LiBGcmFtZXdvcmsgaXMgZGV2aWRlZCBpbnRvIGJhc2Ug
cGFydCBhbmQgdmlldyBwYXJ0LgorICAgICAgICBCYXNlIHBhcnQgdGFrZXMgY2FyZSBvZiBlZmwg
aW5pdGlhbGl6YXRpb24sIGRlZmluZXMgdGVzdCBtYWNyb3MgYW5kIHByZXBhcmVzIHRlc3QgdG8g
cnVuLiBWaWV3IHBhcnQgaXMgYSBjb250ZXh0IG9mIGVhY2ggdGVzdC4KKworICAgICAgICAqIHRl
c3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEVXS1Vu
aXRUZXN0cyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjppbml0KToKKyAg
ICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duKToKKyAgICAgICAgKEVX
S1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKToKKyAgICAgICAgKEVXS1VuaXRU
ZXN0czo6RVdLVGVzdEJhc2U6OnN0YXJ0VGVzdCk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVX
S1Rlc3RCYXNlOjplbmRUZXN0KToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6
OmNyZWF0ZVRlc3QpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0QmFzZTo6cnVuVGVz
dCk6CisgICAgICAgICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFzZS5oOiBBZGRlZC4K
KyAgICAgICAgKEVXS1VuaXRUZXN0cyk6CisgICAgICAgIChFV0tUZXN0QmFzZSk6CisgICAgICAg
ICogdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmg6IEFkZGVkLgorICAgICAgICAo
Q29uZmlnKToKKyAgICAgICAgKiB0ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmNwcDog
QWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpF
V0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0
czo6RVdLVGVzdEVjb3JlRXZhczo6ZXZhcyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rl
c3RFY29yZUV2YXM6OnNob3cpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6
RVdLVGVzdFZpZXcpOgorICAgICAgICAoRVdLVW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6aW5pdCk6
CisgICAgICAgIChFV0tVbml0VGVzdHM6OkVXS1Rlc3RWaWV3OjpzaG93KToKKyAgICAgICAgKEVX
S1VuaXRUZXN0czo6RVdLVGVzdFZpZXc6Om1haW5GcmFtZSk6CisgICAgICAgIChFV0tVbml0VGVz
dHM6OkVXS1Rlc3RWaWV3OjpldmFzKToKKyAgICAgICAgKEVXS1VuaXRUZXN0czo6RVdLVGVzdFZp
ZXc6OmJpbmRFdmVudHMpOgorICAgICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZp
ZXcuaDogQWRkZWQuCisgICAgICAgIChFV0tVbml0VGVzdHMpOgorICAgICAgICAoRVdLVGVzdEVj
b3JlRXZhcyk6CisgICAgICAgIChFV0tUZXN0Vmlldyk6CisgICAgICAgIChFV0tVbml0VGVzdHM6
OkVXS1Rlc3RWaWV3Ojp3ZWJWaWV3KToKKyAgICAgICAgKiB0ZXN0cy9yZXNvdXJjZXMvZGVmYXVs
dF90ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvdGVzdF9ld2tfdmlldy5j
cHA6IEFkZGVkLgorICAgICAgICAoZXdrVmlld0VkaXRhYmxlR2V0Q2IpOgorICAgICAgICAoVEVT
VCk6CisgICAgICAgIChld2tWaWV3VXJpR2V0Q2IpOgorICAgICAgICAqIHRlc3RzL3Rlc3RfcnVu
bmVyLmNwcDogQWRkZWQuCisgICAgICAgIChwYXJzZUN1c3RvbUFyZ3VtZW50cyk6CisgICAgICAg
IChtYWluKToKKwogMjAxMi0wNi0yNyAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBn
bWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEyMTM5OC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdEJh
c2UuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0QmFz
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA4MzAwYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVz
dEJhc2UuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0
ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJFV0tUZXN0QmFzZS5oIgorCisjaW5jbHVkZSAiRVdLVGVzdENvbmZpZy5o
IgorI2luY2x1ZGUgIkVXS1Rlc3RWaWV3LmgiCisjaW5jbHVkZSA8RVdlYktpdC5oPgorCisjaW5j
bHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxFZGplLmg+CisKK2ludCBFV0tVbml0VGVzdHM6OkVX
S1Rlc3RCYXNlOjp1c2VYMTFXaW5kb3c7CisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworCiti
b29sIEVXS1Rlc3RCYXNlOjppbml0KCkKK3sKKyAgICBpZiAoIWVjb3JlX2V2YXNfaW5pdCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVkamVfaW5pdCgpKSB7CisgICAgICAg
IGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGludCByZXQgPSBld2tfaW5pdCgpOworICAgIGNvbnN0IGNoYXIqIHByb3h5VXJpID0gZ2V0
ZW52KCJodHRwX3Byb3h5Iik7CisKKyAgICBpZiAocmV0ICYmIHByb3h5VXJpKQorICAgICAgICBl
d2tfbmV0d29ya19wcm94eV91cmlfc2V0KHByb3h5VXJpKTsKKworICAgIHJldHVybiByZXQ7Cit9
CisKK3ZvaWQgRVdLVGVzdEJhc2U6OnNodXRkb3duKCkKK3sKKyAgICBlY29yZV9ldmFzX3NodXRk
b3duKCk7CisgICAgZWRqZV9zaHV0ZG93bigpOworICAgIGV3a19zaHV0ZG93bigpOworfQorCit2
b2lkIEVXS1Rlc3RCYXNlOjpzaHV0ZG93bkFsbCgpCit7CisgICAgaW50IGNvdW50ID0gMDsKKwor
ICAgIHdoaWxlICgoY291bnQgPSBlY29yZV9ldmFzX3NodXRkb3duKCkpID4gMCkgeyB9CisgICAg
d2hpbGUgKChjb3VudCA9IGVkamVfc2h1dGRvd24oKSkgPiAwKSB7IH0KKyAgICB3aGlsZSAoKGNv
dW50ID0gZXdrX3NodXRkb3duKCkpID4gMCkgeyB9Cit9CisKK3ZvaWQgRVdLVGVzdEJhc2U6OnN0
YXJ0VGVzdCgpCit7CisgICAgZWNvcmVfbWFpbl9sb29wX2JlZ2luKCk7Cit9CisKK3ZvaWQgRVdL
VGVzdEJhc2U6OmVuZFRlc3QoKQoreworICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7Cit9CisK
K2Jvb2wgRVdLVGVzdEJhc2U6OmNyZWF0ZVRlc3QoY29uc3QgY2hhciogdXJsLCB2b2lkICgqZXZl
bnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKSwgY29uc3QgY2hhciogZXZl
bnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICBFRkxfSU5JVF9SRVQoKTsKKworICAg
IEVXS1Rlc3RFY29yZUV2YXMgZXZhcyh1c2VYMTFXaW5kb3cpOworICAgIGlmICghZXZhcy5ldmFz
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBldmFzLnNob3coKTsKKworICAgIEVXS1Rl
c3RWaWV3IHZpZXcoZXZhcy5ldmFzKCksIHVybCk7CisgICAgaWYgKCF2aWV3LmluaXQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdmlldy5iaW5kRXZlbnRzKGV2ZW50X2NhbGxiYWNr
LCBldmVudF9uYW1lLCBldmVudF9kYXRhKTsKKyAgICB2aWV3LnNob3coKTsKKworICAgIFNUQVJU
X1RFU1QoKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEVXS1Rlc3RCYXNlOjpydW5U
ZXN0KHZvaWQgKCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBj
b25zdCBjaGFyKiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKQoreworICAgIHJldHVybiBj
cmVhdGVUZXN0KENvbmZpZzo6ZGVmYXVsdFRlc3RQYWdlLCBldmVudF9jYWxsYmFjaywgZXZlbnRf
bmFtZSwgZXZlbnRfZGF0YSk7Cit9CisKK2Jvb2wgRVdLVGVzdEJhc2U6OnJ1blRlc3QoY29uc3Qg
Y2hhciogdXJsLCB2b2lkICgqZXZlbnRfY2FsbGJhY2spKHZvaWQqLCBFdmFzX09iamVjdCosIHZv
aWQqKSwgY29uc3QgY2hhciogZXZlbnRfbmFtZSwgdm9pZCogZXZlbnRfZGF0YSkKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlVGVzdCh1cmwsIGV2ZW50X2NhbGxiYWNrLCBldmVudF9uYW1lLCBldmVudF9k
YXRhKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRl
c3RVdGlscy9FV0tUZXN0QmFzZS5oIGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RV
dGlscy9FV0tUZXN0QmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMw
ZDM3NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVz
dFV0aWxzL0VXS1Rlc3RCYXNlLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAg
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVm
IEVXS1Rlc3RCYXNlX2gKKyNkZWZpbmUgRVdLVGVzdEJhc2VfaAorCisjaW5jbHVkZSA8RXZhcy5o
PgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNkZWZpbmUgUlVOX1RFU1QoYXJncy4uLikg
ICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEFTU0VSVF9FUSh0cnVlLCBFV0tUZXN0QmFzZTo6
cnVuVGVzdChhcmdzKSk7ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNUQVJUX1RF
U1QoKSAgICBcCisgICAgZG8geyAgICBcCisgICAgICAgIEVXS1Rlc3RCYXNlOjpzdGFydFRlc3Qo
KTsgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBFTkRfVEVTVCgpICAgIFwKKyAgICBk
byB7ICAgIFwKKyAgICAgICAgRVdLVGVzdEJhc2U6OmVuZFRlc3QoKTsgXAorICAgIH0gd2hpbGUg
KDApCisKKyNkZWZpbmUgRUZMX0lOSVRfUkVUKCkgIFwKKyAgICBkbyB7ICAgIFwKKyAgICAgICAg
aWYgKCFFV0tUZXN0QmFzZTo6aW5pdCgpKSAgIFwKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
ICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRUZMX0lOSVQoKSAgXAorICAgIGRvIHsg
ICAgXAorICAgICAgICBFV0tUZXN0QmFzZTo6aW5pdCgpOyAgICBcCisgICAgfSB3aGlsZSAoMCkK
KworbmFtZXNwYWNlIEVXS1VuaXRUZXN0cyB7CisKK2NsYXNzIEVXS1Rlc3RCYXNlIHsKKyAgICBz
dGF0aWMgYm9vbCBjcmVhdGVUZXN0KGNvbnN0IGNoYXIqIHVybCwgdm9pZCAoKmV2ZW50X2NhbGxi
YWNrKSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiksIGNvbnN0IGNoYXIqIGV2ZW50X25hbWUs
IHZvaWQqIGV2ZW50X2RhdGEpOworcHVibGljOgorICAgIHN0YXRpYyBib29sIGluaXQoKTsKKyAg
ICBzdGF0aWMgdm9pZCBzaHV0ZG93bigpOworICAgIHN0YXRpYyB2b2lkIHNodXRkb3duQWxsKCk7
CisgICAgc3RhdGljIHZvaWQgc3RhcnRUZXN0KCk7CisgICAgc3RhdGljIHZvaWQgZW5kVGVzdCgp
OworCisgICAgc3RhdGljIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB1cmwsIHZvaWQgKCpldmVu
dF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVu
dF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKyAgICBzdGF0aWMgYm9vbCBydW5UZXN0KHZvaWQg
KCpldmVudF9jYWxsYmFjaykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFy
KiBldmVudF9uYW1lLCB2b2lkKiBldmVudF9kYXRhKTsKKworICAgIHN0YXRpYyBpbnQgdXNlWDEx
V2luZG93OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oIGIvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Q29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYTFjZjZlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdENvbmZpZy5oCkBAIC0wLDAgKzEsMzEgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gU2VlIHRoZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAg
ICBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3
IFVTQQorKi8KKworI2lmbmRlZiBFV0tUZXN0Q29uZmlnX2gKKyNkZWZpbmUgRVdLVGVzdENvbmZp
Z19oCisKK25hbWVzcGFjZSBFV0tVbml0VGVzdHMgeworbmFtZXNwYWNlIENvbmZpZyB7CitzdGF0
aWMgY29uc3QgaW50IGRlZmF1bHRWaWV3V2lkdGggPSA2MDA7CitzdGF0aWMgY29uc3QgaW50IGRl
ZmF1bHRWaWV3SGVpZ2h0ID0gODAwOworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGRlZmF1bHRU
aGVtZVBhdGggPSBERUZBVUxUX1RIRU1FX1BBVEgiL2RlZmF1bHQuZWRqIjsKK3N0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBkZWZhdWx0VGVzdFBhZ2UgPSAiZmlsZTovLyJERUZBVUxUX1RFU1RfUEFH
RV9ESVIiL2RlZmF1bHRfdGVzdF9wYWdlLmh0bWwiOworfQorfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQyOWI4MQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcu
Y3BwCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5n
IEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4x
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJFV0tUZXN0Vmlldy5oIgorCisjaW5jbHVkZSAiRVdLVGVzdENvbmZpZy5oIgorI2lu
Y2x1ZGUgPEVXZWJLaXQuaD4KKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVz
cGFjZSBFV0tVbml0VGVzdHMgeworCitFV0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFz
KGludCB1c2VYMTFXaW5kb3cpCit7CisgICAgaWYgKHVzZVgxMVdpbmRvdykKKyAgICAgICAgbV9l
Y29yZUV2YXMgPSBhZG9wdFB0cihlY29yZV9ldmFzX25ldygwLCAwLCAwLCBDb25maWc6OmRlZmF1
bHRWaWV3V2lkdGgsIENvbmZpZzo6ZGVmYXVsdFZpZXdIZWlnaHQsIDApKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fZWNvcmVFdmFzID0gYWRvcHRQdHIoZWNvcmVfZXZhc19idWZmZXJfbmV3KENvbmZp
Zzo6ZGVmYXVsdFZpZXdXaWR0aCwgQ29uZmlnOjpkZWZhdWx0Vmlld0hlaWdodCkpOworfQorCitF
V0tUZXN0RWNvcmVFdmFzOjpFV0tUZXN0RWNvcmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1l
LCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdwb3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmll
d3BvcnRfaCwgY29uc3QgY2hhciogZXh0cmFfb3B0aW9ucywgaW50IHVzZVgxMVdpbmRvdykKK3sK
KyAgICBpZiAodXNlWDExV2luZG93KQorICAgICAgICBtX2Vjb3JlRXZhcyA9IGFkb3B0UHRyKGVj
b3JlX2V2YXNfbmV3KGVuZ2luZV9uYW1lLCB2aWV3cG9ydF94LCB2aWV3cG9ydF95LCB2aWV3cG9y
dF93LCB2aWV3cG9ydF9oLCBleHRyYV9vcHRpb25zKSk7CisgICAgZWxzZQorICAgICAgICBtX2Vj
b3JlRXZhcyA9IGFkb3B0UHRyKGVjb3JlX2V2YXNfYnVmZmVyX25ldyh2aWV3cG9ydF94LCB2aWV3
cG9ydF95KSk7Cit9CisKK0V2YXMqIEVXS1Rlc3RFY29yZUV2YXM6OmV2YXMoKQoreworICAgIGlm
IChtX2Vjb3JlRXZhcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIGVjb3JlX2V2YXNfZ2V0KG1fZWNv
cmVFdmFzLmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBFV0tUZXN0RWNvcmVFdmFz
OjpzaG93KCkKK3sKKyAgICBpZiAobV9lY29yZUV2YXMuZ2V0KCkpCisgICAgICAgIGVjb3JlX2V2
YXNfc2hvdyhtX2Vjb3JlRXZhcy5nZXQoKSk7Cit9CisKK0VXS1Rlc3RWaWV3OjpFV0tUZXN0Vmll
dyhFdmFzKiBldmFzKQorICAgIDogbV9ldmFzKGV2YXMpCisgICAgLCBtX3VybChDb25maWc6OmRl
ZmF1bHRUZXN0UGFnZSkKKyAgICAsIG1fZGVmYXVsdFZpZXdUeXBlKFRpbGVkVmlldykKKyAgICAs
IG1fd2lkdGgoQ29uZmlnOjpkZWZhdWx0Vmlld1dpZHRoKQorICAgICwgbV9oZWlnaHQoQ29uZmln
OjpkZWZhdWx0Vmlld0hlaWdodCkKK3sKK30KKworRVdLVGVzdFZpZXc6OkVXS1Rlc3RWaWV3KEV2
YXMqIGV2YXMsIGNvbnN0IGNoYXIqIHVybCkKKyAgICA6IG1fZXZhcyhldmFzKQorICAgICwgbV91
cmwodXJsKQorICAgICwgbV9kZWZhdWx0Vmlld1R5cGUoVGlsZWRWaWV3KQorICAgICwgbV93aWR0
aChDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChDb25maWc6OmRlZmF1
bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZhcyogZXZh
cywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsKQorICAgIDogbV9ldmFzKGV2YXMp
CisgICAgLCBtX3VybCh1cmwpCisgICAgLCBtX2RlZmF1bHRWaWV3VHlwZSh0eXBlKQorICAgICwg
bV93aWR0aChDb25maWc6OmRlZmF1bHRWaWV3V2lkdGgpCisgICAgLCBtX2hlaWdodChDb25maWc6
OmRlZmF1bHRWaWV3SGVpZ2h0KQoreworfQorCitFV0tUZXN0Vmlldzo6RVdLVGVzdFZpZXcoRXZh
cyogZXZhcywgRXdrVmlld1R5cGUgdHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCisgICAgOiBtX2V2YXMoZXZhcykKKyAgICAsIG1fdXJsKHVybCkKKyAgICAsIG1f
ZGVmYXVsdFZpZXdUeXBlKHR5cGUpCisgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICwgbV9oZWln
aHQoaGVpZ2h0KQoreworfQorCitib29sIEVXS1Rlc3RWaWV3Ojppbml0KCkKK3sKKyAgICBpZiAo
IW1fZXZhcyB8fCBtX3VybC5lbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKG1fZGVmYXVsdFZpZXdUeXBlKSB7CisgICAgY2FzZSBTaW5nbGVWaWV3OgorICAgICAg
ICBtX3dlYlZpZXcgPSBhZG9wdFB0cihld2tfdmlld19zaW5nbGVfYWRkKG1fZXZhcykpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgVGlsZWRWaWV3OgorICAgICAgICBtX3dlYlZpZXcgPSBh
ZG9wdFB0cihld2tfdmlld190aWxlZF9hZGQobV9ldmFzKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGlmICghbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBld2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3LmdldCgpLCBDb25maWc6OmRlZmF1bHRU
aGVtZVBhdGgpOworICAgIGV3a192aWV3X3VyaV9zZXQobV93ZWJWaWV3LmdldCgpLCBtX3VybC5j
X3N0cigpKTsKK30KKwordm9pZCBFV0tUZXN0Vmlldzo6c2hvdygpCit7CisgICAgaWYgKCFtX3dl
YlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBldmFzX29iamVjdF9yZXNpemUobV93
ZWJWaWV3LmdldCgpLCBtX3dpZHRoLCBtX2hlaWdodCk7CisgICAgZXZhc19vYmplY3Rfc2hvdyht
X3dlYlZpZXcuZ2V0KCkpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3dlYlZpZXcuZ2V0
KCksIEVJTkFfVFJVRSk7Cit9CisKK0V2YXNfT2JqZWN0KiBFV0tUZXN0Vmlldzo6bWFpbkZyYW1l
KCkKK3sKKyAgICBpZiAobV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gZXdrX3ZpZXdf
ZnJhbWVfbWFpbl9nZXQobV93ZWJWaWV3LmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKworRXZh
cyogRVdLVGVzdFZpZXc6OmV2YXMoKQoreworICAgIGlmIChtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBldmFzX29iamVjdF9ldmFzX2dldChtX3dlYlZpZXcuZ2V0KCkpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIEVXS1Rlc3RWaWV3OjpiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFj
aykodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZv
aWQqIHB0cikKK3sKKyAgICBpZiAoIW1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKG1fd2ViVmlldy5nZXQoKSwgZXZl
bnROYW1lLCBjYWxsYmFjayk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1f
d2ViVmlldy5nZXQoKSwgZXZlbnROYW1lLCBjYWxsYmFjaywgcHRyKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5o
IGIvU291cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTVkMGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXS1Rlc3RWaWV3LmgK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVj
dHJvbmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIuMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLAorICAgIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0
b24sIE1BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIEVXS1Rlc3RWaWV3X2gKKyNkZWZp
bmUgRVdLVGVzdFZpZXdfaAorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEV2
YXMuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1l
c3BhY2UgRVdLVW5pdFRlc3RzIHsKKworY2xhc3MgRVdLVGVzdEVjb3JlRXZhcyB7CitwdWJsaWM6
CisgICAgRVdLVGVzdEVjb3JlRXZhcyhpbnQgdXNlWDExV2luZG93KTsKKyAgICBFV0tUZXN0RWNv
cmVFdmFzKGNvbnN0IGNoYXIqIGVuZ2luZV9uYW1lLCBpbnQgdmlld3BvcnRfeCwgaW50IHZpZXdw
b3J0X3ksIGludCB2aWV3cG9ydF93LCBpbnQgdmlld3BvcnRfaCwgY29uc3QgY2hhciogZXh0cmFf
b3B0aW9ucywgaW50IHVzZVgxMVdpbmRvdyk7CisKKyAgICBFdmFzKiBldmFzKCk7CisgICAgdm9p
ZCBzaG93KCk7CisKK3ByaXZhdGU6CisgICAgT3duUHRyPEVjb3JlX0V2YXM+IG1fZWNvcmVFdmFz
OworfTsKKworY2xhc3MgRVdLVGVzdFZpZXcgeworcHVibGljOgorICAgIGVudW0gRXdrVmlld1R5
cGUgeworICAgICAgICBTaW5nbGVWaWV3ID0gMCwKKyAgICAgICAgVGlsZWRWaWV3LAorICAgIH07
CisKKyAgICBleHBsaWNpdCBFV0tUZXN0VmlldyhFdmFzKik7CisgICAgRVdLVGVzdFZpZXcoRXZh
cyosIGNvbnN0IGNoYXIqIHVybCk7CisgICAgRVdLVGVzdFZpZXcoRXZhcyosIEV3a1ZpZXdUeXBl
LCBjb25zdCBjaGFyKiB1cmwpOworICAgIEVXS1Rlc3RWaWV3KEV2YXMqLCBFd2tWaWV3VHlwZSwg
Y29uc3QgY2hhciogdXJsLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgRXZhc19PYmpl
Y3QqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZpZXcuZ2V0KCk7IH0KKyAgICBFdmFzX09iamVj
dCogbWFpbkZyYW1lKCk7CisgICAgRXZhcyogZXZhcygpOworICAgIHZvaWQgc2hvdygpOworCisg
ICAgYm9vbCBpbml0KCk7CisgICAgdm9pZCBiaW5kRXZlbnRzKHZvaWQgKCpjYWxsYmFjaykodm9p
ZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopLCBjb25zdCBjaGFyKiBldmVudE5hbWUsIHZvaWQqIHB0
cik7CisKK3ByaXZhdGU6CisgICAgRVdLVGVzdFZpZXcoY29uc3QgRVdLVGVzdFZpZXcmKTsKKyAg
ICBFV0tUZXN0VmlldyBvcGVyYXRvcj0oY29uc3QgRVdLVGVzdFZpZXcmKTsKKworICAgIEV2YXMq
IG1fZXZhczsKKyAgICBPd25QdHI8RXZhc19PYmplY3Q+IG1fd2ViVmlldzsKKworICAgIGludCBt
X3dpZHRoLCBtX2hlaWdodDsKKyAgICBFd2tWaWV3VHlwZSBtX2RlZmF1bHRWaWV3VHlwZTsKKyAg
ICBzdGQ6OnN0cmluZyBtX3VybDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0X3BhZ2UuaHRtbCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Jlc291cmNlcy9kZWZhdWx0X3Rlc3RfcGFnZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZDgxZTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy9yZXNvdXJjZXMvZGVmYXVsdF90ZXN0X3BhZ2Uu
aHRtbApAQCAtMCwwICsxLDYgQEAKKzxIVE1MPgorPEJPRFk+Cis8SDIgYWxpZ249ImNlbnRlciI+
RUZMIFVuaXQgVGVzdHM8L0gyPgorPEgyIGFsaWduPSJjZW50ZXIiPkRlZmF1bHQgVGVzdGluZyBX
ZWIgUGFnZTwvSDI+Cis8L0JPRFk+Cis8L0hUTUw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC90ZXN0cy90ZXN0X2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rl
c3RfZXdrX3ZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTFj
ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC90ZXN0cy90ZXN0X2V3a192
aWV3LmNwcApAQCAtMCwwICsxLDU0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMiBTYW1z
dW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sCisgICAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz
MzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIKKyNpbmNsdWRlIDxFV2Vi
S2l0Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXS1Vu
aXRUZXN0czsKKworLyoqCisqIEBicmllZiBDaGVja2luZyB3aGV0aGVyIGZ1bmN0aW9uIHByb3Bl
cmx5IHJldHVybnMgY29ycmVjdCB2YWx1ZS4KKyovCit2b2lkIGV3a1ZpZXdFZGl0YWJsZUdldENi
KHZvaWQqIGV2ZW50SW5mbywgRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCit7CisgICAgZXdr
X3ZpZXdfZWRpdGFibGVfc2V0KG8sIEVJTkFfRkFMU0UpOworICAgIEVYUEVDVF9FUShFSU5BX0ZB
TFNFLCBld2tfdmlld19lZGl0YWJsZV9nZXQobykpOworICAgIEVORF9URVNUKCk7Cit9CisKK1RF
U1QodGVzdF9ld2tfdmlldywgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KQoreworICAgIFJVTl9URVNU
KGV3a1ZpZXdFZGl0YWJsZUdldENiLCAibG9hZCxmaW5pc2hlZCIsIDApOworfQorCisvKioKKyog
QGJyaWVmIENoZWNraW5nIHdoZXRoZXIgZnVuY3Rpb24gcmV0dXJucyBjb3JyZWN0IHVyaSBzdHJp
bmcuCisqLwordm9pZCBld2tWaWV3VXJpR2V0Q2Iodm9pZCogZXZlbnRJbmZvLCBFdmFzX09iamVj
dCogbywgdm9pZCogZGF0YSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoImh0dHA6Ly93d3cud2Via2l0
Lm9yZy8iLCBld2tfdmlld191cmlfZ2V0KG8pKTsKKyAgICBFTkRfVEVTVCgpOworfQorCitURVNU
KHRlc3RfZXdrX3ZpZXcsIGV3a192aWV3X3VyaV9nZXQpCit7CisgICAgUlVOX1RFU1QoImh0dHA6
Ly93d3cud2Via2l0Lm9yZyIsIGV3a1ZpZXdVcmlHZXRDYiwgImxvYWQsZmluaXNoZWQiLCAwKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfcnVubmVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvZWZsL3Rlc3RzL3Rlc3RfcnVubmVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43MDJhNjFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvdGVzdHMvdGVzdF9ydW5uZXIuY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgICAg
Q29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRo
ZSBHTlUKKyAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAgICBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorKi8K
KworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLVGVzdEJhc2UuaCIKKyNpbmNsdWRlIDxnZXRv
cHQuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCitzdGF0aWMgdm9pZCBwYXJzZUN1c3Rv
bUFyZ3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgc3RhdGljIGNvbnN0IG9w
dGlvbiBvcHRpb25zW10gPSB7CisgICAgICAgIHsidXNlWDExV2luZG93Iiwgbm9fYXJndW1lbnQs
ICZFV0tVbml0VGVzdHM6OkVXS1Rlc3RCYXNlOjp1c2VYMTFXaW5kb3csIHRydWV9LAorICAgICAg
ICB7MCwgMCwgMCwgMH0KKyAgICB9OworCisgICAgaW50IG9wdGlvbjsKKyAgICB3aGlsZSAoKG9w
dGlvbiA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICIiLCBvcHRpb25zLCAwKSkgIT0gLTEpIHsg
fQorfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgYXRleGl0KEVX
S1VuaXRUZXN0czo6RVdLVGVzdEJhc2U6OnNodXRkb3duQWxsKTsKKyAgICBwYXJzZUN1c3RvbUFy
Z3VtZW50cyhhcmdjLCBhcmd2KTsKKyAgICA6OnRlc3Rpbmc6OkluaXRHb29nbGVUZXN0KCZhcmdj
LCBhcmd2KTsKKyAgICByZXR1cm4gUlVOX0FMTF9URVNUUygpOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>