<?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>40558</bug_id>
          
          <creation_ts>2010-06-14 00:57:55 -0700</creation_ts>
          <short_desc>[DRT/Chromium] Upstream TestShellDevTools for Chromium DRT</short_desc>
          <delta_ts>2010-07-06 05:38:15 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>GoogleBug</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>28395</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>pfeldman</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>237736</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-06-14 00:57:55 -0700</bug_when>
    <thetext>Upstream TestShellDevTools for Chromium DRT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239819</commentid>
    <comment_count>1</comment_count>
      <attachid>59084</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-06-18 02:05:24 -0700</bug_when>
    <thetext>Created attachment 59084
patch - Upstreamed DevTools for Chromium DRT

First version, tested under Windows (running LayoutTests/inspector).

I&apos;m unsure about the modification to WebKit.gyp (adding include dir for header generated from resources), i.e., whether to really put that there, and for which platforms.

Difference to test shell version: on showDevTools() the test shell version instantiated a separate TestShell instance using weak pointers.
This doesn&apos;t seem to be necessary for the DRT implementation (using a single TestShell instance and a simple WebViewHost* instead).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239821</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-18 02:09:26 -0700</bug_when>
    <thetext>Attachment 59084 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/DumpRenderTree/chromium/TestShell.cpp:65:  webkit_glue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 15 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>239837</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-18 03:08:46 -0700</bug_when>
    <thetext>Attachment 59084 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3308316</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239844</commentid>
    <comment_count>4</comment_count>
      <attachid>59084</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-06-18 03:58:00 -0700</bug_when>
    <thetext>Comment on attachment 59084
patch - Upstreamed DevTools for Chromium DRT

http://wkrietveld.appspot.com/40558/diff/1/4
File WebKitTools/ChangeLog (right):

http://wkrietveld.appspot.com/40558/diff/1/4#newcode8
WebKitTools/ChangeLog:8: Upstream DevTools for Chromium DRT.
Please write the base Chromium revision of new files.

http://wkrietveld.appspot.com/40558/diff/1/4#newcode26
WebKitTools/ChangeLog:26: * DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp: Added.
The name &quot;WebDevToolsDRTAgent&quot; looks curious to me.  I feel &quot;WebDevToolsAgentDRT&quot; or &quot;DRT(Web)DevToolsAgent&quot; is better.
Same for other new files.

http://wkrietveld.appspot.com/40558/diff/1/6
File WebKitTools/DumpRenderTree/chromium/EventSender.cpp (right):

http://wkrietveld.appspot.com/40558/diff/1/6#newcode63
WebKitTools/DumpRenderTree/chromium/EventSender.cpp:63: #pragma warning(disable : 4355)
It&apos;s better to have this in config.h.

http://wkrietveld.appspot.com/40558/diff/1/8
File WebKitTools/DumpRenderTree/chromium/TestShell.cpp (right):

http://wkrietveld.appspot.com/40558/diff/1/8#newcode57
WebKitTools/DumpRenderTree/chromium/TestShell.cpp:57: #include &quot;webkit/glue/webkit_glue.h&quot;
Do not use webkti_glue.h
If you can&apos;t remove it easily, add a FIME comment.

http://wkrietveld.appspot.com/40558/diff/1/8#newcode135
WebKitTools/DumpRenderTree/chromium/TestShell.cpp:135: FilePath dirExe;
Do not use FilePath.

http://wkrietveld.appspot.com/40558/diff/1/9
File WebKitTools/DumpRenderTree/chromium/TestShell.h (right):

http://wkrietveld.appspot.com/40558/diff/1/9#newcode146
WebKitTools/DumpRenderTree/chromium/TestShell.h:146: void initializeWebDevToolsDRTAgent(WebKit::WebView* webView);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/9#newcode147
WebKitTools/DumpRenderTree/chromium/TestShell.h:147: void createWebDevToolsDRTClient(WebDevToolsDRTAgent *agent);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/10
File WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp (right):

http://wkrietveld.appspot.com/40558/diff/1/10#newcode37
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:37: #include &quot;base/message_loop.h&quot;
Do not use message_loop.h.

http://wkrietveld.appspot.com/40558/diff/1/10#newcode38
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:38: #include &quot;base/string_piece.h&quot;
Do not use string_pieace.h.

http://wkrietveld.appspot.com/40558/diff/1/10#newcode45
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:45: #include &quot;webkit/glue/webkit_glue.h&quot;
Do not use webkit_glue.h.

http://wkrietveld.appspot.com/40558/diff/1/10#newcode52
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:52: using WebKit::WebCString;
&quot;using namespace WebKit&quot; is enough.

http://wkrietveld.appspot.com/40558/diff/1/10#newcode85
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:85: // FIXME: implement this. - original TODO(loislo)
Remove TODO(name) comment

http://wkrietveld.appspot.com/40558/diff/1/10#newcode90
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:90: base::StringPiece injectJSWebkit = webkit_glue::GetDataResource(IDR_DEVTOOLS_INJECT_WEBKIT_JS);
We should not use StringPieace and webkit_glue in WebKit code.
So how about adding following function to webkit_support?
  WebCString webkit_support::GetDevToolsInjectedScriptSource();
  WebCString webkit_support::GetDevToolsInjectedScriptDispatcherSource();
  WebCString webkit_support::GetDevToolsDebuggerScriptSource();

http://wkrietveld.appspot.com/40558/diff/1/10#newcode108
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:108: MessageLoop::current()-&gt;PostDelayedTask(
Do not use MessageLoop.  Use webkit_support::PostDelayedTaskFromhere() instead.

http://wkrietveld.appspot.com/40558/diff/1/10#newcode167
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.cpp:167: void WebDevToolsDRTAgent::dispatchMessageLoop()
Use webkit_support::DispatchMessageLoop() instead.

http://wkrietveld.appspot.com/40558/diff/1/11
File WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h (right):

http://wkrietveld.appspot.com/40558/diff/1/11#newcode34
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h:34: #include &quot;base/logging.h&quot;
Do not use base/logging.h.

http://wkrietveld.appspot.com/40558/diff/1/11#newcode57
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h:57: WebDevToolsDRTAgent(WebKit::WebView* web_view);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/11#newcode61
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h:61: virtual void sendMessageToFrontend(const WebKit::WebDevToolsMessageData&amp; data);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/11#newcode69
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h:69: void asyncCall(const WebDevToolsDRTCallArgs&amp; args);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/11#newcode71
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h:71: void attach(WebDevToolsDRTClient* client);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/11#newcode72
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h:72: void detach(WebDevToolsDRTClient* client);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/11#newcode78
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTAgent.h:78: void call(const WebDevToolsDRTCallArgs&amp; args);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/12
File WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTCallArgs.cpp (right):

http://wkrietveld.appspot.com/40558/diff/1/12#newcode35
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTCallArgs.cpp:35: int WebDevToolsDRTCallArgs::m_callsCount = 0;
Can we merge this to another file?

http://wkrietveld.appspot.com/40558/diff/1/14
File WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.cpp (right):

http://wkrietveld.appspot.com/40558/diff/1/14#newcode37
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.cpp:37: #include &quot;base/message_loop.h&quot;
Do not use message_loop.h.

http://wkrietveld.appspot.com/40558/diff/1/14#newcode113
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.cpp:113: MessageLoop::current()-&gt;PostDelayedTask(
Use webkit_support::PostDelayedTaskFromHere().

http://wkrietveld.appspot.com/40558/diff/1/15
File WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.h (right):

http://wkrietveld.appspot.com/40558/diff/1/15#newcode36
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.h:36: #undef LOG
is this needed?

http://wkrietveld.appspot.com/40558/diff/1/15#newcode57
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.h:57: WebDevToolsDRTClient(WebDevToolsDRTAgent* agent, WebKit::WebView* web_view);
Argument names are not needed.

http://wkrietveld.appspot.com/40558/diff/1/15#newcode61
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.h:61: virtual void sendMessageToAgent(const WebKit::WebDevToolsMessageData&amp; data);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/15#newcode69
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.h:69: void asyncCall(const WebDevToolsDRTCallArgs&amp; args);
Argument name is not needed.

http://wkrietveld.appspot.com/40558/diff/1/15#newcode74
WebKitTools/DumpRenderTree/chromium/WebDevToolsDRTClient.h:74: void call(const WebDevToolsDRTCallArgs&amp; args);
Argument name is not needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239919</commentid>
    <comment_count>5</comment_count>
      <attachid>59084</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-18 08:01:25 -0700</bug_when>
    <thetext>Comment on attachment 59084
patch - Upstreamed DevTools for Chromium DRT

r- based on comments from tkent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245889</commentid>
    <comment_count>6</comment_count>
      <attachid>60360</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-07-02 05:51:01 -0700</bug_when>
    <thetext>Created attachment 60360
patch - snapshot of current state

Temporary snap-shot of current state. It&apos;s not meant as a final patch since there are some remaining issues that I&apos;m currently stuck on:

For some reason, the event handlers are not properly called, esp. WebDevToolsFrontendImpl::frontendLoaded() is never called from dispatchWindowLoadEvent() in Document::implicitClose() (via loadedCallback in the auto-generated V8InspectorFrontendHost.cpp).

Hence no request for review (the patch also contains 2 debugging MessageBox calls, as well as those annoying 755 file modes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245893</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-02 06:01:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=60360) [details]
&gt; patch - snapshot of current state

&gt; Hence no request for review (the patch also contains 2 debugging MessageBox calls, as well as those annoying 755 file modes).

I think we had better commit the code as soon as possible even if the code is incomplete so that other Chromium developers can investigate problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245896</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-02 06:36:13 -0700</bug_when>
    <thetext>I wonder if it is time to involve the inspector folks who wrotenthis code in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245897</commentid>
    <comment_count>9</comment_count>
      <attachid>60363</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-07-02 06:36:30 -0700</bug_when>
    <thetext>Created attachment 60363
patch - snapshot of current state (removed debugging code, fixed modes)

Based on Kent-san&apos;s comment, uploaded a cleaned-up version of the current state, without debugging message boxes, and with the filemodes corrected.

Apart from the code issues, as indicated with my first patch, please also check whether my modifications to webkit.gyp are OK. I feel that having the include dirs modification just for Windows is probably not correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245898</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 06:38:06 -0700</bug_when>
    <thetext>Attachment 60363 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebKitTools/DumpRenderTree/chromium/TestShell.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/DumpRenderTree/chromium/TestShell.cpp:57:  Should have a space between // and comment  [whitespace/comments] [4]
WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.h:36:  Should have a space between // and comment  [whitespace/comments] [4]
WebKitTools/DumpRenderTree/chromium/LayoutTestController.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.h:34:  Should have a space between // and comment  [whitespace/comments] [4]
WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.h:37:  Should have a space between // and comment  [whitespace/comments] [4]
WebKitTools/DumpRenderTree/chromium/DRTDevToolsAgent.cpp:58:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 7 in 16 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>245899</commentid>
    <comment_count>11</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-07-02 06:45:46 -0700</bug_when>
    <thetext>What is the status of this code? Should it be reviewed? Is it a pure port or does it do anything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245901</commentid>
    <comment_count>12</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-07-02 06:53:02 -0700</bug_when>
    <thetext>@Pavel: It&apos;s the upstreamed version of test_shell_devtools. 

The code basically seems to get called and instantiated fine, AFAICT - it just doesn&apos;t currently do anything, because it hangs due to the problems I described.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246489</commentid>
    <comment_count>13</comment_count>
      <attachid>60363</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-04 21:09:43 -0700</bug_when>
    <thetext>Comment on attachment 60363
patch - snapshot of current state (removed debugging code, fixed modes)

Anyway, please fix style errors.


WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.cpp:45
 +  using WebKit::WebDevToolsAgent;
We prefer &quot;using namespace WebKit;&quot; in .cpp files.



WebKitTools/DumpRenderTree/chromium/DRTDevToolsClient.cpp:112
 +  void DRTDevToolsClient::call(const DRTDevToolsCallArgs &amp;args)
&quot;DRTDevToolsCallArgs &amp;arg&quot; -&gt; &quot;DRTDevToolsCallArgs&amp; arg&quot;


WebKitTools/DumpRenderTree/chromium/TestShell.cpp:124
 +  void TestShell::createDRTDevToolsClient(DRTDevToolsAgent *agent)
&quot;DRTDevToolsAgent *agent&quot; -&gt; &quot;DRTDevToolsAgent* agent&quot;


WebKitTools/DumpRenderTree/chromium/config.h:44
 +  #define NOTREACHED() DCHECK(false)
Do we still need this?


WebKitTools/DumpRenderTree/chromium/EventSender.cpp:61
 +  #endif // OS(WINDOWS)
This patch doesn&apos;t need this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246511</commentid>
    <comment_count>14</comment_count>
      <attachid>60495</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-07-04 23:18:00 -0700</bug_when>
    <thetext>Created attachment 60495
patch - snapshot of current state (fixed style bugs and addressed review remarks)

New patch: addressed style issues and last review remarks. Code itself is unchanged.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246512</commentid>
    <comment_count>15</comment_count>
      <attachid>60495</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-04 23:25:34 -0700</bug_when>
    <thetext>Comment on attachment 60495
patch - snapshot of current state (fixed style bugs and addressed review remarks)

WebKitTools/DumpRenderTree/chromium/TestShell.h:88
 +      TestShell* m_testShell;
We don&apos;t prepend &quot;m_&quot; to public data members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246517</commentid>
    <comment_count>16</comment_count>
      <attachid>60497</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-07-04 23:56:55 -0700</bug_when>
    <thetext>Created attachment 60497
patch - snapshot of current state (removed unnecessary struct)

Patch: removed unnecessary struct &apos;TestShellWeakReference&apos;

(also, resubmitted to use commit-queue)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246530</commentid>
    <comment_count>17</comment_count>
      <attachid>60497</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-05 01:56:57 -0700</bug_when>
    <thetext>Comment on attachment 60497
patch - snapshot of current state (removed unnecessary struct)

Rejecting patch 60497 from commit-queue.

Unexpected failure when processing patch!  Please file a bug against webkit-patch.
Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--build&apos;, &apos;--non-interactive&apos;, &apos;--ignore-builders&apos;, &apos;--build-style=both&apos;, &apos;--quiet&apos;, 60497, &apos;--test&apos;, &apos;--parent-command=commit-queue&apos;, &apos;--no-update&apos;]&quot; exit_code: 1
Last 500 characters of output:
action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=40558&amp;ctype=xml
Processing 1 patch from 1 bug.
Cleaning working directory
Processing patch 60497 from bug 40558.
Tamura Kent found in /Users/eseidel/Projects/CommitQueue/WebKit/chromium/ChangeLog does not appear to be a valid reviewer according to committers.py.
ERROR: /Users/eseidel/Projects/CommitQueue/WebKit/chromium/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246556</commentid>
    <comment_count>18</comment_count>
      <attachid>60497</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-05 03:35:35 -0700</bug_when>
    <thetext>Comment on attachment 60497
patch - snapshot of current state (removed unnecessary struct)

I don&apos;t know why CQ rejects the patch :-&lt;

WebKitTools/DumpRenderTree/chromium/TestShell.cpp:125
 +      m_drtDevToolsClient.set(new DRTDevToolsClient(agent, webView()));
webView() should be m_devTools-&gt;webView().
This is the root cause of no frontendLoaded() called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246568</commentid>
    <comment_count>19</comment_count>
      <attachid>60497</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-05 04:19:19 -0700</bug_when>
    <thetext>Comment on attachment 60497
patch - snapshot of current state (removed unnecessary struct)

WebKit/chromium/ChangeLog:3
 +          Reviewed by Tamura Kent.
You shouldn&apos;t put a reviewer name to a uploading patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246934</commentid>
    <comment_count>20</comment_count>
      <attachid>60602</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-07-06 01:18:20 -0700</bug_when>
    <thetext>Created attachment 60602
patch - snapshot of current state (added tkent&apos;s fix, NOBODY-fied the reviewer in the ChangeLogs)

Made the suggested change to webView, but test still time out (further debugging pending). Also reset reviewer back to &quot;NOBODY (OOPS!)&quot; to mollify the CQ.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246937</commentid>
    <comment_count>21</comment_count>
      <attachid>60602</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-06 01:26:44 -0700</bug_when>
    <thetext>Comment on attachment 60602
patch - snapshot of current state (added tkent&apos;s fix, NOBODY-fied the reviewer in the ChangeLogs)



&gt; diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
&gt; index 62ad190..fa7d242 100644
&gt; --- a/WebKitTools/ChangeLog
&gt; +++ b/WebKitTools/ChangeLog
&gt; @@ -1,3 +1,72 @@
&gt; +2010-07-05  Roland Steiner  &lt;rolandsteiner@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Bug 40558 - [DRT/Chromium] Upstream TestShellDevTools for Chromium DRT
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=40558
&gt; +
&gt; +        Upstream DevTools for Chromium DRT.
&gt; +        (original Chromium files rev. 51287)
&gt; +
&gt; +        * DumpRenderTree/DumpRenderTree.gypi:
&gt; +        * DumpRenderTree/chromium/DRTDevToolsAgent.cpp: Added.
&gt; +        (DRTDevToolsAgent::DRTDevToolsAgent):
&gt; +        (DRTDevToolsAgent::setWebView):
&gt; +        (DRTDevToolsAgent::sendMessageToFrontend):
&gt; +        (DRTDevToolsAgent::forceRepaint):
&gt; +        (DRTDevToolsAgent::runtimeFeatureStateChanged):
&gt; +        (DRTDevToolsAgent::injectedScriptSource):
&gt; +        (DRTDevToolsAgent::injectedScriptDispatcherSource):
&gt; +        (DRTDevToolsAgent::debuggerScriptSource):
&gt; +        (DRTDevToolsAgent::asyncCall):
&gt; +        (DRTDevToolsAgent::call):
&gt; +        (DRTDevToolsAgent::webDevToolsAgent):
&gt; +        (DRTDevToolsAgent::attach):
&gt; +        (DRTDevToolsAgent::detach):
&gt; +        (DRTDevToolsAgent::setTimelineProfilingEnabled):
&gt; +        (DRTDevToolsAgent::evaluateInWebInspector):
&gt; +        (DRTDevToolsAgent::dispatchMessageLoop):
&gt; +        * DumpRenderTree/chromium/DRTDevToolsAgent.h: Added.
&gt; +        (DRTDevToolsAgent::~DRTDevToolsAgent):
&gt; +        (DRTDevToolsAgent::hostIdentifier):
&gt; +        * DumpRenderTree/chromium/DRTDevToolsCallArgs.cpp:
&gt; +        * DumpRenderTree/chromium/DRTDevToolsCallArgs.h:
&gt; +        (DRTDevToolsCallArgs::DRTDevToolsCallArgs):
&gt; +        (DRTDevToolsCallArgs::~DRTDevToolsCallArgs):
&gt; +        (DRTDevToolsCallArgs::callsCount):
&gt; +        * DumpRenderTree/chromium/DRTDevToolsClient.cpp: Added.
&gt; +        (DRTDevToolsClient::DRTDevToolsClient):
&gt; +        (DRTDevToolsClient::~DRTDevToolsClient):
&gt; +        (DRTDevToolsClient::sendMessageToAgent):
&gt; +        (DRTDevToolsClient::sendDebuggerCommandToAgent):
&gt; +        (DRTDevToolsClient::activateWindow):
&gt; +        (DRTDevToolsClient::closeWindow):
&gt; +        (DRTDevToolsClient::dockWindow):
&gt; +        (DRTDevToolsClient::undockWindow):
&gt; +        (DRTDevToolsClient::asyncCall):
&gt; +        (DRTDevToolsClient::call):
&gt; +        (DRTDevToolsClient::allMessagesProcessed):
&gt; +        * DumpRenderTree/chromium/DRTDevToolsClient.h:
&gt; +        * DumpRenderTree/chromium/EventSender.cpp:
&gt; +        * DumpRenderTree/chromium/LayoutTestController.cpp:
&gt; +        (LayoutTestController::LayoutTestController):
&gt; +        (LayoutTestController::closeWebInspector):
&gt; +        (LayoutTestController::setTimelineProfilingEnabled):
&gt; +        (LayoutTestController::evaluateInWebInspector):
&gt; +        * DumpRenderTree/chromium/LayoutTestController.h:
&gt; +        * DumpRenderTree/chromium/TestShell.cpp:
&gt; +        (TestShell::TestShell):
&gt; +        (TestShell::~TestShell):
&gt; +        (TestShell::createDRTDevToolsClient):
&gt; +        (TestShell::showDevTools):
&gt; +        (TestShell::closeDevTools):
&gt; +        (TestShell::runFileTest):
&gt; +        (TestShell::createNewWindow):
&gt; +        * DumpRenderTree/chromium/TestShell.h:
&gt; +        (TestShell::drtDevToolsAgent):
&gt; +        (TestShell::drtDevToolsClient):
&gt; +        * DumpRenderTree/chromium/config.h:
&gt; +
&gt;  2010-07-05  Csaba OsztrogonÃ¡c  &lt;ossy@webkit.org&gt;
&gt;  
&gt;          Reviewed by Eric Seidel.
&gt; @@ -40,7 +109,6 @@
&gt;  
&gt;          * Scripts/webkitpy/common/checkout/scm.py:
&gt;          * Scripts/webkitpy/common/checkout/scm_unittest.py:
&gt; -
&gt;  2010-07-03  Patrick Gansterer  &lt;paroga@paroga.com&gt;

Do not change unrelated part of ChangeLog.


WebKit/chromium/WebKit.gyp:633
 +                          &apos;&lt;(SHARED_INTERMEDIATE_DIR)/webkit&apos;, # for a header generated by grit
Is this needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246984</commentid>
    <comment_count>22</comment_count>
      <attachid>60495</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-06 03:16:22 -0700</bug_when>
    <thetext>Comment on attachment 60495
patch - snapshot of current state (fixed style bugs and addressed review remarks)

Cleared Kent Tamura&apos;s review+ from obsolete attachment 60495 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247023</commentid>
    <comment_count>23</comment_count>
      <attachid>60619</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2010-07-06 04:52:56 -0700</bug_when>
    <thetext>Created attachment 60619
patch - snapshot of current state (cleaned up, removed webkit.gyp modification)

You&apos;re right, the WebKit.gyp modification is really no longer necessary.

new, cleaned up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247028</commentid>
    <comment_count>24</comment_count>
      <attachid>60619</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-06 05:11:18 -0700</bug_when>
    <thetext>Comment on attachment 60619
patch - snapshot of current state (cleaned up, removed webkit.gyp modification)

Clearing flags on attachment: 60619

Committed r62545: &lt;http://trac.webkit.org/changeset/62545&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247029</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-07-06 05:11:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247036</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-06 05:38:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62545 might have broken GTK Linux 64-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59084</attachid>
            <date>2010-06-18 02:05:24 -0700</date>
            <delta_ts>2010-07-02 05:51:01 -0700</delta_ts>
            <desc>patch - Upstreamed DevTools for Chromium DRT</desc>
            <filename>devtools.patch</filename>
            <type>text/plain</type>
            <size>36921</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggODZlMmFiZS4u
YTJlZmFkOAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNi0xOCAgUm9sYW5kIFN0ZWlu
ZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgNDA1NTggLSBbRFJUL0Nocm9taXVtXSBVcHN0
cmVhbSBUZXN0U2hlbGxEZXZUb29scyBmb3IgQ2hyb21pdW0gRFJUCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MDU1OAorCisgICAgICAgIFVwc3RyZWFt
IERldlRvb2xzIGZvciBDaHJvbWl1bSBEUlQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorCiAy
MDEwLTA2LTE3ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9k
ZSAxMDA3NTUKaW5kZXggNjE2NDZiYS4uYmZjYjU2ZAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNTk5LDYgKzU5OSw5
IEBACiAgICAgICAgICAgICAgICAgWydPUz09IndpbiInLCB7CiAgICAgICAgICAgICAgICAgICAg
ICdkZXBlbmRlbmNpZXMnOiBbJ0xheW91dFRlc3RIZWxwZXInXSwKIAorICAgICAgICAgICAgICAg
ICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCcsICMgZm9yIGEgaGVhZGVyIGdlbmVyYXRlZCBieSBn
cml0CisgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdyZXNvdXJj
ZV9pbmNsdWRlX2RpcnMnOiBbJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCddLAog
ICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9uZXQvbmV0X3Jlc291cmNlcy5yYycsCmRpZmYg
LS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKb2xk
IG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAxYjk5MzZkLi5lNzVhMDY4Ci0tLSBh
L1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2OCBAQAorMjAxMC0wNi0xOCAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBCdWcgNDA1NTggLSBbRFJUL0Nocm9taXVtXSBVcHN0cmVhbSBUZXN0U2hlbGxEZXZUb29s
cyBmb3IgQ2hyb21pdW0gRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00MDU1OAorCisgICAgICAgIFVwc3RyZWFtIERldlRvb2xzIGZvciBDaHJvbWl1
bSBEUlQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcDoKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVk
KToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAg
ICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorICAgICAgICAoVGVzdFNoZWxsOjp+VGVzdFNo
ZWxsKToKKyAgICAgICAgKFRlc3RTaGVsbDo6aW5pdGlhbGl6ZVdlYkRldlRvb2xzRFJUQWdlbnQp
OgorICAgICAgICAoVGVzdFNoZWxsOjpjcmVhdGVXZWJEZXZUb29sc0RSVENsaWVudCk6CisgICAg
ICAgIChUZXN0U2hlbGw6OnNob3dEZXZUb29scyk6CisgICAgICAgIChUZXN0U2hlbGw6OmNsb3Nl
RGV2VG9vbHMpOgorICAgICAgICAoVGVzdFNoZWxsOjpydW5GaWxlVGVzdCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0U2hlbGw6
OndlYkRldlRvb2xzRFJUQWdlbnQpOgorICAgICAgICAoVGVzdFNoZWxsOjp3ZWJEZXZUb29sc0RS
VENsaWVudCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViRGV2VG9vbHNE
UlRBZ2VudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRBZ2VudDo6V2ViRGV2
VG9vbHNEUlRBZ2VudCk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVEFnZW50OjpzZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQpOgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRBZ2VudDo6Zm9yY2VSZXBhaW50
KToKKyAgICAgICAgKFdlYkRldlRvb2xzRFJUQWdlbnQ6OnJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkRldlRvb2xzRFJUQWdlbnQ6OmluamVjdGVkU2NyaXB0U291cmNl
KToKKyAgICAgICAgKFdlYkRldlRvb2xzRFJUQWdlbnQ6OmluamVjdGVkU2NyaXB0RGlzcGF0Y2hl
clNvdXJjZSk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVEFnZW50OjpkZWJ1Z2dlclNjcmlwdFNv
dXJjZSk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVEFnZW50Ojphc3luY0NhbGwpOgorICAgICAg
ICAoV2ViRGV2VG9vbHNEUlRBZ2VudDo6Y2FsbCk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVEFn
ZW50Ojp3ZWJEZXZUb29sc0FnZW50KToKKyAgICAgICAgKFdlYkRldlRvb2xzRFJUQWdlbnQ6OmF0
dGFjaCk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVEFnZW50OjpkZXRhY2gpOgorICAgICAgICAo
V2ViRGV2VG9vbHNEUlRBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKToKKyAgICAg
ICAgKFdlYkRldlRvb2xzRFJUQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOgorICAgICAg
ICAoV2ViRGV2VG9vbHNEUlRBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCk6CisgICAgICAgIChX
ZWJEZXZUb29sc0FnZW50Q2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmRPbklPVGhyZWFkKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZUb29sc0RSVEFnZW50Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRBZ2VudDo6fldlYkRldlRvb2xzRFJUQWdl
bnQpOgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRBZ2VudDo6aG9zdElkZW50aWZpZXIpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJUQ2FsbEFyZ3MuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZUb29sc0RS
VENhbGxBcmdzLmg6IEFkZGVkLgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRDYWxsQXJnczo6V2Vi
RGV2VG9vbHNEUlRDYWxsQXJncyk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVENhbGxBcmdzOjp+
V2ViRGV2VG9vbHNEUlRDYWxsQXJncyk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVENhbGxBcmdz
OjpjYWxsc0NvdW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZU
b29sc0RSVENsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRDbGllbnQ6
OldlYkRldlRvb2xzRFJUQ2xpZW50KToKKyAgICAgICAgKFdlYkRldlRvb2xzRFJUQ2xpZW50Ojp+
V2ViRGV2VG9vbHNEUlRDbGllbnQpOgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRDbGllbnQ6OnNl
bmRNZXNzYWdlVG9BZ2VudCk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVENsaWVudDo6c2VuZERl
YnVnZ2VyQ29tbWFuZFRvQWdlbnQpOgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRDbGllbnQ6OmFj
dGl2YXRlV2luZG93KToKKyAgICAgICAgKFdlYkRldlRvb2xzRFJUQ2xpZW50OjpjbG9zZVdpbmRv
dyk6CisgICAgICAgIChXZWJEZXZUb29sc0RSVENsaWVudDo6ZG9ja1dpbmRvdyk6CisgICAgICAg
IChXZWJEZXZUb29sc0RSVENsaWVudDo6dW5kb2NrV2luZG93KToKKyAgICAgICAgKFdlYkRldlRv
b2xzRFJUQ2xpZW50Ojphc3luY0NhbGwpOgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRDbGllbnQ6
OmNhbGwpOgorICAgICAgICAoV2ViRGV2VG9vbHNEUlRDbGllbnQ6OmFsbE1lc3NhZ2VzUHJvY2Vz
c2VkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZUb29sc0RSVENs
aWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcu
aDoKKwogMjAxMC0wNi0xNyAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaSBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpp
bmRleCA1ZmM4ZGFiLi5iZThiOTA3Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLmd5cGkKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwaQpAQCAtMzEsNiArMzEsMTIgQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9U
ZXN0U2hlbGxXaW4uY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXh0SW5wdXRDb250cm9s
bGVyLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGV4dElucHV0Q29udHJvbGxlci5oJywK
KyAgICAgICAgICAgICdjaHJvbWl1bS9XZWJEZXZUb29sc0RSVEFnZW50LmNwcCcsCisgICAgICAg
ICAgICAnY2hyb21pdW0vV2ViRGV2VG9vbHNEUlRBZ2VudC5oJywKKyAgICAgICAgICAgICdjaHJv
bWl1bS9XZWJEZXZUb29sc0RSVENhbGxBcmdzLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
V2ViRGV2VG9vbHNEUlRDYWxsQXJncy5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9XZWJEZXZU
b29sc0RSVENsaWVudC5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1dlYkRldlRvb2xzRFJU
Q2xpZW50LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vV2ViVmlld0hvc3QuaCcsCiAgICAgICAgIF0sCkBAIC00NCw1ICs1
MCw1IEBACiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgIH1dLAogICAgICAgICBdLAot
ICAgIH0KKyAgICB9LAogfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRXZlbnRTZW5kZXIuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5k
ZXggZmQ3YmEyZC4uMmZlMWIxNgotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9FdmVudFNlbmRlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRXZlbnRTZW5kZXIuY3BwCkBAIC01OCw3ICs1OCwxMCBAQAogCiAjaWYgT1MoV0lORE9X
UykKICNpbmNsdWRlICJwdWJsaWMvd2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmgiCi0jZW5kaWYK
KworLy8gQWxsb3cgJ3RoaXMnIHRvIGJlIHVzZWQgaW4gYmFzZSBtZW1iZXIgaW5pdGlhbGl6ZXIg
bGlzdC4KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDM1NSkKKyNlbmRpZiAvLyBPUyhXSU5E
T1dTKQogCiAvLyBGSVhNRTogbGF5b3V0IGJlZm9yZSBlYWNoIGV2ZW50PwogCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCA4OWUxNmUw
Li40MmRlYTNmCi0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91
dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCisjaW5j
bHVkZSAiV2ViRGV2VG9vbHNEUlRBZ2VudC5oIgogI2luY2x1ZGUgIldlYlZpZXdIb3N0LmgiCiAj
aW5jbHVkZSAiYmFzZS9zdHJpbmdfdXRpbC5oIgogI2luY2x1ZGUgInB1YmxpYy9XZWJBbmltYXRp
b25Db250cm9sbGVyLmgiCkBAIC01NCw2ICs1NSw4IEBACiAKICNpZiBPUyhXSU5ET1dTKQogI2lu
Y2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgorLy8gQWxsb3cgJ3RoaXMnIHRvIGJlIHVzZWQgaW4g
YmFzZSBtZW1iZXIgaW5pdGlhbGl6ZXIgbGlzdC4KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDog
NDM1NSkKICNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTEyNDQsNyArMTI0
Nyw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5h
YmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAg
ICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGNhbGwgVGVzdFNoZWxsRGV2VG9v
bHNBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKCkuCisgICAgbV9zaGVsbC0+d2Vi
RGV2VG9vbHNEUlRBZ2VudCgpLT5zZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYXJndW1lbnRz
WzBdLnRvQm9vbGVhbigpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQpAQCAtMTI1Miw3ICsxMjU1LDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW4KICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIg
fHwgIWFyZ3VtZW50c1swXS5pc0ludDMyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQog
ICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IFNob3VsZCBjYWxsIFRlc3RTaGVsbERldlRv
b2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoKS4KKyAgICBtX3NoZWxsLT53ZWJEZXZU
b29sc0RSVEFnZW50KCktPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYXJndW1lbnRzWzBdLnRvSW50
MzIoKSwgYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEw
MDc1NQppbmRleCA3NjFmOGQxLi5iNjM2YzVhCi0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIlRl
c3RTaGVsbC5oIgogCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKKyNpbmNsdWRl
ICJXZWJEZXZUb29sc0RSVEFnZW50LmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNEUlRDbGllbnQu
aCIKICNpbmNsdWRlICJXZWJWaWV3SG9zdC5oIgogI2luY2x1ZGUgImJhc2UvbWQ1LmgiIC8vIEZJ
WE1FOiBXcmFwIGJ5IHdlYmtpdF9zdXBwb3J0LgogI2luY2x1ZGUgImJhc2Uvc3RyaW5nMTYuaCIK
QEAgLTUyLDYgKzU0LDcgQEAKICNpbmNsdWRlICJwdWJsaWMvV2ViVmlldy5oIgogI2luY2x1ZGUg
InNraWEvZXh0L2JpdG1hcF9wbGF0Zm9ybV9kZXZpY2UuaCIKICNpbmNsdWRlICJza2lhL2V4dC9w
bGF0Zm9ybV9jYW52YXMuaCIKKyNpbmNsdWRlICJ3ZWJraXQvZ2x1ZS93ZWJraXRfZ2x1ZS5oIgog
I2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCiAjaW5jbHVkZSA8YWxn
b3JpdGhtPgogI2luY2x1ZGUgPGNjdHlwZT4KQEAgLTU5LDYgKzYyLDcgQEAKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2Ugd2Vi
a2l0X2dsdWU7CiAKIC8vIENvbnRlbnQgYXJlYSBzaXplIGZvciBuZXdseSBjcmVhdGVkIHdpbmRv
d3MuCiBzdGF0aWMgY29uc3QgaW50IHRlc3RXaW5kb3dXaWR0aCA9IDgwMDsKQEAgLTgwLDYgKzg0
LDcgQEAgVGVzdFNoZWxsOjpUZXN0U2hlbGwoYm9vbCB0ZXN0U2hlbGxNb2RlKQogICAgICwgbV90
ZXN0SXNQcmVwYXJpbmcoZmFsc2UpCiAgICAgLCBtX2ZvY3VzZWRXaWRnZXQoMCkKICAgICAsIG1f
dGVzdFNoZWxsTW9kZSh0ZXN0U2hlbGxNb2RlKQorICAgICwgbV9kZXZUb29scygwKQogewogICAg
IFdlYlJ1bnRpbWVGZWF0dXJlczo6ZW5hYmxlR2VvbG9jYXRpb24odHJ1ZSk7CiAgICAgbV9hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5zZXQobmV3IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyKHRoaXMp
KTsKQEAgLTEwMiw2ICsxMDcsOCBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbChib29sIHRlc3RTaGVs
bE1vZGUpCiAKIFRlc3RTaGVsbDo6flRlc3RTaGVsbCgpCiB7CisgICAgY2xvc2VEZXZUb29scygp
OworCiAgICAgbG9hZFVSTChHVVJMKCJhYm91dDpibGFuayIpKTsKICAgICAvLyBDYWxsIEdDIHR3
aWNlIHRvIGNsZWFuIHVwIGdhcmJhZ2UuCiAgICAgY2FsbEpTR0MoKTsKQEAgLTExMSw2ICsxMTgs
MzggQEAgVGVzdFNoZWxsOjp+VGVzdFNoZWxsKCkKICAgICBtX3dlYlZpZXctPmNsb3NlKCk7CiB9
CiAKK3ZvaWQgVGVzdFNoZWxsOjppbml0aWFsaXplV2ViRGV2VG9vbHNEUlRBZ2VudChXZWJWaWV3
KiB3ZWJWaWV3KQoreworICAgIEFTU0VSVCghbV93ZWJEZXZUb29sc0RSVEFnZW50KTsKKyAgICBt
X3dlYkRldlRvb2xzRFJUQWdlbnQuc2V0KG5ldyBXZWJEZXZUb29sc0RSVEFnZW50KHdlYlZpZXcp
KTsKK30KKwordm9pZCBUZXN0U2hlbGw6OmNyZWF0ZVdlYkRldlRvb2xzRFJUQ2xpZW50KFdlYkRl
dlRvb2xzRFJUQWdlbnQgKmFnZW50KQoreworICAgIG1fd2ViRGV2VG9vbHNEUlRDbGllbnQuc2V0
KG5ldyBXZWJEZXZUb29sc0RSVENsaWVudChhZ2VudCwgd2ViVmlldygpKSk7Cit9CisKK3ZvaWQg
VGVzdFNoZWxsOjpzaG93RGV2VG9vbHMoKQoreworICAgIGlmICghbV9kZXZUb29scykgeworICAg
ICAgICBGaWxlUGF0aCBkaXJFeGU7CisgICAgICAgIGlmICghR2V0RXhlRGlyZWN0b3J5KCZkaXJF
eGUpKSB7CisgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIEZpbGVQYXRoIGRldlRvb2xzUGF0aCA9IGRpckV4ZS5BcHBlbmRB
U0NJSSgicmVzb3VyY2VzL2luc3BlY3Rvci9kZXZ0b29scy5odG1sIik7CisgICAgICAgIG1fZGV2
VG9vbHMgPSBjcmVhdGVOZXdXaW5kb3coR1VSTChkZXZUb29sc1BhdGgudmFsdWUoKSkpOworICAg
IH0KKyAgICBBU1NFUlQobV9kZXZUb29scyk7CisgICAgbV9kZXZUb29scy0+c2hvdyhXZWJLaXQ6
OldlYk5hdmlnYXRpb25Qb2xpY3lOZXdXaW5kb3cpOworfQorCit2b2lkIFRlc3RTaGVsbDo6Y2xv
c2VEZXZUb29scygpCit7CisgICAgaWYgKG1fZGV2VG9vbHMpCisgICAgICAgIGNsb3NlV2luZG93
KG1fZGV2VG9vbHMpOworfQorCiB2b2lkIFRlc3RTaGVsbDo6cmVzZXRXZWJTZXR0aW5ncyhXZWJW
aWV3JiB3ZWJWaWV3KQogewogICAgIC8vIE1hdGNoIHRoZSBzZXR0aW5ncyB1c2VkIGJ5IE1hYyBE
dW1wUmVuZGVyVHJlZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCkBAIC0yMDAsNiArMjM5LDEwIEBA
IHZvaWQgVGVzdFNoZWxsOjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMpCiAg
ICAgYm9vbCBpbnNwZWN0b3JUZXN0TW9kZSA9IHRlc3RVcmwuZmluZCgiL2luc3BlY3Rvci8iKSAh
PSBzdHJpbmc6Om5wb3MKICAgICAgICAgfHwgdGVzdFVybC5maW5kKCJcXGluc3BlY3RvclxcIikg
IT0gc3RyaW5nOjpucG9zOwogICAgIG1fd2ViVmlldy0+c2V0dGluZ3MoKS0+c2V0RGV2ZWxvcGVy
RXh0cmFzRW5hYmxlZChpbnNwZWN0b3JUZXN0TW9kZSk7CisKKyAgICBpZiAoaW5zcGVjdG9yVGVz
dE1vZGUpCisgICAgICAgIHNob3dEZXZUb29scygpOworCiAgICAgbV9wcmludGVyLT5oYW5kbGVU
ZXN0SGVhZGVyKHRlc3RVcmwuY19zdHIoKSk7CiAgICAgbG9hZFVSTChtX3BhcmFtcy50ZXN0VXJs
KTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
aApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IGEyYzk0ZWEuLmYyNWQzZGEK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysr
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTI4
LDYgKzI4LDkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBUZXN0U2hlbGxfaAor
I2RlZmluZSBUZXN0U2hlbGxfaAorCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJFdmVudFNlbmRlci5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCkBAIC01NCw2ICs1NywxMCBAQCBuYW1lc3BhY2Ugc2tpYSB7CiBjbGFzcyBQbGF0Zm9y
bUNhbnZhczsKIH0KIAorY2xhc3MgV2ViRGV2VG9vbHNEUlRBZ2VudDsKK2NsYXNzIFdlYkRldlRv
b2xzRFJUQ2FsbEFyZ3M7CitjbGFzcyBXZWJEZXZUb29sc0RSVENsaWVudDsKKwogc3RydWN0IFRl
c3RQYXJhbXMgewogICAgIGJvb2wgZHVtcFRyZWU7CiAgICAgYm9vbCBkdW1wUGl4ZWxzOwpAQCAt
NzMsNiArODAsNyBAQCBjbGFzcyBUZXN0U2hlbGwgewogcHVibGljOgogICAgIFRlc3RTaGVsbChi
b29sIHRlc3RTaGVsbE1vZGUpOwogICAgIH5UZXN0U2hlbGwoKTsKKwogICAgIC8vIFRoZSBtYWlu
IFdlYlZpZXcuCiAgICAgV2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4g
bV93ZWJWaWV3OyB9CiAgICAgLy8gUmV0dXJucyB0aGUgaG9zdCBmb3IgdGhlIG1haW4gV2ViVmll
dy4KQEAgLTEyMywxMSArMTMxLDIxIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3NlUmVtYWluaW5n
V2luZG93cygpOwogICAgIGludCB3aW5kb3dDb3VudCgpOwogICAgIHN0YXRpYyB2b2lkIHJlc2l6
ZVdpbmRvd0ZvclRlc3QoV2ViVmlld0hvc3QqLCBjb25zdCBXZWJLaXQ6OldlYlVSTCYpOwotICAg
IHZvaWQgc2hvd0RldlRvb2xzKCkge30gLy8gRklYTUU6IGltZXBsZW1lbnQgdGhpcy4KKworICAg
IHZvaWQgc2hvd0RldlRvb2xzKCk7CisgICAgdm9pZCBjbG9zZURldlRvb2xzKCk7CisKKy8vICAg
IFBhc3NSZWZQdHI8VGVzdFNoZWxsV2Vha1JlZmVyZW5jZT4gd2Vha1JlZmVyZW5jZSgpIGNvbnN0
OworCisgICAgV2ViRGV2VG9vbHNEUlRBZ2VudCogd2ViRGV2VG9vbHNEUlRBZ2VudCgpIHsgcmV0
dXJuIG1fd2ViRGV2VG9vbHNEUlRBZ2VudC5nZXQoKTsgfQorICAgIFdlYkRldlRvb2xzRFJUQ2xp
ZW50KiB3ZWJEZXZUb29sc0RSVENsaWVudCgpIHsgcmV0dXJuIG1fd2ViRGV2VG9vbHNEUlRDbGll
bnQuZ2V0KCk7IH0KIAogICAgIHN0YXRpYyBjb25zdCBpbnQgdmlydHVhbFdpbmRvd0JvcmRlciA9
IDM7CiAKIHByaXZhdGU6CisgICAgdm9pZCBpbml0aWFsaXplV2ViRGV2VG9vbHNEUlRBZ2VudChX
ZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcpOworICAgIHZvaWQgY3JlYXRlV2ViRGV2VG9vbHNEUlRD
bGllbnQoV2ViRGV2VG9vbHNEUlRBZ2VudCAqYWdlbnQpOworCiAgICAgc3RhdGljIHZvaWQgcmVz
ZXRXZWJTZXR0aW5ncyhXZWJLaXQ6OldlYlZpZXcmKTsKICAgICB2b2lkIGR1bXAoKTsKICAgICBz
dGQ6OnN0cmluZyBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cygpOwpAQCAtMTQwLDYgKzE1OCw5IEBA
IHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJXaWRnZXQqIG1fZm9jdXNlZFdpZGdldDsKICAgICBi
b29sIG1fdGVzdFNoZWxsTW9kZTsKICAgICBXZWJWaWV3SG9zdCogbV93ZWJWaWV3SG9zdDsKKyAg
ICBXZWJWaWV3SG9zdCogbV9kZXZUb29sczsKKyAgICBPd25QdHI8V2ViRGV2VG9vbHNEUlRBZ2Vu
dD4gbV93ZWJEZXZUb29sc0RSVEFnZW50OworICAgIE93blB0cjxXZWJEZXZUb29sc0RSVENsaWVu
dD4gbV93ZWJEZXZUb29sc0RSVENsaWVudDsKICAgICBPd25QdHI8QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7CiAgICAgT3duUHRyPEV2ZW50U2VuZGVy
PiBtX2V2ZW50U2VuZGVyOwogICAgIE93blB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gbV9sYXlv
dXRUZXN0Q29udHJvbGxlcjsKQEAgLTE2MiwzICsxODMsNSBAQCBwcml2YXRlOgogfTsKIAogdm9p
ZCBwbGF0Zm9ybUluaXQoKTsKKworI2VuZGlmIC8vIFRlc3RTaGVsbF9oCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZUb29sc0RSVEFnZW50LmNw
cCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJUQWdl
bnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4MmVhODAKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZU
b29sc0RSVEFnZW50LmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJEZXZUb29sc0RSVEFnZW50LmgiCisKKyNpbmNsdWRlICJXZWJEZXZUb29sc0RS
VENhbGxBcmdzLmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNEUlRDbGllbnQuaCIKKworI2luY2x1
ZGUgImJhc2UvbWVzc2FnZV9sb29wLmgiCisjaW5jbHVkZSAiYmFzZS9zdHJpbmdfcGllY2UuaCIK
KyNpbmNsdWRlICJncml0L3dlYmtpdF9jaHJvbWl1bV9yZXNvdXJjZXMuaCIKKyNpbmNsdWRlICJw
dWJsaWMvV2ViQ1N0cmluZy5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0FnZW50Lmgi
CisjaW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzTWVzc2FnZURhdGEuaCIKKyNpbmNsdWRlICJw
dWJsaWMvV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNpbmNsdWRl
ICJ3ZWJraXQvZ2x1ZS93ZWJraXRfZ2x1ZS5oIgorCisjaWYgT1MoV0lORE9XUykKKy8vIEFsbG93
ICd0aGlzJyB0byBiZSB1c2VkIGluIGJhc2UgbWVtYmVyIGluaXRpYWxpemVyIGxpc3QuCisjcHJh
Z21hIHdhcm5pbmcoZGlzYWJsZSA6IDQzNTUpCisjZW5kaWYgLy8gT1MoV0lORE9XUykKKwordXNp
bmcgV2ViS2l0OjpXZWJDU3RyaW5nOwordXNpbmcgV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50Owor
dXNpbmcgV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50Q2xpZW50OwordXNpbmcgV2ViS2l0OjpXZWJE
ZXZUb29sc01lc3NhZ2VEYXRhOwordXNpbmcgV2ViS2l0OjpXZWJTdHJpbmc7Cit1c2luZyBXZWJL
aXQ6OldlYlZpZXc7CisKK1dlYkRldlRvb2xzRFJUQWdlbnQ6OldlYkRldlRvb2xzRFJUQWdlbnQo
V2ViVmlldyogd2ViVmlldykKKyAgICA6IG1fY2FsbE1ldGhvZEZhY3RvcnkodGhpcykKKyAgICAs
IG1fd2ViRGV2VG9vbHNEUlRDbGllbnQoMCkKKyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQorewor
ICAgIHN0YXRpYyBpbnQgZGV2VG9vbHNBZ2VudENvdW50ZXIgPSAwOworCisgICAgbV9yb3V0aW5n
SUQgPSArK2RldlRvb2xzQWdlbnRDb3VudGVyOworICAgIGlmIChtX3JvdXRpbmdJRCA9PSAxKQor
ICAgICAgICBXZWJEZXZUb29sc0FnZW50OjpzZXRNZXNzYWdlTG9vcERpc3BhdGNoSGFuZGxlcigm
V2ViRGV2VG9vbHNEUlRBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCk7CisgICAgbV93ZWJEZXZU
b29sc0FnZW50ID0gV2ViRGV2VG9vbHNBZ2VudDo6Y3JlYXRlKG1fd2ViVmlldywgdGhpcyk7Cisg
ICAgbV93ZWJWaWV3LT5zZXREZXZUb29sc0FnZW50KG1fd2ViRGV2VG9vbHNBZ2VudCk7Cit9CisK
K3ZvaWQgV2ViRGV2VG9vbHNEUlRBZ2VudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdl
YkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCit7CisgICAgaWYgKG1fd2ViRGV2VG9vbHNEUlRD
bGllbnQpCisgICAgICAgICBtX3dlYkRldlRvb2xzRFJUQ2xpZW50LT5hc3luY0NhbGwoV2ViRGV2
VG9vbHNEUlRDYWxsQXJncyhkYXRhKSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNEUlRBZ2VudDo6
Zm9yY2VSZXBhaW50KCkKK3sKK30KKwordm9pZCBXZWJEZXZUb29sc0RSVEFnZW50OjpydW50aW1l
RmVhdHVyZVN0YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmVhdHVyZSwgYm9v
bCBlbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4gLSBvcmlnaW5hbCBU
T0RPKGxvaXNsbykKK30KKworV2ViQ1N0cmluZyBXZWJEZXZUb29sc0RSVEFnZW50OjppbmplY3Rl
ZFNjcmlwdFNvdXJjZSgpCit7CisgICAgYmFzZTo6U3RyaW5nUGllY2UgaW5qZWN0SlNXZWJraXQg
PSB3ZWJraXRfZ2x1ZTo6R2V0RGF0YVJlc291cmNlKElEUl9ERVZUT09MU19JTkpFQ1RfV0VCS0lU
X0pTKTsKKyAgICByZXR1cm4gV2ViQ1N0cmluZyhpbmplY3RKU1dlYmtpdC5hc19zdHJpbmcoKS5j
X3N0cigpKTsKK30KKworV2ViQ1N0cmluZyBXZWJEZXZUb29sc0RSVEFnZW50OjppbmplY3RlZFNj
cmlwdERpc3BhdGNoZXJTb3VyY2UoKQoreworICAgIGJhc2U6OlN0cmluZ1BpZWNlIGluamVjdERp
c3BhdGNoSlMgPSB3ZWJraXRfZ2x1ZTo6R2V0RGF0YVJlc291cmNlKElEUl9ERVZUT09MU19JTkpF
Q1RfRElTUEFUQ0hfSlMpOworICAgIHJldHVybiBXZWJDU3RyaW5nKGluamVjdERpc3BhdGNoSlMu
YXNfc3RyaW5nKCkuY19zdHIoKSk7Cit9CisKK1dlYkNTdHJpbmcgV2ViRGV2VG9vbHNEUlRBZ2Vu
dDo6ZGVidWdnZXJTY3JpcHRTb3VyY2UoKQoreworICAgIGJhc2U6OlN0cmluZ1BpZWNlIGRlYnVn
Z2VyU2NyaXB0SlMgPSB3ZWJraXRfZ2x1ZTo6R2V0RGF0YVJlc291cmNlKElEUl9ERVZUT09MU19E
RUJVR0dFUl9TQ1JJUFRfSlMpOworICAgIHJldHVybiBXZWJDU3RyaW5nKGRlYnVnZ2VyU2NyaXB0
SlMuYXNfc3RyaW5nKCkuY19zdHIoKSk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNEUlRBZ2VudDo6
YXN5bmNDYWxsKGNvbnN0IFdlYkRldlRvb2xzRFJUQ2FsbEFyZ3MgJmFyZ3MpCit7CisgICAgTWVz
c2FnZUxvb3A6OmN1cnJlbnQoKS0+UG9zdERlbGF5ZWRUYXNrKAorICAgICAgICBGUk9NX0hFUkUs
CisgICAgICAgIG1fY2FsbE1ldGhvZEZhY3RvcnkuTmV3UnVubmFibGVNZXRob2QoJldlYkRldlRv
b2xzRFJUQWdlbnQ6OmNhbGwsIGFyZ3MpLAorICAgICAgICAwKTsKK30KKwordm9pZCBXZWJEZXZU
b29sc0RSVEFnZW50OjpjYWxsKGNvbnN0IFdlYkRldlRvb2xzRFJUQ2FsbEFyZ3MgJmFyZ3MpCit7
CisgICAgV2ViRGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7CisgICAg
aWYgKGFnZW50KQorICAgICAgICBhZ2VudC0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUZyb250ZW5kKGFy
Z3MubV9kYXRhKTsKKyAgICBpZiAoV2ViRGV2VG9vbHNEUlRDYWxsQXJnczo6Y2FsbHNDb3VudCgp
ID09IDEgJiYgbV93ZWJEZXZUb29sc0RSVENsaWVudCkKKyAgICAgICAgbV93ZWJEZXZUb29sc0RS
VENsaWVudC0+YWxsTWVzc2FnZXNQcm9jZXNzZWQoKTsKK30KKworV2ViRGV2VG9vbHNBZ2VudCog
V2ViRGV2VG9vbHNEUlRBZ2VudDo6d2ViRGV2VG9vbHNBZ2VudCgpCit7CisgICAgaWYgKCFtX3dl
YlZpZXcpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3dlYlZpZXctPmRldlRvb2xz
QWdlbnQoKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0RSVEFnZW50OjphdHRhY2goV2ViRGV2VG9v
bHNEUlRDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fd2ViRGV2VG9vbHNEUlRDbGll
bnQpOworICAgIG1fd2ViRGV2VG9vbHNEUlRDbGllbnQgPSBjbGllbnQ7CisgICAgV2ViRGV2VG9v
bHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7CisgICAgaWYgKGFnZW50KQorICAg
ICAgICBhZ2VudC0+YXR0YWNoKCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNEUlRBZ2VudDo6ZGV0
YWNoKFdlYkRldlRvb2xzRFJUQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fd2ViRGV2
VG9vbHNEUlRDbGllbnQpOworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9v
bHNBZ2VudCgpOworICAgIGlmIChhZ2VudCkKKyAgICAgICAgYWdlbnQtPmRldGFjaCgpOworICAg
IG1fd2ViRGV2VG9vbHNEUlRDbGllbnQgPSAwOworfQorCitib29sIFdlYkRldlRvb2xzRFJUQWdl
bnQ6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgV2Vi
RGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7CisgICAgaWYgKCFhZ2Vu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFnZW50LT5zZXRUaW1lbGluZVByb2ZpbGlu
Z0VuYWJsZWQoZW5hYmxlZCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViRGV2VG9v
bHNEUlRBZ2VudDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJRCwgY29uc3Qgc3Rk
OjpzdHJpbmcmIHNjcmlwdCkKK3sKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRl
dlRvb2xzQWdlbnQoKTsKKyAgICBpZiAoIWFnZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYWdlbnQtPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY2FsbElELCBXZWJTdHJpbmc6OmZyb21V
VEY4KHNjcmlwdCkpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBzdGF0aWMgbWV0aG9kCit2
b2lkIFdlYkRldlRvb2xzRFJUQWdlbnQ6OmRpc3BhdGNoTWVzc2FnZUxvb3AoKQoreworICAgIE1l
c3NhZ2VMb29wKiBjdXJyZW50ID0gTWVzc2FnZUxvb3A6OmN1cnJlbnQoKTsKKyAgICBib29sIG9s
ZFN0YXRlID0gY3VycmVudC0+TmVzdGFibGVUYXNrc0FsbG93ZWQoKTsKKworICAgIGN1cnJlbnQt
PlNldE5lc3RhYmxlVGFza3NBbGxvd2VkKHRydWUpOworICAgIGN1cnJlbnQtPlJ1bkFsbFBlbmRp
bmcoKTsKKyAgICBjdXJyZW50LT5TZXROZXN0YWJsZVRhc2tzQWxsb3dlZChvbGRTdGF0ZSk7Cit9
CisKKy8vIHN0YXRpYyBtZXRob2QgZnJvbSBXZWJEZXZUb29sc0FnZW50Q2xpZW50Cit2b2lkIFdl
YkRldlRvb2xzQWdlbnRDbGllbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZE9uSU9UaHJlYWQoV2Vi
RGV2VG9vbHNNZXNzYWdlRGF0YSBjb25zdCAmKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViRGV2VG9vbHNEUlRBZ2VudC5oIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViRGV2VG9vbHNEUlRBZ2VudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhZmIwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZUb29sc0RSVEFnZW50LmgK
QEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRGV2VG9vbHNEUlRBZ2VudF9oCisjZGVmaW5lIFdl
YkRldlRvb2xzRFJUQWdlbnRfaAorCisjaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCisjaW5jbHVk
ZSAiYmFzZS90YXNrLmgiCisKKyN1bmRlZiBMT0cKKworI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZU
b29sc0FnZW50Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3RyaW5nOworY2xhc3MgV2ViRGV2VG9vbHNBZ2Vu
dDsKK2NsYXNzIFdlYlZpZXc7CitzdHJ1Y3QgV2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIFdlYkRldlRvb2xzRFJUQ2FsbEFyZ3M7CitjbGFz
cyBXZWJEZXZUb29sc0RSVENsaWVudDsKKworY2xhc3MgV2ViRGV2VG9vbHNEUlRBZ2VudCA6IHB1
YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRDbGllbnQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLCBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIFdlYkRldlRvb2xzRFJU
QWdlbnQoV2ViS2l0OjpXZWJWaWV3KiB3ZWJfdmlldyk7CisgICAgdmlydHVhbCB+V2ViRGV2VG9v
bHNEUlRBZ2VudCgpIHt9CisKKyAgICAvLyBXZWJEZXZUb29sc0FnZW50Q2xpZW50IGltcGxlbWVu
dGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgV2Vi
S2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKTsKKyAgICB2aXJ0dWFsIGludCBob3N0
SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcm91dGluZ0lEOyB9CisgICAgdmlydHVhbCB2b2lkIGZv
cmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdl
ZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmVhdHVyZSwgYm9vbCBlbmFibGVkKTsKKyAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViQ1N0cmluZyBpbmplY3RlZFNjcmlwdFNvdXJjZSgpOworICAgIHZp
cnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGluamVjdGVkU2NyaXB0RGlzcGF0Y2hlclNvdXJjZSgp
OworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGRlYnVnZ2VyU2NyaXB0U291cmNlKCk7
CisKKyAgICB2b2lkIGFzeW5jQ2FsbChjb25zdCBXZWJEZXZUb29sc0RSVENhbGxBcmdzJiBhcmdz
KTsKKworICAgIHZvaWQgYXR0YWNoKFdlYkRldlRvb2xzRFJUQ2xpZW50KiBjbGllbnQpOworICAg
IHZvaWQgZGV0YWNoKFdlYkRldlRvb2xzRFJUQ2xpZW50KiBjbGllbnQpOworCisgICAgYm9vbCBl
dmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElELCBjb25zdCBzdGQ6OnN0cmluZyYgc2Ny
aXB0KTsKKyAgICBib29sIHNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChib29sIGVuYWJsZSk7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBjYWxsKGNvbnN0IFdlYkRldlRvb2xzRFJUQ2FsbEFyZ3Mm
IGFyZ3MpOworICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoTWVzc2FnZUxvb3AoKTsKKyAgICBXZWJL
aXQ6OldlYkRldlRvb2xzQWdlbnQqIHdlYkRldlRvb2xzQWdlbnQoKTsKKworICAgIFNjb3BlZFJ1
bm5hYmxlTWV0aG9kRmFjdG9yeTxXZWJEZXZUb29sc0RSVEFnZW50PiBtX2NhbGxNZXRob2RGYWN0
b3J5OworICAgIFdlYkRldlRvb2xzRFJUQ2xpZW50KiBtX3dlYkRldlRvb2xzRFJUQ2xpZW50Owor
ICAgIGludCBtX3JvdXRpbmdJRDsKKyAgICBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQqIG1fd2Vi
RGV2VG9vbHNBZ2VudDsKKyAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKK307CisKKyNl
bmRpZiAvLyBXZWJEZXZUb29sc0RSVEFnZW50X2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJUQ2FsbEFyZ3MuY3BwIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViRGV2VG9vbHNEUlRDYWxsQXJncy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmZhZjNkZAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJU
Q2FsbEFyZ3MuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViRGV2VG9vbHNEUlRDYWxsQXJncy5oIgorCisvLyBzdGF0aWMKK2ludCBXZWJEZXZUb29s
c0RSVENhbGxBcmdzOjptX2NhbGxzQ291bnQgPSAwOworCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZUb29sc0RSVENhbGxBcmdzLmggYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJEZXZUb29sc0RSVENhbGxBcmdzLmgK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTVmYTgyNQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJU
Q2FsbEFyZ3MuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJEZXZUb29sc0RSVENhbGxBcmdz
X2gKKyNkZWZpbmUgV2ViRGV2VG9vbHNEUlRDYWxsQXJnc19oCisKKyNpbmNsdWRlICJwdWJsaWMv
V2ViRGV2VG9vbHNNZXNzYWdlRGF0YS5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBXZWJEZXZUb29sc0RSVENhbGxB
cmdzIHsKK3B1YmxpYzoKKyAgICBXZWJEZXZUb29sc0RSVENhbGxBcmdzKGNvbnN0IFdlYktpdDo6
V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAg
ICB7CisgICAgICAgICsrbV9jYWxsc0NvdW50OworCisgICAgICAgIC8vIFRoZSBzYW1lIGJlaGF2
aW91ciBhcyB3ZSBoYXZlIGluIGNhc2Ugb2YgSVBDLgorICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZGF0YS5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICht
X2RhdGEuYXJndW1lbnRzW2ldLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIG1fZGF0YS5hcmd1
bWVudHNbaV0gPSBXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgoIiIpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgV2ViRGV2VG9vbHNEUlRDYWxsQXJncyhjb25zdCBXZWJEZXZUb29sc0RSVENh
bGxBcmdzJiBhcmdzKQorICAgICAgICA6IG1fZGF0YShhcmdzLm1fZGF0YSkKKyAgICB7CisgICAg
ICAgICsrbV9jYWxsc0NvdW50OworICAgIH0KKworICAgIH5XZWJEZXZUb29sc0RSVENhbGxBcmdz
KCkKKyAgICB7CisgICAgICAgIC0tbV9jYWxsc0NvdW50OworICAgICAgICBBU1NFUlQobV9jYWxs
c0NvdW50ID49IDApOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgY2FsbHNDb3VudCgpIHsgcmV0
dXJuIG1fY2FsbHNDb3VudDsgfQorCisgICAgV2ViS2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRh
IG1fZGF0YTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IG1fY2FsbHNDb3VudDsKK307CisK
KyNlbmRpZiAvLyBXZWJEZXZUb29sc0RSVENhbGxBcmdzX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJUQ2xpZW50LmNwcCBiL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJUQ2xpZW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzU3OGNlCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViRGV2VG9vbHNE
UlRDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkRldlRvb2xzRFJUQ2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJEZXZUb29sc0RSVEFn
ZW50LmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNEUlRDYWxsQXJncy5oIgorCisjaW5jbHVkZSAi
YmFzZS9tZXNzYWdlX2xvb3AuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNBZ2VudC5o
IgorI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kLmgiCisjaW5jbHVkZSAicHVi
bGljL1dlYkZyYW1lLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlNjcmlwdFNvdXJjZS5oIgorI2lu
Y2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViVmlldy5oIgor
CisjaWYgT1MoV0lORE9XUykKKy8vIEFsbG93ICd0aGlzJyB0byBiZSB1c2VkIGluIGJhc2UgbWVt
YmVyIGluaXRpYWxpemVyIGxpc3QuCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQzNTUpCisj
ZW5kaWYgLy8gT1MoV0lORE9XUykKKwordXNpbmcgV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50Owor
dXNpbmcgV2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kOwordXNpbmcgV2ViS2l0OjpXZWJEZXZU
b29sc01lc3NhZ2VEYXRhOwordXNpbmcgV2ViS2l0OjpXZWJTdHJpbmc7Cit1c2luZyBXZWJLaXQ6
OldlYlZpZXc7CisKK1dlYkRldlRvb2xzRFJUQ2xpZW50OjpXZWJEZXZUb29sc0RSVENsaWVudChX
ZWJEZXZUb29sc0RSVEFnZW50KiBhZ2VudCwgV2ViVmlldyogd2ViVmlldykKKyAgICA6IG1fY2Fs
bE1ldGhvZEZhY3RvcnkodGhpcykKKyAgICAsIG1fd2ViRGV2VG9vbHNEUlRBZ2VudChhZ2VudCkK
KyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQoreworICAgIG1fd2ViRGV2VG9vbHNGcm9udGVuZC5z
ZXQoV2ViRGV2VG9vbHNGcm9udGVuZDo6Y3JlYXRlKG1fd2ViVmlldywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0
cmluZzo6ZnJvbVVURjgoImVuLVVTIikpKTsKKyAgICBtX3dlYkRldlRvb2xzRFJUQWdlbnQtPmF0
dGFjaCh0aGlzKTsKK30KKworV2ViRGV2VG9vbHNEUlRDbGllbnQ6On5XZWJEZXZUb29sc0RSVENs
aWVudCgpCit7CisgICAgLy8gVGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGUgcGFnZSB3aWxsIGJl
IGRlc3Ryb3llZCBhdCBkZXRhY2ggc3RlcCBvZgorICAgIC8vIG1fd2ViRGV2VG9vbHNEUlRBZ2Vu
dCBhbmQgd2Ugc2hvdWxkIGNsZWFuIHBlbmRpbmcgcmVxdWVzdHMgYSBiaXQgZWFybGllci4KKyAg
ICBtX2NhbGxNZXRob2RGYWN0b3J5LlJldm9rZUFsbCgpOworICAgIGlmIChtX3dlYkRldlRvb2xz
RFJUQWdlbnQpCisgICAgICAgIG1fd2ViRGV2VG9vbHNEUlRBZ2VudC0+ZGV0YWNoKHRoaXMpOwor
fQorCit2b2lkIFdlYkRldlRvb2xzRFJUQ2xpZW50OjpzZW5kTWVzc2FnZVRvQWdlbnQoY29uc3Qg
V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKK3sKKyAgICBpZiAobV93ZWJEZXZUb29sc0RS
VEFnZW50KQorICAgICAgICBtX3dlYkRldlRvb2xzRFJUQWdlbnQtPmFzeW5jQ2FsbChXZWJEZXZU
b29sc0RSVENhbGxBcmdzKGRhdGEpKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0RSVENsaWVudDo6
c2VuZERlYnVnZ2VyQ29tbWFuZFRvQWdlbnQoY29uc3QgV2ViU3RyaW5nJiBjb21tYW5kKQorewor
ICAgIFdlYkRldlRvb2xzQWdlbnQ6OmV4ZWN1dGVEZWJ1Z2dlckNvbW1hbmQoY29tbWFuZCwgMSk7
Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNEUlRDbGllbnQ6OmFjdGl2YXRlV2luZG93KCkKK3sKKyAg
ICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgV2ViRGV2VG9vbHNEUlRDbGllbnQ6OmNsb3NlV2luZG93KCkKK3sKKyAgICAvLyBOb3QgaW1w
bGVtZW50ZWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9v
bHNEUlRDbGllbnQ6OmRvY2tXaW5kb3coKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0RSVENsaWVudDo6
dW5kb2NrV2luZG93KCkKK3sKKyAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgV2ViRGV2VG9vbHNEUlRDbGllbnQ6OmFzeW5jQ2FsbChj
b25zdCBXZWJEZXZUb29sc0RSVENhbGxBcmdzJiBhcmdzKQoreworICAgIE1lc3NhZ2VMb29wOjpj
dXJyZW50KCktPlBvc3REZWxheWVkVGFzaygKKyAgICAgICAgRlJPTV9IRVJFLAorICAgICAgICBt
X2NhbGxNZXRob2RGYWN0b3J5Lk5ld1J1bm5hYmxlTWV0aG9kKCZXZWJEZXZUb29sc0RSVENsaWVu
dDo6Y2FsbCwgYXJncyksCisgICAgICAgIDApOworfQorCit2b2lkIFdlYkRldlRvb2xzRFJUQ2xp
ZW50OjpjYWxsKGNvbnN0IFdlYkRldlRvb2xzRFJUQ2FsbEFyZ3MgJmFyZ3MpCit7CisgICAgbV93
ZWJEZXZUb29sc0Zyb250ZW5kLT5kaXNwYXRjaE1lc3NhZ2VGcm9tQWdlbnQoYXJncy5tX2RhdGEp
OworICAgIGlmIChXZWJEZXZUb29sc0RSVENhbGxBcmdzOjpjYWxsc0NvdW50KCkgPT0gMSkKKyAg
ICAgICAgYWxsTWVzc2FnZXNQcm9jZXNzZWQoKTsKK30KKwordm9pZCBXZWJEZXZUb29sc0RSVENs
aWVudDo6YWxsTWVzc2FnZXNQcm9jZXNzZWQoKQoreworICAgIG1fd2ViVmlldy0+bWFpbkZyYW1l
KCktPmV4ZWN1dGVTY3JpcHQoCisgICAgICAgIFdlYktpdDo6V2ViU2NyaXB0U291cmNlKFdlYlN0
cmluZzo6ZnJvbVVURjgoCisgICAgICAgICAgICAiaWYgKHdpbmRvdy5XZWJJbnNwZWN0b3IgJiYg
V2ViSW5zcGVjdG9yLnF1ZXVlc0FyZUVtcHR5KSBXZWJJbnNwZWN0b3IucXVldWVzQXJlRW1wdHko
KTsiKSkpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vV2ViRGV2VG9vbHNEUlRDbGllbnQuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYkRldlRvb2xzRFJUQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXgg
MDAwMDAwMC4uNjNhNjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYkRldlRvb2xzRFJUQ2xpZW50LmgKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViRGV2VG9vbHNEUlRDbGllbnRfaAorI2RlZmluZSBXZWJEZXZUb29sc0RSVENsaWVu
dF9oCisKKyNpbmNsdWRlICJiYXNlL3Rhc2suaCIKKworI3VuZGVmIExPRworCisjaW5jbHVkZSAi
cHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBXZWJEZXZUb29sc0Zyb250ZW5kOworc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURh
dGE7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJWaWV3OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworY2xhc3MgV2ViRGV2VG9vbHNEUlRDYWxsQXJnczsKK2NsYXNzIFdlYkRldlRvb2xz
RFJUQWdlbnQ7CisKK2NsYXNzIFdlYkRldlRvb2xzRFJUQ2xpZW50IDogcHVibGljIFdlYktpdDo6
V2ViRGV2VG9vbHNGcm9udGVuZENsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBw
dWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIFdlYkRldlRvb2xzRFJUQ2xpZW50KFdl
YkRldlRvb2xzRFJUQWdlbnQqIGFnZW50LCBXZWJLaXQ6OldlYlZpZXcqIHdlYl92aWV3KTsKKyAg
ICB2aXJ0dWFsIH5XZWJEZXZUb29sc0RSVENsaWVudCgpOworCisgICAgLy8gV2ViRGV2VG9vbHNG
cm9udGVuZENsaWVudCBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2Fn
ZVRvQWdlbnQoY29uc3QgV2ViS2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2VuZERlYnVnZ2VyQ29tbWFuZFRvQWdlbnQoY29uc3QgV2ViS2l0OjpX
ZWJTdHJpbmcmIGNvbW1hbmQpOworCisgICAgdmlydHVhbCB2b2lkIGFjdGl2YXRlV2luZG93KCk7
CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGRvY2tX
aW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5kb2NrV2luZG93KCk7CisKKyAgICB2b2lkIGFz
eW5jQ2FsbChjb25zdCBXZWJEZXZUb29sc0RSVENhbGxBcmdzJiBhcmdzKTsKKworICAgIHZvaWQg
YWxsTWVzc2FnZXNQcm9jZXNzZWQoKTsKKworIHByaXZhdGU6CisgICAgdm9pZCBjYWxsKGNvbnN0
IFdlYkRldlRvb2xzRFJUQ2FsbEFyZ3MmIGFyZ3MpOworCisgICAgU2NvcGVkUnVubmFibGVNZXRo
b2RGYWN0b3J5PFdlYkRldlRvb2xzRFJUQ2xpZW50PiBtX2NhbGxNZXRob2RGYWN0b3J5OworICAg
IFdlYktpdDo6V2ViVmlldyogbV93ZWJWaWV3OworICAgIFdlYkRldlRvb2xzRFJUQWdlbnQqIG1f
d2ViRGV2VG9vbHNEUlRBZ2VudDsKKyAgICBXVEY6Ok93blB0cjxXZWJLaXQ6OldlYkRldlRvb2xz
RnJvbnRlbmQ+IG1fd2ViRGV2VG9vbHNGcm9udGVuZDsKK307CisKKyNlbmRpZiAvLyBXZWJEZXZU
b29sc0RSVENsaWVudF9oCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9jb25maWcuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2Nv
bmZpZy5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNjAyOTUzMi4uYmVj
ZjA4ZQotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaApAQCAtNDEs
NiArNDEsNyBAQAogI2RlZmluZSBEQ0hFQ0soY29uZGl0aW9uKSB3aGlsZSAoZmFsc2UgJiYgKGNv
bmRpdGlvbikpIHN0ZDo6Y2VycgogI2RlZmluZSBEQ0hFQ0tfRVEoYSwgYikgd2hpbGUgKGZhbHNl
ICYmIChhKSA9PSAoYikpIHN0ZDo6Y2VycgogI2RlZmluZSBEQ0hFQ0tfTkUoYSwgYikgd2hpbGUg
KGZhbHNlICYmIChhKSAhPSAoYikpIHN0ZDo6Y2VycgorI2RlZmluZSBOT1RSRUFDSEVEKCkgRENI
RUNLKGZhbHNlKQogCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAK
</data>
<flag name="review"
          id="45717"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60360</attachid>
            <date>2010-07-02 05:51:01 -0700</date>
            <delta_ts>2010-07-02 06:36:30 -0700</delta_ts>
            <desc>patch - snapshot of current state</desc>
            <filename>devtools2.patch</filename>
            <type>text/plain</type>
            <size>37953</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDY4YjVhZDIuLjRhOTQ3NTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA3LTAxICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFRhbXVyYSBLZW50LgorCisgICAgICAgIEJ1
ZyA0MDU1OCAtIFtEUlQvQ2hyb21pdW1dIFVwc3RyZWFtIFRlc3RTaGVsbERldlRvb2xzIGZvciBD
aHJvbWl1bSBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQwNTU4CisKKyAgICAgICAgVXBzdHJlYW0gRGV2VG9vbHMgZm9yIENocm9taXVtIERSVC4K
KworICAgICAgICAqIFdlYktpdC5neXA6CisKIDIwMTAtMDctMDEgIEtlbm5ldGggUnVzc2VsbCAg
PGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCBlMmRhMWI0
Li4wYzdmNTE5Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02MjksNiArNjI5LDkgQEAKICAgICAgICAgICAgICAgICBb
J09TPT0id2luIicsIHsKICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsnTGF5
b3V0VGVzdEhlbHBlciddLAogCisgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBb
CisgICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
a2l0JywgIyBmb3IgYSBoZWFkZXIgZ2VuZXJhdGVkIGJ5IGdyaXQKKyAgICAgICAgICAgICAgICAg
ICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlX2luY2x1ZGVfZGlycyc6IFsnPChT
SEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0J10sCiAgICAgICAgICAgICAgICAgICAgICdz
b3VyY2VzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL25ldC9uZXRfcmVzb3VyY2VzLnJjJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
ZXZUb29sc0FnZW50SW1wbC5jcHAKaW5kZXggMjBhYjFkMy4uYzhkYmNmOCAxMDA2NDQKLS0tIGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTIyMSw2ICsyMjEsNyBA
QCBXZWJEZXZUb29sc0FnZW50SW1wbDo6V2ViRGV2VG9vbHNBZ2VudEltcGwoCiAgICAgLCBtX3Jl
c291cmNlVHJhY2tpbmdXYXNFbmFibGVkKGZhbHNlKQogICAgICwgbV9hdHRhY2hlZChmYWxzZSkK
IHsKKzo6TWVzc2FnZUJveCgwLCBMIldlYkRldlRvb2xzQWdlbnRJbXBsOjpXZWJEZXZUb29sc0Fn
ZW50SW1wbCIsIEwiSW50ZXJydXB0IiwgMCk7CiAgICAgRGVidWdnZXJBZ2VudE1hbmFnZXI6OnNl
dEV4cG9zZVY4RGVidWdnZXJQcm90b2NvbCgKICAgICAgICAgY2xpZW50LT5leHBvc2VWOERlYnVn
Z2VyUHJvdG9jb2woKSk7CiAgICAgbV9kZWJ1Z2dlckFnZW50RGVsZWdhdGVTdHViLnNldChuZXcg
RGVidWdnZXJBZ2VudERlbGVnYXRlU3R1Yih0aGlzKSk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggYzVjNTE0Yi4uMjc4NTUy
MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEwLTA3LTAxICBSb2xhbmQgU3RlaW5lciAgPHJv
bGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFRhbXVyYSBL
ZW50LgorCisgICAgICAgIEJ1ZyA0MDU1OCAtIFtEUlQvQ2hyb21pdW1dIFVwc3RyZWFtIFRlc3RT
aGVsbERldlRvb2xzIGZvciBDaHJvbWl1bSBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNTU4CisKKyAgICAgICAgVXBzdHJlYW0gRGV2VG9vbHMg
Zm9yIENocm9taXVtIERSVC4KKyAgICAgICAgKG9yaWdpbmFsIENocm9taXVtIGZpbGVzIHJldi4g
NTEyODcpCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUaW1lbGluZVByb2ZpbGluZ0Vu
YWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3IpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6
CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6On5U
ZXN0U2hlbGwpOgorICAgICAgICAoVGVzdFNoZWxsOjpjcmVhdGVEUlREZXZUb29sc0NsaWVudCk6
CisgICAgICAgIChUZXN0U2hlbGw6OnNob3dEZXZUb29scyk6CisgICAgICAgIChUZXN0U2hlbGw6
OmNsb3NlRGV2VG9vbHMpOgorICAgICAgICAoVGVzdFNoZWxsOjpydW5GaWxlVGVzdCk6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0
U2hlbGw6OndlYkRldlRvb2xzRFJUQWdlbnQpOgorICAgICAgICAoVGVzdFNoZWxsOjp3ZWJEZXZU
b29sc0RSVENsaWVudCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2
VG9vbHNBZ2VudC5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6RFJURGV2
VG9vbHNBZ2VudCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpzZW5kTWVzc2FnZVRvRnJv
bnRlbmQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6Zm9yY2VSZXBhaW50KToKKyAgICAg
ICAgKERSVERldlRvb2xzQWdlbnQ6OnJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKERSVERldlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0U291cmNlKToKKyAgICAgICAgKERS
VERldlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0RGlzcGF0Y2hlclNvdXJjZSk6CisgICAgICAg
IChEUlREZXZUb29sc0FnZW50OjpkZWJ1Z2dlclNjcmlwdFNvdXJjZSk6CisgICAgICAgIChEUlRE
ZXZUb29sc0FnZW50Ojphc3luY0NhbGwpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6Y2Fs
bCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojp3ZWJEZXZUb29sc0FnZW50KToKKyAgICAg
ICAgKERSVERldlRvb2xzQWdlbnQ6OmF0dGFjaCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50
OjpkZXRhY2gpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxp
bmdFbmFibGVkKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3IpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCk6
CisgICAgICAgIChXZWJEZXZUb29sc0FnZW50Q2xpZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmRP
bklPVGhyZWFkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29s
c0FnZW50Lmg6IEFkZGVkLgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6fkRSVERldlRvb2xz
QWdlbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6aG9zdElkZW50aWZpZXIpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxB
cmdzLmg6IEFkZGVkLgorICAgICAgICAoRFJURGV2VG9vbHNDYWxsQXJnczo6RFJURGV2VG9vbHND
YWxsQXJncyk6CisgICAgICAgIChEUlREZXZUb29sc0NhbGxBcmdzOjp+RFJURGV2VG9vbHNDYWxs
QXJncyk6CisgICAgICAgIChEUlREZXZUb29sc0NhbGxBcmdzOjpjYWxsc0NvdW50KToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OkRSVERldlRvb2xzQ2xpZW50KToKKyAgICAg
ICAgKERSVERldlRvb2xzQ2xpZW50Ojp+RFJURGV2VG9vbHNDbGllbnQpOgorICAgICAgICAoRFJU
RGV2VG9vbHNDbGllbnQ6OnNlbmRNZXNzYWdlVG9BZ2VudCk6CisgICAgICAgIChEUlREZXZUb29s
c0NsaWVudDo6c2VuZERlYnVnZ2VyQ29tbWFuZFRvQWdlbnQpOgorICAgICAgICAoRFJURGV2VG9v
bHNDbGllbnQ6OmFjdGl2YXRlV2luZG93KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50Ojpj
bG9zZVdpbmRvdyk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6ZG9ja1dpbmRvdyk6Cisg
ICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6dW5kb2NrV2luZG93KToKKyAgICAgICAgKERSVERl
dlRvb2xzQ2xpZW50Ojphc3luY0NhbGwpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmNh
bGwpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmFsbE1lc3NhZ2VzUHJvY2Vzc2VkKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaDoKKwogMjAx
MC0wNy0wMSAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpvbGQgbW9kZSAxMDA2
NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDVmYzhkYWIuLmZkNTcyMGYKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQorKysgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCkBAIC05LDYgKzksMTIgQEAKICAgICAg
ICAgICAgICdjaHJvbWl1bS9DcHBCb3VuZENsYXNzLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L0NwcFZhcmlhbnQuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9DcHBWYXJpYW50LmgnLAor
ICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwJywKKyAgICAgICAgICAg
ICdjaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL0RS
VERldlRvb2xzQ2FsbEFyZ3MuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29s
c0NhbGxBcmdzLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmNw
cCcsCisgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaCcsCiAgICAgICAg
ICAgICAnY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1
bS9FdmVudFNlbmRlci5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL0V2ZW50U2VuZGVyLmgn
LApAQCAtNDQsNSArNTAsNSBAQAogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICB9XSwK
ICAgICAgICAgXSwKLSAgICB9CisgICAgfSwKIH0KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDUxZGVkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwCkBAIC0w
LDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQWdl
bnQuaCIKKworI2luY2x1ZGUgIkRSVERldlRvb2xzQ2FsbEFyZ3MuaCIKKyNpbmNsdWRlICJEUlRE
ZXZUb29sc0NsaWVudC5oIgorCisjaW5jbHVkZSAicHVibGljL1dlYkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJwdWJsaWMvV2ViRGV2VG9vbHNBZ2VudC5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZU
b29sc01lc3NhZ2VEYXRhLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlN0cmluZy5oIgorI2luY2x1
ZGUgInB1YmxpYy9XZWJWaWV3LmgiCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1
cHBvcnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRFJURGV2VG9vbHNBZ2VudDo6
RFJURGV2VG9vbHNBZ2VudCgpCisgICAgOiBtX2NhbGxNZXRob2RGYWN0b3J5KHRoaXMpCisgICAg
LCBtX2RydERldlRvb2xzQ2xpZW50KDApCisgICAgLCBtX3dlYlZpZXcoMCkKK3sKKyAgICBzdGF0
aWMgaW50IGRldlRvb2xzQWdlbnRDb3VudGVyID0gMDsKKworICAgIG1fcm91dGluZ0lEID0gKytk
ZXZUb29sc0FnZW50Q291bnRlcjsKKyAgICBpZiAobV9yb3V0aW5nSUQgPT0gMSkKKyAgICAgICAg
V2ViRGV2VG9vbHNBZ2VudDo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoJkRSVERldlRv
b2xzQWdlbnQ6OmRpc3BhdGNoTWVzc2FnZUxvb3ApOworfQorCit2b2lkIERSVERldlRvb2xzQWdl
bnQ6OnNldFdlYlZpZXcoV2ViVmlldyogd2ViVmlldykgeworICAgIG1fd2ViVmlldyA9IHdlYlZp
ZXc7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNv
bnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCit7CisgICAgaWYgKG1fZHJ0RGV2VG9v
bHNDbGllbnQpCisgICAgICAgICBtX2RydERldlRvb2xzQ2xpZW50LT5hc3luY0NhbGwoRFJURGV2
VG9vbHNDYWxsQXJncyhkYXRhKSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6Zm9yY2VS
ZXBhaW50KCkKK3sKK30KKwordm9pZCBEUlREZXZUb29sc0FnZW50OjpydW50aW1lRmVhdHVyZVN0
YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmVhdHVyZSwgYm9vbCBlbmFibGVk
KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcy4KK30KKworV2ViQ1N0cmluZyBEUlRE
ZXZUb29sc0FnZW50OjppbmplY3RlZFNjcmlwdFNvdXJjZSgpCit7CisgICAgcmV0dXJuIHdlYmtp
dF9zdXBwb3J0OjpHZXREZXZUb29sc0luamVjdGVkU2NyaXB0U291cmNlKCk7Cit9CisKK1dlYkNT
dHJpbmcgRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCkK
K3sKKyAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkdldERldlRvb2xzSW5qZWN0ZWRTY3JpcHRE
aXNwYXRjaGVyU291cmNlKCk7Cit9CisKK1dlYkNTdHJpbmcgRFJURGV2VG9vbHNBZ2VudDo6ZGVi
dWdnZXJTY3JpcHRTb3VyY2UoKQoreworICAgIHJldHVybiB3ZWJraXRfc3VwcG9ydDo6R2V0RGV2
VG9vbHNEZWJ1Z2dlclNjcmlwdFNvdXJjZSgpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6
OmFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzICZhcmdzKQoreworICAgIHdlYmtp
dF9zdXBwb3J0OjpQb3N0VGFza0Zyb21IZXJlKAorICAgICAgICBtX2NhbGxNZXRob2RGYWN0b3J5
Lk5ld1J1bm5hYmxlTWV0aG9kKCZEUlREZXZUb29sc0FnZW50OjpjYWxsLCBhcmdzKSk7Cit9CisK
K3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6Y2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzICZh
cmdzKQoreworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgp
OworICAgIGlmIChhZ2VudCkKKyAgICAgICAgYWdlbnQtPmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9u
dGVuZChhcmdzLm1fZGF0YSk7CisgICAgaWYgKERSVERldlRvb2xzQ2FsbEFyZ3M6OmNhbGxzQ291
bnQoKSA9PSAxICYmIG1fZHJ0RGV2VG9vbHNDbGllbnQpCisgICAgICAgIG1fZHJ0RGV2VG9vbHND
bGllbnQtPmFsbE1lc3NhZ2VzUHJvY2Vzc2VkKCk7Cit9CisKK1dlYkRldlRvb2xzQWdlbnQqIERS
VERldlRvb2xzQWdlbnQ6OndlYkRldlRvb2xzQWdlbnQoKQoreworICAgIGlmICghbV93ZWJWaWV3
KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5kZXZUb29sc0FnZW50
KCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6YXR0YWNoKERSVERldlRvb2xzQ2xpZW50
KiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2RydERldlRvb2xzQ2xpZW50KTsKKyAgICBtX2Ry
dERldlRvb2xzQ2xpZW50ID0gY2xpZW50OworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFnZW50ID0g
d2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmIChhZ2VudCkKKyAgICAgICAgYWdlbnQtPmF0dGFj
aCgpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6OmRldGFjaChEUlREZXZUb29sc0NsaWVu
dCogY2xpZW50KQoreworICAgIEFTU0VSVChtX2RydERldlRvb2xzQ2xpZW50KTsKKyAgICBXZWJE
ZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xzQWdlbnQoKTsKKyAgICBpZiAoYWdlbnQp
CisgICAgICAgIGFnZW50LT5kZXRhY2goKTsKKyAgICBtX2RydERldlRvb2xzQ2xpZW50ID0gMDsK
K30KKworYm9vbCBEUlREZXZUb29sc0FnZW50OjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQoreworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9v
bHNBZ2VudCgpOworICAgIGlmICghYWdlbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
Z2VudC0+c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGVuYWJsZWQpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIERSVERldlRvb2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3Io
bG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHQpCit7CisgICAgV2ViRGV2VG9v
bHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7CisgICAgaWYgKCFhZ2VudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFnZW50LT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNh
bGxJRCwgV2ViU3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gc3RhdGljIG1ldGhvZAordm9pZCBEUlREZXZUb29sc0FnZW50OjpkaXNwYXRjaE1lc3Nh
Z2VMb29wKCkKK3sKKyAgICB3ZWJraXRfc3VwcG9ydDo6RGlzcGF0Y2hNZXNzYWdlTG9vcCgpOwor
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2
VG9vbHNBZ2VudC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2
VG9vbHNBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzYWQwZmQK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
UlREZXZUb29sc0FnZW50LmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRFJURGV2VG9vbHNBZ2Vu
dF9oCisjZGVmaW5lIERSVERldlRvb2xzQWdlbnRfaAorCisvLyNpbmNsdWRlICJiYXNlL2xvZ2dp
bmcuaCIKKyNpbmNsdWRlICJiYXNlL3Rhc2suaCIgLy8gRklYTUU6IHJlbW92ZSB0aGlzCisKKy8v
I3VuZGVmIExPRworCisjaW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzQWdlbnRDbGllbnQuaCIK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkNTdHJpbmc7CitjbGFzcyBXZWJEZXZUb29sc0FnZW50OworY2xhc3MgV2ViVmlldzsK
K3N0cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhOworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworY2xhc3MgRFJURGV2VG9vbHNDYWxsQXJnczsKK2NsYXNzIERSVERldlRvb2xzQ2xpZW50Owor
CitjbGFzcyBEUlREZXZUb29sc0FnZW50IDogcHVibGljIFdlYktpdDo6V2ViRGV2VG9vbHNBZ2Vu
dENsaWVudAorICAgICAgICAgICAgICAgICAgICAgICAsIHB1YmxpYyBOb25jb3B5YWJsZSB7Citw
dWJsaWM6CisgICAgRFJURGV2VG9vbHNBZ2VudCgpOworICAgIHZpcnR1YWwgfkRSVERldlRvb2xz
QWdlbnQoKSB7fQorCisgICAgdm9pZCBzZXRXZWJWaWV3KFdlYktpdDo6V2ViVmlldyopOworCisg
ICAgLy8gV2ViRGV2VG9vbHNBZ2VudENsaWVudCBpbXBsZW1lbnRhdGlvbi4KKyAgICB2aXJ0dWFs
IHZvaWQgc2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNz
YWdlRGF0YSYpOworICAgIHZpcnR1YWwgaW50IGhvc3RJZGVudGlmaWVyKCkgeyByZXR1cm4gbV9y
b3V0aW5nSUQ7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VSZXBhaW50KCk7CisgICAgdmlydHVh
bCB2b2lkIHJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKGNvbnN0IFdlYktpdDo6V2ViU3RyaW5n
JiBmZWF0dXJlLCBib29sIGVuYWJsZWQpOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5n
IGluamVjdGVkU2NyaXB0U291cmNlKCk7CisgICAgdmlydHVhbCBXZWJLaXQ6OldlYkNTdHJpbmcg
aW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCk7CisgICAgdmlydHVhbCBXZWJLaXQ6Oldl
YkNTdHJpbmcgZGVidWdnZXJTY3JpcHRTb3VyY2UoKTsKKworICAgIHZvaWQgYXN5bmNDYWxsKGNv
bnN0IERSVERldlRvb2xzQ2FsbEFyZ3MmKTsKKworICAgIHZvaWQgYXR0YWNoKERSVERldlRvb2xz
Q2xpZW50Kik7CisgICAgdm9pZCBkZXRhY2goRFJURGV2VG9vbHNDbGllbnQqKTsKKworICAgIGJv
b2wgZXZhbHVhdGVJbldlYkluc3BlY3Rvcihsb25nIGNhbGxJRCwgY29uc3Qgc3RkOjpzdHJpbmcm
IHNjcmlwdCk7CisgICAgYm9vbCBzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFi
bGUpOworCitwcml2YXRlOgorICAgIHZvaWQgY2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdz
Jik7CisgICAgc3RhdGljIHZvaWQgZGlzcGF0Y2hNZXNzYWdlTG9vcCgpOworICAgIFdlYktpdDo6
V2ViRGV2VG9vbHNBZ2VudCogd2ViRGV2VG9vbHNBZ2VudCgpOworCisgICAgU2NvcGVkUnVubmFi
bGVNZXRob2RGYWN0b3J5PERSVERldlRvb2xzQWdlbnQ+IG1fY2FsbE1ldGhvZEZhY3Rvcnk7Cisg
ICAgRFJURGV2VG9vbHNDbGllbnQqIG1fZHJ0RGV2VG9vbHNDbGllbnQ7CisgICAgaW50IG1fcm91
dGluZ0lEOworICAgIFdlYktpdDo6V2ViRGV2VG9vbHNBZ2VudCogbV93ZWJEZXZUb29sc0FnZW50
OworICAgIFdlYktpdDo6V2ViVmlldyogbV93ZWJWaWV3OworfTsKKworI2VuZGlmIC8vIERSVERl
dlRvb2xzQWdlbnRfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwLi5kYWNkNmY3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5jcHAKQEAgLTAsMCArMSwz
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEUlREZXZUb29sc0NhbGxBcmdzLmgi
CisKKy8vIHN0YXRpYworaW50IERSVERldlRvb2xzQ2FsbEFyZ3M6Om1fY2FsbHNDb3VudCA9IDA7
CisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQ2FsbEFyZ3MuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RS
VERldlRvb2xzQ2FsbEFyZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5l
NGEzZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERSVERl
dlRvb2xzQ2FsbEFyZ3NfaAorI2RlZmluZSBEUlREZXZUb29sc0NhbGxBcmdzX2gKKworI2luY2x1
ZGUgInB1YmxpYy9XZWJEZXZUb29sc01lc3NhZ2VEYXRhLmgiCisjaW5jbHVkZSAicHVibGljL1dl
YlN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKK2NsYXNzIERSVERldlRv
b2xzQ2FsbEFyZ3MgeworcHVibGljOgorICAgIERSVERldlRvb2xzQ2FsbEFyZ3MoY29uc3QgV2Vi
S2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKQorICAgICAgICA6IG1fZGF0YShkYXRh
KQorICAgIHsKKyAgICAgICAgKyttX2NhbGxzQ291bnQ7CisKKyAgICAgICAgLy8gVGhlIHNhbWUg
YmVoYXZpb3VyIGFzIHdlIGhhdmUgaW4gY2FzZSBvZiBJUEMuCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9kYXRhLmFyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKG1fZGF0YS5hcmd1bWVudHNbaV0uaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgbV9kYXRh
LmFyZ3VtZW50c1tpXSA9IFdlYktpdDo6V2ViU3RyaW5nOjpmcm9tVVRGOCgiIik7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBEUlREZXZUb29sc0NhbGxBcmdzKGNvbnN0IERSVERldlRvb2xzQ2Fs
bEFyZ3MmIGFyZ3MpCisgICAgICAgIDogbV9kYXRhKGFyZ3MubV9kYXRhKQorICAgIHsKKyAgICAg
ICAgKyttX2NhbGxzQ291bnQ7CisgICAgfQorCisgICAgfkRSVERldlRvb2xzQ2FsbEFyZ3MoKQor
ICAgIHsKKyAgICAgICAgLS1tX2NhbGxzQ291bnQ7CisgICAgICAgIEFTU0VSVChtX2NhbGxzQ291
bnQgPj0gMCk7CisgICAgfQorCisgICAgc3RhdGljIGludCBjYWxsc0NvdW50KCkgeyByZXR1cm4g
bV9jYWxsc0NvdW50OyB9CisKKyAgICBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEgbV9k
YXRhOworCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgbV9jYWxsc0NvdW50OworfTsKKworI2Vu
ZGlmIC8vIERSVERldlRvb2xzQ2FsbEFyZ3NfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjMzZWQwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHAKQEAg
LTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHND
bGllbnQuaCIKKworI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlICJEUlRE
ZXZUb29sc0NhbGxBcmdzLmgiCisKKyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNBZ2VudC5o
IgorI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kLmgiCisjaW5jbHVkZSAicHVi
bGljL1dlYkZyYW1lLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlNjcmlwdFNvdXJjZS5oIgorI2lu
Y2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViVmlldy5oIgor
I2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCisKK3VzaW5nIFdlYktp
dDo6V2ViRGV2VG9vbHNBZ2VudDsKK3VzaW5nIFdlYktpdDo6V2ViRGV2VG9vbHNGcm9udGVuZDsK
K3VzaW5nIFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdlRGF0YTsKK3VzaW5nIFdlYktpdDo6V2Vi
U3RyaW5nOwordXNpbmcgV2ViS2l0OjpXZWJWaWV3OworCitEUlREZXZUb29sc0NsaWVudDo6RFJU
RGV2VG9vbHNDbGllbnQoRFJURGV2VG9vbHNBZ2VudCogYWdlbnQsIFdlYlZpZXcqIHdlYlZpZXcp
CisgICAgOiBtX2NhbGxNZXRob2RGYWN0b3J5KHRoaXMpCisgICAgLCBtX2RydERldlRvb2xzQWdl
bnQoYWdlbnQpCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKK3sKKyAgICBtX3dlYkRldlRvb2xz
RnJvbnRlbmQuc2V0KFdlYkRldlRvb2xzRnJvbnRlbmQ6OmNyZWF0ZShtX3dlYlZpZXcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJlbi1VUyIpKSk7CisgICAgbV9kcnREZXZUb29sc0Fn
ZW50LT5hdHRhY2godGhpcyk7Cit9CisKK0RSVERldlRvb2xzQ2xpZW50Ojp+RFJURGV2VG9vbHND
bGllbnQoKQoreworICAgIC8vIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgdGhlIHBhZ2Ugd2lsbCBi
ZSBkZXN0cm95ZWQgYXQgZGV0YWNoIHN0ZXAgb2YKKyAgICAvLyBtX2RydERldlRvb2xzQWdlbnQg
YW5kIHdlIHNob3VsZCBjbGVhbiBwZW5kaW5nIHJlcXVlc3RzIGEgYml0IGVhcmxpZXIuCisgICAg
bV9jYWxsTWV0aG9kRmFjdG9yeS5SZXZva2VBbGwoKTsKKyAgICBpZiAobV9kcnREZXZUb29sc0Fn
ZW50KQorICAgICAgICBtX2RydERldlRvb2xzQWdlbnQtPmRldGFjaCh0aGlzKTsKK30KKwordm9p
ZCBEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VUb0FnZW50KGNvbnN0IFdlYkRldlRvb2xz
TWVzc2FnZURhdGEmIGRhdGEpCit7CisgICAgaWYgKG1fZHJ0RGV2VG9vbHNBZ2VudCkKKyAgICAg
ICAgbV9kcnREZXZUb29sc0FnZW50LT5hc3luY0NhbGwoRFJURGV2VG9vbHNDYWxsQXJncyhkYXRh
KSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OnNlbmREZWJ1Z2dlckNvbW1hbmRUb0Fn
ZW50KGNvbnN0IFdlYlN0cmluZyYgY29tbWFuZCkKK3sKKyAgICBXZWJEZXZUb29sc0FnZW50Ojpl
eGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbW1hbmQsIDEpOworfQorCit2b2lkIERSVERldlRvb2xz
Q2xpZW50OjphY3RpdmF0ZVdpbmRvdygpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRvb2xzQ2xpZW50OjpjbG9z
ZVdpbmRvdygpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit2b2lkIERSVERldlRvb2xzQ2xpZW50Ojpkb2NrV2luZG93KCkKK3sKKyAg
ICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3Zv
aWQgRFJURGV2VG9vbHNDbGllbnQ6OnVuZG9ja1dpbmRvdygpCit7CisgICAgLy8gTm90IGltcGxl
bWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRvb2xz
Q2xpZW50Ojphc3luY0NhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyYgYXJncykKK3sKKyAg
ICB3ZWJraXRfc3VwcG9ydDo6UG9zdFRhc2tGcm9tSGVyZSgKKyAgICAgICAgbV9jYWxsTWV0aG9k
RmFjdG9yeS5OZXdSdW5uYWJsZU1ldGhvZCgmRFJURGV2VG9vbHNDbGllbnQ6OmNhbGwsIGFyZ3Mp
KTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6Y2FsbChjb25zdCBEUlREZXZUb29sc0Nh
bGxBcmdzICZhcmdzKQoreworICAgIG1fd2ViRGV2VG9vbHNGcm9udGVuZC0+ZGlzcGF0Y2hNZXNz
YWdlRnJvbUFnZW50KGFyZ3MubV9kYXRhKTsKKyAgICBpZiAoRFJURGV2VG9vbHNDYWxsQXJnczo6
Y2FsbHNDb3VudCgpID09IDEpCisgICAgICAgIGFsbE1lc3NhZ2VzUHJvY2Vzc2VkKCk7Cit9CisK
K3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OmFsbE1lc3NhZ2VzUHJvY2Vzc2VkKCkKK3sKKyAgICBt
X3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KAorICAgICAgICBXZWJLaXQ6Oldl
YlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KAorICAgICAgICAgICAgImlmICh3aW5k
b3cuV2ViSW5zcGVjdG9yICYmIFdlYkluc3BlY3Rvci5xdWV1ZXNBcmVFbXB0eSkgV2ViSW5zcGVj
dG9yLnF1ZXVlc0FyZUVtcHR5KCk7IikpKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmggYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3YWI5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIERSVERldlRvb2xzQ2xpZW50X2gKKyNkZWZpbmUgRFJURGV2VG9vbHND
bGllbnRfaAorCisjaW5jbHVkZSAiYmFzZS90YXNrLmgiIC8vIEZJWE1FOiByZW1vdmUgdGhpcwor
CisvLyN1bmRlZiBMT0cKKworI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kQ2xp
ZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRGV2VG9vbHNGcm9udGVuZDsK
K3N0cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3Mg
V2ViVmlldzsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERSVERldlRvb2xzQ2Fs
bEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0FnZW50OworCitjbGFzcyBEUlREZXZUb29sc0NsaWVu
dCA6IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBEUlREZXZU
b29sc0NsaWVudChEUlREZXZUb29sc0FnZW50KiwgV2ViS2l0OjpXZWJWaWV3Kik7CisgICAgdmly
dHVhbCB+RFJURGV2VG9vbHNDbGllbnQoKTsKKworICAgIC8vIFdlYkRldlRvb2xzRnJvbnRlbmRD
bGllbnQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0FnZW50
KGNvbnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYpOworICAgIHZpcnR1YWwgdm9p
ZCBzZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgY29t
bWFuZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVXaW5kb3coKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xvc2VXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9ja1dpbmRvdygpOworICAg
IHZpcnR1YWwgdm9pZCB1bmRvY2tXaW5kb3coKTsKKworICAgIHZvaWQgYXN5bmNDYWxsKGNvbnN0
IERSVERldlRvb2xzQ2FsbEFyZ3MmKTsKKworICAgIHZvaWQgYWxsTWVzc2FnZXNQcm9jZXNzZWQo
KTsKKworIHByaXZhdGU6CisgICAgdm9pZCBjYWxsKGNvbnN0IERSVERldlRvb2xzQ2FsbEFyZ3Mm
KTsKKworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeTxEUlREZXZUb29sc0NsaWVudD4g
bV9jYWxsTWV0aG9kRmFjdG9yeTsKKyAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKKyAg
ICBEUlREZXZUb29sc0FnZW50KiBtX2RydERldlRvb2xzQWdlbnQ7CisgICAgV1RGOjpPd25QdHI8
V2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kPiBtX3dlYkRldlRvb2xzRnJvbnRlbmQ7Cit9Owor
CisjZW5kaWYgLy8gRFJURGV2VG9vbHNDbGllbnRfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwCm9sZCBtb2RlIDEwMDY0NApuZXcg
bW9kZSAxMDA3NTUKaW5kZXggZmQ3YmEyZC4uNWE4MGUwZAotLS0gYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwCkBAIC01OCw3ICs1OCw3IEBACiAK
ICNpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgInB1YmxpYy93aW4vV2ViSW5wdXRFdmVudEZhY3Rv
cnkuaCIKLSNlbmRpZgorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKIC8vIEZJWE1FOiBsYXlvdXQg
YmVmb3JlIGVhY2ggZXZlbnQ/CiAKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApvbGQgbW9kZSAxMDA2
NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDliYTY0MjEuLmJiNmRlMDkKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgi
CiAKICNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKyNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50Lmgi
CiAjaW5jbHVkZSAiV2ViVmlld0hvc3QuaCIKICNpbmNsdWRlICJiYXNlL3N0cmluZ191dGlsLmgi
CiAjaW5jbHVkZSAicHVibGljL1dlYkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKQEAgLTk1LDYgKzk2
LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVs
bCogc2hlbGwpCiAgICAgYmluZE1ldGhvZCgib2JqQ0lkZW50aXR5SXNFcXVhbCIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6b2JqQ0lkZW50aXR5SXNFcXVhbCk7CiAgICAgYmluZE1ldGhvZCgic2V0
QWx3YXlzQWNjZXB0Q29va2llcyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNj
ZXB0Q29va2llcyk7CiAgICAgYmluZE1ldGhvZCgic2hvd1dlYkluc3BlY3RvciIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3Rvcik7CisgICAgYmluZE1ldGhvZCgiY2xvc2VX
ZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsK
ICAgICBiaW5kTWV0aG9kKCJzZXRXaW5kb3dJc0tleSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0V2luZG93SXNLZXkpOwogICAgIGJpbmRNZXRob2QoInNldFRhYktleUN5Y2xlc1Rocm91Z2hF
bGVtZW50cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKTsKICAgICBiaW5kTWV0aG9kKCJzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTsKQEAgLTU1NSw2
ICs1NTcsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3Rvcihj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50KgogICAgIHJlc3VsdC0+c2V0TnVsbCgp
OwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rvcihjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX3No
ZWxsLT5jbG9zZURldlRvb2xzKCk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2woKSkKQEAgLTEyNDUsNyArMTI1Myw3IEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGNhbGwgVGVzdFNoZWxsRGV2VG9vbHNBZ2Vu
dDo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKCkuCisgICAgbV9zaGVsbC0+ZHJ0RGV2VG9v
bHNBZ2VudCgpLT5zZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYXJndW1lbnRzWzBdLnRvQm9v
bGVhbigpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYklu
c3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVz
dWx0KQpAQCAtMTI1Myw3ICsxMjYxLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW4KICAgICBy
ZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3Vt
ZW50c1swXS5pc0ludDMyKCkgfHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgLy8gRklYTUU6IFNob3VsZCBjYWxsIFRlc3RTaGVsbERldlRvb2xzQWdlbnQ6
OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoKS4KKyAgICBtX3NoZWxsLT5kcnREZXZUb29sc0FnZW50
KCktPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1l
bnRzWzFdLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb3Jj
ZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3Bw
VmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKaW5kZXggMjI3NDFkNS4uNWQ2NTcy
NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0xMjksNiArMTI5LDcgQEAgcHVibGljOgogCiAg
ICAgLy8gU2hvd3MgRGV2VG9vbHMgd2luZG93LgogICAgIHZvaWQgc2hvd1dlYkluc3BlY3Rvcihj
b25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjbG9zZVdlYklu
c3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICAvLyBH
aXZlcyBmb2N1cyB0byB0aGUgd2luZG93LgogICAgIHZvaWQgc2V0V2luZG93SXNLZXkoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKaW5kZXggNTJmMWU3ZC4uZjg4MmYxMCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
Y3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAKICNpbmNsdWRl
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIK
KyNpbmNsdWRlICJEUlREZXZUb29sc0NsaWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdIb3N0Lmgi
CiAjaW5jbHVkZSAiYmFzZS9tZDUuaCIgLy8gRklYTUU6IFdyYXAgYnkgd2Via2l0X3N1cHBvcnQu
CiAjaW5jbHVkZSAiYmFzZS9zdHJpbmcxNi5oIgpAQCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUg
InB1YmxpYy9XZWJWaWV3LmgiCiAjaW5jbHVkZSAic2tpYS9leHQvYml0bWFwX3BsYXRmb3JtX2Rl
dmljZS5oIgogI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorLy8jaW5jbHVk
ZSAid2Via2l0L2dsdWUvd2Via2l0X2dsdWUuaCIKICNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93
ZWJraXRfc3VwcG9ydC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjY3R5cGU+
CkBAIC04MSw2ICs4NCw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJvb2wgdGVzdFNoZWxsTW9k
ZSkKICAgICAsIG1fZm9jdXNlZFdpZGdldCgwKQogICAgICwgbV90ZXN0U2hlbGxNb2RlKHRlc3RT
aGVsbE1vZGUpCiAgICAgLCBtX2FsbG93RXh0ZXJuYWxQYWdlcyhmYWxzZSkKKyAgICAsIG1fZGV2
VG9vbHMoMCkKIHsKICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdlb2xvY2F0aW9uKHRy
dWUpOwogICAgIG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuc2V0KG5ldyBBY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcih0aGlzKSk7CkBAIC05NywxMiArMTAxLDE3IEBAIFRlc3RTaGVsbDo6VGVzdFNo
ZWxsKGJvb2wgdGVzdFNoZWxsTW9kZSkKICAgICAvLyB0aW1lZC1vdXQgRFJUIHByb2Nlc3Mgd2Fz
IGNyYXNoZWQuCiAgICAgbV90aW1lb3V0ID0gMzAgKiAxMDAwOwogCisgICAgbV9kcnREZXZUb29s
c0FnZW50LnNldChuZXcgRFJURGV2VG9vbHNBZ2VudCk7CiAgICAgbV93ZWJWaWV3SG9zdCA9IGNy
ZWF0ZVdlYlZpZXcoKTsKICAgICBtX3dlYlZpZXcgPSBtX3dlYlZpZXdIb3N0LT53ZWJWaWV3KCk7
CisgICAgbV9kcnREZXZUb29sc0FnZW50LT5zZXRXZWJWaWV3KG1fd2ViVmlldyk7CiB9CiAKIFRl
c3RTaGVsbDo6flRlc3RTaGVsbCgpCiB7CisgICAgLy8gTm90ZTogRGV2VG9vbHMgYXJlIGNsb3Nl
ZCB0b2dldGhlciB3aXRoIGFsbCB0aGUgb3RoZXIgd2luZG93cyBpbiB0aGUKKyAgICAvLyB3aW5k
b3dzIGxpc3QuCisKICAgICBsb2FkVVJMKEdVUkwoImFib3V0OmJsYW5rIikpOwogICAgIC8vIENh
bGwgR0MgdHdpY2UgdG8gY2xlYW4gdXAgZ2FyYmFnZS4KICAgICBjYWxsSlNHQygpOwpAQCAtMTEy
LDYgKzEyMSwzNSBAQCBUZXN0U2hlbGw6On5UZXN0U2hlbGwoKQogICAgIG1fd2ViVmlldy0+Y2xv
c2UoKTsKIH0KIAordm9pZCBUZXN0U2hlbGw6OmNyZWF0ZURSVERldlRvb2xzQ2xpZW50KERSVERl
dlRvb2xzQWdlbnQgKmFnZW50KQoreworICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQuc2V0KG5ldyBE
UlREZXZUb29sc0NsaWVudChhZ2VudCwgd2ViVmlldygpKSk7Cit9CisKK3ZvaWQgVGVzdFNoZWxs
OjpzaG93RGV2VG9vbHMoKQoreworOjpNZXNzYWdlQm94KDAsIEwic2hvd0RldlRvb2xzKCkiLCBM
IkludGVycnVwdCIsIDApOworICAgIGlmICghbV9kZXZUb29scykgeworICAgICAgICBXZWJVUkwg
dXJsID0gd2Via2l0X3N1cHBvcnQ6OkdldERldlRvb2xzUGF0aEFzVVJMKCk7CisgICAgICAgIGlm
ICghdXJsLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2RldlRvb2xzID0gY3JlYXRlTmV3V2lu
ZG93KHVybCk7CisgICAgICAgIEFTU0VSVChtX2RldlRvb2xzKTsKKyAgICAgICAgY3JlYXRlRFJU
RGV2VG9vbHNDbGllbnQobV9kcnREZXZUb29sc0FnZW50LmdldCgpKTsKKyAgICB9CisgICAgbV9k
ZXZUb29scy0+c2hvdyhXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lOZXdXaW5kb3cpOworfQor
Cit2b2lkIFRlc3RTaGVsbDo6Y2xvc2VEZXZUb29scygpCit7CisgICAgaWYgKG1fZGV2VG9vbHMp
IHsKKyAgICAgICAgY2xvc2VXaW5kb3cobV9kZXZUb29scyk7CisgICAgICAgIG1fZGV2VG9vbHMg
PSAwOworICAgIH0KK30KKwogdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmll
dyYgd2ViVmlldykKIHsKICAgICAvLyBNYXRjaCB0aGUgc2V0dGluZ3MgdXNlZCBieSBNYWMgRHVt
cFJlbmRlclRyZWUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgpAQCAtMjA2LDYgKzI0NCw5IEBAIHZv
aWQgVGVzdFNoZWxsOjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMpCiAgICAg
ICAgIHx8IHRlc3RVcmwuZmluZCgibG9hZGluZ1xcIikgIT0gc3RyaW5nOjpucG9zKQogICAgICAg
ICBtX2xheW91dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KHRydWUpOwogCisgICAgaWYgKGluc3BlY3RvclRlc3RNb2RlKQorICAgICAgICBzaG93RGV2VG9v
bHMoKTsKKwogICAgIG1fcHJpbnRlci0+aGFuZGxlVGVzdEhlYWRlcih0ZXN0VXJsLmNfc3RyKCkp
OwogICAgIGxvYWRVUkwobV9wYXJhbXMudGVzdFVybCk7CiAKQEAgLTU4Niw3ICs2MjcsNyBAQCBX
ZWJWaWV3SG9zdCogVGVzdFNoZWxsOjpjcmVhdGVXZWJWaWV3KCkKIFdlYlZpZXdIb3N0KiBUZXN0
U2hlbGw6OmNyZWF0ZU5ld1dpbmRvdyhjb25zdCBXZWJVUkwmIHVybCkKIHsKICAgICBXZWJWaWV3
SG9zdCogaG9zdCA9IG5ldyBXZWJWaWV3SG9zdCh0aGlzKTsKLSAgICBXZWJWaWV3KiB2aWV3ID0g
V2ViVmlldzo6Y3JlYXRlKGhvc3QsIDApOworICAgIFdlYlZpZXcqIHZpZXcgPSBXZWJWaWV3Ojpj
cmVhdGUoaG9zdCwgbV9kcnREZXZUb29sc0FnZW50LmdldCgpKTsKICAgICBob3N0LT5zZXRXZWJX
aWRnZXQodmlldyk7CiAgICAgcmVzZXRXZWJTZXR0aW5ncygqdmlldyk7CiAgICAgdmlldy0+aW5p
dGlhbGl6ZU1haW5GcmFtZShob3N0KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmgKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRl
eCAyMzk3MjQ2Li5lMTkzMTNmCi0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbC5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbC5oCkBAIC0yOCw2ICsyOCw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNp
Zm5kZWYgVGVzdFNoZWxsX2gKKyNkZWZpbmUgVGVzdFNoZWxsX2gKKwogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRTZW5kZXIuaCIKICNpbmNsdWRl
ICJMYXlvdXRUZXN0Q29udHJvbGxlci5oIgpAQCAtNDQsNiArNDcsNyBAQAogLy8gdmFyaW91cyBv
YmplY3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBjcmVhdGVkIGluIG9uZSBEUlQgcHJvY2Vzcy4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJEZXZUb29sc0FnZW50Q2xpZW50OwogY2xh
c3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJOb3RpZmljYXRpb25QcmVzZW50ZXI7CiBjbGFzcyBXZWJQ
cmVmZXJlbmNlczsKQEAgLTU0LDYgKzU4LDEwIEBAIG5hbWVzcGFjZSBza2lhIHsKIGNsYXNzIFBs
YXRmb3JtQ2FudmFzOwogfQogCitjbGFzcyBEUlREZXZUb29sc0FnZW50OworY2xhc3MgRFJURGV2
VG9vbHNDYWxsQXJnczsKK2NsYXNzIERSVERldlRvb2xzQ2xpZW50OworCiBzdHJ1Y3QgVGVzdFBh
cmFtcyB7CiAgICAgYm9vbCBkdW1wVHJlZTsKICAgICBib29sIGR1bXBQaXhlbHM7CkBAIC02OSwx
MCArNzcsMjIgQEAgc3RydWN0IFRlc3RQYXJhbXMgewogICAgICAgICAsIHByaW50U2VwYXJhdG9y
cyhmYWxzZSkge30KIH07CiAKK3N0cnVjdCBUZXN0U2hlbGxXZWFrUmVmZXJlbmNlIHsKKyAgICBU
ZXN0U2hlbGxXZWFrUmVmZXJlbmNlKCkKKyAgICAgICAgOiBtX3Rlc3RTaGVsbCgwKQorICAgIHsg
fQorCisgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX3Rlc3RTaGVsbCA9IDA7IH0KKyAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RTaGVsbDsgfQorCisgICAgVGVzdFNoZWxs
KiBtX3Rlc3RTaGVsbDsKK307CisKIGNsYXNzIFRlc3RTaGVsbCB7CiBwdWJsaWM6CiAgICAgVGVz
dFNoZWxsKGJvb2wgdGVzdFNoZWxsTW9kZSk7CiAgICAgflRlc3RTaGVsbCgpOworCiAgICAgLy8g
VGhlIG1haW4gV2ViVmlldy4KICAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKSBjb25zdCB7
IHJldHVybiBtX3dlYlZpZXc7IH0KICAgICAvLyBSZXR1cm5zIHRoZSBob3N0IGZvciB0aGUgbWFp
biBXZWJWaWV3LgpAQCAtMTI2LDExICsxNDYsMTggQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VS
ZW1haW5pbmdXaW5kb3dzKCk7CiAgICAgaW50IHdpbmRvd0NvdW50KCk7CiAgICAgc3RhdGljIHZv
aWQgcmVzaXplV2luZG93Rm9yVGVzdChXZWJWaWV3SG9zdCosIGNvbnN0IFdlYktpdDo6V2ViVVJM
Jik7Ci0gICAgdm9pZCBzaG93RGV2VG9vbHMoKSB7fSAvLyBGSVhNRTogaW1lcGxlbWVudCB0aGlz
LgorCisgICAgdm9pZCBzaG93RGV2VG9vbHMoKTsKKyAgICB2b2lkIGNsb3NlRGV2VG9vbHMoKTsK
KworICAgIERSVERldlRvb2xzQWdlbnQqIGRydERldlRvb2xzQWdlbnQoKSB7IHJldHVybiBtX2Ry
dERldlRvb2xzQWdlbnQuZ2V0KCk7IH0KKyAgICBEUlREZXZUb29sc0NsaWVudCogZHJ0RGV2VG9v
bHNDbGllbnQoKSB7IHJldHVybiBtX2RydERldlRvb2xzQ2xpZW50LmdldCgpOyB9CiAKICAgICBz
dGF0aWMgY29uc3QgaW50IHZpcnR1YWxXaW5kb3dCb3JkZXIgPSAzOwogCiBwcml2YXRlOgorICAg
IHZvaWQgY3JlYXRlRFJURGV2VG9vbHNDbGllbnQoRFJURGV2VG9vbHNBZ2VudCopOworCiAgICAg
c3RhdGljIHZvaWQgcmVzZXRXZWJTZXR0aW5ncyhXZWJLaXQ6OldlYlZpZXcmKTsKICAgICB2b2lk
IGR1bXAoKTsKICAgICBzdGQ6OnN0cmluZyBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cygpOwpAQCAt
MTQzLDYgKzE3MCw5IEBAIHByaXZhdGU6CiAgICAgV2ViS2l0OjpXZWJXaWRnZXQqIG1fZm9jdXNl
ZFdpZGdldDsKICAgICBib29sIG1fdGVzdFNoZWxsTW9kZTsKICAgICBXZWJWaWV3SG9zdCogbV93
ZWJWaWV3SG9zdDsKKyAgICBXZWJWaWV3SG9zdCogbV9kZXZUb29sczsKKyAgICBPd25QdHI8RFJU
RGV2VG9vbHNBZ2VudD4gbV9kcnREZXZUb29sc0FnZW50OworICAgIE93blB0cjxEUlREZXZUb29s
c0NsaWVudD4gbV9kcnREZXZUb29sc0NsaWVudDsKICAgICBPd25QdHI8QWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXI+IG1fYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI7CiAgICAgT3duUHRyPEV2ZW50U2Vu
ZGVyPiBtX2V2ZW50U2VuZGVyOwogICAgIE93blB0cjxMYXlvdXRUZXN0Q29udHJvbGxlcj4gbV9s
YXlvdXRUZXN0Q29udHJvbGxlcjsKQEAgLTE2NiwzICsxOTYsNSBAQCBwcml2YXRlOgogfTsKIAog
dm9pZCBwbGF0Zm9ybUluaXQoKTsKKworI2VuZGlmIC8vIFRlc3RTaGVsbF9oCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaCBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5oCm9sZCBtb2RlIDEwMDY0NApuZXcg
bW9kZSAxMDA3NTUKaW5kZXggNjAyOTUzMi4uZDkzYjRiNAotLS0gYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9jb25maWcuaApAQCAtNDEsMTEgKzQxLDE0IEBACiAjZGVmaW5lIERDSEVD
Syhjb25kaXRpb24pIHdoaWxlIChmYWxzZSAmJiAoY29uZGl0aW9uKSkgc3RkOjpjZXJyCiAjZGVm
aW5lIERDSEVDS19FUShhLCBiKSB3aGlsZSAoZmFsc2UgJiYgKGEpID09IChiKSkgc3RkOjpjZXJy
CiAjZGVmaW5lIERDSEVDS19ORShhLCBiKSB3aGlsZSAoZmFsc2UgJiYgKGEpICE9IChiKSkgc3Rk
OjpjZXJyCisjZGVmaW5lIE5PVFJFQUNIRUQoKSBEQ0hFQ0soZmFsc2UpCiAKICNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KIAotLy8gSlNfRVhQT1JUREFUQSBpcyBuZWVkZWQgdG8gaW5sdWNkZSB3
dGYvV1RGU3RyaW5nLmguCiAjaWYgT1MoV0lORE9XUykgJiYgIUNPTVBJTEVSKEdDQykKKy8vIEFs
bG93ICd0aGlzJyB0byBiZSB1c2VkIGluIGJhc2UgbWVtYmVyIGluaXRpYWxpemVyIGxpc3QuCisj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZSA6IDQzNTUpCisvLyBKU19FWFBPUlREQVRBIGlzIG5lZWRl
ZCB0byBpbmx1Y2RlIHd0Zi9XVEZTdHJpbmcuaC4KICNkZWZpbmUgSlNfRVhQT1JUREFUQSBfX2Rl
Y2xzcGVjKGRsbGltcG9ydCkKICNlbHNlCiAjZGVmaW5lIEpTX0VYUE9SVERBVEEK
</data>
<flag name="commit-queue"
          id="47808"
          type_id="3"
          status="-"
          setter="rolandsteiner"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60363</attachid>
            <date>2010-07-02 06:36:30 -0700</date>
            <delta_ts>2010-07-04 23:18:00 -0700</delta_ts>
            <desc>patch - snapshot of current state (removed debugging code, fixed modes)</desc>
            <filename>devtools2.patch</filename>
            <type>text/plain</type>
            <size>37076</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDY4YjVhZDIuLjRhOTQ3NTkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA3LTAxICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFRhbXVyYSBLZW50LgorCisgICAgICAgIEJ1
ZyA0MDU1OCAtIFtEUlQvQ2hyb21pdW1dIFVwc3RyZWFtIFRlc3RTaGVsbERldlRvb2xzIGZvciBD
aHJvbWl1bSBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQwNTU4CisKKyAgICAgICAgVXBzdHJlYW0gRGV2VG9vbHMgZm9yIENocm9taXVtIERSVC4K
KworICAgICAgICAqIFdlYktpdC5neXA6CisKIDIwMTAtMDctMDEgIEtlbm5ldGggUnVzc2VsbCAg
PGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKaW5kZXggZTJkYTFiNC4uMGM3ZjUxOQotLS0gYS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNjI5LDYgKzYy
OSw5IEBACiAgICAgICAgICAgICAgICAgWydPUz09IndpbiInLCB7CiAgICAgICAgICAgICAgICAg
ICAgICdkZXBlbmRlbmNpZXMnOiBbJ0xheW91dFRlc3RIZWxwZXInXSwKIAorICAgICAgICAgICAg
ICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgJzwoU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCcsICMgZm9yIGEgaGVhZGVyIGdlbmVyYXRlZCBi
eSBncml0CisgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdyZXNv
dXJjZV9pbmNsdWRlX2RpcnMnOiBbJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCdd
LAogICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAgICAgICAg
ICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9uZXQvbmV0X3Jlc291cmNlcy5yYycsCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cK
aW5kZXggYzVjNTE0Yi4uMjc4NTUyMiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEwLTA3LTAx
ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IFRhbXVyYSBLZW50LgorCisgICAgICAgIEJ1ZyA0MDU1OCAtIFtEUlQvQ2hy
b21pdW1dIFVwc3RyZWFtIFRlc3RTaGVsbERldlRvb2xzIGZvciBDaHJvbWl1bSBEUlQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNTU4CisKKyAgICAg
ICAgVXBzdHJlYW0gRGV2VG9vbHMgZm9yIENocm9taXVtIERSVC4KKyAgICAgICAgKG9yaWdpbmFs
IENocm9taXVtIGZpbGVzIHJldi4gNTEyODcpCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpz
ZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6Cisg
ICAgICAgIChUZXN0U2hlbGw6On5UZXN0U2hlbGwpOgorICAgICAgICAoVGVzdFNoZWxsOjpjcmVh
dGVEUlREZXZUb29sc0NsaWVudCk6CisgICAgICAgIChUZXN0U2hlbGw6OnNob3dEZXZUb29scyk6
CisgICAgICAgIChUZXN0U2hlbGw6OmNsb3NlRGV2VG9vbHMpOgorICAgICAgICAoVGVzdFNoZWxs
OjpydW5GaWxlVGVzdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmg6CisgICAgICAgIChUZXN0U2hlbGw6OndlYkRldlRvb2xzRFJUQWdlbnQpOgorICAgICAg
ICAoVGVzdFNoZWxsOjp3ZWJEZXZUb29sc0RSVENsaWVudCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5jcHA6IEFkZGVkLgorICAgICAgICAoRFJU
RGV2VG9vbHNBZ2VudDo6RFJURGV2VG9vbHNBZ2VudCk6CisgICAgICAgIChEUlREZXZUb29sc0Fn
ZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6
Zm9yY2VSZXBhaW50KToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OnJ1bnRpbWVGZWF0dXJl
U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0
U291cmNlKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0RGlzcGF0
Y2hlclNvdXJjZSk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpkZWJ1Z2dlclNjcmlwdFNv
dXJjZSk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojphc3luY0NhbGwpOgorICAgICAgICAo
RFJURGV2VG9vbHNBZ2VudDo6Y2FsbCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojp3ZWJE
ZXZUb29sc0FnZW50KToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmF0dGFjaCk6CisgICAg
ICAgIChEUlREZXZUb29sc0FnZW50OjpkZXRhY2gpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2Vu
dDo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKToKKyAgICAgICAgKERSVERldlRvb2xzQWdl
bnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6
ZGlzcGF0Y2hNZXNzYWdlTG9vcCk6CisgICAgICAgIChXZWJEZXZUb29sc0FnZW50Q2xpZW50Ojpz
ZW5kTWVzc2FnZVRvRnJvbnRlbmRPbklPVGhyZWFkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50Lmg6IEFkZGVkLgorICAgICAgICAoRFJURGV2VG9v
bHNBZ2VudDo6fkRSVERldlRvb2xzQWdlbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6
aG9zdElkZW50aWZpZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQ2FsbEFyZ3MuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmg6IEFkZGVkLgorICAgICAgICAoRFJURGV2VG9vbHND
YWxsQXJnczo6RFJURGV2VG9vbHNDYWxsQXJncyk6CisgICAgICAgIChEUlREZXZUb29sc0NhbGxB
cmdzOjp+RFJURGV2VG9vbHNDYWxsQXJncyk6CisgICAgICAgIChEUlREZXZUb29sc0NhbGxBcmdz
OjpjYWxsc0NvdW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZU
b29sc0NsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OkRSVERl
dlRvb2xzQ2xpZW50KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50Ojp+RFJURGV2VG9vbHND
bGllbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OnNlbmRNZXNzYWdlVG9BZ2VudCk6
CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6c2VuZERlYnVnZ2VyQ29tbWFuZFRvQWdlbnQp
OgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmFjdGl2YXRlV2luZG93KToKKyAgICAgICAg
KERSVERldlRvb2xzQ2xpZW50OjpjbG9zZVdpbmRvdyk6CisgICAgICAgIChEUlREZXZUb29sc0Ns
aWVudDo6ZG9ja1dpbmRvdyk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6dW5kb2NrV2lu
ZG93KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50Ojphc3luY0NhbGwpOgorICAgICAgICAo
RFJURGV2VG9vbHNDbGllbnQ6OmNhbGwpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmFs
bE1lc3NhZ2VzUHJvY2Vzc2VkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
UlREZXZUb29sc0NsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9jb25maWcuaDoKKwogMjAxMC0wNy0wMSAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5l
LnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBD
aHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXBpIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuZ3lwaQppbmRleCA1ZmM4ZGFiLi5mZDU3MjBmCi0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQpAQCAtOSw2ICs5LDEyIEBACiAgICAgICAgICAgICAnY2hy
b21pdW0vQ3BwQm91bmRDbGFzcy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9DcHBWYXJpYW50
LmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vQ3BwVmFyaWFudC5oJywKKyAgICAgICAgICAg
ICdjaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
RFJURGV2VG9vbHNBZ2VudC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0Nh
bGxBcmdzLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5o
JywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5jcHAnLAorICAgICAg
ICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2Nocm9t
aXVtL0R1bXBSZW5kZXJUcmVlLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vRXZlbnRTZW5k
ZXIuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9FdmVudFNlbmRlci5oJywKQEAgLTQ0LDUg
KzUwLDUgQEAKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfV0sCiAgICAgICAgIF0s
Ci0gICAgfQorICAgIH0sCiB9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjA1MWRlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmNwcApAQCAtMCwwICsxLDE1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCisKKyNp
bmNsdWRlICJEUlREZXZUb29sc0NhbGxBcmdzLmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDbGll
bnQuaCIKKworI2luY2x1ZGUgInB1YmxpYy9XZWJDU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGlj
L1dlYkRldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNNZXNzYWdl
RGF0YS5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJwdWJsaWMv
V2ViVmlldy5oIgorI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0RSVERldlRvb2xzQWdlbnQ6OkRSVERldlRvb2xz
QWdlbnQoKQorICAgIDogbV9jYWxsTWV0aG9kRmFjdG9yeSh0aGlzKQorICAgICwgbV9kcnREZXZU
b29sc0NsaWVudCgwKQorICAgICwgbV93ZWJWaWV3KDApCit7CisgICAgc3RhdGljIGludCBkZXZU
b29sc0FnZW50Q291bnRlciA9IDA7CisKKyAgICBtX3JvdXRpbmdJRCA9ICsrZGV2VG9vbHNBZ2Vu
dENvdW50ZXI7CisgICAgaWYgKG1fcm91dGluZ0lEID09IDEpCisgICAgICAgIFdlYkRldlRvb2xz
QWdlbnQ6OnNldE1lc3NhZ2VMb29wRGlzcGF0Y2hIYW5kbGVyKCZEUlREZXZUb29sc0FnZW50Ojpk
aXNwYXRjaE1lc3NhZ2VMb29wKTsKK30KKwordm9pZCBEUlREZXZUb29sc0FnZW50OjpzZXRXZWJW
aWV3KFdlYlZpZXcqIHdlYlZpZXcpIHsKKyAgICBtX3dlYlZpZXcgPSB3ZWJWaWV3OworfQorCit2
b2lkIERSVERldlRvb2xzQWdlbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXZWJEZXZU
b29sc01lc3NhZ2VEYXRhJiBkYXRhKQoreworICAgIGlmIChtX2RydERldlRvb2xzQ2xpZW50KQor
ICAgICAgICAgbV9kcnREZXZUb29sc0NsaWVudC0+YXN5bmNDYWxsKERSVERldlRvb2xzQ2FsbEFy
Z3MoZGF0YSkpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6OmZvcmNlUmVwYWludCgpCit7
Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQo
Y29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGZlYXR1cmUsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICAv
LyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCit9CisKK1dlYkNTdHJpbmcgRFJURGV2VG9vbHNBZ2Vu
dDo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UoKQoreworICAgIHJldHVybiB3ZWJraXRfc3VwcG9ydDo6
R2V0RGV2VG9vbHNJbmplY3RlZFNjcmlwdFNvdXJjZSgpOworfQorCitXZWJDU3RyaW5nIERSVERl
dlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0RGlzcGF0Y2hlclNvdXJjZSgpCit7CisgICAgcmV0
dXJuIHdlYmtpdF9zdXBwb3J0OjpHZXREZXZUb29sc0luamVjdGVkU2NyaXB0RGlzcGF0Y2hlclNv
dXJjZSgpOworfQorCitXZWJDU3RyaW5nIERSVERldlRvb2xzQWdlbnQ6OmRlYnVnZ2VyU2NyaXB0
U291cmNlKCkKK3sKKyAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6OkdldERldlRvb2xzRGVidWdn
ZXJTY3JpcHRTb3VyY2UoKTsKK30KKwordm9pZCBEUlREZXZUb29sc0FnZW50Ojphc3luY0NhbGwo
Y29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyAmYXJncykKK3sKKyAgICB3ZWJraXRfc3VwcG9ydDo6
UG9zdFRhc2tGcm9tSGVyZSgKKyAgICAgICAgbV9jYWxsTWV0aG9kRmFjdG9yeS5OZXdSdW5uYWJs
ZU1ldGhvZCgmRFJURGV2VG9vbHNBZ2VudDo6Y2FsbCwgYXJncykpOworfQorCit2b2lkIERSVERl
dlRvb2xzQWdlbnQ6OmNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyAmYXJncykKK3sKKyAg
ICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xzQWdlbnQoKTsKKyAgICBpZiAo
YWdlbnQpCisgICAgICAgIGFnZW50LT5kaXNwYXRjaE1lc3NhZ2VGcm9tRnJvbnRlbmQoYXJncy5t
X2RhdGEpOworICAgIGlmIChEUlREZXZUb29sc0NhbGxBcmdzOjpjYWxsc0NvdW50KCkgPT0gMSAm
JiBtX2RydERldlRvb2xzQ2xpZW50KQorICAgICAgICBtX2RydERldlRvb2xzQ2xpZW50LT5hbGxN
ZXNzYWdlc1Byb2Nlc3NlZCgpOworfQorCitXZWJEZXZUb29sc0FnZW50KiBEUlREZXZUb29sc0Fn
ZW50Ojp3ZWJEZXZUb29sc0FnZW50KCkKK3sKKyAgICBpZiAoIW1fd2ViVmlldykKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+ZGV2VG9vbHNBZ2VudCgpOworfQorCit2
b2lkIERSVERldlRvb2xzQWdlbnQ6OmF0dGFjaChEUlREZXZUb29sc0NsaWVudCogY2xpZW50KQor
eworICAgIEFTU0VSVCghbV9kcnREZXZUb29sc0NsaWVudCk7CisgICAgbV9kcnREZXZUb29sc0Ns
aWVudCA9IGNsaWVudDsKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xz
QWdlbnQoKTsKKyAgICBpZiAoYWdlbnQpCisgICAgICAgIGFnZW50LT5hdHRhY2goKTsKK30KKwor
dm9pZCBEUlREZXZUb29sc0FnZW50OjpkZXRhY2goRFJURGV2VG9vbHNDbGllbnQqIGNsaWVudCkK
K3sKKyAgICBBU1NFUlQobV9kcnREZXZUb29sc0NsaWVudCk7CisgICAgV2ViRGV2VG9vbHNBZ2Vu
dCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7CisgICAgaWYgKGFnZW50KQorICAgICAgICBh
Z2VudC0+ZGV0YWNoKCk7CisgICAgbV9kcnREZXZUb29sc0NsaWVudCA9IDA7Cit9CisKK2Jvb2wg
RFJURGV2VG9vbHNBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKK3sKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xzQWdlbnQoKTsK
KyAgICBpZiAoIWFnZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYWdlbnQtPnNldFRp
bWVsaW5lUHJvZmlsaW5nRW5hYmxlZChlbmFibGVkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBEUlREZXZUb29sc0FnZW50OjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElE
LCBjb25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0KQoreworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFn
ZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmICghYWdlbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBhZ2VudC0+ZXZhbHVhdGVJbldlYkluc3BlY3RvcihjYWxsSUQsIFdlYlN0
cmluZzo6ZnJvbVVURjgoc2NyaXB0KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHN0YXRp
YyBtZXRob2QKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCgpCit7
CisgICAgd2Via2l0X3N1cHBvcnQ6OkRpc3BhdGNoTWVzc2FnZUxvb3AoKTsKK30KZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQu
aCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2FkMGZkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNB
Z2VudC5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERSVERldlRvb2xzQWdlbnRfaAorI2RlZmlu
ZSBEUlREZXZUb29sc0FnZW50X2gKKworLy8jaW5jbHVkZSAiYmFzZS9sb2dnaW5nLmgiCisjaW5j
bHVkZSAiYmFzZS90YXNrLmgiIC8vIEZJWE1FOiByZW1vdmUgdGhpcworCisvLyN1bmRlZiBMT0cK
KworI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3Ry
aW5nOworY2xhc3MgV2ViRGV2VG9vbHNBZ2VudDsKK2NsYXNzIFdlYlZpZXc7CitzdHJ1Y3QgV2Vi
RGV2VG9vbHNNZXNzYWdlRGF0YTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERS
VERldlRvb2xzQ2FsbEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0NsaWVudDsKKworY2xhc3MgRFJU
RGV2VG9vbHNBZ2VudCA6IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRDbGllbnQKKyAg
ICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAg
IERSVERldlRvb2xzQWdlbnQoKTsKKyAgICB2aXJ0dWFsIH5EUlREZXZUb29sc0FnZW50KCkge30K
KworICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqKTsKKworICAgIC8vIFdlYkRl
dlRvb2xzQWdlbnRDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNlbmRN
ZXNzYWdlVG9Gcm9udGVuZChjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmKTsK
KyAgICB2aXJ0dWFsIGludCBob3N0SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcm91dGluZ0lEOyB9
CisgICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBydW50
aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmVhdHVyZSwg
Ym9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViQ1N0cmluZyBpbmplY3RlZFNj
cmlwdFNvdXJjZSgpOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGluamVjdGVkU2Ny
aXB0RGlzcGF0Y2hlclNvdXJjZSgpOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGRl
YnVnZ2VyU2NyaXB0U291cmNlKCk7CisKKyAgICB2b2lkIGFzeW5jQ2FsbChjb25zdCBEUlREZXZU
b29sc0NhbGxBcmdzJik7CisKKyAgICB2b2lkIGF0dGFjaChEUlREZXZUb29sc0NsaWVudCopOwor
ICAgIHZvaWQgZGV0YWNoKERSVERldlRvb2xzQ2xpZW50Kik7CisKKyAgICBib29sIGV2YWx1YXRl
SW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHQpOwor
ICAgIGJvb2wgc2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyYpOworICAgIHN0
YXRpYyB2b2lkIGRpc3BhdGNoTWVzc2FnZUxvb3AoKTsKKyAgICBXZWJLaXQ6OldlYkRldlRvb2xz
QWdlbnQqIHdlYkRldlRvb2xzQWdlbnQoKTsKKworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFj
dG9yeTxEUlREZXZUb29sc0FnZW50PiBtX2NhbGxNZXRob2RGYWN0b3J5OworICAgIERSVERldlRv
b2xzQ2xpZW50KiBtX2RydERldlRvb2xzQ2xpZW50OworICAgIGludCBtX3JvdXRpbmdJRDsKKyAg
ICBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQqIG1fd2ViRGV2VG9vbHNBZ2VudDsKKyAgICBXZWJL
aXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKK307CisKKyNlbmRpZiAvLyBEUlREZXZUb29sc0FnZW50
X2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQ2FsbEFyZ3MuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
RFJURGV2VG9vbHNDYWxsQXJncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZGFjZDZmNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxsQXJncy5oIgorCisvLyBzdGF0
aWMKK2ludCBEUlREZXZUb29sc0NhbGxBcmdzOjptX2NhbGxzQ291bnQgPSAwOworCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxB
cmdzLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0Nh
bGxBcmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhM2Q0OAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQ2FsbEFyZ3MuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEUlREZXZUb29sc0NhbGxB
cmdzX2gKKyNkZWZpbmUgRFJURGV2VG9vbHNDYWxsQXJnc19oCisKKyNpbmNsdWRlICJwdWJsaWMv
V2ViRGV2VG9vbHNNZXNzYWdlRGF0YS5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdz
IHsKK3B1YmxpYzoKKyAgICBEUlREZXZUb29sc0NhbGxBcmdzKGNvbnN0IFdlYktpdDo6V2ViRGV2
VG9vbHNNZXNzYWdlRGF0YSYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7Cisg
ICAgICAgICsrbV9jYWxsc0NvdW50OworCisgICAgICAgIC8vIFRoZSBzYW1lIGJlaGF2aW91ciBh
cyB3ZSBoYXZlIGluIGNhc2Ugb2YgSVBDLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZGF0YS5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGEu
YXJndW1lbnRzW2ldLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIG1fZGF0YS5hcmd1bWVudHNb
aV0gPSBXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgoIiIpOworICAgICAgICB9CisgICAgfQor
CisgICAgRFJURGV2VG9vbHNDYWxsQXJncyhjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzJiBhcmdz
KQorICAgICAgICA6IG1fZGF0YShhcmdzLm1fZGF0YSkKKyAgICB7CisgICAgICAgICsrbV9jYWxs
c0NvdW50OworICAgIH0KKworICAgIH5EUlREZXZUb29sc0NhbGxBcmdzKCkKKyAgICB7CisgICAg
ICAgIC0tbV9jYWxsc0NvdW50OworICAgICAgICBBU1NFUlQobV9jYWxsc0NvdW50ID49IDApOwor
ICAgIH0KKworICAgIHN0YXRpYyBpbnQgY2FsbHNDb3VudCgpIHsgcmV0dXJuIG1fY2FsbHNDb3Vu
dDsgfQorCisgICAgV2ViS2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhIG1fZGF0YTsKKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgaW50IG1fY2FsbHNDb3VudDsKK307CisKKyNlbmRpZiAvLyBEUlRE
ZXZUb29sc0NhbGxBcmdzX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zM2VkMGY4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTI0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCisK
KyNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxs
QXJncy5oIgorCisjaW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRl
ICJwdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZC5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJGcmFt
ZS5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRlICJwdWJs
aWMvV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNpbmNsdWRlICJ3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCit1c2luZyBXZWJLaXQ6OldlYkRldlRv
b2xzQWdlbnQ7Cit1c2luZyBXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmQ7Cit1c2luZyBXZWJL
aXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGE7Cit1c2luZyBXZWJLaXQ6OldlYlN0cmluZzsKK3Vz
aW5nIFdlYktpdDo6V2ViVmlldzsKKworRFJURGV2VG9vbHNDbGllbnQ6OkRSVERldlRvb2xzQ2xp
ZW50KERSVERldlRvb2xzQWdlbnQqIGFnZW50LCBXZWJWaWV3KiB3ZWJWaWV3KQorICAgIDogbV9j
YWxsTWV0aG9kRmFjdG9yeSh0aGlzKQorICAgICwgbV9kcnREZXZUb29sc0FnZW50KGFnZW50KQor
ICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCit7CisgICAgbV93ZWJEZXZUb29sc0Zyb250ZW5kLnNl
dChXZWJEZXZUb29sc0Zyb250ZW5kOjpjcmVhdGUobV93ZWJWaWV3LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgiZW4tVVMiKSkpOworICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC0+YXR0YWNo
KHRoaXMpOworfQorCitEUlREZXZUb29sc0NsaWVudDo6fkRSVERldlRvb2xzQ2xpZW50KCkKK3sK
KyAgICAvLyBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSBwYWdlIHdpbGwgYmUgZGVzdHJveWVk
IGF0IGRldGFjaCBzdGVwIG9mCisgICAgLy8gbV9kcnREZXZUb29sc0FnZW50IGFuZCB3ZSBzaG91
bGQgY2xlYW4gcGVuZGluZyByZXF1ZXN0cyBhIGJpdCBlYXJsaWVyLgorICAgIG1fY2FsbE1ldGhv
ZEZhY3RvcnkuUmV2b2tlQWxsKCk7CisgICAgaWYgKG1fZHJ0RGV2VG9vbHNBZ2VudCkKKyAgICAg
ICAgbV9kcnREZXZUb29sc0FnZW50LT5kZXRhY2godGhpcyk7Cit9CisKK3ZvaWQgRFJURGV2VG9v
bHNDbGllbnQ6OnNlbmRNZXNzYWdlVG9BZ2VudChjb25zdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRh
JiBkYXRhKQoreworICAgIGlmIChtX2RydERldlRvb2xzQWdlbnQpCisgICAgICAgIG1fZHJ0RGV2
VG9vbHNBZ2VudC0+YXN5bmNDYWxsKERSVERldlRvb2xzQ2FsbEFyZ3MoZGF0YSkpOworfQorCit2
b2lkIERSVERldlRvb2xzQ2xpZW50OjpzZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudChjb25zdCBX
ZWJTdHJpbmcmIGNvbW1hbmQpCit7CisgICAgV2ViRGV2VG9vbHNBZ2VudDo6ZXhlY3V0ZURlYnVn
Z2VyQ29tbWFuZChjb21tYW5kLCAxKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6YWN0
aXZhdGVXaW5kb3coKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6Y2xvc2VXaW5kb3coKQor
eworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6ZG9ja1dpbmRvdygpCit7CisgICAgLy8gTm90IGlt
cGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRv
b2xzQ2xpZW50Ojp1bmRvY2tXaW5kb3coKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6YXN5
bmNDYWxsKGNvbnN0IERSVERldlRvb2xzQ2FsbEFyZ3MmIGFyZ3MpCit7CisgICAgd2Via2l0X3N1
cHBvcnQ6OlBvc3RUYXNrRnJvbUhlcmUoCisgICAgICAgIG1fY2FsbE1ldGhvZEZhY3RvcnkuTmV3
UnVubmFibGVNZXRob2QoJkRSVERldlRvb2xzQ2xpZW50OjpjYWxsLCBhcmdzKSk7Cit9CisKK3Zv
aWQgRFJURGV2VG9vbHNDbGllbnQ6OmNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyAmYXJn
cykKK3sKKyAgICBtX3dlYkRldlRvb2xzRnJvbnRlbmQtPmRpc3BhdGNoTWVzc2FnZUZyb21BZ2Vu
dChhcmdzLm1fZGF0YSk7CisgICAgaWYgKERSVERldlRvb2xzQ2FsbEFyZ3M6OmNhbGxzQ291bnQo
KSA9PSAxKQorICAgICAgICBhbGxNZXNzYWdlc1Byb2Nlc3NlZCgpOworfQorCit2b2lkIERSVERl
dlRvb2xzQ2xpZW50OjphbGxNZXNzYWdlc1Byb2Nlc3NlZCgpCit7CisgICAgbV93ZWJWaWV3LT5t
YWluRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdCgKKyAgICAgICAgV2ViS2l0OjpXZWJTY3JpcHRTb3Vy
Y2UoV2ViU3RyaW5nOjpmcm9tVVRGOCgKKyAgICAgICAgICAgICJpZiAod2luZG93LldlYkluc3Bl
Y3RvciAmJiBXZWJJbnNwZWN0b3IucXVldWVzQXJlRW1wdHkpIFdlYkluc3BlY3Rvci5xdWV1ZXNB
cmVFbXB0eSgpOyIpKSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi44N2FiOTk0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaApAQCAtMCwwICsxLDgyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBEUlREZXZUb29sc0NsaWVudF9oCisjZGVmaW5lIERSVERldlRvb2xzQ2xpZW50X2gKKwor
I2luY2x1ZGUgImJhc2UvdGFzay5oIiAvLyBGSVhNRTogcmVtb3ZlIHRoaXMKKworLy8jdW5kZWYg
TE9HCisKKyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkRldlRvb2xzRnJvbnRlbmQ7CitzdHJ1Y3QgV2Vi
RGV2VG9vbHNNZXNzYWdlRGF0YTsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlZpZXc7CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdzOworY2xh
c3MgRFJURGV2VG9vbHNBZ2VudDsKKworY2xhc3MgRFJURGV2VG9vbHNDbGllbnQgOiBwdWJsaWMg
V2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50CisgICAgICAgICAgICAgICAgICAgICAg
ICAsIHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgRFJURGV2VG9vbHNDbGllbnQo
RFJURGV2VG9vbHNBZ2VudCosIFdlYktpdDo6V2ViVmlldyopOworICAgIHZpcnR1YWwgfkRSVERl
dlRvb2xzQ2xpZW50KCk7CisKKyAgICAvLyBXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50IGltcGxl
bWVudGF0aW9uCisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9BZ2VudChjb25zdCBXZWJL
aXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZERlYnVn
Z2VyQ29tbWFuZFRvQWdlbnQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNvbW1hbmQpOworCisg
ICAgdmlydHVhbCB2b2lkIGFjdGl2YXRlV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3Nl
V2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGRvY2tXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdW5kb2NrV2luZG93KCk7CisKKyAgICB2b2lkIGFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29s
c0NhbGxBcmdzJik7CisKKyAgICB2b2lkIGFsbE1lc3NhZ2VzUHJvY2Vzc2VkKCk7CisKKyBwcml2
YXRlOgorICAgIHZvaWQgY2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzJik7CisKKyAgICBT
Y29wZWRSdW5uYWJsZU1ldGhvZEZhY3Rvcnk8RFJURGV2VG9vbHNDbGllbnQ+IG1fY2FsbE1ldGhv
ZEZhY3Rvcnk7CisgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgRFJURGV2VG9v
bHNBZ2VudCogbV9kcnREZXZUb29sc0FnZW50OworICAgIFdURjo6T3duUHRyPFdlYktpdDo6V2Vi
RGV2VG9vbHNGcm9udGVuZD4gbV93ZWJEZXZUb29sc0Zyb250ZW5kOworfTsKKworI2VuZGlmIC8v
IERSVERldlRvb2xzQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcAppbmRleCBmZDdiYTJkLi41YTgwZTBkCi0tLSBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcAorKysgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5jcHAKQEAgLTU4
LDcgKzU4LDcgQEAKIAogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSAicHVibGljL3dpbi9XZWJJ
bnB1dEV2ZW50RmFjdG9yeS5oIgotI2VuZGlmCisjZW5kaWYgLy8gT1MoV0lORE9XUykKIAogLy8g
RklYTUU6IGxheW91dCBiZWZvcmUgZWFjaCBldmVudD8KIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
CmluZGV4IDliYTY0MjEuLmJiNmRlMDkKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJUZXN0
U2hlbGwuaCIKKyNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCiAjaW5jbHVkZSAiV2ViVmll
d0hvc3QuaCIKICNpbmNsdWRlICJiYXNlL3N0cmluZ191dGlsLmgiCiAjaW5jbHVkZSAicHVibGlj
L1dlYkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKQEAgLTk1LDYgKzk2LDcgQEAgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAgYmlu
ZE1ldGhvZCgib2JqQ0lkZW50aXR5SXNFcXVhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2Jq
Q0lkZW50aXR5SXNFcXVhbCk7CiAgICAgYmluZE1ldGhvZCgic2V0QWx3YXlzQWNjZXB0Q29va2ll
cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyk7CiAgICAg
YmluZE1ldGhvZCgic2hvd1dlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hv
d1dlYkluc3BlY3Rvcik7CisgICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0b3IiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsKICAgICBiaW5kTWV0aG9kKCJz
ZXRXaW5kb3dJc0tleSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkpOwog
ICAgIGJpbmRNZXRob2QoInNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTsKICAgICBiaW5k
TWV0aG9kKCJzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVy
OjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKTsKQEAgLTU1NSw2ICs1NTcsMTIgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50KgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3MsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBtX3NoZWxsLT5jbG9zZURldlRvb2xz
KCk7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBW
YXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3Vt
ZW50c1swXS5pc0Jvb2woKSkKQEAgLTEyNDUsNyArMTI1Myw3IEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExp
c3QmIGFyCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PCAxIHx8ICFhcmd1bWVudHNbMF0uaXNCb29sKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBG
SVhNRTogU2hvdWxkIGNhbGwgVGVzdFNoZWxsRGV2VG9vbHNBZ2VudDo6c2V0VGltZWxpbmVQcm9m
aWxpbmdFbmFibGVkKCkuCisgICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNBZ2VudCgpLT5zZXRUaW1l
bGluZVByb2ZpbGluZ0VuYWJsZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKIH0KIAogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTI1Myw3ICsx
MjYxLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rv
cihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW4KICAgICByZXN1bHQtPnNldE51bGwoKTsK
ICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc0ludDMyKCkg
fHwgIWFyZ3VtZW50c1sxXS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklY
TUU6IFNob3VsZCBjYWxsIFRlc3RTaGVsbERldlRvb2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3IoKS4KKyAgICBtX3NoZWxsLT5kcnREZXZUb29sc0FnZW50KCktPmV2YWx1YXRlSW5XZWJJ
bnNwZWN0b3IoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkp
OwogfQogCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9y
cyhjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVz
dENvbnRyb2xsZXIuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91
dFRlc3RDb250cm9sbGVyLmgKaW5kZXggMjI3NDFkNS4uNWQ2NTcyNiAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCkBAIC0xMjksNiArMTI5LDcgQEAgcHVibGljOgogCiAgICAgLy8gU2hvd3MgRGV2VG9v
bHMgd2luZG93LgogICAgIHZvaWQgc2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CisgICAgdm9pZCBjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKICAgICAvLyBHaXZlcyBmb2N1cyB0byB0aGUg
d2luZG93LgogICAgIHZvaWQgc2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbC5jcHAKaW5kZXggNTJmMWU3ZC4uZWU2ODZlNCAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0zMiw2ICszMiw4
IEBACiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAKICNpbmNsdWRlICJMYXlvdXRUZXN0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlICJEUlREZXZU
b29sc0NsaWVudC5oIgogI2luY2x1ZGUgIldlYlZpZXdIb3N0LmgiCiAjaW5jbHVkZSAiYmFzZS9t
ZDUuaCIgLy8gRklYTUU6IFdyYXAgYnkgd2Via2l0X3N1cHBvcnQuCiAjaW5jbHVkZSAiYmFzZS9z
dHJpbmcxNi5oIgpAQCAtNTIsNiArNTQsNyBAQAogI2luY2x1ZGUgInB1YmxpYy9XZWJWaWV3Lmgi
CiAjaW5jbHVkZSAic2tpYS9leHQvYml0bWFwX3BsYXRmb3JtX2RldmljZS5oIgogI2luY2x1ZGUg
InNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgorLy8jaW5jbHVkZSAid2Via2l0L2dsdWUvd2Vi
a2l0X2dsdWUuaCIKICNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjY3R5cGU+CkBAIC04MSw2ICs4NCw3IEBA
IFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJvb2wgdGVzdFNoZWxsTW9kZSkKICAgICAsIG1fZm9jdXNl
ZFdpZGdldCgwKQogICAgICwgbV90ZXN0U2hlbGxNb2RlKHRlc3RTaGVsbE1vZGUpCiAgICAgLCBt
X2FsbG93RXh0ZXJuYWxQYWdlcyhmYWxzZSkKKyAgICAsIG1fZGV2VG9vbHMoMCkKIHsKICAgICBX
ZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdlb2xvY2F0aW9uKHRydWUpOwogICAgIG1fYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuc2V0KG5ldyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcih0aGlzKSk7
CkBAIC05NywxMiArMTAxLDE3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJvb2wgdGVzdFNoZWxs
TW9kZSkKICAgICAvLyB0aW1lZC1vdXQgRFJUIHByb2Nlc3Mgd2FzIGNyYXNoZWQuCiAgICAgbV90
aW1lb3V0ID0gMzAgKiAxMDAwOwogCisgICAgbV9kcnREZXZUb29sc0FnZW50LnNldChuZXcgRFJU
RGV2VG9vbHNBZ2VudCk7CiAgICAgbV93ZWJWaWV3SG9zdCA9IGNyZWF0ZVdlYlZpZXcoKTsKICAg
ICBtX3dlYlZpZXcgPSBtX3dlYlZpZXdIb3N0LT53ZWJWaWV3KCk7CisgICAgbV9kcnREZXZUb29s
c0FnZW50LT5zZXRXZWJWaWV3KG1fd2ViVmlldyk7CiB9CiAKIFRlc3RTaGVsbDo6flRlc3RTaGVs
bCgpCiB7CisgICAgLy8gTm90ZTogRGV2VG9vbHMgYXJlIGNsb3NlZCB0b2dldGhlciB3aXRoIGFs
bCB0aGUgb3RoZXIgd2luZG93cyBpbiB0aGUKKyAgICAvLyB3aW5kb3dzIGxpc3QuCisKICAgICBs
b2FkVVJMKEdVUkwoImFib3V0OmJsYW5rIikpOwogICAgIC8vIENhbGwgR0MgdHdpY2UgdG8gY2xl
YW4gdXAgZ2FyYmFnZS4KICAgICBjYWxsSlNHQygpOwpAQCAtMTEyLDYgKzEyMSwzNCBAQCBUZXN0
U2hlbGw6On5UZXN0U2hlbGwoKQogICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKIH0KIAordm9pZCBU
ZXN0U2hlbGw6OmNyZWF0ZURSVERldlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQgKmFnZW50
KQoreworICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQuc2V0KG5ldyBEUlREZXZUb29sc0NsaWVudChh
Z2VudCwgd2ViVmlldygpKSk7Cit9CisKK3ZvaWQgVGVzdFNoZWxsOjpzaG93RGV2VG9vbHMoKQor
eworICAgIGlmICghbV9kZXZUb29scykgeworICAgICAgICBXZWJVUkwgdXJsID0gd2Via2l0X3N1
cHBvcnQ6OkdldERldlRvb2xzUGF0aEFzVVJMKCk7CisgICAgICAgIGlmICghdXJsLmlzVmFsaWQo
KSkgeworICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBtX2RldlRvb2xzID0gY3JlYXRlTmV3V2luZG93KHVybCk7CisgICAg
ICAgIEFTU0VSVChtX2RldlRvb2xzKTsKKyAgICAgICAgY3JlYXRlRFJURGV2VG9vbHNDbGllbnQo
bV9kcnREZXZUb29sc0FnZW50LmdldCgpKTsKKyAgICB9CisgICAgbV9kZXZUb29scy0+c2hvdyhX
ZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lOZXdXaW5kb3cpOworfQorCit2b2lkIFRlc3RTaGVs
bDo6Y2xvc2VEZXZUb29scygpCit7CisgICAgaWYgKG1fZGV2VG9vbHMpIHsKKyAgICAgICAgY2xv
c2VXaW5kb3cobV9kZXZUb29scyk7CisgICAgICAgIG1fZGV2VG9vbHMgPSAwOworICAgIH0KK30K
Kwogdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmlldykKIHsK
ICAgICAvLyBNYXRjaCB0aGUgc2V0dGluZ3MgdXNlZCBieSBNYWMgRHVtcFJlbmRlclRyZWUsIHdp
dGggdGhlIGV4Y2VwdGlvbiBvZgpAQCAtMjA2LDYgKzI0Myw5IEBAIHZvaWQgVGVzdFNoZWxsOjpy
dW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMpCiAgICAgICAgIHx8IHRlc3RVcmwu
ZmluZCgibG9hZGluZ1xcIikgIT0gc3RyaW5nOjpucG9zKQogICAgICAgICBtX2xheW91dFRlc3RD
b250cm9sbGVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOwogCisgICAg
aWYgKGluc3BlY3RvclRlc3RNb2RlKQorICAgICAgICBzaG93RGV2VG9vbHMoKTsKKwogICAgIG1f
cHJpbnRlci0+aGFuZGxlVGVzdEhlYWRlcih0ZXN0VXJsLmNfc3RyKCkpOwogICAgIGxvYWRVUkwo
bV9wYXJhbXMudGVzdFVybCk7CiAKQEAgLTU4Niw3ICs2MjYsNyBAQCBXZWJWaWV3SG9zdCogVGVz
dFNoZWxsOjpjcmVhdGVXZWJWaWV3KCkKIFdlYlZpZXdIb3N0KiBUZXN0U2hlbGw6OmNyZWF0ZU5l
d1dpbmRvdyhjb25zdCBXZWJVUkwmIHVybCkKIHsKICAgICBXZWJWaWV3SG9zdCogaG9zdCA9IG5l
dyBXZWJWaWV3SG9zdCh0aGlzKTsKLSAgICBXZWJWaWV3KiB2aWV3ID0gV2ViVmlldzo6Y3JlYXRl
KGhvc3QsIDApOworICAgIFdlYlZpZXcqIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoaG9zdCwgbV9k
cnREZXZUb29sc0FnZW50LmdldCgpKTsKICAgICBob3N0LT5zZXRXZWJXaWRnZXQodmlldyk7CiAg
ICAgcmVzZXRXZWJTZXR0aW5ncygqdmlldyk7CiAgICAgdmlldy0+aW5pdGlhbGl6ZU1haW5GcmFt
ZShob3N0KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsLmgKaW5kZXggMjM5NzI0Ni4uZTE5MzEzZgotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMjgsNiArMjgsOSBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCisjaWZuZGVmIFRlc3RTaGVsbF9oCisjZGVmaW5lIFRlc3RTaGVsbF9oCisKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgi
CiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKQEAgLTQ0LDYgKzQ3LDcgQEAKIC8v
IHZhcmlvdXMgb2JqZWN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgY3JlYXRlZCBpbiBvbmUgRFJU
IHByb2Nlc3MuCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRGV2VG9vbHNBZ2VudENs
aWVudDsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwog
Y2xhc3MgV2ViUHJlZmVyZW5jZXM7CkBAIC01NCw2ICs1OCwxMCBAQCBuYW1lc3BhY2Ugc2tpYSB7
CiBjbGFzcyBQbGF0Zm9ybUNhbnZhczsKIH0KIAorY2xhc3MgRFJURGV2VG9vbHNBZ2VudDsKK2Ns
YXNzIERSVERldlRvb2xzQ2FsbEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0NsaWVudDsKKwogc3Ry
dWN0IFRlc3RQYXJhbXMgewogICAgIGJvb2wgZHVtcFRyZWU7CiAgICAgYm9vbCBkdW1wUGl4ZWxz
OwpAQCAtNjksMTAgKzc3LDIyIEBAIHN0cnVjdCBUZXN0UGFyYW1zIHsKICAgICAgICAgLCBwcmlu
dFNlcGFyYXRvcnMoZmFsc2UpIHt9CiB9OwogCitzdHJ1Y3QgVGVzdFNoZWxsV2Vha1JlZmVyZW5j
ZSB7CisgICAgVGVzdFNoZWxsV2Vha1JlZmVyZW5jZSgpCisgICAgICAgIDogbV90ZXN0U2hlbGwo
MCkKKyAgICB7IH0KKworICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV90ZXN0U2hlbGwgPSAwOyB9
CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXN0U2hlbGw7IH0KKworICAg
IFRlc3RTaGVsbCogbV90ZXN0U2hlbGw7Cit9OworCiBjbGFzcyBUZXN0U2hlbGwgewogcHVibGlj
OgogICAgIFRlc3RTaGVsbChib29sIHRlc3RTaGVsbE1vZGUpOwogICAgIH5UZXN0U2hlbGwoKTsK
KwogICAgIC8vIFRoZSBtYWluIFdlYlZpZXcuCiAgICAgV2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3
KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CiAgICAgLy8gUmV0dXJucyB0aGUgaG9zdCBm
b3IgdGhlIG1haW4gV2ViVmlldy4KQEAgLTEyNiwxMSArMTQ2LDE4IEBAIHB1YmxpYzoKICAgICB2
b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpOwogICAgIGludCB3aW5kb3dDb3VudCgpOwogICAg
IHN0YXRpYyB2b2lkIHJlc2l6ZVdpbmRvd0ZvclRlc3QoV2ViVmlld0hvc3QqLCBjb25zdCBXZWJL
aXQ6OldlYlVSTCYpOwotICAgIHZvaWQgc2hvd0RldlRvb2xzKCkge30gLy8gRklYTUU6IGltZXBs
ZW1lbnQgdGhpcy4KKworICAgIHZvaWQgc2hvd0RldlRvb2xzKCk7CisgICAgdm9pZCBjbG9zZURl
dlRvb2xzKCk7CisKKyAgICBEUlREZXZUb29sc0FnZW50KiBkcnREZXZUb29sc0FnZW50KCkgeyBy
ZXR1cm4gbV9kcnREZXZUb29sc0FnZW50LmdldCgpOyB9CisgICAgRFJURGV2VG9vbHNDbGllbnQq
IGRydERldlRvb2xzQ2xpZW50KCkgeyByZXR1cm4gbV9kcnREZXZUb29sc0NsaWVudC5nZXQoKTsg
fQogCiAgICAgc3RhdGljIGNvbnN0IGludCB2aXJ0dWFsV2luZG93Qm9yZGVyID0gMzsKIAogcHJp
dmF0ZToKKyAgICB2b2lkIGNyZWF0ZURSVERldlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQq
KTsKKwogICAgIHN0YXRpYyB2b2lkIHJlc2V0V2ViU2V0dGluZ3MoV2ViS2l0OjpXZWJWaWV3Jik7
CiAgICAgdm9pZCBkdW1wKCk7CiAgICAgc3RkOjpzdHJpbmcgZHVtcEFsbEJhY2tGb3J3YXJkTGlz
dHMoKTsKQEAgLTE0Myw2ICsxNzAsOSBAQCBwcml2YXRlOgogICAgIFdlYktpdDo6V2ViV2lkZ2V0
KiBtX2ZvY3VzZWRXaWRnZXQ7CiAgICAgYm9vbCBtX3Rlc3RTaGVsbE1vZGU7CiAgICAgV2ViVmll
d0hvc3QqIG1fd2ViVmlld0hvc3Q7CisgICAgV2ViVmlld0hvc3QqIG1fZGV2VG9vbHM7CisgICAg
T3duUHRyPERSVERldlRvb2xzQWdlbnQ+IG1fZHJ0RGV2VG9vbHNBZ2VudDsKKyAgICBPd25QdHI8
RFJURGV2VG9vbHNDbGllbnQ+IG1fZHJ0RGV2VG9vbHNDbGllbnQ7CiAgICAgT3duUHRyPEFjY2Vz
c2liaWxpdHlDb250cm9sbGVyPiBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyOwogICAgIE93blB0
cjxFdmVudFNlbmRlcj4gbV9ldmVudFNlbmRlcjsKICAgICBPd25QdHI8TGF5b3V0VGVzdENvbnRy
b2xsZXI+IG1fbGF5b3V0VGVzdENvbnRyb2xsZXI7CkBAIC0xNjYsMyArMTk2LDUgQEAgcHJpdmF0
ZToKIH07CiAKIHZvaWQgcGxhdGZvcm1Jbml0KCk7CisKKyNlbmRpZiAvLyBUZXN0U2hlbGxfaApk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29uZmlnLmgg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaAppbmRleCA2MDI5
NTMyLi5kOTNiNGI0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2Nv
bmZpZy5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5o
CkBAIC00MSwxMSArNDEsMTQgQEAKICNkZWZpbmUgRENIRUNLKGNvbmRpdGlvbikgd2hpbGUgKGZh
bHNlICYmIChjb25kaXRpb24pKSBzdGQ6OmNlcnIKICNkZWZpbmUgRENIRUNLX0VRKGEsIGIpIHdo
aWxlIChmYWxzZSAmJiAoYSkgPT0gKGIpKSBzdGQ6OmNlcnIKICNkZWZpbmUgRENIRUNLX05FKGEs
IGIpIHdoaWxlIChmYWxzZSAmJiAoYSkgIT0gKGIpKSBzdGQ6OmNlcnIKKyNkZWZpbmUgTk9UUkVB
Q0hFRCgpIERDSEVDSyhmYWxzZSkKIAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0vLyBK
U19FWFBPUlREQVRBIGlzIG5lZWRlZCB0byBpbmx1Y2RlIHd0Zi9XVEZTdHJpbmcuaC4KICNpZiBP
UyhXSU5ET1dTKSAmJiAhQ09NUElMRVIoR0NDKQorLy8gQWxsb3cgJ3RoaXMnIHRvIGJlIHVzZWQg
aW4gYmFzZSBtZW1iZXIgaW5pdGlhbGl6ZXIgbGlzdC4KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
IDogNDM1NSkKKy8vIEpTX0VYUE9SVERBVEEgaXMgbmVlZGVkIHRvIGlubHVjZGUgd3RmL1dURlN0
cmluZy5oLgogI2RlZmluZSBKU19FWFBPUlREQVRBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQogI2Vs
c2UKICNkZWZpbmUgSlNfRVhQT1JUREFUQQo=
</data>
<flag name="review"
          id="47813"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60495</attachid>
            <date>2010-07-04 23:18:00 -0700</date>
            <delta_ts>2010-07-06 03:16:22 -0700</delta_ts>
            <desc>patch - snapshot of current state (fixed style bugs and addressed review remarks)</desc>
            <filename>devtools2.patch</filename>
            <type>text/plain</type>
            <size>36340</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDkxMGQyZDIuLjYxMTkzZGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA3LTA0ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFRhbXVyYSBLZW50LgorCisgICAgICAgIEJ1
ZyA0MDU1OCAtIFtEUlQvQ2hyb21pdW1dIFVwc3RyZWFtIFRlc3RTaGVsbERldlRvb2xzIGZvciBD
aHJvbWl1bSBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQwNTU4CisKKyAgICAgICAgVXBzdHJlYW0gRGV2VG9vbHMgZm9yIENocm9taXVtIERSVC4K
KworICAgICAgICAqIFdlYktpdC5neXA6CisKIDIwMTAtMDctMDMgIEVyaWsgQXJ2aWRzc29uICA8
YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBlMmRhMWI0Li4wYzdmNTE5Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02MjksNiArNjI5LDkg
QEAKICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKICAgICAgICAgICAgICAgICAgICAg
J2RlcGVuZGVuY2llcyc6IFsnTGF5b3V0VGVzdEhlbHBlciddLAogCisgICAgICAgICAgICAgICAg
ICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0JywgIyBmb3IgYSBoZWFkZXIgZ2VuZXJhdGVkIGJ5IGdy
aXQKKyAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ3Jlc291cmNl
X2luY2x1ZGVfZGlycyc6IFsnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0J10sCiAg
ICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAg
JzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL25ldC9uZXRfcmVzb3VyY2VzLnJjJywKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRl
eCA0ZmExNGEzLi5kMjNjYjA5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTAtMDctMDQgIFJv
bGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVGFtdXJhIEtlbnQuCisKKyAgICAgICAgQnVnIDQwNTU4IC0gW0RSVC9DaHJvbWl1
bV0gVXBzdHJlYW0gVGVzdFNoZWxsRGV2VG9vbHMgZm9yIENocm9taXVtIERSVAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA1NTgKKworICAgICAgICBV
cHN0cmVhbSBEZXZUb29scyBmb3IgQ2hyb21pdW0gRFJULgorICAgICAgICAob3JpZ2luYWwgQ2hy
b21pdW0gZmlsZXMgcmV2LiA1MTI4NykKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmd5cGk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRp
bWVsaW5lUHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToKKyAgICAg
ICAgKFRlc3RTaGVsbDo6flRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OmNyZWF0ZURS
VERldlRvb2xzQ2xpZW50KToKKyAgICAgICAgKFRlc3RTaGVsbDo6c2hvd0RldlRvb2xzKToKKyAg
ICAgICAgKFRlc3RTaGVsbDo6Y2xvc2VEZXZUb29scyk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1
bkZpbGVUZXN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
aDoKKyAgICAgICAgKFRlc3RTaGVsbDo6d2ViRGV2VG9vbHNEUlRBZ2VudCk6CisgICAgICAgIChU
ZXN0U2hlbGw6OndlYkRldlRvb2xzRFJUQ2xpZW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChEUlREZXZU
b29sc0FnZW50OjpEUlREZXZUb29sc0FnZW50KToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpmb3Jj
ZVJlcGFpbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6cnVudGltZUZlYXR1cmVTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHRTb3Vy
Y2UpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVy
U291cmNlKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmRlYnVnZ2VyU2NyaXB0U291cmNl
KToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmFzeW5jQ2FsbCk6CisgICAgICAgIChEUlRE
ZXZUb29sc0FnZW50OjpjYWxsKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OndlYkRldlRv
b2xzQWdlbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6YXR0YWNoKToKKyAgICAgICAg
KERSVERldlRvb2xzQWdlbnQ6OmRldGFjaCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpz
ZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6
ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpkaXNw
YXRjaE1lc3NhZ2VMb29wKToKKyAgICAgICAgKFdlYkRldlRvb2xzQWdlbnRDbGllbnQ6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZE9uSU9UaHJlYWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVERldlRvb2xzQWdlbnQuaDogQWRkZWQuCisgICAgICAgIChEUlREZXZUb29sc0Fn
ZW50Ojp+RFJURGV2VG9vbHNBZ2VudCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpob3N0
SWRlbnRpZmllcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9v
bHNDYWxsQXJncy5jcHA6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVERldlRvb2xzQ2FsbEFyZ3MuaDogQWRkZWQuCisgICAgICAgIChEUlREZXZUb29sc0NhbGxB
cmdzOjpEUlREZXZUb29sc0NhbGxBcmdzKToKKyAgICAgICAgKERSVERldlRvb2xzQ2FsbEFyZ3M6
On5EUlREZXZUb29sc0NhbGxBcmdzKToKKyAgICAgICAgKERSVERldlRvb2xzQ2FsbEFyZ3M6OmNh
bGxzQ291bnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xz
Q2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6RFJURGV2VG9v
bHNDbGllbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6On5EUlREZXZUb29sc0NsaWVu
dCk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VUb0FnZW50KToKKyAg
ICAgICAgKERSVERldlRvb2xzQ2xpZW50OjpzZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudCk6Cisg
ICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6YWN0aXZhdGVXaW5kb3cpOgorICAgICAgICAoRFJU
RGV2VG9vbHNDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50
Ojpkb2NrV2luZG93KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50Ojp1bmRvY2tXaW5kb3cp
OgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmFzeW5jQ2FsbCk6CisgICAgICAgIChEUlRE
ZXZUb29sc0NsaWVudDo6Y2FsbCk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6YWxsTWVz
c2FnZXNQcm9jZXNzZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L2NvbmZpZy5oOgorCiAyMDEwLTA3LTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJv
Z2EuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaSBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKaW5kZXggNWZjOGRhYi4u
ZmQ1NzIwZgotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXBpCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkK
QEAgLTksNiArOSwxMiBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL0NwcEJvdW5kQ2xhc3MuaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vQ3BwVmFyaWFudC5jcHAnLAogICAgICAgICAgICAgJ2No
cm9taXVtL0NwcFZhcmlhbnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNB
Z2VudC5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuaCcsCisg
ICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5jcHAnLAorICAgICAgICAg
ICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuaCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vRFJURGV2VG9vbHNDbGllbnQuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZU
b29sc0NsaWVudC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vRXZlbnRTZW5kZXIuaCcsCkBAIC00NCw1ICs1MCw1IEBACiAgICAgICAgICAgICAg
ICAgXSwKICAgICAgICAgICAgIH1dLAogICAgICAgICBdLAotICAgIH0KKyAgICB9LAogfQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNB
Z2VudC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29s
c0FnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmY3N2EwCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJU
RGV2VG9vbHNBZ2VudC5jcHAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgorCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxs
QXJncy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCisKKyNpbmNsdWRlICJwdWJs
aWMvV2ViQ1N0cmluZy5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0FnZW50LmgiCisj
aW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzTWVzc2FnZURhdGEuaCIKKyNpbmNsdWRlICJwdWJs
aWMvV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNpbmNsdWRlICJ3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitEUlREZXZUb29sc0FnZW50OjpEUlREZXZUb29sc0FnZW50KCkKKyAgICA6IG1fY2FsbE1l
dGhvZEZhY3RvcnkodGhpcykKKyAgICAsIG1fZHJ0RGV2VG9vbHNDbGllbnQoMCkKKyAgICAsIG1f
d2ViVmlldygwKQoreworICAgIHN0YXRpYyBpbnQgZGV2VG9vbHNBZ2VudENvdW50ZXIgPSAwOwor
CisgICAgbV9yb3V0aW5nSUQgPSArK2RldlRvb2xzQWdlbnRDb3VudGVyOworICAgIGlmIChtX3Jv
dXRpbmdJRCA9PSAxKQorICAgICAgICBXZWJEZXZUb29sc0FnZW50OjpzZXRNZXNzYWdlTG9vcERp
c3BhdGNoSGFuZGxlcigmRFJURGV2VG9vbHNBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCk7Cit9
CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6c2V0V2ViVmlldyhXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIG1fd2ViVmlldyA9IHdlYlZpZXc7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEp
Cit7CisgICAgaWYgKG1fZHJ0RGV2VG9vbHNDbGllbnQpCisgICAgICAgICBtX2RydERldlRvb2xz
Q2xpZW50LT5hc3luY0NhbGwoRFJURGV2VG9vbHNDYWxsQXJncyhkYXRhKSk7Cit9CisKK3ZvaWQg
RFJURGV2VG9vbHNBZ2VudDo6Zm9yY2VSZXBhaW50KCkKK3sKK30KKwordm9pZCBEUlREZXZUb29s
c0FnZW50OjpydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgZmVhdHVyZSwgYm9vbCBlbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhp
cy4KK30KKworV2ViQ1N0cmluZyBEUlREZXZUb29sc0FnZW50OjppbmplY3RlZFNjcmlwdFNvdXJj
ZSgpCit7CisgICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpHZXREZXZUb29sc0luamVjdGVkU2Ny
aXB0U291cmNlKCk7Cit9CisKK1dlYkNTdHJpbmcgRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRT
Y3JpcHREaXNwYXRjaGVyU291cmNlKCkKK3sKKyAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6Okdl
dERldlRvb2xzSW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCk7Cit9CisKK1dlYkNTdHJp
bmcgRFJURGV2VG9vbHNBZ2VudDo6ZGVidWdnZXJTY3JpcHRTb3VyY2UoKQoreworICAgIHJldHVy
biB3ZWJraXRfc3VwcG9ydDo6R2V0RGV2VG9vbHNEZWJ1Z2dlclNjcmlwdFNvdXJjZSgpOworfQor
Cit2b2lkIERSVERldlRvb2xzQWdlbnQ6OmFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxB
cmdzICZhcmdzKQoreworICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0VGFza0Zyb21IZXJlKAorICAg
ICAgICBtX2NhbGxNZXRob2RGYWN0b3J5Lk5ld1J1bm5hYmxlTWV0aG9kKCZEUlREZXZUb29sc0Fn
ZW50OjpjYWxsLCBhcmdzKSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6Y2FsbChjb25z
dCBEUlREZXZUb29sc0NhbGxBcmdzICZhcmdzKQoreworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFn
ZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmIChhZ2VudCkKKyAgICAgICAgYWdlbnQt
PmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChhcmdzLm1fZGF0YSk7CisgICAgaWYgKERSVERl
dlRvb2xzQ2FsbEFyZ3M6OmNhbGxzQ291bnQoKSA9PSAxICYmIG1fZHJ0RGV2VG9vbHNDbGllbnQp
CisgICAgICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQtPmFsbE1lc3NhZ2VzUHJvY2Vzc2VkKCk7Cit9
CisKK1dlYkRldlRvb2xzQWdlbnQqIERSVERldlRvb2xzQWdlbnQ6OndlYkRldlRvb2xzQWdlbnQo
KQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV93ZWJWaWV3LT5kZXZUb29sc0FnZW50KCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6
YXR0YWNoKERSVERldlRvb2xzQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2RydERl
dlRvb2xzQ2xpZW50KTsKKyAgICBtX2RydERldlRvb2xzQ2xpZW50ID0gY2xpZW50OworICAgIFdl
YkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmIChhZ2Vu
dCkKKyAgICAgICAgYWdlbnQtPmF0dGFjaCgpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6
OmRldGFjaChEUlREZXZUb29sc0NsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVChtX2RydERl
dlRvb2xzQ2xpZW50KTsKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xz
QWdlbnQoKTsKKyAgICBpZiAoYWdlbnQpCisgICAgICAgIGFnZW50LT5kZXRhY2goKTsKKyAgICBt
X2RydERldlRvb2xzQ2xpZW50ID0gMDsKK30KKworYm9vbCBEUlREZXZUb29sc0FnZW50OjpzZXRU
aW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFdlYkRldlRvb2xz
QWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmICghYWdlbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhZ2VudC0+c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVk
KGVuYWJsZWQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERSVERldlRvb2xzQWdlbnQ6
OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBz
Y3JpcHQpCit7CisgICAgV2ViRGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50
KCk7CisgICAgaWYgKCFhZ2VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFnZW50LT5l
dmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNhbGxJRCwgV2ViU3RyaW5nOjpmcm9tVVRGOChzY3JpcHQp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gc3RhdGljIG1ldGhvZAordm9pZCBEUlREZXZU
b29sc0FnZW50OjpkaXNwYXRjaE1lc3NhZ2VMb29wKCkKK3sKKyAgICB3ZWJraXRfc3VwcG9ydDo6
RGlzcGF0Y2hNZXNzYWdlTG9vcCgpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM3ZmMxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgKQEAgLTAsMCArMSw4NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRFJURGV2VG9vbHNBZ2VudF9oCisjZGVmaW5lIERSVERldlRvb2xzQWdlbnRfaAor
CisjaW5jbHVkZSAiYmFzZS90YXNrLmgiIC8vIEZJWE1FOiByZW1vdmUgdGhpcworI2luY2x1ZGUg
InB1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3RyaW5nOworY2xhc3Mg
V2ViRGV2VG9vbHNBZ2VudDsKK2NsYXNzIFdlYlZpZXc7CitzdHJ1Y3QgV2ViRGV2VG9vbHNNZXNz
YWdlRGF0YTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERSVERldlRvb2xzQ2Fs
bEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0NsaWVudDsKKworY2xhc3MgRFJURGV2VG9vbHNBZ2Vu
dCA6IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRDbGllbnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgLCBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIERSVERldlRvb2xz
QWdlbnQoKTsKKyAgICB2aXJ0dWFsIH5EUlREZXZUb29sc0FnZW50KCkge30KKworICAgIHZvaWQg
c2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqKTsKKworICAgIC8vIFdlYkRldlRvb2xzQWdlbnRD
bGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmKTsKKyAgICB2aXJ0dWFs
IGludCBob3N0SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcm91dGluZ0lEOyB9CisgICAgdmlydHVh
bCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBydW50aW1lRmVhdHVyZVN0
YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmVhdHVyZSwgYm9vbCBlbmFibGVk
KTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViQ1N0cmluZyBpbmplY3RlZFNjcmlwdFNvdXJjZSgp
OworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGluamVjdGVkU2NyaXB0RGlzcGF0Y2hl
clNvdXJjZSgpOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGRlYnVnZ2VyU2NyaXB0
U291cmNlKCk7CisKKyAgICB2b2lkIGFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdz
Jik7CisKKyAgICB2b2lkIGF0dGFjaChEUlREZXZUb29sc0NsaWVudCopOworICAgIHZvaWQgZGV0
YWNoKERSVERldlRvb2xzQ2xpZW50Kik7CisKKyAgICBib29sIGV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHQpOworICAgIGJvb2wgc2V0
VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyYpOworICAgIHN0YXRpYyB2b2lkIGRp
c3BhdGNoTWVzc2FnZUxvb3AoKTsKKyAgICBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQqIHdlYkRl
dlRvb2xzQWdlbnQoKTsKKworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeTxEUlREZXZU
b29sc0FnZW50PiBtX2NhbGxNZXRob2RGYWN0b3J5OworICAgIERSVERldlRvb2xzQ2xpZW50KiBt
X2RydERldlRvb2xzQ2xpZW50OworICAgIGludCBtX3JvdXRpbmdJRDsKKyAgICBXZWJLaXQ6Oldl
YkRldlRvb2xzQWdlbnQqIG1fd2ViRGV2VG9vbHNBZ2VudDsKKyAgICBXZWJLaXQ6OldlYlZpZXcq
IG1fd2ViVmlldzsKK307CisKKyNlbmRpZiAvLyBEUlREZXZUb29sc0FnZW50X2gKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFy
Z3MuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHND
YWxsQXJncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjZDZmNwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RS
VERldlRvb2xzQ2FsbEFyZ3MuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxsQXJncy5oIgorCisvLyBzdGF0aWMKK2ludCBEUlRE
ZXZUb29sc0NhbGxBcmdzOjptX2NhbGxzQ291bnQgPSAwOworCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmggYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhM2Q0OAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFy
Z3MuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEUlREZXZUb29sc0NhbGxBcmdzX2gKKyNkZWZp
bmUgRFJURGV2VG9vbHNDYWxsQXJnc19oCisKKyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNN
ZXNzYWdlRGF0YS5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdzIHsKK3B1YmxpYzoK
KyAgICBEUlREZXZUb29sc0NhbGxBcmdzKGNvbnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdl
RGF0YSYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgICAgICsrbV9j
YWxsc0NvdW50OworCisgICAgICAgIC8vIFRoZSBzYW1lIGJlaGF2aW91ciBhcyB3ZSBoYXZlIGlu
IGNhc2Ugb2YgSVBDLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YS5hcmd1
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGEuYXJndW1lbnRzW2ld
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIG1fZGF0YS5hcmd1bWVudHNbaV0gPSBXZWJLaXQ6
OldlYlN0cmluZzo6ZnJvbVVURjgoIiIpOworICAgICAgICB9CisgICAgfQorCisgICAgRFJURGV2
VG9vbHNDYWxsQXJncyhjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzJiBhcmdzKQorICAgICAgICA6
IG1fZGF0YShhcmdzLm1fZGF0YSkKKyAgICB7CisgICAgICAgICsrbV9jYWxsc0NvdW50OworICAg
IH0KKworICAgIH5EUlREZXZUb29sc0NhbGxBcmdzKCkKKyAgICB7CisgICAgICAgIC0tbV9jYWxs
c0NvdW50OworICAgICAgICBBU1NFUlQobV9jYWxsc0NvdW50ID49IDApOworICAgIH0KKworICAg
IHN0YXRpYyBpbnQgY2FsbHNDb3VudCgpIHsgcmV0dXJuIG1fY2FsbHNDb3VudDsgfQorCisgICAg
V2ViS2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhIG1fZGF0YTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgaW50IG1fY2FsbHNDb3VudDsKK307CisKKyNlbmRpZiAvLyBEUlREZXZUb29sc0NhbGxB
cmdzX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RS
VERldlRvb2xzQ2xpZW50LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVERldlRvb2xzQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZWY5NjViCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCisKKyNpbmNsdWRlICJE
UlREZXZUb29sc0FnZW50LmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxsQXJncy5oIgorCisj
aW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2Vi
RGV2VG9vbHNGcm9udGVuZC5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJGcmFtZS5oIgorI2luY2x1
ZGUgInB1YmxpYy9XZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViU3RyaW5n
LmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvc3VwcG9y
dC93ZWJraXRfc3VwcG9ydC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitEUlREZXZU
b29sc0NsaWVudDo6RFJURGV2VG9vbHNDbGllbnQoRFJURGV2VG9vbHNBZ2VudCogYWdlbnQsIFdl
YlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX2NhbGxNZXRob2RGYWN0b3J5KHRoaXMpCisgICAgLCBt
X2RydERldlRvb2xzQWdlbnQoYWdlbnQpCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKK3sKKyAg
ICBtX3dlYkRldlRvb2xzRnJvbnRlbmQuc2V0KFdlYkRldlRvb2xzRnJvbnRlbmQ6OmNyZWF0ZSht
X3dlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJlbi1VUyIpKSk7CisgICAg
bV9kcnREZXZUb29sc0FnZW50LT5hdHRhY2godGhpcyk7Cit9CisKK0RSVERldlRvb2xzQ2xpZW50
Ojp+RFJURGV2VG9vbHNDbGllbnQoKQoreworICAgIC8vIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQg
dGhlIHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQgYXQgZGV0YWNoIHN0ZXAgb2YKKyAgICAvLyBtX2Ry
dERldlRvb2xzQWdlbnQgYW5kIHdlIHNob3VsZCBjbGVhbiBwZW5kaW5nIHJlcXVlc3RzIGEgYml0
IGVhcmxpZXIuCisgICAgbV9jYWxsTWV0aG9kRmFjdG9yeS5SZXZva2VBbGwoKTsKKyAgICBpZiAo
bV9kcnREZXZUb29sc0FnZW50KQorICAgICAgICBtX2RydERldlRvb2xzQWdlbnQtPmRldGFjaCh0
aGlzKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VUb0FnZW50KGNv
bnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCit7CisgICAgaWYgKG1fZHJ0RGV2VG9v
bHNBZ2VudCkKKyAgICAgICAgbV9kcnREZXZUb29sc0FnZW50LT5hc3luY0NhbGwoRFJURGV2VG9v
bHNDYWxsQXJncyhkYXRhKSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OnNlbmREZWJ1
Z2dlckNvbW1hbmRUb0FnZW50KGNvbnN0IFdlYlN0cmluZyYgY29tbWFuZCkKK3sKKyAgICBXZWJE
ZXZUb29sc0FnZW50OjpleGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbW1hbmQsIDEpOworfQorCit2
b2lkIERSVERldlRvb2xzQ2xpZW50OjphY3RpdmF0ZVdpbmRvdygpCit7CisgICAgLy8gTm90IGlt
cGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRv
b2xzQ2xpZW50OjpjbG9zZVdpbmRvdygpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRvb2xzQ2xpZW50Ojpkb2Nr
V2luZG93KCkKK3sKKyAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OnVuZG9ja1dpbmRvdygpCit7Cisg
ICAgLy8gTm90IGltcGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIERSVERldlRvb2xzQ2xpZW50Ojphc3luY0NhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJn
cyYgYXJncykKK3sKKyAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdFRhc2tGcm9tSGVyZSgKKyAgICAg
ICAgbV9jYWxsTWV0aG9kRmFjdG9yeS5OZXdSdW5uYWJsZU1ldGhvZCgmRFJURGV2VG9vbHNDbGll
bnQ6OmNhbGwsIGFyZ3MpKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6Y2FsbChjb25z
dCBEUlREZXZUb29sc0NhbGxBcmdzJiBhcmdzKQoreworICAgIG1fd2ViRGV2VG9vbHNGcm9udGVu
ZC0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUFnZW50KGFyZ3MubV9kYXRhKTsKKyAgICBpZiAoRFJURGV2
VG9vbHNDYWxsQXJnczo6Y2FsbHNDb3VudCgpID09IDEpCisgICAgICAgIGFsbE1lc3NhZ2VzUHJv
Y2Vzc2VkKCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OmFsbE1lc3NhZ2VzUHJvY2Vz
c2VkKCkKK3sKKyAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KAorICAg
ICAgICBXZWJLaXQ6OldlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KAorICAgICAg
ICAgICAgImlmICh3aW5kb3cuV2ViSW5zcGVjdG9yICYmIFdlYkluc3BlY3Rvci5xdWV1ZXNBcmVF
bXB0eSkgV2ViSW5zcGVjdG9yLnF1ZXVlc0FyZUVtcHR5KCk7IikpKTsKK30KZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50Lmgg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwODY0NGIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0Ns
aWVudC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERSVERldlRvb2xzQ2xpZW50X2gKKyNkZWZp
bmUgRFJURGV2VG9vbHNDbGllbnRfaAorCisjaW5jbHVkZSAiYmFzZS90YXNrLmgiIC8vIEZJWE1F
OiByZW1vdmUgdGhpcworI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50
LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRGV2VG9vbHNGcm9udGVuZDsKK3N0
cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2Vi
VmlldzsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERSVERldlRvb2xzQ2FsbEFy
Z3M7CitjbGFzcyBEUlREZXZUb29sc0FnZW50OworCitjbGFzcyBEUlREZXZUb29sc0NsaWVudCA6
IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBEUlREZXZUb29s
c0NsaWVudChEUlREZXZUb29sc0FnZW50KiwgV2ViS2l0OjpXZWJWaWV3Kik7CisgICAgdmlydHVh
bCB+RFJURGV2VG9vbHNDbGllbnQoKTsKKworICAgIC8vIFdlYkRldlRvb2xzRnJvbnRlbmRDbGll
bnQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0FnZW50KGNv
bnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgY29tbWFu
ZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9ja1dpbmRvdygpOworICAgIHZp
cnR1YWwgdm9pZCB1bmRvY2tXaW5kb3coKTsKKworICAgIHZvaWQgYXN5bmNDYWxsKGNvbnN0IERS
VERldlRvb2xzQ2FsbEFyZ3MmKTsKKworICAgIHZvaWQgYWxsTWVzc2FnZXNQcm9jZXNzZWQoKTsK
KworIHByaXZhdGU6CisgICAgdm9pZCBjYWxsKGNvbnN0IERSVERldlRvb2xzQ2FsbEFyZ3MmKTsK
KworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeTxEUlREZXZUb29sc0NsaWVudD4gbV9j
YWxsTWV0aG9kRmFjdG9yeTsKKyAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBE
UlREZXZUb29sc0FnZW50KiBtX2RydERldlRvb2xzQWdlbnQ7CisgICAgV1RGOjpPd25QdHI8V2Vi
S2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kPiBtX3dlYkRldlRvb2xzRnJvbnRlbmQ7Cit9OworCisj
ZW5kaWYgLy8gRFJURGV2VG9vbHNDbGllbnRfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwCmluZGV4IGZkN2JhMmQuLjVhODBlMGQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3Bw
CisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNw
cApAQCAtNTgsNyArNTgsNyBAQAogCiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlICJwdWJsaWMv
d2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmgiCi0jZW5kaWYKKyNlbmRpZiAvLyBPUyhXSU5ET1dT
KQogCiAvLyBGSVhNRTogbGF5b3V0IGJlZm9yZSBlYWNoIGV2ZW50PwogCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAKaW5kZXggOWJhNjQyMS4uY2I4NjkzZAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKICNpbmNsdWRlICJU
ZXN0U2hlbGwuaCIKICNpbmNsdWRlICJXZWJWaWV3SG9zdC5oIgogI2luY2x1ZGUgImJhc2Uvc3Ry
aW5nX3V0aWwuaCIKQEAgLTk1LDYgKzk2LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAgYmluZE1ldGhvZCgib2JqQ0lk
ZW50aXR5SXNFcXVhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JqQ0lkZW50aXR5SXNFcXVh
bCk7CiAgICAgYmluZE1ldGhvZCgic2V0QWx3YXlzQWNjZXB0Q29va2llcyIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyk7CiAgICAgYmluZE1ldGhvZCgic2hv
d1dlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3Rvcik7
CisgICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsKICAgICBiaW5kTWV0aG9kKCJzZXRXaW5kb3dJc0tleSIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkpOwogICAgIGJpbmRNZXRob2Qo
InNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTsKICAgICBiaW5kTWV0aG9kKCJzZXRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKTsKQEAgLTU1NSw2ICs1NTcsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICBtX3NoZWxsLT5jbG9zZURldlRvb2xzKCk7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lz
S2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKQEAgLTEyNDUsNyArMTI1Myw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRp
bWVsaW5lUHJvZmlsaW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVu
dHNbMF0uaXNCb29sKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGNh
bGwgVGVzdFNoZWxsRGV2VG9vbHNBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKCku
CisgICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNBZ2VudCgpLT5zZXRUaW1lbGluZVByb2ZpbGluZ0Vu
YWJsZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTI1Myw3ICsxMjYxLDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW4KICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc0ludDMyKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IFNob3VsZCBjYWxs
IFRlc3RTaGVsbERldlRvb2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoKS4KKyAgICBt
X3NoZWxsLT5kcnREZXZUb29sc0FnZW50KCktPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYXJndW1l
bnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
LmgKaW5kZXggMjI3NDFkNS4uNWQ2NTcyNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0xMjks
NiArMTI5LDcgQEAgcHVibGljOgogCiAgICAgLy8gU2hvd3MgRGV2VG9vbHMgd2luZG93LgogICAg
IHZvaWQgc2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CiAKICAgICAvLyBHaXZlcyBmb2N1cyB0byB0aGUgd2luZG93LgogICAgIHZv
aWQgc2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAK
aW5kZXggNTJmMWU3ZC4uZjIzYjg4NyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAKKyNpbmNsdWRlICJEUlREZXZUb29s
c0FnZW50LmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDbGllbnQuaCIKICNpbmNsdWRlICJMYXlv
dXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlZpZXdIb3N0LmgiCiAjaW5jbHVkZSAi
YmFzZS9tZDUuaCIgLy8gRklYTUU6IFdyYXAgYnkgd2Via2l0X3N1cHBvcnQuCkBAIC04MSw2ICs4
Myw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJvb2wgdGVzdFNoZWxsTW9kZSkKICAgICAsIG1f
Zm9jdXNlZFdpZGdldCgwKQogICAgICwgbV90ZXN0U2hlbGxNb2RlKHRlc3RTaGVsbE1vZGUpCiAg
ICAgLCBtX2FsbG93RXh0ZXJuYWxQYWdlcyhmYWxzZSkKKyAgICAsIG1fZGV2VG9vbHMoMCkKIHsK
ICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdlb2xvY2F0aW9uKHRydWUpOwogICAgIG1f
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuc2V0KG5ldyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcih0
aGlzKSk7CkBAIC05NywxMiArMTAwLDE3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJvb2wgdGVz
dFNoZWxsTW9kZSkKICAgICAvLyB0aW1lZC1vdXQgRFJUIHByb2Nlc3Mgd2FzIGNyYXNoZWQuCiAg
ICAgbV90aW1lb3V0ID0gMzAgKiAxMDAwOwogCisgICAgbV9kcnREZXZUb29sc0FnZW50LnNldChu
ZXcgRFJURGV2VG9vbHNBZ2VudCk7CiAgICAgbV93ZWJWaWV3SG9zdCA9IGNyZWF0ZVdlYlZpZXco
KTsKICAgICBtX3dlYlZpZXcgPSBtX3dlYlZpZXdIb3N0LT53ZWJWaWV3KCk7CisgICAgbV9kcnRE
ZXZUb29sc0FnZW50LT5zZXRXZWJWaWV3KG1fd2ViVmlldyk7CiB9CiAKIFRlc3RTaGVsbDo6flRl
c3RTaGVsbCgpCiB7CisgICAgLy8gTm90ZTogRGV2VG9vbHMgYXJlIGNsb3NlZCB0b2dldGhlciB3
aXRoIGFsbCB0aGUgb3RoZXIgd2luZG93cyBpbiB0aGUKKyAgICAvLyB3aW5kb3dzIGxpc3QuCisK
ICAgICBsb2FkVVJMKEdVUkwoImFib3V0OmJsYW5rIikpOwogICAgIC8vIENhbGwgR0MgdHdpY2Ug
dG8gY2xlYW4gdXAgZ2FyYmFnZS4KICAgICBjYWxsSlNHQygpOwpAQCAtMTEyLDYgKzEyMCwzNCBA
QCBUZXN0U2hlbGw6On5UZXN0U2hlbGwoKQogICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKIH0KIAor
dm9pZCBUZXN0U2hlbGw6OmNyZWF0ZURSVERldlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQq
IGFnZW50KQoreworICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQuc2V0KG5ldyBEUlREZXZUb29sc0Ns
aWVudChhZ2VudCwgd2ViVmlldygpKSk7Cit9CisKK3ZvaWQgVGVzdFNoZWxsOjpzaG93RGV2VG9v
bHMoKQoreworICAgIGlmICghbV9kZXZUb29scykgeworICAgICAgICBXZWJVUkwgdXJsID0gd2Vi
a2l0X3N1cHBvcnQ6OkdldERldlRvb2xzUGF0aEFzVVJMKCk7CisgICAgICAgIGlmICghdXJsLmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBtX2RldlRvb2xzID0gY3JlYXRlTmV3V2luZG93KHVybCk7
CisgICAgICAgIEFTU0VSVChtX2RldlRvb2xzKTsKKyAgICAgICAgY3JlYXRlRFJURGV2VG9vbHND
bGllbnQobV9kcnREZXZUb29sc0FnZW50LmdldCgpKTsKKyAgICB9CisgICAgbV9kZXZUb29scy0+
c2hvdyhXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lOZXdXaW5kb3cpOworfQorCit2b2lkIFRl
c3RTaGVsbDo6Y2xvc2VEZXZUb29scygpCit7CisgICAgaWYgKG1fZGV2VG9vbHMpIHsKKyAgICAg
ICAgY2xvc2VXaW5kb3cobV9kZXZUb29scyk7CisgICAgICAgIG1fZGV2VG9vbHMgPSAwOworICAg
IH0KK30KKwogdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmll
dykKIHsKICAgICAvLyBNYXRjaCB0aGUgc2V0dGluZ3MgdXNlZCBieSBNYWMgRHVtcFJlbmRlclRy
ZWUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgpAQCAtMjA2LDYgKzI0Miw5IEBAIHZvaWQgVGVzdFNo
ZWxsOjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMpCiAgICAgICAgIHx8IHRl
c3RVcmwuZmluZCgibG9hZGluZ1xcIikgIT0gc3RyaW5nOjpucG9zKQogICAgICAgICBtX2xheW91
dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOwog
CisgICAgaWYgKGluc3BlY3RvclRlc3RNb2RlKQorICAgICAgICBzaG93RGV2VG9vbHMoKTsKKwog
ICAgIG1fcHJpbnRlci0+aGFuZGxlVGVzdEhlYWRlcih0ZXN0VXJsLmNfc3RyKCkpOwogICAgIGxv
YWRVUkwobV9wYXJhbXMudGVzdFVybCk7CiAKQEAgLTU4Niw3ICs2MjUsNyBAQCBXZWJWaWV3SG9z
dCogVGVzdFNoZWxsOjpjcmVhdGVXZWJWaWV3KCkKIFdlYlZpZXdIb3N0KiBUZXN0U2hlbGw6OmNy
ZWF0ZU5ld1dpbmRvdyhjb25zdCBXZWJVUkwmIHVybCkKIHsKICAgICBXZWJWaWV3SG9zdCogaG9z
dCA9IG5ldyBXZWJWaWV3SG9zdCh0aGlzKTsKLSAgICBXZWJWaWV3KiB2aWV3ID0gV2ViVmlldzo6
Y3JlYXRlKGhvc3QsIDApOworICAgIFdlYlZpZXcqIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoaG9z
dCwgbV9kcnREZXZUb29sc0FnZW50LmdldCgpKTsKICAgICBob3N0LT5zZXRXZWJXaWRnZXQodmll
dyk7CiAgICAgcmVzZXRXZWJTZXR0aW5ncygqdmlldyk7CiAgICAgdmlldy0+aW5pdGlhbGl6ZU1h
aW5GcmFtZShob3N0KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmgKaW5kZXggMjM5NzI0Ni4uZTE5MzEzZgotLS0gYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMjgsNiArMjgsOSBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCisjaWZuZGVmIFRlc3RTaGVsbF9oCisjZGVmaW5lIFRlc3RTaGVsbF9oCisK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50U2Vu
ZGVyLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKQEAgLTQ0LDYgKzQ3LDcg
QEAKIC8vIHZhcmlvdXMgb2JqZWN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgY3JlYXRlZCBpbiBv
bmUgRFJUIHByb2Nlc3MuCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRGV2VG9vbHNB
Z2VudENsaWVudDsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOwogY2xhc3MgV2ViUHJlZmVyZW5jZXM7CkBAIC01NCw2ICs1OCwxMCBAQCBuYW1lc3BhY2Ug
c2tpYSB7CiBjbGFzcyBQbGF0Zm9ybUNhbnZhczsKIH0KIAorY2xhc3MgRFJURGV2VG9vbHNBZ2Vu
dDsKK2NsYXNzIERSVERldlRvb2xzQ2FsbEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0NsaWVudDsK
Kwogc3RydWN0IFRlc3RQYXJhbXMgewogICAgIGJvb2wgZHVtcFRyZWU7CiAgICAgYm9vbCBkdW1w
UGl4ZWxzOwpAQCAtNjksMTAgKzc3LDIyIEBAIHN0cnVjdCBUZXN0UGFyYW1zIHsKICAgICAgICAg
LCBwcmludFNlcGFyYXRvcnMoZmFsc2UpIHt9CiB9OwogCitzdHJ1Y3QgVGVzdFNoZWxsV2Vha1Jl
ZmVyZW5jZSB7CisgICAgVGVzdFNoZWxsV2Vha1JlZmVyZW5jZSgpCisgICAgICAgIDogbV90ZXN0
U2hlbGwoMCkKKyAgICB7IH0KKworICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV90ZXN0U2hlbGwg
PSAwOyB9CisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV90ZXN0U2hlbGw7IH0K
KworICAgIFRlc3RTaGVsbCogbV90ZXN0U2hlbGw7Cit9OworCiBjbGFzcyBUZXN0U2hlbGwgewog
cHVibGljOgogICAgIFRlc3RTaGVsbChib29sIHRlc3RTaGVsbE1vZGUpOwogICAgIH5UZXN0U2hl
bGwoKTsKKwogICAgIC8vIFRoZSBtYWluIFdlYlZpZXcuCiAgICAgV2ViS2l0OjpXZWJWaWV3KiB3
ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CiAgICAgLy8gUmV0dXJucyB0aGUg
aG9zdCBmb3IgdGhlIG1haW4gV2ViVmlldy4KQEAgLTEyNiwxMSArMTQ2LDE4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpOwogICAgIGludCB3aW5kb3dDb3VudCgp
OwogICAgIHN0YXRpYyB2b2lkIHJlc2l6ZVdpbmRvd0ZvclRlc3QoV2ViVmlld0hvc3QqLCBjb25z
dCBXZWJLaXQ6OldlYlVSTCYpOwotICAgIHZvaWQgc2hvd0RldlRvb2xzKCkge30gLy8gRklYTUU6
IGltZXBsZW1lbnQgdGhpcy4KKworICAgIHZvaWQgc2hvd0RldlRvb2xzKCk7CisgICAgdm9pZCBj
bG9zZURldlRvb2xzKCk7CisKKyAgICBEUlREZXZUb29sc0FnZW50KiBkcnREZXZUb29sc0FnZW50
KCkgeyByZXR1cm4gbV9kcnREZXZUb29sc0FnZW50LmdldCgpOyB9CisgICAgRFJURGV2VG9vbHND
bGllbnQqIGRydERldlRvb2xzQ2xpZW50KCkgeyByZXR1cm4gbV9kcnREZXZUb29sc0NsaWVudC5n
ZXQoKTsgfQogCiAgICAgc3RhdGljIGNvbnN0IGludCB2aXJ0dWFsV2luZG93Qm9yZGVyID0gMzsK
IAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZURSVERldlRvb2xzQ2xpZW50KERSVERldlRvb2xz
QWdlbnQqKTsKKwogICAgIHN0YXRpYyB2b2lkIHJlc2V0V2ViU2V0dGluZ3MoV2ViS2l0OjpXZWJW
aWV3Jik7CiAgICAgdm9pZCBkdW1wKCk7CiAgICAgc3RkOjpzdHJpbmcgZHVtcEFsbEJhY2tGb3J3
YXJkTGlzdHMoKTsKQEAgLTE0Myw2ICsxNzAsOSBAQCBwcml2YXRlOgogICAgIFdlYktpdDo6V2Vi
V2lkZ2V0KiBtX2ZvY3VzZWRXaWRnZXQ7CiAgICAgYm9vbCBtX3Rlc3RTaGVsbE1vZGU7CiAgICAg
V2ViVmlld0hvc3QqIG1fd2ViVmlld0hvc3Q7CisgICAgV2ViVmlld0hvc3QqIG1fZGV2VG9vbHM7
CisgICAgT3duUHRyPERSVERldlRvb2xzQWdlbnQ+IG1fZHJ0RGV2VG9vbHNBZ2VudDsKKyAgICBP
d25QdHI8RFJURGV2VG9vbHNDbGllbnQ+IG1fZHJ0RGV2VG9vbHNDbGllbnQ7CiAgICAgT3duUHRy
PEFjY2Vzc2liaWxpdHlDb250cm9sbGVyPiBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyOwogICAg
IE93blB0cjxFdmVudFNlbmRlcj4gbV9ldmVudFNlbmRlcjsKICAgICBPd25QdHI8TGF5b3V0VGVz
dENvbnRyb2xsZXI+IG1fbGF5b3V0VGVzdENvbnRyb2xsZXI7CkBAIC0xNjYsMyArMTk2LDUgQEAg
cHJpdmF0ZToKIH07CiAKIHZvaWQgcGxhdGZvcm1Jbml0KCk7CisKKyNlbmRpZiAvLyBUZXN0U2hl
bGxfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29u
ZmlnLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaAppbmRl
eCA2MDI5NTMyLi43ZGZkYTE4Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL2NvbmZpZy5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2Nv
bmZpZy5oCkBAIC00NCw4ICs0NCwxMCBAQAogCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAK
LS8vIEpTX0VYUE9SVERBVEEgaXMgbmVlZGVkIHRvIGlubHVjZGUgd3RmL1dURlN0cmluZy5oLgog
I2lmIE9TKFdJTkRPV1MpICYmICFDT01QSUxFUihHQ0MpCisvLyBBbGxvdyAndGhpcycgdG8gYmUg
dXNlZCBpbiBiYXNlIG1lbWJlciBpbml0aWFsaXplciBsaXN0LgorI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGUgOiA0MzU1KQorLy8gSlNfRVhQT1JUREFUQSBpcyBuZWVkZWQgdG8gaW5sdWNkZSB3dGYv
V1RGU3RyaW5nLmguCiAjZGVmaW5lIEpTX0VYUE9SVERBVEEgX19kZWNsc3BlYyhkbGxpbXBvcnQp
CiAjZWxzZQogI2RlZmluZSBKU19FWFBPUlREQVRBCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60497</attachid>
            <date>2010-07-04 23:56:55 -0700</date>
            <delta_ts>2010-07-06 01:18:20 -0700</delta_ts>
            <desc>patch - snapshot of current state (removed unnecessary struct)</desc>
            <filename>devtools2.patch</filename>
            <type>text/plain</type>
            <size>36043</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDkxMGQyZDIuLjYxMTkzZGQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA3LTA0ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IFRhbXVyYSBLZW50LgorCisgICAgICAgIEJ1
ZyA0MDU1OCAtIFtEUlQvQ2hyb21pdW1dIFVwc3RyZWFtIFRlc3RTaGVsbERldlRvb2xzIGZvciBD
aHJvbWl1bSBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQwNTU4CisKKyAgICAgICAgVXBzdHJlYW0gRGV2VG9vbHMgZm9yIENocm9taXVtIERSVC4K
KworICAgICAgICAqIFdlYktpdC5neXA6CisKIDIwMTAtMDctMDMgIEVyaWsgQXJ2aWRzc29uICA8
YXJ2QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBlMmRhMWI0Li4wYzdmNTE5Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC02MjksNiArNjI5LDkg
QEAKICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKICAgICAgICAgICAgICAgICAgICAg
J2RlcGVuZGVuY2llcyc6IFsnTGF5b3V0VGVzdEhlbHBlciddLAogCisgICAgICAgICAgICAgICAg
ICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0JywgIyBmb3IgYSBoZWFkZXIgZ2VuZXJhdGVkIGJ5IGdy
aXQKKyAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ3Jlc291cmNl
X2luY2x1ZGVfZGlycyc6IFsnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0J10sCiAg
ICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAg
JzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL25ldC9uZXRfcmVzb3VyY2VzLnJjJywKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRl
eCA0ZmExNGEzLi5kMjNjYjA5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysr
IGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTAtMDctMDQgIFJv
bGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVGFtdXJhIEtlbnQuCisKKyAgICAgICAgQnVnIDQwNTU4IC0gW0RSVC9DaHJvbWl1
bV0gVXBzdHJlYW0gVGVzdFNoZWxsRGV2VG9vbHMgZm9yIENocm9taXVtIERSVAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA1NTgKKworICAgICAgICBV
cHN0cmVhbSBEZXZUb29scyBmb3IgQ2hyb21pdW0gRFJULgorICAgICAgICAob3JpZ2luYWwgQ2hy
b21pdW0gZmlsZXMgcmV2LiA1MTI4NykKKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmd5cGk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRp
bWVsaW5lUHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsLmNwcDoKKyAgICAgICAgKFRlc3RTaGVsbDo6VGVzdFNoZWxsKToKKyAgICAg
ICAgKFRlc3RTaGVsbDo6flRlc3RTaGVsbCk6CisgICAgICAgIChUZXN0U2hlbGw6OmNyZWF0ZURS
VERldlRvb2xzQ2xpZW50KToKKyAgICAgICAgKFRlc3RTaGVsbDo6c2hvd0RldlRvb2xzKToKKyAg
ICAgICAgKFRlc3RTaGVsbDo6Y2xvc2VEZXZUb29scyk6CisgICAgICAgIChUZXN0U2hlbGw6OnJ1
bkZpbGVUZXN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwu
aDoKKyAgICAgICAgKFRlc3RTaGVsbDo6d2ViRGV2VG9vbHNEUlRBZ2VudCk6CisgICAgICAgIChU
ZXN0U2hlbGw6OndlYkRldlRvb2xzRFJUQ2xpZW50KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmNwcDogQWRkZWQuCisgICAgICAgIChEUlREZXZU
b29sc0FnZW50OjpEUlREZXZUb29sc0FnZW50KToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6
OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpmb3Jj
ZVJlcGFpbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6cnVudGltZUZlYXR1cmVTdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHRTb3Vy
Y2UpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVy
U291cmNlKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmRlYnVnZ2VyU2NyaXB0U291cmNl
KToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmFzeW5jQ2FsbCk6CisgICAgICAgIChEUlRE
ZXZUb29sc0FnZW50OjpjYWxsKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OndlYkRldlRv
b2xzQWdlbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6YXR0YWNoKToKKyAgICAgICAg
KERSVERldlRvb2xzQWdlbnQ6OmRldGFjaCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpz
ZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6
ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpkaXNw
YXRjaE1lc3NhZ2VMb29wKToKKyAgICAgICAgKFdlYkRldlRvb2xzQWdlbnRDbGllbnQ6OnNlbmRN
ZXNzYWdlVG9Gcm9udGVuZE9uSU9UaHJlYWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVERldlRvb2xzQWdlbnQuaDogQWRkZWQuCisgICAgICAgIChEUlREZXZUb29sc0Fn
ZW50Ojp+RFJURGV2VG9vbHNBZ2VudCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpob3N0
SWRlbnRpZmllcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9v
bHNDYWxsQXJncy5jcHA6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVERldlRvb2xzQ2FsbEFyZ3MuaDogQWRkZWQuCisgICAgICAgIChEUlREZXZUb29sc0NhbGxB
cmdzOjpEUlREZXZUb29sc0NhbGxBcmdzKToKKyAgICAgICAgKERSVERldlRvb2xzQ2FsbEFyZ3M6
On5EUlREZXZUb29sc0NhbGxBcmdzKToKKyAgICAgICAgKERSVERldlRvb2xzQ2FsbEFyZ3M6OmNh
bGxzQ291bnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xz
Q2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6RFJURGV2VG9v
bHNDbGllbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6On5EUlREZXZUb29sc0NsaWVu
dCk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VUb0FnZW50KToKKyAg
ICAgICAgKERSVERldlRvb2xzQ2xpZW50OjpzZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudCk6Cisg
ICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6YWN0aXZhdGVXaW5kb3cpOgorICAgICAgICAoRFJU
RGV2VG9vbHNDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50
Ojpkb2NrV2luZG93KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50Ojp1bmRvY2tXaW5kb3cp
OgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmFzeW5jQ2FsbCk6CisgICAgICAgIChEUlRE
ZXZUb29sc0NsaWVudDo6Y2FsbCk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6YWxsTWVz
c2FnZXNQcm9jZXNzZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERl
dlRvb2xzQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L2NvbmZpZy5oOgorCiAyMDEwLTA3LTAzICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUBwYXJv
Z2EuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaSBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkKaW5kZXggNWZjOGRhYi4u
ZmQ1NzIwZgotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXBpCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkK
QEAgLTksNiArOSwxMiBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL0NwcEJvdW5kQ2xhc3MuaCcs
CiAgICAgICAgICAgICAnY2hyb21pdW0vQ3BwVmFyaWFudC5jcHAnLAogICAgICAgICAgICAgJ2No
cm9taXVtL0NwcFZhcmlhbnQuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNB
Z2VudC5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuaCcsCisg
ICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5jcHAnLAorICAgICAgICAg
ICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuaCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vRFJURGV2VG9vbHNDbGllbnQuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZU
b29sc0NsaWVudC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9EdW1wUmVuZGVyVHJlZS5jcHAn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vRXZlbnRTZW5kZXIuaCcsCkBAIC00NCw1ICs1MCw1IEBACiAgICAgICAgICAgICAg
ICAgXSwKICAgICAgICAgICAgIH1dLAogICAgICAgICBdLAotICAgIH0KKyAgICB9LAogfQpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNB
Z2VudC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29s
c0FnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmY3N2EwCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJU
RGV2VG9vbHNBZ2VudC5jcHAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgorCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxs
QXJncy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCisKKyNpbmNsdWRlICJwdWJs
aWMvV2ViQ1N0cmluZy5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0FnZW50LmgiCisj
aW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzTWVzc2FnZURhdGEuaCIKKyNpbmNsdWRlICJwdWJs
aWMvV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNpbmNsdWRlICJ3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCitEUlREZXZUb29sc0FnZW50OjpEUlREZXZUb29sc0FnZW50KCkKKyAgICA6IG1fY2FsbE1l
dGhvZEZhY3RvcnkodGhpcykKKyAgICAsIG1fZHJ0RGV2VG9vbHNDbGllbnQoMCkKKyAgICAsIG1f
d2ViVmlldygwKQoreworICAgIHN0YXRpYyBpbnQgZGV2VG9vbHNBZ2VudENvdW50ZXIgPSAwOwor
CisgICAgbV9yb3V0aW5nSUQgPSArK2RldlRvb2xzQWdlbnRDb3VudGVyOworICAgIGlmIChtX3Jv
dXRpbmdJRCA9PSAxKQorICAgICAgICBXZWJEZXZUb29sc0FnZW50OjpzZXRNZXNzYWdlTG9vcERp
c3BhdGNoSGFuZGxlcigmRFJURGV2VG9vbHNBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCk7Cit9
CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6c2V0V2ViVmlldyhXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIG1fd2ViVmlldyA9IHdlYlZpZXc7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEp
Cit7CisgICAgaWYgKG1fZHJ0RGV2VG9vbHNDbGllbnQpCisgICAgICAgICBtX2RydERldlRvb2xz
Q2xpZW50LT5hc3luY0NhbGwoRFJURGV2VG9vbHNDYWxsQXJncyhkYXRhKSk7Cit9CisKK3ZvaWQg
RFJURGV2VG9vbHNBZ2VudDo6Zm9yY2VSZXBhaW50KCkKK3sKK30KKwordm9pZCBEUlREZXZUb29s
c0FnZW50OjpydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgZmVhdHVyZSwgYm9vbCBlbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhp
cy4KK30KKworV2ViQ1N0cmluZyBEUlREZXZUb29sc0FnZW50OjppbmplY3RlZFNjcmlwdFNvdXJj
ZSgpCit7CisgICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpHZXREZXZUb29sc0luamVjdGVkU2Ny
aXB0U291cmNlKCk7Cit9CisKK1dlYkNTdHJpbmcgRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRT
Y3JpcHREaXNwYXRjaGVyU291cmNlKCkKK3sKKyAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6Okdl
dERldlRvb2xzSW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCk7Cit9CisKK1dlYkNTdHJp
bmcgRFJURGV2VG9vbHNBZ2VudDo6ZGVidWdnZXJTY3JpcHRTb3VyY2UoKQoreworICAgIHJldHVy
biB3ZWJraXRfc3VwcG9ydDo6R2V0RGV2VG9vbHNEZWJ1Z2dlclNjcmlwdFNvdXJjZSgpOworfQor
Cit2b2lkIERSVERldlRvb2xzQWdlbnQ6OmFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxB
cmdzICZhcmdzKQoreworICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0VGFza0Zyb21IZXJlKAorICAg
ICAgICBtX2NhbGxNZXRob2RGYWN0b3J5Lk5ld1J1bm5hYmxlTWV0aG9kKCZEUlREZXZUb29sc0Fn
ZW50OjpjYWxsLCBhcmdzKSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6Y2FsbChjb25z
dCBEUlREZXZUb29sc0NhbGxBcmdzICZhcmdzKQoreworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFn
ZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmIChhZ2VudCkKKyAgICAgICAgYWdlbnQt
PmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChhcmdzLm1fZGF0YSk7CisgICAgaWYgKERSVERl
dlRvb2xzQ2FsbEFyZ3M6OmNhbGxzQ291bnQoKSA9PSAxICYmIG1fZHJ0RGV2VG9vbHNDbGllbnQp
CisgICAgICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQtPmFsbE1lc3NhZ2VzUHJvY2Vzc2VkKCk7Cit9
CisKK1dlYkRldlRvb2xzQWdlbnQqIERSVERldlRvb2xzQWdlbnQ6OndlYkRldlRvb2xzQWdlbnQo
KQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
bV93ZWJWaWV3LT5kZXZUb29sc0FnZW50KCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6
YXR0YWNoKERSVERldlRvb2xzQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2RydERl
dlRvb2xzQ2xpZW50KTsKKyAgICBtX2RydERldlRvb2xzQ2xpZW50ID0gY2xpZW50OworICAgIFdl
YkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmIChhZ2Vu
dCkKKyAgICAgICAgYWdlbnQtPmF0dGFjaCgpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6
OmRldGFjaChEUlREZXZUb29sc0NsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVChtX2RydERl
dlRvb2xzQ2xpZW50KTsKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xz
QWdlbnQoKTsKKyAgICBpZiAoYWdlbnQpCisgICAgICAgIGFnZW50LT5kZXRhY2goKTsKKyAgICBt
X2RydERldlRvb2xzQ2xpZW50ID0gMDsKK30KKworYm9vbCBEUlREZXZUb29sc0FnZW50OjpzZXRU
aW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFdlYkRldlRvb2xz
QWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmICghYWdlbnQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhZ2VudC0+c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVk
KGVuYWJsZWQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERSVERldlRvb2xzQWdlbnQ6
OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBz
Y3JpcHQpCit7CisgICAgV2ViRGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50
KCk7CisgICAgaWYgKCFhZ2VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFnZW50LT5l
dmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNhbGxJRCwgV2ViU3RyaW5nOjpmcm9tVVRGOChzY3JpcHQp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gc3RhdGljIG1ldGhvZAordm9pZCBEUlREZXZU
b29sc0FnZW50OjpkaXNwYXRjaE1lc3NhZ2VMb29wKCkKK3sKKyAgICB3ZWJraXRfc3VwcG9ydDo6
RGlzcGF0Y2hNZXNzYWdlTG9vcCgpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjM3ZmMxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgKQEAgLTAsMCArMSw4NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRFJURGV2VG9vbHNBZ2VudF9oCisjZGVmaW5lIERSVERldlRvb2xzQWdlbnRfaAor
CisjaW5jbHVkZSAiYmFzZS90YXNrLmgiIC8vIEZJWE1FOiByZW1vdmUgdGhpcworI2luY2x1ZGUg
InB1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3RyaW5nOworY2xhc3Mg
V2ViRGV2VG9vbHNBZ2VudDsKK2NsYXNzIFdlYlZpZXc7CitzdHJ1Y3QgV2ViRGV2VG9vbHNNZXNz
YWdlRGF0YTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERSVERldlRvb2xzQ2Fs
bEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0NsaWVudDsKKworY2xhc3MgRFJURGV2VG9vbHNBZ2Vu
dCA6IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRDbGllbnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgLCBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIERSVERldlRvb2xz
QWdlbnQoKTsKKyAgICB2aXJ0dWFsIH5EUlREZXZUb29sc0FnZW50KCkge30KKworICAgIHZvaWQg
c2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqKTsKKworICAgIC8vIFdlYkRldlRvb2xzQWdlbnRD
bGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmKTsKKyAgICB2aXJ0dWFs
IGludCBob3N0SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcm91dGluZ0lEOyB9CisgICAgdmlydHVh
bCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBydW50aW1lRmVhdHVyZVN0
YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmVhdHVyZSwgYm9vbCBlbmFibGVk
KTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViQ1N0cmluZyBpbmplY3RlZFNjcmlwdFNvdXJjZSgp
OworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGluamVjdGVkU2NyaXB0RGlzcGF0Y2hl
clNvdXJjZSgpOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGRlYnVnZ2VyU2NyaXB0
U291cmNlKCk7CisKKyAgICB2b2lkIGFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdz
Jik7CisKKyAgICB2b2lkIGF0dGFjaChEUlREZXZUb29sc0NsaWVudCopOworICAgIHZvaWQgZGV0
YWNoKERSVERldlRvb2xzQ2xpZW50Kik7CisKKyAgICBib29sIGV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHQpOworICAgIGJvb2wgc2V0
VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyYpOworICAgIHN0YXRpYyB2b2lkIGRp
c3BhdGNoTWVzc2FnZUxvb3AoKTsKKyAgICBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQqIHdlYkRl
dlRvb2xzQWdlbnQoKTsKKworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeTxEUlREZXZU
b29sc0FnZW50PiBtX2NhbGxNZXRob2RGYWN0b3J5OworICAgIERSVERldlRvb2xzQ2xpZW50KiBt
X2RydERldlRvb2xzQ2xpZW50OworICAgIGludCBtX3JvdXRpbmdJRDsKKyAgICBXZWJLaXQ6Oldl
YkRldlRvb2xzQWdlbnQqIG1fd2ViRGV2VG9vbHNBZ2VudDsKKyAgICBXZWJLaXQ6OldlYlZpZXcq
IG1fd2ViVmlldzsKK307CisKKyNlbmRpZiAvLyBEUlREZXZUb29sc0FnZW50X2gKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFy
Z3MuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHND
YWxsQXJncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFjZDZmNwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RS
VERldlRvb2xzQ2FsbEFyZ3MuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxsQXJncy5oIgorCisvLyBzdGF0aWMKK2ludCBEUlRE
ZXZUb29sc0NhbGxBcmdzOjptX2NhbGxzQ291bnQgPSAwOworCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmggYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhM2Q0OAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFy
Z3MuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEUlREZXZUb29sc0NhbGxBcmdzX2gKKyNkZWZp
bmUgRFJURGV2VG9vbHNDYWxsQXJnc19oCisKKyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNN
ZXNzYWdlRGF0YS5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdzIHsKK3B1YmxpYzoK
KyAgICBEUlREZXZUb29sc0NhbGxBcmdzKGNvbnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdl
RGF0YSYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgICAgICsrbV9j
YWxsc0NvdW50OworCisgICAgICAgIC8vIFRoZSBzYW1lIGJlaGF2aW91ciBhcyB3ZSBoYXZlIGlu
IGNhc2Ugb2YgSVBDLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGF0YS5hcmd1
bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGEuYXJndW1lbnRzW2ld
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIG1fZGF0YS5hcmd1bWVudHNbaV0gPSBXZWJLaXQ6
OldlYlN0cmluZzo6ZnJvbVVURjgoIiIpOworICAgICAgICB9CisgICAgfQorCisgICAgRFJURGV2
VG9vbHNDYWxsQXJncyhjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzJiBhcmdzKQorICAgICAgICA6
IG1fZGF0YShhcmdzLm1fZGF0YSkKKyAgICB7CisgICAgICAgICsrbV9jYWxsc0NvdW50OworICAg
IH0KKworICAgIH5EUlREZXZUb29sc0NhbGxBcmdzKCkKKyAgICB7CisgICAgICAgIC0tbV9jYWxs
c0NvdW50OworICAgICAgICBBU1NFUlQobV9jYWxsc0NvdW50ID49IDApOworICAgIH0KKworICAg
IHN0YXRpYyBpbnQgY2FsbHNDb3VudCgpIHsgcmV0dXJuIG1fY2FsbHNDb3VudDsgfQorCisgICAg
V2ViS2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhIG1fZGF0YTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgaW50IG1fY2FsbHNDb3VudDsKK307CisKKyNlbmRpZiAvLyBEUlREZXZUb29sc0NhbGxB
cmdzX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RS
VERldlRvb2xzQ2xpZW50LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVERldlRvb2xzQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZWY5NjViCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCisKKyNpbmNsdWRlICJE
UlREZXZUb29sc0FnZW50LmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxsQXJncy5oIgorCisj
aW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2Vi
RGV2VG9vbHNGcm9udGVuZC5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJGcmFtZS5oIgorI2luY2x1
ZGUgInB1YmxpYy9XZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViU3RyaW5n
LmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvc3VwcG9y
dC93ZWJraXRfc3VwcG9ydC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitEUlREZXZU
b29sc0NsaWVudDo6RFJURGV2VG9vbHNDbGllbnQoRFJURGV2VG9vbHNBZ2VudCogYWdlbnQsIFdl
YlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX2NhbGxNZXRob2RGYWN0b3J5KHRoaXMpCisgICAgLCBt
X2RydERldlRvb2xzQWdlbnQoYWdlbnQpCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKK3sKKyAg
ICBtX3dlYkRldlRvb2xzRnJvbnRlbmQuc2V0KFdlYkRldlRvb2xzRnJvbnRlbmQ6OmNyZWF0ZSht
X3dlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJlbi1VUyIpKSk7CisgICAg
bV9kcnREZXZUb29sc0FnZW50LT5hdHRhY2godGhpcyk7Cit9CisKK0RSVERldlRvb2xzQ2xpZW50
Ojp+RFJURGV2VG9vbHNDbGllbnQoKQoreworICAgIC8vIFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQg
dGhlIHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQgYXQgZGV0YWNoIHN0ZXAgb2YKKyAgICAvLyBtX2Ry
dERldlRvb2xzQWdlbnQgYW5kIHdlIHNob3VsZCBjbGVhbiBwZW5kaW5nIHJlcXVlc3RzIGEgYml0
IGVhcmxpZXIuCisgICAgbV9jYWxsTWV0aG9kRmFjdG9yeS5SZXZva2VBbGwoKTsKKyAgICBpZiAo
bV9kcnREZXZUb29sc0FnZW50KQorICAgICAgICBtX2RydERldlRvb2xzQWdlbnQtPmRldGFjaCh0
aGlzKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VUb0FnZW50KGNv
bnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCit7CisgICAgaWYgKG1fZHJ0RGV2VG9v
bHNBZ2VudCkKKyAgICAgICAgbV9kcnREZXZUb29sc0FnZW50LT5hc3luY0NhbGwoRFJURGV2VG9v
bHNDYWxsQXJncyhkYXRhKSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OnNlbmREZWJ1
Z2dlckNvbW1hbmRUb0FnZW50KGNvbnN0IFdlYlN0cmluZyYgY29tbWFuZCkKK3sKKyAgICBXZWJE
ZXZUb29sc0FnZW50OjpleGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbW1hbmQsIDEpOworfQorCit2
b2lkIERSVERldlRvb2xzQ2xpZW50OjphY3RpdmF0ZVdpbmRvdygpCit7CisgICAgLy8gTm90IGlt
cGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRv
b2xzQ2xpZW50OjpjbG9zZVdpbmRvdygpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRvb2xzQ2xpZW50Ojpkb2Nr
V2luZG93KCkKK3sKKyAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OnVuZG9ja1dpbmRvdygpCit7Cisg
ICAgLy8gTm90IGltcGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIERSVERldlRvb2xzQ2xpZW50Ojphc3luY0NhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJn
cyYgYXJncykKK3sKKyAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdFRhc2tGcm9tSGVyZSgKKyAgICAg
ICAgbV9jYWxsTWV0aG9kRmFjdG9yeS5OZXdSdW5uYWJsZU1ldGhvZCgmRFJURGV2VG9vbHNDbGll
bnQ6OmNhbGwsIGFyZ3MpKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6Y2FsbChjb25z
dCBEUlREZXZUb29sc0NhbGxBcmdzJiBhcmdzKQoreworICAgIG1fd2ViRGV2VG9vbHNGcm9udGVu
ZC0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUFnZW50KGFyZ3MubV9kYXRhKTsKKyAgICBpZiAoRFJURGV2
VG9vbHNDYWxsQXJnczo6Y2FsbHNDb3VudCgpID09IDEpCisgICAgICAgIGFsbE1lc3NhZ2VzUHJv
Y2Vzc2VkKCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OmFsbE1lc3NhZ2VzUHJvY2Vz
c2VkKCkKK3sKKyAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KAorICAg
ICAgICBXZWJLaXQ6OldlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KAorICAgICAg
ICAgICAgImlmICh3aW5kb3cuV2ViSW5zcGVjdG9yICYmIFdlYkluc3BlY3Rvci5xdWV1ZXNBcmVF
bXB0eSkgV2ViSW5zcGVjdG9yLnF1ZXVlc0FyZUVtcHR5KCk7IikpKTsKK30KZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50Lmgg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwODY0NGIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0Ns
aWVudC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERSVERldlRvb2xzQ2xpZW50X2gKKyNkZWZp
bmUgRFJURGV2VG9vbHNDbGllbnRfaAorCisjaW5jbHVkZSAiYmFzZS90YXNrLmgiIC8vIEZJWE1F
OiByZW1vdmUgdGhpcworI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50
LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRGV2VG9vbHNGcm9udGVuZDsKK3N0
cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2Vi
VmlldzsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERSVERldlRvb2xzQ2FsbEFy
Z3M7CitjbGFzcyBEUlREZXZUb29sc0FnZW50OworCitjbGFzcyBEUlREZXZUb29sc0NsaWVudCA6
IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICwgcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBEUlREZXZUb29s
c0NsaWVudChEUlREZXZUb29sc0FnZW50KiwgV2ViS2l0OjpXZWJWaWV3Kik7CisgICAgdmlydHVh
bCB+RFJURGV2VG9vbHNDbGllbnQoKTsKKworICAgIC8vIFdlYkRldlRvb2xzRnJvbnRlbmRDbGll
bnQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VUb0FnZW50KGNv
bnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgY29tbWFu
ZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9ja1dpbmRvdygpOworICAgIHZp
cnR1YWwgdm9pZCB1bmRvY2tXaW5kb3coKTsKKworICAgIHZvaWQgYXN5bmNDYWxsKGNvbnN0IERS
VERldlRvb2xzQ2FsbEFyZ3MmKTsKKworICAgIHZvaWQgYWxsTWVzc2FnZXNQcm9jZXNzZWQoKTsK
KworIHByaXZhdGU6CisgICAgdm9pZCBjYWxsKGNvbnN0IERSVERldlRvb2xzQ2FsbEFyZ3MmKTsK
KworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeTxEUlREZXZUb29sc0NsaWVudD4gbV9j
YWxsTWV0aG9kRmFjdG9yeTsKKyAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBE
UlREZXZUb29sc0FnZW50KiBtX2RydERldlRvb2xzQWdlbnQ7CisgICAgV1RGOjpPd25QdHI8V2Vi
S2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kPiBtX3dlYkRldlRvb2xzRnJvbnRlbmQ7Cit9OworCisj
ZW5kaWYgLy8gRFJURGV2VG9vbHNDbGllbnRfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3BwCmluZGV4IGZkN2JhMmQuLjVhODBlMGQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRXZlbnRTZW5kZXIuY3Bw
CisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNw
cApAQCAtNTgsNyArNTgsNyBAQAogCiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlICJwdWJsaWMv
d2luL1dlYklucHV0RXZlbnRGYWN0b3J5LmgiCi0jZW5kaWYKKyNlbmRpZiAvLyBPUyhXSU5ET1dT
KQogCiAvLyBGSVhNRTogbGF5b3V0IGJlZm9yZSBlYWNoIGV2ZW50PwogCmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAKaW5kZXggOWJhNjQyMS4uY2I4NjkzZAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIkRSVERldlRvb2xzQWdlbnQuaCIKICNpbmNsdWRlICJU
ZXN0U2hlbGwuaCIKICNpbmNsdWRlICJXZWJWaWV3SG9zdC5oIgogI2luY2x1ZGUgImJhc2Uvc3Ry
aW5nX3V0aWwuaCIKQEAgLTk1LDYgKzk2LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwpCiAgICAgYmluZE1ldGhvZCgib2JqQ0lk
ZW50aXR5SXNFcXVhbCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6b2JqQ0lkZW50aXR5SXNFcXVh
bCk7CiAgICAgYmluZE1ldGhvZCgic2V0QWx3YXlzQWNjZXB0Q29va2llcyIsICZMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyk7CiAgICAgYmluZE1ldGhvZCgic2hv
d1dlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2hvd1dlYkluc3BlY3Rvcik7
CisgICAgYmluZE1ldGhvZCgiY2xvc2VXZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmNsb3NlV2ViSW5zcGVjdG9yKTsKICAgICBiaW5kTWV0aG9kKCJzZXRXaW5kb3dJc0tleSIs
ICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0V2luZG93SXNLZXkpOwogICAgIGJpbmRNZXRob2Qo
InNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6
c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKTsKICAgICBiaW5kTWV0aG9kKCJzZXRVc2Vy
U3R5bGVTaGVldExvY2F0aW9uIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKTsKQEAgLTU1NSw2ICs1NTcsMTIgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
KgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3MsIENwcFZhcmlh
bnQqIHJlc3VsdCkKK3sKKyAgICBtX3NoZWxsLT5jbG9zZURldlRvb2xzKCk7CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lz
S2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQp
CiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPiAwICYmIGFyZ3VtZW50c1swXS5pc0Jvb2wo
KSkKQEAgLTEyNDUsNyArMTI1Myw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRp
bWVsaW5lUHJvZmlsaW5nRW5hYmxlZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyCiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAxIHx8ICFhcmd1bWVu
dHNbMF0uaXNCb29sKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogU2hvdWxkIGNh
bGwgVGVzdFNoZWxsRGV2VG9vbHNBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKCku
CisgICAgbV9zaGVsbC0+ZHJ0RGV2VG9vbHNBZ2VudCgpLT5zZXRUaW1lbGluZVByb2ZpbGluZ0Vu
YWJsZWQoYXJndW1lbnRzWzBdLnRvQm9vbGVhbigpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpAQCAtMTI1Myw3ICsxMjYxLDcgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW4KICAgICByZXN1bHQtPnNldE51bGwoKTsKICAgICBpZiAoYXJndW1l
bnRzLnNpemUoKSA8IDIgfHwgIWFyZ3VtZW50c1swXS5pc0ludDMyKCkgfHwgIWFyZ3VtZW50c1sx
XS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IFNob3VsZCBjYWxs
IFRlc3RTaGVsbERldlRvb2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoKS4KKyAgICBt
X3NoZWxsLT5kcnREZXZUb29sc0FnZW50KCktPmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoYXJndW1l
bnRzWzBdLnRvSW50MzIoKSwgYXJndW1lbnRzWzFdLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyhjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
LmgKaW5kZXggMjI3NDFkNS4uNWQ2NTcyNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0xMjks
NiArMTI5LDcgQEAgcHVibGljOgogCiAgICAgLy8gU2hvd3MgRGV2VG9vbHMgd2luZG93LgogICAg
IHZvaWQgc2hvd1dlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50
Kik7CisgICAgdm9pZCBjbG9zZVdlYkluc3BlY3Rvcihjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CiAKICAgICAvLyBHaXZlcyBmb2N1cyB0byB0aGUgd2luZG93LgogICAgIHZv
aWQgc2V0V2luZG93SXNLZXkoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAK
aW5kZXggNTJmMWU3ZC4uZjIzYjg4NyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAKKyNpbmNsdWRlICJEUlREZXZUb29s
c0FnZW50LmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDbGllbnQuaCIKICNpbmNsdWRlICJMYXlv
dXRUZXN0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlZpZXdIb3N0LmgiCiAjaW5jbHVkZSAi
YmFzZS9tZDUuaCIgLy8gRklYTUU6IFdyYXAgYnkgd2Via2l0X3N1cHBvcnQuCkBAIC04MSw2ICs4
Myw3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJvb2wgdGVzdFNoZWxsTW9kZSkKICAgICAsIG1f
Zm9jdXNlZFdpZGdldCgwKQogICAgICwgbV90ZXN0U2hlbGxNb2RlKHRlc3RTaGVsbE1vZGUpCiAg
ICAgLCBtX2FsbG93RXh0ZXJuYWxQYWdlcyhmYWxzZSkKKyAgICAsIG1fZGV2VG9vbHMoMCkKIHsK
ICAgICBXZWJSdW50aW1lRmVhdHVyZXM6OmVuYWJsZUdlb2xvY2F0aW9uKHRydWUpOwogICAgIG1f
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuc2V0KG5ldyBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcih0
aGlzKSk7CkBAIC05NywxMiArMTAwLDE3IEBAIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJvb2wgdGVz
dFNoZWxsTW9kZSkKICAgICAvLyB0aW1lZC1vdXQgRFJUIHByb2Nlc3Mgd2FzIGNyYXNoZWQuCiAg
ICAgbV90aW1lb3V0ID0gMzAgKiAxMDAwOwogCisgICAgbV9kcnREZXZUb29sc0FnZW50LnNldChu
ZXcgRFJURGV2VG9vbHNBZ2VudCk7CiAgICAgbV93ZWJWaWV3SG9zdCA9IGNyZWF0ZVdlYlZpZXco
KTsKICAgICBtX3dlYlZpZXcgPSBtX3dlYlZpZXdIb3N0LT53ZWJWaWV3KCk7CisgICAgbV9kcnRE
ZXZUb29sc0FnZW50LT5zZXRXZWJWaWV3KG1fd2ViVmlldyk7CiB9CiAKIFRlc3RTaGVsbDo6flRl
c3RTaGVsbCgpCiB7CisgICAgLy8gTm90ZTogRGV2VG9vbHMgYXJlIGNsb3NlZCB0b2dldGhlciB3
aXRoIGFsbCB0aGUgb3RoZXIgd2luZG93cyBpbiB0aGUKKyAgICAvLyB3aW5kb3dzIGxpc3QuCisK
ICAgICBsb2FkVVJMKEdVUkwoImFib3V0OmJsYW5rIikpOwogICAgIC8vIENhbGwgR0MgdHdpY2Ug
dG8gY2xlYW4gdXAgZ2FyYmFnZS4KICAgICBjYWxsSlNHQygpOwpAQCAtMTEyLDYgKzEyMCwzNCBA
QCBUZXN0U2hlbGw6On5UZXN0U2hlbGwoKQogICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKIH0KIAor
dm9pZCBUZXN0U2hlbGw6OmNyZWF0ZURSVERldlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQq
IGFnZW50KQoreworICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQuc2V0KG5ldyBEUlREZXZUb29sc0Ns
aWVudChhZ2VudCwgd2ViVmlldygpKSk7Cit9CisKK3ZvaWQgVGVzdFNoZWxsOjpzaG93RGV2VG9v
bHMoKQoreworICAgIGlmICghbV9kZXZUb29scykgeworICAgICAgICBXZWJVUkwgdXJsID0gd2Vi
a2l0X3N1cHBvcnQ6OkdldERldlRvb2xzUGF0aEFzVVJMKCk7CisgICAgICAgIGlmICghdXJsLmlz
VmFsaWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBtX2RldlRvb2xzID0gY3JlYXRlTmV3V2luZG93KHVybCk7
CisgICAgICAgIEFTU0VSVChtX2RldlRvb2xzKTsKKyAgICAgICAgY3JlYXRlRFJURGV2VG9vbHND
bGllbnQobV9kcnREZXZUb29sc0FnZW50LmdldCgpKTsKKyAgICB9CisgICAgbV9kZXZUb29scy0+
c2hvdyhXZWJLaXQ6OldlYk5hdmlnYXRpb25Qb2xpY3lOZXdXaW5kb3cpOworfQorCit2b2lkIFRl
c3RTaGVsbDo6Y2xvc2VEZXZUb29scygpCit7CisgICAgaWYgKG1fZGV2VG9vbHMpIHsKKyAgICAg
ICAgY2xvc2VXaW5kb3cobV9kZXZUb29scyk7CisgICAgICAgIG1fZGV2VG9vbHMgPSAwOworICAg
IH0KK30KKwogdm9pZCBUZXN0U2hlbGw6OnJlc2V0V2ViU2V0dGluZ3MoV2ViVmlldyYgd2ViVmll
dykKIHsKICAgICAvLyBNYXRjaCB0aGUgc2V0dGluZ3MgdXNlZCBieSBNYWMgRHVtcFJlbmRlclRy
ZWUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgpAQCAtMjA2LDYgKzI0Miw5IEBAIHZvaWQgVGVzdFNo
ZWxsOjpydW5GaWxlVGVzdChjb25zdCBUZXN0UGFyYW1zJiBwYXJhbXMpCiAgICAgICAgIHx8IHRl
c3RVcmwuZmluZCgibG9hZGluZ1xcIikgIT0gc3RyaW5nOjpucG9zKQogICAgICAgICBtX2xheW91
dFRlc3RDb250cm9sbGVyLT5zZXRTaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKHRydWUpOwog
CisgICAgaWYgKGluc3BlY3RvclRlc3RNb2RlKQorICAgICAgICBzaG93RGV2VG9vbHMoKTsKKwog
ICAgIG1fcHJpbnRlci0+aGFuZGxlVGVzdEhlYWRlcih0ZXN0VXJsLmNfc3RyKCkpOwogICAgIGxv
YWRVUkwobV9wYXJhbXMudGVzdFVybCk7CiAKQEAgLTU4Niw3ICs2MjUsNyBAQCBXZWJWaWV3SG9z
dCogVGVzdFNoZWxsOjpjcmVhdGVXZWJWaWV3KCkKIFdlYlZpZXdIb3N0KiBUZXN0U2hlbGw6OmNy
ZWF0ZU5ld1dpbmRvdyhjb25zdCBXZWJVUkwmIHVybCkKIHsKICAgICBXZWJWaWV3SG9zdCogaG9z
dCA9IG5ldyBXZWJWaWV3SG9zdCh0aGlzKTsKLSAgICBXZWJWaWV3KiB2aWV3ID0gV2ViVmlldzo6
Y3JlYXRlKGhvc3QsIDApOworICAgIFdlYlZpZXcqIHZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoaG9z
dCwgbV9kcnREZXZUb29sc0FnZW50LmdldCgpKTsKICAgICBob3N0LT5zZXRXZWJXaWRnZXQodmll
dyk7CiAgICAgcmVzZXRXZWJTZXR0aW5ncygqdmlldyk7CiAgICAgdmlldy0+aW5pdGlhbGl6ZU1h
aW5GcmFtZShob3N0KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsLmgKaW5kZXggMjM5NzI0Ni4uMGY3NGVlMQotLS0gYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaApAQCAtMjgsNiArMjgsOSBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCisjaWZuZGVmIFRlc3RTaGVsbF9oCisjZGVmaW5lIFRlc3RTaGVsbF9oCisK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkV2ZW50U2Vu
ZGVyLmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIuaCIKQEAgLTQ0LDYgKzQ3LDcg
QEAKIC8vIHZhcmlvdXMgb2JqZWN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgY3JlYXRlZCBpbiBv
bmUgRFJUIHByb2Nlc3MuCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViRGV2VG9vbHNB
Z2VudENsaWVudDsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2Vu
dGVyOwogY2xhc3MgV2ViUHJlZmVyZW5jZXM7CkBAIC01NCw2ICs1OCwxMCBAQCBuYW1lc3BhY2Ug
c2tpYSB7CiBjbGFzcyBQbGF0Zm9ybUNhbnZhczsKIH0KIAorY2xhc3MgRFJURGV2VG9vbHNBZ2Vu
dDsKK2NsYXNzIERSVERldlRvb2xzQ2FsbEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0NsaWVudDsK
Kwogc3RydWN0IFRlc3RQYXJhbXMgewogICAgIGJvb2wgZHVtcFRyZWU7CiAgICAgYm9vbCBkdW1w
UGl4ZWxzOwpAQCAtNzMsNiArODEsNyBAQCBjbGFzcyBUZXN0U2hlbGwgewogcHVibGljOgogICAg
IFRlc3RTaGVsbChib29sIHRlc3RTaGVsbE1vZGUpOwogICAgIH5UZXN0U2hlbGwoKTsKKwogICAg
IC8vIFRoZSBtYWluIFdlYlZpZXcuCiAgICAgV2ViS2l0OjpXZWJWaWV3KiB3ZWJWaWV3KCkgY29u
c3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CiAgICAgLy8gUmV0dXJucyB0aGUgaG9zdCBmb3IgdGhl
IG1haW4gV2ViVmlldy4KQEAgLTEyNiwxMSArMTM1LDE4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNs
b3NlUmVtYWluaW5nV2luZG93cygpOwogICAgIGludCB3aW5kb3dDb3VudCgpOwogICAgIHN0YXRp
YyB2b2lkIHJlc2l6ZVdpbmRvd0ZvclRlc3QoV2ViVmlld0hvc3QqLCBjb25zdCBXZWJLaXQ6Oldl
YlVSTCYpOwotICAgIHZvaWQgc2hvd0RldlRvb2xzKCkge30gLy8gRklYTUU6IGltZXBsZW1lbnQg
dGhpcy4KKworICAgIHZvaWQgc2hvd0RldlRvb2xzKCk7CisgICAgdm9pZCBjbG9zZURldlRvb2xz
KCk7CisKKyAgICBEUlREZXZUb29sc0FnZW50KiBkcnREZXZUb29sc0FnZW50KCkgeyByZXR1cm4g
bV9kcnREZXZUb29sc0FnZW50LmdldCgpOyB9CisgICAgRFJURGV2VG9vbHNDbGllbnQqIGRydERl
dlRvb2xzQ2xpZW50KCkgeyByZXR1cm4gbV9kcnREZXZUb29sc0NsaWVudC5nZXQoKTsgfQogCiAg
ICAgc3RhdGljIGNvbnN0IGludCB2aXJ0dWFsV2luZG93Qm9yZGVyID0gMzsKIAogcHJpdmF0ZToK
KyAgICB2b2lkIGNyZWF0ZURSVERldlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQqKTsKKwog
ICAgIHN0YXRpYyB2b2lkIHJlc2V0V2ViU2V0dGluZ3MoV2ViS2l0OjpXZWJWaWV3Jik7CiAgICAg
dm9pZCBkdW1wKCk7CiAgICAgc3RkOjpzdHJpbmcgZHVtcEFsbEJhY2tGb3J3YXJkTGlzdHMoKTsK
QEAgLTE0Myw2ICsxNTksOSBAQCBwcml2YXRlOgogICAgIFdlYktpdDo6V2ViV2lkZ2V0KiBtX2Zv
Y3VzZWRXaWRnZXQ7CiAgICAgYm9vbCBtX3Rlc3RTaGVsbE1vZGU7CiAgICAgV2ViVmlld0hvc3Qq
IG1fd2ViVmlld0hvc3Q7CisgICAgV2ViVmlld0hvc3QqIG1fZGV2VG9vbHM7CisgICAgT3duUHRy
PERSVERldlRvb2xzQWdlbnQ+IG1fZHJ0RGV2VG9vbHNBZ2VudDsKKyAgICBPd25QdHI8RFJURGV2
VG9vbHNDbGllbnQ+IG1fZHJ0RGV2VG9vbHNDbGllbnQ7CiAgICAgT3duUHRyPEFjY2Vzc2liaWxp
dHlDb250cm9sbGVyPiBtX2FjY2Vzc2liaWxpdHlDb250cm9sbGVyOwogICAgIE93blB0cjxFdmVu
dFNlbmRlcj4gbV9ldmVudFNlbmRlcjsKICAgICBPd25QdHI8TGF5b3V0VGVzdENvbnRyb2xsZXI+
IG1fbGF5b3V0VGVzdENvbnRyb2xsZXI7CkBAIC0xNjYsMyArMTg1LDUgQEAgcHJpdmF0ZToKIH07
CiAKIHZvaWQgcGxhdGZvcm1Jbml0KCk7CisKKyNlbmRpZiAvLyBUZXN0U2hlbGxfaApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29uZmlnLmggYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaAppbmRleCA2MDI5NTMyLi43
ZGZkYTE4Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5o
CisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5oCkBAIC00
NCw4ICs0NCwxMCBAQAogCiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAKLS8vIEpTX0VYUE9S
VERBVEEgaXMgbmVlZGVkIHRvIGlubHVjZGUgd3RmL1dURlN0cmluZy5oLgogI2lmIE9TKFdJTkRP
V1MpICYmICFDT01QSUxFUihHQ0MpCisvLyBBbGxvdyAndGhpcycgdG8gYmUgdXNlZCBpbiBiYXNl
IG1lbWJlciBpbml0aWFsaXplciBsaXN0LgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MzU1
KQorLy8gSlNfRVhQT1JUREFUQSBpcyBuZWVkZWQgdG8gaW5sdWNkZSB3dGYvV1RGU3RyaW5nLmgu
CiAjZGVmaW5lIEpTX0VYUE9SVERBVEEgX19kZWNsc3BlYyhkbGxpbXBvcnQpCiAjZWxzZQogI2Rl
ZmluZSBKU19FWFBPUlREQVRBCg==
</data>
<flag name="review"
          id="48042"
          type_id="1"
          status="-"
          setter="tkent"
    />
    <flag name="commit-queue"
          id="48043"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60602</attachid>
            <date>2010-07-06 01:18:20 -0700</date>
            <delta_ts>2010-07-06 04:52:56 -0700</delta_ts>
            <desc>patch - snapshot of current state (added tkent&apos;s fix, NOBODY-fied the reviewer in the ChangeLogs)</desc>
            <filename>devtools3.patch</filename>
            <type>text/plain</type>
            <size>36494</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCmluZGV4IDI5Y2Y4ZjQuLjk3Y2Q0N2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA3LTA1ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEJ1ZyA0MDU1OCAtIFtEUlQvQ2hyb21pdW1dIFVwc3RyZWFtIFRlc3RTaGVsbERldlRvb2xzIGZv
ciBDaHJvbWl1bSBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQwNTU4CisKKyAgICAgICAgVXBzdHJlYW0gRGV2VG9vbHMgZm9yIENocm9taXVtIERS
VC4KKworICAgICAgICAqIFdlYktpdC5neXA6CisKIDIwMTAtMDctMDUgIFl1cnkgU2VtaWtoYXRz
a3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggZTJkYTFiNC4uMGM3ZjUxOQotLS0gYS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNjI5
LDYgKzYyOSw5IEBACiAgICAgICAgICAgICAgICAgWydPUz09IndpbiInLCB7CiAgICAgICAgICAg
ICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbJ0xheW91dFRlc3RIZWxwZXInXSwKIAorICAgICAg
ICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAgICAgICAgICAg
JzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCcsICMgZm9yIGEgaGVhZGVyIGdlbmVy
YXRlZCBieSBncml0CisgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAg
ICdyZXNvdXJjZV9pbmNsdWRlX2RpcnMnOiBbJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dl
YmtpdCddLAogICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAg
ICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS9uZXQvbmV0X3Jlc291cmNlcy5y
YycsCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFu
Z2VMb2cKaW5kZXggNjJhZDE5MC4uZmE3ZDI0MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEw
LTA3LTA1ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0MDU1OCAt
IFtEUlQvQ2hyb21pdW1dIFVwc3RyZWFtIFRlc3RTaGVsbERldlRvb2xzIGZvciBDaHJvbWl1bSBE
UlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQwNTU4
CisKKyAgICAgICAgVXBzdHJlYW0gRGV2VG9vbHMgZm9yIENocm9taXVtIERSVC4KKyAgICAgICAg
KG9yaWdpbmFsIENocm9taXVtIGZpbGVzIHJldi4gNTEyODcpCisKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKERSVERldlRvb2xz
QWdlbnQ6OkRSVERldlRvb2xzQWdlbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6c2V0
V2ViVmlldyk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpzZW5kTWVzc2FnZVRvRnJvbnRl
bmQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6Zm9yY2VSZXBhaW50KToKKyAgICAgICAg
KERSVERldlRvb2xzQWdlbnQ6OnJ1bnRpbWVGZWF0dXJlU3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KERSVERldlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0U291cmNlKToKKyAgICAgICAgKERSVERl
dlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0RGlzcGF0Y2hlclNvdXJjZSk6CisgICAgICAgIChE
UlREZXZUb29sc0FnZW50OjpkZWJ1Z2dlclNjcmlwdFNvdXJjZSk6CisgICAgICAgIChEUlREZXZU
b29sc0FnZW50Ojphc3luY0NhbGwpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6Y2FsbCk6
CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojp3ZWJEZXZUb29sc0FnZW50KToKKyAgICAgICAg
KERSVERldlRvb2xzQWdlbnQ6OmF0dGFjaCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpk
ZXRhY2gpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxpbmdF
bmFibGVkKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdlTG9vcCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oOiBBZGRl
ZC4KKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6On5EUlREZXZUb29sc0FnZW50KToKKyAgICAg
ICAgKERSVERldlRvb2xzQWdlbnQ6Omhvc3RJZGVudGlmaWVyKToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmNwcDoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmg6CisgICAgICAgIChEUlRE
ZXZUb29sc0NhbGxBcmdzOjpEUlREZXZUb29sc0NhbGxBcmdzKToKKyAgICAgICAgKERSVERldlRv
b2xzQ2FsbEFyZ3M6On5EUlREZXZUb29sc0NhbGxBcmdzKToKKyAgICAgICAgKERSVERldlRvb2xz
Q2FsbEFyZ3M6OmNhbGxzQ291bnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVERldlRvb2xzQ2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgIChEUlREZXZUb29sc0NsaWVu
dDo6RFJURGV2VG9vbHNDbGllbnQpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6On5EUlRE
ZXZUb29sc0NsaWVudCk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VU
b0FnZW50KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50OjpzZW5kRGVidWdnZXJDb21tYW5k
VG9BZ2VudCk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6YWN0aXZhdGVXaW5kb3cpOgor
ICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmNsb3NlV2luZG93KToKKyAgICAgICAgKERSVERl
dlRvb2xzQ2xpZW50Ojpkb2NrV2luZG93KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50Ojp1
bmRvY2tXaW5kb3cpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OmFzeW5jQ2FsbCk6Cisg
ICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6Y2FsbCk6CisgICAgICAgIChEUlREZXZUb29sc0Ns
aWVudDo6YWxsTWVzc2FnZXNQcm9jZXNzZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVERldlRvb2xzQ2xpZW50Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRXZlbnRTZW5kZXIuY3BwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y2xvc2VXZWJJbnNwZWN0b3IpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRp
bWVsaW5lUHJvZmlsaW5nRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAgICAoVGVzdFNoZWxsOjpUZXN0U2hlbGwpOgorICAg
ICAgICAoVGVzdFNoZWxsOjp+VGVzdFNoZWxsKToKKyAgICAgICAgKFRlc3RTaGVsbDo6Y3JlYXRl
RFJURGV2VG9vbHNDbGllbnQpOgorICAgICAgICAoVGVzdFNoZWxsOjpzaG93RGV2VG9vbHMpOgor
ICAgICAgICAoVGVzdFNoZWxsOjpjbG9zZURldlRvb2xzKToKKyAgICAgICAgKFRlc3RTaGVsbDo6
cnVuRmlsZVRlc3QpOgorICAgICAgICAoVGVzdFNoZWxsOjpjcmVhdGVOZXdXaW5kb3cpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oOgorICAgICAgICAoVGVz
dFNoZWxsOjpkcnREZXZUb29sc0FnZW50KToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHJ0RGV2VG9v
bHNDbGllbnQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5oOgor
CiAyMDEwLTA3LTA1ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkBAIC00MCw3ICsxMDksNiBAQAogCiAgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vY2hlY2tvdXQvc2NtLnB5OgogICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvY29tbW9uL2NoZWNrb3V0L3NjbV91bml0dGVzdC5weToKLQogMjAx
MC0wNy0wMyAgUGF0cmljayBHYW5zdGVyZXIgIDxwYXJvZ2FAcGFyb2dhLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IDVmYzhkYWIuLmZkNTcyMGYKLS0tIGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQorKysgYi9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCkBAIC05LDYgKzksMTIgQEAK
ICAgICAgICAgICAgICdjaHJvbWl1bS9DcHBCb3VuZENsYXNzLmgnLAogICAgICAgICAgICAgJ2No
cm9taXVtL0NwcFZhcmlhbnQuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9DcHBWYXJpYW50
LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwJywKKyAgICAg
ICAgICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgnLAorICAgICAgICAgICAgJ2Nocm9t
aXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlRE
ZXZUb29sc0NhbGxBcmdzLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2xp
ZW50LmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9FdmVudFNlbmRlci5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL0V2ZW50U2Vu
ZGVyLmgnLApAQCAtNDQsNSArNTAsNSBAQAogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAg
ICB9XSwKICAgICAgICAgXSwKLSAgICB9CisgICAgfSwKIH0KZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZmNzdhMAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3Bw
CkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERldlRv
b2xzQWdlbnQuaCIKKworI2luY2x1ZGUgIkRSVERldlRvb2xzQ2FsbEFyZ3MuaCIKKyNpbmNsdWRl
ICJEUlREZXZUb29sc0NsaWVudC5oIgorCisjaW5jbHVkZSAicHVibGljL1dlYkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNBZ2VudC5oIgorI2luY2x1ZGUgInB1YmxpYy9X
ZWJEZXZUb29sc01lc3NhZ2VEYXRhLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlN0cmluZy5oIgor
I2luY2x1ZGUgInB1YmxpYy9XZWJWaWV3LmgiCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Vi
a2l0X3N1cHBvcnQuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRFJURGV2VG9vbHNB
Z2VudDo6RFJURGV2VG9vbHNBZ2VudCgpCisgICAgOiBtX2NhbGxNZXRob2RGYWN0b3J5KHRoaXMp
CisgICAgLCBtX2RydERldlRvb2xzQ2xpZW50KDApCisgICAgLCBtX3dlYlZpZXcoMCkKK3sKKyAg
ICBzdGF0aWMgaW50IGRldlRvb2xzQWdlbnRDb3VudGVyID0gMDsKKworICAgIG1fcm91dGluZ0lE
ID0gKytkZXZUb29sc0FnZW50Q291bnRlcjsKKyAgICBpZiAobV9yb3V0aW5nSUQgPT0gMSkKKyAg
ICAgICAgV2ViRGV2VG9vbHNBZ2VudDo6c2V0TWVzc2FnZUxvb3BEaXNwYXRjaEhhbmRsZXIoJkRS
VERldlRvb2xzQWdlbnQ6OmRpc3BhdGNoTWVzc2FnZUxvb3ApOworfQorCit2b2lkIERSVERldlRv
b2xzQWdlbnQ6OnNldFdlYlZpZXcoV2ViVmlldyogd2ViVmlldykKK3sKKyAgICBtX3dlYlZpZXcg
PSB3ZWJWaWV3OworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6OnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjb25zdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhJiBkYXRhKQoreworICAgIGlmIChtX2Ry
dERldlRvb2xzQ2xpZW50KQorICAgICAgICAgbV9kcnREZXZUb29sc0NsaWVudC0+YXN5bmNDYWxs
KERSVERldlRvb2xzQ2FsbEFyZ3MoZGF0YSkpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6
OmZvcmNlUmVwYWludCgpCit7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6cnVudGltZUZl
YXR1cmVTdGF0ZUNoYW5nZWQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGZlYXR1cmUsIGJvb2wg
ZW5hYmxlZCkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMuCit9CisKK1dlYkNTdHJp
bmcgRFJURGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UoKQoreworICAgIHJldHVy
biB3ZWJraXRfc3VwcG9ydDo6R2V0RGV2VG9vbHNJbmplY3RlZFNjcmlwdFNvdXJjZSgpOworfQor
CitXZWJDU3RyaW5nIERSVERldlRvb2xzQWdlbnQ6OmluamVjdGVkU2NyaXB0RGlzcGF0Y2hlclNv
dXJjZSgpCit7CisgICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpHZXREZXZUb29sc0luamVjdGVk
U2NyaXB0RGlzcGF0Y2hlclNvdXJjZSgpOworfQorCitXZWJDU3RyaW5nIERSVERldlRvb2xzQWdl
bnQ6OmRlYnVnZ2VyU2NyaXB0U291cmNlKCkKK3sKKyAgICByZXR1cm4gd2Via2l0X3N1cHBvcnQ6
OkdldERldlRvb2xzRGVidWdnZXJTY3JpcHRTb3VyY2UoKTsKK30KKwordm9pZCBEUlREZXZUb29s
c0FnZW50Ojphc3luY0NhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyAmYXJncykKK3sKKyAg
ICB3ZWJraXRfc3VwcG9ydDo6UG9zdFRhc2tGcm9tSGVyZSgKKyAgICAgICAgbV9jYWxsTWV0aG9k
RmFjdG9yeS5OZXdSdW5uYWJsZU1ldGhvZCgmRFJURGV2VG9vbHNBZ2VudDo6Y2FsbCwgYXJncykp
OworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6OmNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxs
QXJncyAmYXJncykKK3sKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdlYkRldlRvb2xz
QWdlbnQoKTsKKyAgICBpZiAoYWdlbnQpCisgICAgICAgIGFnZW50LT5kaXNwYXRjaE1lc3NhZ2VG
cm9tRnJvbnRlbmQoYXJncy5tX2RhdGEpOworICAgIGlmIChEUlREZXZUb29sc0NhbGxBcmdzOjpj
YWxsc0NvdW50KCkgPT0gMSAmJiBtX2RydERldlRvb2xzQ2xpZW50KQorICAgICAgICBtX2RydERl
dlRvb2xzQ2xpZW50LT5hbGxNZXNzYWdlc1Byb2Nlc3NlZCgpOworfQorCitXZWJEZXZUb29sc0Fn
ZW50KiBEUlREZXZUb29sc0FnZW50Ojp3ZWJEZXZUb29sc0FnZW50KCkKK3sKKyAgICBpZiAoIW1f
d2ViVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+ZGV2VG9v
bHNBZ2VudCgpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6OmF0dGFjaChEUlREZXZUb29s
c0NsaWVudCogY2xpZW50KQoreworICAgIEFTU0VSVCghbV9kcnREZXZUb29sc0NsaWVudCk7Cisg
ICAgbV9kcnREZXZUb29sc0NsaWVudCA9IGNsaWVudDsKKyAgICBXZWJEZXZUb29sc0FnZW50KiBh
Z2VudCA9IHdlYkRldlRvb2xzQWdlbnQoKTsKKyAgICBpZiAoYWdlbnQpCisgICAgICAgIGFnZW50
LT5hdHRhY2goKTsKK30KKwordm9pZCBEUlREZXZUb29sc0FnZW50OjpkZXRhY2goRFJURGV2VG9v
bHNDbGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9kcnREZXZUb29sc0NsaWVudCk7Cisg
ICAgV2ViRGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZUb29sc0FnZW50KCk7CisgICAgaWYg
KGFnZW50KQorICAgICAgICBhZ2VudC0+ZGV0YWNoKCk7CisgICAgbV9kcnREZXZUb29sc0NsaWVu
dCA9IDA7Cit9CisKK2Jvb2wgRFJURGV2VG9vbHNBZ2VudDo6c2V0VGltZWxpbmVQcm9maWxpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdl
YkRldlRvb2xzQWdlbnQoKTsKKyAgICBpZiAoIWFnZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYWdlbnQtPnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZChlbmFibGVkKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBEUlREZXZUb29sc0FnZW50OjpldmFsdWF0ZUluV2ViSW5z
cGVjdG9yKGxvbmcgY2FsbElELCBjb25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0KQoreworICAgIFdl
YkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmICghYWdl
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhZ2VudC0+ZXZhbHVhdGVJbldlYkluc3Bl
Y3RvcihjYWxsSUQsIFdlYlN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKKy8vIHN0YXRpYyBtZXRob2QKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6ZGlzcGF0
Y2hNZXNzYWdlTG9vcCgpCit7CisgICAgd2Via2l0X3N1cHBvcnQ6OkRpc3BhdGNoTWVzc2FnZUxv
b3AoKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVERldlRvb2xzQWdlbnQuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0RSVERldlRvb2xzQWdlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
N2ZjMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRFJURGV2VG9vbHNBZ2VudC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERSVERldlRv
b2xzQWdlbnRfaAorI2RlZmluZSBEUlREZXZUb29sc0FnZW50X2gKKworI2luY2x1ZGUgImJhc2Uv
dGFzay5oIiAvLyBGSVhNRTogcmVtb3ZlIHRoaXMKKyNpbmNsdWRlICJwdWJsaWMvV2ViRGV2VG9v
bHNBZ2VudENsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQ1N0cmluZzsKK2NsYXNzIFdlYkRldlRvb2xzQWdlbnQ7
CitjbGFzcyBXZWJWaWV3Oworc3RydWN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGE7CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdzOworY2xhc3MgRFJU
RGV2VG9vbHNDbGllbnQ7CisKK2NsYXNzIERSVERldlRvb2xzQWdlbnQgOiBwdWJsaWMgV2ViS2l0
OjpXZWJEZXZUb29sc0FnZW50Q2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICwgcHVibGlj
IE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBEUlREZXZUb29sc0FnZW50KCk7CisgICAgdmly
dHVhbCB+RFJURGV2VG9vbHNBZ2VudCgpIHt9CisKKyAgICB2b2lkIHNldFdlYlZpZXcoV2ViS2l0
OjpXZWJWaWV3Kik7CisKKyAgICAvLyBXZWJEZXZUb29sc0FnZW50Q2xpZW50IGltcGxlbWVudGF0
aW9uLgorICAgIHZpcnR1YWwgdm9pZCBzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgV2ViS2l0
OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhJik7CisgICAgdmlydHVhbCBpbnQgaG9zdElkZW50aWZp
ZXIoKSB7IHJldHVybiBtX3JvdXRpbmdJRDsgfQorICAgIHZpcnR1YWwgdm9pZCBmb3JjZVJlcGFp
bnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQoY29uc3Qg
V2ViS2l0OjpXZWJTdHJpbmcmIGZlYXR1cmUsIGJvb2wgZW5hYmxlZCk7CisgICAgdmlydHVhbCBX
ZWJLaXQ6OldlYkNTdHJpbmcgaW5qZWN0ZWRTY3JpcHRTb3VyY2UoKTsKKyAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViQ1N0cmluZyBpbmplY3RlZFNjcmlwdERpc3BhdGNoZXJTb3VyY2UoKTsKKyAgICB2
aXJ0dWFsIFdlYktpdDo6V2ViQ1N0cmluZyBkZWJ1Z2dlclNjcmlwdFNvdXJjZSgpOworCisgICAg
dm9pZCBhc3luY0NhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyYpOworCisgICAgdm9pZCBh
dHRhY2goRFJURGV2VG9vbHNDbGllbnQqKTsKKyAgICB2b2lkIGRldGFjaChEUlREZXZUb29sc0Ns
aWVudCopOworCisgICAgYm9vbCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElELCBj
b25zdCBzdGQ6OnN0cmluZyYgc2NyaXB0KTsKKyAgICBib29sIHNldFRpbWVsaW5lUHJvZmlsaW5n
RW5hYmxlZChib29sIGVuYWJsZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjYWxsKGNvbnN0IERS
VERldlRvb2xzQ2FsbEFyZ3MmKTsKKyAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaE1lc3NhZ2VMb29w
KCk7CisgICAgV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50KiB3ZWJEZXZUb29sc0FnZW50KCk7CisK
KyAgICBTY29wZWRSdW5uYWJsZU1ldGhvZEZhY3Rvcnk8RFJURGV2VG9vbHNBZ2VudD4gbV9jYWxs
TWV0aG9kRmFjdG9yeTsKKyAgICBEUlREZXZUb29sc0NsaWVudCogbV9kcnREZXZUb29sc0NsaWVu
dDsKKyAgICBpbnQgbV9yb3V0aW5nSUQ7CisgICAgV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50KiBt
X3dlYkRldlRvb2xzQWdlbnQ7CisgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7Cit9Owor
CisjZW5kaWYgLy8gRFJURGV2VG9vbHNBZ2VudF9oCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmNwcCBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhY2Q2ZjcKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdz
LmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERl
dlRvb2xzQ2FsbEFyZ3MuaCIKKworLy8gc3RhdGljCitpbnQgRFJURGV2VG9vbHNDYWxsQXJnczo6
bV9jYWxsc0NvdW50ID0gMDsKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDYWxsQXJncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU0YTNkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdzLmgKQEAgLTAsMCArMSw3
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgRFJURGV2VG9vbHNDYWxsQXJnc19oCisjZGVmaW5lIERSVERldlRvb2xzQ2Fs
bEFyZ3NfaAorCisjaW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzTWVzc2FnZURhdGEuaCIKKyNp
bmNsdWRlICJwdWJsaWMvV2ViU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KworY2xhc3MgRFJURGV2VG9vbHNDYWxsQXJncyB7CitwdWJsaWM6CisgICAgRFJURGV2VG9vbHND
YWxsQXJncyhjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCisgICAg
ICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgICAgICArK21fY2FsbHNDb3VudDsKKworICAg
ICAgICAvLyBUaGUgc2FtZSBiZWhhdmlvdXIgYXMgd2UgaGF2ZSBpbiBjYXNlIG9mIElQQy4KKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2RhdGEuYXJndW1lbnRzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAobV9kYXRhLmFyZ3VtZW50c1tpXS5pc051bGwoKSkKKyAgICAg
ICAgICAgICAgICBtX2RhdGEuYXJndW1lbnRzW2ldID0gV2ViS2l0OjpXZWJTdHJpbmc6OmZyb21V
VEY4KCIiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERSVERldlRvb2xzQ2FsbEFyZ3MoY29u
c3QgRFJURGV2VG9vbHNDYWxsQXJncyYgYXJncykKKyAgICAgICAgOiBtX2RhdGEoYXJncy5tX2Rh
dGEpCisgICAgeworICAgICAgICArK21fY2FsbHNDb3VudDsKKyAgICB9CisKKyAgICB+RFJURGV2
VG9vbHNDYWxsQXJncygpCisgICAgeworICAgICAgICAtLW1fY2FsbHNDb3VudDsKKyAgICAgICAg
QVNTRVJUKG1fY2FsbHNDb3VudCA+PSAwKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGNhbGxz
Q291bnQoKSB7IHJldHVybiBtX2NhbGxzQ291bnQ7IH0KKworICAgIFdlYktpdDo6V2ViRGV2VG9v
bHNNZXNzYWdlRGF0YSBtX2RhdGE7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBtX2NhbGxz
Q291bnQ7Cit9OworCisjZW5kaWYgLy8gRFJURGV2VG9vbHNDYWxsQXJnc19oCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5j
cHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmOTY1YgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRv
b2xzQ2xpZW50LmNwcApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEUlREZXZUb29sc0NsaWVudC5oIgorCisjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5o
IgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2FsbEFyZ3MuaCIKKworI2luY2x1ZGUgInB1YmxpYy9X
ZWJEZXZUb29sc0FnZW50LmgiCisjaW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzRnJvbnRlbmQu
aCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJwdWJsaWMvV2ViU2Ny
aXB0U291cmNlLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlN0cmluZy5oIgorI2luY2x1ZGUgInB1
YmxpYy9XZWJWaWV3LmgiCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworRFJURGV2VG9vbHNDbGllbnQ6OkRSVERl
dlRvb2xzQ2xpZW50KERSVERldlRvb2xzQWdlbnQqIGFnZW50LCBXZWJWaWV3KiB3ZWJWaWV3KQor
ICAgIDogbV9jYWxsTWV0aG9kRmFjdG9yeSh0aGlzKQorICAgICwgbV9kcnREZXZUb29sc0FnZW50
KGFnZW50KQorICAgICwgbV93ZWJWaWV3KHdlYlZpZXcpCit7CisgICAgbV93ZWJEZXZUb29sc0Zy
b250ZW5kLnNldChXZWJEZXZUb29sc0Zyb250ZW5kOjpjcmVhdGUobV93ZWJWaWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZW4tVVMiKSkpOworICAgIG1fZHJ0RGV2VG9vbHNBZ2Vu
dC0+YXR0YWNoKHRoaXMpOworfQorCitEUlREZXZUb29sc0NsaWVudDo6fkRSVERldlRvb2xzQ2xp
ZW50KCkKK3sKKyAgICAvLyBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHRoZSBwYWdlIHdpbGwgYmUg
ZGVzdHJveWVkIGF0IGRldGFjaCBzdGVwIG9mCisgICAgLy8gbV9kcnREZXZUb29sc0FnZW50IGFu
ZCB3ZSBzaG91bGQgY2xlYW4gcGVuZGluZyByZXF1ZXN0cyBhIGJpdCBlYXJsaWVyLgorICAgIG1f
Y2FsbE1ldGhvZEZhY3RvcnkuUmV2b2tlQWxsKCk7CisgICAgaWYgKG1fZHJ0RGV2VG9vbHNBZ2Vu
dCkKKyAgICAgICAgbV9kcnREZXZUb29sc0FnZW50LT5kZXRhY2godGhpcyk7Cit9CisKK3ZvaWQg
RFJURGV2VG9vbHNDbGllbnQ6OnNlbmRNZXNzYWdlVG9BZ2VudChjb25zdCBXZWJEZXZUb29sc01l
c3NhZ2VEYXRhJiBkYXRhKQoreworICAgIGlmIChtX2RydERldlRvb2xzQWdlbnQpCisgICAgICAg
IG1fZHJ0RGV2VG9vbHNBZ2VudC0+YXN5bmNDYWxsKERSVERldlRvb2xzQ2FsbEFyZ3MoZGF0YSkp
OworfQorCit2b2lkIERSVERldlRvb2xzQ2xpZW50OjpzZW5kRGVidWdnZXJDb21tYW5kVG9BZ2Vu
dChjb25zdCBXZWJTdHJpbmcmIGNvbW1hbmQpCit7CisgICAgV2ViRGV2VG9vbHNBZ2VudDo6ZXhl
Y3V0ZURlYnVnZ2VyQ29tbWFuZChjb21tYW5kLCAxKTsKK30KKwordm9pZCBEUlREZXZUb29sc0Ns
aWVudDo6YWN0aXZhdGVXaW5kb3coKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6Y2xvc2VX
aW5kb3coKQoreworICAgIC8vIE5vdCBpbXBsZW1lbnRlZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6ZG9ja1dpbmRvdygpCit7CisgICAg
Ly8gTm90IGltcGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IERSVERldlRvb2xzQ2xpZW50Ojp1bmRvY2tXaW5kb3coKQoreworICAgIC8vIE5vdCBpbXBsZW1l
bnRlZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBEUlREZXZUb29sc0Ns
aWVudDo6YXN5bmNDYWxsKGNvbnN0IERSVERldlRvb2xzQ2FsbEFyZ3MmIGFyZ3MpCit7CisgICAg
d2Via2l0X3N1cHBvcnQ6OlBvc3RUYXNrRnJvbUhlcmUoCisgICAgICAgIG1fY2FsbE1ldGhvZEZh
Y3RvcnkuTmV3UnVubmFibGVNZXRob2QoJkRSVERldlRvb2xzQ2xpZW50OjpjYWxsLCBhcmdzKSk7
Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OmNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxs
QXJncyYgYXJncykKK3sKKyAgICBtX3dlYkRldlRvb2xzRnJvbnRlbmQtPmRpc3BhdGNoTWVzc2Fn
ZUZyb21BZ2VudChhcmdzLm1fZGF0YSk7CisgICAgaWYgKERSVERldlRvb2xzQ2FsbEFyZ3M6OmNh
bGxzQ291bnQoKSA9PSAxKQorICAgICAgICBhbGxNZXNzYWdlc1Byb2Nlc3NlZCgpOworfQorCit2
b2lkIERSVERldlRvb2xzQ2xpZW50OjphbGxNZXNzYWdlc1Byb2Nlc3NlZCgpCit7CisgICAgbV93
ZWJWaWV3LT5tYWluRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdCgKKyAgICAgICAgV2ViS2l0OjpXZWJT
Y3JpcHRTb3VyY2UoV2ViU3RyaW5nOjpmcm9tVVRGOCgKKyAgICAgICAgICAgICJpZiAod2luZG93
LldlYkluc3BlY3RvciAmJiBXZWJJbnNwZWN0b3IucXVldWVzQXJlRW1wdHkpIFdlYkluc3BlY3Rv
ci5xdWV1ZXNBcmVFbXB0eSgpOyIpKSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NsaWVudC5oIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMDg2NDRiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaApAQCAtMCwwICsx
LDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBEUlREZXZUb29sc0NsaWVudF9oCisjZGVmaW5lIERSVERldlRvb2xzQ2xp
ZW50X2gKKworI2luY2x1ZGUgImJhc2UvdGFzay5oIiAvLyBGSVhNRTogcmVtb3ZlIHRoaXMKKyNp
bmNsdWRlICJwdWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZENsaWVudC5oIgorI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFdlYkRldlRvb2xzRnJvbnRlbmQ7CitzdHJ1Y3QgV2ViRGV2VG9vbHNN
ZXNzYWdlRGF0YTsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdlYlZpZXc7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdzOworY2xhc3MgRFJURGV2
VG9vbHNBZ2VudDsKKworY2xhc3MgRFJURGV2VG9vbHNDbGllbnQgOiBwdWJsaWMgV2ViS2l0OjpX
ZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICAsIHB1Ymxp
YyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgRFJURGV2VG9vbHNDbGllbnQoRFJURGV2VG9v
bHNBZ2VudCosIFdlYktpdDo6V2ViVmlldyopOworICAgIHZpcnR1YWwgfkRSVERldlRvb2xzQ2xp
ZW50KCk7CisKKyAgICAvLyBXZWJEZXZUb29sc0Zyb250ZW5kQ2xpZW50IGltcGxlbWVudGF0aW9u
CisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNzYWdlVG9BZ2VudChjb25zdCBXZWJLaXQ6OldlYkRl
dlRvb2xzTWVzc2FnZURhdGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2VuZERlYnVnZ2VyQ29tbWFu
ZFRvQWdlbnQoY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGNvbW1hbmQpOworCisgICAgdmlydHVh
bCB2b2lkIGFjdGl2YXRlV2luZG93KCk7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93KCk7
CisgICAgdmlydHVhbCB2b2lkIGRvY2tXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5kb2Nr
V2luZG93KCk7CisKKyAgICB2b2lkIGFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdz
Jik7CisKKyAgICB2b2lkIGFsbE1lc3NhZ2VzUHJvY2Vzc2VkKCk7CisKKyBwcml2YXRlOgorICAg
IHZvaWQgY2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzJik7CisKKyAgICBTY29wZWRSdW5u
YWJsZU1ldGhvZEZhY3Rvcnk8RFJURGV2VG9vbHNDbGllbnQ+IG1fY2FsbE1ldGhvZEZhY3Rvcnk7
CisgICAgV2ViS2l0OjpXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgRFJURGV2VG9vbHNBZ2VudCog
bV9kcnREZXZUb29sc0FnZW50OworICAgIFdURjo6T3duUHRyPFdlYktpdDo6V2ViRGV2VG9vbHNG
cm9udGVuZD4gbV93ZWJEZXZUb29sc0Zyb250ZW5kOworfTsKKworI2VuZGlmIC8vIERSVERldlRv
b2xzQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0V2ZW50U2VuZGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0V2ZW50U2VuZGVyLmNwcAppbmRleCBmZDdiYTJkLi41YTgwZTBkCi0tLSBhL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0V2ZW50U2VuZGVyLmNwcAorKysgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9FdmVudFNlbmRlci5jcHAKQEAgLTU4LDcgKzU4LDcg
QEAKIAogI2lmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSAicHVibGljL3dpbi9XZWJJbnB1dEV2ZW50
RmFjdG9yeS5oIgotI2VuZGlmCisjZW5kaWYgLy8gT1MoV0lORE9XUykKIAogLy8gRklYTUU6IGxh
eW91dCBiZWZvcmUgZWFjaCBldmVudD8KIApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDli
YTY0MjEuLmNiODY5M2QKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCiAKKyNp
bmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAjaW5j
bHVkZSAiV2ViVmlld0hvc3QuaCIKICNpbmNsdWRlICJiYXNlL3N0cmluZ191dGlsLmgiCkBAIC05
NSw2ICs5Niw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcihU
ZXN0U2hlbGwqIHNoZWxsKQogICAgIGJpbmRNZXRob2QoIm9iakNJZGVudGl0eUlzRXF1YWwiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om9iakNJZGVudGl0eUlzRXF1YWwpOwogICAgIGJpbmRNZXRo
b2QoInNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEFs
d2F5c0FjY2VwdENvb2tpZXMpOwogICAgIGJpbmRNZXRob2QoInNob3dXZWJJbnNwZWN0b3IiLCAm
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOworICAgIGJpbmRNZXRob2Qo
ImNsb3NlV2ViSW5zcGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpjbG9zZVdlYkluc3Bl
Y3Rvcik7CiAgICAgYmluZE1ldGhvZCgic2V0V2luZG93SXNLZXkiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldFdpbmRvd0lzS2V5KTsKICAgICBiaW5kTWV0aG9kKCJzZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyk7CiAgICAgYmluZE1ldGhvZCgic2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
biIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbik7CkBA
IC01NTUsNiArNTU3LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNw
ZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCoKICAgICByZXN1bHQtPnNl
dE51bGwoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xvc2VXZWJJbnNwZWN0
b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgbV9zaGVsbC0+Y2xvc2VEZXZUb29scygpOworICAgIHJlc3VsdC0+c2V0TnVsbCgpOworfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShjb25zdCBDcHBBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1
bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCkBAIC0xMjQ1LDcgKzEy
NTMsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUaW1lbGluZVByb2ZpbGluZ0Vu
YWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcgogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwog
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBdLmlzQm9vbCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IFNob3VsZCBjYWxsIFRlc3RTaGVsbERldlRv
b2xzQWdlbnQ6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCgpLgorICAgIG1fc2hlbGwtPmRy
dERldlRvb2xzQWdlbnQoKS0+c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGFyZ3VtZW50c1sw
XS50b0Jvb2xlYW4oKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
SW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlh
bnQqIHJlc3VsdCkKQEAgLTEyNTMsNyArMTI2MSw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
CiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPCAyIHx8
ICFhcmd1bWVudHNbMF0uaXNJbnQzMigpIHx8ICFhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBTaG91bGQgY2FsbCBUZXN0U2hlbGxEZXZUb29s
c0FnZW50OjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCkuCisgICAgbV9zaGVsbC0+ZHJ0RGV2VG9v
bHNBZ2VudCgpLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGFyZ3VtZW50c1swXS50b0ludDMyKCks
IGFyZ3VtZW50c1sxXS50b1N0cmluZygpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCmluZGV4IDIyNzQxZDUu
LjVkNjU3MjYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMTI5LDYgKzEyOSw3IEBAIHB1Ymxp
YzoKIAogICAgIC8vIFNob3dzIERldlRvb2xzIHdpbmRvdy4KICAgICB2b2lkIHNob3dXZWJJbnNw
ZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOworICAgIHZvaWQgY2xv
c2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAg
ICAgLy8gR2l2ZXMgZm9jdXMgdG8gdGhlIHdpbmRvdy4KICAgICB2b2lkIHNldFdpbmRvd0lzS2V5
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4IDUyZjFlN2QuLmE0
YjE2MWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlRlc3RTaGVsbC5oIgogCisjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgorI2luY2x1
ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVzdENvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJXZWJWaWV3SG9zdC5oIgogI2luY2x1ZGUgImJhc2UvbWQ1LmgiIC8vIEZJ
WE1FOiBXcmFwIGJ5IHdlYmtpdF9zdXBwb3J0LgpAQCAtODEsNiArODMsNyBAQCBUZXN0U2hlbGw6
OlRlc3RTaGVsbChib29sIHRlc3RTaGVsbE1vZGUpCiAgICAgLCBtX2ZvY3VzZWRXaWRnZXQoMCkK
ICAgICAsIG1fdGVzdFNoZWxsTW9kZSh0ZXN0U2hlbGxNb2RlKQogICAgICwgbV9hbGxvd0V4dGVy
bmFsUGFnZXMoZmFsc2UpCisgICAgLCBtX2RldlRvb2xzKDApCiB7CiAgICAgV2ViUnVudGltZUZl
YXR1cmVzOjplbmFibGVHZW9sb2NhdGlvbih0cnVlKTsKICAgICBtX2FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLnNldChuZXcgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIodGhpcykpOwpAQCAtOTcsMTIg
KzEwMCwxNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbChib29sIHRlc3RTaGVsbE1vZGUpCiAgICAg
Ly8gdGltZWQtb3V0IERSVCBwcm9jZXNzIHdhcyBjcmFzaGVkLgogICAgIG1fdGltZW91dCA9IDMw
ICogMTAwMDsKIAorICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC5zZXQobmV3IERSVERldlRvb2xzQWdl
bnQpOwogICAgIG1fd2ViVmlld0hvc3QgPSBjcmVhdGVXZWJWaWV3KCk7CiAgICAgbV93ZWJWaWV3
ID0gbV93ZWJWaWV3SG9zdC0+d2ViVmlldygpOworICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC0+c2V0
V2ViVmlldyhtX3dlYlZpZXcpOwogfQogCiBUZXN0U2hlbGw6On5UZXN0U2hlbGwoKQogeworICAg
IC8vIE5vdGU6IERldlRvb2xzIGFyZSBjbG9zZWQgdG9nZXRoZXIgd2l0aCBhbGwgdGhlIG90aGVy
IHdpbmRvd3MgaW4gdGhlCisgICAgLy8gd2luZG93cyBsaXN0LgorCiAgICAgbG9hZFVSTChHVVJM
KCJhYm91dDpibGFuayIpKTsKICAgICAvLyBDYWxsIEdDIHR3aWNlIHRvIGNsZWFuIHVwIGdhcmJh
Z2UuCiAgICAgY2FsbEpTR0MoKTsKQEAgLTExMiw2ICsxMjAsMzQgQEAgVGVzdFNoZWxsOjp+VGVz
dFNoZWxsKCkKICAgICBtX3dlYlZpZXctPmNsb3NlKCk7CiB9CiAKK3ZvaWQgVGVzdFNoZWxsOjpj
cmVhdGVEUlREZXZUb29sc0NsaWVudChEUlREZXZUb29sc0FnZW50KiBhZ2VudCkKK3sKKyAgICBt
X2RydERldlRvb2xzQ2xpZW50LnNldChuZXcgRFJURGV2VG9vbHNDbGllbnQoYWdlbnQsIG1fZGV2
VG9vbHMtPndlYlZpZXcoKSkpOworfQorCit2b2lkIFRlc3RTaGVsbDo6c2hvd0RldlRvb2xzKCkK
K3sKKyAgICBpZiAoIW1fZGV2VG9vbHMpIHsKKyAgICAgICAgV2ViVVJMIHVybCA9IHdlYmtpdF9z
dXBwb3J0OjpHZXREZXZUb29sc1BhdGhBc1VSTCgpOworICAgICAgICBpZiAoIXVybC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgbV9kZXZUb29scyA9IGNyZWF0ZU5ld1dpbmRvdyh1cmwpOworICAg
ICAgICBBU1NFUlQobV9kZXZUb29scyk7CisgICAgICAgIGNyZWF0ZURSVERldlRvb2xzQ2xpZW50
KG1fZHJ0RGV2VG9vbHNBZ2VudC5nZXQoKSk7CisgICAgfQorICAgIG1fZGV2VG9vbHMtPnNob3co
V2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5TmV3V2luZG93KTsKK30KKwordm9pZCBUZXN0U2hl
bGw6OmNsb3NlRGV2VG9vbHMoKQoreworICAgIGlmIChtX2RldlRvb2xzKSB7CisgICAgICAgIGNs
b3NlV2luZG93KG1fZGV2VG9vbHMpOworICAgICAgICBtX2RldlRvb2xzID0gMDsKKyAgICB9Cit9
CisKIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcmIHdlYlZpZXcpCiB7
CiAgICAgLy8gTWF0Y2ggdGhlIHNldHRpbmdzIHVzZWQgYnkgTWFjIER1bXBSZW5kZXJUcmVlLCB3
aXRoIHRoZSBleGNlcHRpb24gb2YKQEAgLTIwNiw2ICsyNDIsOSBAQCB2b2lkIFRlc3RTaGVsbDo6
cnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYgcGFyYW1zKQogICAgICAgICB8fCB0ZXN0VXJs
LmZpbmQoImxvYWRpbmdcXCIpICE9IHN0cmluZzo6bnBvcykKICAgICAgICAgbV9sYXlvdXRUZXN0
Q29udHJvbGxlci0+c2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0cnVlKTsKIAorICAg
IGlmIChpbnNwZWN0b3JUZXN0TW9kZSkKKyAgICAgICAgc2hvd0RldlRvb2xzKCk7CisKICAgICBt
X3ByaW50ZXItPmhhbmRsZVRlc3RIZWFkZXIodGVzdFVybC5jX3N0cigpKTsKICAgICBsb2FkVVJM
KG1fcGFyYW1zLnRlc3RVcmwpOwogCkBAIC01ODYsNyArNjI1LDcgQEAgV2ViVmlld0hvc3QqIFRl
c3RTaGVsbDo6Y3JlYXRlV2ViVmlldygpCiBXZWJWaWV3SG9zdCogVGVzdFNoZWxsOjpjcmVhdGVO
ZXdXaW5kb3coY29uc3QgV2ViVVJMJiB1cmwpCiB7CiAgICAgV2ViVmlld0hvc3QqIGhvc3QgPSBu
ZXcgV2ViVmlld0hvc3QodGhpcyk7Ci0gICAgV2ViVmlldyogdmlldyA9IFdlYlZpZXc6OmNyZWF0
ZShob3N0LCAwKTsKKyAgICBXZWJWaWV3KiB2aWV3ID0gV2ViVmlldzo6Y3JlYXRlKGhvc3QsIG1f
ZHJ0RGV2VG9vbHNBZ2VudC5nZXQoKSk7CiAgICAgaG9zdC0+c2V0V2ViV2lkZ2V0KHZpZXcpOwog
ICAgIHJlc2V0V2ViU2V0dGluZ3MoKnZpZXcpOwogICAgIHZpZXctPmluaXRpYWxpemVNYWluRnJh
bWUoaG9zdCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGwuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5oCmluZGV4IDIzOTcyNDYuLjBmNzRlZTEKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTI4LDYgKzI4LDkgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAorI2lmbmRlZiBUZXN0U2hlbGxfaAorI2RlZmluZSBUZXN0U2hlbGxfaAorCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFdmVudFNlbmRlci5o
IgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCkBAIC00NCw2ICs0Nyw3IEBACiAv
LyB2YXJpb3VzIG9iamVjdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGNyZWF0ZWQgaW4gb25lIERS
VCBwcm9jZXNzLgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkRldlRvb2xzQWdlbnRD
bGllbnQ7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsK
IGNsYXNzIFdlYlByZWZlcmVuY2VzOwpAQCAtNTQsNiArNTgsMTAgQEAgbmFtZXNwYWNlIHNraWEg
ewogY2xhc3MgUGxhdGZvcm1DYW52YXM7CiB9CiAKK2NsYXNzIERSVERldlRvb2xzQWdlbnQ7Citj
bGFzcyBEUlREZXZUb29sc0NhbGxBcmdzOworY2xhc3MgRFJURGV2VG9vbHNDbGllbnQ7CisKIHN0
cnVjdCBUZXN0UGFyYW1zIHsKICAgICBib29sIGR1bXBUcmVlOwogICAgIGJvb2wgZHVtcFBpeGVs
czsKQEAgLTczLDYgKzgxLDcgQEAgY2xhc3MgVGVzdFNoZWxsIHsKIHB1YmxpYzoKICAgICBUZXN0
U2hlbGwoYm9vbCB0ZXN0U2hlbGxNb2RlKTsKICAgICB+VGVzdFNoZWxsKCk7CisKICAgICAvLyBU
aGUgbWFpbiBXZWJWaWV3LgogICAgIFdlYktpdDo6V2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsg
cmV0dXJuIG1fd2ViVmlldzsgfQogICAgIC8vIFJldHVybnMgdGhlIGhvc3QgZm9yIHRoZSBtYWlu
IFdlYlZpZXcuCkBAIC0xMjYsMTEgKzEzNSwxOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbG9zZVJl
bWFpbmluZ1dpbmRvd3MoKTsKICAgICBpbnQgd2luZG93Q291bnQoKTsKICAgICBzdGF0aWMgdm9p
ZCByZXNpemVXaW5kb3dGb3JUZXN0KFdlYlZpZXdIb3N0KiwgY29uc3QgV2ViS2l0OjpXZWJVUkwm
KTsKLSAgICB2b2lkIHNob3dEZXZUb29scygpIHt9IC8vIEZJWE1FOiBpbWVwbGVtZW50IHRoaXMu
CisKKyAgICB2b2lkIHNob3dEZXZUb29scygpOworICAgIHZvaWQgY2xvc2VEZXZUb29scygpOwor
CisgICAgRFJURGV2VG9vbHNBZ2VudCogZHJ0RGV2VG9vbHNBZ2VudCgpIHsgcmV0dXJuIG1fZHJ0
RGV2VG9vbHNBZ2VudC5nZXQoKTsgfQorICAgIERSVERldlRvb2xzQ2xpZW50KiBkcnREZXZUb29s
c0NsaWVudCgpIHsgcmV0dXJuIG1fZHJ0RGV2VG9vbHNDbGllbnQuZ2V0KCk7IH0KIAogICAgIHN0
YXRpYyBjb25zdCBpbnQgdmlydHVhbFdpbmRvd0JvcmRlciA9IDM7CiAKIHByaXZhdGU6CisgICAg
dm9pZCBjcmVhdGVEUlREZXZUb29sc0NsaWVudChEUlREZXZUb29sc0FnZW50Kik7CisKICAgICBz
dGF0aWMgdm9pZCByZXNldFdlYlNldHRpbmdzKFdlYktpdDo6V2ViVmlldyYpOwogICAgIHZvaWQg
ZHVtcCgpOwogICAgIHN0ZDo6c3RyaW5nIGR1bXBBbGxCYWNrRm9yd2FyZExpc3RzKCk7CkBAIC0x
NDMsNiArMTU5LDkgQEAgcHJpdmF0ZToKICAgICBXZWJLaXQ6OldlYldpZGdldCogbV9mb2N1c2Vk
V2lkZ2V0OwogICAgIGJvb2wgbV90ZXN0U2hlbGxNb2RlOwogICAgIFdlYlZpZXdIb3N0KiBtX3dl
YlZpZXdIb3N0OworICAgIFdlYlZpZXdIb3N0KiBtX2RldlRvb2xzOworICAgIE93blB0cjxEUlRE
ZXZUb29sc0FnZW50PiBtX2RydERldlRvb2xzQWdlbnQ7CisgICAgT3duUHRyPERSVERldlRvb2xz
Q2xpZW50PiBtX2RydERldlRvb2xzQ2xpZW50OwogICAgIE93blB0cjxBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcj4gbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjsKICAgICBPd25QdHI8RXZlbnRTZW5k
ZXI+IG1fZXZlbnRTZW5kZXI7CiAgICAgT3duUHRyPExheW91dFRlc3RDb250cm9sbGVyPiBtX2xh
eW91dFRlc3RDb250cm9sbGVyOwpAQCAtMTY2LDMgKzE4NSw1IEBAIHByaXZhdGU6CiB9OwogCiB2
b2lkIHBsYXRmb3JtSW5pdCgpOworCisjZW5kaWYgLy8gVGVzdFNoZWxsX2gKZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5oIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29uZmlnLmgKaW5kZXggNjAyOTUzMi4uN2RmZGEx
OAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaAorKysg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcuaApAQCAtNDQsOCAr
NDQsMTAgQEAKIAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0vLyBKU19FWFBPUlREQVRB
IGlzIG5lZWRlZCB0byBpbmx1Y2RlIHd0Zi9XVEZTdHJpbmcuaC4KICNpZiBPUyhXSU5ET1dTKSAm
JiAhQ09NUElMRVIoR0NDKQorLy8gQWxsb3cgJ3RoaXMnIHRvIGJlIHVzZWQgaW4gYmFzZSBtZW1i
ZXIgaW5pdGlhbGl6ZXIgbGlzdC4KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlIDogNDM1NSkKKy8v
IEpTX0VYUE9SVERBVEEgaXMgbmVlZGVkIHRvIGlubHVjZGUgd3RmL1dURlN0cmluZy5oLgogI2Rl
ZmluZSBKU19FWFBPUlREQVRBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQogI2Vsc2UKICNkZWZpbmUg
SlNfRVhQT1JUREFUQQo=
</data>
<flag name="review"
          id="48210"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60619</attachid>
            <date>2010-07-06 04:52:56 -0700</date>
            <delta_ts>2010-07-06 05:11:18 -0700</delta_ts>
            <desc>patch - snapshot of current state (cleaned up, removed webkit.gyp modification)</desc>
            <filename>devtools4.patch</filename>
            <type>text/plain</type>
            <size>34568</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA2MmFkMTkwLi43MTdiYTdiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIgQEAKKzIwMTAtMDct
MDUgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQwNTU4IC0gW0RS
VC9DaHJvbWl1bV0gVXBzdHJlYW0gVGVzdFNoZWxsRGV2VG9vbHMgZm9yIENocm9taXVtIERSVAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA1NTgKKwor
ICAgICAgICBVcHN0cmVhbSBEZXZUb29scyBmb3IgQ2hyb21pdW0gRFJULgorICAgICAgICAob3Jp
Z2luYWwgQ2hyb21pdW0gZmlsZXMgcmV2LiA1MTI4NykKKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLmd5cGk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRFJURGV2VG9vbHNBZ2VudC5jcHA6IEFkZGVkLgorICAgICAgICAoRFJURGV2VG9vbHNBZ2Vu
dDo6RFJURGV2VG9vbHNBZ2VudCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpzZXRXZWJW
aWV3KToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OnNlbmRNZXNzYWdlVG9Gcm9udGVuZCk6
CisgICAgICAgIChEUlREZXZUb29sc0FnZW50Ojpmb3JjZVJlcGFpbnQpOgorICAgICAgICAoRFJU
RGV2VG9vbHNBZ2VudDo6cnVudGltZUZlYXR1cmVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoRFJU
RGV2VG9vbHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoRFJURGV2VG9v
bHNBZ2VudDo6aW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKToKKyAgICAgICAgKERSVERl
dlRvb2xzQWdlbnQ6OmRlYnVnZ2VyU2NyaXB0U291cmNlKToKKyAgICAgICAgKERSVERldlRvb2xz
QWdlbnQ6OmFzeW5jQ2FsbCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpjYWxsKToKKyAg
ICAgICAgKERSVERldlRvb2xzQWdlbnQ6OndlYkRldlRvb2xzQWdlbnQpOgorICAgICAgICAoRFJU
RGV2VG9vbHNBZ2VudDo6YXR0YWNoKToKKyAgICAgICAgKERSVERldlRvb2xzQWdlbnQ6OmRldGFj
aCk6CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJs
ZWQpOgorICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik6
CisgICAgICAgIChEUlREZXZUb29sc0FnZW50OjpkaXNwYXRjaE1lc3NhZ2VMb29wKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50Lmg6IEFkZGVkLgor
ICAgICAgICAoRFJURGV2VG9vbHNBZ2VudDo6fkRSVERldlRvb2xzQWdlbnQpOgorICAgICAgICAo
RFJURGV2VG9vbHNBZ2VudDo6aG9zdElkZW50aWZpZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuY3BwOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuaDoKKyAgICAgICAgKERSVERldlRv
b2xzQ2FsbEFyZ3M6OkRSVERldlRvb2xzQ2FsbEFyZ3MpOgorICAgICAgICAoRFJURGV2VG9vbHND
YWxsQXJnczo6fkRSVERldlRvb2xzQ2FsbEFyZ3MpOgorICAgICAgICAoRFJURGV2VG9vbHNDYWxs
QXJnczo6Y2FsbHNDb3VudCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJU
RGV2VG9vbHNDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50OjpE
UlREZXZUb29sc0NsaWVudCk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6fkRSVERldlRv
b2xzQ2xpZW50KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50OjpzZW5kTWVzc2FnZVRvQWdl
bnQpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OnNlbmREZWJ1Z2dlckNvbW1hbmRUb0Fn
ZW50KToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50OjphY3RpdmF0ZVdpbmRvdyk6CisgICAg
ICAgIChEUlREZXZUb29sc0NsaWVudDo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoRFJURGV2VG9v
bHNDbGllbnQ6OmRvY2tXaW5kb3cpOgorICAgICAgICAoRFJURGV2VG9vbHNDbGllbnQ6OnVuZG9j
a1dpbmRvdyk6CisgICAgICAgIChEUlREZXZUb29sc0NsaWVudDo6YXN5bmNDYWxsKToKKyAgICAg
ICAgKERSVERldlRvb2xzQ2xpZW50OjpjYWxsKToKKyAgICAgICAgKERSVERldlRvb2xzQ2xpZW50
OjphbGxNZXNzYWdlc1Byb2Nlc3NlZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vRFJURGV2VG9vbHNDbGllbnQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9FdmVudFNlbmRlci5jcHA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6Okxh
eW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjbG9z
ZVdlYkluc3BlY3Rvcik6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VGltZWxp
bmVQcm9maWxpbmdFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFs
dWF0ZUluV2ViSW5zcGVjdG9yKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbC5jcHA6CisgICAgICAgIChUZXN0U2hlbGw6OlRlc3RTaGVsbCk6CisgICAgICAg
IChUZXN0U2hlbGw6On5UZXN0U2hlbGwpOgorICAgICAgICAoVGVzdFNoZWxsOjpjcmVhdGVEUlRE
ZXZUb29sc0NsaWVudCk6CisgICAgICAgIChUZXN0U2hlbGw6OnNob3dEZXZUb29scyk6CisgICAg
ICAgIChUZXN0U2hlbGw6OmNsb3NlRGV2VG9vbHMpOgorICAgICAgICAoVGVzdFNoZWxsOjpydW5G
aWxlVGVzdCk6CisgICAgICAgIChUZXN0U2hlbGw6OmNyZWF0ZU5ld1dpbmRvdyk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgIChUZXN0U2hl
bGw6OmRydERldlRvb2xzQWdlbnQpOgorICAgICAgICAoVGVzdFNoZWxsOjpkcnREZXZUb29sc0Ns
aWVudCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29uZmlnLmg6CisKIDIw
MTAtMDctMDUgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IDVmYzhkYWIuLmE1MjU1MzIKLS0tIGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQorKysgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCkBAIC05LDYgKzksMTIgQEAKICAg
ICAgICAgICAgICdjaHJvbWl1bS9DcHBCb3VuZENsYXNzLmgnLAogICAgICAgICAgICAgJ2Nocm9t
aXVtL0NwcFZhcmlhbnQuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9DcHBWYXJpYW50Lmgn
LAorICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQWdlbnQuY3BwJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgnLAorICAgICAgICAgICAgJ2Nocm9taXVt
L0RSVERldlRvb2xzQ2FsbEFyZ3MuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9EUlREZXZU
b29sc0NhbGxBcmdzLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50
LmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuaCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vRHVtcFJlbmRlclRyZWUuY3BwJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9FdmVudFNlbmRlci5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL0V2ZW50U2VuZGVy
LmgnLApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJU
RGV2VG9vbHNBZ2VudC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9E
UlREZXZUb29sc0FnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
ZmY3N2EwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vRFJURGV2VG9vbHNBZ2VudC5jcHAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2VudC5oIgorCisjaW5jbHVkZSAiRFJURGV2
VG9vbHNDYWxsQXJncy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCisKKyNpbmNs
dWRlICJwdWJsaWMvV2ViQ1N0cmluZy5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0Fn
ZW50LmgiCisjaW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzTWVzc2FnZURhdGEuaCIKKyNpbmNs
dWRlICJwdWJsaWMvV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNp
bmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCitEUlREZXZUb29sc0FnZW50OjpEUlREZXZUb29sc0FnZW50KCkKKyAgICA6
IG1fY2FsbE1ldGhvZEZhY3RvcnkodGhpcykKKyAgICAsIG1fZHJ0RGV2VG9vbHNDbGllbnQoMCkK
KyAgICAsIG1fd2ViVmlldygwKQoreworICAgIHN0YXRpYyBpbnQgZGV2VG9vbHNBZ2VudENvdW50
ZXIgPSAwOworCisgICAgbV9yb3V0aW5nSUQgPSArK2RldlRvb2xzQWdlbnRDb3VudGVyOworICAg
IGlmIChtX3JvdXRpbmdJRCA9PSAxKQorICAgICAgICBXZWJEZXZUb29sc0FnZW50OjpzZXRNZXNz
YWdlTG9vcERpc3BhdGNoSGFuZGxlcigmRFJURGV2VG9vbHNBZ2VudDo6ZGlzcGF0Y2hNZXNzYWdl
TG9vcCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6c2V0V2ViVmlldyhXZWJWaWV3KiB3
ZWJWaWV3KQoreworICAgIG1fd2ViVmlldyA9IHdlYlZpZXc7Cit9CisKK3ZvaWQgRFJURGV2VG9v
bHNBZ2VudDo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZURh
dGEmIGRhdGEpCit7CisgICAgaWYgKG1fZHJ0RGV2VG9vbHNDbGllbnQpCisgICAgICAgICBtX2Ry
dERldlRvb2xzQ2xpZW50LT5hc3luY0NhbGwoRFJURGV2VG9vbHNDYWxsQXJncyhkYXRhKSk7Cit9
CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6Zm9yY2VSZXBhaW50KCkKK3sKK30KKwordm9pZCBE
UlREZXZUb29sc0FnZW50OjpydW50aW1lRmVhdHVyZVN0YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6
OldlYlN0cmluZyYgZmVhdHVyZSwgYm9vbCBlbmFibGVkKQoreworICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgdGhpcy4KK30KKworV2ViQ1N0cmluZyBEUlREZXZUb29sc0FnZW50OjppbmplY3RlZFNj
cmlwdFNvdXJjZSgpCit7CisgICAgcmV0dXJuIHdlYmtpdF9zdXBwb3J0OjpHZXREZXZUb29sc0lu
amVjdGVkU2NyaXB0U291cmNlKCk7Cit9CisKK1dlYkNTdHJpbmcgRFJURGV2VG9vbHNBZ2VudDo6
aW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCkKK3sKKyAgICByZXR1cm4gd2Via2l0X3N1
cHBvcnQ6OkdldERldlRvb2xzSW5qZWN0ZWRTY3JpcHREaXNwYXRjaGVyU291cmNlKCk7Cit9CisK
K1dlYkNTdHJpbmcgRFJURGV2VG9vbHNBZ2VudDo6ZGVidWdnZXJTY3JpcHRTb3VyY2UoKQorewor
ICAgIHJldHVybiB3ZWJraXRfc3VwcG9ydDo6R2V0RGV2VG9vbHNEZWJ1Z2dlclNjcmlwdFNvdXJj
ZSgpOworfQorCit2b2lkIERSVERldlRvb2xzQWdlbnQ6OmFzeW5jQ2FsbChjb25zdCBEUlREZXZU
b29sc0NhbGxBcmdzICZhcmdzKQoreworICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0VGFza0Zyb21I
ZXJlKAorICAgICAgICBtX2NhbGxNZXRob2RGYWN0b3J5Lk5ld1J1bm5hYmxlTWV0aG9kKCZEUlRE
ZXZUb29sc0FnZW50OjpjYWxsLCBhcmdzKSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNBZ2VudDo6
Y2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzICZhcmdzKQoreworICAgIFdlYkRldlRvb2xz
QWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmIChhZ2VudCkKKyAgICAg
ICAgYWdlbnQtPmRpc3BhdGNoTWVzc2FnZUZyb21Gcm9udGVuZChhcmdzLm1fZGF0YSk7CisgICAg
aWYgKERSVERldlRvb2xzQ2FsbEFyZ3M6OmNhbGxzQ291bnQoKSA9PSAxICYmIG1fZHJ0RGV2VG9v
bHNDbGllbnQpCisgICAgICAgIG1fZHJ0RGV2VG9vbHNDbGllbnQtPmFsbE1lc3NhZ2VzUHJvY2Vz
c2VkKCk7Cit9CisKK1dlYkRldlRvb2xzQWdlbnQqIERSVERldlRvb2xzQWdlbnQ6OndlYkRldlRv
b2xzQWdlbnQoKQoreworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbV93ZWJWaWV3LT5kZXZUb29sc0FnZW50KCk7Cit9CisKK3ZvaWQgRFJURGV2VG9v
bHNBZ2VudDo6YXR0YWNoKERSVERldlRvb2xzQ2xpZW50KiBjbGllbnQpCit7CisgICAgQVNTRVJU
KCFtX2RydERldlRvb2xzQ2xpZW50KTsKKyAgICBtX2RydERldlRvb2xzQ2xpZW50ID0gY2xpZW50
OworICAgIFdlYkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAg
IGlmIChhZ2VudCkKKyAgICAgICAgYWdlbnQtPmF0dGFjaCgpOworfQorCit2b2lkIERSVERldlRv
b2xzQWdlbnQ6OmRldGFjaChEUlREZXZUb29sc0NsaWVudCogY2xpZW50KQoreworICAgIEFTU0VS
VChtX2RydERldlRvb2xzQ2xpZW50KTsKKyAgICBXZWJEZXZUb29sc0FnZW50KiBhZ2VudCA9IHdl
YkRldlRvb2xzQWdlbnQoKTsKKyAgICBpZiAoYWdlbnQpCisgICAgICAgIGFnZW50LT5kZXRhY2go
KTsKKyAgICBtX2RydERldlRvb2xzQ2xpZW50ID0gMDsKK30KKworYm9vbCBEUlREZXZUb29sc0Fn
ZW50OjpzZXRUaW1lbGluZVByb2ZpbGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIFdl
YkRldlRvb2xzQWdlbnQqIGFnZW50ID0gd2ViRGV2VG9vbHNBZ2VudCgpOworICAgIGlmICghYWdl
bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhZ2VudC0+c2V0VGltZWxpbmVQcm9maWxp
bmdFbmFibGVkKGVuYWJsZWQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIERSVERldlRv
b2xzQWdlbnQ6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6
c3RyaW5nJiBzY3JpcHQpCit7CisgICAgV2ViRGV2VG9vbHNBZ2VudCogYWdlbnQgPSB3ZWJEZXZU
b29sc0FnZW50KCk7CisgICAgaWYgKCFhZ2VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGFnZW50LT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGNhbGxJRCwgV2ViU3RyaW5nOjpmcm9tVVRG
OChzY3JpcHQpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gc3RhdGljIG1ldGhvZAordm9p
ZCBEUlREZXZUb29sc0FnZW50OjpkaXNwYXRjaE1lc3NhZ2VMb29wKCkKK3sKKyAgICB3ZWJraXRf
c3VwcG9ydDo6RGlzcGF0Y2hNZXNzYWdlTG9vcCgpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNBZ2VudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZmMxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0FnZW50LmgKQEAgLTAs
MCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRFJURGV2VG9vbHNBZ2VudF9oCisjZGVmaW5lIERSVERldlRvb2xz
QWdlbnRfaAorCisjaW5jbHVkZSAiYmFzZS90YXNrLmgiIC8vIEZJWE1FOiByZW1vdmUgdGhpcwor
I2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0FnZW50Q2xpZW50LmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJDU3RyaW5n
OworY2xhc3MgV2ViRGV2VG9vbHNBZ2VudDsKK2NsYXNzIFdlYlZpZXc7CitzdHJ1Y3QgV2ViRGV2
VG9vbHNNZXNzYWdlRGF0YTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERSVERl
dlRvb2xzQ2FsbEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0NsaWVudDsKKworY2xhc3MgRFJURGV2
VG9vbHNBZ2VudCA6IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnRDbGllbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIERS
VERldlRvb2xzQWdlbnQoKTsKKyAgICB2aXJ0dWFsIH5EUlREZXZUb29sc0FnZW50KCkge30KKwor
ICAgIHZvaWQgc2V0V2ViVmlldyhXZWJLaXQ6OldlYlZpZXcqKTsKKworICAgIC8vIFdlYkRldlRv
b2xzQWdlbnRDbGllbnQgaW1wbGVtZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIHNlbmRNZXNz
YWdlVG9Gcm9udGVuZChjb25zdCBXZWJLaXQ6OldlYkRldlRvb2xzTWVzc2FnZURhdGEmKTsKKyAg
ICB2aXJ0dWFsIGludCBob3N0SWRlbnRpZmllcigpIHsgcmV0dXJuIG1fcm91dGluZ0lEOyB9Cisg
ICAgdmlydHVhbCB2b2lkIGZvcmNlUmVwYWludCgpOworICAgIHZpcnR1YWwgdm9pZCBydW50aW1l
RmVhdHVyZVN0YXRlQ2hhbmdlZChjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZmVhdHVyZSwgYm9v
bCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViQ1N0cmluZyBpbmplY3RlZFNjcmlw
dFNvdXJjZSgpOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGluamVjdGVkU2NyaXB0
RGlzcGF0Y2hlclNvdXJjZSgpOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJDU3RyaW5nIGRlYnVn
Z2VyU2NyaXB0U291cmNlKCk7CisKKyAgICB2b2lkIGFzeW5jQ2FsbChjb25zdCBEUlREZXZUb29s
c0NhbGxBcmdzJik7CisKKyAgICB2b2lkIGF0dGFjaChEUlREZXZUb29sc0NsaWVudCopOworICAg
IHZvaWQgZGV0YWNoKERSVERldlRvb2xzQ2xpZW50Kik7CisKKyAgICBib29sIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IobG9uZyBjYWxsSUQsIGNvbnN0IHN0ZDo6c3RyaW5nJiBzY3JpcHQpOworICAg
IGJvb2wgc2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVkKGJvb2wgZW5hYmxlKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIGNhbGwoY29uc3QgRFJURGV2VG9vbHNDYWxsQXJncyYpOworICAgIHN0YXRp
YyB2b2lkIGRpc3BhdGNoTWVzc2FnZUxvb3AoKTsKKyAgICBXZWJLaXQ6OldlYkRldlRvb2xzQWdl
bnQqIHdlYkRldlRvb2xzQWdlbnQoKTsKKworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9y
eTxEUlREZXZUb29sc0FnZW50PiBtX2NhbGxNZXRob2RGYWN0b3J5OworICAgIERSVERldlRvb2xz
Q2xpZW50KiBtX2RydERldlRvb2xzQ2xpZW50OworICAgIGludCBtX3JvdXRpbmdJRDsKKyAgICBX
ZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQqIG1fd2ViRGV2VG9vbHNBZ2VudDsKKyAgICBXZWJLaXQ6
OldlYlZpZXcqIG1fd2ViVmlldzsKK307CisKKyNlbmRpZiAvLyBEUlREZXZUb29sc0FnZW50X2gK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRv
b2xzQ2FsbEFyZ3MuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vRFJU
RGV2VG9vbHNDYWxsQXJncy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGFjZDZmNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVERldlRvb2xzQ2FsbEFyZ3MuY3BwCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxsQXJncy5oIgorCisvLyBzdGF0aWMK
K2ludCBEUlREZXZUb29sc0NhbGxBcmdzOjptX2NhbGxzQ291bnQgPSAwOworCmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxBcmdz
LmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29sc0NhbGxB
cmdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhM2Q0OAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRv
b2xzQ2FsbEFyZ3MuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEUlREZXZUb29sc0NhbGxBcmdz
X2gKKyNkZWZpbmUgRFJURGV2VG9vbHNDYWxsQXJnc19oCisKKyNpbmNsdWRlICJwdWJsaWMvV2Vi
RGV2VG9vbHNNZXNzYWdlRGF0YS5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJTdHJpbmcuaCIKKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdzIHsK
K3B1YmxpYzoKKyAgICBEUlREZXZUb29sc0NhbGxBcmdzKGNvbnN0IFdlYktpdDo6V2ViRGV2VG9v
bHNNZXNzYWdlRGF0YSYgZGF0YSkKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAg
ICAgICsrbV9jYWxsc0NvdW50OworCisgICAgICAgIC8vIFRoZSBzYW1lIGJlaGF2aW91ciBhcyB3
ZSBoYXZlIGluIGNhc2Ugb2YgSVBDLgorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
ZGF0YS5hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2RhdGEuYXJn
dW1lbnRzW2ldLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIG1fZGF0YS5hcmd1bWVudHNbaV0g
PSBXZWJLaXQ6OldlYlN0cmluZzo6ZnJvbVVURjgoIiIpOworICAgICAgICB9CisgICAgfQorCisg
ICAgRFJURGV2VG9vbHNDYWxsQXJncyhjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzJiBhcmdzKQor
ICAgICAgICA6IG1fZGF0YShhcmdzLm1fZGF0YSkKKyAgICB7CisgICAgICAgICsrbV9jYWxsc0Nv
dW50OworICAgIH0KKworICAgIH5EUlREZXZUb29sc0NhbGxBcmdzKCkKKyAgICB7CisgICAgICAg
IC0tbV9jYWxsc0NvdW50OworICAgICAgICBBU1NFUlQobV9jYWxsc0NvdW50ID49IDApOworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgY2FsbHNDb3VudCgpIHsgcmV0dXJuIG1fY2FsbHNDb3VudDsg
fQorCisgICAgV2ViS2l0OjpXZWJEZXZUb29sc01lc3NhZ2VEYXRhIG1fZGF0YTsKKworcHJpdmF0
ZToKKyAgICBzdGF0aWMgaW50IG1fY2FsbHNDb3VudDsKK307CisKKyNlbmRpZiAvLyBEUlREZXZU
b29sc0NhbGxBcmdzX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0RSVERldlRvb2xzQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi44ZWY5NjViCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vRFJURGV2VG9vbHNDbGllbnQuY3BwCkBAIC0wLDAgKzEsMTIwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCisKKyNp
bmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCisjaW5jbHVkZSAiRFJURGV2VG9vbHNDYWxsQXJn
cy5oIgorCisjaW5jbHVkZSAicHVibGljL1dlYkRldlRvb2xzQWdlbnQuaCIKKyNpbmNsdWRlICJw
dWJsaWMvV2ViRGV2VG9vbHNGcm9udGVuZC5oIgorI2luY2x1ZGUgInB1YmxpYy9XZWJGcmFtZS5o
IgorI2luY2x1ZGUgInB1YmxpYy9XZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRlICJwdWJsaWMv
V2ViU3RyaW5nLmgiCisjaW5jbHVkZSAicHVibGljL1dlYlZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJr
aXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owor
CitEUlREZXZUb29sc0NsaWVudDo6RFJURGV2VG9vbHNDbGllbnQoRFJURGV2VG9vbHNBZ2VudCog
YWdlbnQsIFdlYlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX2NhbGxNZXRob2RGYWN0b3J5KHRoaXMp
CisgICAgLCBtX2RydERldlRvb2xzQWdlbnQoYWdlbnQpCisgICAgLCBtX3dlYlZpZXcod2ViVmll
dykKK3sKKyAgICBtX3dlYkRldlRvb2xzRnJvbnRlbmQuc2V0KFdlYkRldlRvb2xzRnJvbnRlbmQ6
OmNyZWF0ZShtX3dlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJlbi1VUyIp
KSk7CisgICAgbV9kcnREZXZUb29sc0FnZW50LT5hdHRhY2godGhpcyk7Cit9CisKK0RSVERldlRv
b2xzQ2xpZW50Ojp+RFJURGV2VG9vbHNDbGllbnQoKQoreworICAgIC8vIFRoZXJlIGlzIGEgY2hh
bmNlIHRoYXQgdGhlIHBhZ2Ugd2lsbCBiZSBkZXN0cm95ZWQgYXQgZGV0YWNoIHN0ZXAgb2YKKyAg
ICAvLyBtX2RydERldlRvb2xzQWdlbnQgYW5kIHdlIHNob3VsZCBjbGVhbiBwZW5kaW5nIHJlcXVl
c3RzIGEgYml0IGVhcmxpZXIuCisgICAgbV9jYWxsTWV0aG9kRmFjdG9yeS5SZXZva2VBbGwoKTsK
KyAgICBpZiAobV9kcnREZXZUb29sc0FnZW50KQorICAgICAgICBtX2RydERldlRvb2xzQWdlbnQt
PmRldGFjaCh0aGlzKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6c2VuZE1lc3NhZ2VU
b0FnZW50KGNvbnN0IFdlYkRldlRvb2xzTWVzc2FnZURhdGEmIGRhdGEpCit7CisgICAgaWYgKG1f
ZHJ0RGV2VG9vbHNBZ2VudCkKKyAgICAgICAgbV9kcnREZXZUb29sc0FnZW50LT5hc3luY0NhbGwo
RFJURGV2VG9vbHNDYWxsQXJncyhkYXRhKSk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6
OnNlbmREZWJ1Z2dlckNvbW1hbmRUb0FnZW50KGNvbnN0IFdlYlN0cmluZyYgY29tbWFuZCkKK3sK
KyAgICBXZWJEZXZUb29sc0FnZW50OjpleGVjdXRlRGVidWdnZXJDb21tYW5kKGNvbW1hbmQsIDEp
OworfQorCit2b2lkIERSVERldlRvb2xzQ2xpZW50OjphY3RpdmF0ZVdpbmRvdygpCit7CisgICAg
Ly8gTm90IGltcGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IERSVERldlRvb2xzQ2xpZW50OjpjbG9zZVdpbmRvdygpCit7CisgICAgLy8gTm90IGltcGxlbWVu
dGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIERSVERldlRvb2xzQ2xp
ZW50Ojpkb2NrV2luZG93KCkKK3sKKyAgICAvLyBOb3QgaW1wbGVtZW50ZWQuCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OnVuZG9ja1dpbmRv
dygpCit7CisgICAgLy8gTm90IGltcGxlbWVudGVkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIERSVERldlRvb2xzQ2xpZW50Ojphc3luY0NhbGwoY29uc3QgRFJURGV2VG9v
bHNDYWxsQXJncyYgYXJncykKK3sKKyAgICB3ZWJraXRfc3VwcG9ydDo6UG9zdFRhc2tGcm9tSGVy
ZSgKKyAgICAgICAgbV9jYWxsTWV0aG9kRmFjdG9yeS5OZXdSdW5uYWJsZU1ldGhvZCgmRFJURGV2
VG9vbHNDbGllbnQ6OmNhbGwsIGFyZ3MpKTsKK30KKwordm9pZCBEUlREZXZUb29sc0NsaWVudDo6
Y2FsbChjb25zdCBEUlREZXZUb29sc0NhbGxBcmdzJiBhcmdzKQoreworICAgIG1fd2ViRGV2VG9v
bHNGcm9udGVuZC0+ZGlzcGF0Y2hNZXNzYWdlRnJvbUFnZW50KGFyZ3MubV9kYXRhKTsKKyAgICBp
ZiAoRFJURGV2VG9vbHNDYWxsQXJnczo6Y2FsbHNDb3VudCgpID09IDEpCisgICAgICAgIGFsbE1l
c3NhZ2VzUHJvY2Vzc2VkKCk7Cit9CisKK3ZvaWQgRFJURGV2VG9vbHNDbGllbnQ6OmFsbE1lc3Nh
Z2VzUHJvY2Vzc2VkKCkKK3sKKyAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2Ny
aXB0KAorICAgICAgICBXZWJLaXQ6OldlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4
KAorICAgICAgICAgICAgImlmICh3aW5kb3cuV2ViSW5zcGVjdG9yICYmIFdlYkluc3BlY3Rvci5x
dWV1ZXNBcmVFbXB0eSkgV2ViSW5zcGVjdG9yLnF1ZXVlc0FyZUVtcHR5KCk7IikpKTsKK30KZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0RSVERldlRvb2xz
Q2xpZW50LmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlREZXZUb29s
c0NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwODY0NGIKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9EUlRE
ZXZUb29sc0NsaWVudC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERSVERldlRvb2xzQ2xpZW50
X2gKKyNkZWZpbmUgRFJURGV2VG9vbHNDbGllbnRfaAorCisjaW5jbHVkZSAiYmFzZS90YXNrLmgi
IC8vIEZJWE1FOiByZW1vdmUgdGhpcworI2luY2x1ZGUgInB1YmxpYy9XZWJEZXZUb29sc0Zyb250
ZW5kQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViRGV2VG9vbHNGcm9u
dGVuZDsKK3N0cnVjdCBXZWJEZXZUb29sc01lc3NhZ2VEYXRhOworY2xhc3MgV2ViU3RyaW5nOwor
Y2xhc3MgV2ViVmlldzsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK2NsYXNzIERSVERldlRv
b2xzQ2FsbEFyZ3M7CitjbGFzcyBEUlREZXZUb29sc0FnZW50OworCitjbGFzcyBEUlREZXZUb29s
c0NsaWVudCA6IHB1YmxpYyBXZWJLaXQ6OldlYkRldlRvb2xzRnJvbnRlbmRDbGllbnQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICwgcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBE
UlREZXZUb29sc0NsaWVudChEUlREZXZUb29sc0FnZW50KiwgV2ViS2l0OjpXZWJWaWV3Kik7Cisg
ICAgdmlydHVhbCB+RFJURGV2VG9vbHNDbGllbnQoKTsKKworICAgIC8vIFdlYkRldlRvb2xzRnJv
bnRlbmRDbGllbnQgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIHZvaWQgc2VuZE1lc3NhZ2VU
b0FnZW50KGNvbnN0IFdlYktpdDo6V2ViRGV2VG9vbHNNZXNzYWdlRGF0YSYpOworICAgIHZpcnR1
YWwgdm9pZCBzZW5kRGVidWdnZXJDb21tYW5kVG9BZ2VudChjb25zdCBXZWJLaXQ6OldlYlN0cmlu
ZyYgY29tbWFuZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWN0aXZhdGVXaW5kb3coKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2xvc2VXaW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgZG9ja1dpbmRvdygp
OworICAgIHZpcnR1YWwgdm9pZCB1bmRvY2tXaW5kb3coKTsKKworICAgIHZvaWQgYXN5bmNDYWxs
KGNvbnN0IERSVERldlRvb2xzQ2FsbEFyZ3MmKTsKKworICAgIHZvaWQgYWxsTWVzc2FnZXNQcm9j
ZXNzZWQoKTsKKworIHByaXZhdGU6CisgICAgdm9pZCBjYWxsKGNvbnN0IERSVERldlRvb2xzQ2Fs
bEFyZ3MmKTsKKworICAgIFNjb3BlZFJ1bm5hYmxlTWV0aG9kRmFjdG9yeTxEUlREZXZUb29sc0Ns
aWVudD4gbV9jYWxsTWV0aG9kRmFjdG9yeTsKKyAgICBXZWJLaXQ6OldlYlZpZXcqIG1fd2ViVmll
dzsKKyAgICBEUlREZXZUb29sc0FnZW50KiBtX2RydERldlRvb2xzQWdlbnQ7CisgICAgV1RGOjpP
d25QdHI8V2ViS2l0OjpXZWJEZXZUb29sc0Zyb250ZW5kPiBtX3dlYkRldlRvb2xzRnJvbnRlbmQ7
Cit9OworCisjZW5kaWYgLy8gRFJURGV2VG9vbHNDbGllbnRfaApkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCmluZGV4IDliYTY0MjEuLmNiODY5M2QKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9s
bGVyLmgiCiAKKyNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCiAjaW5jbHVkZSAiVGVzdFNo
ZWxsLmgiCiAjaW5jbHVkZSAiV2ViVmlld0hvc3QuaCIKICNpbmNsdWRlICJiYXNlL3N0cmluZ191
dGlsLmgiCkBAIC05NSw2ICs5Niw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0
Q29udHJvbGxlcihUZXN0U2hlbGwqIHNoZWxsKQogICAgIGJpbmRNZXRob2QoIm9iakNJZGVudGl0
eUlzRXF1YWwiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6Om9iakNJZGVudGl0eUlzRXF1YWwpOwog
ICAgIGJpbmRNZXRob2QoInNldEFsd2F5c0FjY2VwdENvb2tpZXMiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMpOwogICAgIGJpbmRNZXRob2QoInNob3dXZWJJ
bnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNob3dXZWJJbnNwZWN0b3IpOworICAg
IGJpbmRNZXRob2QoImNsb3NlV2ViSW5zcGVjdG9yIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpj
bG9zZVdlYkluc3BlY3Rvcik7CiAgICAgYmluZE1ldGhvZCgic2V0V2luZG93SXNLZXkiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnNldFdpbmRvd0lzS2V5KTsKICAgICBiaW5kTWV0aG9kKCJzZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFRh
YktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyk7CiAgICAgYmluZE1ldGhvZCgic2V0VXNlclN0eWxl
U2hlZXRMb2NhdGlvbiIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0VXNlclN0eWxlU2hlZXRM
b2NhdGlvbik7CkBAIC01NTUsNiArNTU3LDEyIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNob3dXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCoKICAg
ICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y2xv
c2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCit7CisgICAgbV9zaGVsbC0+Y2xvc2VEZXZUb29scygpOworICAgIHJlc3VsdC0+c2V0
TnVsbCgpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRXaW5kb3dJc0tleShj
b25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewog
ICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID4gMCAmJiBhcmd1bWVudHNbMF0uaXNCb29sKCkpCkBA
IC0xMjQ1LDcgKzEyNTMsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRUaW1lbGlu
ZVByb2ZpbGluZ0VuYWJsZWQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcgogICAgIHJlc3VsdC0+
c2V0TnVsbCgpOwogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMSB8fCAhYXJndW1lbnRzWzBd
LmlzQm9vbCgpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IFNob3VsZCBjYWxsIFRl
c3RTaGVsbERldlRvb2xzQWdlbnQ6OnNldFRpbWVsaW5lUHJvZmlsaW5nRW5hYmxlZCgpLgorICAg
IG1fc2hlbGwtPmRydERldlRvb2xzQWdlbnQoKS0+c2V0VGltZWxpbmVQcm9maWxpbmdFbmFibGVk
KGFyZ3VtZW50c1swXS50b0Jvb2xlYW4oKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKQEAgLTEyNTMsNyArMTI2MSw3IEBAIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVuCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiAgICAgaWYgKGFyZ3VtZW50cy5z
aXplKCkgPCAyIHx8ICFhcmd1bWVudHNbMF0uaXNJbnQzMigpIHx8ICFhcmd1bWVudHNbMV0uaXNT
dHJpbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBTaG91bGQgY2FsbCBUZXN0
U2hlbGxEZXZUb29sc0FnZW50OjpldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCkuCisgICAgbV9zaGVs
bC0+ZHJ0RGV2VG9vbHNBZ2VudCgpLT5ldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGFyZ3VtZW50c1sw
XS50b0ludDMyKCksIGFyZ3VtZW50c1sxXS50b1N0cmluZygpKTsKIH0KIAogdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCmlu
ZGV4IDIyNzQxZDUuLjVkNjU3MjYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMTI5LDYgKzEy
OSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFNob3dzIERldlRvb2xzIHdpbmRvdy4KICAgICB2b2lk
IHNob3dXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
ICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3IoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFy
aWFudCopOwogCiAgICAgLy8gR2l2ZXMgZm9jdXMgdG8gdGhlIHdpbmRvdy4KICAgICB2b2lkIHNl
dFdpbmRvd0lzS2V5KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwCmluZGV4
IDUyZjFlN2QuLmE0YjE2MWEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgogCisjaW5jbHVkZSAiRFJURGV2VG9vbHNBZ2Vu
dC5oIgorI2luY2x1ZGUgIkRSVERldlRvb2xzQ2xpZW50LmgiCiAjaW5jbHVkZSAiTGF5b3V0VGVz
dENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3SG9zdC5oIgogI2luY2x1ZGUgImJhc2Uv
bWQ1LmgiIC8vIEZJWE1FOiBXcmFwIGJ5IHdlYmtpdF9zdXBwb3J0LgpAQCAtODEsNiArODMsNyBA
QCBUZXN0U2hlbGw6OlRlc3RTaGVsbChib29sIHRlc3RTaGVsbE1vZGUpCiAgICAgLCBtX2ZvY3Vz
ZWRXaWRnZXQoMCkKICAgICAsIG1fdGVzdFNoZWxsTW9kZSh0ZXN0U2hlbGxNb2RlKQogICAgICwg
bV9hbGxvd0V4dGVybmFsUGFnZXMoZmFsc2UpCisgICAgLCBtX2RldlRvb2xzKDApCiB7CiAgICAg
V2ViUnVudGltZUZlYXR1cmVzOjplbmFibGVHZW9sb2NhdGlvbih0cnVlKTsKICAgICBtX2FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLnNldChuZXcgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIodGhpcykp
OwpAQCAtOTcsMTIgKzEwMCwxNyBAQCBUZXN0U2hlbGw6OlRlc3RTaGVsbChib29sIHRlc3RTaGVs
bE1vZGUpCiAgICAgLy8gdGltZWQtb3V0IERSVCBwcm9jZXNzIHdhcyBjcmFzaGVkLgogICAgIG1f
dGltZW91dCA9IDMwICogMTAwMDsKIAorICAgIG1fZHJ0RGV2VG9vbHNBZ2VudC5zZXQobmV3IERS
VERldlRvb2xzQWdlbnQpOwogICAgIG1fd2ViVmlld0hvc3QgPSBjcmVhdGVXZWJWaWV3KCk7CiAg
ICAgbV93ZWJWaWV3ID0gbV93ZWJWaWV3SG9zdC0+d2ViVmlldygpOworICAgIG1fZHJ0RGV2VG9v
bHNBZ2VudC0+c2V0V2ViVmlldyhtX3dlYlZpZXcpOwogfQogCiBUZXN0U2hlbGw6On5UZXN0U2hl
bGwoKQogeworICAgIC8vIE5vdGU6IERldlRvb2xzIGFyZSBjbG9zZWQgdG9nZXRoZXIgd2l0aCBh
bGwgdGhlIG90aGVyIHdpbmRvd3MgaW4gdGhlCisgICAgLy8gd2luZG93cyBsaXN0LgorCiAgICAg
bG9hZFVSTChHVVJMKCJhYm91dDpibGFuayIpKTsKICAgICAvLyBDYWxsIEdDIHR3aWNlIHRvIGNs
ZWFuIHVwIGdhcmJhZ2UuCiAgICAgY2FsbEpTR0MoKTsKQEAgLTExMiw2ICsxMjAsMzQgQEAgVGVz
dFNoZWxsOjp+VGVzdFNoZWxsKCkKICAgICBtX3dlYlZpZXctPmNsb3NlKCk7CiB9CiAKK3ZvaWQg
VGVzdFNoZWxsOjpjcmVhdGVEUlREZXZUb29sc0NsaWVudChEUlREZXZUb29sc0FnZW50KiBhZ2Vu
dCkKK3sKKyAgICBtX2RydERldlRvb2xzQ2xpZW50LnNldChuZXcgRFJURGV2VG9vbHNDbGllbnQo
YWdlbnQsIG1fZGV2VG9vbHMtPndlYlZpZXcoKSkpOworfQorCit2b2lkIFRlc3RTaGVsbDo6c2hv
d0RldlRvb2xzKCkKK3sKKyAgICBpZiAoIW1fZGV2VG9vbHMpIHsKKyAgICAgICAgV2ViVVJMIHVy
bCA9IHdlYmtpdF9zdXBwb3J0OjpHZXREZXZUb29sc1BhdGhBc1VSTCgpOworICAgICAgICBpZiAo
IXVybC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9kZXZUb29scyA9IGNyZWF0ZU5ld1dpbmRv
dyh1cmwpOworICAgICAgICBBU1NFUlQobV9kZXZUb29scyk7CisgICAgICAgIGNyZWF0ZURSVERl
dlRvb2xzQ2xpZW50KG1fZHJ0RGV2VG9vbHNBZ2VudC5nZXQoKSk7CisgICAgfQorICAgIG1fZGV2
VG9vbHMtPnNob3coV2ViS2l0OjpXZWJOYXZpZ2F0aW9uUG9saWN5TmV3V2luZG93KTsKK30KKwor
dm9pZCBUZXN0U2hlbGw6OmNsb3NlRGV2VG9vbHMoKQoreworICAgIGlmIChtX2RldlRvb2xzKSB7
CisgICAgICAgIGNsb3NlV2luZG93KG1fZGV2VG9vbHMpOworICAgICAgICBtX2RldlRvb2xzID0g
MDsKKyAgICB9Cit9CisKIHZvaWQgVGVzdFNoZWxsOjpyZXNldFdlYlNldHRpbmdzKFdlYlZpZXcm
IHdlYlZpZXcpCiB7CiAgICAgLy8gTWF0Y2ggdGhlIHNldHRpbmdzIHVzZWQgYnkgTWFjIER1bXBS
ZW5kZXJUcmVlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YKQEAgLTIwNiw2ICsyNDIsOSBAQCB2b2lk
IFRlc3RTaGVsbDo6cnVuRmlsZVRlc3QoY29uc3QgVGVzdFBhcmFtcyYgcGFyYW1zKQogICAgICAg
ICB8fCB0ZXN0VXJsLmZpbmQoImxvYWRpbmdcXCIpICE9IHN0cmluZzo6bnBvcykKICAgICAgICAg
bV9sYXlvdXRUZXN0Q29udHJvbGxlci0+c2V0U2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcyh0
cnVlKTsKIAorICAgIGlmIChpbnNwZWN0b3JUZXN0TW9kZSkKKyAgICAgICAgc2hvd0RldlRvb2xz
KCk7CisKICAgICBtX3ByaW50ZXItPmhhbmRsZVRlc3RIZWFkZXIodGVzdFVybC5jX3N0cigpKTsK
ICAgICBsb2FkVVJMKG1fcGFyYW1zLnRlc3RVcmwpOwogCkBAIC01ODYsNyArNjI1LDcgQEAgV2Vi
Vmlld0hvc3QqIFRlc3RTaGVsbDo6Y3JlYXRlV2ViVmlldygpCiBXZWJWaWV3SG9zdCogVGVzdFNo
ZWxsOjpjcmVhdGVOZXdXaW5kb3coY29uc3QgV2ViVVJMJiB1cmwpCiB7CiAgICAgV2ViVmlld0hv
c3QqIGhvc3QgPSBuZXcgV2ViVmlld0hvc3QodGhpcyk7Ci0gICAgV2ViVmlldyogdmlldyA9IFdl
YlZpZXc6OmNyZWF0ZShob3N0LCAwKTsKKyAgICBXZWJWaWV3KiB2aWV3ID0gV2ViVmlldzo6Y3Jl
YXRlKGhvc3QsIG1fZHJ0RGV2VG9vbHNBZ2VudC5nZXQoKSk7CiAgICAgaG9zdC0+c2V0V2ViV2lk
Z2V0KHZpZXcpOwogICAgIHJlc2V0V2ViU2V0dGluZ3MoKnZpZXcpOwogICAgIHZpZXctPmluaXRp
YWxpemVNYWluRnJhbWUoaG9zdCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5oCmluZGV4IDIzOTcyNDYuLjBmNzRlZTEKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKKysrIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKQEAgLTI4LDYgKzI4LDkgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAorI2lmbmRlZiBUZXN0U2hlbGxfaAorI2RlZmluZSBUZXN0U2hl
bGxfaAorCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJF
dmVudFNlbmRlci5oIgogI2luY2x1ZGUgIkxheW91dFRlc3RDb250cm9sbGVyLmgiCkBAIC00NCw2
ICs0Nyw3IEBACiAvLyB2YXJpb3VzIG9iamVjdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGNyZWF0
ZWQgaW4gb25lIERSVCBwcm9jZXNzLgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkRl
dlRvb2xzQWdlbnRDbGllbnQ7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYk5vdGlmaWNhdGlv
blByZXNlbnRlcjsKIGNsYXNzIFdlYlByZWZlcmVuY2VzOwpAQCAtNTQsNiArNTgsMTAgQEAgbmFt
ZXNwYWNlIHNraWEgewogY2xhc3MgUGxhdGZvcm1DYW52YXM7CiB9CiAKK2NsYXNzIERSVERldlRv
b2xzQWdlbnQ7CitjbGFzcyBEUlREZXZUb29sc0NhbGxBcmdzOworY2xhc3MgRFJURGV2VG9vbHND
bGllbnQ7CisKIHN0cnVjdCBUZXN0UGFyYW1zIHsKICAgICBib29sIGR1bXBUcmVlOwogICAgIGJv
b2wgZHVtcFBpeGVsczsKQEAgLTczLDYgKzgxLDcgQEAgY2xhc3MgVGVzdFNoZWxsIHsKIHB1Ymxp
YzoKICAgICBUZXN0U2hlbGwoYm9vbCB0ZXN0U2hlbGxNb2RlKTsKICAgICB+VGVzdFNoZWxsKCk7
CisKICAgICAvLyBUaGUgbWFpbiBXZWJWaWV3LgogICAgIFdlYktpdDo6V2ViVmlldyogd2ViVmll
dygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQogICAgIC8vIFJldHVybnMgdGhlIGhvc3Qg
Zm9yIHRoZSBtYWluIFdlYlZpZXcuCkBAIC0xMjYsMTEgKzEzNSwxOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjbG9zZVJlbWFpbmluZ1dpbmRvd3MoKTsKICAgICBpbnQgd2luZG93Q291bnQoKTsKICAg
ICBzdGF0aWMgdm9pZCByZXNpemVXaW5kb3dGb3JUZXN0KFdlYlZpZXdIb3N0KiwgY29uc3QgV2Vi
S2l0OjpXZWJVUkwmKTsKLSAgICB2b2lkIHNob3dEZXZUb29scygpIHt9IC8vIEZJWE1FOiBpbWVw
bGVtZW50IHRoaXMuCisKKyAgICB2b2lkIHNob3dEZXZUb29scygpOworICAgIHZvaWQgY2xvc2VE
ZXZUb29scygpOworCisgICAgRFJURGV2VG9vbHNBZ2VudCogZHJ0RGV2VG9vbHNBZ2VudCgpIHsg
cmV0dXJuIG1fZHJ0RGV2VG9vbHNBZ2VudC5nZXQoKTsgfQorICAgIERSVERldlRvb2xzQ2xpZW50
KiBkcnREZXZUb29sc0NsaWVudCgpIHsgcmV0dXJuIG1fZHJ0RGV2VG9vbHNDbGllbnQuZ2V0KCk7
IH0KIAogICAgIHN0YXRpYyBjb25zdCBpbnQgdmlydHVhbFdpbmRvd0JvcmRlciA9IDM7CiAKIHBy
aXZhdGU6CisgICAgdm9pZCBjcmVhdGVEUlREZXZUb29sc0NsaWVudChEUlREZXZUb29sc0FnZW50
Kik7CisKICAgICBzdGF0aWMgdm9pZCByZXNldFdlYlNldHRpbmdzKFdlYktpdDo6V2ViVmlldyYp
OwogICAgIHZvaWQgZHVtcCgpOwogICAgIHN0ZDo6c3RyaW5nIGR1bXBBbGxCYWNrRm9yd2FyZExp
c3RzKCk7CkBAIC0xNDMsNiArMTU5LDkgQEAgcHJpdmF0ZToKICAgICBXZWJLaXQ6OldlYldpZGdl
dCogbV9mb2N1c2VkV2lkZ2V0OwogICAgIGJvb2wgbV90ZXN0U2hlbGxNb2RlOwogICAgIFdlYlZp
ZXdIb3N0KiBtX3dlYlZpZXdIb3N0OworICAgIFdlYlZpZXdIb3N0KiBtX2RldlRvb2xzOworICAg
IE93blB0cjxEUlREZXZUb29sc0FnZW50PiBtX2RydERldlRvb2xzQWdlbnQ7CisgICAgT3duUHRy
PERSVERldlRvb2xzQ2xpZW50PiBtX2RydERldlRvb2xzQ2xpZW50OwogICAgIE93blB0cjxBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcj4gbV9hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjsKICAgICBPd25Q
dHI8RXZlbnRTZW5kZXI+IG1fZXZlbnRTZW5kZXI7CiAgICAgT3duUHRyPExheW91dFRlc3RDb250
cm9sbGVyPiBtX2xheW91dFRlc3RDb250cm9sbGVyOwpAQCAtMTY2LDMgKzE4NSw1IEBAIHByaXZh
dGU6CiB9OwogCiB2b2lkIHBsYXRmb3JtSW5pdCgpOworCisjZW5kaWYgLy8gVGVzdFNoZWxsX2gK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL2NvbmZpZy5o
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vY29uZmlnLmgKaW5kZXggNjAy
OTUzMi4uN2RmZGExOAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9j
b25maWcuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9jb25maWcu
aApAQCAtNDQsOCArNDQsMTAgQEAKIAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0vLyBK
U19FWFBPUlREQVRBIGlzIG5lZWRlZCB0byBpbmx1Y2RlIHd0Zi9XVEZTdHJpbmcuaC4KICNpZiBP
UyhXSU5ET1dTKSAmJiAhQ09NUElMRVIoR0NDKQorLy8gQWxsb3cgJ3RoaXMnIHRvIGJlIHVzZWQg
aW4gYmFzZSBtZW1iZXIgaW5pdGlhbGl6ZXIgbGlzdC4KKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
IDogNDM1NSkKKy8vIEpTX0VYUE9SVERBVEEgaXMgbmVlZGVkIHRvIGlubHVjZGUgd3RmL1dURlN0
cmluZy5oLgogI2RlZmluZSBKU19FWFBPUlREQVRBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQogI2Vs
c2UKICNkZWZpbmUgSlNfRVhQT1JUREFUQQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>