<?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>99352</bug_id>
          
          <creation_ts>2012-10-15 12:37:15 -0700</creation_ts>
          <short_desc>[GTK] [WebKit2] Add an &apos;authenticate&apos; signal to WebKitWebView</short_desc>
          <delta_ts>2013-08-09 03:47:43 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>99351</dependson>
          <blocked>113663</blocked>
    
    <blocked>116537</blocked>
    
    <blocked>119303</blocked>
    
    <blocked>119487</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>brian.holt</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mario</cc>
    
    <cc>mathstuf</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>spena</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>742283</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-15 12:37:15 -0700</bug_when>
    <thetext>In WebKit1, an authenticate signal would allow us to test authentication in both WebKit1 and WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910133</commentid>
    <comment_count>1</comment_count>
      <attachid>207091</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-19 07:13:16 -0700</bug_when>
    <thetext>Created attachment 207091
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910134</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-19 07:15:30 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910135</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-19 07:15:40 -0700</bug_when>
    <thetext>Attachment 207091 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.list.am&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/webkit2.h&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:27:  The parameter name &quot;authenticationChallenge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:28:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:31:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:31:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:32:  The parameter name &quot;authenticationChallenge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:32:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:35:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequestPrivate.h:35:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:119:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:121:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:122:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:123:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:124:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:132:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:135:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:146:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:148:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:167:  Declaration has space between type name and * in AuthenticationChallengeProxy *authenticationChallenge  [whitespace/declaration] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:182:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:199:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:216:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.cpp:233:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:831:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1233:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1234:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1235:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1236:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1237:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialogRequest.h&quot;
Total errors found: 38 in 13 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>910136</commentid>
    <comment_count>4</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-19 07:19:18 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=207091) [details]
&gt; Patch

This is a WIP patch proposed to add the API and signal to support a user-created authentication dialog. Because the API is not yet confirmed I haven&apos;t added documentation for all the functions.  

Questions for discussion:
  - is the name of the request object, &quot;WebkitAuthenticationDialogRequest&quot; right?
  - is the API of WebkitAuthenticationDialogRequest right?
  - is the name of the signal &quot;run-authentication-dialog&quot; right?
  - is the architecture right?

There will be an email to webkitgtk-dev where this can be discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910183</commentid>
    <comment_count>5</comment_count>
      <attachid>207111</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-19 09:59:06 -0700</bug_when>
    <thetext>Created attachment 207111
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910188</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-19 10:02:52 -0700</bug_when>
    <thetext>Attachment 207111 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.list.am&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/webkit2.h&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&quot;
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:27:  The parameter name &quot;authenticationChallenge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:30:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:31:  The parameter name &quot;authenticationChallenge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:31:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:34:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:90:  Declaration has space between type name and * in AuthenticationChallengeProxy *authenticationChallenge  [whitespace/declaration] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:90:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:112:  Missing space before ( in switch(  [whitespace/parens] [5]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:113:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:864:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:865:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:866:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:152:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:831:  Should have a space between // and comment  [whitespace/comments] [4]
WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
Total errors found: 20 in 13 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>910195</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-07-19 10:09:39 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 207111 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/GNUmakefile.list.am&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/webkit2.h&apos;]&quot; exit_code: 1
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h&quot;
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h&quot;
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:27:  The parameter name &quot;authenticationChallenge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:30:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:31:  The parameter name &quot;authenticationChallenge&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:31:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:34:  The parameter name &quot;request&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h&quot;
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:90:  Declaration has space between type name and * in AuthenticationChallengeProxy *authenticationChallenge  [whitespace/declaration] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:90:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:105:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:106:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:107:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:112:  Missing space before ( in switch(  [whitespace/parens] [5]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:113:  This { should be at the end of the previous line  [whitespace/braces] [4]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:864:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:865:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:866:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:25:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:152:  Should have a space between // and comment  [whitespace/comments] [4]
&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:155:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:831:  Should have a space between // and comment  [whitespace/comments] [4]
&gt; WARNING: File exempt from style guide. Skipping: &quot;Source/WebKit2/UIProcess/API/gtk/webkit2.h&quot;
&gt; Total errors found: 20 in 13 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Can you please upload your patches with webkit-patch or run them through check-webkit-style first to ensure that the bugzilla style checker does not keep spamming the patch? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910235</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-19 10:43:38 -0700</bug_when>
    <thetext>Or better, don&apos;t set the review flag for wip patches, even less the commit-queue one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910453</commentid>
    <comment_count>9</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-20 00:59:19 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Or better, don&apos;t set the review flag for wip patches, even less the commit-queue one.

Sorry about that, I&apos;ll be sure not to in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910456</commentid>
    <comment_count>10</comment_count>
      <attachid>207193</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-20 01:54:25 -0700</bug_when>
    <thetext>Created attachment 207193
Revised WIP Patch

Fixed style issues, revised authenticate logic, pass CredentialStorageMode to WebKitAuthenticationDialogNew.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910459</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-20 02:30:36 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Or better, don&apos;t set the review flag for wip patches, even less the commit-queue one.
&gt; 
&gt; Sorry about that, I&apos;ll be sure not to in the future.

No problem!, sorry if I sounded a bit rude, I really appreciate you are working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910460</commentid>
    <comment_count>12</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-20 02:52:54 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; Or better, don&apos;t set the review flag for wip patches, even less the commit-queue one.
&gt; &gt; 
&gt; &gt; Sorry about that, I&apos;ll be sure not to in the future.
&gt; 
&gt; No problem!, sorry if I sounded a bit rude, I really appreciate you are working on this.

Don&apos;t worry, I didn&apos;t take it personally.  Both you and Martin made good points and since I&apos;m hoping to contribute more regularly I want to make sure that I learn from these mistakes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910461</commentid>
    <comment_count>13</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-20 02:55:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=207193) [details]
&gt; Revised WIP Patch
&gt; 
&gt; Fixed style issues, revised authenticate logic, pass CredentialStorageMode to WebKitAuthenticationDialogNew.

Leaving aside the implementation details, are the names and the API ok? If they are then I&apos;ll get on with documenting the API properly and writing the unit test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910474</commentid>
    <comment_count>14</comment_count>
      <attachid>207193</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-20 06:50:22 -0700</bug_when>
    <thetext>Comment on attachment 207193
Revised WIP Patch

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

Note that webkit could be compiled without libsecret, so we probably need a way to tell the user whether we can save credentials persistently or not.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:34
&gt; +    GRefPtr&lt;_WebKitAuthenticationRequest&gt; request;

Use WebKitAuthenticationRequest.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:147
&gt; +    authDialog-&gt;priv-&gt;request = adoptGRef(request);

I think we should keep a ref instead of adopting it.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:149
&gt; +    AuthenticationChallengeProxy* authenticationChallenge = webkit_authentication_request_get_authentication_challenge(request);
&gt;      authDialog-&gt;priv-&gt;authenticationChallenge = authenticationChallenge;

If the request now contains the challenge, we don&apos;t need to keep another reference in the private struct.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:23
&gt; +#include &quot;AuthenticationChallengeProxy.h&quot;

This is already included by WebKitAuthenticationRequestPrivate.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:29
&gt; +#include &lt;wtf/gobject/GOwnPtr.h&gt;
&gt; +#include &lt;wtf/gobject/GRefPtr.h&gt;

GOwnPtr and GRefPtr don&apos;t seem to be used in this file at all.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:41
&gt; + * Whenever the user attempts to load a page protected by http

http -&gt; HTTP

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:43
&gt; + * authentication, WebKit will need to show a dialog for the user to
&gt; + * enter their username and password. For that to happen in a general way,

Why does wk has to show a dialog?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:44
&gt; + * instead of just opening the custom #WebKitAuthenticationDialog

WebKitAuthenticationDialog is private, don&apos;t mention it in the documentation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:53
&gt; + * a #WebKitAuthenticationDialog for the user to interact with.

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:61
&gt; +WEBKIT_DEFINE_TYPE(WebKitAuthenticationRequest, webkit_authentication_request, G_TYPE_OBJECT);

Unneeded trailing ; here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:88
&gt; +void webkit_authentication_request_set_authentication_challenge(WebKitAuthenticationRequest *request, AuthenticationChallengeProxy *authenticationChallenge)

This is a private method, it should follow the webkit coding style.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:90
&gt; +    g_return_if_fail(WEBKIT_IS_AUTHENTICATION_REQUEST(request));

Do not use g_return macros in private methods.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:92
&gt; +}

This method is unused.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:97
&gt; +AuthenticationChallengeProxy* webkit_authentication_request_get_authentication_challenge(WebKitAuthenticationRequest *request)
&gt; +{
&gt; +    return request-&gt;priv-&gt;authenticationChallenge.get();
&gt; +}

This method is unused.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:100
&gt; +void webkit_authentication_request_authenticate(WebKitAuthenticationRequest *request, const gchar *username, const gchar *password, WebKitCredentialPersistence webkitPersistence)

WebKitAuthenticationRequest *request -&gt; WebKitAuthenticationRequest* request
const gchar *username -&gt; const gchar* username
const gchar *password -&gt; const gchar* password

I wonder if it would be better to expose a boxed type for the credential WebKitCredential or WebKitWebCrendetial wrapping a WebCore::Credential. It will simplify the API and will allow us to add support for client certificate authentication using the same API in the future.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:118
&gt; +    CredentialPersistence persistence;
&gt; +    switch (webkitPersistence) {
&gt; +    case WebKitCredentialPersistenceNone:
&gt; +        persistence = CredentialPersistenceNone;
&gt; +        break;
&gt; +    case WebKitCredentialPersistenceForSession:
&gt; +        persistence = CredentialPersistenceForSession;
&gt; +        break;
&gt; +    case WebKitCredentialPersistencePermanent:
&gt; +        persistence = CredentialPersistencePermanent;
&gt; +        break;
&gt; +    default:
&gt; +        // warn that the WebKitCredentialPersistence enum is invalid
&gt; +        break;
&gt; +    }

Instead of this we can use the same values than WebCore and add a compile time assert to make sure the values match.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:120
&gt; +    Credential credential = request-&gt;priv-&gt;authenticationChallenge-&gt;proposedCredential()-&gt;core();

What is this for?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:130
&gt; +    RefPtr&lt;WebString&gt; usernameString = WebString::createFromUTF8String(username);
&gt; +    if (usernameString-&gt;isEmpty())
&gt; +        usernameString = WebString::create(credential.user());
&gt; +
&gt; +    RefPtr&lt;WebString&gt; passwordString = WebString::createFromUTF8String(password);
&gt; +    if (passwordString-&gt;isEmpty())
&gt; +        passwordString = WebString::create(credential.password());
&gt; +
&gt; +    RefPtr&lt;WebCredential&gt; webCredential = WebCredential::create(usernameString.get(), passwordString.get(), persistence);

All this could be simplified as:

RefPtr&lt;WebCredential&gt; webCredential = WebCredential::create(WebCore::Credential(String::fromUTF8(username), String::fromUTF8(password), persistence));

I think we should consider an error to call this method with NULL user/pass, if the user wants to use the values stored in the keyring, they should pass back the proposed credential.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:139
&gt; + * Ask WebKit to cancel the request. It&apos;s important to do this in case

I would just say something like Cancel the authentication request, instead of Ask WebKit . . .

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:142
&gt; + * pending forever, which might cause the browser to hang.

Browser? I should not assume the API is only sed by browsers.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:143
&gt; + */

Since: 2.2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:62
&gt; +    WebKitCredentialPersistenceNone,
&gt; +    WebKitCredentialPersistenceForSession,
&gt; +    WebKitCredentialPersistencePermanent,

This is public API, it should follow GNOME coding style.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:76
&gt; +

We need a way to get the proposed credential, to fill the UI or whatever and use it in case the user wants to use the saved data.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:32
&gt; +void
&gt; +webkit_authentication_request_set_authentication_challenge(WebKitAuthenticationRequest*, WebKit::AuthenticationChallengeProxy*);
&gt; +
&gt; +WebKit::AuthenticationChallengeProxy* webkit_authentication_request_get_authentication_challenge(WebKitAuthenticationRequest*);

Remove this unused methods.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitLoaderClient.cpp:135
&gt; -    webkitWebViewHandleAuthenticationChallenge(WEBKIT_WEB_VIEW(clientInfo), toImpl(authenticationChallenge));
&gt; +    WebKitAuthenticationRequest* request = webkitAuthenticationRequestCreate(toImpl(authenticationChallenge));
&gt; +    webkitWebViewHandleAuthenticationChallenge(WEBKIT_WEB_VIEW(clientInfo), request);

You can leave this as it was and create the request in webkitWebViewHandleAuthenticationChallenge. You should use GRefPtr and adopt the ref, so that callback handlers (the default one or user provided one) can increase the ref counter if they need to handle the signal asynchronously.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:92
&gt; +    AUTHENTICATION,

This should be AUTHENTICATE

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:433
&gt; +static gboolean webkitWebViewRunAuthenticationDialog(WebKitWebView* webView, WebKitAuthenticationRequest* request)

This is private method, use bool instead of gboolean.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:439
&gt; +    CredentialStorageMode credentialStorageMode;
&gt; +    if (webkit_settings_get_enable_private_browsing(webkit_web_view_get_settings(webView)))
&gt; +        credentialStorageMode = DisallowPersistentStorage;
&gt; +    else
&gt; +        credentialStorageMode = AllowPersistentStorage;

This should be handled by the WebKitAuthenticationRequest too.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:615
&gt; +    webViewClass-&gt;authentication = webkitWebViewRunAuthenticationDialog;

This should be authenticate and the default handler should be called webkitWebViewAuthenticate, so that it&apos;s clear it&apos;s the default handler of the authenticate signal.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:853
&gt; +    * This signal is emitted when the user is challenged with http

http -&gt; HTTP

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:855
&gt; +    * a dialog to where the user can supply credentials. To let the

Why a dialog, the user should be free to use whatever to authenticate.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:861
&gt; +    *

You should mention that it&apos;s possible to handle this asynchronously by keeping a ref of the request and returning TRUE.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:867
&gt; +    *

Since: 2.2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:869
&gt; +    signals[AUTHENTICATION] =

AUTHENTICATE

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:211
&gt; +    gboolean   (* authentication)            (WebKitWebView               *web_view,
&gt; +                                              WebKitAuthenticationRequest *request);

authenticate. This is an ABI break, you should add the vfunc at the bottom and remove one of he paddings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910929</commentid>
    <comment_count>15</comment_count>
      <attachid>207310</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-23 01:43:18 -0700</bug_when>
    <thetext>Created attachment 207310
WIP Patch 2

A second WIP patch, wrapping WebCore::Credential in a new class WebKitCredential.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911033</commentid>
    <comment_count>16</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-23 07:29:38 -0700</bug_when>
    <thetext>Unfortunately the unit test where I was planning to test this functionality is being skipped because its failing: https://bugs.webkit.org/show_bug.cgi?id=117689.

One option is to create a new test TestWebKitAuthentication.cpp, although it seems like it belongs in TestWebKitWebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911042</commentid>
    <comment_count>17</comment_count>
    <who name="Ben Boeckel">mathstuf</who>
    <bug_when>2013-07-23 08:08:13 -0700</bug_when>
    <thetext>Thanks for working on this! As an uzbl developer, is see a few things missing. It would be nice to have the &quot;realm&quot; if possible for the request; the host and/or URI might not be unique enough. Second, a credentials property would be nice for the request class and username/password/persistence on the credentials class. Is there documentation for where WebKit stores credentials or is it just &quot;see libsecret docs&quot;? An option in WebKitSettings along the lines of &quot;enable-credential-storage&quot; would be appreciated as well if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911090</commentid>
    <comment_count>18</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-23 11:15:17 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Unfortunately the unit test where I was planning to test this functionality is 
&gt; being skipped because its failing: https://bugs.webkit.org/show_bug.cgi?
&gt; id=117689.

That is bad luck :). Fortunately, I don&apos;t think that test will be skipped forever so that should not hold you form writing the test in the right place.

&gt; One option is to create a new test TestWebKitAuthentication.cpp, although it 
&gt; seems like it belongs in TestWebKitWebView.

Yes. As the central point of this API addition is the signal you are adding to WebKitWebView, this new unit test should IMHO be added there.

You&apos;ll probably want to create a subclass of WebViewTest inside of TestWebKitWebView.cpp as well to write that new unit test, btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911103</commentid>
    <comment_count>19</comment_count>
      <attachid>207310</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2013-07-23 11:42:31 -0700</bug_when>
    <thetext>Comment on attachment 207310
WIP Patch 2

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

Great patch, Brian!

Please consider some comments from my side too, unless Carlos disagree with them of course (since he will probably be right anyway) :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:99
&gt; +gboolean webkit_authentication_request_can_save_credential(WebKitAuthenticationRequest *request)

Misplaced * for &apos;request&apos;, since we are in a private file (it&apos;s fine in the header file)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:111
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_AUTHENTICATION_REQUEST(request), FALSE);
&gt; +
&gt; +    gboolean credentialStorageEnabled;
&gt; +#if ENABLE(CREDENTIAL_STORAGE)
&gt; +    credentialStorageEnabled = TRUE;
&gt; +#else
&gt; +    credentialStorageEnabled = FALSE;
&gt; +#endif
&gt; +
&gt; +    return (!request-&gt;priv-&gt;privateBrowsingEnabled &amp;&amp; credentialStorageEnabled);
&gt; +}

You don&apos;t really need that credentialStorageEnabled variable there. Why not doing just something like the following?

 {
     g_return_val_if_fail(WEBKIT_IS_AUTHENTICATION_REQUEST(request), FALSE);

 #if ENABLE(CREDENTIAL_STORAGE)
     return !request-&gt;priv-&gt;privateBrowsingEnabled;
 #else
     return FALSE;
 #endif
 }

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:120
&gt; + * Returns: #WebKitCredential

A short sentence is probably better here :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:122
&gt; +WebKitCredential* webkit_authentication_request_get_credential(WebKitAuthenticationRequest *request)

Misplaced *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:126
&gt; +    WebKitCredential* credential = webkitCredentialCreate(request-&gt;priv-&gt;authenticationChallenge-&gt;proposedCredential()-&gt;core());
&gt; +    return credential;

This can be made a single statement.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:137
&gt; +void webkit_authentication_request_authenticate(WebKitAuthenticationRequest *request, WebKitCredential *credential)

Misplaced *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:154
&gt; +void webkit_authentication_request_cancel(WebKitAuthenticationRequest *request)

Misplaced *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:72
&gt; + * Returns: The passed in #WebKitCredential

Nit: Missing period at the end

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:103
&gt; + * Returns: the username

Nit: This should be a proper sentence, starting with Capitalized words and finishing with a period

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:105
&gt; +const gchar * webkit_credential_get_username(WebKitCredential* credential)

Unneeded extra space between gchar and * here

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:116
&gt; + * Returns: the password

Same nit than before. Sorry!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:119
&gt; +{

...and same extra space here

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:129
&gt; + * Returns: the #WebKitCredentialPersistence

Likewise

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredentialPrivate.h:30
&gt; +#endif // WebKitJavascriptResultPrivate_h

Wrong comment

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredentialPrivate.h:38
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +

Unneeded extra lines at the end of the file

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:93
&gt; +    AUTHENTICATE,

Ok. This is probably too much of a nit, but I would probably separate this line from the following three lines with a blank one, since those three are related between them and this is a completely different thing.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:440
&gt; +    CredentialStorageMode credentialStorageMode;
&gt; +    if (webkit_authentication_request_can_save_credential(request))
&gt; +        credentialStorageMode = AllowPersistentStorage;
&gt; +    else
&gt; +        credentialStorageMode = DisallowPersistentStorage;

What about using the ternary operator to make this 5 lines just one?

Actually, we could even combine that ternary operator with the following one, but I&apos;m afraid readability would suffer too much. What do you think?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:796
&gt; +class AuthenticationTest: public UIClientTest {

As I mentioned in my previous comment, you probably need to inherit from WebViewTest since all the things you will need for this test are already there. 

Thus, there&apos;s no need I think to use UIClientTest here. Sorry if my comment in the office the other way was misleading! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911234</commentid>
    <comment_count>20</comment_count>
      <attachid>207310</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-24 00:12:23 -0700</bug_when>
    <thetext>Comment on attachment 207310
WIP Patch 2

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

I agree with Mario too.

&gt; Source/WebKit2/ChangeLog:9
&gt; +        emitted along with a new WebKitWebView::authentication signal to

WebKitWebView::authenticate signal

&gt; Source/WebKit2/ChangeLog:11
&gt; +        when the user is challenged with http authentication. The

http -&gt; HTTP

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:54
&gt; +    WebKitCredential* credential = webkitCredentialCreate(webkitAuthenticationWidgetCreateCredential(WEBKIT_AUTHENTICATION_WIDGET(priv-&gt;authWidget)));
&gt; +    webkitAuthenticationDialogAuthenticate(authDialog, credential);

Now that we are not calling webkitAuthenticationDialogAuthenticate with a NULL credential to cancel the request, we can probably create the credential in webkitAuthenticationDialogAuthenticate instead of passing it as a parameter.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:61
&gt; -    webkitAuthenticationDialogAuthenticate(authDialog, 0);
&gt; +    WebKitAuthenticationDialogPrivate* priv = authDialog-&gt;priv;
&gt; +    webkit_authentication_request_cancel(authDialog-&gt;priv-&gt;request.get());
&gt; +    gtk_widget_destroy(GTK_WIDGET(authDialog));

I would use a helper function here too like webkitAuthenticationDialogCancel

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:90
&gt; +    AuthenticationChallengeProxy* authenticationChallenge = webkit_authentication_request_get_authentication_challenge(authDialog-&gt;priv-&gt;request.get());
&gt; +    authDialog-&gt;priv-&gt;authWidget = webkitAuthenticationWidgetNew(authenticationChallenge-&gt;core(), credentialStorageMode);

This could probably be a single statement split in two lines, since we don&apos;t really need the local variable.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:58
&gt; +/* Private methods */

Don&apos;t use C style comments, in this particular case I don&apos;t think we need a comment to know these are the private methods.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:87
&gt; +AuthenticationChallengeProxy* webkit_authentication_request_get_authentication_challenge(WebKitAuthenticationRequest* request)
&gt; +{
&gt; +    return request-&gt;priv-&gt;authenticationChallenge.get();
&gt; +}

This is a private method, it should follow the WebKit coding style. webkitAuthenticationRequestGetAuthenticationChallenge()

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:89
&gt; +/* Public methods */

Same comment here that for private methods. Public methods are documented so it&apos;s pretty obvious which ones are public.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:91
&gt; + * webkit_authentication_request_can_save_credential:

Reading this again I&apos;ve noticed that the names suggest that there&apos;s a specific credential for which you are checking if persistent storage is allowed, but this is generic, maybe we could use webkit_authentication_request_can_save_credentials instead. Maybe Martin or Gustavo have any other suggestion?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:95
&gt; + * #WebKitFileChooserRequest should allow the storage of credentials.

WebKitFileChooser?. I don&apos;t think this is accurate, the user can allow to save credentials by providing their own way. This methods returns whether webkit supports can save credentials, which means that it&apos;s supported (build with libsecret) and private browsing is not enabled. You should explicitly mention here that when private browsing is enabled this method will return %FALSE.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:98
&gt; + */

Since: 2.2

Please add this tag to all new methods, properties and signals added to the API, please read:

http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:118
&gt; + * Get the #WebKitCredential currently stored in the keyring. The client can use this
&gt; + * directly for authentication or construct their own.

I would avoid mentioning the keyring here, I would say the proposed credential or something like that.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:120
&gt;&gt; + * Returns: #WebKitCredential
&gt; 
&gt; A short sentence is probably better here :)

You should also add gobject introspection annotations to make it clear that this returns a new object that the user should free.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:125
&gt; +    WebKitCredential* credential = webkitCredentialCreate(request-&gt;priv-&gt;authenticationChallenge-&gt;proposedCredential()-&gt;core());

We can check if the credential is empty and return NULL instead, since the WebKitCredential object is read-only, returning a new allocated empty object is useless. You should document also that it can return NULL if the request doesn&apos;t have any initial/proposed credential.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:151
&gt; + * won&apos;t be properly completed and the browser will keep the request

Why the browser?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:157
&gt; +    request-&gt;priv-&gt;authenticationChallenge-&gt;listener()-&gt;cancel();

This is not correct, we don&apos;t want to cancel the auth, but to continue the load without credentials, so you should call AuthenticationDecisionListener::useCredential with a NULL credential like the current code does.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:71
&gt; +webkit_authentication_request_authenticate         (WebKitAuthenticationRequest *request,
&gt; +                                                    WebKitCredential *credential);

Parameter names should be lined up

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:28
&gt; +

Remove this empty line

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequestPrivate.h:29
&gt; +WebKit::AuthenticationChallengeProxy* webkit_authentication_request_get_authentication_challenge(WebKitAuthenticationRequest*);

This is private method it should follow the WebKit coding style.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:33
&gt; +        , referenceCount(1)

I&apos;m not sure we really need this to be refcounted. This will have a very short life, that&apos;s why I proposed to use a boxed type, and it will be mostly read-only object.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:37
&gt; +    WebCore::Credential core;

Call this credential instead of core

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:54
&gt; +WebCredential* webkit_credential_get_webcredential(WebKitCredential* credential)
&gt; +{
&gt; +    RefPtr&lt;WebCredential&gt; webCredential = WebCredential::create(credential-&gt;core);
&gt; +    return webCredential.release().leakRef();

This is private method, it should follow WebKit coding style, why do we need to create a WebCredential, why not returning a const ref of the WebCore credential? We can create the WebCredential in the caller instead.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:107
&gt; +    return credential-&gt;core.user().utf8().data();

This is a temp value, we need to cache the user/password as CString in the struct to be able to return a const char *. We can cache it on demand.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:120
&gt; +    return credential-&gt;core.password().utf8().data();

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.h:40
&gt; +typedef enum  {
&gt; +    WebKitCredentialPersistenceNone,
&gt; +    WebKitCredentialPersistenceForSession,
&gt; +    WebKitCredentialPersistencePermanent,
&gt; +} WebKitCredentialPersistence;

This should follow the GNOME coding style and should be documented as well

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.h:46
&gt; +webkit_credential_new                  (const gchar *username, const gchar *password, WebKitCredentialPersistence persistence);

Every parameter should be in a new line with the names lined up.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:850
&gt;      /**
&gt; +    * WebKitWebView::authenticate:

Indentation is wrong here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:861
&gt; +    *  of the request and return TRUE.

Extra space at the beginning of the line here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:870
&gt; +    *

Remove this extra line.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.h:247
&gt; +    gboolean   (* authenticate)              (WebKitWebView               *web_view,
&gt; +                                              WebKitAuthenticationRequest *request);

Don&apos;t replace the padding, place this together with the other vfunc and remove the padding, probably better to remove the last padding instead of the first one.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:802
&gt; +        g_signal_connect(m_webView, &quot;authentication&quot;, G_CALLBACK(runAuthenticationCallback), this);

You should disconnect the signal in the destructor. Signal name is authenticate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911275</commentid>
    <comment_count>21</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-24 05:19:52 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Thanks for working on this! As an uzbl developer, is see a few things missing. It would be nice to have the &quot;realm&quot; if possible for the request; the host and/or URI might not be unique enough. 

I&apos;m not quite sure what you mean by &quot;realm&quot;, could you expand a bit on how you would like to see this implemented? 

&gt; Second, a credentials property would be nice for the request class and username/password/persistence on the credentials class. 

Sure, I could add properties for these, thats not a problem. Any comments/objections from Carlos, Martin or Gustavo?

&gt; Is there documentation for where WebKit stores credentials or is it just &quot;see libsecret docs&quot;? An option in WebKitSettings along the lines of &quot;enable-credential-storage&quot; would be appreciated as well if possible.

webkit_authentication_request_can_save_credentials() in the request class seems to be what you are looking for - credentials are saved if the library support is available and we are not in private browsing mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911276</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-24 05:30:12 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #17)
&gt; &gt; Thanks for working on this! As an uzbl developer, is see a few things missing. It would be nice to have the &quot;realm&quot; if possible for the request; the host and/or URI might not be unique enough. 
&gt; 
&gt; I&apos;m not quite sure what you mean by &quot;realm&quot;, could you expand a bit on how you would like to see this implemented? 

The realm is available in the WebCore::AuthenticationChallenge. note that the user should be able to build the exact same auth dialog that wk uses by default with the public API.

&gt; &gt; Second, a credentials property would be nice for the request class and username/password/persistence on the credentials class. 
&gt; 
&gt; Sure, I could add properties for these, thats not a problem. Any comments/objections from Carlos, Martin or Gustavo?

I don&apos;t see why we need a property in the request, the credential object is not going to change and it&apos;s created on demand (at least in the current patch). The credential class is a boxed type not a gobject, think about it like a struct with a GType.

&gt; &gt; Is there documentation for where WebKit stores credentials or is it just &quot;see libsecret docs&quot;? An option in WebKitSettings along the lines of &quot;enable-credential-storage&quot; would be appreciated as well if possible.
&gt; 
&gt; webkit_authentication_request_can_save_credentials() in the request class seems to be what you are looking for - credentials are saved if the library support is available and we are not in private browsing mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911295</commentid>
    <comment_count>23</comment_count>
      <attachid>207310</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-07-24 07:23:44 -0700</bug_when>
    <thetext>Comment on attachment 207310
WIP Patch 2

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:91
&gt;&gt; + * webkit_authentication_request_can_save_credential:
&gt; 
&gt; Reading this again I&apos;ve noticed that the names suggest that there&apos;s a specific credential for which you are checking if persistent storage is allowed, but this is generic, maybe we could use webkit_authentication_request_can_save_credentials instead. Maybe Martin or Gustavo have any other suggestion?

I agree, credentials makes it more understandable. I wonder if this needs to be a WebKitAuthenticationRequest method, perhaps it should go in the Context?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:94
&gt; + * Determine whether the authentication method associated with this

Authentication method sounds misleading to me, it sounds like HTTP basic auth may allow saving whereas other methods won&apos;t. Also, why is it associated with a file chooser request at all?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911303</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-24 08:05:16 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 207310 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207310&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:91
&gt; &gt;&gt; + * webkit_authentication_request_can_save_credential:
&gt; &gt; 
&gt; &gt; Reading this again I&apos;ve noticed that the names suggest that there&apos;s a specific credential for which you are checking if persistent storage is allowed, but this is generic, maybe we could use webkit_authentication_request_can_save_credentials instead. Maybe Martin or Gustavo have any other suggestion?
&gt; 
&gt; I agree, credentials makes it more understandable. I wonder if this needs to be a WebKitAuthenticationRequest method, perhaps it should go in the Context?

I agree it is global and not specific to the given request, but it can&apos;t be in the context either, since it depends also on whether private browsing is enabled, so it actually depends on the web view group. I think having it in WebKitAuthRequest is very convenient to use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911305</commentid>
    <comment_count>25</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-24 08:06:45 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 207310 [details])
&gt; Also, why is it associated with a file chooser request at all?

:/ because I used the FileChooserRequest as my starting point and missed this when doing my find/replace.  Sorry for confusion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911314</commentid>
    <comment_count>26</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-24 08:42:33 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; Thanks for working on this! As an uzbl developer, is see a few things missing. It would be nice to have the &quot;realm&quot; if possible for the request; the host and/or URI might not be unique enough. 
&gt; &gt; 
&gt; &gt; I&apos;m not quite sure what you mean by &quot;realm&quot;, could you expand a bit on how you would like to see this implemented? 
&gt; 
&gt; The realm is available in the WebCore::AuthenticationChallenge. note that the user should be able to build the exact same auth dialog that wk uses by default with the public API.

I agree completely but I&apos;ve been wondering how far to take this.  The WebKitAuthenticationDialog and WebKitAuthenticationWidget currently use the AuthenticationChallengeProxy directly, should it be refactored to use the public API of WebKitAuthenticationRequest? Perhaps then I could remove the private function webkitAuthenticationRequestGetAuthenticationChallenge() which would be substituted by _get_realm(), _get_host(), _get_port()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911318</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-24 08:57:28 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #22)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; &gt; Thanks for working on this! As an uzbl developer, is see a few things missing. It would be nice to have the &quot;realm&quot; if possible for the request; the host and/or URI might not be unique enough. 
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;m not quite sure what you mean by &quot;realm&quot;, could you expand a bit on how you would like to see this implemented? 
&gt; &gt; 
&gt; &gt; The realm is available in the WebCore::AuthenticationChallenge. note that the user should be able to build the exact same auth dialog that wk uses by default with the public API.
&gt; 
&gt; I agree completely but I&apos;ve been wondering how far to take this.  The WebKitAuthenticationDialog and WebKitAuthenticationWidget currently use the AuthenticationChallengeProxy directly, should it be refactored to use the public API of WebKitAuthenticationRequest? Perhaps then I could remove the private function webkitAuthenticationRequestGetAuthenticationChallenge() which would be substituted by _get_realm(), _get_host(), _get_port()?

WebKitAuthWidget is in WebCore so it can&apos;t use the public API. And the AuthDialog doesn&apos;t use the auth challenge except to create the WebKitAuthWidget, no? I think we can just add methods to get host, port, realm, etc. caching the required string on demand, so that when the default dialog is used we are not duplicating any string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911992</commentid>
    <comment_count>28</comment_count>
      <attachid>207532</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-26 09:17:55 -0700</bug_when>
    <thetext>Created attachment 207532
Patch + docs

Proposal for the API + docs (tests to follow)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912029</commentid>
    <comment_count>29</comment_count>
    <who name="Ben Boeckel">mathstuf</who>
    <bug_when>2013-07-26 11:56:28 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Created an attachment (id=207532) [details]
&gt; Patch + docs
&gt; 
&gt; Proposal for the API + docs (tests to follow)

Looks great! I&apos;ll try testing it out with uzbl tonight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912262</commentid>
    <comment_count>30</comment_count>
    <who name="Ben Boeckel">mathstuf</who>
    <bug_when>2013-07-27 13:31:36 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Looks great! I&apos;ll try testing it out with uzbl tonight.

First, the headers are missing from the variable which has the list of headers to install (webkit2gtk_h_api?).

So some differences I see compared to WebKit1 (which used libsoup directly) is that there&apos;s no indication of whether the authentication is for a proxy or not (looks to be accessible from WebCore::ProtectionSpaceServerType), and the paths which are affected by the request (which doesn&apos;t look like it&apos;s plumbed through WebCore at all).

Also, the port from the request is a gint; maybe it makes more sense as a guint (as the port method on WebKitSecurityOrigin uses)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912265</commentid>
    <comment_count>31</comment_count>
    <who name="Ben Boeckel">mathstuf</who>
    <bug_when>2013-07-27 14:06:57 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Looks great! I&apos;ll try testing it out with uzbl tonight.

I&apos;m seeing the following:

(gdb) list
&lt;snip&gt;
779     WebKitAuthenticationScheme scheme = webkit_authentication_request_get_scheme (request);
&lt;snip&gt;
(gdb) p scheme
$1 = WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN
(gdb) p request-&gt;priv-&gt;authenticationChallenge.m_ptr-&gt;m_coreAuthenticationChallenge.m_protectionSpace.m_authenticationScheme 
$2 = WebCore::ProtectionSpaceAuthenticationSchemeHTTPBasic

so it seems that the auth scheme is mismatching somewhere. I also see m_previousFailureCount in there. Is it worth plumbing that through (at least as a &quot;has this auth been tried before?&quot; property)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912267</commentid>
    <comment_count>32</comment_count>
    <who name="Ben Boeckel">mathstuf</who>
    <bug_when>2013-07-27 14:18:25 -0700</bug_when>
    <thetext>Here&apos;s the code I&apos;m using: https://github.com/mathstuf/uzbl/commit/e1a6f6bf9d69157528eb1e0c9e6be195f602071e

(The 2.1.4 is a local bump to differentiate between the patched and system builds).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912409</commentid>
    <comment_count>33</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-29 02:13:05 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Looks great! I&apos;ll try testing it out with uzbl tonight.

Much appreciated for trying it out! It&apos;s really encouraging to see that this is likely to get some use and for the early working feedback!

&gt; 
&gt; First, the headers are missing from the variable which has the list of headers to install (webkit2gtk_h_api?).
&gt; 

Well spotted, I didn&apos;t know about that variable.

&gt; So some differences I see compared to WebKit1 (which used libsoup directly) is that there&apos;s no indication of whether the authentication is for a proxy or not (looks to be accessible from WebCore::ProtectionSpaceServerType), and the paths which are affected by the request (which doesn&apos;t look like it&apos;s plumbed through WebCore at all).
&gt; 

I can add an _is_proxy() function.

&gt; Also, the port from the request is a gint; maybe it makes more sense as a guint (as the port method on WebKitSecurityOrigin uses)?

I agree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912410</commentid>
    <comment_count>34</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-29 02:17:30 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #29)
&gt; &gt; Looks great! I&apos;ll try testing it out with uzbl tonight.
&gt; 
&gt; I&apos;m seeing the following:
&gt; 
&gt; (gdb) list
&gt; &lt;snip&gt;
&gt; 779     WebKitAuthenticationScheme scheme = webkit_authentication_request_get_scheme (request);
&gt; &lt;snip&gt;
&gt; (gdb) p scheme
&gt; $1 = WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN
&gt; (gdb) p request-&gt;priv-&gt;authenticationChallenge.m_ptr-&gt;m_coreAuthenticationChallenge.m_protectionSpace.m_authenticationScheme 
&gt; $2 = WebCore::ProtectionSpaceAuthenticationSchemeHTTPBasic
&gt; 
&gt; so it seems that the auth scheme is mismatching somewhere. 

Hmmm, I&apos;ll take a look at that

&gt; I also see m_previousFailureCount in there. Is it worth plumbing that through (at least as a &quot;has this auth been tried before?&quot; property)?

Sure I&apos;ll add a _get_previous_failures() function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912520</commentid>
    <comment_count>35</comment_count>
      <attachid>207532</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-29 09:43:20 -0700</bug_when>
    <thetext>Comment on attachment 207532
Patch + docs

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

API looks good to me in general, I&apos;m looking forward to seeing the unit tests, thanks!

&gt; Source/WebKit2/GNUmakefile.list.am:683
&gt;  	Source/WebKit2/UIProcess/API/gtk/WebKitDownload.h \

Add also the public headers to webkit2gtk_h_api.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:25
&gt;  #include &quot;WebCredential.h&quot;

This can be removed too now that is included by the header.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:26
&gt; +#include &quot;WebKitAuthenticationRequest.h&quot;

This is already included by the header.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:29
&gt; +#include &quot;WebKitCredential.h&quot;
&gt; +#include &quot;WebKitCredentialPrivate.h&quot;

WebKitCredential is already included by WebKitCredentialPrivate.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.h:25
&gt; +#include &quot;WebKitCredential.h&quot;

Why do you need this one in the header?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:42
&gt; + * This #WebKitAuthenticationRequest object encapsulates the

Don&apos;t use # in this particular case, since it links to this block, you are already in.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:97
&gt; + *

You should explain here that this can be FALSE if webkit doesn&apos;t support credential storing or private browsing is enabled.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:98
&gt; + * Returns: %TRUE if the client should allow storage of credentials or %FALSE otherwise.

As I said in previous review this is not accurate, the client can perfectly allow to store credentials if it implements the credential storage, this is just about whether webkit can do it.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:118
&gt; + * Get the #WebKitCredential of the proposed authentication challenge. The client can use this
&gt; + * directly for authentication or construct their own #WebKitCredential.

We should be clear that the proposed credential is what it was stored in a previous session.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:120
&gt; + * Returns: (transfer full):a #WebKitCredential encapsulating credential details.

:a -&gt; : a

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:127
&gt; +    g_return_val_if_fail(WEBKIT_IS_AUTHENTICATION_REQUEST(request), 0);
&gt; +    const WebCore::Credential&amp; credential = request-&gt;priv-&gt;authenticationChallenge-&gt;proposedCredential()-&gt;core();

Leave an empty line here like in all other methods, jut for consistency.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:140
&gt; + * Returns: The host that this authentication challenge is applicable to.

Repeating the body here is not very useful, you should either remove the body or use a different sentence here, something like &quot;the host of @request&quot; or something similar.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:148
&gt; +    request-&gt;priv-&gt;host = request-&gt;priv-&gt;authenticationChallenge-&gt;protectionSpace()-&gt;host().utf8().data();

Remove the trailing .data() since .utf8() is already a CString

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:162
&gt; +gint webkit_authentication_request_get_port(WebKitAuthenticationRequest* request)

I think this could be unsigned, guint16 or just guint

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:183
&gt; +    request-&gt;priv-&gt;realm = request-&gt;priv-&gt;authenticationChallenge-&gt;protectionSpace()-&gt;realm().utf8().data();

Same here about the .data()

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:202
&gt; +    ProtectionSpaceAuthenticationScheme oldScheme = request-&gt;priv-&gt;authenticationChallenge-&gt;protectionSpace()-&gt;authenticationScheme();

Why is this old scheme?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:212
&gt; +        scheme = static_cast&lt;WebKitAuthenticationScheme&gt;(oldScheme);

You can just return here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:214
&gt; +        scheme = WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN;

Ditto. Why this special case instead of using ProtectionSpaceAuthenticationSchemeUnknown. I think we could just use the same values than WebCore and add compile time checks.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:220
&gt; +

Extra empty line here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:71
&gt; +

Missing * here

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:73
&gt; + */

Since: 2.2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:94
&gt; +webkit_authentication_request_get_proposed_credential  (WebKitAuthenticationRequest *request);

Leave only one space between function name and arguments for the longest function

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:33
&gt; + * @See_also: #WebKitWebView

WebKitWebView? See also #WebKitAuthenticationRequest, I&apos;d say

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:42
&gt; +    _WebKitCredential(const WebCore::Credential&amp; core)

Use coreCredential instead of jut core.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:94
&gt; +    delete credential;

This is wrong, the credential hasn&apos;t been allocated with new, but with g_slice_new. You should call the destructor manually and free the memory with g_slice_free.

credential-&gt;~WebKitCredential();
g_slice_free(WebKitCredential, credential);

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:101
&gt; + * @persistence: The persistence of the new credential

a #WebKitCredentialPersistence so that there will be a link here to the enum doc.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:102
&gt; + *

Extra empty line here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:112
&gt; +{
&gt; +    return webkitCredentialCreate(WebCore::Credential(

You should add g_return macros to make sure that username and password are valid pointers

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:131
&gt; +    credential-&gt;username = credential-&gt;credential.user().utf8().data();

Remove the .data() here too.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:148
&gt; +    credential-&gt;password = credential-&gt;credential.password().utf8().data();

And here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:183
&gt; +    return static_cast&lt;WebKitCredentialPersistence&gt;(credential-&gt;credential.persistence());

You should also add compile time checks to make sure this cast is always valid. See the macro COMPILE_ASSERT_MATCHING_ENUM in WebKitPrivate.h and examples of how to use it in files like WebKitError.cpp or WebKitNavigationPolicyDecision.cpp

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredentialPrivate.h:24
&gt; +#include &quot;WebKitCredential.h&quot;
&gt; +#include &quot;WebKitPrivate.h&quot;

Dont&apos; you need to include &lt;WebCore/Credential.h&gt; here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1398
&gt; +     * To handle this signal asynchronously you should keep a ref
&gt; +     * of the request and return TRUE.

To disable HTTP authentication entirely, connect to this signal and simply return TRUE;

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:62
&gt; +  &lt;index id=&quot;api-index-2-2&quot; role=&quot;2.2&quot;&gt;
&gt; +    &lt;title&gt;Index of new symbols in 2.2&lt;/title&gt;
&gt; +    &lt;xi:include href=&quot;xml/api-index-2.2.xml&quot;&gt;&lt;xi:fallback /&gt;&lt;/xi:include&gt;
&gt; +  &lt;/index&gt;  

Thanks!

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:192
&gt; +webkit_authentication_request_get_type

This is considere private from the docs point of view, as is expected to be used with the standard macro WEBKIT_TYPE_AUTHENTICATION_REQUEST

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:205
&gt; +&lt;SUBSECTION Private&gt;
&gt; +WebKitAuthenticationRequestPrivate
&gt; +&lt;/SECTION&gt;

webkit_authentication_request_get_type goes here too.

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:208
&gt; +&lt;SECTION&gt;
&gt; +&lt;FILE&gt;WebKitCredential&lt;/FILE&gt;

This could be a subsection of the WebKitAuthenticationRequest section.

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:218
&gt; +webkit_credential_new

Move the new at the beginning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912521</commentid>
    <comment_count>36</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-29 09:44:33 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #30)
&gt; &gt; (In reply to comment #29)
&gt; &gt; &gt; Looks great! I&apos;ll try testing it out with uzbl tonight.
&gt; 
&gt; Much appreciated for trying it out! It&apos;s really encouraging to see that this is likely to get some use and for the early working feedback!
&gt; 
&gt; &gt; 
&gt; &gt; First, the headers are missing from the variable which has the list of headers to install (webkit2gtk_h_api?).
&gt; &gt; 
&gt; 
&gt; Well spotted, I didn&apos;t know about that variable.

&quot;Remember to add it to webkit2gtk_headers variable in ​GNUmakefile.am file&quot;

in http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912527</commentid>
    <comment_count>37</comment_count>
      <attachid>207661</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-29 09:56:27 -0700</bug_when>
    <thetext>Created attachment 207661
Patch + docs + unit test

Proposal for the API + docs + unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912528</commentid>
    <comment_count>38</comment_count>
      <attachid>207661</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-29 09:59:37 -0700</bug_when>
    <thetext>Comment on attachment 207661
Patch + docs + unit test

I didn&apos;t see that Carlos just reviewed the previous patch proposal so I&apos;m going to cancel this and incorporate his feedback before submitting a new patch.  Sorry for the noise. Will hopefully submit the final patch tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912535</commentid>
    <comment_count>39</comment_count>
      <attachid>207661</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-07-29 10:16:16 -0700</bug_when>
    <thetext>Comment on attachment 207661
Patch + docs + unit test

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

Looks pretty good to me. Just a few comments...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:44
&gt; + *
&gt; + * Whenever the user attempts to load a page protected by HTTP
&gt; + * authentication, the user will need to provide their credentials.
&gt; + * This #WebKitAuthenticationRequest object provides client side
&gt; + * authentication support and is emitted with the
&gt; + * #WebKitWebView::authenticate signal.

For the WebKitPolicyDecision we talk about how to handle the request asynchronously. I think similar language here could be useful.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:211
&gt; +        scheme = static_cast&lt;WebKitAuthenticationScheme&gt;(psScheme - 1); /* ProtectionSpaceAuthScheme enum starts at 1 */

Doesn&apos;t C support manually assigning the enum values? I recommend just making them match up exactly and casting the value. Then you can use ASSERT_MATCHING_ENUM to prevent breaking it in the future. That will make this method a lot simpler.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:214
&gt; +    default:
&gt; +        scheme = WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN;

Seems unnecessary since ProtectionSpaceAuthenticationSchemeUnknown is already there.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:94
&gt; +    delete credential;

I think it&apos;s an error to allocate memory with the slice allocator and then delete it. Instead I believe you should manually call the destructor and then deallocate it with the slice allocation API.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:115
&gt; +    return webkitCredentialCreate(WebCore::Credential(
&gt; +        String::fromUTF8(username),
&gt; +        String::fromUTF8(password),
&gt; +        static_cast&lt;WebCore::CredentialPersistence&gt;(persistence)));

this can be one line. :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:441
&gt; +    CredentialStorageMode credentialStorageMode;
&gt; +    if (webkit_authentication_request_can_save_credentials(request))
&gt; +        credentialStorageMode = AllowPersistentStorage;
&gt; +    else
&gt; +        credentialStorageMode = DisallowPersistentStorage;

I think I&apos;d prefer an inline conditional here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912641</commentid>
    <comment_count>40</comment_count>
    <who name="Ben Boeckel">mathstuf</who>
    <bug_when>2013-07-29 17:41:37 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #31)
&gt; &gt; so it seems that the auth scheme is mismatching somewhere. 
&gt; 
&gt; Hmmm, I&apos;ll take a look at that

Some more information:

Breakpoint 2, webkit_authentication_request_get_scheme (request=0xbde520) at ../Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:198
198     {
(gdb) n
199         g_return_val_if_fail(WEBKIT_IS_AUTHENTICATION_REQUEST(request), WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN);
(gdb) fin
Run till exit from #0  webkit_authentication_request_get_scheme (request=0xbde520) at ../Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:199
0x0000000000410349 in authenticate_cb (view=0x6a63c0, request=0xbde520, data=0x0) at src/gui.c:779

so it looks like WEBKIT_IS_AUTHENTICATION_REQUEST(request) is failing…

&gt; &gt; I also see m_previousFailureCount in there. Is it worth plumbing that through (at least as a &quot;has this auth been tried before?&quot; property)?
&gt; 
&gt; Sure I&apos;ll add a _get_previous_failures() function

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912702</commentid>
    <comment_count>41</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-30 01:37:38 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #34)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; so it seems that the auth scheme is mismatching somewhere. 
&gt; &gt; 
&gt; &gt; Hmmm, I&apos;ll take a look at that
&gt; 
&gt; Some more information:
&gt; 
&gt; Breakpoint 2, webkit_authentication_request_get_scheme (request=0xbde520) at ../Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:198
&gt; 198     {
&gt; (gdb) n
&gt; 199         g_return_val_if_fail(WEBKIT_IS_AUTHENTICATION_REQUEST(request), WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN);
&gt; (gdb) fin
&gt; Run till exit from #0  webkit_authentication_request_get_scheme (request=0xbde520) at ../Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:199
&gt; 0x0000000000410349 in authenticate_cb (view=0x6a63c0, request=0xbde520, data=0x0) at src/gui.c:779
&gt; 
&gt; so it looks like WEBKIT_IS_AUTHENTICATION_REQUEST(request) is failing…
&gt; 

I checked this in my unit test and it seems the problem was that the case was falling through to default (no break).  In the latest patch it should work fine, but perhaps you want to hold off testing again until I submit a final patch.

&gt; &gt; &gt; I also see m_previousFailureCount in there. Is it worth plumbing that through (at least as a &quot;has this auth been tried before?&quot; property)?
&gt; &gt; 
&gt; &gt; Sure I&apos;ll add a _get_previous_failures() function
&gt; 
&gt; Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912732</commentid>
    <comment_count>42</comment_count>
      <attachid>207532</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-30 03:00:42 -0700</bug_when>
    <thetext>Comment on attachment 207532
Patch + docs

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:202
&gt;&gt; +    ProtectionSpaceAuthenticationScheme oldScheme = request-&gt;priv-&gt;authenticationChallenge-&gt;protectionSpace()-&gt;authenticationScheme();
&gt; 
&gt; Why is this old scheme?

I was struggling to come up with a useful variable name.  In the later patch I changed to psScheme, but suggestions are welcome.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:214
&gt;&gt; +        scheme = WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN;
&gt; 
&gt; Ditto. Why this special case instead of using ProtectionSpaceAuthenticationSchemeUnknown. I think we could just use the same values than WebCore and add compile time checks.

Agreed

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:253
&gt; +    request-&gt;priv-&gt;authenticationChallenge-&gt;listener()-&gt;useCredential(0);

I know we&apos;ve discussed this before but I propose to change this to  so that the request-&gt;priv-&gt;authenticationChallenge-&gt;listener()-&gt;cancel(); so that the cancel() function is actually plumbed.  For those what want to authenticate with no credentials, just pass 0 into _authenticate().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912822</commentid>
    <comment_count>43</comment_count>
      <attachid>207731</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-30 06:46:35 -0700</bug_when>
    <thetext>Created attachment 207731
Patch + docs + unit test

Final patch + docs + unit test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912832</commentid>
    <comment_count>44</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-30 07:10:09 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; Created an attachment (id=207731) [details]
&gt; Patch + docs + unit test
&gt; 
&gt; Final patch + docs + unit test?

Thanks very much for all the reviews, feedback and comments.  I believe I&apos;ve addressed everything so this could well be the final patch if you want to take a last look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913145</commentid>
    <comment_count>45</comment_count>
    <who name="Ben Boeckel">mathstuf</who>
    <bug_when>2013-07-30 19:47:58 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; Thanks very much for all the reviews, feedback and comments.  I believe I&apos;ve addressed everything so this could well be the final patch if you want to take a last look.

Things look good here. I am wondering how to get an HTML form to fire an authentication signal, but it seems that nothing in WebKit2 actually uses it yet, so that seems to be separate. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913247</commentid>
    <comment_count>46</comment_count>
      <attachid>207731</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-07-31 02:23:34 -0700</bug_when>
    <thetext>Comment on attachment 207731
Patch + docs + unit test

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

API looks good to me in general, other reviewer should approve it too. Code looks great too, I have just some minor comments. The main problem is that the unit test is very poor. If possible, we should check all API methods, the most important ones, authenticate and cancel are not even tested.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:57
&gt; +    webkit_authentication_request_authenticate(authDialog-&gt;priv-&gt;request.get(), 0);
&gt;  }

I think we could destroy the dialog here, for consistency with the ok button approach. We can even get rid of the helper methods, since they are used only once in the callbacks.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:126
&gt; + * Returns: (transfer full): A #WebKitCredential encapsulating credential details.

or %NULL if there isn&apos;t any previous credential saved. It&apos;s important to document this can return NULL.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:216
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_DEFAULT, ProtectionSpaceAuthenticationSchemeDefault);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_HTTP_BASIC, ProtectionSpaceAuthenticationSchemeHTTPBasic);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_HTTP_DIGEST, ProtectionSpaceAuthenticationSchemeHTTPDigest);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_HTML_FORM, ProtectionSpaceAuthenticationSchemeHTMLForm);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_NTLM, ProtectionSpaceAuthenticationSchemeNTLM);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_NEGOTIATE, ProtectionSpaceAuthenticationSchemeNegotiate);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_CLIENT_CERTIFICATE_REQUESTED, ProtectionSpaceAuthenticationSchemeClientCertificateRequested);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_SERVER_TRUST_EVALUATION_REQUESTED, ProtectionSpaceAuthenticationSchemeServerTrustEvaluationRequested);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_AUTHENTICATION_SCHEME_UNKNOWN, ProtectionSpaceAuthenticationSchemeUnknown);

We normally add these checks at the beginning of the file, right before the methods, not inside a function, this makes the function more difficult to read.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:247
&gt; +guint webkit_authentication_request_get_previous_failures(WebKitAuthenticationRequest* request)

This returns the amount of previous failures, so I would call this either webkit_authentication_request_get_n_previous_failures or webkit_authentication_request_get_previous_failure_count.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:257
&gt; + * @credential: (transfer none):a #WebKitCredential

:a -&gt; : a

You should also add a (allow-none) annotation and say, a #WebKitCredential or %NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:260
&gt; + * supplied. To authenticate without credentials, pass NULL as the credential.

&quot;authenticate without credentials&quot; sounds confusing to me. I would say, &quot;To continue without credentials pass %NULL as @credential&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:268
&gt; +    if (credential)     {

Leave only one spaces between ) and {. The style checker should probably check this.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:34
&gt; +#define WEBKIT_TYPE_AUTHENTICATION_REQUEST   (webkit_authentication_request_get_type())
&gt; +#define WEBKIT_AUTHENTICATION_REQUEST(obj)            (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_AUTHENTICATION_REQUEST, WebKitAuthenticationRequest))

Line up macros, please.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.h:74
&gt; + * Since 2.2

Since: 2.2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:64
&gt; + * Since 2.2

Since: 2.2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:70
&gt; +    WebKitCredential* copy = g_slice_new(WebKitCredential);
&gt; +    new (copy) WebKitCredential(*credential);
&gt; +    return copy;

Maybe it would be simpler to simply return webkitCredentialCreate(credential-&gt;credential);

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:75
&gt; + * @credential: (transfer full): A #WebKitCredential

Don&apos;t use the transfer full annotation in this case.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:176
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_CREDENTIAL_PERSISTENCE_NONE, WebCore::CredentialPersistenceNone);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_CREDENTIAL_PERSISTENCE_FOR_SESSION, WebCore::CredentialPersistenceForSession);
&gt; +    COMPILE_ASSERT_MATCHING_ENUM(WEBKIT_CREDENTIAL_PERSISTENCE_PERMANENT, WebCore::CredentialPersistencePermanent);

Move this out of this function too, please.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.h:44
&gt; + * Since 2.2

Since: 2.2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.h:63
&gt; +WEBKIT_API WebKitCredential *
&gt; +webkit_credential_new                  (const gchar                 *username,
&gt; +                                        const gchar                 *password,

Nit: the _new method is usually the first one, could you please move it?

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:220
&gt; +WEBKIT_TYPE_CREDENTIAL

Move this to the other Standard subsection

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:221
&gt; +webkit_credential_get_type

And this to the private one

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:825
&gt; +        const gchar *host = webkit_authentication_request_get_host(request);
&gt; +        guint port = webkit_authentication_request_get_port(request);

You get these but they are not checked at all.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:826
&gt; +        const gchar *realm = webkit_authentication_request_get_realm(request);

Don&apos;t need to cache this, you can directly add g_assert_cmpstr(webkit_authentication_request_get_realm(request), ==, &quot;my realm&quot;);

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:827
&gt; +        WebKitAuthenticationScheme scheme = webkit_authentication_request_get_scheme(request);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:828
&gt; +        gboolean isProxy = webkit_authentication_request_is_for_proxy(request);

Ditto, g_assert(!webkit_authentication_request_is_for_proxy(request));

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:829
&gt; +        guint previousFailures = webkit_authentication_request_get_previous_failures(request);

This is not checked either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913262</commentid>
    <comment_count>47</comment_count>
      <attachid>207731</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-07-31 03:22:09 -0700</bug_when>
    <thetext>Comment on attachment 207731
Patch + docs + unit test

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

Thanks for the review!

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:57
&gt;&gt;  }
&gt; 
&gt; I think we could destroy the dialog here, for consistency with the ok button approach. We can even get rid of the helper methods, since they are used only once in the callbacks.

Sounds good to me.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:126
&gt;&gt; + * Returns: (transfer full): A #WebKitCredential encapsulating credential details.
&gt; 
&gt; or %NULL if there isn&apos;t any previous credential saved. It&apos;s important to document this can return NULL.

Good point

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:247
&gt;&gt; +guint webkit_authentication_request_get_previous_failures(WebKitAuthenticationRequest* request)
&gt; 
&gt; This returns the amount of previous failures, so I would call this either webkit_authentication_request_get_n_previous_failures or webkit_authentication_request_get_previous_failure_count.

Ok, I&apos;ll go for webkit_authentication_request_get_previous_failure_count since it ties in with the function that it calls

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:70
&gt;&gt; +    return copy;
&gt; 
&gt; Maybe it would be simpler to simply return webkitCredentialCreate(credential-&gt;credential);

Good idea.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.h:63
&gt;&gt; +                                        const gchar                 *password,
&gt; 
&gt; Nit: the _new method is usually the first one, could you please move it?

Sure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913734</commentid>
    <comment_count>48</comment_count>
      <attachid>207922</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-01 07:28:08 -0700</bug_when>
    <thetext>Created attachment 207922
Rebased to master, addressed all comments and improved unit test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914290</commentid>
    <comment_count>49</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2013-08-02 14:49:57 -0700</bug_when>
    <thetext>I&apos;m happy with this API too!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915044</commentid>
    <comment_count>50</comment_count>
      <attachid>207922</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-08-06 23:48:18 -0700</bug_when>
    <thetext>Comment on attachment 207922
Rebased to master, addressed all comments and improved unit test

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

Looks great, there are still some minor issues and nits. You might consider to split the unit test in several test cases too, making sure they are independent to each other. For example &quot;authentication-request&quot; to check WebKitAuthentication values (port, host, scheme, can_save_credentials, etc) &quot;authentication-cancel&quot; to check cancellation, &quot;authentication-failure&quot; to check failures and failure counts, &quot;authentication-no-credential&quot; to check continue the load without credentials and &quot;authetication-success&quot; to check successful auth and subsequent loads of the same auth uri.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationDialog.cpp:23
&gt; +#include &quot;AuthenticationChallengeProxy.h&quot;

This is already inclucded by WebKitAuthenticationRequestPrivate.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:51
&gt; + * In case the client application does not wish
&gt; + * to handle this signal WebKit will provide a default handler. To handle
&gt; + * authentication asynchronously, simply increase the reference count of the
&gt; + * WebKitAuthenticationRequest object.

I think this should be in the signal documentation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:211
&gt; + * Returns: The authentication scheme of @request.

a #WebKitAuthenticationScheme .... this way there&apos;s a link to the WebKitAuthenticationScheme to know what this is about. This is important, because after get_host and get_port, get_scheme sounds like a protocol name.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:259
&gt; + * @credential: (transfer none) (allow-none): A #WebKitCredential

A #WebKitCredential, or %NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:274
&gt; +    if (credential) {
&gt; +        RefPtr&lt;WebCredential&gt; webCredential = WebCredential::create(webkitCredentialGetCredential(credential));
&gt; +        request-&gt;priv-&gt;authenticationChallenge-&gt;listener()-&gt;useCredential(webCredential.get());
&gt; +    } else
&gt; +        request-&gt;priv-&gt;authenticationChallenge-&gt;listener()-&gt;useCredential(0);

I think this could be simplified as something like:

RefPtr&lt;WebCredential&gt; webCredential = credential ? WebCredential::create(webkitCredentialGetCredential(credential)) : 0;
request-&gt;priv-&gt;authenticationChallenge-&gt;listener()-&gt;useCredential(webCredential.get());

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:92
&gt; +    g_assert(credential);

Do not use g_assert here, this is public API, use g_return_val_if_fail() instead.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:107
&gt; +{
&gt; +    credential-&gt;~WebKitCredential();

You could add a g_return macro here too, or return early if credential is NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1394
&gt; +     * of the request and return TRUE. To disable HTTP authentication

%TRUE

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:839
&gt; +            // Require authentication

Nit: Finish comments with period.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:843
&gt; +                soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_COPY, authSuccessHTMLString, strlen(authSuccessHTMLString));

authSuccessHTMLString is a static var, we don&apos;t need to copy it, use SOUP_MEMORY_STATIC instead.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:850
&gt; +                // Authentication not successful, display a &quot;401 Authorization Required&quot; page

Nit: Finish comments with period.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:852
&gt; +                soup_message_body_append(message-&gt;response_body, SOUP_MEMORY_COPY, authFailureHTMLString, strlen(authFailureHTMLString));

authFailureHTMLString is a static var, we don&apos;t need to copy it, use SOUP_MEMORY_STATIC instead.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:854
&gt; +

Remove this empty line.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:863
&gt; +        // reset the retry count of the fake server when a page is loaded

reset -&gt; Reset. Finish the comment with period.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:896
&gt; +    kServer = new WebKitTestServer();
&gt; +    kServer-&gt;run(test-&gt;serverCallback);

If this is going to be used only by this test, it doesn&apos;t need to be a global variable.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:898
&gt; +    // test no stored credentials

Please fix all comments, see http://www.webkit.org/coding/coding-style.html#comments-sentences

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:906
&gt; +    // don&apos;t test port, it is randomly assigned by libsoup in WebKitTestServer

You can test it, use kServer-&gt;baseURI() that returns a SoupURI that you can use to query both the port and the host instead of hardcoding 127.0.0.1.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:910
&gt; +    g_assert(!webkit_authentication_request_get_previous_failure_count(request));

Use g_assert_cmpuint in this case

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:913
&gt; +    g_assert(!webkit_authentication_request_can_save_credentials(request));

This is confusing here, I would test this in a separate comment.

// Test credentials can&apos;t be saved when private brwosing is enabled.
webkit_settings_set_enable_private_browsing(webkit_web_view_get_settings(test-&gt;m_webView), TRUE);
g_assert(!webkit_authentication_request_can_save_credentials(request));

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:920
&gt; +    // test cancel
&gt; +    webkit_authentication_request_cancel(request);
&gt; +    test-&gt;waitUntilLoadFinished();
&gt; +    g_assert(!webkit_web_view_get_title(test-&gt;m_webView));

What exactly happens in this case? How does the load finish? load failed is emitted with cancel error? I that&apos;s is the case we should test that, connect to load-failed and check the given error is cancel. This behaviour should probably be documented in the webkit_authentication_request_cancel API doc too.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:923
&gt; +    webkit_settings_set_enable_private_browsing(settings, FALSE);

I would move this to the block that checks whether credentials can be stored, cheking that after setting this to FALSE webkit_authentication_request_can_save_credentials(request) returns TRUE.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:930
&gt; +    // doesn&apos;t ask for new credentials
&gt; +    test-&gt;waitUntilLoadFinished();
&gt; +    g_assert(!webkit_web_view_get_title(test-&gt;m_webView));

Shouldn&apos;t it be &quot;401 Authorization Required&quot; when continuing without credentials?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:940
&gt; +    g_assert(webkit_authentication_request_get_previous_failure_count(request) == 1);

Use g_assert_cmpuint

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1405
&gt; +    AuthenticationTest::add(&quot;WebKitWebView&quot;, &quot;authentication&quot;, testWebViewAuthenticationRequest);

Any reason you added this at the beginning? It doesn&apos;t really matter, but we usually add new tests at the end</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915050</commentid>
    <comment_count>51</comment_count>
      <attachid>207922</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-08-07 00:49:01 -0700</bug_when>
    <thetext>Comment on attachment 207922
Rebased to master, addressed all comments and improved unit test

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

Couple little things...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:202
&gt; +    request-&gt;priv-&gt;realm = request-&gt;priv-&gt;authenticationChallenge-&gt;protectionSpace()-&gt;realm().utf8();
&gt; +    return request-&gt;priv-&gt;realm.data();

The realm doesn&apos;t change, so I think it makes sense to do this:

if (request-&gt;priv-&gt;realm.isNull())
    request-&gt;priv-&gt;realm = request-&gt;priv-&gt;authenticationChallenge-&gt;protectionSpace()-&gt;realm().utf8();

This will prevent an application that caches the realm from crashing if something else calls the method again.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:254
&gt; +guint webkit_authentication_request_get_previous_failure_count(WebKitAuthenticationRequest* request)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_AUTHENTICATION_REQUEST(request), 0);
&gt; +
&gt; +    return request-&gt;priv-&gt;authenticationChallenge-&gt;previousFailureCount();
&gt; +}

We can&apos;t really expose this properly. The reason is that the authentication request we get from soup only exposes whether or not the challenge is a retry. This will always be one or zero, regardless of how many times it has failed. So I think you should either remove this method or turn it into webkit_authentication_request_is_retry.

See AuthenticationChallenge::AuthenticationChallenge in AuthenticationChallengeSoup.cpp.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCredential.cpp:125
&gt; +    credential-&gt;username = credential-&gt;credential.user().utf8();

Same comment here and for password about the realm above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915126</commentid>
    <comment_count>52</comment_count>
      <attachid>207922</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-07 06:24:18 -0700</bug_when>
    <thetext>Comment on attachment 207922
Rebased to master, addressed all comments and improved unit test

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:51
&gt;&gt; + * WebKitAuthenticationRequest object.
&gt; 
&gt; I think this should be in the signal documentation.

Since all this information is already in the signal documentation I&apos;ll just remove this paragraph.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:202
&gt;&gt; +    return request-&gt;priv-&gt;realm.data();
&gt; 
&gt; The realm doesn&apos;t change, so I think it makes sense to do this:
&gt; 
&gt; if (request-&gt;priv-&gt;realm.isNull())
&gt;     request-&gt;priv-&gt;realm = request-&gt;priv-&gt;authenticationChallenge-&gt;protectionSpace()-&gt;realm().utf8();
&gt; 
&gt; This will prevent an application that caches the realm from crashing if something else calls the method again.

I didn&apos;t realise calling it again would crash, so thanks for spotting that.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:254
&gt;&gt; +}
&gt; 
&gt; We can&apos;t really expose this properly. The reason is that the authentication request we get from soup only exposes whether or not the challenge is a retry. This will always be one or zero, regardless of how many times it has failed. So I think you should either remove this method or turn it into webkit_authentication_request_is_retry.
&gt; 
&gt; See AuthenticationChallenge::AuthenticationChallenge in AuthenticationChallengeSoup.cpp.

I realised that when I was writing the unit test and its been on my mind. EFL exposes a is_retry function using soup underneath as well.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:920
&gt;&gt; +    g_assert(!webkit_web_view_get_title(test-&gt;m_webView));
&gt; 
&gt; What exactly happens in this case? How does the load finish? load failed is emitted with cancel error? I that&apos;s is the case we should test that, connect to load-failed and check the given error is cancel. This behaviour should probably be documented in the webkit_authentication_request_cancel API doc too.

Will do, thats a really good point.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1405
&gt;&gt; +    AuthenticationTest::add(&quot;WebKitWebView&quot;, &quot;authentication&quot;, testWebViewAuthenticationRequest);
&gt; 
&gt; Any reason you added this at the beginning? It doesn&apos;t really matter, but we usually add new tests at the end

I thought it was meant to be alphabetical...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915128</commentid>
    <comment_count>53</comment_count>
      <attachid>207922</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-08-07 06:25:46 -0700</bug_when>
    <thetext>Comment on attachment 207922
Rebased to master, addressed all comments and improved unit test

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:51
&gt;&gt;&gt; + * WebKitAuthenticationRequest object.
&gt;&gt; 
&gt;&gt; I think this should be in the signal documentation.
&gt; 
&gt; Since all this information is already in the signal documentation I&apos;ll just remove this paragraph.

Carlos, it&apos;s probably fine to leave it in both places, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915147</commentid>
    <comment_count>54</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-08-07 07:49:27 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; (From update of attachment 207922 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=207922&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:51
&gt; &gt;&gt;&gt; + * WebKitAuthenticationRequest object.
&gt; &gt;&gt; 
&gt; &gt;&gt; I think this should be in the signal documentation.
&gt; &gt; 
&gt; &gt; Since all this information is already in the signal documentation I&apos;ll just remove this paragraph.
&gt; 
&gt; Carlos, it&apos;s probably fine to leave it in both places, no?

There&apos;s a link to the signal documentation there. It looked weird to me there when I read it, but if you think it&apos;s useful there, it&apos;s fine with me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915338</commentid>
    <comment_count>55</comment_count>
      <attachid>208316</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-08 00:41:25 -0700</bug_when>
    <thetext>Created attachment 208316
Patch + docs + unit test vs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915341</commentid>
    <comment_count>56</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-08 00:47:41 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; Created an attachment (id=208316) [details]
&gt; Patch + docs + unit test vs

I&apos;ve gone through and addressed all the comments, including splitting the unit test into 5 separate tests and testing load sequences by inheriting from LoadTrackingTest as Carlos suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915398</commentid>
    <comment_count>57</comment_count>
      <attachid>208316</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-08-08 05:32:38 -0700</bug_when>
    <thetext>Comment on attachment 208316
Patch + docs + unit test vs

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

Looks good to me, thank you very much.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitAuthenticationRequest.cpp:282
&gt; + * #WebKitWebView::load-failed signal with a #WebKitNetworkError of type #WEBKIT_NETWORK_ERROR_CANCELLED being emitted.

#WEBKIT_NETWORK_ERROR_CANCELLED -&gt; %WEBKIT_NETWORK_ERROR_CANCELLED

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1395
&gt; +     * entirely, connect to this signal and simply return %TRUE;

s/;/./

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1275
&gt; +            if (authorization &amp;&amp; !strcmp(authorization, authExpectedAuthorization)) {

You can use g_strcmp0 that hanldes NULL so that you don&apos;t need to check first if authorization != NULL.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1332
&gt; +    static WebKitTestServer* kServer = new WebKitTestServer();
&gt; +    kServer-&gt;run(test-&gt;serverCallback);

You can make the server global like all other tests do, so that you don&apos;t need to create/delete the test for every test case. It will be run even if you launch tests that don&apos;t need it, but it&apos;s harmless. We could consider add a ensureWebKitTestServer() to start the server on demand, though, but it would be a separate patch.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1347
&gt; +    g_assert(!webkit_authentication_request_can_save_credentials(request));

You should also check this is TRUE when private browsing is FALSE and webkit has been compiled with libsecret.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1382
&gt; +    WebKitAuthenticationRequest* request = test-&gt;waitForAuthenticationRequest();
&gt; +    WebKitCredential* credential = webkit_credential_new(authTestUsername, &quot;wrongpassword&quot;, WEBKIT_CREDENTIAL_PERSISTENCE_NONE);

You could test here that the first time is_retry is FALSE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915468</commentid>
    <comment_count>58</comment_count>
      <attachid>208349</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-08 09:18:07 -0700</bug_when>
    <thetext>Created attachment 208349
Final patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915472</commentid>
    <comment_count>59</comment_count>
      <attachid>208349</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-08 09:23:20 -0700</bug_when>
    <thetext>Comment on attachment 208349
Final patch

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

All changes have been applied - Carlos could you take a last look if they&apos;re ok and cq+?

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1428
&gt; +        if (authorization &amp;&amp; !strcmp(authorization, authExpectedAuthorization)) {

I tried g_strcmp0, but since authExpectedAuthorization is never NULL it always returns true and never gets through to sending a challenge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915509</commentid>
    <comment_count>60</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2013-08-08 11:06:21 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; (From update of attachment 208349 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=208349&amp;action=review
&gt; 
&gt; All changes have been applied - Carlos could you take a last look if they&apos;re ok and cq+?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebView.cpp:1428
&gt; &gt; +        if (authorization &amp;&amp; !strcmp(authorization, authExpectedAuthorization)) {
&gt; 
&gt; I tried g_strcmp0, but since authExpectedAuthorization is never NULL it always returns true and never gets through to sending a challenge.

g_strcmp0 doesn&apos;t return TRUE/False, but -1, 0, 1. It handles NULL by considering it lower than non NULL strings, but it will only return 0 if both are NULL or non-NULL and equal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915734</commentid>
    <comment_count>61</comment_count>
      <attachid>208408</attachid>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2013-08-09 02:22:56 -0700</bug_when>
    <thetext>Created attachment 208408
Final final patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915754</commentid>
    <comment_count>62</comment_count>
      <attachid>208408</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-09 03:47:37 -0700</bug_when>
    <thetext>Comment on attachment 208408
Final final patch

Clearing flags on attachment: 208408

Committed r153882: &lt;http://trac.webkit.org/changeset/153882&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>915755</commentid>
    <comment_count>63</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-09 03:47:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207091</attachid>
            <date>2013-07-19 07:13:16 -0700</date>
            <delta_ts>2013-07-19 09:58:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99352-20130719151333.patch</filename>
            <type>text/plain</type>
            <size>37022</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDBjMTVhMDA5NzkzMThh
YzQxMGM0ODE0ZWU5YTRiMDYyYTgyODIwNi4uOWYwYjA1YWM2NTJlMWZiNWM0OTQxZjBhOWE3MWI3
MWQ2MGUyNGViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEzLTA3LTE5ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0LCB0byBi
ZQorICAgICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6cnVuLWF1
dGhlbnRpY2F0aW9uLWRpYWxvZyBzaWduYWwgdG8KKyAgICAgICAgbGV0IGNsaWVudCBhcHBsaWNh
dGlvbnMgdG8gcHJvdmlkZSB0aGVpciBvd24gYXV0aGVudGljYXRpb24gZGlhbG9nCisgICAgICAg
IHdoZW4gdGhlIHVzZXIgaXMgY2hhbGxlbmdlZCB3aXRoIGh0dHAgYXV0aGVudGljYXRpb24uCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcDoKKyAgICAgICAgKHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nTmV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdC5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0
QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0RGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3RHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfYXV0
aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRB
dXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3RDcmVhdGUpOgorICAgICAgICAod2Via2l0X2F1dGhl
bnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X3NldF9hdXRoZW50aWNhdGlvbl9jaGFsbGVuZ2UpOgor
ICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9hdXRoZW50
aWNhdGlvbl9jaGFsbGVuZ2UpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxv
Z19yZXF1ZXN0X3NldF91c2VybmFtZSk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25f
ZGlhbG9nX3JlcXVlc3RfZ2V0X3VzZXJuYW1lKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9kaWFsb2dfcmVxdWVzdF9zZXRfcGFzc3dvcmQpOgorICAgICAgICAod2Via2l0X2F1dGhl
bnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9wYXNzd29yZCk6CisgICAgICAgICh3ZWJraXRf
YXV0aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3Rfc2V0X3JlbWVtYmVyX3Bhc3N3b3JkKToKKyAg
ICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9nZXRfcmVtZW1iZXJf
cGFzc3dvcmQpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0
X3NldF9wcml2YXRlX2Jyb3dzaW5nKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9k
aWFsb2dfcmVxdWVzdF9nZXRfcHJpdmF0ZV9icm93c2luZyk6CisgICAgICAgICh3ZWJraXRfYXV0
aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3RfYXV0aGVudGljYXRlKToKKyAgICAgICAgKHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9jYW5jZWwpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdC5oOiBBZGRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1Jl
cXVlc3RQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dExvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VJbkZyYW1lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSdW5BdXRoZW50aWNhdGlvbkRpYWxvZyk6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJW
aWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25E
aWFsb2dSZXF1ZXN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6CisK
IDIwMTMtMDctMTcgIERvbmctR3dhbiBLaW0gIDxkb25nZ3dhbi5raW1Ac2Ftc3VuZy5jb20+CiAK
ICAgICAgICAgW0VGTF1bV0syXSBFV0syQ29va2llTWFuYWdlclRlc3Qgc2hvdWxkIGJlIGRlZmlu
ZWQgYnkgaW5oZXJpdGluZyBmcm9tIEVXSzJVbml0VGVzdEJhc2UuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBiMTUwMTdmZWI4Y2QwYzVmODg0YTU4ZDk1OTM1OTdiZGE2YTI3NjJl
Li45N2ZjZTQ0ZjQ2MTI1NTY0Y2ViNzMzMWRhOGM1YTFlY2E0MWU0YTQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTY1Myw2ICs2NTMsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25E
aWFsb2cuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZy5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QuaCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFs
b2dSZXF1ZXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcAppbmRleCAwNjk5ZGE3ZWVkMzFjNTU0NWNlOTA3MzdhYzJhMDNjMjUxMDBjYzc1
Li5iYzE0ZTMyZWY2NWZkNTBjMzVhMjMxN2U3YjhhOGViOWQwMWI0OWYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxv
Zy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCkBAIC0xOSw3ICsxOSwxMCBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3RQcml2YXRlLmgiCiAKKyNpbmNsdWRlICJBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lvbkxp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgogI2luY2x1ZGUgIldlYktpdFBy
aXZhdGUuaCIKQEAgLTI4LDcgKzMxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogc3Ry
dWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUgewogICAgIFJlZlB0cjxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLQorICAg
IEdSZWZQdHI8X1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdD4gcmVxdWVzdDsKICAg
ICBHdGtXaWRnZXQqIGF1dGhXaWRnZXQ7CiAgICAgR3RrV2lkZ2V0KiBkZWZhdWx0QnV0dG9uOwog
ICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzdHlsZUNvbnRleHQ7CkBAIC0xMzgsMTAgKzE0
MSwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX2NsYXNzX2lu
aXQoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbAogICAgIHdpZGdldENsYXNzLT5tYXAgPSB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ01hcDsKIH0KIAotR3RrV2lkZ2V0KiB3ZWJraXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ05ldyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCitHdGtXaWRnZXQq
IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
UmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0
aERpYWxvZyA9IFdFQktJVF9BVVRIRU5USUNBVElPTl9ESUFMT0coZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRywgTlVMTCkpOworCisgICAgYXV0aERpYWxvZy0+
cHJpdi0+cmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKKyAgICBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9kaWFsb2dfcmVxdWVzdF9nZXRfYXV0aGVudGljYXRpb25fY2hhbGxlbmdlKHJlcXVlc3Qp
OwogICAgIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2U7Ci0gICAgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFs
aXplKGF1dGhEaWFsb2csIG1vZGUpOworCisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVk
ID0gd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9wcml2YXRlX2Jyb3dz
aW5nKHJlcXVlc3QpOworICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3RvcmFn
ZU1vZGU7CisgICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCisgICAgICAgY3JlZGVudGlh
bFN0b3JhZ2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICBlbHNlCisgICAg
ICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVudFN0b3JhZ2U7CisgICAg
d2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXplKGF1dGhEaWFsb2csIGNyZWRlbnRp
YWxTdG9yYWdlTW9kZSk7CiAgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aERpYWxvZyk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50
aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA3ZDRkZTJhNmQzZDgxOWNiMWM2ODczMDNkYmMx
NWEwYzdkMTNlZTQyLi5iMzI5MzUxN2U4ZjE3ZWEzMmI2M2YwMjg1ZGM2ZTkwNzllZmJmNWRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50
aWNhdGlvbkRpYWxvZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAogI2RlZmluZSBXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZ19oCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCisjaW5j
bHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0QXV0aGVudGljYXRpb25XaWRnZXQuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKQEAgLTQ4
LDcgKzQ4LDcgQEAgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKIH07
CiAKIEdUeXBlIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsKLUd0a1dp
ZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdldCogd2Vi
a2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1
ZXN0Kik7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1Jl
cXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiMzk2OTdhNjRhOWNkMTM4ZmIzYjc1N2JhYjA5Y2RiOWNi
OWNkZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QuY3BwCkBAIC0wLDAgKzEsMjc5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5LmgiCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVy
LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5o
PgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgorICogU0VDVElP
TjogV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRp
b246IEEgcmVxdWVzdCB0byBvcGVuIGEgYXV0aGVudGljYXRpb24gZGlhbG9nCisgKiBAVGl0bGU6
IFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdAorICogQFNlZV9hbHNvOiAjV2ViS2l0
V2ViVmlldworICoKKyAqIFdoZW5ldmVyIHRoZSB1c2VyIGF0dGVtcHRzIHRvIGxvYWQgYSBwYWdl
IHByb3RlY3RlZCBieSBodHRwCisgKiBhdXRoZW50aWNhdGlvbiwgV2ViS2l0IHdpbGwgbmVlZCB0
byBzaG93IGEgZGlhbG9nIGZvciB0aGUgdXNlciB0bworICogZW50ZXIgdGhlaXIgdXNlcm5hbWUg
YW5kIHBhc3N3b3JkLiBGb3IgdGhhdCB0byBoYXBwZW4gaW4gYSBnZW5lcmFsIHdheSwKKyAqIGlu
c3RlYWQgb2YganVzdCBvcGVuaW5nIHRoZSBjdXN0b20gI1dlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nCisgKiAod2hpY2ggbWlnaHQgYmUgbm90IGRlc2lyYWJsZSBpbiBzb21lIGNhc2VzLCB3aGVu
IHRoZSB1c2VyIHdvdWxkCisgKiBwcmVmZXIgdG8gdXNlIHRoZWlyIG93biBhdXRoZW50aWNhdGlv
biBkaWFsb2cpLCBXZWJLaXQgd2lsbCBmaXJlIHRoZQorICogI1dlYktpdFdlYlZpZXc6OnJ1bi1h
dXRoZW50aWNhdGlvbi1kaWFsb2cgc2lnbmFsIHdpdGggYQorICogI1dlYktpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nUmVxdWVzdCBvYmplY3QsIHdoaWNoIHdpbGwgYWxsb3cKKyAqIHRoZSBjbGllbnQg
YXBwbGljYXRpb24gdG8gc3BlY2lmeSB0aGUgY3JlZGVudGlhbHMgYW5kIHRvIHN1Ym1pdCB0aGUg
cmVxdWVzdC4KKyAqCisgKiBJbiBjYXNlIHRoZSBjbGllbnQgYXBwbGljYXRpb24gZG9lcyBub3Qg
d2lzaCB0byBoYW5kbGUgdGhpcyBzaWduYWwsCisgKiBXZWJLaXQgd2lsbCBwcm92aWRlIGEgZGVm
YXVsdCBoYW5kbGVyIHdoaWNoIHdpbGwgYXN5bmNocm9ub3VzbHkgcnVuCisgKiBhICNXZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAqLwor
CitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdFByaXZhdGUgeworICAg
IFJlZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKKyAgICBDU3RyaW5nIHVzZXJuYW1lOworICAgIENTdHJpbmcgcGFzc3dvcmQ7CisgICAg
Ym9vbCByZW1lbWJlclBhc3N3b3JkOworICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsK
KyAgICBib29sIGhhbmRsZWRSZXF1ZXN0OworfTsKKworV0VCS0lUX0RFRklORV9UWVBFKFdlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCwgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxv
Z19yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKTsKKworZW51bSB7CisgICAgUFJPUF8wLAorICAgIFBS
T1BfVVNFUk5BTUUsCisgICAgUFJPUF9QQVNTV09SRCwKKyAgICBQUk9QX1JFTUVNQkVSLAorfTsK
KworLyogUHJpdmF0ZSBtZXRob2RzICovCitzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ1JlcXVlc3REaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05f
RElBTE9HX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBp
cyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnBy
aXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9n
X3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2F1
dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0R2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1Jl
cXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HX1JFUVVFU1Qob2Jq
ZWN0KTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9VU0VSTkFNRToKKyAg
ICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlh
bG9nX3JlcXVlc3RfZ2V0X3VzZXJuYW1lKHJlcXVlc3QpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1BBU1NXT1JEOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9nZXRfcGFzc3dvcmQocmVxdWVzdCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVNRU1CRVI6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVz
dF9nZXRfcmVtZW1iZXJfcGFzc3dvcmQocmVxdWVzdCkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0
LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2NsYXNzX2luaXQoV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNz
KTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
UmVxdWVzdERpc3Bvc2U7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdEdldFByb3BlcnR5OworCisgICAgLyoqCisgICAgICog
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0OnVzZXJuYW1lOgorICAgICAqCisgICAg
ICogVGhlIHVzZXJuYW1lIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QuIFNl
ZQorICAgICAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9nZXRfdXNlcm5h
bWUoKSBmb3IgbW9yZQorICAgICAqIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfVVNFUk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJ1c2VybmFtZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJVc2VybmFtZSIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiVGhl
IHVzZXJuYW1lIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAvKioKKyAgICAgKiBXZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZ1JlcXVlc3Q6cGFzc3dvcmQ6CisgICAgICoKKyAgICAgKiBUaGUgdXNlcm5hbWUgY3Vy
cmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4gU2VlCisgICAgICogd2Via2l0X2F1
dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9wYXNzd29yZCgpIGZvciBtb3JlIGRldGFp
bHMuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUEFTU1dPUkQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5n
KCJwYXNzd29yZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKCJQYXNzd29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgiVGhlIHBhc3N3b3JkIGN1cnJlbnRseSBhc3NvY2lh
dGVkIHdpdGggdGhlIHJlcXVlc3QiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKyAgICAv
KioKKyAgICAgKiBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3Q6cmVtZW1iZXItcGFz
c3dvcmQ6CisgICAgICoKKyAgICAgKiBXaGV0aGVyIHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cg
c2hvdWxkIHJlbWVtYmVyIHRoZSBwYXNzd29yZC4gU2VlCisgICAgICogd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9yZW1lbWJlcl9wYXNzd29yZCgpIGZvcgorICAgICAq
IG1vcmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9SRU1FTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKCJyZW1lbWJlci1wYXNzd29yZCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiUmVtZW1iZXIgdGhlIHBhc3N3b3Jk
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgiV2hldGhlciB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIHNob3VsZCByZW1lbWJlciB0
aGUgcGFzc3dvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworfQorCitXZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QqIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
UmVxdWVzdENyZWF0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCkKK3sKKworCisgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0KiByZXF1ZXN0
ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX0RJQUxPR19SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0dfUkVRVUVTVCwgTlVMTCkpOworICAgIHJlcXVl
c3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gYXV0aGVudGljYXRpb25DaGFsbGVu
Z2U7CisgICAgcmVxdWVzdC0+cHJpdi0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IHByaXZhdGVC
cm93c2luZ0VuYWJsZWQ7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3ZvaWQKK3dlYmtpdF9h
dXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9zZXRfYXV0aGVudGljYXRpb25fY2hhbGxlbmdl
KFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgKmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX0RJQUxPR19SRVFV
RVNUKHJlcXVlc3QpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworfQorCitBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZVByb3h5Kgord2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9hdXRoZW50
aWNhdGlvbl9jaGFsbGVuZ2UoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0ICpyZXF1
ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS5nZXQoKTsKK30KKworLyogUHVibGljIG1ldGhvZHMgKi8KK3ZvaWQKK3dlYmtpdF9hdXRoZW50
aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9zZXRfdXNlcm5hbWUoV2ViS2l0QXV0aGVudGljYXRpb25E
aWFsb2dSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdXNlcm5hbWUpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fRElBTE9HX1JFUVVFU1QocmVxdWVzdCkp
OworCisgICAgcmVxdWVzdC0+cHJpdi0+dXNlcm5hbWUgPSBnX3N0cmR1cCh1c2VybmFtZSk7Cit9
CisKK2NvbnN0IGdjaGFyICoKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9n
ZXRfdXNlcm5hbWUoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0ICpyZXF1ZXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9ESUFM
T0dfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+dXNl
cm5hbWUuZGF0YSgpOworfQorCit2b2lkCit3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3Jl
cXVlc3Rfc2V0X3Bhc3N3b3JkKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVx
dWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIqIHBhc3N3b3JkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X0FVVEhFTlRJQ0FUSU9OX0RJQUxPR19SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIHJlcXVlc3Qt
PnByaXYtPnBhc3N3b3JkID0gZ19zdHJkdXAocGFzc3dvcmQpOworfQorCitjb25zdCBnY2hhciAq
Cit3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3RfZ2V0X3Bhc3N3b3JkKFdlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fRElBTE9HX1JFUVVFU1QocmVxdWVz
dCksIDApOworCisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPnBhc3N3b3JkLmRhdGEoKTsKK30K
Kwordm9pZAord2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X3NldF9yZW1lbWJl
cl9wYXNzd29yZChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QgKnJlcXVlc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdib29sZWFuIHJlbWVtYmVyUGFzc3dvcmQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfQVVUSEVOVElDQVRJT05fRElBTE9HX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgcmVx
dWVzdC0+cHJpdi0+cmVtZW1iZXJQYXNzd29yZCA9IHJlbWVtYmVyUGFzc3dvcmQ7Cit9CisKK2di
b29sZWFuCit3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3RfZ2V0X3JlbWVtYmVy
X3Bhc3N3b3JkKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVxdWVzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fRElBTE9H
X1JFUVVFU1QocmVxdWVzdCksIEZBTFNFKTsKKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5y
ZW1lbWJlclBhc3N3b3JkOworfQorCit2b2lkCit3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9n
X3JlcXVlc3Rfc2V0X3ByaXZhdGVfYnJvd3NpbmcoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dS
ZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdib29sZWFuIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fRElBTE9HX1JFUVVF
U1QocmVxdWVzdCkpOworICAgIHJlcXVlc3QtPnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQg
PSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOworfQorCitnYm9vbGVhbgord2Via2l0X2F1dGhlbnRp
Y2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9wcml2YXRlX2Jyb3dzaW5nKFdlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJp
di0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKK30KKwordm9pZAord2Via2l0X2F1dGhlbnRpY2F0
aW9uX2RpYWxvZ19yZXF1ZXN0X2F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxv
Z1JlcXVlc3QgKnJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQVVU
SEVOVElDQVRJT05fRElBTE9HX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgQ3JlZGVudGlhbFBl
cnNpc3RlbmNlIHBlcnNpc3RlbmNlOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5yZW1lbWJlclBh
c3N3b3JkICYmICFyZXF1ZXN0LT5wcml2LT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKQorICAgICAg
ICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudDsKKyAgICBlbHNl
CisgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbjsK
KworICAgIFJlZlB0cjxXZWJTdHJpbmc+IHVzZXJuYW1lID0gV2ViU3RyaW5nOjpjcmVhdGVGcm9t
VVRGOFN0cmluZyhyZXF1ZXN0LT5wcml2LT51c2VybmFtZS5kYXRhKCkpOworICAgIFJlZlB0cjxX
ZWJTdHJpbmc+IHBhc3N3b3JkID0gV2ViU3RyaW5nOjpjcmVhdGVGcm9tVVRGOFN0cmluZyhyZXF1
ZXN0LT5wcml2LT5wYXNzd29yZC5kYXRhKCkpOworCisgICAgUmVmUHRyPFdlYkNyZWRlbnRpYWw+
IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50aWFsOjpjcmVhdGUodXNlcm5hbWUuZ2V0KCksIHBh
c3N3b3JkLmdldCgpLCBwZXJzaXN0ZW5jZSk7CisgICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCktPnVzZUNyZWRlbnRpYWwod2ViQ3JlZGVudGlhbC5n
ZXQoKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQorCisv
KioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9jYW5jZWw6CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0CisgKgorICogQXNr
IFdlYktpdCB0byBjYW5jZWwgdGhlIHJlcXVlc3QuIEl0J3MgaW1wb3J0YW50IHRvIGRvIHRoaXMg
aW4gY2FzZQorICogbm8gc2VsZWN0aW9uIGhhcyBiZWVuIG1hZGUgaW4gdGhlIGNsaWVudCwgb3Ro
ZXJ3aXNlIHRoZSByZXF1ZXN0CisgKiB3b24ndCBiZSBwcm9wZXJseSBjb21wbGV0ZWQgYW5kIHRo
ZSBicm93c2VyIHdpbGwga2VlcCB0aGUgcmVxdWVzdAorICogcGVuZGluZyBmb3JldmVyLCB3aGlj
aCBtaWdodCBjYXVzZSB0aGUgYnJvd3NlciB0byBoYW5nLgorICovCit2b2lkCit3ZWJraXRfYXV0
aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3RfY2FuY2VsKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19B
VVRIRU5USUNBVElPTl9ESUFMT0dfUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgcmVxdWVzdC0+cHJp
di0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmNhbmNlbCgpOworICAgIHJlcXVlc3QtPnByaXYt
PmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdC5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dS
ZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDA0NGFjYTUyOTQyMGZiNWEzNTNiOGM2MjVlZjRkNmI3OWQw
N2YxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdC5oCkBAIC0wLDAgKzEsOTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmlu
ZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+
IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3RfaAorI2RlZmluZSBXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZ1JlcXVlc3RfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVf
QVVUSEVOVElDQVRJT05fRElBTE9HX1JFUVVFU1QgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX2Rp
YWxvZ19yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9E
SUFMT0dfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0dfUkVRVUVTVCwgV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FU
SU9OX0RJQUxPR19SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxPR19SRVFVRVNULCBX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19BVVRIRU5USUNBVElPTl9ESUFMT0dfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0df
UkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9ESUFMT0dfUkVRVUVT
VF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRf
VFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0dfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9BVVRI
RU5USUNBVElPTl9ESUFMT0dfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0dfUkVR
VUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0ICAgICAgICBXZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2dSZXF1ZXN0Q2xhc3MgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1Jl
cXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1Jl
cXVlc3RQcml2YXRlIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdFByaXZhdGU7CisK
K3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0IHsKKyAgICBHT2JqZWN0
IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3RfZ2V0X3R5
cGUgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfYXV0aGVu
dGljYXRpb25fZGlhbG9nX3JlcXVlc3Rfc2V0X3VzZXJuYW1lICAgICAgICAgICAgICAgICAgICAg
ICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZ2NoYXIgKnVzZXJuYW1lKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
ciAqCit3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3RfZ2V0X3VzZXJuYW1lICAg
ICAgICAgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAq
cmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxv
Z19yZXF1ZXN0X3NldF9wYXNzd29yZCAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyKiBwYXNzd29yZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2F1
dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9wYXNzd29yZCAgICAgICAgICAgICAgICAg
ICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QgKnJlcXVlc3QpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9zZXRf
cmVtZW1iZXJfcGFzc3dvcmQgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25EaWFs
b2dSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiByZW1lbWJlcik7
CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVx
dWVzdF9nZXRfcmVtZW1iZXJfcGFzc3dvcmQgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2dSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
YXV0aGVudGljYXRpb25fZGlhbG9nX3JlcXVlc3Rfc2V0X3ByaXZhdGVfYnJvd3NpbmcgICAgICAg
ICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVxdWVzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2Jvb2xlYW4gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9nZXRf
cHJpdmF0ZV9icm93c2luZyAgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25EaWFs
b2dSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfYXV0aGVudGlj
YXRpb25fZGlhbG9nX3JlcXVlc3RfYXV0aGVudGljYXRlICAgICAgICAgICAgICAgICAgICAgICAg
KFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2NhbmNlbCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVl
c3QgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVx
dWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNWMyZGM4NWQ0
ZmQ3N2ZlMmU3MDhhMzU5ZmUzZmM3YTNhNDJjZjRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1
ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
U2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdFByaXZhdGVfaAorCisjaW5jbHVkZSAiQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2dSZXF1ZXN0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3RD
cmVhdGUoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCk7CisKK3ZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfcmVxdWVzdF9zZXRfYXV0
aGVudGljYXRpb25fY2hhbGxlbmdlICAoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0
ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJv
eHkgKmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKTsKKworV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5Kgord2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19yZXF1ZXN0X2dldF9h
dXRoZW50aWNhdGlvbl9jaGFsbGVuZ2UgIChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVl
c3QgKnJlcXVlc3QpOworCisjZW5kaWYgLy8gV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1
ZXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcAppbmRleCAzNmNkNmMwZTZlN2IwYzJjNGFkMDU5MDMz
MDk2MmZhMWI3NWEwMDgwLi41MWFmOTQwNDY0ODZkZWNhYmZmN2I0YmM1NjE5ODE0MTczMjVjNjAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2Fk
ZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dExvYWRlckNsaWVudC5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJXZWJLaXRMb2FkZXJDbGllbnQuaCIKIAorI2luY2x1ZGUgIldlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9y
d2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCkBAIC0xMzAsNyArMTMxLDkg
QEAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdLUGFnZVJlZiBwYWdlLCBX
S0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWQKIAogc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlSW5GcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFt
ZSwgV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlZiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbykKIHsKLSAgICB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCB0b0ltcGwoYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKKyAgICBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQg
PSB3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3MoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pKSk7CisgICAgV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0KiByZXF1ZXN0ID0gd2Via2l0QXV0aGVudGlj
YXRpb25EaWFsb2dSZXF1ZXN0Q3JlYXRlKHRvSW1wbChhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSks
IHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOworICAgIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHJlcXVlc3QpOwog
fQogCiBzdGF0aWMgdm9pZCBwcm9jZXNzRGlkQ3Jhc2goV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDI5NDk3MDkwZGI2MDdkYmNhOWYwMWFiOWY0NGM5MzI3
ZTQ4MjFjMWYuLjY1MDFmYmI2MDFiMDE3ZjY1YTgzYTQ5MjNkYTBhYTFhNmVmNDQ1YzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
CkBAIC0xMDgsNiArMTA4LDggQEAgZW51bSB7CiAgICAgRU5URVJfRlVMTFNDUkVFTiwKICAgICBM
RUFWRV9GVUxMU0NSRUVOLAogCisgICAgUlVOX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRywKKwogICAg
IFJVTl9GSUxFX0NIT09TRVIsCiAKICAgICBDT05URVhUX01FTlUsCkBAIC00MjksNiArNDMxLDEz
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0RmF2aWNvbkRhdGFiYXNlU2ln
bmFsSGFuZGxlcnMoV2ViS2l0V2ViVmlldyoKICAgICBwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRs
ZXJJRCA9IDA7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3UnVuQXV0aGVudGlj
YXRpb25EaWFsb2coV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0QXV0aGVudGljYXRpb25E
aWFsb2dSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVu
dGljYXRpb25EaWFsb2coV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyksIHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nTmV3KHJlcXVlc3QpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCiBz
dGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBk
aWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0
KQogewogICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVz
dCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKQEAgLTYwNCw2ICs2MTMsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFz
cykKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9kaWFsb2cgPSB3ZWJraXRXZWJWaWV3U2NyaXB0
RGlhbG9nOwogICAgIHdlYlZpZXdDbGFzcy0+ZGVjaWRlX3BvbGljeSA9IHdlYmtpdFdlYlZpZXdE
ZWNpZGVQb2xpY3k7CiAgICAgd2ViVmlld0NsYXNzLT5wZXJtaXNzaW9uX3JlcXVlc3QgPSB3ZWJr
aXRXZWJWaWV3UGVybWlzc2lvblJlcXVlc3Q7CisgICAgd2ViVmlld0NsYXNzLT5ydW5fYXV0aGVu
dGljYXRpb25fZGlhbG9nID0gd2Via2l0V2ViVmlld1J1bkF1dGhlbnRpY2F0aW9uRGlhbG9nOwog
ICAgIHdlYlZpZXdDbGFzcy0+cnVuX2ZpbGVfY2hvb3NlciA9IHdlYmtpdFdlYlZpZXdSdW5GaWxl
Q2hvb3NlcjsKIAogICAgIC8qKgpAQCAtMTE5NCw2ICsxMjA0LDM4IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNz
KQogICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVk
LCAwLAogICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fVk9JRCwK
ICAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAwKTsKKworICAgICAvKioKKyAg
ICAgKiBXZWJLaXRXZWJWaWV3OjpydW4tYXV0aGVudGljYXRpb24tZGlhbG9nOgorICAgICAqIEB3
ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QK
KyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBpcyBj
aGFsbGVuZ2VkIHdpdGggaHR0cAorICAgICAqIGF1dGhlbnRpY2F0aW9uLCByZXF1ZXN0aW5nIGZy
b20gV2ViS2l0IHRvIHNob3cKKyAgICAgKiBhIGRpYWxvZyB0byB3aGVyZSB0aGUgdXNlciBjYW4g
c3VwcGx5IGNyZWRlbnRpYWxzLiBUbyBsZXQgdGhlCisgICAgICogYXBwbGljYXRpb24gYWNjZXNz
IG9yIHN1cHBseSB0aGUgY3JlZGVudGlhbHMgYXMgd2VsbCBhcyB0bworICAgICAqIGFsbG93IHRo
ZSBjbGllbnQgYXBwbGljYXRpb24gdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvcgorICAg
ICAqIHBlcmZvcm0gdGhlIGF1dGhlbnRpY2F0aW9uLCB0aGUgc2lnbmFsIHdpbGwgcGFzcyBhbgor
ICAgICAqIGluc3RhbmNlIG9mIHRoZSAjV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0
IGluIHRoZSBAcmVxdWVzdAorICAgICAqIGFyZ3VtZW50LgorICAgICAqCisgICAgICogVGhlIGRl
ZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBhc3luY2hyb25vdXNseSBydW4gdGhlIGN1c3RvbQor
ICAgICAqIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nIGZvciB0aGUgdXNlciB0byBpbnRlcmFj
dCB3aXRoLgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5k
bGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0
byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKi8KKyAgICBzaWdu
YWxzW1JVTl9BVVRIRU5USUNBVElPTl9ESUFMT0ddID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJy
dW4tYXV0aGVudGljYXRpb24tZGlhbG9nIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9S
VU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJW
aWV3Q2xhc3MsIHJ1bl9hdXRoZW50aWNhdGlvbl9kaWFsb2cpLAorICAgICAgICAgICAgICAgICAg
ICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8qIGFjY3VtdWxhdG9yIGRh
dGEgKi8sCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpF
Q1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyogbnVtYmVyIG9m
IHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0FVVEhFTlRJ
Q0FUSU9OX0RJQUxPR19SRVFVRVNUKTsKKwogICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3
OjpydW4tZmlsZS1jaG9vc2VyOgogICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtMTczNiwxNSArMTc3OCwxMCBAQCB2
b2lkIHdlYmtpdFdlYlZpZXdTdWJtaXRGb3JtUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBXZWJLaXRGb3JtU3VibWlzc2lvbgogICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFs
c1tTVUJNSVRfRk9STV0sIDAsIHJlcXVlc3QpOwogfQogCi12b2lkIHdlYmtpdFdlYlZpZXdIYW5k
bGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKK3ZvaWQgd2Vi
a2l0V2ViVmlld0hhbmRsZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAg
ICBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlOwotICAgIGlmICh3
ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Mod2ViVmlldykpKQotICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUg
PSBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlOwotICAgIGVsc2UKLSAgICAgICAgY3JlZGVudGlh
bFN0b3JhZ2VNb2RlID0gQWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKLQotICAgIHdlYmtpdFdlYlZp
ZXdCYXNlQWRkQXV0aGVudGljYXRpb25EaWFsb2coV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmll
dyksIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAg
ICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbUlVOX0FVVEhFTlRJQ0FUSU9OX0RJQUxP
R10sIDAsIHJlcXVlc3QsICZyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0lu
c2VjdXJlQ29udGVudERldGVjdGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2Vj
dXJlQ29udGVudEV2ZW50IHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggYjIzZDdmZmIxM2EwOGYwOTU0ZWNhMzU0Y2U4NmVj
NTcwNzNjYTFkNy4uZmE2OGViNDVmYWUxNDAxNmY2MWQwZWI3NTgxOTE0ZjY2ZGEwZjljNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApA
QCAtMjksNiArMjksNyBAQAogI2RlZmluZSBXZWJLaXRXZWJWaWV3X2gKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2dSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgpAQCAtMjI5LDYgKzIzMCw4IEBAIHN0
cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRVUklSZXF1ZXN0ICAgICAgICAgICAgKnJlcXVlc3QpOwog
ICAgIGdib29sZWFuICAgKCogZW50ZXJfZnVsbHNjcmVlbikgICAgICAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogICAgIGdib29sZWFuICAgKCogbGVhdmVfZnVs
bHNjcmVlbikgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcp
OworICAgIGdib29sZWFuICAgKCogcnVuX2F1dGhlbnRpY2F0aW9uX2RpYWxvZykgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0ICpy
ZXF1ZXN0KTsKICAgICBnYm9vbGVhbiAgICgqIHJ1bl9maWxlX2Nob29zZXIpICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCAgICAq
cmVxdWVzdCk7CiAgICAgZ2Jvb2xlYW4gICAoKiBjb250ZXh0X21lbnUpICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4
IGViMWYyN2RiMjk4Y2FlMzg3ODFiNWRiNDI0OGEzZDZiODdkYTRiYTEuLjQ2OGMwZWY1MzM2NDBk
NDAwYmE0MmMzN2FhZTBkMTQ0MmIzZDI5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApAQCAtNTcsNyArNTcs
NyBAQCBib29sIHdlYmtpdFdlYlZpZXdFbnRlckZ1bGxTY3JlZW4oV2ViS2l0V2ViVmlldyopOwog
Ym9vbCB3ZWJraXRXZWJWaWV3TGVhdmVGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQg
d2Via2l0V2ViVmlld1BvcHVsYXRlQ29udGV4dE1lbnUoV2ViS2l0V2ViVmlldyosIFdlYktpdDo6
SW1tdXRhYmxlQXJyYXkqIHByb3Bvc2VkTWVudSwgV2ViS2l0OjpXZWJIaXRUZXN0UmVzdWx0Kik7
CiB2b2lkIHdlYmtpdFdlYlZpZXdTdWJtaXRGb3JtUmVxdWVzdChXZWJLaXRXZWJWaWV3KiwgV2Vi
S2l0Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0Kik7Ci12b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0OjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5Kik7Cit2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShXZWJLaXRXZWJWaWV3KiwgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1
ZXN0Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdJbnNlY3VyZUNvbnRlbnREZXRlY3RlZChXZWJLaXRX
ZWJWaWV3KiwgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQpOwogdm9pZCB3ZWJraXRXZWJWaWV3
V2ViUHJvY2Vzc0NyYXNoZWQoV2ViS2l0V2ViVmlldyopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5j
cHAKaW5kZXggODhkNzdmMjg2MGUwNjBhNTA2YWI5YmI1YzgyZmEyOGFmYTY2YjE3YS4uYTc4YmZm
MTUwZWZiMTMyNGZiZGRhYjQ0ZDY0MDdhMDFlM2NlZDU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcApAQCAtNzkzLDYgKzc5Myw0NCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0ZpbGVDaG9v
c2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgd2Vi
a2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOwogfQog
CitjbGFzcyBBdXRoZW50aWNhdGlvbkRpYWxvZ1Rlc3Q6IHB1YmxpYyBVSUNsaWVudFRlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQXV0aGVudGljYXRpb25EaWFsb2dU
ZXN0KTsKKworICAgIEF1dGhlbnRpY2F0aW9uRGlhbG9nVGVzdCgpCisgICAgeworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJ1bi1hdXRoZW50aWNhdGlvbi1kaWFsb2ciLCBH
X0NBTExCQUNLKHJ1bkF1dGhlbnRpY2F0aW9uRGlhbG9nQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuQXV0aGVudGljYXRpb25EaWFsb2dDYWxsYmFjayhX
ZWJLaXRXZWJWaWV3KiwgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0KiByZXF1ZXN0
LCBBdXRoZW50aWNhdGlvbkRpYWxvZ1Rlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5y
dW5BdXRoZW50aWNhdGlvbkRpYWxvZyhyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7Cisg
ICAgfQorCisgICAgdm9pZCBydW5BdXRoZW50aWNhdGlvbkRpYWxvZyhXZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZ1JlcXVlc3QqIHJlcXVlc3QpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgbV9h
dXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICBnX21haW5fbG9v
cF9xdWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nUmVxdWVzdCogY2xpY2tNb3VzZUJ1dHRvbkFuZFdhaXRGb3JBdXRoZW50aWNhdGlvbkRpYWxv
Z1JlcXVlc3QoaW50IHgsIGludCB5KQorICAgIHsKKyAgICAgICAgY2xpY2tNb3VzZUJ1dHRvbih4
LCB5KTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1
cm4gbV9hdXRoZW50aWNhdGlvbkRpYWxvZ1JlcXVlc3QuZ2V0KCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0PiBtX2F1dGhl
bnRpY2F0aW9uRGlhbG9nUmVxdWVzdDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0
aGVudGljYXRpb25EaWFsb2dSZXF1ZXN0KEF1dGhlbnRpY2F0aW9uRGlhbG9nVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICAvL0ZJWE1FOiB0ZXN0IHRoZSBhdXRoZW50aWNhdGlvbiBk
aWFsb2cKK30KKwogY2xhc3MgRnVsbFNjcmVlbkNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVz
dCB7CiBwdWJsaWM6CiAgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGdWxsU2NyZWVuQ2xpZW50
VGVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXgg
ZDE4NDMxNTI4MWE4MzYzYjgxMDU3OGMzODhmMWUzNmVhM2NhYjJiMi4uNTg1ZjAwODQ3NjMyNGVm
OWE3ZWU2ZGI0MTlmMWM0ZTk1NjdiNDgyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjZGVmaW5lIF9fV0VCS0lUMl9I
X0lOU0lERV9fCiAKKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
UmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVudS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207111</attachid>
            <date>2013-07-19 09:59:06 -0700</date>
            <delta_ts>2013-07-20 01:54:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99352-20130719175922.patch</filename>
            <type>text/plain</type>
            <size>29344</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDBjMTVhMDA5NzkzMThh
YzQxMGM0ODE0ZWU5YTRiMDYyYTgyODIwNi4uMTllZTdiYjI2M2QyZTcxM2ExMmFhM2MxZmYyMzc2
MjQwYjY5OTE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTA3LTE5ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRp
b24gc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGllbnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUg
dGhlaXIgb3duIGF1dGhlbnRpY2F0aW9uCisgICAgICAgIHdoZW4gdGhlIHVzZXIgaXMgY2hhbGxl
bmdlZCB3aXRoIGh0dHAgYXV0aGVudGljYXRpb24uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcDoKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZSk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAgICAgICh3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9zZXRfYXV0aGVudGljYXRpb25fY2hhbGxlbmdlKToK
KyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9hdXRoZW50aWNhdGlv
bl9jaGFsbGVuZ2UpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0
aGVudGljYXRlKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNl
bCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZUluRnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld1J1bkF1dGhlbnRpY2F0aW9uRGlh
bG9nKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvblJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDoK
KwogMjAxMy0wNy0xNyAgRG9uZy1Hd2FuIEtpbSAgPGRvbmdnd2FuLmtpbUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbRUZMXVtXSzJdIEVXSzJDb29raWVNYW5hZ2VyVGVzdCBzaG91bGQgYmUgZGVm
aW5lZCBieSBpbmhlcml0aW5nIGZyb20gRVdLMlVuaXRUZXN0QmFzZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGIxNTAxN2ZlYjhjZDBjNWY4ODRhNThkOTU5MzU5N2JkYTZhMjc2
MmUuLjg4YThmNzM1MDcwYThkZWNhYTBiOTFkMWU5YmZkMzlhMGUyMWExMGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjUzLDYgKzY1Myw5IEBAIHdlYmtpdDJfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRl
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9y
d2FyZExpc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCmluZGV4
IDA2OTlkYTdlZWQzMWM1NTQ1Y2U5MDczN2FjMmEwM2MyNTEwMGNjNzUuLjY2NjQxZGZmMjAxYzdm
MjgxZTQwYzAwYjM0OGRmZDRlYmUyNzQ3NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5j
cHAKQEAgLTE5LDcgKzE5LDEwIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZh
dGUuaCIKIAorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNs
dWRlICJBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJDcmVk
ZW50aWFsLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgpAQCAtMjgsNyArMzEsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nUHJpdmF0ZSB7CiAgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+IGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotCisgICAgR1JlZlB0cjxfV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0PiByZXF1ZXN0OwogICAgIEd0a1dpZGdldCogYXV0aFdpZGdldDsKICAgICBHdGtX
aWRnZXQqIGRlZmF1bHRCdXR0b247CiAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxl
Q29udGV4dDsKQEAgLTEzOCwxMCArMTQxLDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9kaWFsb2dfY2xhc3NfaW5pdChXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsCiAg
ICAgd2lkZ2V0Q2xhc3MtPm1hcCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTWFwOwogfQog
Ci1HdGtXaWRnZXQqIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFn
ZU1vZGUgbW9kZSkKK0d0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQogewogICAgIFdlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRyhn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fRElBTE9HLCBOVUxMKSk7CisK
KyAgICBhdXRoRGlhbG9nLT5wcml2LT5yZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOworICAg
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0g
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2F1dGhlbnRpY2F0aW9uX2NoYWxsZW5n
ZShyZXF1ZXN0KTsKICAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nSW5pdGlhbGl6ZShhdXRoRGlhbG9nLCBtb2RlKTsKKworICAgIGJvb2wgcHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCA9IHRydWU7IC8vRklYTUU6IGdldCBwcml2YXRlIGJyb3dzaW5nIGVuYWJsZWQg
ZnJvbSB0aGUgd2VidmlldworICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3Rv
cmFnZU1vZGU7CisgICAgaWYgKHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCisgICAgICAgY3JlZGVu
dGlhbFN0b3JhZ2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICBlbHNlCisg
ICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVudFN0b3JhZ2U7Cisg
ICAgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXplKGF1dGhEaWFsb2csIGNyZWRl
bnRpYWxTdG9yYWdlTW9kZSk7CiAgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aERpYWxvZyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA3ZDRkZTJhNmQzZDgxOWNiMWM2ODczMDNk
YmMxNWEwYzdkMTNlZTQyLi5mNmYyZTllOWM2ZWY4NjE2MWM2ZWE0MzA3YjY0Y2YzMzZkN2ZkMzEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYg
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAogI2RlZmluZSBXZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZ19oCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCisj
aW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2ViS2l0
QXV0aGVudGljYXRpb25XaWRnZXQuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKQEAgLTQ4LDcg
KzQ4LDcgQEAgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKIH07CiAK
IEdUeXBlIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsKLUd0a1dpZGdl
dCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdldCogd2Via2l0
QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Kik7CiAK
IEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjMwZTgwODExYWM3NjA0NjYwOWM3NjcwNTU5ZWNjNTIxMDczNzI0YzcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QuY3BwCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCisKKyNp
bmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCisjaW5jbHVkZSAiQXV0aGVu
dGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRl
IDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKiBAU2hv
cnRfZGVzY3JpcHRpb246IEEgcmVxdWVzdCB0byBkbyBhdXRoZW50aWNhdGlvbgorICogQFRpdGxl
OiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZp
ZXcKKyAqCisgKiBXaGVuZXZlciB0aGUgdXNlciBhdHRlbXB0cyB0byBsb2FkIGEgcGFnZSBwcm90
ZWN0ZWQgYnkgaHR0cAorICogYXV0aGVudGljYXRpb24sIFdlYktpdCB3aWxsIG5lZWQgdG8gc2hv
dyBhIGRpYWxvZyBmb3IgdGhlIHVzZXIgdG8KKyAqIGVudGVyIHRoZWlyIHVzZXJuYW1lIGFuZCBw
YXNzd29yZC4gRm9yIHRoYXQgdG8gaGFwcGVuIGluIGEgZ2VuZXJhbCB3YXksCisgKiBpbnN0ZWFk
IG9mIGp1c3Qgb3BlbmluZyB0aGUgY3VzdG9tICNXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZwor
ICogKHdoaWNoIG1pZ2h0IGJlIG5vdCBkZXNpcmFibGUgaW4gc29tZSBjYXNlcywgd2hlbiB0aGUg
dXNlciB3b3VsZAorICogcHJlZmVyIHRvIHVzZSB0aGVpciBvd24gYXV0aGVudGljYXRpb24gZGlh
bG9nKSwgV2ViS2l0IHdpbGwgZmlyZSB0aGUKKyAqICNXZWJLaXRXZWJWaWV3OjphdXRoZW50aWNh
dGlvbiBzaWduYWwgd2l0aCBhCisgKiAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IG9iamVj
dCwgd2hpY2ggd2lsbCBhbGxvdworICogdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB0byBzcGVjaWZ5
IHRoZSBjcmVkZW50aWFscyBhbmQgdG8gc3VibWl0IHRoZSByZXF1ZXN0LgorICoKKyAqIEluIGNh
c2UgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRvIGhhbmRsZSB0aGlzIHNp
Z25hbCwKKyAqIFdlYktpdCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIgd2hpY2ggd2ls
bCBhc3luY2hyb25vdXNseSBydW4KKyAqIGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nIGZv
ciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICovCisKK3N0cnVjdCBfV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHk+IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGJvb2wgaGFuZGxlZFJlcXVl
c3Q7Cit9OworCitXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
LCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdCwgR19UWVBFX09CSkVDVCk7CisKKy8qIFBy
aXZhdGUgbWV0aG9kcyAqLworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqZWN0KTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmlu
YWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAg
ICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9wYXJlbnRfY2xhc3Mp
LT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdERpc3Bvc2U7Cit9CisKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQoreworICAgIFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNU
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNULCBOVUxMKSk7
CisgICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZAord2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3Rfc2V0X2F1dGhlbnRpY2F0aW9uX2NoYWxsZW5nZShXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHkgKmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkpOworICAgIHJlcXVlc3Qt
PnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gYXV0aGVudGljYXRpb25DaGFsbGVuZ2U7
Cit9CisKK0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqCit3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfYXV0aGVudGljYXRpb25fY2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UuZ2V0KCk7Cit9CisKKy8qIFB1YmxpYyBtZXRob2RzICovCit2b2lk
Cit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUoV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGdjaGFyICp1c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqcGFzc3dvcmQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3Rl
bmNlIHdlYmtpdFBlcnNpc3RlbmNlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgQ3JlZGVudGlhbFBlcnNp
c3RlbmNlIHBlcnNpc3RlbmNlOworICAgIHN3aXRjaCh3ZWJraXRQZXJzaXN0ZW5jZSkKKyAgICB7
CisgICAgY2FzZSBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lOgorICAgICAgICBwZXJz
aXN0ZW5jZSA9IENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbjoKKyAgICAgICAgcGVy
c2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JTZXNzaW9uOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudDoKKyAgICAg
ICAgcGVyc2lzdGVuY2UgPSBDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQ7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIHdhcm4gdGhhdCB0aGUgV2ViS2l0Q3Jl
ZGVudGlhbFBlcnNpc3RlbmNlIGVudW0gaXMgaW52YWxpZAorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBDcmVkZW50aWFsIGNyZWRlbnRpYWwgPSByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS0+cHJvcG9zZWRDcmVkZW50aWFsKCktPmNvcmUoKTsKKworICAgIFJlZlB0
cjxXZWJTdHJpbmc+IHVzZXJuYW1lU3RyaW5nID0gV2ViU3RyaW5nOjpjcmVhdGVGcm9tVVRGOFN0
cmluZyh1c2VybmFtZSk7CisgICAgaWYgKCF1c2VybmFtZVN0cmluZy0+aXNFbXB0eSgpICYmIHVz
ZXJuYW1lU3RyaW5nLT5zdHJpbmcoKSAhPSBjcmVkZW50aWFsLnVzZXIoKSkKKyAgICAgICAgdXNl
cm5hbWVTdHJpbmcgPSBXZWJTdHJpbmc6OmNyZWF0ZShjcmVkZW50aWFsLnVzZXIoKSk7CisKKyAg
ICBSZWZQdHI8V2ViU3RyaW5nPiBwYXNzd29yZFN0cmluZyA9IFdlYlN0cmluZzo6Y3JlYXRlRnJv
bVVURjhTdHJpbmcocGFzc3dvcmQpOworICAgIGlmICghcGFzc3dvcmRTdHJpbmctPmlzRW1wdHko
KSAmJiBwYXNzd29yZFN0cmluZy0+c3RyaW5nKCkgIT0gY3JlZGVudGlhbC5wYXNzd29yZCgpKQor
ICAgICAgICBwYXNzd29yZFN0cmluZyA9IFdlYlN0cmluZzo6Y3JlYXRlKGNyZWRlbnRpYWwucGFz
c3dvcmQoKSk7CisKKyAgICBSZWZQdHI8V2ViQ3JlZGVudGlhbD4gd2ViQ3JlZGVudGlhbCA9IFdl
YkNyZWRlbnRpYWw6OmNyZWF0ZSh1c2VybmFtZVN0cmluZy5nZXQoKSwgcGFzc3dvcmRTdHJpbmcu
Z2V0KCksIHBlcnNpc3RlbmNlKTsKKyAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS0+bGlzdGVuZXIoKS0+dXNlQ3JlZGVudGlhbCh3ZWJDcmVkZW50aWFsLmdldCgpKTsK
KyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CisKKy8qKgorICog
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEFzayBXZWJLaXQgdG8gY2FuY2VsIHRo
ZSByZXF1ZXN0LiBJdCdzIGltcG9ydGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIHNlbGVj
dGlvbiBoYXMgYmVlbiBtYWRlIGluIHRoZSBjbGllbnQsIG90aGVyd2lzZSB0aGUgcmVxdWVzdAor
ICogd29uJ3QgYmUgcHJvcGVybHkgY29tcGxldGVkIGFuZCB0aGUgYnJvd3NlciB3aWxsIGtlZXAg
dGhlIHJlcXVlc3QKKyAqIHBlbmRpbmcgZm9yZXZlciwgd2hpY2ggbWlnaHQgY2F1c2UgdGhlIGJy
b3dzZXIgdG8gaGFuZy4KKyAqLwordm9pZAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Y2FuY2VsKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpKTsK
KyAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+
Y2FuY2VsKCk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSB0cnVlOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTcwOGMyMjE3ZjE5OTRhOTYw
YmE5NWU2NjY1MTU0YTY4ZGE3YWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgKQEAgLTAsMCAr
MSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9f
KSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQy
L3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVm
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9B
VVRIRU5USUNBVElPTl9SRVFVRVNUICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1QsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCkpCisjZGVm
aW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JF
UVVFU1QsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCkpCisj
ZGVmaW5lIFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9O
X1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVF9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9B
VVRIRU5USUNBVElPTl9SRVFVRVNULCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcykp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgICAgICAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3RDbGFzcyAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzOwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiov
CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0
cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsK
KyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lk
KTsKK307CisKK3R5cGVkZWYgZW51bSAgeworICAgIFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5j
ZU5vbmUsCisgICAgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbiwKKyAgICBX
ZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQsCit9IFdlYktpdENyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3RfZ2V0X3R5cGUgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlICAoV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZ2NoYXIgKnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnBhc3N3b3JkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNl
IHdlYmtpdFBlcnNpc3RlbmNlKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9jYW5jZWwgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qg
KnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzNhNmEzZWM1ZWY2YWUxYTRkMmE4ZWRh
YTE3OGVjMGM5MmQyMTdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGVf
aAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgorI2luY2x1ZGUg
IldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUu
aCIKKworV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3ZWJraXRBdXRoZW50aWNhdGlvblJl
cXVlc3RDcmVhdGUoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSk7CisKK3ZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X3NldF9hdXRoZW50aWNhdGlvbl9jaGFsbGVuZ2UoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkgKmF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKTsKKworV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5Kgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2F1dGhlbnRpY2F0aW9uX2No
YWxsZW5nZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCisjZW5kaWYg
Ly8gV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcAppbmRl
eCAzNmNkNmMwZTZlN2IwYzJjNGFkMDU5MDMzMDk2MmZhMWI3NWEwMDgwLi4wNjc4M2Y4M2U3YTg1
ZTIyNDg0YjljMDAyNTk1ZWU0NDk2NTgyYzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5jcHAKQEAgLTIxLDYgKzIx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRMb2FkZXJDbGllbnQu
aCIKIAorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
VVJJUmVzcG9uc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
LmgiCkBAIC0xMzAsNyArMTMxLDggQEAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlQmFja0ZvcndhcmRM
aXN0KFdLUGFnZVJlZiBwYWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgYWQKIAogc3RhdGlj
IHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlSW5GcmFtZShXS1BhZ2VSZWYg
cGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlZiBhdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKIHsKLSAgICB3ZWJr
aXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV0VCS0lUX1dFQl9WSUVXKGNs
aWVudEluZm8pLCB0b0ltcGwoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpKTsKKyAgICBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVl
c3RDcmVhdGUodG9JbXBsKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSk7CisgICAgd2Via2l0V2Vi
Vmlld0hhbmRsZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdFQktJVF9XRUJfVklFVyhjbGllbnRJ
bmZvKSwgcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHByb2Nlc3NEaWRDcmFzaChXS1BhZ2VS
ZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggMjk0OTcwOTBkYjYwN2Ri
Y2E5ZjAxYWI5ZjQ0YzkzMjdlNDgyMWMxZi4uN2UyODkyMWRlMTg3NWMyZjY3MGM3ZTUzM2UwOWVl
ZDM0OTVhM2JhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHAKQEAgLTg5LDYgKzg5LDcgQEAgZW51bSB7CiAgICAgTE9BRF9DSEFO
R0VELAogICAgIExPQURfRkFJTEVELAogCisgICAgQVVUSEVOVElDQVRJT04sCiAgICAgQ1JFQVRF
LAogICAgIFJFQURZX1RPX1NIT1csCiAgICAgUlVOX0FTX01PREFMLApAQCAtNDI5LDYgKzQzMCwx
MyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RGlzY29ubmVjdEZhdmljb25EYXRhYmFzZVNp
Z25hbEhhbmRsZXJzKFdlYktpdFdlYlZpZXcqCiAgICAgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5k
bGVySUQgPSAwOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld1J1bkF1dGhlbnRp
Y2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0
aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ05ldyhyZXF1ZXN0KSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGlj
IHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9n
LCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKIHsK
ICAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4gYWRvcHRlZFJlcXVlc3QgPSBh
ZG9wdEdSZWYocmVxdWVzdCk7CkBAIC01OTksNiArNjA3LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAg
ICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHk7
CiAgICAgZ09iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0V2ViVmlld0Rpc3Bvc2U7CiAKKyAg
ICB3ZWJWaWV3Q2xhc3MtPmF1dGhlbnRpY2F0aW9uID0gd2Via2l0V2ViVmlld1J1bkF1dGhlbnRp
Y2F0aW9uRGlhbG9nOwogICAgIHdlYlZpZXdDbGFzcy0+bG9hZF9mYWlsZWQgPSB3ZWJraXRXZWJW
aWV3TG9hZEZhaWw7CiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGUgPSB3ZWJraXRXZWJWaWV3Q3Jl
YXRlOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0X2RpYWxvZyA9IHdlYmtpdFdlYlZpZXdTY3Jp
cHREaWFsb2c7CkBAIC04MzIsNiArODQxLDM3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOwogCiAgICAgLyoqCisgICAgKiBXZWJLaXRXZWJW
aWV3OjphdXRoZW50aWNhdGlvbjoKKyAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICAgICoKKyAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0
ZWQgd2hlbiB0aGUgdXNlciBpcyBjaGFsbGVuZ2VkIHdpdGggaHR0cAorICAgICogYXV0aGVudGlj
YXRpb24sIHJlcXVlc3RpbmcgZnJvbSBXZWJLaXQgdG8gc2hvdworICAgICogYSBkaWFsb2cgdG8g
d2hlcmUgdGhlIHVzZXIgY2FuIHN1cHBseSBjcmVkZW50aWFscy4gVG8gbGV0IHRoZQorICAgICog
YXBwbGljYXRpb24gYWNjZXNzIG9yIHN1cHBseSB0aGUgY3JlZGVudGlhbHMgYXMgd2VsbCBhcyB0
bworICAgICogYWxsb3cgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB0byBlaXRoZXIgY2FuY2VsIHRo
ZSByZXF1ZXN0IG9yCisgICAgKiBwZXJmb3JtIHRoZSBhdXRoZW50aWNhdGlvbiwgdGhlIHNpZ25h
bCB3aWxsIHBhc3MgYW4KKyAgICAqIGluc3RhbmNlIG9mIHRoZSAjV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0IGluIHRoZSBAcmVxdWVzdAorICAgICogYXJndW1lbnQuCisgICAgKgorICAgICog
VGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBhc3luY2hyb25vdXNseSBydW4gdGhlIGN1
c3RvbQorICAgICogV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cgZm9yIHRoZSB1c2VyIHRvIGlu
dGVyYWN0IHdpdGguCisgICAgKgorICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBo
YW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAqICAgJUZBTFNF
IHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAqCisgICAgKi8KKyAgIHNpZ25h
bHNbQVVUSEVOVElDQVRJT05dID0KKyAgICAgICBnX3NpZ25hbF9uZXcoImF1dGhlbnRpY2F0aW9u
IiwKKyAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwK
KyAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAg
ICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGF1dGhlbnRpY2F0aW9uKSwK
KyAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAw
IC8qIGFjY3VtdWxhdG9yIGRhdGEgKi8sCisgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJz
aGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4s
IDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QpOworCisgICAgLyoqCiAgICAgICogV2ViS2l0
V2ViVmlldzo6Y3JlYXRlOgogICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9u
IHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAogICAgICAqCkBAIC0xMTk0LDYgKzEyMzQsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xh
c3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxh
dG9yX3RydWVfaGFuZGxlZCwgMCwKICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X0JPT0xFQU5fX1ZPSUQsCiAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCk7
CisKICAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6cnVuLWZpbGUtY2hvb3NlcjoKICAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlz
IGVtaXR0ZWQKQEAgLTE3MzYsMTUgKzE3NzcsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0
Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24K
ICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbU1VCTUlUX0ZPUk1dLCAwLCByZXF1
ZXN0KTsKIH0KIAotdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSog
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCit2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QqIHJlcXVlc3QpCiB7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRl
bnRpYWxTdG9yYWdlTW9kZTsKLSAgICBpZiAod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJp
dmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpKSkKLSAg
ICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsK
LSAgICBlbHNlCi0gICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVu
dFN0b3JhZ2U7Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9n
KFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxv
Z05ldyhhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7Cisg
ICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWdu
YWxzW0FVVEhFTlRJQ0FUSU9OXSwgMCwgcmVxdWVzdCwgJnJldHVyblZhbHVlKTsKIH0KIAogdm9p
ZCB3ZWJraXRXZWJWaWV3SW5zZWN1cmVDb250ZW50RGV0ZWN0ZWQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBiMjNkN2ZmYjEzYTA4
ZjA5NTRlY2EzNTRjZTg2ZWM1NzA3M2NhMWQ3Li42NzNmZjkyZmQ2MWEwNTk4YTEyZWMyMTdmNWQ4
YWJkMjc3MTM0YzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFdlYktpdFdlYlZpZXdf
aAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CkBAIC0yMDYsNiAr
MjA3LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAq
ZmFpbGluZ191cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICplcnJvcik7CiAKKyAgICBnYm9vbGVhbiAg
ICgqIGF1dGhlbnRpY2F0aW9uKSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CiAgICAgR3RrV2lkZ2V0
ICooKiBjcmVhdGUpICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAg
ICAgICAoKiBydW5fYXNfbW9kYWwpICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCBlYjFmMjdkYjI5OGNhZTM4Nzgx
YjVkYjQyNDhhM2Q2Yjg3ZGE0YmExLi45ZDYzODg5ZWVkN2VjZjYyY2IyMzIxYWU5ZDI0ZmE3Yjkx
MjZlNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCB3ZWJraXRXZWJW
aWV3RW50ZXJGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXcqKTsKIGJvb2wgd2Via2l0V2ViVmlld0xl
YXZlRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdQb3B1bGF0
ZUNvbnRleHRNZW51KFdlYktpdFdlYlZpZXcqLCBXZWJLaXQ6OkltbXV0YWJsZUFycmF5KiBwcm9w
b3NlZE1lbnUsIFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdCopOwogdm9pZCB3ZWJraXRXZWJWaWV3
U3VibWl0Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVx
dWVzdCopOwotdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
V2ViS2l0V2ViVmlldyosIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOwor
dm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2Vi
VmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCopOwogdm9pZCB3ZWJraXRXZWJWaWV3
SW5zZWN1cmVDb250ZW50RGV0ZWN0ZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdEluc2VjdXJlQ29u
dGVudEV2ZW50KTsKIHZvaWQgd2Via2l0V2ViVmlld1dlYlByb2Nlc3NDcmFzaGVkKFdlYktpdFdl
YlZpZXcqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDg4ZDc3ZjI4NjBlMDYwYTUw
NmFiOWJiNWM4MmZhMjhhZmE2NmIxN2EuLjZkZGFhNWRjYTExYTYwOTI0ZjRjMDU2NTdmMjVlODYw
MWU1NzJiNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTc5Myw2ICs3OTMsNDQgQEAg
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNob29zZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
YW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKIH0KIAorY2xhc3MgQXV0aGVudGljYXRpb25UZXN0
OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKEF1dGhlbnRpY2F0aW9uVGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3QoKQorICAg
IHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50aWNhdGlvbiIs
IEdfQ0FMTEJBQ0socnVuQXV0aGVudGljYXRpb25DYWxsYmFjayksIHRoaXMpOworICAgIH0KKwor
ICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9u
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9uKHJlcXVl
c3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkF1dGhlbnRp
Y2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAg
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVz
dCkpOworICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckF1dGhlbnRpY2F0aW9u
UmVxdWVzdChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBjbGlja01vdXNlQnV0dG9uKHgs
IHkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVy
biBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
R1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGljYXRpb25SZXF1
ZXN0OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3Qo
QXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vRklYTUU6
IHRlc3QgdGhlIGF1dGhlbnRpY2F0aW9uIEFQSQorfQorCiBjbGFzcyBGdWxsU2NyZWVuQ2xpZW50
VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKIHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRUZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaAppbmRleCBkMTg0MzE1MjgxYTgzNjNiODEwNTc4YzM4OGYxZTM2ZWEz
Y2FiMmIyLi5iMGNmZjViMWM4YjNmMTIzMzRiMGFjNzU3YmUyYjU5Yzg3ZjU3NzVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNkZWZpbmUgX19XRUJLSVQyX0hfSU5TSURFX18KIAorI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNr
Rm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51Lmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207193</attachid>
            <date>2013-07-20 01:54:25 -0700</date>
            <delta_ts>2013-07-23 01:43:08 -0700</delta_ts>
            <desc>Revised WIP Patch</desc>
            <filename>bug-99352-20130720095442.patch</filename>
            <type>text/plain</type>
            <size>28433</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDBjMTVhMDA5NzkzMThh
YzQxMGM0ODE0ZWU5YTRiMDYyYTgyODIwNi4uMTllZTdiYjI2M2QyZTcxM2ExMmFhM2MxZmYyMzc2
MjQwYjY5OTE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTA3LTE5ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRp
b24gc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGllbnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUg
dGhlaXIgb3duIGF1dGhlbnRpY2F0aW9uCisgICAgICAgIHdoZW4gdGhlIHVzZXIgaXMgY2hhbGxl
bmdlZCB3aXRoIGh0dHAgYXV0aGVudGljYXRpb24uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcDoKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5j
cHA6IEFkZGVkLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZSk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAgICAgICh3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9zZXRfYXV0aGVudGljYXRpb25fY2hhbGxlbmdlKToK
KyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9hdXRoZW50aWNhdGlv
bl9jaGFsbGVuZ2UpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0
aGVudGljYXRlKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNl
bCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAgKGRpZFJlY2VpdmVBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZUluRnJhbWUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld1J1bkF1dGhlbnRpY2F0aW9uRGlh
bG9nKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvblJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDoK
KwogMjAxMy0wNy0xNyAgRG9uZy1Hd2FuIEtpbSAgPGRvbmdnd2FuLmtpbUBzYW1zdW5nLmNvbT4K
IAogICAgICAgICBbRUZMXVtXSzJdIEVXSzJDb29raWVNYW5hZ2VyVGVzdCBzaG91bGQgYmUgZGVm
aW5lZCBieSBpbmhlcml0aW5nIGZyb20gRVdLMlVuaXRUZXN0QmFzZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IGIxNTAxN2ZlYjhjZDBjNWY4ODRhNThkOTU5MzU5N2JkYTZhMjc2
MmUuLjg4YThmNzM1MDcwYThkZWNhYTBiOTFkMWU5YmZkMzlhMGUyMWExMGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjUzLDYgKzY1Myw5IEBAIHdlYmtpdDJfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRl
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJk
TGlzdC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9y
d2FyZExpc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCmluZGV4
IDA2OTlkYTdlZWQzMWM1NTQ1Y2U5MDczN2FjMmEwM2MyNTEwMGNjNzUuLjcwZTRiYzVmNGFiZDYw
OWRmOGJjY2Y4MzBmNTkyMWUwMWFmY2Y2MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5j
cHAKQEAgLTIwLDE1ICsyMCwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVy
LmgiCiAjaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFBy
aXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlIHsKICAg
ICBSZWZQdHI8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eT4gYXV0aGVudGljYXRpb25DaGFs
bGVuZ2U7Ci0KKyAgICBHUmVmUHRyPF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IHJlcXVl
c3Q7CiAgICAgR3RrV2lkZ2V0KiBhdXRoV2lkZ2V0OwogICAgIEd0a1dpZGdldCogZGVmYXVsdEJ1
dHRvbjsKICAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0OwpAQCAtMTM4
LDkgKzE0MSwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX2Ns
YXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbAogICAgIHdpZGdldENsYXNzLT5t
YXAgPSB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ01hcDsKIH0KIAotR3RrV2lkZ2V0KiB3ZWJr
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCitHdGtX
aWRnZXQqIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCiB7CiAgICAgV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fRElBTE9HKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0cs
IE5VTEwpKTsKKyAgICBhdXRoRGlhbG9nLT5wcml2LT5yZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVl
c3QpOworICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlID0gd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2F1dGhlbnRpY2F0aW9u
X2NoYWxsZW5nZShyZXF1ZXN0KTsKICAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIHdlYmtpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShhdXRoRGlhbG9nLCBtb2RlKTsKICAgICByZXR1cm4gR1RL
X1dJREdFVChhdXRoRGlhbG9nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oCmluZGV4IDdkNGRl
MmE2ZDNkODE5Y2IxYzY4NzMwM2RiYzE1YTBjN2QxM2VlNDIuLjJlYzQ5OGFlODJlYjIwMTIwOThm
ZDk3YzVjMmE0ZGRiZmJkM2NmOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMjAs
NyArMjAsNyBAQAogI2lmbmRlZiBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ19oCiAjZGVmaW5l
IFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nX2gKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qu
aCIKICNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdldC5oIgogI2luY2x1ZGUgPGd0
ay9ndGsuaD4KIApAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nQ2xhc3MgewogfTsKIAogR1R5cGUgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZ19n
ZXRfdHlwZSgpOwotR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhXZWJL
aXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUp
OworR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QqLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSk7CiAKIEdfRU5EX0RF
Q0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlNGViMDdi
Mjc3MzM2NGJhYTI1YjllNDFiNWRmZmMxNGI0ZDRmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qu
Y3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUg
IldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlIDxnbGliL2dp
MThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgor
ICogU0VDVElPTjogV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3Jp
cHRpb246IEEgcmVxdWVzdCB0byBkbyBhdXRoZW50aWNhdGlvbgorICogQFRpdGxlOiBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZpZXcKKyAqCisg
KiBXaGVuZXZlciB0aGUgdXNlciBhdHRlbXB0cyB0byBsb2FkIGEgcGFnZSBwcm90ZWN0ZWQgYnkg
aHR0cAorICogYXV0aGVudGljYXRpb24sIFdlYktpdCB3aWxsIG5lZWQgdG8gc2hvdyBhIGRpYWxv
ZyBmb3IgdGhlIHVzZXIgdG8KKyAqIGVudGVyIHRoZWlyIHVzZXJuYW1lIGFuZCBwYXNzd29yZC4g
Rm9yIHRoYXQgdG8gaGFwcGVuIGluIGEgZ2VuZXJhbCB3YXksCisgKiBpbnN0ZWFkIG9mIGp1c3Qg
b3BlbmluZyB0aGUgY3VzdG9tICNXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZworICogKHdoaWNo
IG1pZ2h0IGJlIG5vdCBkZXNpcmFibGUgaW4gc29tZSBjYXNlcywgd2hlbiB0aGUgdXNlciB3b3Vs
ZAorICogcHJlZmVyIHRvIHVzZSB0aGVpciBvd24gYXV0aGVudGljYXRpb24gZGlhbG9nKSwgV2Vi
S2l0IHdpbGwgZmlyZSB0aGUKKyAqICNXZWJLaXRXZWJWaWV3OjphdXRoZW50aWNhdGlvbiBzaWdu
YWwgd2l0aCBhCisgKiAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IG9iamVjdCwgd2hpY2gg
d2lsbCBhbGxvdworICogdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB0byBzcGVjaWZ5IHRoZSBjcmVk
ZW50aWFscyBhbmQgdG8gc3VibWl0IHRoZSByZXF1ZXN0LgorICoKKyAqIEluIGNhc2UgdGhlIGNs
aWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRvIGhhbmRsZSB0aGlzIHNpZ25hbCwKKyAq
IFdlYktpdCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIgd2hpY2ggd2lsbCBhc3luY2hy
b25vdXNseSBydW4KKyAqIGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nIGZvciB0aGUgdXNl
ciB0byBpbnRlcmFjdCB3aXRoLgorICovCisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0UHJpdmF0ZSB7CisgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+
IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9Owor
CitXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdCwgR19UWVBFX09CSkVDVCk7CisKKy8qIFByaXZhdGUgbWV0
aG9kcyAqLworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1
ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1h
a2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4K
KyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5kaXNwb3Nl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFz
cykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVx
dWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdERpc3Bvc2U7Cit9CisKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2Vi
a2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJv
eHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQoreworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNULCBOVUxMKSk7CisgICAgcmVx
dWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UgPSBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwordm9pZCB3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9zZXRfYXV0aGVudGljYXRpb25fY2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCAqcmVxdWVzdCwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSAqYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQVVU
SEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UgPSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKK30KKworQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eSogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X2F1dGhlbnRpY2F0aW9uX2NoYWxsZW5nZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJl
cXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmdldCgpOworfQorCisvKiBQdWJsaWMgbWV0aG9kcyAqLwordm9pZCB3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
ICpyZXF1ZXN0LCBjb25zdCBnY2hhciAqdXNlcm5hbWUsIGNvbnN0IGdjaGFyICpwYXNzd29yZCwg
V2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHdlYmtpdFBlcnNpc3RlbmNlKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkp
OworCisgICAgQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlOworICAgIHN3aXRjaCAo
d2Via2l0UGVyc2lzdGVuY2UpIHsKKyAgICBjYXNlIFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5j
ZU5vbmU6CisgICAgICAgIHBlcnNpc3RlbmNlID0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2VGb3JT
ZXNzaW9uOgorICAgICAgICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNl
c3Npb247CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3Rl
bmNlUGVybWFuZW50OgorICAgICAgICBwZXJzaXN0ZW5jZSA9IENyZWRlbnRpYWxQZXJzaXN0ZW5j
ZVBlcm1hbmVudDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gd2Fy
biB0aGF0IHRoZSBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2UgZW51bSBpcyBpbnZhbGlkCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIENyZWRlbnRpYWwgY3JlZGVudGlhbCA9IHJlcXVl
c3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm9wb3NlZENyZWRlbnRpYWwoKS0+
Y29yZSgpOworCisgICAgUmVmUHRyPFdlYlN0cmluZz4gdXNlcm5hbWVTdHJpbmcgPSBXZWJTdHJp
bmc6OmNyZWF0ZUZyb21VVEY4U3RyaW5nKHVzZXJuYW1lKTsKKyAgICBpZiAodXNlcm5hbWVTdHJp
bmctPmlzRW1wdHkoKSkKKyAgICAgICAgdXNlcm5hbWVTdHJpbmcgPSBXZWJTdHJpbmc6OmNyZWF0
ZShjcmVkZW50aWFsLnVzZXIoKSk7CisKKyAgICBSZWZQdHI8V2ViU3RyaW5nPiBwYXNzd29yZFN0
cmluZyA9IFdlYlN0cmluZzo6Y3JlYXRlRnJvbVVURjhTdHJpbmcocGFzc3dvcmQpOworICAgIGlm
IChwYXNzd29yZFN0cmluZy0+aXNFbXB0eSgpKQorICAgICAgICBwYXNzd29yZFN0cmluZyA9IFdl
YlN0cmluZzo6Y3JlYXRlKGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CisKKyAgICBSZWZQdHI8V2Vi
Q3JlZGVudGlhbD4gd2ViQ3JlZGVudGlhbCA9IFdlYkNyZWRlbnRpYWw6OmNyZWF0ZSh1c2VybmFt
ZVN0cmluZy5nZXQoKSwgcGFzc3dvcmRTdHJpbmcuZ2V0KCksIHBlcnNpc3RlbmNlKTsKKyAgICBy
ZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+dXNlQ3Jl
ZGVudGlhbCh3ZWJDcmVkZW50aWFsLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVk
UmVxdWVzdCA9IHRydWU7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfY2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAor
ICoKKyAqIEFzayBXZWJLaXQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LiBJdCdzIGltcG9ydGFudCB0
byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIHNlbGVjdGlvbiBoYXMgYmVlbiBtYWRlIGluIHRoZSBj
bGllbnQsIG90aGVyd2lzZSB0aGUgcmVxdWVzdAorICogd29uJ3QgYmUgcHJvcGVybHkgY29tcGxl
dGVkIGFuZCB0aGUgYnJvd3NlciB3aWxsIGtlZXAgdGhlIHJlcXVlc3QKKyAqIHBlbmRpbmcgZm9y
ZXZlciwgd2hpY2ggbWlnaHQgY2F1c2UgdGhlIGJyb3dzZXIgdG8gaGFuZy4KKyAqLwordm9pZCB3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwoV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhF
TlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkpOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT5jYW5jZWwoKTsKKyAgICByZXF1ZXN0LT5wcml2
LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMxNzA4YzIyMTdmMTk5NGE5NjBiYTk1ZTY2NjUxNTRhNjhkYTdhZDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYg
IWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElM
QVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQg
ZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
X2gKKyNkZWZpbmUgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0
ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QgICAod2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9BVVRIRU5USUNBVElPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FU
SU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9B
VVRIRU5USUNBVElPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsIFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Owor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzICAgV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0UHJpdmF0ZSBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRl
OworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCB7CisgICAgR09iamVjdCBw
YXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVk
MSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKwordHlwZWRlZiBlbnVtICB7Cisg
ICAgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSwKKyAgICBXZWJLaXRDcmVkZW50aWFs
UGVyc2lzdGVuY2VGb3JTZXNzaW9uLAorICAgIFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZVBl
cm1hbmVudCwKK30gV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlOworCitXRUJLSVRfQVBJIEdU
eXBlCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfdHlwZSAgICAgICh2b2lkKTsK
KworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50
aWNhdGUgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAqdXNlcm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hh
ciAqcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2Ugd2Via2l0UGVyc2lzdGVuY2UpOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbCAgICAgICAg
KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRhNDA2M2JhNzExZTY1NGU2MDljNjNmOTMwZTM5NjBiZmY4MDdlMGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3RQcml2YXRlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
LmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCitXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QqIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShXZWJLaXQ6OkF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHkqKTsKKwordm9pZAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3Rfc2V0X2F1dGhlbnRpY2F0aW9uX2NoYWxsZW5nZShXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QqLCBXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqKTsKKworV2ViS2l0
OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdF9nZXRfYXV0aGVudGljYXRpb25fY2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCopOworCisjZW5kaWYgLy8gV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2Fk
ZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9h
ZGVyQ2xpZW50LmNwcAppbmRleCAzNmNkNmMwZTZlN2IwYzJjNGFkMDU5MDMzMDk2MmZhMWI3NWEw
MDgwLi4wNjc4M2Y4M2U3YTg1ZTIyNDg0YjljMDAyNTk1ZWU0NDk2NTgyYzY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVu
dC5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
ZWJLaXRMb2FkZXJDbGllbnQuaCIKIAorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgiCkBAIC0xMzAsNyArMTMxLDggQEAgc3RhdGljIHZvaWQgZGlk
Q2hhbmdlQmFja0ZvcndhcmRMaXN0KFdLUGFnZVJlZiBwYWdlLCBXS0JhY2tGb3J3YXJkTGlzdEl0
ZW1SZWYgYWQKIAogc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
SW5GcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVJlZiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbykKIHsKLSAgICB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
V0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCB0b0ltcGwoYXV0aGVudGljYXRpb25DaGFsbGVu
Z2UpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB3ZWJraXRB
dXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUodG9JbXBsKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KSk7CisgICAgd2Via2l0V2ViVmlld0hhbmRsZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdFQktJ
VF9XRUJfVklFVyhjbGllbnRJbmZvKSwgcmVxdWVzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHByb2Nl
c3NEaWRDcmFzaChXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5k
ZXggMjk0OTcwOTBkYjYwN2RiY2E5ZjAxYWI5ZjQ0YzkzMjdlNDgyMWMxZi4uMTdlYzAxZDM4ZDc5
OGE2ODk4YjdiM2RkNWUwZDlhMTE0ZjcxODcwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTg5LDYgKzg5LDcgQEAgZW51
bSB7CiAgICAgTE9BRF9DSEFOR0VELAogICAgIExPQURfRkFJTEVELAogCisgICAgQVVUSEVOVElD
QVRJT04sCiAgICAgQ1JFQVRFLAogICAgIFJFQURZX1RPX1NIT1csCiAgICAgUlVOX0FTX01PREFM
LApAQCAtNDI5LDYgKzQzMCwxOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RGlzY29ubmVj
dEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKFdlYktpdFdlYlZpZXcqCiAgICAgcHJpdi0+
ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSAwOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
V2ViVmlld1J1bkF1dGhlbnRpY2F0aW9uRGlhbG9nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBDcmVkZW50aWFsU3Rv
cmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlOworICAgIGlmICh3ZWJraXRfc2V0dGluZ3Nf
Z2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mo
d2ViVmlldykpKQorICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBEaXNhbGxvd1BlcnNp
c3RlbnRTdG9yYWdlOworICAgIGVsc2UKKyAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0g
QWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRp
Y2F0aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50
aWNhdGlvbkRpYWxvZ05ldyhyZXF1ZXN0LCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpKTsKKworICAg
IHJldHVybiBUUlVFOworfQorCiBzdGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNl
Q2FsbGJhY2soR3RrRGlhbG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNo
b29zZXJSZXF1ZXN0KiByZXF1ZXN0KQogewogICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJS
ZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKQEAgLTU5OSw2ICs2
MTIsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJW
aWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICBnT2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9
IHdlYmtpdFdlYlZpZXdHZXRQcm9wZXJ0eTsKICAgICBnT2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3
ZWJraXRXZWJWaWV3RGlzcG9zZTsKIAorICAgIHdlYlZpZXdDbGFzcy0+YXV0aGVudGljYXRpb24g
PSB3ZWJraXRXZWJWaWV3UnVuQXV0aGVudGljYXRpb25EaWFsb2c7CiAgICAgd2ViVmlld0NsYXNz
LT5sb2FkX2ZhaWxlZCA9IHdlYmtpdFdlYlZpZXdMb2FkRmFpbDsKICAgICB3ZWJWaWV3Q2xhc3Mt
PmNyZWF0ZSA9IHdlYmtpdFdlYlZpZXdDcmVhdGU7CiAgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRf
ZGlhbG9nID0gd2Via2l0V2ViVmlld1NjcmlwdERpYWxvZzsKQEAgLTgzMiw2ICs4NDYsMzcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNz
KiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7CiAK
ICAgICAvKioKKyAgICAqIFdlYktpdFdlYlZpZXc6OmF1dGhlbnRpY2F0aW9uOgorICAgICogQHdl
Yl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CisgICAgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgICAgKgor
ICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5nZWQg
d2l0aCBodHRwCisgICAgKiBhdXRoZW50aWNhdGlvbiwgcmVxdWVzdGluZyBmcm9tIFdlYktpdCB0
byBzaG93CisgICAgKiBhIGRpYWxvZyB0byB3aGVyZSB0aGUgdXNlciBjYW4gc3VwcGx5IGNyZWRl
bnRpYWxzLiBUbyBsZXQgdGhlCisgICAgKiBhcHBsaWNhdGlvbiBhY2Nlc3Mgb3Igc3VwcGx5IHRo
ZSBjcmVkZW50aWFscyBhcyB3ZWxsIGFzIHRvCisgICAgKiBhbGxvdyB0aGUgY2xpZW50IGFwcGxp
Y2F0aW9uIHRvIGVpdGhlciBjYW5jZWwgdGhlIHJlcXVlc3Qgb3IKKyAgICAqIHBlcmZvcm0gdGhl
IGF1dGhlbnRpY2F0aW9uLCB0aGUgc2lnbmFsIHdpbGwgcGFzcyBhbgorICAgICogaW5zdGFuY2Ug
b2YgdGhlICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0CisgICAg
KiBhcmd1bWVudC4KKyAgICAqCisgICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxs
IGFzeW5jaHJvbm91c2x5IHJ1biB0aGUgY3VzdG9tCisgICAgKiBXZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZyBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAgICAqCisgICAgKiBSZXR1
cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3Ig
dGhlIGV2ZW50LgorICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVy
LgorICAgICoKKyAgICAqLworICAgIHNpZ25hbHNbQVVUSEVOVElDQVRJT05dID0KKyAgICAgICAg
Z19zaWduYWxfbmV3KCJhdXRoZW50aWNhdGlvbiIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBhdXRoZW50aWNhdGlv
biksCisgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyog
YWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5f
X09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFy
YW1ldGVycyAqLworICAgICAgICAgICAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVT
VCk7CisKKyAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3OjpjcmVhdGU6CiAgICAgICogQHdl
Yl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CiAgICAgICoKQEAgLTE3MzYsMTUgKzE3ODEsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0
Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24K
ICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbU1VCTUlUX0ZPUk1dLCAwLCByZXF1
ZXN0KTsKIH0KIAotdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSog
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCit2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QqIHJlcXVlc3QpCiB7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRl
bnRpYWxTdG9yYWdlTW9kZTsKLSAgICBpZiAod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJp
dmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpKSkKLSAg
ICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsK
LSAgICBlbHNlCi0gICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVu
dFN0b3JhZ2U7Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9n
KFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxv
Z05ldyhhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7Cisg
ICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWdu
YWxzW0FVVEhFTlRJQ0FUSU9OXSwgMCwgcmVxdWVzdCwgJnJldHVyblZhbHVlKTsKIH0KIAogdm9p
ZCB3ZWJraXRXZWJWaWV3SW5zZWN1cmVDb250ZW50RGV0ZWN0ZWQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBiMjNkN2ZmYjEzYTA4
ZjA5NTRlY2EzNTRjZTg2ZWM1NzA3M2NhMWQ3Li42NzNmZjkyZmQ2MWEwNTk4YTEyZWMyMTdmNWQ4
YWJkMjc3MTM0YzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFdlYktpdFdlYlZpZXdf
aAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CkBAIC0yMDYsNiAr
MjA3LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAq
ZmFpbGluZ191cmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICplcnJvcik7CiAKKyAgICBnYm9vbGVhbiAg
ICgqIGF1dGhlbnRpY2F0aW9uKSAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAg
ICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CiAgICAgR3RrV2lkZ2V0
ICooKiBjcmVhdGUpICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAgICAgdm9pZCAg
ICAgICAoKiBydW5fYXNfbW9kYWwpICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCBlYjFmMjdkYjI5OGNhZTM4Nzgx
YjVkYjQyNDhhM2Q2Yjg3ZGE0YmExLi45ZDYzODg5ZWVkN2VjZjYyY2IyMzIxYWU5ZDI0ZmE3Yjkx
MjZlNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTU3LDcgKzU3LDcgQEAgYm9vbCB3ZWJraXRXZWJW
aWV3RW50ZXJGdWxsU2NyZWVuKFdlYktpdFdlYlZpZXcqKTsKIGJvb2wgd2Via2l0V2ViVmlld0xl
YXZlRnVsbFNjcmVlbihXZWJLaXRXZWJWaWV3Kik7CiB2b2lkIHdlYmtpdFdlYlZpZXdQb3B1bGF0
ZUNvbnRleHRNZW51KFdlYktpdFdlYlZpZXcqLCBXZWJLaXQ6OkltbXV0YWJsZUFycmF5KiBwcm9w
b3NlZE1lbnUsIFdlYktpdDo6V2ViSGl0VGVzdFJlc3VsdCopOwogdm9pZCB3ZWJraXRXZWJWaWV3
U3VibWl0Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyosIFdlYktpdEZvcm1TdWJtaXNzaW9uUmVx
dWVzdCopOwotdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
V2ViS2l0V2ViVmlldyosIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSopOwor
dm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2Vi
VmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCopOwogdm9pZCB3ZWJraXRXZWJWaWV3
SW5zZWN1cmVDb250ZW50RGV0ZWN0ZWQoV2ViS2l0V2ViVmlldyosIFdlYktpdEluc2VjdXJlQ29u
dGVudEV2ZW50KTsKIHZvaWQgd2Via2l0V2ViVmlld1dlYlByb2Nlc3NDcmFzaGVkKFdlYktpdFdl
YlZpZXcqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDg4ZDc3ZjI4NjBlMDYwYTUw
NmFiOWJiNWM4MmZhMjhhZmE2NmIxN2EuLjVmMDFiMDI3ZmFlN2Q4OTczMjU5NWI4MGQyYjE4NTUx
ODYzNmY4NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTc5Myw2ICs3OTMsNDQgQEAg
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJlcXVlc3QoRmlsZUNob29zZXJUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIHdlYmtpdF9maWxlX2Nob29zZXJfcmVxdWVzdF9j
YW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKIH0KIAorY2xhc3MgQXV0aGVudGljYXRpb25UZXN0
OiBwdWJsaWMgVUlDbGllbnRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhU
VVJFKEF1dGhlbnRpY2F0aW9uVGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3QoKQorICAg
IHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50aWNhdGlvbiIs
IEdfQ0FMTEJBQ0socnVuQXV0aGVudGljYXRpb25DYWxsYmFjayksIHRoaXMpOworICAgIH0KKwor
ICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZp
ZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9u
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9uKHJlcXVl
c3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkF1dGhlbnRp
Y2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAg
ICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVz
dCkpOworICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAg
IGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiBjbGlja01vdXNlQnV0dG9uQW5kV2FpdEZvckF1dGhlbnRpY2F0aW9u
UmVxdWVzdChpbnQgeCwgaW50IHkpCisgICAgeworICAgICAgICBjbGlja01vdXNlQnV0dG9uKHgs
IHkpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIHJldHVy
biBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
R1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGljYXRpb25SZXF1
ZXN0OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3Qo
QXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIEZJWE1F
OiB0ZXN0IHRoZSBhdXRoZW50aWNhdGlvbiBBUEkKK30KKwogY2xhc3MgRnVsbFNjcmVlbkNsaWVu
dFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CiBwdWJsaWM6CiAgICAgTUFLRV9HTElCX1RFU1Rf
RklYVFVSRShGdWxsU2NyZWVuQ2xpZW50VGVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmgKaW5kZXggZDE4NDMxNTI4MWE4MzYzYjgxMDU3OGMzODhmMWUzNmVh
M2NhYjJiMi4uYjBjZmY1YjFjOGIzZjEyMzM0YjBhYzc1N2JlMmI1OWM4N2Y1Nzc1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMjMsNiArMjMsNyBA
QAogCiAjZGVmaW5lIF9fV0VCS0lUMl9IX0lOU0lERV9fCiAKKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVudS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207310</attachid>
            <date>2013-07-23 01:43:18 -0700</date>
            <delta_ts>2013-07-26 09:17:43 -0700</delta_ts>
            <desc>WIP Patch 2</desc>
            <filename>bug-99352-20130723094338.patch</filename>
            <type>text/plain</type>
            <size>38869</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDBjMTVhMDA5NzkzMThh
YzQxMGM0ODE0ZWU5YTRiMDYyYTgyODIwNi4uMzk3ZTU0NDA4NDJlZTBjNzI5YzZkYzVjYjZlOWEx
NTM5M2I2ZDM5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDEzLTA3LTIzICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRp
b24gc2lnbmFsIHRvCisgICAgICAgIGxldCBjbGllbnQgYXBwbGljYXRpb25zIHRvIHByb3ZpZGUg
dGhlaXIgb3duIGF1dGhlbnRpY2F0aW9uCisgICAgICAgIHdoZW4gdGhlIHVzZXIgaXMgY2hhbGxl
bmdlZCB3aXRoIGh0dHAgYXV0aGVudGljYXRpb24uIFRoZQorICAgICAgICBjcmVkZW50aWFsIGlz
IGV4cG9zZWQgdGhyb3VnaCBhIG5ldyBjbGFzcyBXZWJLaXRDcmVkZW50aWFsLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHA6CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ0F1dGhlbnRpY2F0ZSk6CisgICAgICAgIChva0J1dHRvbkNsaWNrZWQpOgorICAgICAg
ICAoY2FuY2VsQnV0dG9uQ2xpY2tlZCk6CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbkRp
YWxvZ0luaXRpYWxpemUpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3REaXNw
b3NlKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NsYXNzX2luaXQp
OgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKToKKyAgICAgICAg
KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9hdXRoZW50aWNhdGlvbl9jaGFsbGVu
Z2UpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3Jl
ZGVudGlhbCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfY3Jl
ZGVudGlhbCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50
aWNhdGUpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDcmVkZW50aWFsLmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0Q3JlZGVudGlhbDo6
X1dlYktpdENyZWRlbnRpYWwpOgorICAgICAgICAod2Via2l0Q3JlZGVudGlhbENyZWF0ZSk6Cisg
ICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9nZXRfd2ViY3JlZGVudGlhbCk6CisgICAgICAgICh3
ZWJraXRfY3JlZGVudGlhbF9uZXcpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfcmVmKToK
KyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX3VucmVmKToKKyAgICAgICAgKHdlYmtpdF9jcmVk
ZW50aWFsX2dldF91c2VybmFtZSk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGFz
c3dvcmQpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNpc3RlbmNlKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmg6IEFkZGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAg
ICAod2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHA6
CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgorCiAyMDEzLTA3LTE3ICBEb25nLUd3YW4gS2lt
ICA8ZG9uZ2d3YW4ua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gRVdLMkNv
b2tpZU1hbmFnZXJUZXN0IHNob3VsZCBiZSBkZWZpbmVkIGJ5IGluaGVyaXRpbmcgZnJvbSBFV0sy
VW5pdFRlc3RCYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlz
dC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYjE1MDE3ZmVi
OGNkMGM1Zjg4NGE1OGQ5NTkzNTk3YmRhNmEyNzYyZS4uYjQ4NmM2YmJmMmJhNGNkZjRkNDNlZTll
N2E1YzBjYjRmZDRhOTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
bGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02NTMs
NiArNjUzLDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCkBAIC02
NzIsNiArNjc1LDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmNwcCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZy5jcHAKaW5kZXggMDY5OWRhN2VlZDMxYzU1NDVjZTkwNzM3YWMyYTAz
YzI1MTAwY2M3NS4uODllMTk4M2JlYjM1ZjAwNjE3NjlkNGJmNDk4ODExODdhMzJhZjgyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMjAsMTUgKzIwLDE5IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIKIAor
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJBdXRo
ZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJDcmVkZW50aWFsLmgi
CisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENyZWRl
bnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYktpdFByaXZhdGUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogc3RydWN0IF9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUgewotICAgIFJlZlB0cjxBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLQorICAgIEdSZWZQ
dHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiByZXF1ZXN0OwogICAgIEd0a1dpZGdldCog
YXV0aFdpZGdldDsKICAgICBHdGtXaWRnZXQqIGRlZmF1bHRCdXR0b247CiAgICAgR1JlZlB0cjxH
dGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dDsKQEAgLTM2LDIzICs0MCwyNSBAQCBzdHJ1Y3Qg
X1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSB7CiAKIFdFQktJVF9ERUZJTkVfVFlQ
RShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZywgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxv
ZywgR1RLX1RZUEVfRVZFTlRfQk9YKQogCi1zdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxv
ZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3N0YXRpYyB2b2lkIHdlYmtpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRo
RGlhbG9nLCBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQogewogICAgIFdlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7Ci0gICAgcHJp
di0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCktPnVzZUNyZWRlbnRpYWwoY3Jl
ZGVudGlhbCk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRl
KHByaXYtPnJlcXVlc3QuZ2V0KCksIGNyZWRlbnRpYWwpOwogICAgIGd0a193aWRnZXRfZGVzdHJv
eShHVEtfV0lER0VUKGF1dGhEaWFsb2cpKTsKIH0KIAogc3RhdGljIHZvaWQgb2tCdXR0b25DbGlj
a2VkKEd0a0J1dHRvbiosIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQog
ewogICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFs
b2ctPnByaXY7Ci0gICAgUmVmUHRyPFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJD
cmVkZW50aWFsOjpjcmVhdGUod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50
aWFsKFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVQocHJpdi0+YXV0aFdpZGdldCkpKTsKLSAg
ICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCB3ZWJD
cmVkZW50aWFsLmdldCgpKTsKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Vi
a2l0Q3JlZGVudGlhbENyZWF0ZSh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0ZUNyZWRl
bnRpYWwoV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChwcml2LT5hdXRoV2lkZ2V0KSkpOwor
ICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKGF1dGhEaWFsb2csIGNy
ZWRlbnRpYWwpOwogfQogCiBzdGF0aWMgdm9pZCBjYW5jZWxCdXR0b25DbGlja2VkKEd0a0J1dHRv
biosIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQogewotICAgIHdlYmtp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKGF1dGhEaWFsb2csIDApOworICAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7
CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKGF1dGhEaWFsb2ctPnBy
aXYtPnJlcXVlc3QuZ2V0KCkpOworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGF1
dGhEaWFsb2cpKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJ
bml0aWFsaXplKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nLCBDcmVkZW50
aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKQpAQCAtODAsNyArODYsOCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0luaXRpYWxpemUoV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cqIGF1dAogICAgIGd0a19ib3hfcGFja19lbmQoR1RLX0JPWChidXR0
b25Cb3gpLCBidXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKICAgICBndGtfd2lkZ2V0X3Nob3coYnV0
dG9uKTsKIAotICAgIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQgPSB3ZWJraXRBdXRoZW50
aWNhdGlvbldpZGdldE5ldyhhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS0+Y29yZSgpLCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpOworICAgIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gd2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfZ2V0X2F1dGhlbnRpY2F0aW9uX2NoYWxsZW5nZShhdXRoRGlhbG9nLT5wcml2
LT5yZXF1ZXN0LmdldCgpKTsKKyAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0ID0gd2Vi
a2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmNvcmUo
KSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JP
WCh2Qm94KSwgYXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCwgVFJVRSwgVFJVRSwgMCk7CiAg
ICAgZ3RrX3dpZGdldF9zaG93KGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQpOwogCkBAIC0x
MzgsMTAgKzE0NSwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9n
X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbAogICAgIHdpZGdldENsYXNz
LT5tYXAgPSB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ01hcDsKIH0KIAotR3RrV2lkZ2V0KiB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCitH
dGtXaWRnZXQqIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCogcmVxdWVzdCwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCiB7CiAgICAg
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBXRUJLSVRfQVVUSEVOVElD
QVRJT05fRElBTE9HKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFM
T0csIE5VTEwpKTsKLSAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGF1dGhEaWFsb2ctPnByaXYtPnJlcXVl
c3QgPSByZXF1ZXN0OwogICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShh
dXRoRGlhbG9nLCBtb2RlKTsKICAgICByZXR1cm4gR1RLX1dJREdFVChhdXRoRGlhbG9nKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oCmluZGV4IDdkNGRlMmE2ZDNkODE5Y2IxYzY4NzMwM2Ri
YzE1YTBjN2QxM2VlNDIuLjQwYTIyZTAxYzNkOWI0OTJlMDA0ZTIwZTYxZDg0N2Q5YzkyOWRlZGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMjAsOCArMjAsOSBAQAogI2lmbmRlZiBX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ19oCiAjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nX2gKIAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJLaXRB
dXRoZW50aWNhdGlvbldpZGdldC5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIKICNp
bmNsdWRlIDxndGsvZ3RrLmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTQ4LDcgKzQ5LDcgQEAgc3Ry
dWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKIH07CiAKIEdUeXBlIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsKLUd0a1dpZGdldCogd2Via2l0QXV0
aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5
KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRp
b25EaWFsb2dOZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiwgQ3JlZGVudGlhbFN0b3Jh
Z2VNb2RlKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmE1NjA0N2I5ODFiOTY1NDE1ZDQxMjAxZTI0ODJhNWRjYmFhNzJmYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaCIKKyNp
bmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisv
KioKKyAqIFNFQ1RJT046IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQFNob3J0X2Rl
c2NyaXB0aW9uOiBBIHJlcXVlc3QgdG8gZG8gYXV0aGVudGljYXRpb24KKyAqIEBUaXRsZTogV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3Cisg
KgorICogV2hlbmV2ZXIgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gbG9hZCBhIHBhZ2UgcHJvdGVjdGVk
IGJ5IEhUVFAKKyAqIGF1dGhlbnRpY2F0aW9uLCB0aGUgdXNlciB3aWxsIG5lZWQgdG8gcHJvdmlk
ZSB0aGVpciBjcmVkZW50aWFscy4KKyAqIFRoaXMgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCBvYmplY3QgZW5jYXBzdWxhdGVzIHRoZQorICogYXV0aGVudGljYXRpb24gZGV0YWlscyBhbmQg
aXMgZW1pdHRlZCB3aXRoIHRoZQorICogI1dlYktpdFdlYlZpZXc6OmF1dGhlbnRpY2F0ZSBzaWdu
YWwgdG8gYWxsb3cgY2xpZW50IGFwcGxpY2F0aW9ucyB0bworICogZGVmaW5lIGhvdyBjcmVkZW50
aWFscyBzaG91bGQgYmUgYWRtaW5pc3RlcmVkLgorICoKKyAqIEluIGNhc2UgdGhlIGNsaWVudCBh
cHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRvIGhhbmRsZSB0aGlzIHNpZ25hbCwKKyAqIFdlYktp
dCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIuCisgKi8KKworc3RydWN0IF9XZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8QXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eT4gYXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgYm9vbCBwcml2YXRl
QnJvd3NpbmdFbmFibGVkOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7Cit9OworCitXRUJLSVRf
REVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdCwgR19UWVBFX09CSkVDVCkKKworLyogUHJpdmF0ZSBtZXRob2RzICovCitz
dGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3REaXNwb3NlKEdPYmplY3QqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSBXRUJL
SVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmplY3QpOworCisgICAgLy8gTWFrZSBzdXJlIHRo
ZSByZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9yZSBmaW5hbGl6aW5nLgorICAgIGlmICgh
cmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QpCisgICAgICAgIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2xhc3NfaW5p
dChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
RGlzcG9zZTsKK30KKworV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3ZWJraXRBdXRoZW50
aWNhdGlvblJlcXVlc3RDcmVhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UsIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3sKKyAgICBX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVT
VCwgTlVMTCkpOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0g
YXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgcmVxdWVzdC0+cHJpdi0+cHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CisgICAgcmV0dXJuIHJlcXVlc3Q7
Cit9CisKK0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9hdXRoZW50aWNhdGlvbl9jaGFsbGVuZ2UoV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5hdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5nZXQoKTsKK30KKworLyogUHVibGljIG1ldGhvZHMgKi8KKy8qKgor
ICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbDoKKyAq
IEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBEZXRlcm1p
bmUgd2hldGhlciB0aGUgYXV0aGVudGljYXRpb24gbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGlz
CisgKiAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHNob3VsZCBhbGxvdyB0aGUgc3RvcmFnZSBv
ZiBjcmVkZW50aWFscy4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY2xpZW50IHNob3Vs
ZCBhbGxvdyBzdG9yYWdlIG9mIGNyZWRlbnRpYWxzIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKi8K
K2dib29sZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRp
YWwoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCBG
QUxTRSk7CisKKyAgICBnYm9vbGVhbiBjcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CisjaWYgRU5B
QkxFKENSRURFTlRJQUxfU1RPUkFHRSkKKyAgICBjcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBU
UlVFOworI2Vsc2UKKyAgICBjcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBGQUxTRTsKKyNlbmRp
ZgorCisgICAgcmV0dXJuICghcmVxdWVzdC0+cHJpdi0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCAm
JiBjcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpOworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9jcmVkZW50aWFsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgI1dlYktpdENyZWRlbnRpYWwgY3Vy
cmVudGx5IHN0b3JlZCBpbiB0aGUga2V5cmluZy4gVGhlIGNsaWVudCBjYW4gdXNlIHRoaXMKKyAq
IGRpcmVjdGx5IGZvciBhdXRoZW50aWNhdGlvbiBvciBjb25zdHJ1Y3QgdGhlaXIgb3duLgorICoK
KyAqIFJldHVybnM6ICNXZWJLaXRDcmVkZW50aWFsCisgKi8KK1dlYktpdENyZWRlbnRpYWwqIHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9jcmVkZW50aWFsKFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCAqcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgV2ViS2l0Q3Jl
ZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdENyZWRlbnRpYWxDcmVhdGUocmVxdWVzdC0+cHJp
di0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3Bvc2VkQ3JlZGVudGlhbCgpLT5jb3JlKCkp
OworICAgIHJldHVybiBjcmVkZW50aWFsOworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QKKyAqIEBjcmVkZW50aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgor
ICogQXV0aGVudGljYXRlIHRoZSAjV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0IHVzaW5nIHRoZSAj
V2ViS2l0Q3JlZGVudGlhbAorICogc3VwcGxpZWQuCisgKi8KK3ZvaWQgd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAq
cmVxdWVzdCwgV2ViS2l0Q3JlZGVudGlhbCAqY3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBS
ZWZQdHI8V2ViQ3JlZGVudGlhbD4gd2ViQ3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50aWFsX2dl
dF93ZWJjcmVkZW50aWFsKGNyZWRlbnRpYWwpOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51c2VDcmVkZW50aWFsKHdlYkNyZWRlbnRpYWwu
Z2V0KCkpOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30KKwor
LyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWw6CisgKiBAcmVxdWVz
dDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogQ2FuY2VsIHRoZSByZXF1
ZXN0LiBJdCdzIGltcG9ydGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIGF1dGhlbnRpY2F0
aW9uIGhhcyBiZWVuIG1hZGUgaW4gdGhlIGNsaWVudCwgb3RoZXJ3aXNlIHRoZSByZXF1ZXN0Cisg
KiB3b24ndCBiZSBwcm9wZXJseSBjb21wbGV0ZWQgYW5kIHRoZSBicm93c2VyIHdpbGwga2VlcCB0
aGUgcmVxdWVzdAorICogcGVuZGluZyBmb3JldmVyLCB3aGljaCBtaWdodCBjYXVzZSB0aGUgYnJv
d3NlciB0byBoYW5nLgorICovCit2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nh
bmNlbChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSk7Cisg
ICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCktPmNh
bmNlbCgpOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTUwM2E5ZGY5MTFjNjE3ODgwYzMy
ODg0NzZmZWQxNzU2ZTg5MTY3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykg
JiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93
ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RfaAorI2RlZmluZSBXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0Q3JlZGVudGlhbC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVT
VCAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNU
LCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElD
QVRJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChr
bGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNULCBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9S
RVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfQVVU
SEVOVElDQVRJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNUKSkKKyNkZWZpbmUg
V0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVT
VCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICAgICAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3Mg
ICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IHsKKyAgICBH
T2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfdHlwZSAgICAgICh2b2lk
KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Y2FuX3NhdmVfY3JlZGVudGlhbCAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVz
dCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q3JlZGVudGlhbCoKK3dlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9jcmVkZW50aWFsICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2F1dGhlbnRpY2F0ZSAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qg
KnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0Q3JlZGVudGlhbCAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsICAgICAgICAgICAgICAgKFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1
YWUwN2FiMzk2NDJlODExZmUwNjA5OTE4YjBiOTEzZDJlMjhkMWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3RQcml2YXRlLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCisj
aW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCitXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qq
IHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShXZWJLaXQ6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHkqLCBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpOworCitXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2dldF9hdXRoZW50aWNhdGlvbl9jaGFsbGVuZ2UoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0Kik7CisKKyNlbmRpZiAvLyBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRl
bnRpYWwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVu
dGlhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGIyZDZkOTdmMjMyN2ZhODk3M2JmZGVmZWYwMGYxY2UxMWI1
YTk3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENyZWRlbnRpYWwuY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlhbC5oIgorCisjaW5j
bHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWxQcml2YXRl
LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9XZWJLaXRD
cmVkZW50aWFsIHsKKyAgICBfV2ViS2l0Q3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpDcmVkZW50
aWFsJiBjcmVkZW50aWFsKQorICAgICAgICA6IGNvcmUoY3JlZGVudGlhbCkKKyAgICAgICAgLCBy
ZWZlcmVuY2VDb3VudCgxKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpDcmVkZW50aWFs
IGNvcmU7CisKKyAgICBpbnQgcmVmZXJlbmNlQ291bnQ7Cit9OworCitHX0RFRklORV9CT1hFRF9U
WVBFKFdlYktpdENyZWRlbnRpYWwsIHdlYmtpdF9jcmVkZW50aWFsLCB3ZWJraXRfY3JlZGVudGlh
bF9yZWYsIHdlYmtpdF9jcmVkZW50aWFsX3VucmVmKQorCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJr
aXRDcmVkZW50aWFsQ3JlYXRlKGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwp
Cit7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogd2ViS2l0Q3JlZGVudGlhbCA9IGdfc2xpY2VfbmV3
KFdlYktpdENyZWRlbnRpYWwpOworICAgIG5ldyAod2ViS2l0Q3JlZGVudGlhbCkgV2ViS2l0Q3Jl
ZGVudGlhbChjcmVkZW50aWFsKTsKKyAgICByZXR1cm4gd2ViS2l0Q3JlZGVudGlhbDsKK30KKwor
V2ViQ3JlZGVudGlhbCogd2Via2l0X2NyZWRlbnRpYWxfZ2V0X3dlYmNyZWRlbnRpYWwoV2ViS2l0
Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBSZWZQdHI8V2ViQ3JlZGVudGlhbD4gd2Vi
Q3JlZGVudGlhbCA9IFdlYkNyZWRlbnRpYWw6OmNyZWF0ZShjcmVkZW50aWFsLT5jb3JlKTsKKyAg
ICByZXR1cm4gd2ViQ3JlZGVudGlhbC5yZWxlYXNlKCkubGVha1JlZigpOworfQorCitXZWJLaXRD
cmVkZW50aWFsKiB3ZWJraXRfY3JlZGVudGlhbF9uZXcoY29uc3QgZ2NoYXIqIHVzZXJuYW1lLCBj
b25zdCBnY2hhciogcGFzc3dvcmQsIFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZSBwZXJzaXN0
ZW5jZSkKK3sKKyAgICByZXR1cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShXZWJDb3JlOjpDcmVk
ZW50aWFsKAorICAgICAgICBTdHJpbmc6OmZyb21VVEY4KHVzZXJuYW1lKSwKKyAgICAgICAgU3Ry
aW5nOjpmcm9tVVRGOChwYXNzd29yZCksCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OkNy
ZWRlbnRpYWxQZXJzaXN0ZW5jZT4ocGVyc2lzdGVuY2UpKSk7Cit9CisKKy8qKgorICogd2Via2l0
X2NyZWRlbnRpYWxfcmVmOgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRpYWwKKyAq
CisgKiBBdG9taWNhbGx5IGluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBAanNfcmVz
dWx0IGJ5IG9uZS4gVGhpcworICogZnVuY3Rpb24gaXMgTVQtc2FmZSBhbmQgbWF5IGJlIGNhbGxl
ZCBmcm9tIGFueSB0aHJlYWQuCisgKgorICogUmV0dXJuczogVGhlIHBhc3NlZCBpbiAjV2ViS2l0
Q3JlZGVudGlhbAorICovCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRfY3JlZGVudGlhbF9yZWYo
V2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX2F0b21pY19pbnRfaW5jKCZj
cmVkZW50aWFsLT5yZWZlcmVuY2VDb3VudCk7CisgICAgcmV0dXJuIGNyZWRlbnRpYWw7Cit9CisK
Ky8qKgorICogd2Via2l0X2NyZWRlbnRpYWxfdW5yZWY6CisgKiBAY3JlZGVudGlhbDogYSAjV2Vi
S2l0Q3JlZGVudGlhbAorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNl
IGNvdW50IG9mIEBjcmVkZW50aWFsIGJ5IG9uZS4gSWYgdGhlCisgKiByZWZlcmVuY2UgY291bnQg
ZHJvcHMgdG8gMCwgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlICNXZWJLaXRDcmVkZW50aWFs
IGlzCisgKiByZWxlYXNlZC4gVGhpcyBmdW5jdGlvbiBpcyBNVC1zYWZlIGFuZCBtYXkgYmUgY2Fs
bGVkIGZyb20gYW55CisgKiB0aHJlYWQuCisgKi8KK3ZvaWQgd2Via2l0X2NyZWRlbnRpYWxfdW5y
ZWYoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBpZiAoZ19hdG9taWNfaW50
X2RlY19hbmRfdGVzdCgmY3JlZGVudGlhbC0+cmVmZXJlbmNlQ291bnQpKSB7CisgICAgICAgIGNy
ZWRlbnRpYWwtPn5XZWJLaXRDcmVkZW50aWFsKCk7CisgICAgICAgIGdfc2xpY2VfZnJlZShXZWJL
aXRDcmVkZW50aWFsLCBjcmVkZW50aWFsKTsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X2Ny
ZWRlbnRpYWxfZ2V0X3VzZXJuYW1lOgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRp
YWwKKyAqCisgKiBHZXQgdGhlIHVzZXJuYW1lIGN1cnJlbnRseSBoZWxkIGJ5IHRoaXMgI1dlYktp
dENyZWRlbnRpYWwKKyAqCisgKiBSZXR1cm5zOiB0aGUgdXNlcm5hbWUKKyAqLworY29uc3QgZ2No
YXIgKiB3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNlcm5hbWUoV2ViS2l0Q3JlZGVudGlhbCogY3Jl
ZGVudGlhbCkKK3sKKyAgICByZXR1cm4gY3JlZGVudGlhbC0+Y29yZS51c2VyKCkudXRmOCgpLmRh
dGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQ6CisgKiBA
Y3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIEdldCB0aGUgcGFzc3dvcmQg
Y3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIFJldHVybnM6
IHRoZSBwYXNzd29yZAorICovCitjb25zdCBnY2hhciAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9w
YXNzd29yZChXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIHJldHVybiBjcmVk
ZW50aWFsLT5jb3JlLnBhc3N3b3JkKCkudXRmOCgpLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2U6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0
Q3JlZGVudGlhbAorICoKKyAqIEdldCB0aGUgcGVyc2lzdGVuY2UgbW9kZSBjdXJyZW50bHkgaGVs
ZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogUmV0dXJuczogdGhlICNXZWJLaXRD
cmVkZW50aWFsUGVyc2lzdGVuY2UKKyAqLworV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHdl
YmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZShXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50
aWFsKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVu
Y2U+KGNyZWRlbnRpYWwtPmNvcmUucGVyc2lzdGVuY2UoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzhjNTcxZDYzZWQwZDI3YmU3ZjhkYWZhYzc3MWE4ZTAzZDBhNDQ5NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaApA
QCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ry
b25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hf
SU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkg
PHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisK
KyNpZm5kZWYgV2ViS2l0Q3JlZGVudGlhbF9oCisjZGVmaW5lIFdlYktpdENyZWRlbnRpYWxfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0NSRURFTlRJQUwg
KHdlYmtpdF9jcmVkZW50aWFsX2dldF90eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRD
cmVkZW50aWFsIFdlYktpdENyZWRlbnRpYWw7CisKK3R5cGVkZWYgZW51bSAgeworICAgIFdlYktp
dENyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUsCisgICAgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3Rl
bmNlRm9yU2Vzc2lvbiwKKyAgICBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2VQZXJtYW5lbnQs
Cit9IFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Vi
a2l0X2NyZWRlbnRpYWxfZ2V0X3R5cGUgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJ
IFdlYktpdENyZWRlbnRpYWwgKgord2Via2l0X2NyZWRlbnRpYWxfbmV3ICAgICAgICAgICAgICAg
ICAgKGNvbnN0IGdjaGFyICp1c2VybmFtZSwgY29uc3QgZ2NoYXIgKnBhc3N3b3JkLCBXZWJLaXRD
cmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UpOworCitXRUJLSVRfQVBJIFdlYktpdENy
ZWRlbnRpYWwgKgord2Via2l0X2NyZWRlbnRpYWxfcmVmICAgICAgICAgICAgICAgICAgKFdlYktp
dENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jcmVk
ZW50aWFsX3VucmVmICAgICAgICAgICAgICAgIChXZWJLaXRDcmVkZW50aWFsICpjcmVkZW50aWFs
KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNl
cm5hbWUgICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9B
UEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkICAgICAgICAg
KFdlYktpdENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIFdlYktpdENyZWRl
bnRpYWxQZXJzaXN0ZW5jZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNpc3RlbmNlICAgICAg
KFdlYktpdENyZWRlbnRpYWwgKmNyZWRlbnRpYWwpOworCitHX0VORF9ERUNMUworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRl
bnRpYWxQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
cmVkZW50aWFsUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZjdmNDRhY2FkZWVmZjIxNzYyODk1ZjQ4
NDY3ZjgyZjY5YjkxYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q3JlZGVudGlhbFByaXZhdGVfaAorI2RlZmluZSBX
ZWJLaXRDcmVkZW50aWFsUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsLmgi
CisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRD
cmVkZW50aWFsQ3JlYXRlKGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsKKworV2ViS2l0OjpX
ZWJDcmVkZW50aWFsKiB3ZWJraXRfY3JlZGVudGlhbF9nZXRfd2ViY3JlZGVudGlhbChXZWJLaXRD
cmVkZW50aWFsKik7CisKKyNlbmRpZiAvLyBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0UHJpdmF0ZV9o
CisKKworCisKKworCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCAyOTQ5NzA5MGRiNjA3ZGJjYTlmMDFhYjlmNDRjOTMy
N2U0ODIxYzFmLi4zMThjMWExMjg3YTc3MTM0NzFhMjhjYjNhNDU3ZGJjNzhhNDNiN2YwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIK
ICNpbmNsdWRlICJXZWJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFs
b2cuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViS2l0QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktp
dENvbnRleHRNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJp
dmF0ZS5oIgpAQCAtODksNiArOTAsNyBAQCBlbnVtIHsKICAgICBMT0FEX0NIQU5HRUQsCiAgICAg
TE9BRF9GQUlMRUQsCiAKKyAgICBBVVRIRU5USUNBVEUsCiAgICAgQ1JFQVRFLAogICAgIFJFQURZ
X1RPX1NIT1csCiAgICAgUlVOX0FTX01PREFMLApAQCAtNDI5LDYgKzQzMSwxOCBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRXZWJWaWV3RGlzY29ubmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJz
KFdlYktpdFdlYlZpZXcqCiAgICAgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSAwOwog
fQogCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7Cisg
ICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZTsKKyAgICBpZiAo
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbChyZXF1ZXN0
KSkKKyAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gQWxsb3dQZXJzaXN0ZW50U3RvcmFn
ZTsKKyAgICBlbHNlCisgICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IERpc2FsbG93UGVy
c2lzdGVudFN0b3JhZ2U7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRp
YWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dOZXcocmVxdWVzdCwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisKKyAgICByZXR1cm4g
VFJVRTsKK30KKwogc3RhdGljIHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNhbGxiYWNr
KEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdCogcmVxdWVzdCkKIHsKICAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVxdWVzdD4g
YWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdSZWYocmVxdWVzdCk7CkBAIC01OTksNiArNjEzLDcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNz
KiB3ZWJWaWV3Q2xhc3MpCiAgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRX
ZWJWaWV3R2V0UHJvcGVydHk7CiAgICAgZ09iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0V2Vi
Vmlld0Rpc3Bvc2U7CiAKKyAgICB3ZWJWaWV3Q2xhc3MtPmF1dGhlbnRpY2F0ZSA9IHdlYmtpdFdl
YlZpZXdBdXRoZW50aWNhdGU7CiAgICAgd2ViVmlld0NsYXNzLT5sb2FkX2ZhaWxlZCA9IHdlYmtp
dFdlYlZpZXdMb2FkRmFpbDsKICAgICB3ZWJWaWV3Q2xhc3MtPmNyZWF0ZSA9IHdlYmtpdFdlYlZp
ZXdDcmVhdGU7CiAgICAgd2ViVmlld0NsYXNzLT5zY3JpcHRfZGlhbG9nID0gd2Via2l0V2ViVmll
d1NjcmlwdERpYWxvZzsKQEAgLTgzMiw2ICs4NDcsMzkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7CiAKICAgICAvKioKKyAgICAqIFdlYktp
dFdlYlZpZXc6OmF1dGhlbnRpY2F0ZToKKyAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJW
aWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICogQHJlcXVlc3Q6IGEgI1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICAgICoKKyAgICAqIFRoaXMgc2lnbmFsIGlzIGVt
aXR0ZWQgd2hlbiB0aGUgdXNlciBpcyBjaGFsbGVuZ2VkIHdpdGggSFRUUAorICAgICogYXV0aGVu
dGljYXRpb24uIFRvIGxldCB0aGUgIGFwcGxpY2F0aW9uIGFjY2VzcyBvciBzdXBwbHkKKyAgICAq
IHRoZSBjcmVkZW50aWFscyBhcyB3ZWxsIGFzIHRvIGFsbG93IHRoZSBjbGllbnQgYXBwbGljYXRp
b24KKyAgICAqIHRvIGVpdGhlciBjYW5jZWwgdGhlIHJlcXVlc3Qgb3IgcGVyZm9ybSB0aGUgYXV0
aGVudGljYXRpb24sCisgICAgKiB0aGUgc2lnbmFsIHdpbGwgcGFzcyBhbiBpbnN0YW5jZSBvZiB0
aGUKKyAgICAqICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0IGFy
Z3VtZW50LgorICAgICogVG8gaGFuZGxlIHRoaXMgc2lnbmFsIGFzeW5jaHJvbm91c2x5IHlvdSBz
aG91bGQga2VlcCBhIHJlZgorICAgICogIG9mIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gVFJVRS4K
KyAgICAqCisgICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxsIHJ1biBhIGRlZmF1
bHQgYXV0aGVudGljYXRpb24KKyAgICAqIGRpYWxvZyBhc3luY2hyb25vdXNseSBmb3IgdGhlIHVz
ZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAgICAqCisgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9w
IG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICog
ICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICoKKyAgICAqIFNp
bmNlOiAyLjIKKyAgICAqCisgICAgKi8KKyAgICBzaWduYWxzW0FVVEhFTlRJQ0FURV0gPQorICAg
ICAgICBnX3NpZ25hbF9uZXcoImF1dGhlbnRpY2F0ZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisg
ICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBhdXRoZW50aWNh
dGUpLAorICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8q
IGFjY3VtdWxhdG9yIGRhdGEgKi8sCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFO
X19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyogbnVtYmVyIG9mIHBh
cmFtZXRlcnMgKi8KKyAgICAgICAgICAgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVF
U1QpOworCisgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6Y3JlYXRlOgogICAgICAqIEB3
ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAogICAgICAqCkBAIC0xNzM4LDEzICsxNzg2LDEwIEBAIHZvaWQgd2Via2l0V2ViVmlld1N1Ym1p
dEZvcm1SZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZvcm1TdWJtaXNzaW9u
CiAKIHZvaWQgd2Via2l0V2ViVmlld0hhbmRsZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKQogewotICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFs
U3RvcmFnZU1vZGU7Ci0gICAgaWYgKHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVf
YnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSkpCi0gICAgICAg
IGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAg
ZWxzZQotICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBBbGxvd1BlcnNpc3RlbnRTdG9y
YWdlOwotCi0gICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXco
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSkpOworICAgIGdi
b29sZWFuIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJs
ZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykp
OworICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiByZXF1ZXN0ID0gYWRv
cHRHUmVmKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkpOworICAgIGdib29sZWFuIHJldHVyblZh
bHVlOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tBVVRIRU5USUNBVEVdLCAw
LCByZXF1ZXN0LmdldCgpLCAmcmV0dXJuVmFsdWUpOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdJ
bnNlY3VyZUNvbnRlbnREZXRlY3RlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRJbnNl
Y3VyZUNvbnRlbnRFdmVudCB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGIyM2Q3ZmZiMTNhMDhmMDk1NGVjYTM1NGNlODZl
YzU3MDczY2ExZDcuLmE3MzJlOWNkNTQ5NmU1MDQzNTk5MDY5MzZhYTliMzdjYzcwZGQ0NzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QuaD4KQEAgLTI0Miw3ICsyNDMsOCBAQCBzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQgICBldmVudCk7CiAgICAgZ2Jv
b2xlYW4gICAoKiB3ZWJfcHJvY2Vzc19jcmFzaGVkKSAgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICAgICAgICp3ZWJfdmlldyk7CiAKLSAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2
b2lkKTsKKyAgICBnYm9vbGVhbiAgICgqIGF1dGhlbnRpY2F0ZSkgICAgICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVx
dWVzdCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CiAgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQz
KSAodm9pZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKaW5kZXggODhkNzdmMjg2MGUwNjBhNTA2
YWI5YmI1YzgyZmEyOGFmYTY2YjE3YS4uNWYwMWIwMjdmYWU3ZDg5NzMyNTk1YjgwZDJiMTg1NTE4
NjM2Zjg2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApAQCAtNzkzLDYgKzc5Myw0NCBAQCBz
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2Nh
bmNlbChmaWxlQ2hvb3NlclJlcXVlc3QpOwogfQogCitjbGFzcyBBdXRoZW50aWNhdGlvblRlc3Q6
IHB1YmxpYyBVSUNsaWVudFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRV
UkUoQXV0aGVudGljYXRpb25UZXN0KTsKKworICAgIEF1dGhlbnRpY2F0aW9uVGVzdCgpCisgICAg
eworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgImF1dGhlbnRpY2F0aW9uIiwg
R19DQUxMQkFDSyhydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisg
ICAgc3RhdGljIGdib29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2soV2ViS2l0V2ViVmll
dyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgQXV0aGVudGljYXRpb25U
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+cnVuQXV0aGVudGljYXRpb24ocmVxdWVz
dCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZvaWQgcnVuQXV0aGVudGlj
YXRpb24oV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0
KSk7CisgICAgICAgIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAg
Z19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QqIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yQXV0aGVudGljYXRpb25S
ZXF1ZXN0KGludCB4LCBpbnQgeSkKKyAgICB7CisgICAgICAgIGNsaWNrTW91c2VCdXR0b24oeCwg
eSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJu
IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBH
UmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50aWNhdGlvblJlcXVl
c3Q7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdChB
dXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gRklYTUU6
IHRlc3QgdGhlIGF1dGhlbnRpY2F0aW9uIEFQSQorfQorCiBjbGFzcyBGdWxsU2NyZWVuQ2xpZW50
VGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKIHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9G
SVhUVVJFKEZ1bGxTY3JlZW5DbGllbnRUZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaAppbmRleCBkMTg0MzE1MjgxYTgzNjNiODEwNTc4YzM4OGYxZTM2ZWEz
Y2FiMmIyLi43MGUzYjQzMzA1OTNlZjZkMGZkNzg4YmEyZTkzMzFmNDIwZjg5Nzg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yMywxMiArMjMsMTQg
QEAKIAogI2RlZmluZSBfX1dFQktJVDJfSF9JTlNJREVfXwogCisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnUuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0Q29udGV4dE1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVN
YW5hZ2VyLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDcmVkZW50aWFsLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3du
bG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207532</attachid>
            <date>2013-07-26 09:17:55 -0700</date>
            <delta_ts>2013-07-30 03:00:42 -0700</delta_ts>
            <desc>Patch + docs</desc>
            <filename>bug-99352-20130726171816.patch</filename>
            <type>text/plain</type>
            <size>49972</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDBjMTVhMDA5NzkzMThh
YzQxMGM0ODE0ZWU5YTRiMDYyYTgyODIwNi4uODk5NzYxOWYyZjNmNTYyNTA3MzUyZDYyNzkwZjNm
N2U0Yzc4YjYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDEzLTA3LTI2ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRl
IHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIHRo
ZWlyIG93biBhdXRoZW50aWNhdGlvbgorICAgICAgICB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5n
ZWQgd2l0aCBIVFRQIGF1dGhlbnRpY2F0aW9uLiBUaGUKKyAgICAgICAgY3JlZGVudGlhbCBpcyBl
eHBvc2VkIHRocm91Z2ggYSBuZXcgY2xhc3MgV2ViS2l0Q3JlZGVudGlhbC4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dBdXRoZW50aWNhdGUpOgorICAgICAgICAob2tCdXR0b25DbGlja2VkKToKKyAgICAgICAg
KHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2FuY2VsKToKKyAgICAgICAgKGNhbmNlbEJ1dHRv
bkNsaWNrZWQpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXpl
KToKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZSk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAgICAgICh3ZWJraXRBdXRoZW50
aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICh3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbCk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdCk6CisgICAg
ICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydCk6CisgICAgICAgICh3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0pOgorICAgICAgICAod2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZSk6CisgICAgICAgICh3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUpOgorICAgICAgICAod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmNwcDogQWRkZWQuCisg
ICAgICAgIChfV2ViS2l0Q3JlZGVudGlhbDo6X1dlYktpdENyZWRlbnRpYWwpOgorICAgICAgICAo
d2Via2l0Q3JlZGVudGlhbENyZWF0ZSk6CisgICAgICAgICh3ZWJraXRDcmVkZW50aWFsR2V0Q3Jl
ZGVudGlhbCk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9jb3B5KToKKyAgICAgICAgKHdl
YmtpdF9jcmVkZW50aWFsX2ZyZWUpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfbmV3KToK
KyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFtZSk6CisgICAgICAgICh3ZWJr
aXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxf
aGFzX3Bhc3N3b3JkKToKKyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5j
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoK
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdBdXRoZW50aWNhdGUpOgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0hhbmRsZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Mu
c2dtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
czoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5j
cHA6CisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgorCiAyMDEzLTA3LTE3ICBEb25nLUd3YW4g
S2ltICA8ZG9uZ2d3YW4ua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gRVdL
MkNvb2tpZU1hbmFnZXJUZXN0IHNob3VsZCBiZSBkZWZpbmVkIGJ5IGluaGVyaXRpbmcgZnJvbSBF
V0syVW5pdFRlc3RCYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYjE1MDE3
ZmViOGNkMGM1Zjg4NGE1OGQ5NTkzNTk3YmRhNmEyNzYyZS4uYjQ4NmM2YmJmMmJhNGNkZjRkNDNl
ZTllN2E1YzBjYjRmZDRhOTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02
NTMsNiArNjUzLDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCkBA
IC02NzIsNiArNjc1LDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmNwcCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKaW5kZXggMDY5OWRhN2VlZDMxYzU1NDVjZTkwNzM3YWMy
YTAzYzI1MTAwY2M3NS4uNTQ4MDhhOTkyNDJmMTQ1YmQzYWFmMmZkNDdlMTNmMDYyMTEyMjA3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMjAsMTUgKzIwLDE5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIK
IAorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJDcmVkZW50aWFs
LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCisjaW5jbHVkZSAi
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENy
ZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogc3RydWN0
IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUgewotICAgIFJlZlB0cjxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLQorICAgIEdS
ZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiByZXF1ZXN0OwogICAgIEd0a1dpZGdl
dCogYXV0aFdpZGdldDsKICAgICBHdGtXaWRnZXQqIGRlZmF1bHRCdXR0b247CiAgICAgR1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dDsKQEAgLTM2LDIzICs0MCwyOSBAQCBzdHJ1
Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSB7CiAKIFdFQktJVF9ERUZJTkVf
VFlQRShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZywgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2Rp
YWxvZywgR1RLX1RZUEVfRVZFTlRfQk9YKQogCi1zdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERp
YWxvZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3N0YXRpYyB2b2lkIHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBh
dXRoRGlhbG9nKQogewogICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJp
diA9IGF1dGhEaWFsb2ctPnByaXY7Ci0gICAgcHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2Ut
Pmxpc3RlbmVyKCktPnVzZUNyZWRlbnRpYWwoY3JlZGVudGlhbCk7CisgICAgV2ViS2l0Q3JlZGVu
dGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdENyZWRlbnRpYWxDcmVhdGUod2Via2l0QXV0aGVudGlj
YXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVQo
cHJpdi0+YXV0aFdpZGdldCkpKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9h
dXRoZW50aWNhdGUocHJpdi0+cmVxdWVzdC5nZXQoKSwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0
X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RL
X1dJREdFVChhdXRoRGlhbG9nKSk7CiB9CiAKIHN0YXRpYyB2b2lkIG9rQnV0dG9uQ2xpY2tlZChH
dGtCdXR0b24qLCBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKIHsKLSAg
ICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBhdXRoRGlhbG9nLT5w
cml2OwotICAgIFJlZlB0cjxXZWJDcmVkZW50aWFsPiB3ZWJDcmVkZW50aWFsID0gV2ViQ3JlZGVu
dGlhbDo6Y3JlYXRlKHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q3JlYXRlQ3JlZGVudGlhbChX
RUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUKHByaXYtPmF1dGhXaWRnZXQpKSk7Ci0gICAgd2Vi
a2l0QXV0aGVudGljYXRpb25EaWFsb2dBdXRoZW50aWNhdGUoYXV0aERpYWxvZywgd2ViQ3JlZGVu
dGlhbC5nZXQoKSk7CisgICAgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dBdXRoZW50aWNhdGUo
YXV0aERpYWxvZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
Q2FuY2VsKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQoreworICAgIHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChhdXRoRGlhbG9nLT5wcml2LT5yZXF1
ZXN0LmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgY2FuY2VsQnV0dG9uQ2xpY2tlZChHdGtCdXR0
b24qLCBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKIHsKLSAgICB3ZWJr
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCAwKTsKKyAgICB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NhbmNlbChhdXRoRGlhbG9nKTsKKyAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3koR1RLX1dJREdFVChhdXRoRGlhbG9nKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdl
YmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZyogYXV0aERpYWxvZywgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdl
TW9kZSkKQEAgLTgwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dJbml0aWFsaXplKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXQKICAgICBndGtf
Ym94X3BhY2tfZW5kKEdUS19CT1goYnV0dG9uQm94KSwgYnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7
CiAgICAgZ3RrX3dpZGdldF9zaG93KGJ1dHRvbik7CiAKLSAgICBhdXRoRGlhbG9nLT5wcml2LT5h
dXRoV2lkZ2V0ID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcoYXV0aERpYWxvZy0+cHJp
di0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmNvcmUoKSwgY3JlZGVudGlhbFN0b3JhZ2VNb2Rl
KTsKKyAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0ID0gd2Via2l0QXV0aGVudGljYXRp
b25XaWRnZXROZXcod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoYXV0aERpYWxvZy0+cHJpdi0+cmVxdWVzdC5nZXQoKSktPmNvcmUoKSwgY3JlZGVu
dGlhbFN0b3JhZ2VNb2RlKTsKICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Qm94KSwg
YXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCwgVFJVRSwgVFJVRSwgMCk7CiAgICAgZ3RrX3dp
ZGdldF9zaG93KGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQpOwogCkBAIC0xMzgsMTAgKzE0
OCwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX2NsYXNzX2lu
aXQoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbAogICAgIHdpZGdldENsYXNzLT5tYXAgPSB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ01hcDsKIH0KIAotR3RrV2lkZ2V0KiB3ZWJraXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ05ldyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCitHdGtXaWRnZXQq
IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCiB7CiAgICAgV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElB
TE9HKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0csIE5VTEwp
KTsKLSAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGF1dGhEaWFsb2ctPnByaXYtPnJlcXVlc3QgPSByZXF1
ZXN0OwogICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShhdXRoRGlhbG9n
LCBtb2RlKTsKICAgICByZXR1cm4gR1RLX1dJREdFVChhdXRoRGlhbG9nKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50
aWNhdGlvbkRpYWxvZy5oCmluZGV4IDdkNGRlMmE2ZDNkODE5Y2IxYzY4NzMwM2RiYzE1YTBjN2Qx
M2VlNDIuLjQwYTIyZTAxYzNkOWI0OTJlMDA0ZTIwZTYxZDg0N2Q5YzkyOWRlZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cuaApAQCAtMjAsOCArMjAsOSBAQAogI2lmbmRlZiBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ19oCiAjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nX2gK
IAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldC5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIKICNpbmNsdWRlIDxn
dGsvZ3RrLmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTQ4LDcgKzQ5LDcgQEAgc3RydWN0IF9XZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKIH07CiAKIEdUeXBlIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsKLUd0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRp
b25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiwgQ3JlZGVu
dGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dO
ZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsK
IAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjNjNzUxNWEyMjE5YmFhNjc1Y2RhMTFkZDk2Mzg4OWE1MjNlMjM3NwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKKwor
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIgorI2luY2x1ZGUgIldl
YkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJQcm90ZWN0aW9uU3BhY2UuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdAorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBSZXByZXNlbnRzIGFuIGF1dGhlbnRp
Y2F0aW9uIHJlcXVlc3QKKyAqIEBUaXRsZTogV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Cisg
KiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3CisgKgorICogV2hlbmV2ZXIgdGhlIHVzZXIgYXR0
ZW1wdHMgdG8gbG9hZCBhIHBhZ2UgcHJvdGVjdGVkIGJ5IEhUVFAKKyAqIGF1dGhlbnRpY2F0aW9u
LCB0aGUgdXNlciB3aWxsIG5lZWQgdG8gcHJvdmlkZSB0aGVpciBjcmVkZW50aWFscy4KKyAqIFRo
aXMgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCBvYmplY3QgZW5jYXBzdWxhdGVzIHRoZQor
ICogYXV0aGVudGljYXRpb24gZGV0YWlscyBhbmQgaXMgZW1pdHRlZCB3aXRoIHRoZQorICogI1dl
YktpdFdlYlZpZXc6OmF1dGhlbnRpY2F0ZSBzaWduYWwgdG8gYWxsb3cgY2xpZW50IGFwcGxpY2F0
aW9ucyB0bworICogZGVmaW5lIGhvdyBjcmVkZW50aWFscyBzaG91bGQgYmUgYWRtaW5pc3RlcmVk
LgorICoKKyAqIEluIGNhc2UgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRv
IGhhbmRsZSB0aGlzIHNpZ25hbCwKKyAqIFdlYktpdCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhh
bmRsZXIuCisgKi8KKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRl
IHsKKyAgICBSZWZQdHI8QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eT4gYXV0aGVudGljYXRp
b25DaGFsbGVuZ2U7CisgICAgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkOworICAgIGJvb2wg
aGFuZGxlZFJlcXVlc3Q7CisgICAgQ1N0cmluZyBob3N0OworICAgIENTdHJpbmcgcmVhbG07Cit9
OworCitXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQg
d2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBp
cyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnBy
aXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xh
c3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmpl
Y3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdERpc3Bvc2U7Cit9
CisKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlLCBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCit7CisgICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qo
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsIE5VTEwpKTsK
KyAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOworICAgIHJlcXVlc3QtPnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQg
PSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVl
c3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9z
YXZlX2NyZWRlbnRpYWxzOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2Qg
YXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAqICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgc2hv
dWxkIGFsbG93IHRoZSBzdG9yYWdlIG9mIGNyZWRlbnRpYWxzLgorICoKKyAqIFJldHVybnM6ICVU
UlVFIGlmIHRoZSBjbGllbnQgc2hvdWxkIGFsbG93IHN0b3JhZ2Ugb2YgY3JlZGVudGlhbHMgb3Ig
JUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2dib29sZWFuIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgRkFMU0UpOworCisjaWYg
RU5BQkxFKENSRURFTlRJQUxfU1RPUkFHRSkKKyAgICByZXR1cm4gIXJlcXVlc3QtPnByaXYtPnBy
aXZhdGVCcm93c2luZ0VuYWJsZWQ7CisjZWxzZQorICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgor
fQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9j
cmVkZW50aWFsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAor
ICoKKyAqIEdldCB0aGUgI1dlYktpdENyZWRlbnRpYWwgb2YgdGhlIHByb3Bvc2VkIGF1dGhlbnRp
Y2F0aW9uIGNoYWxsZW5nZS4gVGhlIGNsaWVudCBjYW4gdXNlIHRoaXMKKyAqIGRpcmVjdGx5IGZv
ciBhdXRoZW50aWNhdGlvbiBvciBjb25zdHJ1Y3QgdGhlaXIgb3duICNXZWJLaXRDcmVkZW50aWFs
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTphICNXZWJLaXRDcmVkZW50aWFsIGVu
Y2Fwc3VsYXRpbmcgY3JlZGVudGlhbCBkZXRhaWxzLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwor
V2ViS2l0Q3JlZGVudGlhbCogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bv
c2VkX2NyZWRlbnRpYWwoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNU
KHJlcXVlc3QpLCAwKTsKKyAgICBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFs
ID0gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3Bvc2VkQ3JlZGVu
dGlhbCgpLT5jb3JlKCk7CisgICAgaWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKGNyZWRlbnRpYWwp
OworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0Ogor
ICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0
aGUgaG9zdCB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGlzIGFwcGxpY2FibGUg
dG8uCisgKgorICogUmV0dXJuczogVGhlIGhvc3QgdGhhdCB0aGlzIGF1dGhlbnRpY2F0aW9uIGNo
YWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworY29uc3Qg
Z2NoYXIqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICByZXF1
ZXN0LT5wcml2LT5ob3N0ID0gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2Ut
PnByb3RlY3Rpb25TcGFjZSgpLT5ob3N0KCkudXRmOCgpLmRhdGEoKTsKKyAgICByZXR1cm4gcmVx
dWVzdC0+cHJpdi0+aG9zdC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfZ2V0X3BvcnQ6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0CisgKgorICogR2V0IHRoZSBwb3J0IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBj
aGFsbGVuZ2UgaXMgYXBwbGljYWJsZSB0by4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcG9ydCB0aGF0
IHRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGlzIGFwcGxpY2FibGUgdG8uCisgKgorICog
U2luY2U6IDIuMgorICovCitnaW50IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9w
b3J0KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwg
MCk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2Ut
PnByb3RlY3Rpb25TcGFjZSgpLT5wb3J0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgcmVhbG0gdGhhdCB0aGlzIGF1dGhlbnRpY2F0
aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAqIFJldHVybnM6IFRoZSByZWFs
bSB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGlzIGFwcGxpY2FibGUgdG8uCisg
KgorICogU2luY2U6IDIuMgorICovCitjb25zdCBnY2hhciogd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfZ2V0X3JlYWxtKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVR
VUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICByZXF1ZXN0LT5wcml2LT5yZWFsbSA9IHJlcXVlc3Qt
PnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm90ZWN0aW9uU3BhY2UoKS0+cmVhbG0o
KS51dGY4KCkuZGF0YSgpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5yZWFsbS5kYXRhKCk7
Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZToK
KyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQg
dGhlIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdl
LgorICoKKyAqIFJldHVybnM6IFRoZSBhdXRoZW50aWNhdGlvbiBzY2hlbWUgdGhlIGF1dGhlbnRp
Y2F0aW9uIGNoYWxsZW5nZS4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK1dlYktpdEF1dGhlbnRp
Y2F0aW9uU2NoZW1lIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUoV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCBXRUJLSVRf
QVVUSEVOVElDQVRJT05fU0NIRU1FX1VOS05PV04pOworCisgICAgV2ViS2l0QXV0aGVudGljYXRp
b25TY2hlbWUgc2NoZW1lOworICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
IG9sZFNjaGVtZSA9IHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm90
ZWN0aW9uU3BhY2UoKS0+YXV0aGVudGljYXRpb25TY2hlbWUoKTsKKyAgICBzd2l0Y2ggKG9sZFNj
aGVtZSkgeworICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZh
dWx0OgorICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFz
aWM6CisgICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdl
c3Q6CisgICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUTUxGb3Jt
OgorICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOgorICAg
IGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOZWdvdGlhdGU6CisgICAg
Y2FzZSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUNsaWVudENlcnRpZmljYXRl
UmVxdWVzdGVkOgorICAgIGNhc2UgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQ6CisgICAgICAgIHNjaGVtZSA9IHN0YXRpY19j
YXN0PFdlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lPihvbGRTY2hlbWUpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHNjaGVtZSA9IFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfVU5LTk9XTjsK
KyAgICB9CisKKyAgICByZXR1cm4gc2NoZW1lOworfQorCisKKy8qKgorICogd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQGNyZWRlbnRpYWw6ICh0cmFuc2ZlciBub25lKTphICNX
ZWJLaXRDcmVkZW50aWFsCisgKgorICogQXV0aGVudGljYXRlIHRoZSAjV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0IHVzaW5nIHRoZSAjV2ViS2l0Q3JlZGVudGlhbAorICogc3VwcGxpZWQuCisg
KgorICogU2luY2U6IDIuMgorICovCit2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIFdlYktp
dENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisgICAgUmVmUHRyPFdlYkNyZWRl
bnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50aWFsOjpjcmVhdGUod2Via2l0Q3JlZGVu
dGlhbEdldENyZWRlbnRpYWwoY3JlZGVudGlhbCkpOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51c2VDcmVkZW50aWFsKHdlYkNyZWRlbnRp
YWwuZ2V0KCkpOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30K
KworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWw6CisgKiBAcmVx
dWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogQ2FuY2VsIHRoZSBy
ZXF1ZXN0LiBJdCdzIGltcG9ydGFudCB0byBkbyB0aGlzIGluIGNhc2UKKyAqIG5vIGF1dGhlbnRp
Y2F0aW9uIGhhcyBiZWVuIG1hZGUgaW4gdGhlIGNsaWVudCwgb3RoZXJ3aXNlIHRoZSByZXF1ZXN0
CisgKiB3b24ndCBiZSBwcm9wZXJseSBjb21wbGV0ZWQgYW5kIHRoZSByZXF1ZXN0IHdpbGwgcmVt
YWluIHBlbmRpbmcgZm9yZXZlciwKKyAqIHdoaWNoIG1pZ2h0IGNhdXNlIHRoZSBhcHBsaWNhdGlv
biB0byBoYW5nLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwordm9pZCB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9jYW5jZWwoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVF
U1QocmVxdWVzdCkpOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LT5saXN0ZW5lcigpLT51c2VDcmVkZW50aWFsKDApOworICAgIHJlcXVlc3QtPnByaXYtPmhhbmRs
ZWRSZXF1ZXN0ID0gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjFjNmZiNzQ2ODkxYjcwZDdlOGUxYzkzNDRkNWU5ZTdkNmFjMTZhMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmlu
ZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04p
CisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0X2gKKyNk
ZWZpbmUgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENyZWRlbnRpYWwuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KSkK
KyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJ
T05fUkVRVUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBX
RUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNU
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3Mp
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElD
QVRJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9U
WVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAgICAg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xh
c3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSBX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlICpwcml2OworfTsK
Kworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcyB7CisgICAgR09iamVj
dENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZv
aWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykg
KHZvaWQpOworfTsKKworLyoqCisgKiBXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZToKKyAqIEBX
RUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0RFRkFVTFQ6CisgKiBAV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDOiBCYXNpYyBhdXRoZW50aWNhdGlvbiBzY2hlbWUgYXMg
ZGVmaW5lZCBpbiBSRkMgMjYxNy4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hU
VFBfRElHRVNUOiBEaWdlc3QgYXV0aGVudGljYXRpb24gc2NoZW1lIGFzIGRlZmluZWQgaW4gUkZD
IDI2MTcuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVE1MX0ZPUk06CisgKiBA
V0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9OVExNOiBOVExNIE1pY3Jvc29mdCBwcm9wcmll
dGFyeSBhdXRoZW50aWNhdGlvbiBzY2hlbWUuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1ND
SEVNRV9ORUdPVElBVEU6IE5lZ290aWF0ZSAob3IgU1BORUdPKSBhdXRoZW50aWNhdGlvbiBzY2hl
bWUgaXMgc3BlY2lmaWVkIGluIFJGQyA0NTU5LgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9T
Q0hFTUVfQ0xJRU5UX0NFUlRJRklDQVRFX1JFUVVFU1RFRDoKKyAqIEBXRUJLSVRfQVVUSEVOVElD
QVRJT05fU0NIRU1FX1NFUlZFUl9UUlVTVF9FVkFMVUFUSU9OX1JFUVVFU1RFRDoKKyAqIEBXRUJL
SVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX1VOS05PV046CisKKyAqIEVudW0gdmFsdWVzIHJlcHJl
c2VudGluZyB0aGUgYXV0aGVudGljYXRpb24gc2NoZW1lLgorICovCit0eXBlZGVmIGVudW0gewor
ICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfREVGQVVMVCwKKyAgICBXRUJLSVRfQVVU
SEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUMsCisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X1NDSEVNRV9IVFRQX0RJR0VTVCwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hU
TUxfRk9STSwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05UTE0sCisgICAgV0VC
S0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9ORUdPVElBVEUsCisgICAgV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1NDSEVNRV9DTElFTlRfQ0VSVElGSUNBVEVfUkVRVUVTVEVELAorICAgIFdFQktJVF9B
VVRIRU5USUNBVElPTl9TQ0hFTUVfU0VSVkVSX1RSVVNUX0VWQUxVQVRJT05fUkVRVUVTVEVELAor
ICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfVU5LTk9XTiwKK30gV2ViS2l0QXV0aGVu
dGljYXRpb25TY2hlbWU7CisKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVu
dGlhbHMgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJL
SVRfQVBJIFdlYktpdENyZWRlbnRpYWwgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Z2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJl
cXVlc3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9ob3N0ICAgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfcG9ydCAgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtICAgICAgICAgICAgICAgIChXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEF1dGhlbnRp
Y2F0aW9uU2NoZW1lCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lICAg
ICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRl
ICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dENyZWRlbnRpYWwgICAgICAgICAgICAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kNjkxM2ZiZGEyMDBmMDk1NWRlYTZiYjBkMWEwMmY2NjI2ZTM3MTA0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGVfaAorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5o
IgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUoV2ViS2l0OjpBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZVByb3h5KiwgYm9vbCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKTsKK1dlYktp
dDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogd2Via2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0R2V0QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
Kik7CisKKyNlbmRpZiAvLyBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRp
YWwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlh
bC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNDliNTRkNDBjZTBmZmRiMmZhMTM1NGFjYzMwMzk0NzhkODk3N2I2
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdENyZWRlbnRpYWwuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlhbC5oIgorCisjaW5jbHVk
ZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWxQcml2YXRlLmgi
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdENyZWRlbnRpYWwKKyAqIEBTaG9ydF9kZXNjcmlw
dGlvbjogQW4gb2JqZWN0IHRvIGVuY2Fwc3VsYXRlIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxz
CisgKiBAVGl0bGU6IFdlYktpdENyZWRlbnRpYWwKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZp
ZXcKKyAqCisgKiBXaGVuZXZlciB0aGUgdXNlciBhdHRlbXB0cyB0byBsb2FkIGEgcGFnZSBwcm90
ZWN0ZWQgYnkgSFRUUAorICogYXV0aGVudGljYXRpb24sIHRoZSB1c2VyIHdpbGwgbmVlZCB0byBw
cm92aWRlIHRoZWlyIGNyZWRlbnRpYWxzLgorICogVGhpcyAjV2ViS2l0Q3JlZGVudGlhbCBvYmpl
Y3QgZW5jYXBzdWxhdGVzIHRoZQorICogY3JlZGVudGlhbCB0byBiZSB1c2VkIHdpdGggYSAjV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LgorICovCisKK3N0cnVjdCBfV2ViS2l0Q3JlZGVudGlh
bCB7CisgICAgX1dlYktpdENyZWRlbnRpYWwoY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY29y
ZSkKKyAgICAgICAgOiBjcmVkZW50aWFsKGNvcmUpCisgICAgeworICAgIH0KKworICAgIFdlYkNv
cmU6OkNyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICBDU3RyaW5nIHVzZXJuYW1lOworICAgIENT
dHJpbmcgcGFzc3dvcmQ7Cit9OworCitHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdENyZWRlbnRp
YWwsIHdlYmtpdF9jcmVkZW50aWFsLCB3ZWJraXRfY3JlZGVudGlhbF9jb3B5LCB3ZWJraXRfY3Jl
ZGVudGlhbF9mcmVlKQorCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRDcmVkZW50aWFsQ3JlYXRl
KGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwpCit7CisgICAgV2ViS2l0Q3Jl
ZGVudGlhbCogd2ViS2l0Q3JlZGVudGlhbCA9IGdfc2xpY2VfbmV3KFdlYktpdENyZWRlbnRpYWwp
OworICAgIG5ldyAod2ViS2l0Q3JlZGVudGlhbCkgV2ViS2l0Q3JlZGVudGlhbChjcmVkZW50aWFs
KTsKKyAgICByZXR1cm4gd2ViS2l0Q3JlZGVudGlhbDsKK30KKworY29uc3QgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCYgd2Via2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwoV2ViS2l0Q3JlZGVudGlhbCog
Y3JlZGVudGlhbCkKK3sKKyAgICBnX2Fzc2VydChjcmVkZW50aWFsKTsKKyAgICByZXR1cm4gY3Jl
ZGVudGlhbC0+Y3JlZGVudGlhbDsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9jb3B5
OgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBNYWtlIGEgY29w
eSBvZiB0aGUgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1
bGwpOiBBIGNvcHkgb2YgcGFzc2VkIGluICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogU2luY2Ug
Mi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9jcmVkZW50aWFsX2NvcHkoV2ViS2l0
Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjb3B5ID0g
Z19zbGljZV9uZXcoV2ViS2l0Q3JlZGVudGlhbCk7CisgICAgbmV3IChjb3B5KSBXZWJLaXRDcmVk
ZW50aWFsKCpjcmVkZW50aWFsKTsKKyAgICByZXR1cm4gY29weTsKK30KKworLyoqCisgKiB3ZWJr
aXRfY3JlZGVudGlhbF9mcmVlOgorICogQGNyZWRlbnRpYWw6ICh0cmFuc2ZlciBmdWxsKTphICNX
ZWJLaXRDcmVkZW50aWFsCisgKgorICogRnJlZSB0aGUgI1dlYktpdENyZWRlbnRpYWwuCisgKgor
ICogU2luY2U6IDIuMgorICovCit2b2lkIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoV2ViS2l0Q3Jl
ZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBkZWxldGUgY3JlZGVudGlhbDsKK30KKworLyoq
CisgKiB3ZWJraXRfY3JlZGVudGlhbF9uZXc6CisgKiBAdXNlcm5hbWU6IFRoZSB1c2VybmFtZSBm
b3IgdGhlIG5ldyBjcmVkZW50aWFsCisgKiBAcGFzc3dvcmQ6IFRoZSBwYXNzd29yZCBmb3IgdGhl
IG5ldyBjcmVkZW50aWFsCisgKiBAcGVyc2lzdGVuY2U6IFRoZSBwZXJzaXN0ZW5jZSBvZiB0aGUg
bmV3IGNyZWRlbnRpYWwKKyAqCisgKgorICogQ3JlYXRlIGEgbmV3IGNyZWRlbnRpYWwgZnJvbSB0
aGUgcHJvdmlkZWQgdXNlcm5hbWUsIHBhc3N3b3JkIGFuZCBwZXJzaXN0ZW5jZSBtb2RlLgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTpBICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAq
IFNpbmNlOiAyLjIKKyAqLworV2ViS2l0Q3JlZGVudGlhbCogd2Via2l0X2NyZWRlbnRpYWxfbmV3
KGNvbnN0IGdjaGFyKiB1c2VybmFtZSwgY29uc3QgZ2NoYXIqIHBhc3N3b3JkLCBXZWJLaXRDcmVk
ZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UpCit7CisgICAgcmV0dXJuIHdlYmtpdENyZWRl
bnRpYWxDcmVhdGUoV2ViQ29yZTo6Q3JlZGVudGlhbCgKKyAgICAgICAgU3RyaW5nOjpmcm9tVVRG
OCh1c2VybmFtZSksCisgICAgICAgIFN0cmluZzo6ZnJvbVVURjgocGFzc3dvcmQpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDcmVkZW50aWFsUGVyc2lzdGVuY2U+KHBlcnNpc3RlbmNl
KSkpOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFtZToKKyAqIEBj
cmVkZW50aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogR2V0IHRoZSB1c2VybmFtZSBj
dXJyZW50bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFJldHVybnM6
IFRoZSB1c2VybmFtZSBzdG9yZWQgaW4gdGhlICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNp
bmNlOiAyLjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFt
ZShXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGNyZWRlbnRpYWwsIDApOworICAgIGNyZWRlbnRpYWwtPnVzZXJuYW1lID0gY3JlZGVudGlh
bC0+Y3JlZGVudGlhbC51c2VyKCkudXRmOCgpLmRhdGEoKTsKKyAgICByZXR1cm4gY3JlZGVudGlh
bC0+dXNlcm5hbWUuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9w
YXNzd29yZDoKKyAqIEBjcmVkZW50aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogR2V0
IHRoZSBwYXNzd29yZCBjdXJyZW50bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFsLgor
ICoKKyAqIFJldHVybnM6IFRoZSBwYXNzd29yZCBzdG9yZWQgaW4gdGhlICNXZWJLaXRDcmVkZW50
aWFsLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9jcmVkZW50
aWFsX2dldF9wYXNzd29yZChXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGNyZWRlbnRpYWwsIDApOworICAgIGNyZWRlbnRpYWwtPnBhc3N3
b3JkID0gY3JlZGVudGlhbC0+Y3JlZGVudGlhbC5wYXNzd29yZCgpLnV0ZjgoKS5kYXRhKCk7Cisg
ICAgcmV0dXJuIGNyZWRlbnRpYWwtPnBhc3N3b3JkLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQ6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3Jl
ZGVudGlhbAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoaXMgY3JlZGVudGlhbCBoYXMgYSBw
YXNzd29yZCBzdG9yZWQuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIGNyZWRlbnRpYWwg
aGFzIGEgcGFzc3dvcmQgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi4yCisg
Ki8KK2dib29sZWFuIHdlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNzd29yZChXZWJLaXRDcmVkZW50
aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNyZWRlbnRpYWws
IEZBTFNFKTsKKworICAgIHJldHVybiBjcmVkZW50aWFsLT5jcmVkZW50aWFsLmhhc1Bhc3N3b3Jk
KCk7Cit9CisKKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2U6Cisg
KiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIEdldCB0aGUgcGVyc2lz
dGVuY2UgbW9kZSBjdXJyZW50bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFsLgorICoK
KyAqIFJldHVybnM6IFRoZSAjV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHN0b3JlZCBpbiB0
aGUgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRDcmVk
ZW50aWFsUGVyc2lzdGVuY2Ugd2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNpc3RlbmNlKFdlYktp
dENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY3Jl
ZGVudGlhbCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZT4oY3JlZGVudGlhbC0+Y3Jl
ZGVudGlhbC5wZXJzaXN0ZW5jZSgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjExZjRhYTIxMzRk
ODY0OTc2Mzc1Y2Q2N2MzMmUzZmM2YzNkYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYg
IWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJr
aXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJL
aXRDcmVkZW50aWFsX2gKKyNkZWZpbmUgV2ViS2l0Q3JlZGVudGlhbF9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQ1JFREVOVElBTCAod2Via2l0X2NyZWRl
bnRpYWxfZ2V0X3R5cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENyZWRlbnRpYWwgV2Vi
S2l0Q3JlZGVudGlhbDsKKworLyoqCisgKiBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2U6Cisg
KiBAV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORTogQ3JlZGVudGlhbCBkb2VzIG5v
dCBwZXJzaXN0CisgKiBAV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT046
IENyZWRlbnRpYWwgcGVyc2lzdHMgZm9yIHNlc3Npb24gb25seQorICogQFdFQktJVF9DUkVERU5U
SUFMX1BFUlNJU1RFTkNFX1BFUk1BTkVOVDogQ3JlZGVudGlhbCBwZXJzaXN0cyBwZXJtYW5lbnRs
eQorICoKKyAqIEVudW0gdmFsdWVzIHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gZm9yIHdoaWNo
IGEgY3JlZGVudGlhbCBwZXJzaXN0cy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRf
Q1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FLAorICAgIFdFQktJVF9DUkVERU5USUFMX1BFUlNJ
U1RFTkNFX0ZPUl9TRVNTSU9OLAorICAgIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX1BF
Uk1BTkVOVAorfSBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2U7CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9jcmVkZW50aWFsX2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRDcmVkZW50aWFsICoKK3dlYmtpdF9jcmVkZW50aWFsX2NvcHkgICAgICAg
ICAgICAgICAgIChXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jcmVkZW50aWFsX2ZyZWUgICAgICAgICAgICAgICAgIChX
ZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIFdl
YktpdENyZWRlbnRpYWwgKgord2Via2l0X2NyZWRlbnRpYWxfbmV3ICAgICAgICAgICAgICAgICAg
KGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAqdXNlcm5hbWUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICpwYXNz
d29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDcmVk
ZW50aWFsUGVyc2lzdGVuY2UgIHBlcnNpc3RlbmNlKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
ciAqCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNlcm5hbWUgICAgICAgICAoV2ViS2l0Q3JlZGVu
dGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAq
Cit3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQgICAgICAgICAoV2ViS2l0Q3JlZGVudGlh
bCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0
X2NyZWRlbnRpYWxfaGFzX3Bhc3N3b3JkICAgICAgICAgKFdlYktpdENyZWRlbnRpYWwgICAgICAg
ICAgICAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3Rl
bmNlCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UgICAgICAoV2ViS2l0Q3JlZGVu
dGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50
aWFsUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3Jl
ZGVudGlhbFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjE0M2I5ZjY2NjYwMzI4ZmU4NWU2ODQwZTVh
ZWQ2ZmNhZWYxOWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaApAQCAtMCwwICsxLDI5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdlYktpdENyZWRlbnRpYWxQcml2YXRlX2gKKyNkZWZpbmUgV2Vi
S2l0Q3JlZGVudGlhbFByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlhbC5oIgor
I2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2ViS2l0Q3JlZGVudGlhbCogd2Via2l0Q3Jl
ZGVudGlhbENyZWF0ZShjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7Citjb25zdCBXZWJDb3Jl
OjpDcmVkZW50aWFsJiB3ZWJraXRDcmVkZW50aWFsR2V0Q3JlZGVudGlhbChXZWJLaXRDcmVkZW50
aWFsKik7CisKKyNlbmRpZiAvLyBXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDI5
NDk3MDkwZGI2MDdkYmNhOWYwMWFiOWY0NGM5MzI3ZTQ4MjFjMWYuLjQ1NjdhYzJkOGZhZjFjOTJm
ZTFiMjllZGUwMTZiNWJhNDg0YzdmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYkRhdGEuaCIKICNpbmNs
dWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExp
c3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuaCIKICNpbmNs
dWRlICJXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlLmgiCkBAIC0xMTksNiArMTIwLDggQEAg
ZW51bSB7CiAKICAgICBXRUJfUFJPQ0VTU19DUkFTSEVELAogCisgICAgQVVUSEVOVElDQVRFLAor
CiAgICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTQyOSw2ICs0MzIsMTggQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyhXZWJL
aXRXZWJWaWV3KgogICAgIHByaXYtPmZhdmljb25DaGFuZ2VkSGFuZGxlcklEID0gMDsKIH0KIAor
c3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdBdXRoZW50aWNhdGUoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIENy
ZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3RvcmFnZU1vZGU7CisgICAgaWYgKHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKQor
ICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlOwor
ICAgIGVsc2UKKyAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0
ZW50U3RvcmFnZTsKKyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9n
KFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxv
Z05ldyhyZXF1ZXN0LCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpKTsKKworICAgIHJldHVybiBUUlVF
OworfQorCiBzdGF0aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3Rr
RGlhbG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0
KiByZXF1ZXN0KQogewogICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9w
dGVkUmVxdWVzdCA9IGFkb3B0R1JlZihyZXF1ZXN0KTsKQEAgLTYwNSw2ICs2MjAsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdl
YlZpZXdDbGFzcykKICAgICB3ZWJWaWV3Q2xhc3MtPmRlY2lkZV9wb2xpY3kgPSB3ZWJraXRXZWJW
aWV3RGVjaWRlUG9saWN5OwogICAgIHdlYlZpZXdDbGFzcy0+cGVybWlzc2lvbl9yZXF1ZXN0ID0g
d2Via2l0V2ViVmlld1Blcm1pc3Npb25SZXF1ZXN0OwogICAgIHdlYlZpZXdDbGFzcy0+cnVuX2Zp
bGVfY2hvb3NlciA9IHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcjsKKyAgICB3ZWJWaWV3Q2xh
c3MtPmF1dGhlbnRpY2F0ZSA9IHdlYmtpdFdlYlZpZXdBdXRoZW50aWNhdGU7CiAKICAgICAvKioK
ICAgICAgKiBXZWJLaXRXZWJWaWV3OndlYi1jb250ZXh0OgpAQCAtMTM2Niw2ICsxMzgyLDM4IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFz
cyogd2ViVmlld0NsYXNzKQogICAgICAgICAwLAogICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09M
RUFOX19WT0lELAogICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRXZWJWaWV3OjphdXRoZW50aWNhdGU6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHJlcXVl
c3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICAgICAqCisgICAgICogVGhpcyBz
aWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5nZWQgd2l0aCBIVFRQCisg
ICAgICogYXV0aGVudGljYXRpb24uIFRvIGxldCB0aGUgIGFwcGxpY2F0aW9uIGFjY2VzcyBvciBz
dXBwbHkKKyAgICAgKiB0aGUgY3JlZGVudGlhbHMgYXMgd2VsbCBhcyB0byBhbGxvdyB0aGUgY2xp
ZW50IGFwcGxpY2F0aW9uCisgICAgICogdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvciBw
ZXJmb3JtIHRoZSBhdXRoZW50aWNhdGlvbiwKKyAgICAgKiB0aGUgc2lnbmFsIHdpbGwgcGFzcyBh
biBpbnN0YW5jZSBvZiB0aGUKKyAgICAgKiAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IGlu
IHRoZSBAcmVxdWVzdCBhcmd1bWVudC4KKyAgICAgKiBUbyBoYW5kbGUgdGhpcyBzaWduYWwgYXN5
bmNocm9ub3VzbHkgeW91IHNob3VsZCBrZWVwIGEgcmVmCisgICAgICogb2YgdGhlIHJlcXVlc3Qg
YW5kIHJldHVybiBUUlVFLgorICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRs
ZXIgd2lsbCBydW4gYSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uCisgICAgICogZGlhbG9nIGFzeW5j
aHJvbm91c2x5IGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICAgICAqCisgICAgICog
UmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQg
Zm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1
cnRoZXIuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4yCisgICAgICovCisgICAgc2lnbmFsc1tB
VVRIRU5USUNBVEVdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJhdXRoZW50aWNhdGUiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIEdf
U0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZp
ZXdDbGFzcywgYXV0aGVudGljYXRlKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9y
X3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4s
IDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9B
VVRIRU5USUNBVElPTl9SRVFVRVNUKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1Nl
dElzTG9hZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29sIGlzTG9hZGluZykKQEAgLTE3
MzgsMTMgKzE3ODYsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24KIAogdm9pZCB3ZWJraXRX
ZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
CiB7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZTsKLSAg
ICBpZiAod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpKSkKLSAgICAgICAgY3JlZGVudGlhbFN0b3Jh
Z2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKLSAgICBlbHNlCi0gICAgICAgIGNy
ZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVudFN0b3JhZ2U7Ci0KLSAgICB3ZWJr
aXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNF
KHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisgICAgZ2Jvb2xlYW4gcHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Np
bmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CisgICAgR1JlZlB0cjxX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBwcml2YXRl
QnJvd3NpbmdFbmFibGVkKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWdu
YWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0FVVEhFTlRJQ0FURV0sIDAsIHJlcXVlc3QuZ2V0KCks
ICZyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0luc2VjdXJlQ29udGVudERl
dGVjdGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50
IHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKaW5kZXggYjIzZDdmZmIxM2EwOGYwOTU0ZWNhMzU0Y2U4NmVjNTcwNzNjYTFkNy4uYTRk
NmU0MzllY2E3MjZlOTA2Mzc2MTMyMTZhNTE0NzdlYjdhZTk3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjksNiArMjksNyBA
QAogI2RlZmluZSBXZWJLaXRXZWJWaWV3X2gKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5oPgpAQCAtMjQyLDYgKzI0Myw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRJbnNlY3VyZUNvbnRlbnRFdmVudCAgIGV2ZW50KTsKICAgICBnYm9vbGVhbiAgICgqIHdlYl9w
cm9jZXNzX2NyYXNoZWQpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92
aWV3KTsKIAorICAgIGdib29sZWFuICAgKCogYXV0aGVudGljYXRlKSAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpy
ZXF1ZXN0KTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKICAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDIpICh2b2lkKTsKQEAgLTI0OSw3ICsyNTIsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFz
cyB7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7CiAgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQ1KSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ2KSAo
dm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ3KSAodm9pZCk7CiB9OwogCiBXRUJL
SVRfQVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCAyZmE3ZWJhY2ZkYzYyN2ZiMjQw
OTRmMDBiZTZiNzEyZjhkMmQ0M2NiLi5kN2IzMGUxNDhlN2QwMzEyYzk3NGI0N2Q3MDVkNmYxNTJh
NzU0MmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTEzLDYgKzEzLDggQEAKICAgICA8dGl0
bGU+Q2xhc3MgT3ZlcnZpZXc8L3RpdGxlPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRXZWJDb250ZXh0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJW
aWV3LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENyZWRlbnRp
YWwueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEJhY2tGb3J3YXJkTGlz
dC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0QmFja0ZvcndhcmRMaXN0
SXRlbS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0U2V0dGluZ3MueG1s
Ii8+CkBAIC01Myw1ICs1NSwxMSBAQAogICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+CiAgICAgPHRp
dGxlPkluZGV4PC90aXRsZT4KICAgPC9pbmRleD4KKyAgCisgIDxpbmRleCBpZD0iYXBpLWluZGV4
LTItMiIgcm9sZT0iMi4yIj4KKyAgICA8dGl0bGU+SW5kZXggb2YgbmV3IHN5bWJvbHMgaW4gMi4y
PC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTIuMi54bWwiPjx4
aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KKyAgPC9pbmRleD4gIAorICAKICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL2Fubm90YXRpb24tZ2xvc3NhcnkueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hp
OmluY2x1ZGU+CiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBmMjgwYzYy
ZGYyOWYyNmIzMjI2MmNkYWRmMmU4ZGEzM2MxZDliOTkwLi4zMTFhNTkyOGNhZDYxMTQwZjhhOTI0
OWZiYjEwYTBkOGY4YzE0NTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTE3OCw2
ICsxNzgsNTAgQEAgV2ViS2l0V2ViVmlld1ByaXZhdGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+
Cis8RklMRT5XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QKK1dlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lCit3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9j
YW5jZWwKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50
aWFsCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdAord2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2dldF9yZWFsbQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZQord2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUKKworPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CitXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcworV0VCS0lUX1RZUEVfQVVUSEVO
VElDQVRJT05fUkVRVUVTVAorV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QKK1dFQktJVF9B
VVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVT
VF9HRVRfQ0xBU1MKK1dFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUCitXRUJLSVRfSVNf
QVVUSEVOVElDQVRJT05fUkVRVUVTVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4K
KzxGSUxFPldlYktpdENyZWRlbnRpYWw8L0ZJTEU+CitXZWJLaXRDcmVkZW50aWFsCitXZWJLaXRD
cmVkZW50aWFsUGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX2NvcHkKK3dlYmtpdF9jcmVk
ZW50aWFsX2ZyZWUKK3dlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZAord2Via2l0X2NyZWRl
bnRpYWxfZ2V0X3BlcnNpc3RlbmNlCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdHlwZQord2Via2l0
X2NyZWRlbnRpYWxfZ2V0X3VzZXJuYW1lCit3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQK
K3dlYmtpdF9jcmVkZW50aWFsX25ldworCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dFQktJVF9U
WVBFX0NSRURFTlRJQUwKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRCYWNr
Rm9yd2FyZExpc3Q8L0ZJTEU+CiBXZWJLaXRCYWNrRm9yd2FyZExpc3QKIHdlYmtpdF9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfbGVuZ3RoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggNWQ5N2Y2OWJlZDVkZDdmM2E3
NjExYThkYTlkZmU3ODgzZmRhNDQ0NS4uYWI2MjBmMGQxMmEzODcwZjQ3ZWU2ZGMyOTNlNTVkOTBk
YTc5YWU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMjQsMyArMjQsNSBAQCB3ZWJraXRfY29udGV4dF9t
ZW51X2l0ZW1fZ2V0X3R5cGUKIHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfdHlwZQogd2Via2l0
X3dlYl9leHRlbnNpb25fZ2V0X3R5cGUKIHdlYmtpdF93ZWJfcGFnZV9nZXRfdHlwZQord2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUKK3dlYmtpdF9jcmVkZW50aWFsX2dldF90
eXBlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDg4ZDc3ZjI4NjBlMDYwYTUwNmFiOWJiNWM4MmZhMjhhZmE2NmIxN2EuLjI2YjlkM2YwN2I2
M2ZlMWJmZjExM2ViMDhkN2JjOTNmOWE2ZTI5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAK
QEAgLTc5Myw2ICs3OTMsNDkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdGaWxlQ2hvb3NlclJl
cXVlc3QoRmlsZUNob29zZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIHdlYmtpdF9m
aWxlX2Nob29zZXJfcmVxdWVzdF9jYW5jZWwoZmlsZUNob29zZXJSZXF1ZXN0KTsKIH0KIAorY2xh
c3MgQXV0aGVudGljYXRpb25UZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoQXV0aGVudGljYXRpb25UZXN0KTsKKworICAgIEF1dGhl
bnRpY2F0aW9uVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmll
dywgImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0socnVuQXV0aGVudGljYXRpb25DYWxsYmFjayks
IHRoaXMpOworICAgIH0KKworICAgIH5BdXRoZW50aWNhdGlvblRlc3QoKQorICAgIHsKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViVmlldywgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIGdi
b29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgdGVzdC0+cnVuQXV0aGVudGljYXRpb24ocmVxdWVzdCk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZvaWQgcnVuQXV0aGVudGljYXRpb24oV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgYXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisgICAgICAg
IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqIGNsaWNrTW91c2VCdXR0b25BbmRXYWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KGludCB4
LCBpbnQgeSkKKyAgICB7CisgICAgICAgIGNsaWNrTW91c2VCdXR0b24oeCwgeSk7CisgICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIG1fYXV0aGVudGlj
YXRpb25SZXF1ZXN0LmdldCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50aWNhdGlvblJlcXVlc3Q7Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdChBdXRoZW50aWNhdGlv
blRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gRklYTUU6IHRlc3QgdGhlIGF1
dGhlbnRpY2F0aW9uIEFQSQorfQorCiBjbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVibGlj
IFdlYlZpZXdUZXN0IHsKIHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1bGxT
Y3JlZW5DbGllbnRUZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaAppbmRleCBkMTg0MzE1MjgxYTgzNjNiODEwNTc4YzM4OGYxZTM2ZWEzY2FiMmIyLi43MGUz
YjQzMzA1OTNlZjZkMGZkNzg4YmEyZTkzMzFmNDIwZjg5Nzg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yMywxMiArMjMsMTQgQEAKIAogI2RlZmlu
ZSBfX1dFQktJVDJfSF9JTlNJREVfXwogCisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlz
dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnUuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdENvbnRleHRNZW51QWN0aW9ucy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4
dE1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+Cisj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDcmVkZW50aWFsLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207661</attachid>
            <date>2013-07-29 09:56:27 -0700</date>
            <delta_ts>2013-07-30 06:46:23 -0700</delta_ts>
            <desc>Patch + docs + unit test</desc>
            <filename>bug-99352-20130729175649.patch</filename>
            <type>text/plain</type>
            <size>54759</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDBjMTVhMDA5NzkzMThh
YzQxMGM0ODE0ZWU5YTRiMDYyYTgyODIwNi4uZWM3ZWQ2OGZhZTA5YWRlY2I0MWI4ODhhYTQxNmI5
NGVmMDk1ZGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEzLTA3LTI5ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRl
IHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIHRo
ZWlyIG93biBhdXRoZW50aWNhdGlvbgorICAgICAgICB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5n
ZWQgd2l0aCBIVFRQIGF1dGhlbnRpY2F0aW9uLiBUaGUKKyAgICAgICAgY3JlZGVudGlhbCBpcyBl
eHBvc2VkIHRocm91Z2ggYSBuZXcgY2xhc3MgV2ViS2l0Q3JlZGVudGlhbC4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dBdXRoZW50aWNhdGUpOgorICAgICAgICAob2tCdXR0b25DbGlja2VkKToKKyAgICAgICAg
KHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2FuY2VsKToKKyAgICAgICAgKGNhbmNlbEJ1dHRv
bkNsaWNrZWQpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXpl
KToKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZSk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAgICAgICh3ZWJraXRBdXRoZW50
aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICh3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbCk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdCk6CisgICAg
ICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydCk6CisgICAgICAgICh3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0pOgorICAgICAgICAod2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZSk6CisgICAgICAgICh3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkpOgorICAgICAgICAod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3ByZXZpb3VzX2ZhaWx1cmVzKToKKyAgICAgICAgKHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZSk6CisgICAgICAgICh3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKF9XZWJLaXRDcmVkZW50aWFsOjpfV2ViS2l0Q3JlZGVudGlhbCk6CisgICAg
ICAgICh3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdENyZWRlbnRpYWxH
ZXRDcmVkZW50aWFsKToKKyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2NvcHkpOgorICAgICAg
ICAod2Via2l0X2NyZWRlbnRpYWxfZnJlZSk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9u
ZXcpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3VzZXJuYW1lKToKKyAgICAgICAg
KHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZCk6CisgICAgICAgICh3ZWJraXRfY3JlZGVu
dGlhbF9oYXNfcGFzc3dvcmQpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNp
c3RlbmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2
YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZSk6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3SGFuZGxlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1z
ZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LnR5cGVzOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KToKKyAg
ICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChh
ZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgorCiAyMDEz
LTA3LTE3ICBEb25nLUd3YW4gS2ltICA8ZG9uZ2d3YW4ua2ltQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxdW1dLMl0gRVdLMkNvb2tpZU1hbmFnZXJUZXN0IHNob3VsZCBiZSBkZWZpbmVkIGJ5
IGluaGVyaXRpbmcgZnJvbSBFV0syVW5pdFRlc3RCYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggYjE1MDE3ZmViOGNkMGM1Zjg4NGE1OGQ5NTkzNTk3YmRhNmEyNzYyZS4uMTBj
MmE0ODk5OGEwMTBlN2ZhMzAwNzQ2MDI0YjhjY2JlMDRiMzdkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC05NCwxMiArOTQsMTQgQEAgd2Via2l0Ml9oX2FwaSArPSBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2NwcC9XS1JldGFpblB0ci5oCiAKIHdlYmtpdDJndGtfaF9h
cGkgKz0gXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENv
bnRleHRNZW51LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb25zLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29v
a2llTWFuYWdlci5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRl
bnRpYWwuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmgg
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCkBAIC02
NTMsNiArNjU1LDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCkBA
IC02NzIsNiArNjc3LDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmNwcCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKaW5kZXggMDY5OWRhN2VlZDMxYzU1NDVjZTkwNzM3YWMy
YTAzYzI1MTAwY2M3NS4uNTQ4MDhhOTkyNDJmMTQ1YmQzYWFmMmZkNDdlMTNmMDYyMTEyMjA3NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMjAsMTUgKzIwLDE5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIK
IAorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKICNpbmNsdWRlICJXZWJDcmVkZW50aWFs
LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCisjaW5jbHVkZSAi
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENy
ZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogc3RydWN0
IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUgewotICAgIFJlZlB0cjxBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLQorICAgIEdS
ZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiByZXF1ZXN0OwogICAgIEd0a1dpZGdl
dCogYXV0aFdpZGdldDsKICAgICBHdGtXaWRnZXQqIGRlZmF1bHRCdXR0b247CiAgICAgR1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dDsKQEAgLTM2LDIzICs0MCwyOSBAQCBzdHJ1
Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSB7CiAKIFdFQktJVF9ERUZJTkVf
VFlQRShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZywgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2Rp
YWxvZywgR1RLX1RZUEVfRVZFTlRfQk9YKQogCi1zdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERp
YWxvZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3N0YXRpYyB2b2lkIHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBh
dXRoRGlhbG9nKQogewogICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJp
diA9IGF1dGhEaWFsb2ctPnByaXY7Ci0gICAgcHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2Ut
Pmxpc3RlbmVyKCktPnVzZUNyZWRlbnRpYWwoY3JlZGVudGlhbCk7CisgICAgV2ViS2l0Q3JlZGVu
dGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdENyZWRlbnRpYWxDcmVhdGUod2Via2l0QXV0aGVudGlj
YXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVQo
cHJpdi0+YXV0aFdpZGdldCkpKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9h
dXRoZW50aWNhdGUocHJpdi0+cmVxdWVzdC5nZXQoKSwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0
X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RL
X1dJREdFVChhdXRoRGlhbG9nKSk7CiB9CiAKIHN0YXRpYyB2b2lkIG9rQnV0dG9uQ2xpY2tlZChH
dGtCdXR0b24qLCBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKIHsKLSAg
ICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBhdXRoRGlhbG9nLT5w
cml2OwotICAgIFJlZlB0cjxXZWJDcmVkZW50aWFsPiB3ZWJDcmVkZW50aWFsID0gV2ViQ3JlZGVu
dGlhbDo6Y3JlYXRlKHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0Q3JlYXRlQ3JlZGVudGlhbChX
RUJLSVRfQVVUSEVOVElDQVRJT05fV0lER0VUKHByaXYtPmF1dGhXaWRnZXQpKSk7Ci0gICAgd2Vi
a2l0QXV0aGVudGljYXRpb25EaWFsb2dBdXRoZW50aWNhdGUoYXV0aERpYWxvZywgd2ViQ3JlZGVu
dGlhbC5nZXQoKSk7CisgICAgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dBdXRoZW50aWNhdGUo
YXV0aERpYWxvZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
Q2FuY2VsKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQoreworICAgIHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChhdXRoRGlhbG9nLT5wcml2LT5yZXF1
ZXN0LmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgY2FuY2VsQnV0dG9uQ2xpY2tlZChHdGtCdXR0
b24qLCBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKIHsKLSAgICB3ZWJr
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCAwKTsKKyAgICB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NhbmNlbChhdXRoRGlhbG9nKTsKKyAgICBndGtfd2lk
Z2V0X2Rlc3Ryb3koR1RLX1dJREdFVChhdXRoRGlhbG9nKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdl
YmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZyogYXV0aERpYWxvZywgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdl
TW9kZSkKQEAgLTgwLDcgKzkwLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dJbml0aWFsaXplKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXQKICAgICBndGtf
Ym94X3BhY2tfZW5kKEdUS19CT1goYnV0dG9uQm94KSwgYnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7
CiAgICAgZ3RrX3dpZGdldF9zaG93KGJ1dHRvbik7CiAKLSAgICBhdXRoRGlhbG9nLT5wcml2LT5h
dXRoV2lkZ2V0ID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcoYXV0aERpYWxvZy0+cHJp
di0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmNvcmUoKSwgY3JlZGVudGlhbFN0b3JhZ2VNb2Rl
KTsKKyAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0ID0gd2Via2l0QXV0aGVudGljYXRp
b25XaWRnZXROZXcod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UoYXV0aERpYWxvZy0+cHJpdi0+cmVxdWVzdC5nZXQoKSktPmNvcmUoKSwgY3JlZGVu
dGlhbFN0b3JhZ2VNb2RlKTsKICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Qm94KSwg
YXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCwgVFJVRSwgVFJVRSwgMCk7CiAgICAgZ3RrX3dp
ZGdldF9zaG93KGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQpOwogCkBAIC0xMzgsMTAgKzE0
OCwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX2NsYXNzX2lu
aXQoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbAogICAgIHdpZGdldENsYXNzLT5tYXAgPSB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ01hcDsKIH0KIAotR3RrV2lkZ2V0KiB3ZWJraXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ05ldyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCitHdGtXaWRnZXQq
IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCiB7CiAgICAgV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElB
TE9HKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0csIE5VTEwp
KTsKLSAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIGF1dGhEaWFsb2ctPnByaXYtPnJlcXVlc3QgPSByZXF1
ZXN0OwogICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShhdXRoRGlhbG9n
LCBtb2RlKTsKICAgICByZXR1cm4gR1RLX1dJREdFVChhdXRoRGlhbG9nKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50
aWNhdGlvbkRpYWxvZy5oCmluZGV4IDdkNGRlMmE2ZDNkODE5Y2IxYzY4NzMwM2RiYzE1YTBjN2Qx
M2VlNDIuLjQwYTIyZTAxYzNkOWI0OTJlMDA0ZTIwZTYxZDg0N2Q5YzkyOWRlZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cuaApAQCAtMjAsOCArMjAsOSBAQAogI2lmbmRlZiBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ19oCiAjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nX2gK
IAotI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNh
dGlvbldpZGdldC5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIKICNpbmNsdWRlIDxn
dGsvZ3RrLmg+CiAKIEdfQkVHSU5fREVDTFMKQEAgLTQ4LDcgKzQ5LDcgQEAgc3RydWN0IF9XZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKIH07CiAKIEdUeXBlIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsKLUd0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRp
b25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiwgQ3JlZGVu
dGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dO
ZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsK
IAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTYyYzY0Y2QxMzhiOWNlYTcwMjM3NjY5YzVlYTNkNGQwMzQxMDI1MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKKwor
I2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5oIgorI2luY2x1ZGUgIldl
YkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJQcm90ZWN0aW9uU3BhY2UuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCisvKioKKyAqIFNFQ1RJT046IFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdAorICogQFNob3J0X2Rlc2NyaXB0aW9uOiBSZXByZXNlbnRzIGFuIGF1dGhlbnRp
Y2F0aW9uIHJlcXVlc3QKKyAqIEBUaXRsZTogV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Cisg
KiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3CisgKgorICogV2hlbmV2ZXIgdGhlIHVzZXIgYXR0
ZW1wdHMgdG8gbG9hZCBhIHBhZ2UgcHJvdGVjdGVkIGJ5IEhUVFAKKyAqIGF1dGhlbnRpY2F0aW9u
LCB0aGUgdXNlciB3aWxsIG5lZWQgdG8gcHJvdmlkZSB0aGVpciBjcmVkZW50aWFscy4KKyAqIFRo
aXMgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCBvYmplY3QgcHJvdmlkZXMgY2xpZW50IHNp
ZGUKKyAqIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgYW5kIGlzIGVtaXR0ZWQgd2l0aCB0aGUKKyAq
ICNXZWJLaXRXZWJWaWV3OjphdXRoZW50aWNhdGUgc2lnbmFsLgorICoKKyAqIEluIGNhc2UgdGhl
IGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoIHRvIGhhbmRsZSB0aGlzIHNpZ25hbCwK
KyAqIFdlYktpdCB3aWxsIHByb3ZpZGUgYSBkZWZhdWx0IGhhbmRsZXIuCisgKi8KKworc3RydWN0
IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VQcm94eT4gYXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgYm9v
bCBwcml2YXRlQnJvd3NpbmdFbmFibGVkOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7CisgICAg
Q1N0cmluZyBob3N0OworICAgIENTdHJpbmcgcmVhbG07Cit9OworCitXRUJLSVRfREVGSU5FX1RZ
UEUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqZWN0
KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZv
cmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQor
ICAgICAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisK
KyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9wYXJlbnRf
Y2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdl
YmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdERpc3Bvc2U7Cit9CisKK1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBib29sIHByaXZhdGVC
cm93c2luZ0VuYWJsZWQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1
ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5h
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIHJl
cXVlc3QtPnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmdldCgpOworfQorCisvKioKKyAq
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzOgorICog
QHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIERldGVybWlu
ZSB3aGV0aGVyIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoaXMK
KyAqICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgc2hvdWxkIGFsbG93IHRoZSBzdG9yYWdl
IG9mIGNyZWRlbnRpYWxzLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjbGllbnQgc2hv
dWxkIGFsbG93IHN0b3JhZ2Ugb2YgY3JlZGVudGlhbHMgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAq
CisgKiBTaW5jZTogMi4yCisgKi8KK2dib29sZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJ
T05fUkVRVUVTVChyZXF1ZXN0KSwgRkFMU0UpOworCisjaWYgRU5BQkxFKENSRURFTlRJQUxfU1RP
UkFHRSkKKyAgICByZXR1cm4gIXJlcXVlc3QtPnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQ7
CisjZWxzZQorICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9h
dXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsOgorICogQHJlcXVl
c3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgI1dlYktp
dENyZWRlbnRpYWwgb2YgdGhlIHByb3Bvc2VkIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4gVGhl
IGNsaWVudCBjYW4gdXNlIHRoaXMKKyAqIGRpcmVjdGx5IGZvciBhdXRoZW50aWNhdGlvbiBvciBj
b25zdHJ1Y3QgdGhlaXIgb3duICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTphICNXZWJLaXRDcmVkZW50aWFsIGVuY2Fwc3VsYXRpbmcgY3JlZGVudGlh
bCBkZXRhaWxzLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworV2ViS2l0Q3JlZGVudGlhbCogd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwoV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKyAgICBj
b25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsID0gcmVxdWVzdC0+cHJpdi0+YXV0
aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3Bvc2VkQ3JlZGVudGlhbCgpLT5jb3JlKCk7CisgICAg
aWYgKGNyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biB3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKGNyZWRlbnRpYWwpOworfQorCisvKioKKyAqIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0OgorICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgaG9zdCB0aGF0IHRoaXMgYXV0
aGVudGljYXRpb24gY2hhbGxlbmdlIGlzIGFwcGxpY2FibGUgdG8uCisgKgorICogUmV0dXJuczog
VGhlIGhvc3QgdGhhdCB0aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxl
IHRvLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJ
T05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICByZXF1ZXN0LT5wcml2LT5ob3N0ID0gcmVx
dWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5o
b3N0KCkudXRmOCgpLmRhdGEoKTsKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+aG9zdC5kYXRh
KCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQ6
CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogR2V0
IHRoZSBwb3J0IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgaXMgYXBwbGljYWJs
ZSB0by4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcG9ydCB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24g
Y2hhbGxlbmdlIGlzIGFwcGxpY2FibGUgdG8uCisgKgorICogU2luY2U6IDIuMgorICovCitndWlu
dCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydChXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgcmV0dXJuIHJl
cXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm90ZWN0aW9uU3BhY2UoKS0+
cG9ydCgpOworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9y
ZWFsbToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisg
KiBHZXQgdGhlIHJlYWxtIHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgaXMgYXBw
bGljYWJsZSB0by4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcmVhbG0gdGhhdCB0aGlzIGF1dGhlbnRp
Y2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAqIFNpbmNlOiAyLjIKKyAq
LworY29uc3QgZ2NoYXIqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbShX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCksIDApOwor
CisgICAgcmVxdWVzdC0+cHJpdi0+cmVhbG0gPSByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlv
bkNoYWxsZW5nZS0+cHJvdGVjdGlvblNwYWNlKCktPnJlYWxtKCkudXRmOCgpLmRhdGEoKTsKKyAg
ICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+cmVhbG0uZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWU6CisgKiBAcmVxdWVzdDogYSAjV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogR2V0IHRoZSBhdXRoZW50aWNhdGlvbiBz
Y2hlbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAqCisgKiBSZXR1cm5zOiBU
aGUgYXV0aGVudGljYXRpb24gc2NoZW1lIHRoZSBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCisg
KgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZSB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVU
SEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVN
RV9VTktOT1dOKTsKKworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZTsKKyAg
ICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBwc1NjaGVtZSA9IHJlcXVlc3Qt
PnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm90ZWN0aW9uU3BhY2UoKS0+YXV0aGVu
dGljYXRpb25TY2hlbWUoKTsKKyAgICBzd2l0Y2ggKHBzU2NoZW1lKSB7CisgICAgY2FzZSBQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZURlZmF1bHQ6CisgICAgY2FzZSBQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBCYXNpYzoKKyAgICBjYXNlIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdDoKKyAgICBjYXNlIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRNTEZvcm06CisgICAgY2FzZSBQcm90ZWN0aW9u
U3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5UTE06CisgICAgY2FzZSBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZU5lZ290aWF0ZToKKyAgICBjYXNlIFByb3RlY3Rpb25TcGFjZUF1
dGhlbnRpY2F0aW9uU2NoZW1lQ2xpZW50Q2VydGlmaWNhdGVSZXF1ZXN0ZWQ6CisgICAgY2FzZSBQ
cm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlvblJl
cXVlc3RlZDoKKyAgICAgICAgc2NoZW1lID0gc3RhdGljX2Nhc3Q8V2ViS2l0QXV0aGVudGljYXRp
b25TY2hlbWU+KHBzU2NoZW1lIC0gMSk7IC8qIFByb3RlY3Rpb25TcGFjZUF1dGhTY2hlbWUgZW51
bSBzdGFydHMgYXQgMSAqLworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBz
Y2hlbWUgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX1VOS05PV047CisgICAgfQorCisg
ICAgcmV0dXJuIHNjaGVtZTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdF9pc19mb3JfcHJveHk6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxs
ZW5nZSBpcyBhc3NvY2lhdGVkIHdpdGggYSBwcm94eSBzZXJ2ZXIgcmF0aGVyIHRoYW4gYW4gIm9y
aWdpbiIgc2VydmVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGlz
IGZvciBhIHByb3h5IG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICov
CitnYm9vbGVhbiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkoV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7
CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnBy
b3RlY3Rpb25TcGFjZSgpLT5pc1Byb3h5KCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfZ2V0X3ByZXZpb3VzX2ZhaWx1cmVzOgorICogQHJlcXVlc3Q6IGEgI1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCBudW1iZXIgb2YgcHJldmlvdXMg
ZmFpbHVyZXMgdGhhdCBoYXZlIGJlZW4gYXR0ZW1wdGVkIGZvciB0aGlzIGF1dGhlbnRpY2F0aW9u
IGNoYWxsZW5nZS4KKyAqCisgKiBSZXR1cm5zOiBUaGUgbnVtYmVyIG9mIHByZXZpb3VzIGZhaWx1
cmVzIGF0dGVtcHRlZCBmb3IgdGhpcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCisgKgorICog
U2luY2U6IDIuMgorICovCitndWludCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cHJldmlvdXNfZmFpbHVyZXMoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFV
RVNUKHJlcXVlc3QpLCAwKTsKKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS0+cHJldmlvdXNGYWlsdXJlQ291bnQoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGU6CisgKiBAcmVxdWVzdDogYSAj
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKiBAY3JlZGVudGlhbDogKHRyYW5zZmVyIG5v
bmUpOmEgI1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBBdXRoZW50aWNhdGUgdGhlICNXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QgdXNpbmcgdGhlICNXZWJLaXRDcmVkZW50aWFsCisgKiBzdXBw
bGllZC4gVG8gYXV0aGVudGljYXRlIHdpdGhvdXQgY3JlZGVudGlhbHMsIHBhc3MgTlVMTCBhcyB0
aGUgY3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3ZvaWQgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCwgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKyAg
ICBpZiAoY3JlZGVudGlhbCkgICAgIHsKKyAgICAgICAgUmVmUHRyPFdlYkNyZWRlbnRpYWw+IHdl
YkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50aWFsOjpjcmVhdGUod2Via2l0Q3JlZGVudGlhbEdldENy
ZWRlbnRpYWwoY3JlZGVudGlhbCkpOworICAgICAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+dXNlQ3JlZGVudGlhbCh3ZWJDcmVkZW50aWFsLmdl
dCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25D
aGFsbGVuZ2UtPmxpc3RlbmVyKCktPnVzZUNyZWRlbnRpYWwoMCk7CisKKyAgICByZXF1ZXN0LT5w
cml2LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfY2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdAorICoKKyAqIENhbmNlbCB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLgor
ICoKKyAqIFNpbmNlOiAyLjIKKyAqLwordm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9jYW5jZWwoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkp
OworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigp
LT5jYW5jZWwoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmY4
NDg3ZjQ4ZTY0OTBlZTE5NWMzNmUwODlkZDkxZTA0NjkzZTVmMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdC5oCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1
bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJy
b3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0X2gKKyNkZWZpbmUg
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0X2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdENyZWRlbnRpYWwuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1QgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQVVU
SEVOVElDQVRJT05fUkVRVUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KSkKKyNkZWZp
bmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVR
VUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRf
SVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNUKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05f
UkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1QsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAgICAgICAgV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdENsYXNzICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3M7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8K
KyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3Ry
dWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwor
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQp
OworfTsKKworLyoqCisgKiBXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZToKKyAqIEBXRUJLSVRf
QVVUSEVOVElDQVRJT05fU0NIRU1FX0RFRkFVTFQ6IFRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9u
IHNjaGVtZSBvZiBXZWJLaXQuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQ
X0JBU0lDOiBCYXNpYyBhdXRoZW50aWNhdGlvbiBzY2hlbWUgYXMgZGVmaW5lZCBpbiBSRkMgMjYx
Ny4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfRElHRVNUOiBEaWdlc3Qg
YXV0aGVudGljYXRpb24gc2NoZW1lIGFzIGRlZmluZWQgaW4gUkZDIDI2MTcuCisgKiBAV0VCS0lU
X0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVE1MX0ZPUk06IEhUTUwgRm9ybSBhdXRoZW50aWNhdGlv
bi4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05UTE06IE5UTE0gTWljcm9zb2Z0
IHByb3ByaWV0YXJ5IGF1dGhlbnRpY2F0aW9uIHNjaGVtZS4KKyAqIEBXRUJLSVRfQVVUSEVOVElD
QVRJT05fU0NIRU1FX05FR09USUFURTogTmVnb3RpYXRlIChvciBTUE5FR08pIGF1dGhlbnRpY2F0
aW9uIHNjaGVtZSBhcyBkZWZpbmVkIGluIFJGQyA0NTU5LgorICogQFdFQktJVF9BVVRIRU5USUNB
VElPTl9TQ0hFTUVfQ0xJRU5UX0NFUlRJRklDQVRFX1JFUVVFU1RFRDogQ2xpZW50IENlcnRpZmlj
YXRlIEF1dGhlbnRpY2F0aW9uIChzZWUgUkZDIDIyNDYpLgorICogQFdFQktJVF9BVVRIRU5USUNB
VElPTl9TQ0hFTUVfU0VSVkVSX1RSVVNUX0VWQUxVQVRJT05fUkVRVUVTVEVEOiBTZXJ2ZXIgVHJ1
c3QgQXV0aGVudGljYXRpb24uCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktO
T1dOOiBBdXRoZW50aWNhdGlvbiBzY2hlbWUgdW5rbm93bi4KKworICogRW51bSB2YWx1ZXMgcmVw
cmVzZW50aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzY2hlbWUuCisgKi8KK3R5cGVkZWYgZW51bSB7
CisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9ERUZBVUxULAorICAgIFdFQktJVF9B
VVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJQywKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fU0NIRU1FX0hUVFBfRElHRVNULAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVf
SFRNTF9GT1JNLAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfTlRMTSwKKyAgICBX
RUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05FR09USUFURSwKKyAgICBXRUJLSVRfQVVUSEVO
VElDQVRJT05fU0NIRU1FX0NMSUVOVF9DRVJUSUZJQ0FURV9SRVFVRVNURUQsCisgICAgV0VCS0lU
X0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9TRVJWRVJfVFJVU1RfRVZBTFVBVElPTl9SRVFVRVNURUQs
CisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOLAorfSBXZWJLaXRBdXRo
ZW50aWNhdGlvblNjaGVtZTsKKworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfdHlwZSAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVk
ZW50aWFscyAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0Q3JlZGVudGlhbCAqCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbCAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAq
cmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfZ2V0X2hvc3QgICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcG9ydCAgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtICAgICAgICAgICAgICAgIChXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEF1dGhl
bnRpY2F0aW9uU2NoZW1lCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1l
ICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisK
K1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zv
cl9wcm94eSAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0
KTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X3ByZXZpb3VzX2ZhaWx1cmVzICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVl
c3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1
dGhlbnRpY2F0ZSAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1
ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbCAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDY5MTNmYmRhMjAwZjA5NTVkZWE2YmIwZDFhMDJmNjYyNmUzNzEwNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGVfaAorI2RlZmlu
ZSBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIkF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSosIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCk7CitXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIHdlYmtpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdEdldEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCopOworCisjZW5kaWYgLy8gV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJp
dmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDcmVkZW50aWFsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENyZWRlbnRpYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YjU0ZDQwY2UwZmZkYjJmYTEzNTRhY2MzMDM5
NDc4ZDg5NzdiNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIK
KworI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFs
UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRDcmVkZW50aWFsCisgKiBAU2hv
cnRfZGVzY3JpcHRpb246IEFuIG9iamVjdCB0byBlbmNhcHN1bGF0ZSBhdXRoZW50aWNhdGlvbiBj
cmVkZW50aWFscworICogQFRpdGxlOiBXZWJLaXRDcmVkZW50aWFsCisgKiBAU2VlX2Fsc286ICNX
ZWJLaXRXZWJWaWV3CisgKgorICogV2hlbmV2ZXIgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gbG9hZCBh
IHBhZ2UgcHJvdGVjdGVkIGJ5IEhUVFAKKyAqIGF1dGhlbnRpY2F0aW9uLCB0aGUgdXNlciB3aWxs
IG5lZWQgdG8gcHJvdmlkZSB0aGVpciBjcmVkZW50aWFscy4KKyAqIFRoaXMgI1dlYktpdENyZWRl
bnRpYWwgb2JqZWN0IGVuY2Fwc3VsYXRlcyB0aGUKKyAqIGNyZWRlbnRpYWwgdG8gYmUgdXNlZCB3
aXRoIGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC4KKyAqLworCitzdHJ1Y3QgX1dlYktp
dENyZWRlbnRpYWwgeworICAgIF9XZWJLaXRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkNyZWRl
bnRpYWwmIGNvcmUpCisgICAgICAgIDogY3JlZGVudGlhbChjb3JlKQorICAgIHsKKyAgICB9CisK
KyAgICBXZWJDb3JlOjpDcmVkZW50aWFsIGNyZWRlbnRpYWw7CisgICAgQ1N0cmluZyB1c2VybmFt
ZTsKKyAgICBDU3RyaW5nIHBhc3N3b3JkOworfTsKKworR19ERUZJTkVfQk9YRURfVFlQRShXZWJL
aXRDcmVkZW50aWFsLCB3ZWJraXRfY3JlZGVudGlhbCwgd2Via2l0X2NyZWRlbnRpYWxfY29weSwg
d2Via2l0X2NyZWRlbnRpYWxfZnJlZSkKKworV2ViS2l0Q3JlZGVudGlhbCogd2Via2l0Q3JlZGVu
dGlhbENyZWF0ZShjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQoreworICAg
IFdlYktpdENyZWRlbnRpYWwqIHdlYktpdENyZWRlbnRpYWwgPSBnX3NsaWNlX25ldyhXZWJLaXRD
cmVkZW50aWFsKTsKKyAgICBuZXcgKHdlYktpdENyZWRlbnRpYWwpIFdlYktpdENyZWRlbnRpYWwo
Y3JlZGVudGlhbCk7CisgICAgcmV0dXJuIHdlYktpdENyZWRlbnRpYWw7Cit9CisKK2NvbnN0IFdl
YkNvcmU6OkNyZWRlbnRpYWwmIHdlYmtpdENyZWRlbnRpYWxHZXRDcmVkZW50aWFsKFdlYktpdENy
ZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19hc3NlcnQoY3JlZGVudGlhbCk7CisgICAg
cmV0dXJuIGNyZWRlbnRpYWwtPmNyZWRlbnRpYWw7Cit9CisKKy8qKgorICogd2Via2l0X2NyZWRl
bnRpYWxfY29weToKKyAqIEBjcmVkZW50aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICog
TWFrZSBhIGNvcHkgb2YgdGhlICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogQSBjb3B5IG9mIHBhc3NlZCBpbiAjV2ViS2l0Q3JlZGVudGlhbAorICoK
KyAqIFNpbmNlIDIuMgorICovCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRfY3JlZGVudGlhbF9j
b3B5KFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgV2ViS2l0Q3JlZGVudGlh
bCogY29weSA9IGdfc2xpY2VfbmV3KFdlYktpdENyZWRlbnRpYWwpOworICAgIG5ldyAoY29weSkg
V2ViS2l0Q3JlZGVudGlhbCgqY3JlZGVudGlhbCk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKKy8q
KgorICogd2Via2l0X2NyZWRlbnRpYWxfZnJlZToKKyAqIEBjcmVkZW50aWFsOiAodHJhbnNmZXIg
ZnVsbCk6YSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIEZyZWUgdGhlICNXZWJLaXRDcmVkZW50
aWFsLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwordm9pZCB3ZWJraXRfY3JlZGVudGlhbF9mcmVl
KFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZGVsZXRlIGNyZWRlbnRpYWw7
Cit9CisKKy8qKgorICogd2Via2l0X2NyZWRlbnRpYWxfbmV3OgorICogQHVzZXJuYW1lOiBUaGUg
dXNlcm5hbWUgZm9yIHRoZSBuZXcgY3JlZGVudGlhbAorICogQHBhc3N3b3JkOiBUaGUgcGFzc3dv
cmQgZm9yIHRoZSBuZXcgY3JlZGVudGlhbAorICogQHBlcnNpc3RlbmNlOiBUaGUgcGVyc2lzdGVu
Y2Ugb2YgdGhlIG5ldyBjcmVkZW50aWFsCisgKgorICoKKyAqIENyZWF0ZSBhIG5ldyBjcmVkZW50
aWFsIGZyb20gdGhlIHByb3ZpZGVkIHVzZXJuYW1lLCBwYXNzd29yZCBhbmQgcGVyc2lzdGVuY2Ug
bW9kZS4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6QSAjV2ViS2l0Q3JlZGVudGlh
bC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9jcmVk
ZW50aWFsX25ldyhjb25zdCBnY2hhciogdXNlcm5hbWUsIGNvbnN0IGdjaGFyKiBwYXNzd29yZCwg
V2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlKQoreworICAgIHJldHVybiB3
ZWJraXRDcmVkZW50aWFsQ3JlYXRlKFdlYkNvcmU6OkNyZWRlbnRpYWwoCisgICAgICAgIFN0cmlu
Zzo6ZnJvbVVURjgodXNlcm5hbWUpLAorICAgICAgICBTdHJpbmc6OmZyb21VVEY4KHBhc3N3b3Jk
KSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihw
ZXJzaXN0ZW5jZSkpKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNlcm5h
bWU6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIEdldCB0aGUg
dXNlcm5hbWUgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisg
KiBSZXR1cm5zOiBUaGUgdXNlcm5hbWUgc3RvcmVkIGluIHRoZSAjV2ViS2l0Q3JlZGVudGlhbC4K
KyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfY3JlZGVudGlhbF9n
ZXRfdXNlcm5hbWUoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCAwKTsKKyAgICBjcmVkZW50aWFsLT51c2VybmFtZSA9
IGNyZWRlbnRpYWwtPmNyZWRlbnRpYWwudXNlcigpLnV0ZjgoKS5kYXRhKCk7CisgICAgcmV0dXJu
IGNyZWRlbnRpYWwtPnVzZXJuYW1lLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVu
dGlhbF9nZXRfcGFzc3dvcmQ6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAor
ICoKKyAqIEdldCB0aGUgcGFzc3dvcmQgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3Jl
ZGVudGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcGFzc3dvcmQgc3RvcmVkIGluIHRoZSAjV2Vi
S2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJr
aXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCAwKTsKKyAgICBjcmVkZW50
aWFsLT5wYXNzd29yZCA9IGNyZWRlbnRpYWwtPmNyZWRlbnRpYWwucGFzc3dvcmQoKS51dGY4KCku
ZGF0YSgpOworICAgIHJldHVybiBjcmVkZW50aWFsLT5wYXNzd29yZC5kYXRhKCk7Cit9CisKKy8q
KgorICogd2Via2l0X2NyZWRlbnRpYWxfaGFzX3Bhc3N3b3JkOgorICogQGNyZWRlbnRpYWw6IGEg
I1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGNyZWRlbnRp
YWwgaGFzIGEgcGFzc3dvcmQgc3RvcmVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBj
cmVkZW50aWFsIGhhcyBhIHBhc3N3b3JkIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2lu
Y2U6IDIuMgorICovCitnYm9vbGVhbiB3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQoV2Vi
S2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChj
cmVkZW50aWFsLCBGQUxTRSk7CisKKyAgICByZXR1cm4gY3JlZGVudGlhbC0+Y3JlZGVudGlhbC5o
YXNQYXNzd29yZCgpOworfQorCisKKy8qKgorICogd2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNp
c3RlbmNlOgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBHZXQg
dGhlIHBlcnNpc3RlbmNlIG1vZGUgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3JlZGVu
dGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgI1dlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZSBz
dG9yZWQgaW4gdGhlICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwor
V2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0
ZW5jZShXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNyZWRlbnRpYWwsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUpOwor
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2U+KGNyZWRl
bnRpYWwtPmNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIx
MWY0YWEyMTM0ZDg2NDk3NjM3NWNkNjdjMzJlM2ZjNmMzZGJlNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaApAQCAt
MCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5T
SURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdl
YmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNp
Zm5kZWYgV2ViS2l0Q3JlZGVudGlhbF9oCisjZGVmaW5lIFdlYktpdENyZWRlbnRpYWxfaAorCisj
aW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMu
aD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0NSRURFTlRJQUwgKHdl
YmtpdF9jcmVkZW50aWFsX2dldF90eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRDcmVk
ZW50aWFsIFdlYktpdENyZWRlbnRpYWw7CisKKy8qKgorICogV2ViS2l0Q3JlZGVudGlhbFBlcnNp
c3RlbmNlOgorICogQFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkU6IENyZWRlbnRp
YWwgZG9lcyBub3QgcGVyc2lzdAorICogQFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX0ZP
Ul9TRVNTSU9OOiBDcmVkZW50aWFsIHBlcnNpc3RzIGZvciBzZXNzaW9uIG9ubHkKKyAqIEBXRUJL
SVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9QRVJNQU5FTlQ6IENyZWRlbnRpYWwgcGVyc2lzdHMg
cGVybWFuZW50bHkKKyAqCisgKiBFbnVtIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9u
IGZvciB3aGljaCBhIGNyZWRlbnRpYWwgcGVyc2lzdHMuCisgKi8KK3R5cGVkZWYgZW51bSB7Cisg
ICAgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSwKKyAgICBXRUJLSVRfQ1JFREVO
VElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTiwKKyAgICBXRUJLSVRfQ1JFREVOVElBTF9QRVJT
SVNURU5DRV9QRVJNQU5FTlQKK30gV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlOworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdHlwZSAgICAgICAgICAgICAodm9p
ZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q3JlZGVudGlhbCAqCit3ZWJraXRfY3JlZGVudGlhbF9j
b3B5ICAgICAgICAgICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50
aWFsKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY3JlZGVudGlhbF9mcmVlICAgICAgICAg
ICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRDcmVkZW50aWFsICoKK3dlYmtpdF9jcmVkZW50aWFsX25ldyAgICAgICAg
ICAgICAgICAgIChjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgKnVzZXJuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAg
ICAgICAqcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlICBwZXJzaXN0ZW5jZSk7CisKK1dFQktJVF9BUEkg
Y29uc3QgZ2NoYXIgKgord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3VzZXJuYW1lICAgICAgICAgKFdl
YktpdENyZWRlbnRpYWwgICAgICAgICAgICAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgY29u
c3QgZ2NoYXIgKgord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkICAgICAgICAgKFdlYktp
dENyZWRlbnRpYWwgICAgICAgICAgICAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNzd29yZCAgICAgICAgIChXZWJLaXRDcmVkZW50
aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIFdlYktpdENyZWRlbnRp
YWxQZXJzaXN0ZW5jZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNpc3RlbmNlICAgICAgKFdl
YktpdENyZWRlbnRpYWwgICAgICAgICAgICAqY3JlZGVudGlhbCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q3JlZGVudGlhbFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdENyZWRlbnRpYWxQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYxNDNiOWY2NjY2MDMyOGZl
ODVlNjg0MGU1YWVkNmZjYWVmMTliZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2YXRlLmgKQEAgLTAsMCArMSwy
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZV9oCisj
ZGVmaW5lIFdlYktpdENyZWRlbnRpYWxQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdENyZWRl
bnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdENyZWRlbnRpYWwq
IHdlYmtpdENyZWRlbnRpYWxDcmVhdGUoY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpOworY29u
c3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgd2Via2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwoV2Vi
S2l0Q3JlZGVudGlhbCopOworCisjZW5kaWYgLy8gV2ViS2l0Q3JlZGVudGlhbFByaXZhdGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAppbmRleCAyOTQ5NzA5MGRiNjA3ZGJjYTlmMDFhYjlmNDRjOTMyN2U0ODIxYzFmLi40NTY3YWMy
ZDhmYWYxYzkyZmUxYjI5ZWRlMDE2YjViYTQ4NGM3ZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJEYXRh
LmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0QmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51Q2xpZW50
LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZS5oIgpAQCAtMTE5LDYg
KzEyMCw4IEBAIGVudW0gewogCiAgICAgV0VCX1BST0NFU1NfQ1JBU0hFRCwKIAorICAgIEFVVEhF
TlRJQ0FURSwKKwogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC00MjksNiArNDMyLDE4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0RmF2aWNvbkRhdGFiYXNlU2lnbmFsSGFu
ZGxlcnMoV2ViS2l0V2ViVmlldyoKICAgICBwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJRCA9
IDA7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QXV0aGVudGljYXRlKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkK
K3sKKyAgICBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlOworICAg
IGlmICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhy
ZXF1ZXN0KSkKKyAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gQWxsb3dQZXJzaXN0ZW50
U3RvcmFnZTsKKyAgICBlbHNlCisgICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IERpc2Fs
bG93UGVyc2lzdGVudFN0b3JhZ2U7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNh
dGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0QXV0aGVudGlj
YXRpb25EaWFsb2dOZXcocmVxdWVzdCwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNwb25zZUNh
bGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9vc2VyUmVx
dWVzdD4gYWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdSZWYocmVxdWVzdCk7CkBAIC02MDUsNiArNjIw
LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmll
d0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9saWN5ID0g
d2Via2l0V2ViVmlld0RlY2lkZVBvbGljeTsKICAgICB3ZWJWaWV3Q2xhc3MtPnBlcm1pc3Npb25f
cmVxdWVzdCA9IHdlYmtpdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdDsKICAgICB3ZWJWaWV3Q2xh
c3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7CisgICAg
d2ViVmlld0NsYXNzLT5hdXRoZW50aWNhdGUgPSB3ZWJraXRXZWJWaWV3QXV0aGVudGljYXRlOwog
CiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzp3ZWItY29udGV4dDoKQEAgLTEzNjYsNiAr
MTM4MiwzOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRX
ZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgMCwKICAgICAgICAgd2Via2l0X21h
cnNoYWxfQk9PTEVBTl9fVk9JRCwKICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOworCisgICAg
LyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRlOgorICAgICAqIEB3ZWJfdmll
dzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAg
ICAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAgICAgKgorICAg
ICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBpcyBjaGFsbGVuZ2VkIHdp
dGggSFRUUAorICAgICAqIGF1dGhlbnRpY2F0aW9uLiBUbyBsZXQgdGhlICBhcHBsaWNhdGlvbiBh
Y2Nlc3Mgb3Igc3VwcGx5CisgICAgICogdGhlIGNyZWRlbnRpYWxzIGFzIHdlbGwgYXMgdG8gYWxs
b3cgdGhlIGNsaWVudCBhcHBsaWNhdGlvbgorICAgICAqIHRvIGVpdGhlciBjYW5jZWwgdGhlIHJl
cXVlc3Qgb3IgcGVyZm9ybSB0aGUgYXV0aGVudGljYXRpb24sCisgICAgICogdGhlIHNpZ25hbCB3
aWxsIHBhc3MgYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgICogI1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCBpbiB0aGUgQHJlcXVlc3QgYXJndW1lbnQuCisgICAgICogVG8gaGFuZGxlIHRoaXMg
c2lnbmFsIGFzeW5jaHJvbm91c2x5IHlvdSBzaG91bGQga2VlcCBhIHJlZgorICAgICAqIG9mIHRo
ZSByZXF1ZXN0IGFuZCByZXR1cm4gVFJVRS4KKyAgICAgKgorICAgICAqIFRoZSBkZWZhdWx0IHNp
Z25hbCBoYW5kbGVyIHdpbGwgcnVuIGEgZGVmYXVsdCBhdXRoZW50aWNhdGlvbgorICAgICAqIGRp
YWxvZyBhc3luY2hyb25vdXNseSBmb3IgdGhlIHVzZXIgdG8gaW50ZXJhY3Qgd2l0aC4KKyAgICAg
KgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWlu
ZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRo
ZSBldmVudCBmdXJ0aGVyLgorICAgICAqCisgICAgICogU2luY2U6IDIuMgorICAgICAqLworICAg
IHNpZ25hbHNbQVVUSEVOVElDQVRFXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiYXV0aGVudGlj
YXRlIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChX
ZWJLaXRXZWJWaWV3Q2xhc3MsIGF1dGhlbnRpY2F0ZSksCisgICAgICAgICAgICBnX3NpZ25hbF9h
Y2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAgLyogYWNjdW11bGF0b3IgZGF0YSAqLywKKyAgICAg
ICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9CT09MRUFOLCAxLCAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyAqLworICAgICAgICAgICAgV0VC
S0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdTZXRJc0xvYWRpbmcoV2ViS2l0V2ViVmlldyogd2ViVmlldywgYm9vbCBpc0xvYWRp
bmcpCkBAIC0xNzM4LDEzICsxNzg2LDEwIEBAIHZvaWQgd2Via2l0V2ViVmlld1N1Ym1pdEZvcm1S
ZXF1ZXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEZvcm1TdWJtaXNzaW9uCiAKIHZv
aWQgd2Via2l0V2ViVmlld0hhbmRsZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKQogewotICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3RvcmFn
ZU1vZGU7Ci0gICAgaWYgKHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Np
bmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSkpCi0gICAgICAgIGNyZWRl
bnRpYWxTdG9yYWdlTW9kZSA9IERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2U7Ci0gICAgZWxzZQot
ICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlOwot
Ci0gICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRoZW50aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VC
X1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UsIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSkpOworICAgIGdib29sZWFu
IHByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSB3ZWJraXRfc2V0dGluZ3NfZ2V0X2VuYWJsZV9wcml2
YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykpOworICAg
IEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVm
KHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSwgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkpOworICAgIGdib29sZWFuIHJldHVyblZhbHVlOwor
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tBVVRIRU5USUNBVEVdLCAwLCByZXF1
ZXN0LmdldCgpLCAmcmV0dXJuVmFsdWUpOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdJbnNlY3Vy
ZUNvbnRlbnREZXRlY3RlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRJbnNlY3VyZUNv
bnRlbnRFdmVudCB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCmluZGV4IGIyM2Q3ZmZiMTNhMDhmMDk1NGVjYTM1NGNlODZlYzU3MDcz
Y2ExZDcuLmE0ZDZlNDM5ZWNhNzI2ZTkwNjM3NjEzMjE2YTUxNDc3ZWI3YWU5N2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTI5
LDYgKzI5LDcgQEAKICNkZWZpbmUgV2ViS2l0V2ViVmlld19oCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0Jhc2UuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRGaWxlQ2hvb3NlclJlcXVlc3QuaD4KQEAgLTI0Miw2ICsyNDMsOCBAQCBzdHJ1Y3QgX1dlYktp
dFdlYlZpZXdDbGFzcyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQgICBldmVudCk7CiAgICAgZ2Jvb2xlYW4g
ICAoKiB3ZWJfcHJvY2Vzc19jcmFzaGVkKSAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CiAKKyAgICBnYm9vbGVhbiAgICgqIGF1dGhlbnRpY2F0ZSkgICAgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCAqcmVxdWVzdCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7
CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJr
aXRfcmVzZXJ2ZWQyKSAodm9pZCk7CkBAIC0yNDksNyArMjUyLDYgQEAgc3RydWN0IF9XZWJLaXRX
ZWJWaWV3Q2xhc3MgewogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNCkgKHZvaWQpOwogICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNSkgKHZvaWQpOwogICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkNikgKHZvaWQpOwotICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNykgKHZvaWQpOwog
fTsKIAogV0VCS0lUX0FQSSBHVHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggMmZhN2ViYWNm
ZGM2MjdmYjI0MDk0ZjAwYmU2YjcxMmY4ZDJkNDNjYi4uZDdiMzBlMTQ4ZTdkMDMxMmM5NzRiNDdk
NzA1ZDZmMTUyYTc1NDJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0xMyw2ICsxMyw4IEBA
CiAgICAgPHRpdGxlPkNsYXNzIE92ZXJ2aWV3PC90aXRsZT4KICAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0V2ViQ29udGV4dC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv
V2ViS2l0V2ViVmlldy54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRDcmVkZW50aWFsLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRCYWNr
Rm9yd2FyZExpc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEJhY2tG
b3J3YXJkTGlzdEl0ZW0ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFNl
dHRpbmdzLnhtbCIvPgpAQCAtNTMsNSArNTUsMTEgQEAKICAgPGluZGV4IGlkPSJpbmRleC1hbGwi
PgogICAgIDx0aXRsZT5JbmRleDwvdGl0bGU+CiAgIDwvaW5kZXg+CisgIAorICA8aW5kZXggaWQ9
ImFwaS1pbmRleC0yLTIiIHJvbGU9IjIuMiI+CisgICAgPHRpdGxlPkluZGV4IG9mIG5ldyBzeW1i
b2xzIGluIDIuMjwvdGl0bGU+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2FwaS1pbmRleC0y
LjIueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CisgIDwvaW5kZXg+ICAKKyAgCiAg
IDx4aTppbmNsdWRlIGhyZWY9InhtbC9hbm5vdGF0aW9uLWdsb3NzYXJ5LnhtbCI+PHhpOmZhbGxi
YWNrIC8+PC94aTppbmNsdWRlPgogPC9ib29rPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5k
ZXggZjI4MGM2MmRmMjlmMjZiMzIyNjJjZGFkZjJlOGRhMzNjMWQ5Yjk5MC4uOTliYzNmNmY5ZTI5
M2JiMmI0YWExZDUyYTQ0YWFhNTEzMjNkNDBhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
CkBAIC0xNzgsNiArMTc4LDUyIEBAIFdlYktpdFdlYlZpZXdQcml2YXRlCiA8L1NFQ1RJT04+CiAK
IDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PC9GSUxFPgorV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CitXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZQord2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlCit3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscword2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfY2FuY2VsCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdAor
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQKK3dlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9wcmV2aW91c19mYWlsdXJlcword2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2dldF9yZWFsbQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVt
ZQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUKK3dlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzCitXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElP
Tl9SRVFVRVNUCitXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVAorV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0dFVF9D
TEFTUworV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QKK1dFQktJVF9JU19BVVRIRU5U
SUNBVElPTl9SRVFVRVNUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3RQcml2YXRlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+
V2ViS2l0Q3JlZGVudGlhbDwvRklMRT4KK1dlYktpdENyZWRlbnRpYWwKK1dlYktpdENyZWRlbnRp
YWxQZXJzaXN0ZW5jZQord2Via2l0X2NyZWRlbnRpYWxfY29weQord2Via2l0X2NyZWRlbnRpYWxf
ZnJlZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkCit3ZWJraXRfY3JlZGVudGlhbF9n
ZXRfcGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX2dldF90eXBlCit3ZWJraXRfY3JlZGVu
dGlhbF9nZXRfdXNlcm5hbWUKK3dlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNzd29yZAord2Via2l0
X2NyZWRlbnRpYWxfbmV3CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV0VCS0lUX1RZUEVfQ1JF
REVOVElBTAorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEJhY2tGb3J3YXJk
TGlzdDwvRklMRT4KIFdlYktpdEJhY2tGb3J3YXJkTGlzdAogd2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9sZW5ndGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwppbmRleCA1ZDk3ZjY5YmVkNWRkN2YzYTc2MTFhOGRh
OWRmZTc4ODNmZGE0NDQ1Li5hYjYyMGYwZDEyYTM4NzBmNDdlZTZkYzI5M2U1NWQ5MGRhNzlhZTgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGsudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLnR5cGVzCkBAIC0yNCwzICsyNCw1IEBAIHdlYmtpdF9jb250ZXh0X21lbnVfaXRl
bV9nZXRfdHlwZQogd2Via2l0X3dlYl92aWV3X2dyb3VwX2dldF90eXBlCiB3ZWJraXRfd2ViX2V4
dGVuc2lvbl9nZXRfdHlwZQogd2Via2l0X3dlYl9wYWdlX2dldF90eXBlCit3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9nZXRfdHlwZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5cGUKXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKaW5kZXggODhk
NzdmMjg2MGUwNjBhNTA2YWI5YmI1YzgyZmEyOGFmYTY2YjE3YS4uNjgzMDUwZjM1YjI1OTBhYWNh
YzVkNThiNWVlYmFkODhlMTFhMDBlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcApAQCAtMTgs
NiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRU
ZXN0U2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTVmFsdWVS
ZWYuaD4KQEAgLTI2LDYgKzI3LDggQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCitzdGF0aWMgV2ViS2l0VGVzdFNl
cnZlcioga1NlcnZlcjsKKwogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dChX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBnX2Fzc2VydCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2RlZmF1bHQoKSk7CkBAIC03OTMsNiArNzk2LDU1IEBAIHN0YXRpYyB2b2lkIHRlc3RX
ZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KEZpbGVDaG9vc2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2VsKGZpbGVDaG9vc2Vy
UmVxdWVzdCk7CiB9CiAKK2NsYXNzIEF1dGhlbnRpY2F0aW9uVGVzdDogcHVibGljIFdlYlZpZXdU
ZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEF1dGhlbnRpY2F0aW9u
VGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50aWNhdGUiLCBHX0NBTExCQUNLKHJ1bkF1dGhl
bnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisKKyAgICB+QXV0aGVudGljYXRpb25U
ZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAg
IH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktp
dFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIEF1dGhlbnRp
Y2F0aW9uVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkF1dGhlbnRpY2F0aW9u
KHJlcXVlc3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bkF1
dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7
CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
cmVxdWVzdCkpOworICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHJlcXVlc3Q7CisK
KyAgICAgICAgY29uc3QgZ2NoYXIgKmhvc3QgPSB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfaG9zdChyZXF1ZXN0KTsKKyAgICAgICAgZ3VpbnQgcG9ydCA9IHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9wb3J0KHJlcXVlc3QpOworICAgICAgICBjb25zdCBnY2hhciAq
cmVhbG0gPSB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0ocmVxdWVzdCk7
CisgICAgICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lIHNjaGVtZSA9IHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUocmVxdWVzdCk7CisgICAgICAgIGdib29sZWFu
IGlzUHJveHkgPSB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkocmVx
dWVzdCk7CisgICAgICAgIGd1aW50IHByZXZpb3VzRmFpbHVyZXMgPSB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcHJldmlvdXNfZmFpbHVyZXMocmVxdWVzdCk7CisKKyAgICAgICAg
Z19hc3NlcnRfY21wc3RyKHJlYWxtLCA9PSwgIm15IHJlYWxtIik7CisgICAgICAgIGdfYXNzZXJ0
KHNjaGVtZSA9PSBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUMpOworICAg
ICAgICBnX2Fzc2VydChpc1Byb3h5ID09IEZBTFNFKTsKKworICAgICAgICBnX21haW5fbG9vcF9x
dWl0KG1fbWFpbkxvb3ApOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50aWNhdGlvblJlcXVlc3Q7Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdChBdXRoZW50aWNhdGlvblRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvaHR0cC1hdXRoLXRlc3QiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworfQorCiBjbGFzcyBGdWxsU2NyZWVuQ2xpZW50VGVzdDogcHVi
bGljIFdlYlZpZXdUZXN0IHsKIHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZ1
bGxTY3JlZW5DbGllbnRUZXN0KTsKQEAgLTEyMjksOCArMTI4MSwyOCBAQCBzdGF0aWMgdm9pZCB0
ZXN0V2ViVmlld1NuYXBzaG90KFNuYXBzaG90V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiAgICAgZ19hc3NlcnQodGVzdC0+Z2V0U25hcHNob3RBbmRDYW5jZWwoKSk7CiB9CiAKK3N0
YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4
dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0Rf
R0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9odHRwLWF1dGgtdGVzdCIpKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiV1dXLUF1dGhl
bnRpY2F0ZSIsICJCYXNpYyByZWFsbT1cIm15IHJlYWxtXCIiKTsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKTsKKyAgICB9
CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7
Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkKIHsKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RT
ZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgQXV0aGVu
dGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24iLCB0ZXN0
V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0
KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1jaGFyc2V0
IiwgdGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7CkBAIC0xMjU1LDQg
KzEzMjcsNSBAQCB2b2lkIGJlZm9yZUFsbCgpCiAKIHZvaWQgYWZ0ZXJBbGwoKQogeworICAgIGRl
bGV0ZSBrU2VydmVyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mi5oCmluZGV4IGQxODQzMTUyODFhODM2M2I4MTA1NzhjMzg4ZjFlMzZlYTNjYWIyYjIuLjcwZTNi
NDMzMDU5M2VmNmQwZmQ3ODhiYTJlOTMzMWY0MjBmODk3ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTIzLDEyICsyMywxNCBAQAogCiAjZGVmaW5l
IF9fV0VCS0lUMl9IX0lOU0lERV9fCiAKKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVudS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0Q29udGV4dE1lbnVBY3Rpb25zLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0
TWVudUl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvb2tpZU1hbmFnZXIuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdENyZWRlbnRpYWwuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207731</attachid>
            <date>2013-07-30 06:46:35 -0700</date>
            <delta_ts>2013-08-01 07:27:56 -0700</delta_ts>
            <desc>Patch + docs + unit test</desc>
            <filename>bug-99352-20130730144658.patch</filename>
            <type>text/plain</type>
            <size>55330</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyNzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMDBjMTVhMDA5NzkzMThh
YzQxMGM0ODE0ZWU5YTRiMDYyYTgyODIwNi4uZWM3ZWQ2OGZhZTA5YWRlY2I0MWI4ODhhYTQxNmI5
NGVmMDk1ZGFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEzLTA3LTI5ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRl
IHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIHRo
ZWlyIG93biBhdXRoZW50aWNhdGlvbgorICAgICAgICB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5n
ZWQgd2l0aCBIVFRQIGF1dGhlbnRpY2F0aW9uLiBUaGUKKyAgICAgICAgY3JlZGVudGlhbCBpcyBl
eHBvc2VkIHRocm91Z2ggYSBuZXcgY2xhc3MgV2ViS2l0Q3JlZGVudGlhbC4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dBdXRoZW50aWNhdGUpOgorICAgICAgICAob2tCdXR0b25DbGlja2VkKToKKyAgICAgICAg
KHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2FuY2VsKToKKyAgICAgICAgKGNhbmNlbEJ1dHRv
bkNsaWNrZWQpOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXpl
KToKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZSk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAgICAgICh3ZWJraXRBdXRoZW50
aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgICh3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbCk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdCk6CisgICAg
ICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydCk6CisgICAgICAgICh3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0pOgorICAgICAgICAod2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZSk6CisgICAgICAgICh3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkpOgorICAgICAgICAod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3ByZXZpb3VzX2ZhaWx1cmVzKToKKyAgICAgICAgKHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZSk6CisgICAgICAgICh3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKF9XZWJLaXRDcmVkZW50aWFsOjpfV2ViS2l0Q3JlZGVudGlhbCk6CisgICAg
ICAgICh3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKToKKyAgICAgICAgKHdlYmtpdENyZWRlbnRpYWxH
ZXRDcmVkZW50aWFsKToKKyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2NvcHkpOgorICAgICAg
ICAod2Via2l0X2NyZWRlbnRpYWxfZnJlZSk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9u
ZXcpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3VzZXJuYW1lKToKKyAgICAgICAg
KHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZCk6CisgICAgICAgICh3ZWJraXRfY3JlZGVu
dGlhbF9oYXNfcGFzc3dvcmQpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNp
c3RlbmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmg6
IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2
YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZSk6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3SGFuZGxlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1z
ZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LnR5cGVzOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJW
aWV3LmNwcDoKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KToKKyAg
ICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChh
ZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgorCiAyMDEz
LTA3LTE3ICBEb25nLUd3YW4gS2ltICA8ZG9uZ2d3YW4ua2ltQHNhbXN1bmcuY29tPgogCiAgICAg
ICAgIFtFRkxdW1dLMl0gRVdLMkNvb2tpZU1hbmFnZXJUZXN0IHNob3VsZCBiZSBkZWZpbmVkIGJ5
IGluaGVyaXRpbmcgZnJvbSBFV0syVW5pdFRlc3RCYXNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KaW5kZXggYjE1MDE3ZmViOGNkMGM1Zjg4NGE1OGQ5NTkzNTk3YmRhNmEyNzYyZS4uMTBj
MmE0ODk5OGEwMTBlN2ZhMzAwNzQ2MDI0YjhjY2JlMDRiMzdkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5saXN0LmFtCkBAIC05NCwxMiArOTQsMTQgQEAgd2Via2l0Ml9oX2FwaSArPSBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2NwcC9XS1JldGFpblB0ci5oCiAKIHdlYmtpdDJndGtfaF9h
cGkgKz0gXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0Zv
cndhcmRMaXN0SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENv
bnRleHRNZW51LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4
dE1lbnVBY3Rpb25zLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29u
dGV4dE1lbnVJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29v
a2llTWFuYWdlci5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRl
bnRpYWwuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmgg
XAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFZGl0aW5nQ29tbWFuZHMuaCBcCkBAIC02
NTMsNiArNjU1LDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCkBA
IC02NzIsNiArNjc3LDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmNwcCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKaW5kZXggMDY5OWRhN2VlZDMxYzU1NDVjZTkwNzM3YWMy
YTAzYzI1MTAwY2M3NS4uYWYyMTJjYjdhMjM3MGY0ODcwZjgyNjhlNTZhMTQ2MTJjNTA3MjNlOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcApAQCAtMjAsMTUgKzIwLDE2IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIK
IAorI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJB
dXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKLSNpbmNsdWRlICJXZWJDcmVkZW50aWFs
LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdENyZWRlbnRpYWxQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nUHJpdmF0ZSB7Ci0gICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
UHJveHk+IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotCisgICAgR1JlZlB0cjxXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3Q+IHJlcXVlc3Q7CiAgICAgR3RrV2lkZ2V0KiBhdXRoV2lkZ2V0Owog
ICAgIEd0a1dpZGdldCogZGVmYXVsdEJ1dHRvbjsKICAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4
dD4gc3R5bGVDb250ZXh0OwpAQCAtMzYsMjMgKzM3LDI5IEBAIHN0cnVjdCBfV2ViS2l0QXV0aGVu
dGljYXRpb25EaWFsb2dQcml2YXRlIHsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nLCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nLCBHVEtfVFlQRV9F
VkVOVF9CT1gpCiAKLXN0YXRpYyB2b2lkIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQXV0aGVu
dGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nLCBXZWJDcmVkZW50
aWFsKiBjcmVkZW50aWFsKQorc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dB
dXRoZW50aWNhdGUoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cpCiB7CiAg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlKiBwcml2ID0gYXV0aERpYWxvZy0+
cHJpdjsKLSAgICBwcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+dXNl
Q3JlZGVudGlhbChjcmVkZW50aWFsKTsKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFs
ID0gd2Via2l0Q3JlZGVudGlhbENyZWF0ZSh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0
ZUNyZWRlbnRpYWwoV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChwcml2LT5hdXRoV2lkZ2V0
KSkpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShwcml2
LT5yZXF1ZXN0LmdldCgpLCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVl
KGNyZWRlbnRpYWwpOwogICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGF1dGhEaWFs
b2cpKTsKIH0KIAogc3RhdGljIHZvaWQgb2tCdXR0b25DbGlja2VkKEd0a0J1dHRvbiosIFdlYktp
dEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQogewotICAgIFdlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7Ci0gICAgUmVmUHRy
PFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50aWFsOjpjcmVhdGUod2Vi
a2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdFQktJVF9BVVRIRU5USUNB
VElPTl9XSURHRVQocHJpdi0+YXV0aFdpZGdldCkpKTsKLSAgICB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCB3ZWJDcmVkZW50aWFsLmdldCgpKTsKKyAg
ICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dDYW5jZWwoV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cpCit7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKGF1dGhEaWFsb2ctPnByaXYtPnJlcXVlc3QuZ2V0KCks
IDApOwogfQogCiBzdGF0aWMgdm9pZCBjYW5jZWxCdXR0b25DbGlja2VkKEd0a0J1dHRvbiosIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQogewotICAgIHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKGF1dGhEaWFsb2csIDApOworICAgIHdlYmtpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nQ2FuY2VsKGF1dGhEaWFsb2cpOworICAgIGd0a193aWRnZXRfZGVz
dHJveShHVEtfV0lER0VUKGF1dGhEaWFsb2cpKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0QXV0
aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXplKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBh
dXRoRGlhbG9nLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKQpA
QCAtODAsNyArODcsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0lu
aXRpYWxpemUoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dAogICAgIGd0a19ib3hfcGFj
a19lbmQoR1RLX0JPWChidXR0b25Cb3gpLCBidXR0b24sIEZBTFNFLCBUUlVFLCAwKTsKICAgICBn
dGtfd2lkZ2V0X3Nob3coYnV0dG9uKTsKIAotICAgIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRn
ZXQgPSB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldE5ldyhhdXRoRGlhbG9nLT5wcml2LT5hdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZS0+Y29yZSgpLCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpOworICAg
IGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQgPSB3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdl
dE5ldyh3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShhdXRoRGlhbG9nLT5wcml2LT5yZXF1ZXN0LmdldCgpKS0+Y29yZSgpLCBjcmVkZW50aWFsU3Rv
cmFnZU1vZGUpOwogICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCBhdXRoRGlh
bG9nLT5wcml2LT5hdXRoV2lkZ2V0LCBUUlVFLCBUUlVFLCAwKTsKICAgICBndGtfd2lkZ2V0X3No
b3coYXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCk7CiAKQEAgLTEzOCwxMCArMTQ1LDEwIEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfY2xhc3NfaW5pdChXZWJL
aXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsCiAgICAgd2lkZ2V0Q2xhc3MtPm1hcCA9IHdlYmtpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nTWFwOwogfQogCi1HdGtXaWRnZXQqIHdlYmtpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nTmV3KEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkKK0d0a1dpZGdldCogd2Via2l0
QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1
ZXN0LCBDcmVkZW50aWFsU3RvcmFnZU1vZGUgbW9kZSkKIHsKICAgICBXZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZyogYXV0aERpYWxvZyA9IFdFQktJVF9BVVRIRU5USUNBVElPTl9ESUFMT0coZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX0RJQUxPRywgTlVMTCkpOwotICAg
IGF1dGhEaWFsb2ctPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gYXV0aGVudGljYXRp
b25DaGFsbGVuZ2U7CisgICAgYXV0aERpYWxvZy0+cHJpdi0+cmVxdWVzdCA9IHJlcXVlc3Q7CiAg
ICAgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXplKGF1dGhEaWFsb2csIG1vZGUp
OwogICAgIHJldHVybiBHVEtfV0lER0VUKGF1dGhEaWFsb2cpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmgKaW5kZXggN2Q0ZGUyYTZkM2Q4MTljYjFjNjg3MzAzZGJjMTVhMGM3ZDEzZWU0Mi4u
NjEwZmFkNjU1MWRhNWQyOTRiMGY5NzM2YzE0ZGM4MWViYzFmMzBlMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZy5oCkBAIC0yMCw3ICsyMCw3IEBACiAjaWZuZGVmIFdlYktpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nX2gKICNkZWZpbmUgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAogCi0jaW5j
bHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uV2lk
Z2V0LmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCkBAIC00OCw3ICs0OCw3IEBAIHN0cnVjdCBf
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dDbGFzcyB7CiB9OwogCiBHVHlwZSB3ZWJraXRfYXV0
aGVudGljYXRpb25fZGlhbG9nX2dldF90eXBlKCk7Ci1HdGtXaWRnZXQqIHdlYmtpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nTmV3KFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSosIENy
ZWRlbnRpYWxTdG9yYWdlTW9kZSk7CitHdGtXaWRnZXQqIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nTmV3KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCosIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYyNGU1NTEzYTVjZjNhMWRjNzZjZjRlNDliNzQ5YTJkNTQ2ZjA4MDYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QuY3BwCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmgi
CisKKyNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKKyNpbmNsdWRl
ICJXZWJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWxQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViUHJvdGVjdGlvblNwYWNlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworLyoqCisgKiBTRUNUSU9OOiBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QKKyAqIEBTaG9ydF9kZXNjcmlwdGlvbjogUmVwcmVzZW50cyBhbiBhdXRo
ZW50aWNhdGlvbiByZXF1ZXN0CisgKiBAVGl0bGU6IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dAorICogQFNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldworICoKKyAqIFdoZW5ldmVyIGEgY2xpZW50
IGF0dGVtcHRzIHRvIGxvYWQgYSBwYWdlIHByb3RlY3RlZCBieSBIVFRQCisgKiBhdXRoZW50aWNh
dGlvbiwgY3JlZGVudGlhbHMgd2lsbCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGF1dGhvcml6ZSBh
Y2Nlc3MuCisgKiBUbyBhbGxvdyB0aGUgY2xpZW50IHRvIGRlY2lkZSBob3cgaXQgd2lzaGVzIHRv
IGhhbmRsZSBhdXRoZW50aWNhdGlvbiwKKyAqIFdlYktpdCB3aWxsIGZpcmUgYSAjV2ViS2l0V2Vi
Vmlldzo6YXV0aGVudGljYXRlIHNpZ25hbCB3aXRoIGEKKyAqIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCBvYmplY3QgdG8gcHJvdmlkZSBjbGllbnQgc2lkZQorICogYXV0aGVudGljYXRpb24g
c3VwcG9ydC4gQ3JlZGVudGlhbHMgYXJlIGV4cG9zZWQgdGhyb3VnaCB0aGUKKyAqICNXZWJLaXRD
cmVkZW50aWFsIG9iamVjdC4KKyAqCisgKiBJbiBjYXNlIHRoZSBjbGllbnQgYXBwbGljYXRpb24g
ZG9lcyBub3Qgd2lzaAorICogdG8gaGFuZGxlIHRoaXMgc2lnbmFsIFdlYktpdCB3aWxsIHByb3Zp
ZGUgYSBkZWZhdWx0IGhhbmRsZXIuIFRvIGhhbmRsZQorICogYXV0aGVudGljYXRpb24gYXN5bmNo
cm9ub3VzbHksIHNpbXBseSBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZQorICog
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IG9iamVjdC4KKyAqLworCitzdHJ1Y3QgX1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUgeworICAgIFJlZlB0cjxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICBib29sIHByaXZh
dGVCcm93c2luZ0VuYWJsZWQ7CisgICAgYm9vbCBoYW5kbGVkUmVxdWVzdDsKKyAgICBDU3RyaW5n
IGhvc3Q7CisgICAgQ1N0cmluZyByZWFsbTsKK307CisKK1dFQktJVF9ERUZJTkVfVFlQRShXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QsIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0LCBH
X1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RE
aXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QqIHJlcXVlc3QgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmplY3QpOworCisg
ICAgLy8gTWFrZSBzdXJlIHRoZSByZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9yZSBmaW5h
bGl6aW5nLgorICAgIGlmICghcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QpCisgICAgICAg
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKKworICAgIEdf
T0JKRUNUX0NMQVNTKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X3BhcmVudF9jbGFzcykt
PmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfY2xhc3NfaW5pdChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcyogcmVx
dWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0RGlzcG9zZTsKK30KKworV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIGJvb2wgcHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSBX
RUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVU
SEVOVElDQVRJT05fUkVRVUVTVCwgTlVMTCkpOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlID0gYXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgcmVxdWVzdC0+
cHJpdi0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7Cisg
ICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKK0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIHdl
YmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdEdldEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdC0+
cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHM6CisgKiBAcmVxdWVz
dDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRo
ZXIgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhpcworICogI1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCBzaG91bGQgYWxsb3cgdGhlIHN0b3JhZ2Ugb2YgY3Jl
ZGVudGlhbHMuCisgKiBUaGlzIHdpbGwgcmV0dXJuICVGQUxTRSBpZiB3ZWJraXQgZG9lc24ndCBz
dXBwb3J0IGNyZWRlbnRpYWwgc3RvcmluZworICogb3IgaWYgcHJpdmF0ZSBicm93c2luZyBpcyBl
bmFibGVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHdlYmtpdCBjYW4gc3RvcmUgY3JlZGVu
dGlhbHMgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2dib29s
ZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgRkFMU0Up
OworCisjaWYgRU5BQkxFKENSRURFTlRJQUxfU1RPUkFHRSkKKyAgICByZXR1cm4gIXJlcXVlc3Qt
PnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CisjZWxzZQorICAgIHJldHVybiBGQUxTRTsK
KyNlbmRpZgorfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9w
cm9wb3NlZF9jcmVkZW50aWFsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdAorICoKKyAqIEdldCB0aGUgI1dlYktpdENyZWRlbnRpYWwgb2YgdGhlIHByb3Bvc2Vk
IGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSB0aGF0IHdhcworICogc3RvcmVkIGZyb20gYSBwcmV2
aW91cyBzZXNzaW9uLiBUaGUgY2xpZW50IGNhbiB1c2UgdGhpcyBkaXJlY3RseSBmb3IKKyAqIGF1
dGhlbnRpY2F0aW9uIG9yIGNvbnN0cnVjdCB0aGVpciBvd24gI1dlYktpdENyZWRlbnRpYWwuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRDcmVkZW50aWFsIGVuY2Fw
c3VsYXRpbmcgY3JlZGVudGlhbCBkZXRhaWxzLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworV2Vi
S2l0Q3JlZGVudGlhbCogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2Vk
X2NyZWRlbnRpYWwoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJl
cXVlc3QpLCAwKTsKKworICAgIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNyZWRlbnRpYWwg
PSByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+cHJvcG9zZWRDcmVkZW50
aWFsKCktPmNvcmUoKTsKKyAgICBpZiAoY3JlZGVudGlhbC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHdlYmtpdENyZWRlbnRpYWxDcmVhdGUoY3JlZGVudGlhbCk7
Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2hvc3Q6Cisg
KiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogR2V0IHRo
ZSBob3N0IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgaXMgYXBwbGljYWJsZSB0
by4KKyAqCisgKiBSZXR1cm5zOiBUaGUgaG9zdCBvZiBAcmVxdWVzdC4KKyAqCisgKiBTaW5jZTog
Mi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
aG9zdChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCks
IDApOworCisgICAgcmVxdWVzdC0+cHJpdi0+aG9zdCA9IHJlcXVlc3QtPnByaXYtPmF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLT5wcm90ZWN0aW9uU3BhY2UoKS0+aG9zdCgpLnV0ZjgoKTsKKyAgICBy
ZXR1cm4gcmVxdWVzdC0+cHJpdi0+aG9zdC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQ6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogR2V0IHRoZSBwb3J0IHRoYXQgdGhpcyBhdXRoZW50
aWNhdGlvbiBjaGFsbGVuZ2UgaXMgYXBwbGljYWJsZSB0by4KKyAqCisgKiBSZXR1cm5zOiBUaGUg
cG9ydCBvZiBAcmVxdWVzdC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2d1aW50IHdlYmtpdF9h
dXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wb3J0KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVO
VElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJp
di0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5wb3J0KCk7Cit9
CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtOgorICog
QHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUg
cmVhbG0gdGhhdCB0aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRv
LgorICoKKyAqIFJldHVybnM6IFRoZSByZWFsbSBvZiBAcmVxdWVzdC4KKyAqCisgKiBTaW5jZTog
Mi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cmVhbG0oV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3Qp
LCAwKTsKKworICAgIHJlcXVlc3QtPnByaXYtPnJlYWxtID0gcmVxdWVzdC0+cHJpdi0+YXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5yZWFsbSgpLnV0ZjgoKTsKKyAg
ICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+cmVhbG0uZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWU6CisgKiBAcmVxdWVzdDogYSAjV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogR2V0IHRoZSBhdXRoZW50aWNhdGlvbiBz
Y2hlbWUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAqCisgKiBSZXR1cm5zOiBU
aGUgYXV0aGVudGljYXRpb24gc2NoZW1lIG9mIEByZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIK
KyAqLworV2ViS2l0QXV0aGVudGljYXRpb25TY2hlbWUgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3RfZ2V0X3NjaGVtZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVF
U1QocmVxdWVzdCksIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfVU5LTk9XTik7CisKKyAg
ICBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hF
TUVfREVGQVVMVCwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVEZWZhdWx0KTsK
KyAgICBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9T
Q0hFTUVfSFRUUF9CQVNJQywgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQ
QmFzaWMpOworICAgIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1NDSEVNRV9IVFRQX0RJR0VTVCwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVIVFRQRGlnZXN0KTsKKyAgICBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJ
VF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRNTF9GT1JNLCBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZUhUTUxGb3JtKTsKKyAgICBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfTlRMTSwgUHJvdGVjdGlvblNwYWNlQXV0aGVu
dGljYXRpb25TY2hlbWVOVExNKTsKKyAgICBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdF
QktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfTkVHT1RJQVRFLCBQcm90ZWN0aW9uU3BhY2VBdXRo
ZW50aWNhdGlvblNjaGVtZU5lZ290aWF0ZSk7CisgICAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0NMSUVOVF9DRVJUSUZJQ0FURV9SRVFV
RVNURUQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lQ2xpZW50Q2VydGlmaWNh
dGVSZXF1ZXN0ZWQpOworICAgIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FV
VEhFTlRJQ0FUSU9OX1NDSEVNRV9TRVJWRVJfVFJVU1RfRVZBTFVBVElPTl9SRVFVRVNURUQsIFBy
b3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVx
dWVzdGVkKTsKKyAgICBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5U
SUNBVElPTl9TQ0hFTUVfVU5LTk9XTiwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVVbmtub3duKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0QXV0aGVudGljYXRpb25T
Y2hlbWU+KHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm90ZWN0aW9u
U3BhY2UoKS0+YXV0aGVudGljYXRpb25TY2hlbWUoKSk7Cit9CisKKy8qKgorICogd2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5OgorICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoZSBhdXRo
ZW50aWNhdGlvbiBjaGFsbGVuZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcHJveHkgc2VydmVyIHJh
dGhlciB0aGFuIGFuICJvcmlnaW4iIHNlcnZlci4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBh
dXRoZW50aWNhdGlvbiBpcyBmb3IgYSBwcm94eSBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IFNpbmNlOiAyLjIKKyAqLworZ2Jvb2xlYW4gd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
aXNfZm9yX3Byb3h5KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChy
ZXF1ZXN0KSwgRkFMU0UpOworCisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLT5wcm90ZWN0aW9uU3BhY2UoKS0+aXNQcm94eSgpOworfQorCisvKioKKyAq
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcmV2aW91c19mYWlsdXJlczoKKyAq
IEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgbnVt
YmVyIG9mIHByZXZpb3VzIGZhaWx1cmVzIHRoYXQgaGF2ZSBiZWVuIGF0dGVtcHRlZCBmb3IgdGhp
cyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCisgKgorICogUmV0dXJuczogVGhlIG51bWJlciBv
ZiBwcmV2aW91cyBmYWlsdXJlcyBmb3IgQHJlcXVlc3QuCisgKgorICogU2luY2U6IDIuMgorICov
CitndWludCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJldmlvdXNfZmFpbHVy
ZXMoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAw
KTsKKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+
cHJldmlvdXNGYWlsdXJlQ291bnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9hdXRoZW50aWNhdGU6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0CisgKiBAY3JlZGVudGlhbDogKHRyYW5zZmVyIG5vbmUpOmEgI1dlYktpdENy
ZWRlbnRpYWwKKyAqCisgKiBBdXRoZW50aWNhdGUgdGhlICNXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QgdXNpbmcgdGhlICNXZWJLaXRDcmVkZW50aWFsCisgKiBzdXBwbGllZC4gVG8gYXV0aGVu
dGljYXRlIHdpdGhvdXQgY3JlZGVudGlhbHMsIHBhc3MgTlVMTCBhcyB0aGUgY3JlZGVudGlhbC4K
KyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3ZvaWQgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfYXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgV2Vi
S2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIGlmIChjcmVkZW50
aWFsKSAgICAgeworICAgICAgICBSZWZQdHI8V2ViQ3JlZGVudGlhbD4gd2ViQ3JlZGVudGlhbCA9
IFdlYkNyZWRlbnRpYWw6OmNyZWF0ZSh3ZWJraXRDcmVkZW50aWFsR2V0Q3JlZGVudGlhbChjcmVk
ZW50aWFsKSk7CisgICAgICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LT5saXN0ZW5lcigpLT51c2VDcmVkZW50aWFsKHdlYkNyZWRlbnRpYWwuZ2V0KCkpOworICAgIH0g
ZWxzZQorICAgICAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlz
dGVuZXIoKS0+dXNlQ3JlZGVudGlhbCgwKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVx
dWVzdCA9IHRydWU7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Y2FuY2VsOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoK
KyAqIENhbmNlbCB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLgorICoKKyAqIFNpbmNlOiAy
LjIKKyAqLwordm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwoV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgcmVxdWVz
dC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCktPmNhbmNlbCgpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zY2M0YWRkNTllM2FiYWMy
MTFmMTMzYWQwMDRjN2ZiYzExNDJjYTc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgKQEAgLTAs
MCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmlj
cyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJ
REVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Vi
a2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lm
bmRlZiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RfaAorI2RlZmluZSBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3RfaAorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0Q3JlZGVudGlhbC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05f
UkVRVUVTVCAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfdHlwZSgpKQorI2Rl
ZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9S
RVFVRVNULCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfQVVU
SEVOVElDQVRJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNULCBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19BVVRIRU5USUNB
VElPTl9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRf
SVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNUKSkKKyNk
ZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05f
UkVRVUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICAgICAgICBXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
Q2xhc3MgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IHsK
KyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNz
OworCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCisvKioK
KyAqIFdlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lOgorICogQFdFQktJVF9BVVRIRU5USUNBVElP
Tl9TQ0hFTUVfREVGQVVMVDogVGhlIGRlZmF1bHQgYXV0aGVudGljYXRpb24gc2NoZW1lIG9mIFdl
YktpdC4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUM6IEJhc2lj
IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBhcyBkZWZpbmVkIGluIFJGQyAyNjE3LgorICogQFdFQktJ
VF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9ESUdFU1Q6IERpZ2VzdCBhdXRoZW50aWNhdGlv
biBzY2hlbWUgYXMgZGVmaW5lZCBpbiBSRkMgMjYxNy4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fU0NIRU1FX0hUTUxfRk9STTogSFRNTCBGb3JtIGF1dGhlbnRpY2F0aW9uLgorICogQFdFQktJ
VF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfTlRMTTogTlRMTSBNaWNyb3NvZnQgcHJvcHJpZXRhcnkg
YXV0aGVudGljYXRpb24gc2NoZW1lLgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVf
TkVHT1RJQVRFOiBOZWdvdGlhdGUgKG9yIFNQTkVHTykgYXV0aGVudGljYXRpb24gc2NoZW1lIGFz
IGRlZmluZWQgaW4gUkZDIDQ1NTkuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9D
TElFTlRfQ0VSVElGSUNBVEVfUkVRVUVTVEVEOiBDbGllbnQgQ2VydGlmaWNhdGUgQXV0aGVudGlj
YXRpb24gKHNlZSBSRkMgMjI0NikuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9T
RVJWRVJfVFJVU1RfRVZBTFVBVElPTl9SRVFVRVNURUQ6IFNlcnZlciBUcnVzdCBBdXRoZW50aWNh
dGlvbi4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX1VOS05PV046IEF1dGhlbnRp
Y2F0aW9uIHNjaGVtZSB1bmtub3duLgorICoKKyAqIEVudW0gdmFsdWVzIHJlcHJlc2VudGluZyB0
aGUgYXV0aGVudGljYXRpb24gc2NoZW1lLgorICoKKyAqIFNpbmNlIDIuMgorICovCit0eXBlZGVm
IGVudW0geworICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfREVGQVVMVCA9IDEsCisg
ICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDID0gMiwKKyAgICBXRUJL
SVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfRElHRVNUID0gMywKKyAgICBXRUJLSVRfQVVU
SEVOVElDQVRJT05fU0NIRU1FX0hUTUxfRk9STSA9IDQsCisgICAgV0VCS0lUX0FVVEhFTlRJQ0FU
SU9OX1NDSEVNRV9OVExNID0gNSwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05F
R09USUFURSA9IDYsCisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9DTElFTlRfQ0VS
VElGSUNBVEVfUkVRVUVTVEVEID0gNywKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1F
X1NFUlZFUl9UUlVTVF9FVkFMVUFUSU9OX1JFUVVFU1RFRCA9IDgsCisgICAgV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOID0gMTAwLAorfSBXZWJLaXRBdXRoZW50aWNhdGlvblNj
aGVtZTsKKworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzICAgIChX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIFdlYktp
dENyZWRlbnRpYWwgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2Vk
X2NyZWRlbnRpYWwgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X2hvc3QgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVz
dCk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dl
dF9wb3J0ICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVl
c3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2dldF9yZWFsbSAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lCit3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lICAgICAgICAgICAgICAoV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5ICAgICAgICAgICAg
KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgZ3Vp
bnQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcmV2aW91c19mYWlsdXJlcyAg
IChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZSAgICAgICAgICAg
IChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q3JlZGVudGlhbCAg
ICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9jYW5jZWwgICAgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY5MTNmYmRhMjAw
ZjA5NTVkZWE2YmIwZDFhMDJmNjYyNmUzNzEwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZh
dGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHku
aCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKKyNpbmNsdWRlICJX
ZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2Via2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eSosIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CitXZWJLaXQ6OkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkqIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdEdldEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCopOworCisjZW5kaWYg
Ly8gV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNkMjFhNjliMzFiYmZiZTRkZjk3M2JjYmFlMTE5NzliYWI2MTUzMjgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFs
LmNwcApAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIKKworI2luY2x1ZGUgIldlYkNyZWRlbnRp
YWwuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IF9X
ZWJLaXRDcmVkZW50aWFsIHsKKyAgICBfV2ViS2l0Q3JlZGVudGlhbChjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJiBjb3JlQ3JlZGVudGlhbCkKKyAgICAgICAgOiBjcmVkZW50aWFsKGNvcmVDcmVk
ZW50aWFsKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpDcmVkZW50aWFsIGNyZWRlbnRp
YWw7CisgICAgQ1N0cmluZyB1c2VybmFtZTsKKyAgICBDU3RyaW5nIHBhc3N3b3JkOworfTsKKwor
R19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRDcmVkZW50aWFsLCB3ZWJraXRfY3JlZGVudGlhbCwg
d2Via2l0X2NyZWRlbnRpYWxfY29weSwgd2Via2l0X2NyZWRlbnRpYWxfZnJlZSkKKworV2ViS2l0
Q3JlZGVudGlhbCogd2Via2l0Q3JlZGVudGlhbENyZWF0ZShjb25zdCBXZWJDb3JlOjpDcmVkZW50
aWFsJiBjb3JlQ3JlZGVudGlhbCkKK3sKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFs
ID0gZ19zbGljZV9uZXcoV2ViS2l0Q3JlZGVudGlhbCk7CisgICAgbmV3IChjcmVkZW50aWFsKSBX
ZWJLaXRDcmVkZW50aWFsKGNvcmVDcmVkZW50aWFsKTsKKyAgICByZXR1cm4gY3JlZGVudGlhbDsK
K30KKworY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgd2Via2l0Q3JlZGVudGlhbEdldENyZWRl
bnRpYWwoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX2Fzc2VydChjcmVk
ZW50aWFsKTsKKworICAgIHJldHVybiBjcmVkZW50aWFsLT5jcmVkZW50aWFsOworfQorCisvKioK
KyAqIHdlYmtpdF9jcmVkZW50aWFsX2NvcHk6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3Jl
ZGVudGlhbAorICoKKyAqIE1ha2UgYSBjb3B5IG9mIHRoZSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IEEgY29weSBvZiBwYXNzZWQgaW4gI1dlYktp
dENyZWRlbnRpYWwKKyAqCisgKiBTaW5jZSAyLjIKKyAqLworV2ViS2l0Q3JlZGVudGlhbCogd2Vi
a2l0X2NyZWRlbnRpYWxfY29weShXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAg
IFdlYktpdENyZWRlbnRpYWwqIGNvcHkgPSBnX3NsaWNlX25ldyhXZWJLaXRDcmVkZW50aWFsKTsK
KyAgICBuZXcgKGNvcHkpIFdlYktpdENyZWRlbnRpYWwoKmNyZWRlbnRpYWwpOworICAgIHJldHVy
biBjb3B5OworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWU6CisgKiBAY3JlZGVu
dGlhbDogKHRyYW5zZmVyIGZ1bGwpOiBBICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogRnJlZSB0
aGUgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIuMgorICovCit2b2lkIHdlYmtp
dF9jcmVkZW50aWFsX2ZyZWUoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBj
cmVkZW50aWFsLT5+V2ViS2l0Q3JlZGVudGlhbCgpOworICAgIGdfc2xpY2VfZnJlZShXZWJLaXRD
cmVkZW50aWFsLCBjcmVkZW50aWFsKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9u
ZXc6CisgKiBAdXNlcm5hbWU6IFRoZSB1c2VybmFtZSBmb3IgdGhlIG5ldyBjcmVkZW50aWFsCisg
KiBAcGFzc3dvcmQ6IFRoZSBwYXNzd29yZCBmb3IgdGhlIG5ldyBjcmVkZW50aWFsCisgKiBAcGVy
c2lzdGVuY2U6IFRoZSAjV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIG9mIHRoZSBuZXcgY3Jl
ZGVudGlhbAorICoKKyAqIENyZWF0ZSBhIG5ldyBjcmVkZW50aWFsIGZyb20gdGhlIHByb3ZpZGVk
IHVzZXJuYW1lLCBwYXNzd29yZCBhbmQgcGVyc2lzdGVuY2UgbW9kZS4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgZnVsbCk6IEEgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIu
MgorICovCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRfY3JlZGVudGlhbF9uZXcoY29uc3QgZ2No
YXIqIHVzZXJuYW1lLCBjb25zdCBnY2hhciogcGFzc3dvcmQsIFdlYktpdENyZWRlbnRpYWxQZXJz
aXN0ZW5jZSBwZXJzaXN0ZW5jZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh1c2VybmFt
ZSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwocGFzc3dvcmQsIDApOworCisgICAgcmV0
dXJuIHdlYmtpdENyZWRlbnRpYWxDcmVhdGUoV2ViQ29yZTo6Q3JlZGVudGlhbChTdHJpbmc6OmZy
b21VVEY4KHVzZXJuYW1lKSwgU3RyaW5nOjpmcm9tVVRGOChwYXNzd29yZCksIHN0YXRpY19jYXN0
PFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZT4ocGVyc2lzdGVuY2UpKSk7Cit9CisKKy8q
KgorICogd2Via2l0X2NyZWRlbnRpYWxfZ2V0X3VzZXJuYW1lOgorICogQGNyZWRlbnRpYWw6IGEg
I1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBHZXQgdGhlIHVzZXJuYW1lIGN1cnJlbnRseSBoZWxk
IGJ5IHRoaXMgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogUmV0dXJuczogVGhlIHVzZXJuYW1l
IHN0b3JlZCBpbiB0aGUgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIuMgorICov
Citjb25zdCBnY2hhciogd2Via2l0X2NyZWRlbnRpYWxfZ2V0X3VzZXJuYW1lKFdlYktpdENyZWRl
bnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY3JlZGVudGlh
bCwgMCk7CisKKyAgICBjcmVkZW50aWFsLT51c2VybmFtZSA9IGNyZWRlbnRpYWwtPmNyZWRlbnRp
YWwudXNlcigpLnV0ZjgoKTsKKyAgICByZXR1cm4gY3JlZGVudGlhbC0+dXNlcm5hbWUuZGF0YSgp
OworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZDoKKyAqIEBjcmVk
ZW50aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogR2V0IHRoZSBwYXNzd29yZCBjdXJy
ZW50bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFJldHVybnM6IFRo
ZSBwYXNzd29yZCBzdG9yZWQgaW4gdGhlICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNpbmNl
OiAyLjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZChX
ZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNyZWRlbnRpYWwsIDApOworCisgICAgY3JlZGVudGlhbC0+cGFzc3dvcmQgPSBjcmVkZW50aWFs
LT5jcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpOworICAgIHJldHVybiBjcmVkZW50aWFsLT5w
YXNzd29yZC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2NyZWRlbnRpYWxfaGFzX3Bhc3N3
b3JkOgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBEZXRlcm1p
bmUgd2hldGhlciB0aGlzIGNyZWRlbnRpYWwgaGFzIGEgcGFzc3dvcmQgc3RvcmVkLgorICoKKyAq
IFJldHVybnM6ICVUUlVFIGlmIHRoZSBjcmVkZW50aWFsIGhhcyBhIHBhc3N3b3JkIG9yICVGQUxT
RSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICovCitnYm9vbGVhbiB3ZWJraXRfY3Jl
ZGVudGlhbF9oYXNfcGFzc3dvcmQoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCBGQUxTRSk7CisKKyAgICByZXR1cm4g
Y3JlZGVudGlhbC0+Y3JlZGVudGlhbC5oYXNQYXNzd29yZCgpOworfQorCisvKioKKyAqIHdlYmtp
dF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZToKKyAqIEBjcmVkZW50aWFsOiBhICNXZWJLaXRD
cmVkZW50aWFsCisgKgorICogR2V0IHRoZSBwZXJzaXN0ZW5jZSBtb2RlIGN1cnJlbnRseSBoZWxk
IGJ5IHRoaXMgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogUmV0dXJuczogVGhlICNXZWJLaXRD
cmVkZW50aWFsUGVyc2lzdGVuY2Ugc3RvcmVkIGluIHRoZSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAq
CisgKiBTaW5jZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZSB3ZWJraXRf
Y3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCBXRUJLSVRfQ1JFREVOVElB
TF9QRVJTSVNURU5DRV9OT05FKTsKKworICAgIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSwgV2ViQ29yZTo6Q3JlZGVudGlhbFBl
cnNpc3RlbmNlTm9uZSk7CisgICAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRf
Q1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTiwgV2ViQ29yZTo6Q3JlZGVudGlhbFBl
cnNpc3RlbmNlRm9yU2Vzc2lvbik7CisgICAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
RUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9QRVJNQU5FTlQsIFdlYkNvcmU6OkNyZWRlbnRp
YWxQZXJzaXN0ZW5jZVBlcm1hbmVudCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZT4oY3JlZGVudGlhbC0+Y3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgp
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENyZWRlbnRpYWwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENy
ZWRlbnRpYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOTRiNzY3YWY4NTljMmJlZGEzNTJhZTc1ZjUyMzliZjM2
Zjc3Njg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q3JlZGVudGlhbC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
ZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01Q
SUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRl
ZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRDcmVkZW50aWFsX2gKKyNkZWZp
bmUgV2ViS2l0Q3JlZGVudGlhbF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX1RZUEVfQ1JFREVOVElBTCAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5cGUoKSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdENyZWRlbnRpYWwgV2ViS2l0Q3JlZGVudGlhbDsKKworLyoq
CisgKiBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2U6CisgKiBAV0VCS0lUX0NSRURFTlRJQUxf
UEVSU0lTVEVOQ0VfTk9ORTogQ3JlZGVudGlhbCBkb2VzIG5vdCBwZXJzaXN0CisgKiBAV0VCS0lU
X0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT046IENyZWRlbnRpYWwgcGVyc2lzdHMg
Zm9yIHNlc3Npb24gb25seQorICogQFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX1BFUk1B
TkVOVDogQ3JlZGVudGlhbCBwZXJzaXN0cyBwZXJtYW5lbnRseQorICoKKyAqIEVudW0gdmFsdWVz
IHJlcHJlc2VudGluZyB0aGUgZHVyYXRpb24gZm9yIHdoaWNoIGEgY3JlZGVudGlhbCBwZXJzaXN0
cy4KKyAqCisgKiBTaW5jZSAyLjIKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfQ1JF
REVOVElBTF9QRVJTSVNURU5DRV9OT05FLAorICAgIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RF
TkNFX0ZPUl9TRVNTSU9OLAorICAgIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX1BFUk1B
TkVOVAorfSBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2U7CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF9jcmVkZW50aWFsX2dldF90eXBlICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lU
X0FQSSBXZWJLaXRDcmVkZW50aWFsICoKK3dlYmtpdF9jcmVkZW50aWFsX2NvcHkgICAgICAgICAg
ICAgICAgIChXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9jcmVkZW50aWFsX2ZyZWUgICAgICAgICAgICAgICAgIChXZWJL
aXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIFdlYktp
dENyZWRlbnRpYWwgKgord2Via2l0X2NyZWRlbnRpYWxfbmV3ICAgICAgICAgICAgICAgICAgKGNv
bnN0IGdjaGFyICAgICAgICAgICAgICAgICAqdXNlcm5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICpwYXNzd29y
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDcmVkZW50
aWFsUGVyc2lzdGVuY2UgIHBlcnNpc3RlbmNlKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAq
Cit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNlcm5hbWUgICAgICAgICAoV2ViS2l0Q3JlZGVudGlh
bCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3
ZWJraXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQgICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAg
ICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2Ny
ZWRlbnRpYWxfaGFzX3Bhc3N3b3JkICAgICAgICAgKFdlYktpdENyZWRlbnRpYWwgICAgICAgICAg
ICAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNl
Cit3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UgICAgICAoV2ViS2l0Q3JlZGVudGlh
bCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFs
UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVu
dGlhbFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjdiYzdkMmM4YWMzNWVkMDVkOTc4MDRlZjQzMTU5
NWM3YjE3NWRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdENyZWRlbnRpYWxQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0
Q3JlZGVudGlhbFByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlhbC5oIgorI2lu
Y2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4K
KworV2ViS2l0Q3JlZGVudGlhbCogd2Via2l0Q3JlZGVudGlhbENyZWF0ZShjb25zdCBXZWJDb3Jl
OjpDcmVkZW50aWFsJik7Citjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiB3ZWJraXRDcmVkZW50
aWFsR2V0Q3JlZGVudGlhbChXZWJLaXRDcmVkZW50aWFsKik7CisKKyNlbmRpZiAvLyBXZWJLaXRD
cmVkZW50aWFsUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDI5NDk3MDkwZGI2MDdkYmNhOWYwMWFiOWY0NGM5
MzI3ZTQ4MjFjMWYuLmFiOTc5MGIyNjFiMDkzMDAyYjIxZTFkNzg1Y2M3OWRkZWJjODNhM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
Y3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5o
IgogI2luY2x1ZGUgIldlYkRhdGEuaCIKICNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZy5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0Q29udGV4dE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUl0ZW1Q
cml2YXRlLmgiCkBAIC0xMTksNiArMTIwLDggQEAgZW51bSB7CiAKICAgICBXRUJfUFJPQ0VTU19D
UkFTSEVELAogCisgICAgQVVUSEVOVElDQVRFLAorCiAgICAgTEFTVF9TSUdOQUwKIH07CiAKQEAg
LTQyOSw2ICs0MzIsMTQgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZp
Y29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyhXZWJLaXRXZWJWaWV3KgogICAgIHByaXYtPmZhdmlj
b25DaGFuZ2VkSGFuZGxlcklEID0gMDsKIH0KIAorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZp
ZXdBdXRoZW50aWNhdGUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50
aWFsU3RvcmFnZU1vZGUgPSB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9j
cmVkZW50aWFscyhyZXF1ZXN0KSA/IEFsbG93UGVyc2lzdGVudFN0b3JhZ2UgOiBEaXNhbGxvd1Bl
cnNpc3RlbnRTdG9yYWdlOworICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVudGljYXRpb25E
aWFsb2coV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyksIHdlYmtpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nTmV3KHJlcXVlc3QsIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSkpOworCisgICAgcmV0dXJu
IFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIGZpbGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFj
ayhHdGtEaWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJl
cXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgR1JlZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+
IGFkb3B0ZWRSZXF1ZXN0ID0gYWRvcHRHUmVmKHJlcXVlc3QpOwpAQCAtNjA1LDYgKzYxNiw3IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFz
cyogd2ViVmlld0NsYXNzKQogICAgIHdlYlZpZXdDbGFzcy0+ZGVjaWRlX3BvbGljeSA9IHdlYmtp
dFdlYlZpZXdEZWNpZGVQb2xpY3k7CiAgICAgd2ViVmlld0NsYXNzLT5wZXJtaXNzaW9uX3JlcXVl
c3QgPSB3ZWJraXRXZWJWaWV3UGVybWlzc2lvblJlcXVlc3Q7CiAgICAgd2ViVmlld0NsYXNzLT5y
dW5fZmlsZV9jaG9vc2VyID0gd2Via2l0V2ViVmlld1J1bkZpbGVDaG9vc2VyOworICAgIHdlYlZp
ZXdDbGFzcy0+YXV0aGVudGljYXRlID0gd2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZTsKIAogICAg
IC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6d2ViLWNvbnRleHQ6CkBAIC0xMzY2LDYgKzEzNzgs
MzkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmll
d0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgIDAsCiAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X0JPT0xFQU5fX1ZPSUQsCiAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAwKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdFdlYlZpZXc6OmF1dGhlbnRpY2F0ZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBA
cmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgICAgICoKKyAgICAgKiBU
aGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlIHVzZXIgaXMgY2hhbGxlbmdlZCB3aXRoIEhU
VFAKKyAgICAgKiBhdXRoZW50aWNhdGlvbi4gVG8gbGV0IHRoZSAgYXBwbGljYXRpb24gYWNjZXNz
IG9yIHN1cHBseQorICAgICAqIHRoZSBjcmVkZW50aWFscyBhcyB3ZWxsIGFzIHRvIGFsbG93IHRo
ZSBjbGllbnQgYXBwbGljYXRpb24KKyAgICAgKiB0byBlaXRoZXIgY2FuY2VsIHRoZSByZXF1ZXN0
IG9yIHBlcmZvcm0gdGhlIGF1dGhlbnRpY2F0aW9uLAorICAgICAqIHRoZSBzaWduYWwgd2lsbCBw
YXNzIGFuIGluc3RhbmNlIG9mIHRoZQorICAgICAqICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QgaW4gdGhlIEByZXF1ZXN0IGFyZ3VtZW50LgorICAgICAqIFRvIGhhbmRsZSB0aGlzIHNpZ25h
bCBhc3luY2hyb25vdXNseSB5b3Ugc2hvdWxkIGtlZXAgYSByZWYKKyAgICAgKiBvZiB0aGUgcmVx
dWVzdCBhbmQgcmV0dXJuIFRSVUUuIFRvIGRpc2FibGUgSFRUUCBhdXRoZW50aWNhdGlvbgorICAg
ICAqIGVudGlyZWx5LCBjb25uZWN0IHRvIHRoaXMgc2lnbmFsIGFuZCBzaW1wbHkgcmV0dXJuICVU
UlVFOworICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBydW4g
YSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uCisgICAgICogZGlhbG9nIGFzeW5jaHJvbm91c2x5IGZv
ciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICAgICAqCisgICAgICogUmV0dXJuczogJVRS
VUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVu
dC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAg
ICoKKyAgICAgKiBTaW5jZTogMi4yCisgICAgICovCisgICAgc2lnbmFsc1tBVVRIRU5USUNBVEVd
ID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJhdXRoZW50aWNhdGUiLAorICAgICAgICAgICAgR19U
WVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgYXV0
aGVudGljYXRlKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxl
ZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
Qk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJl
ciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElP
Tl9SRVFVRVNUKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29sIGlzTG9hZGluZykKQEAgLTE3MzgsMTMgKzE3ODMs
MTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24KIAogdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7Ci0gICAgQ3Jl
ZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZTsKLSAgICBpZiAod2Via2l0
X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHdlYlZpZXcpKSkKLSAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gRGlz
YWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKLSAgICBlbHNlCi0gICAgICAgIGNyZWRlbnRpYWxTdG9y
YWdlTW9kZSA9IEFsbG93UGVyc2lzdGVudFN0b3JhZ2U7Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFz
ZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY3Jl
ZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisgICAgZ2Jvb2xlYW4gcHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dl
Yl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CisgICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0Q3JlYXRlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJW
aWV3LCBzaWduYWxzW0FVVEhFTlRJQ0FURV0sIDAsIHJlcXVlc3QuZ2V0KCksICZyZXR1cm5WYWx1
ZSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0luc2VjdXJlQ29udGVudERldGVjdGVkKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50IHR5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXgg
YjIzZDdmZmIxM2EwOGYwOTU0ZWNhMzU0Y2U4NmVjNTcwNzNjYTFkNy4uYTRkNmU0MzllY2E3MjZl
OTA2Mzc2MTMyMTZhNTE0NzdlYjdhZTk3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBX
ZWJLaXRXZWJWaWV3X2gKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5o
PgpAQCAtMjQyLDYgKzI0Myw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRJbnNlY3VyZUNv
bnRlbnRFdmVudCAgIGV2ZW50KTsKICAgICBnYm9vbGVhbiAgICgqIHdlYl9wcm9jZXNzX2NyYXNo
ZWQpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92aWV3KTsKIAorICAg
IGdib29sZWFuICAgKCogYXV0aGVudGljYXRlKSAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKICAg
ICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9y
ZXNlcnZlZDEpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsK
QEAgLTI0OSw3ICsyNTIsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQ1KSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ2KSAodm9pZCk7Ci0gICAg
dm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ3KSAodm9pZCk7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCAyZmE3ZWJhY2ZkYzYyN2ZiMjQwOTRmMDBiZTZiNzEy
ZjhkMmQ0M2NiLi5kNzY5ZTJhNTRiOWVkMzJmYTQxOGE4MjFhMmNlMDYxODE5NTA3NDQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTEzLDYgKzEzLDcgQEAKICAgICA8dGl0bGU+Q2xhc3MgT3Zl
cnZpZXc8L3RpdGxlPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJDb250ZXh0
LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJWaWV3LnhtbCIvPgor
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEJhY2tGb3J3YXJkTGlzdC54bWwi
Lz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS54
bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0U2V0dGluZ3MueG1sIi8+CkBA
IC01Myw1ICs1NCwxMSBAQAogICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+CiAgICAgPHRpdGxlPklu
ZGV4PC90aXRsZT4KICAgPC9pbmRleD4KKyAgCisgIDxpbmRleCBpZD0iYXBpLWluZGV4LTItMiIg
cm9sZT0iMi4yIj4KKyAgICA8dGl0bGU+SW5kZXggb2YgbmV3IHN5bWJvbHMgaW4gMi4yPC90aXRs
ZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTIuMi54bWwiPjx4aTpmYWxs
YmFjayAvPjwveGk6aW5jbHVkZT4KKyAgPC9pbmRleD4gIAorICAKICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL2Fubm90YXRpb24tZ2xvc3NhcnkueG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1
ZGU+CiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBmMjgwYzYyZGYyOWYy
NmIzMjI2MmNkYWRmMmU4ZGEzM2MxZDliOTkwLi4xMzViNTRkZWM1Mzk4NGRmMjRhZjY2ZDZhNjYz
ZGNmMGI4OGViZWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTE3OCw2ICsxNzgs
NTAgQEAgV2ViS2l0V2ViVmlld1ByaXZhdGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklM
RT5XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QKK1dlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lCit3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9hdXRoZW50aWNhdGUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nh
bmNlbAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMK
K3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0Cit3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcG9ydAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X3ByZXZpb3VzX2ZhaWx1cmVzCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJv
cG9zZWRfY3JlZGVudGlhbAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxt
Cit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lCit3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcworV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJ
T05fUkVRVUVTVAorV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QKK1dFQktJVF9BVVRIRU5U
SUNBVElPTl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVF9HRVRf
Q0xBU1MKK1dFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUCitXRUJLSVRfSVNfQVVUSEVO
VElDQVRJT05fUkVRVUVTVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Z2V0X3R5cGUKKworPFNVQlNFQ1RJT04+CitXZWJLaXRDcmVkZW50aWFsCitXZWJLaXRDcmVkZW50
aWFsUGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX25ldword2Via2l0X2NyZWRlbnRpYWxf
Y29weQord2Via2l0X2NyZWRlbnRpYWxfZnJlZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3
b3JkCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFs
X2dldF91c2VybmFtZQord2Via2l0X2NyZWRlbnRpYWxfaGFzX3Bhc3N3b3JkCisKKzxTVUJTRUNU
SU9OIFN0YW5kYXJkPgorV0VCS0lUX1RZUEVfQ1JFREVOVElBTAord2Via2l0X2NyZWRlbnRpYWxf
Z2V0X3R5cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRCYWNrRm9yd2Fy
ZExpc3Q8L0ZJTEU+CiBXZWJLaXRCYWNrRm9yd2FyZExpc3QKIHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfbGVuZ3RoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggNWQ5N2Y2OWJlZDVkZDdmM2E3NjExYThk
YTlkZmU3ODgzZmRhNDQ0NS4uYWI2MjBmMGQxMmEzODcwZjQ3ZWU2ZGMyOTNlNTVkOTBkYTc5YWU4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlcwpAQCAtMjQsMyArMjQsNSBAQCB3ZWJraXRfY29udGV4dF9tZW51X2l0
ZW1fZ2V0X3R5cGUKIHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfdHlwZQogd2Via2l0X3dlYl9l
eHRlbnNpb25fZ2V0X3R5cGUKIHdlYmtpdF93ZWJfcGFnZV9nZXRfdHlwZQord2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUKK3dlYmtpdF9jcmVkZW50aWFsX2dldF90eXBlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDg4
ZDc3ZjI4NjBlMDYwYTUwNmFiOWJiNWM4MmZhMjhhZmE2NmIxN2EuLjY4MzA1MGYzNWIyNTkwYWFj
YWM1ZDU4YjVlZWJhZDg4ZTExYTAwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTE4
LDYgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0
VGVzdFNlcnZlci5oIgogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVl
UmVmLmg+CkBAIC0yNiw2ICsyNyw4IEBACiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAorc3RhdGljIFdlYktpdFRlc3RT
ZXJ2ZXIqIGtTZXJ2ZXI7CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RGVmYXVsdENvbnRleHQo
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgZ19hc3NlcnQod2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldykgPT0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF9kZWZhdWx0KCkpOwpAQCAtNzkzLDYgKzc5Niw1NSBAQCBzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0ZpbGVDaG9vc2VyUmVxdWVzdChGaWxlQ2hvb3NlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiAgICAgd2Via2l0X2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0X2NhbmNlbChmaWxlQ2hvb3Nl
clJlcXVlc3QpOwogfQogCitjbGFzcyBBdXRoZW50aWNhdGlvblRlc3Q6IHB1YmxpYyBXZWJWaWV3
VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShBdXRoZW50aWNhdGlv
blRlc3QpOworCisgICAgQXV0aGVudGljYXRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhydW5BdXRo
ZW50aWNhdGlvbkNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkF1dGhlbnRpY2F0aW9u
VGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcnVuQXV0aGVudGljYXRpb25DYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0LCBBdXRoZW50
aWNhdGlvblRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5ydW5BdXRoZW50aWNhdGlv
bihyZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgdm9pZCBydW5B
dXRoZW50aWNhdGlvbihXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCisgICAg
eworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KHJlcXVlc3QpKTsKKyAgICAgICAgbV9hdXRoZW50aWNhdGlvblJlcXVlc3QgPSByZXF1ZXN0Owor
CisgICAgICAgIGNvbnN0IGdjaGFyICpob3N0ID0gd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X2hvc3QocmVxdWVzdCk7CisgICAgICAgIGd1aW50IHBvcnQgPSB3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydChyZXF1ZXN0KTsKKyAgICAgICAgY29uc3QgZ2NoYXIg
KnJlYWxtID0gd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtKHJlcXVlc3Qp
OworICAgICAgICBXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZSBzY2hlbWUgPSB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpOworICAgICAgICBnYm9vbGVh
biBpc1Byb3h5ID0gd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5KHJl
cXVlc3QpOworICAgICAgICBndWludCBwcmV2aW91c0ZhaWx1cmVzID0gd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfZ2V0X3ByZXZpb3VzX2ZhaWx1cmVzKHJlcXVlc3QpOworCisgICAgICAg
IGdfYXNzZXJ0X2NtcHN0cihyZWFsbSwgPT0sICJteSByZWFsbSIpOworICAgICAgICBnX2Fzc2Vy
dChzY2hlbWUgPT0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDKTsKKyAg
ICAgICAgZ19hc3NlcnQoaXNQcm94eSA9PSBGQUxTRSk7CisKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3Q+IG1fYXV0aGVudGljYXRpb25SZXF1ZXN0OworfTsKKworc3Rh
dGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QoQXV0aGVudGljYXRpb25U
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiL2h0dHAtYXV0aC10ZXN0IikuZGF0YSgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKK30KKwogY2xhc3MgRnVsbFNjcmVlbkNsaWVudFRlc3Q6IHB1
YmxpYyBXZWJWaWV3VGVzdCB7CiBwdWJsaWM6CiAgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShG
dWxsU2NyZWVuQ2xpZW50VGVzdCk7CkBAIC0xMjI5LDggKzEyODEsMjggQEAgc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdTbmFwc2hvdChTbmFwc2hvdFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQogICAgIGdfYXNzZXJ0KHRlc3QtPmdldFNuYXBzaG90QW5kQ2FuY2VsKCkpOwogfQogCitz
dGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdl
KiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRl
eHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9E
X0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NU
QVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgaWYg
KGdfc3RyX2VxdWFsKHBhdGgsICIvaHR0cC1hdXRoLXRlc3QiKSkgeworICAgICAgICBzb3VwX21l
c3NhZ2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIldXVy1BdXRo
ZW50aWNhdGUiLCAiQmFzaWMgcmVhbG09XCJteSByZWFsbVwiIik7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCk7CisgICAg
fQorICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0
U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIEF1dGhl
bnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uIiwgdGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3QpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4
dCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tY2hhcnNl
dCIsIHRlc3RXZWJWaWV3Q3VzdG9tQ2hhcnNldCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJzZXR0aW5ncyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOwpAQCAtMTI1NSw0
ICsxMzI3LDUgQEAgdm9pZCBiZWZvcmVBbGwoKQogCiB2b2lkIGFmdGVyQWxsKCkKIHsKKyAgICBk
ZWxldGUga1NlcnZlcjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaAppbmRleCBkMTg0MzE1MjgxYTgzNjNiODEwNTc4YzM4OGYxZTM2ZWEzY2FiMmIyLi43MGUz
YjQzMzA1OTNlZjZkMGZkNzg4YmEyZTkzMzFmNDIwZjg5Nzg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yMywxMiArMjMsMTQgQEAKIAogI2RlZmlu
ZSBfX1dFQktJVDJfSF9JTlNJREVfXwogCisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlz
dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnUuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdENvbnRleHRNZW51QWN0aW9ucy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4
dE1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+Cisj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDcmVkZW50aWFsLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207922</attachid>
            <date>2013-08-01 07:28:08 -0700</date>
            <delta_ts>2013-08-08 00:41:13 -0700</delta_ts>
            <desc>Rebased to master, addressed all comments and improved unit test</desc>
            <filename>bug-99352-20130801152832.patch</filename>
            <type>text/plain</type>
            <size>60898</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNDY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGE4NzRkYTQyNWNmMTI2
ODVmNWQxYzY3NGU3N2FmZDZlOGNiYzk5NC4uNjY3ZDI4ODQ0MDVmOTFjMTc3NjY1NGU4NWY2ZWI2
MWM4ZWY3YWFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDEzLTA4LTAxICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRl
IHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIHRo
ZWlyIG93biBhdXRoZW50aWNhdGlvbgorICAgICAgICB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5n
ZWQgd2l0aCBIVFRQIGF1dGhlbnRpY2F0aW9uLiBUaGUKKyAgICAgICAgY3JlZGVudGlhbCBpcyBl
eHBvc2VkIHRocm91Z2ggYSBuZXcgY2xhc3MgV2ViS2l0Q3JlZGVudGlhbC4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAob2tCdXR0b25DbGlja2VkKTogVXNl
IG5ldyBBUEkgZm9yIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoY2FuY2VsQnV0dG9uQ2xpY2tl
ZCk6IERpdHRvLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXpl
KTogR2V0CisgICAgICAgIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIGZyb20gcmVxdWVzdCBvYmpl
Y3QuCisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyk6IERpdHRvLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmNw
cDogQWRkZWQgbmV3CisgICAgICAgIGNsYXNzIHJlcHJlc2VudGluZyBhIEhUVFAgYXV0aGVudGlj
YXRpb24gcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdERpc3Bv
c2UpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUpOgorICAgICAgICAo
d2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgor
ICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlh
bHMpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2Vk
X2NyZWRlbnRpYWwpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X2hvc3QpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQp
OgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtKToKKyAg
ICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUpOgorICAgICAg
ICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5KToKKyAgICAgICAg
KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcmV2aW91c19mYWlsdXJlX2NvdW50
KToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZSk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3RQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENy
ZWRlbnRpYWwuY3BwOiBBZGRlZCBuZXcgY2xhc3MgdG8KKyAgICAgICAgc3VwcG9ydCBjcmVkZW50
aWFscyBmb3IgSFRUUCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgKF9XZWJLaXRDcmVkZW50aWFs
OjpfV2ViS2l0Q3JlZGVudGlhbCk6CisgICAgICAgICh3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKToK
KyAgICAgICAgKHdlYmtpdENyZWRlbnRpYWxHZXRDcmVkZW50aWFsKToKKyAgICAgICAgKHdlYmtp
dF9jcmVkZW50aWFsX25ldyk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9jb3B5KToKKyAg
ICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRp
YWxfZ2V0X3VzZXJuYW1lKToKKyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29y
ZCk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQpOgorICAgICAgICAo
d2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNpc3RlbmNlKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOiBBZGRlZCBhdXRoZW50aWNhdGUgc2lnbmFs
LgorICAgICAgICAod2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZSk6IERlZmF1bHQgc2lnbmFsIGhh
bmRsZXIgZm9yIGF1dGhlbnRpY2F0ZS4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19p
bml0KTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpOiBDcmVhdGUgYW4KKyAgICAgICAgYXV0aGVudGljYXRpb24gcmVxdWVzdCBhbmQg
ZW1pdCBpdCB3aXRoIGF1dGhlbnRpY2F0ZSBzaWduYWwuCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oOiBSZXBsYWNlZCByZXNlcnZlZCBmdW5jdGlvbgorICAgICAg
ICBwb2ludGVyIHNsb3Qgd2l0aCBmb3IgV2ViVmlld0NsYXNzIHdpdGggZnVuY3Rpb24gcG9pbnRl
ciB0bworICAgICAgICBhdXRoZW50aWNhdGUgc2lnbmFsIGhhbmRsZXIuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkZWQgbmV3IHNlY3Rp
b24gZm9yCisgICAgICAgIHRoZSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IERpdHRvLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlczogQWRkZWQgYXV0
aGVudGljYXRpb24KKyAgICAgICAgcmVxdWVzdCBhbmQgY3JlZGVudGlhbCB0eXBlcy4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHA6IENyZWF0
ZWQgYSBuZXcKKyAgICAgICAgdW5pdCB0ZXN0IGZvciBIVFRQIGF1dGhlbnRpY2F0aW9uLiBBIGxp
YnNvdXAgc2VydmVyIGNhbGxiYWNrCisgICAgICAgIGhhbmRsZXIgaXMgaW5zdGFsbGVkIHRoYXQg
Y3JlYXRlcyBzb3VwIG1lc3NhZ2VzIHdpdGggYXBwcm9wcmlhdGUKKyAgICAgICAgaGVhZGVycyB0
byB0ZXN0IEhUVFAgYXV0aGVudGljYXRpb24uCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRp
Y2F0aW9uUmVxdWVzdCk6IFRlc3QgdGhlIGF1dGhlbnRpY2F0aW9uCisgICAgICAgIHJlcXVlc3Qg
YW5kIGNyZWRlbnRpYWwgQVBJLgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkZWQgYXV0aGVudGlj
YXRpb24gdGVzdC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6IEFkZGVk
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCBhbmQKKyAgICAgICAgV2ViS2l0Q3JlZGVudGlh
bCB0byB3ZWJraXQyLmggaGVhZGVyIGZpbGUuCisKIDIwMTMtMDctMjkgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBt
YWtlIGRpc3RjaGVjay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGRjOTMzYzQy
YzlhNTEzODIwY2QzOTY5ZDY5ZjA5MTUwOWVmMjg5MmYuLjYyNmNlZDMzM2ZkNzRiZDVjYjM0NDMz
YTRjNDE3ODhkMjM1ZmIzZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtOTQs
MTIgKzk0LDE0IEBAIHdlYmtpdDJfaF9hcGkgKz0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9jcHAvV0tSZXRhaW5QdHIuaAogCiB3ZWJraXQyZ3RrX2hfYXBpICs9IFwKKwkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5oIFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbS5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCBcCisJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmggXAogCSQoV2ViS2l0
MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmggXApAQCAtNjUzLDYgKzY1NSw5IEBAIHdlYmtp
dDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNs
aWVudEltcGwuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3RQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEJhY2tGb3J3YXJkTGlzdC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRCYWNrRm9yd2FyZExpc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmggXApAQCAtNjcyLDYgKzY3Nyw5IEBAIHdl
YmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q29va2llTWFuYWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb29raWVNYW5hZ2VyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cu
Y3BwCmluZGV4IDA2OTlkYTdlZWQzMWM1NTQ1Y2U5MDczN2FjMmEwM2MyNTEwMGNjNzUuLjIzNzU1
OWU1OTJlYzQ2NDA1OGZmZTQ4NDZlNDE5YmI4MjRlZGY3ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAKQEAgLTIwLDE1ICsyMCwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgiCiAKKyNpbmNsdWRlICJBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5LmgiCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lv
bkxpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50
aWFsUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKIAogc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUg
ewotICAgIFJlZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50aWNhdGlv
bkNoYWxsZW5nZTsKLQorICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiBy
ZXF1ZXN0OwogICAgIEd0a1dpZGdldCogYXV0aFdpZGdldDsKICAgICBHdGtXaWRnZXQqIGRlZmF1
bHRCdXR0b247CiAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4dDsKQEAg
LTM2LDIzICszNywxOSBAQCBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0
ZSB7CiAKIFdFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZywgd2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZywgR1RLX1RZUEVfRVZFTlRfQk9YKQogCi1zdGF0aWMg
dm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50
aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlhbCkKLXsK
LSAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBhdXRoRGlhbG9n
LT5wcml2OwotICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT51
c2VDcmVkZW50aWFsKGNyZWRlbnRpYWwpOwotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lE
R0VUKGF1dGhEaWFsb2cpKTsKLX0KLQogc3RhdGljIHZvaWQgb2tCdXR0b25DbGlja2VkKEd0a0J1
dHRvbiosIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQogewogICAgIFdl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7
Ci0gICAgUmVmUHRyPFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50aWFs
OjpjcmVhdGUod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFsKFdFQktJ
VF9BVVRIRU5USUNBVElPTl9XSURHRVQocHJpdi0+YXV0aFdpZGdldCkpKTsKLSAgICB3ZWJraXRB
dXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCB3ZWJDcmVkZW50aWFs
LmdldCgpKTsKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0Q3JlZGVu
dGlhbENyZWF0ZSh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0ZUNyZWRlbnRpYWwoV0VC
S0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChwcml2LT5hdXRoV2lkZ2V0KSkpOworICAgIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShwcml2LT5yZXF1ZXN0LmdldCgp
LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwor
ICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGF1dGhEaWFsb2cpKTsKIH0KIAogc3Rh
dGljIHZvaWQgY2FuY2VsQnV0dG9uQ2xpY2tlZChHdGtCdXR0b24qLCBXZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZyogYXV0aERpYWxvZykKIHsKLSAgICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxv
Z0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCAwKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9hdXRoZW50aWNhdGUoYXV0aERpYWxvZy0+cHJpdi0+cmVxdWVzdC5nZXQoKSwgMCk7
CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoYXV0aERpYWxvZykpOwogfQogCiBz
dGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0luaXRpYWxpemUoV2ViS2l0QXV0
aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2csIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVk
ZW50aWFsU3RvcmFnZU1vZGUpCkBAIC04MCw3ICs3Nyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyog
YXV0CiAgICAgZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGJ1dHRvbkJveCksIGJ1dHRvbiwgRkFM
U0UsIFRSVUUsIDApOwogICAgIGd0a193aWRnZXRfc2hvdyhidXR0b24pOwogCi0gICAgYXV0aERp
YWxvZy0+cHJpdi0+YXV0aFdpZGdldCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3KGF1
dGhEaWFsb2ctPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5jb3JlKCksIGNyZWRlbnRp
YWxTdG9yYWdlTW9kZSk7CisgICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCA9IHdlYmtp
dEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3KHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdEdldEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGF1dGhEaWFsb2ctPnByaXYtPnJlcXVlc3QuZ2V0KCkpLT5j
b3JlKCksIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CiAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1godkJveCksIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQsIFRSVUUsIFRSVUUsIDAp
OwogICAgIGd0a193aWRnZXRfc2hvdyhhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0KTsKIApA
QCAtMTM4LDEwICsxMzUsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2Rp
YWxvZ19jbGFzc19pbml0KFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2wKICAgICB3aWRnZXRD
bGFzcy0+bWFwID0gd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXA7CiB9CiAKLUd0a1dpZGdl
dCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2Rl
KQorR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2RlKQogewog
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nID0gV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX0RJQUxPRyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05f
RElBTE9HLCBOVUxMKSk7Ci0gICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgPSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICBhdXRoRGlhbG9nLT5wcml2LT5y
ZXF1ZXN0ID0gcmVxdWVzdDsKICAgICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0luaXRpYWxp
emUoYXV0aERpYWxvZywgbW9kZSk7CiAgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aERpYWxvZyk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA3ZDRkZTJhNmQzZDgxOWNiMWM2ODcz
MDNkYmMxNWEwYzdkMTNlZTQyLi42MTBmYWQ2NTUxZGE1ZDI5NGIwZjk3MzZjMTRkYzgxZWJjMWYz
MGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5k
ZWYgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAogI2RlZmluZSBXZWJLaXRBdXRoZW50aWNh
dGlvbkRpYWxvZ19oCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5Lmgi
CisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCiAjaW5jbHVkZSAiV2Vi
S2l0QXV0aGVudGljYXRpb25XaWRnZXQuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAKQEAgLTQ4
LDcgKzQ4LDcgQEAgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNzIHsKIH07
CiAKIEdUeXBlIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsKLUd0a1dp
ZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZVByb3h5KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdldCogd2Vi
a2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Kiwg
Q3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjM0ZWM1ZGYwYTE1ZWY4NjM0MjI1OWQzNWNkNmY5
NDk4NmZiMzExMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwyOTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRGVjaXNpb25M
aXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3JlZGVudGlh
bFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQcm90ZWN0aW9uU3BhY2UuaCIKKyNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvKioKKyAqIFNF
Q1RJT046IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQFNob3J0X2Rlc2NyaXB0aW9u
OiBSZXByZXNlbnRzIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QKKyAqIEBUaXRsZTogV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3CisgKgor
ICogV2hlbmV2ZXIgYSBjbGllbnQgYXR0ZW1wdHMgdG8gbG9hZCBhIHBhZ2UgcHJvdGVjdGVkIGJ5
IEhUVFAKKyAqIGF1dGhlbnRpY2F0aW9uLCBjcmVkZW50aWFscyB3aWxsIG5lZWQgdG8gYmUgcHJv
dmlkZWQgdG8gYXV0aG9yaXplIGFjY2Vzcy4KKyAqIFRvIGFsbG93IHRoZSBjbGllbnQgdG8gZGVj
aWRlIGhvdyBpdCB3aXNoZXMgdG8gaGFuZGxlIGF1dGhlbnRpY2F0aW9uLAorICogV2ViS2l0IHdp
bGwgZmlyZSBhICNXZWJLaXRXZWJWaWV3OjphdXRoZW50aWNhdGUgc2lnbmFsIHdpdGggYQorICog
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IG9iamVjdCB0byBwcm92aWRlIGNsaWVudCBzaWRl
CisgKiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0LiBDcmVkZW50aWFscyBhcmUgZXhwb3NlZCB0aHJv
dWdoIHRoZQorICogI1dlYktpdENyZWRlbnRpYWwgb2JqZWN0LgorICoKKyAqIEluIGNhc2UgdGhl
IGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoCisgKiB0byBoYW5kbGUgdGhpcyBzaWdu
YWwgV2ViS2l0IHdpbGwgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlci4gVG8gaGFuZGxlCisgKiBh
dXRoZW50aWNhdGlvbiBhc3luY2hyb25vdXNseSwgc2ltcGx5IGluY3JlYXNlIHRoZSByZWZlcmVu
Y2UgY291bnQgb2YgdGhlCisgKiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgb2JqZWN0Lgor
ICovCisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSB7CisgICAg
UmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+IGF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlOworICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKKyAgICBib29sIGhhbmRsZWRS
ZXF1ZXN0OworICAgIENTdHJpbmcgaG9zdDsKKyAgICBDU3RyaW5nIHJlYWxtOworfTsKKworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0RF
RkFVTFQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdCk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRU
UF9CQVNJQywgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFzaWMpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1F
X0hUVFBfRElHRVNULCBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdl
c3QpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX0hUTUxfRk9STSwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVE1M
Rm9ybSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElP
Tl9TQ0hFTUVfTlRMTSwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVN
RV9ORUdPVElBVEUsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVnb3RpYXRl
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1ND
SEVNRV9DTElFTlRfQ0VSVElGSUNBVEVfUkVRVUVTVEVELCBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZUNsaWVudENlcnRpZmljYXRlUmVxdWVzdGVkKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9TRVJWRVJfVFJVU1Rf
RVZBTFVBVElPTl9SRVFVRVNURUQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
U2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOLCBQcm90ZWN0aW9uU3Bh
Y2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pOworCitXRUJLSVRfREVGSU5FX1RZUEUoV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdCwg
R19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqZWN0KTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZvcmUgZmlu
YWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQorICAgICAg
ICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisKKyAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9wYXJlbnRfY2xhc3Mp
LT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MqIHJl
cXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdERpc3Bvc2U7Cit9CisKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBib29sIHByaXZhdGVCcm93c2lu
Z0VuYWJsZWQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0g
V0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIHJlcXVlc3Qt
PnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCitBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiB3
ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3Qt
PnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmdldCgpOworfQorCisvKioKKyAqIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzOgorICogQHJlcXVl
c3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIERldGVybWluZSB3aGV0
aGVyIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAqICNX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgc2hvdWxkIGFsbG93IHRoZSBzdG9yYWdlIG9mIGNy
ZWRlbnRpYWxzLgorICogVGhpcyB3aWxsIHJldHVybiAlRkFMU0UgaWYgd2Via2l0IGRvZXNuJ3Qg
c3VwcG9ydCBjcmVkZW50aWFsIHN0b3JpbmcKKyAqIG9yIGlmIHByaXZhdGUgYnJvd3NpbmcgaXMg
ZW5hYmxlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB3ZWJraXQgY2FuIHN0b3JlIGNyZWRl
bnRpYWxzIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICovCitnYm9v
bGVhbiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCksIEZBTFNF
KTsKKworI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JBR0UpCisgICAgcmV0dXJuICFyZXF1ZXN0
LT5wcml2LT5wcml2YXRlQnJvd3NpbmdFbmFibGVkOworI2Vsc2UKKyAgICByZXR1cm4gRkFMU0U7
CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cHJvcG9zZWRfY3JlZGVudGlhbDoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRDcmVkZW50aWFsIG9mIHRoZSBwcm9wb3Nl
ZCBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgdGhhdCB3YXMKKyAqIHN0b3JlZCBmcm9tIGEgcHJl
dmlvdXMgc2Vzc2lvbi4gVGhlIGNsaWVudCBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9yCisgKiBh
dXRoZW50aWNhdGlvbiBvciBjb25zdHJ1Y3QgdGhlaXIgb3duICNXZWJLaXRDcmVkZW50aWFsLgor
ICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0Q3JlZGVudGlhbCBlbmNh
cHN1bGF0aW5nIGNyZWRlbnRpYWwgZGV0YWlscworICogb3IgJU5VTEwgaWYgdGhlcmUgaXMgbm8g
c3RvcmVkIGNyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRDcmVkZW50
aWFsKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlh
bChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCksIDAp
OworCisgICAgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCA9IHJlcXVlc3Qt
PnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm9wb3NlZENyZWRlbnRpYWwoKS0+Y29y
ZSgpOworICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICByZXR1cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShjcmVkZW50aWFsKTsKK30KKworLyoq
CisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdDoKKyAqIEByZXF1ZXN0
OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGhvc3QgdGhh
dCB0aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAq
IFJldHVybnM6IFRoZSBob3N0IG9mIEByZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwor
Y29uc3QgZ2NoYXIqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0KFdlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAg
ICByZXF1ZXN0LT5wcml2LT5ob3N0ID0gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFs
bGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5ob3N0KCkudXRmOCgpOworICAgIHJldHVybiByZXF1
ZXN0LT5wcml2LT5ob3N0LmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfcG9ydDoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIHBvcnQgdGhhdCB0aGlzIGF1dGhlbnRpY2F0aW9uIGNo
YWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAqIFJldHVybnM6IFRoZSBwb3J0IG9mIEBy
ZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworZ3VpbnQgd2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfZ2V0X3BvcnQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9S
RVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5hdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS0+cHJvdGVjdGlvblNwYWNlKCktPnBvcnQoKTsKK30KKworLyoqCisg
KiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG06CisgKiBAcmVxdWVzdDog
YSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogR2V0IHRoZSByZWFsbSB0aGF0
IHRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGlzIGFwcGxpY2FibGUgdG8uCisgKgorICog
UmV0dXJuczogVGhlIHJlYWxtIG9mIEByZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwor
Y29uc3QgZ2NoYXIqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbShXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCksIDApOworCisg
ICAgcmVxdWVzdC0+cHJpdi0+cmVhbG0gPSByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNo
YWxsZW5nZS0+cHJvdGVjdGlvblNwYWNlKCktPnJlYWxtKCkudXRmOCgpOworICAgIHJldHVybiBy
ZXF1ZXN0LT5wcml2LT5yZWFsbS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvZiB0
aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLgorICoKKyAqIFJldHVybnM6IFRoZSBhdXRoZW50
aWNhdGlvbiBzY2hlbWUgb2YgQHJlcXVlc3QuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJL
aXRBdXRoZW50aWNhdGlvblNjaGVtZSB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
c2NoZW1lKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0
KSwgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOKTsKKworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZT4ocmVxdWVzdC0+cHJpdi0+YXV0
aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5hdXRoZW50aWNhdGlvblNj
aGVtZSgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19m
b3JfcHJveHk6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Cisg
KgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBh
c3NvY2lhdGVkIHdpdGggYSBwcm94eSBzZXJ2ZXIgcmF0aGVyIHRoYW4gYW4gIm9yaWdpbiIgc2Vy
dmVyLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGlzIGZvciBhIHBy
b3h5IG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICovCitnYm9vbGVh
biB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkoV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7CisKKyAgICBy
ZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25T
cGFjZSgpLT5pc1Byb3h5KCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3RfZ2V0X3ByZXZpb3VzX2ZhaWx1cmVfY291bnQ6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogR2V0IG51bWJlciBvZiBwcmV2aW91cyBmYWls
dXJlcyB0aGF0IGhhdmUgYmVlbiBhdHRlbXB0ZWQgZm9yIHRoaXMgYXV0aGVudGljYXRpb24gY2hh
bGxlbmdlLgorICoKKyAqIFJldHVybnM6IFRoZSBudW1iZXIgb2YgcHJldmlvdXMgZmFpbHVyZXMg
Zm9yIEByZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworZ3VpbnQgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3ByZXZpb3VzX2ZhaWx1cmVfY291bnQoV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIHJldHVy
biByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+cHJldmlvdXNGYWlsdXJl
Q291bnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRo
ZW50aWNhdGU6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Cisg
KiBAY3JlZGVudGlhbDogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25lKTogQSAjV2ViS2l0Q3Jl
ZGVudGlhbAorICoKKyAqIEF1dGhlbnRpY2F0ZSB0aGUgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCB1c2luZyB0aGUgI1dlYktpdENyZWRlbnRpYWwKKyAqIHN1cHBsaWVkLiBUbyBjb250aW51
ZSB3aXRob3V0IGNyZWRlbnRpYWxzLCBwYXNzICVOVUxMIGFzIEBjcmVkZW50aWFsLgorICoKKyAq
IFNpbmNlOiAyLjIKKyAqLwordm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRo
ZW50aWNhdGUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRDcmVk
ZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgaWYgKGNyZWRlbnRpYWwpIHsK
KyAgICAgICAgUmVmUHRyPFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVkZW50
aWFsOjpjcmVhdGUod2Via2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwoY3JlZGVudGlhbCkpOwor
ICAgICAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIo
KS0+dXNlQ3JlZGVudGlhbCh3ZWJDcmVkZW50aWFsLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCktPnVz
ZUNyZWRlbnRpYWwoMCk7CisgICAgcmVxdWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QgPSB0cnVl
OworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbDoKKyAq
IEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBDYW5jZWwg
dGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3Zv
aWQgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKFdlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19B
VVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpKTsKKworICAgIHJlcXVlc3QtPnByaXYtPmF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5lcigpLT5jYW5jZWwoKTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjc0YjAwN2M3YWNkZGNmZmUyNjY1NjVmYzVi
MjBkMGJjYmIwNTBmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsMTI1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFk
ZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0
Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0X2gKKyNkZWZpbmUgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0X2gKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENy
ZWRlbnRpYWwuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QgICAg
ICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZp
bmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVR
VUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQVVUSEVOVElDQVRJ
T05fUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCkpCisjZGVm
aW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JF
UVVFU1QsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAgICAgICAgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENs
YXNzICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSBXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3RQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCB7Cisg
ICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
KworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Vi
a2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZv
aWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworLyoqCisg
KiBXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZToKKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX0RFRkFVTFQ6IFRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvZiBXZWJL
aXQuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDOiBCYXNpYyBh
dXRoZW50aWNhdGlvbiBzY2hlbWUgYXMgZGVmaW5lZCBpbiBSRkMgMjYxNy4KKyAqIEBXRUJLSVRf
QVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfRElHRVNUOiBEaWdlc3QgYXV0aGVudGljYXRpb24g
c2NoZW1lIGFzIGRlZmluZWQgaW4gUkZDIDI2MTcuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X1NDSEVNRV9IVE1MX0ZPUk06IEhUTUwgRm9ybSBhdXRoZW50aWNhdGlvbi4KKyAqIEBXRUJLSVRf
QVVUSEVOVElDQVRJT05fU0NIRU1FX05UTE06IE5UTE0gTWljcm9zb2Z0IHByb3ByaWV0YXJ5IGF1
dGhlbnRpY2F0aW9uIHNjaGVtZS4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05F
R09USUFURTogTmVnb3RpYXRlIChvciBTUE5FR08pIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBhcyBk
ZWZpbmVkIGluIFJGQyA0NTU5LgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfQ0xJ
RU5UX0NFUlRJRklDQVRFX1JFUVVFU1RFRDogQ2xpZW50IENlcnRpZmljYXRlIEF1dGhlbnRpY2F0
aW9uIChzZWUgUkZDIDIyNDYpLgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfU0VS
VkVSX1RSVVNUX0VWQUxVQVRJT05fUkVRVUVTVEVEOiBTZXJ2ZXIgVHJ1c3QgQXV0aGVudGljYXRp
b24uCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOOiBBdXRoZW50aWNh
dGlvbiBzY2hlbWUgdW5rbm93bi4KKyAqCisgKiBFbnVtIHZhbHVlcyByZXByZXNlbnRpbmcgdGhl
IGF1dGhlbnRpY2F0aW9uIHNjaGVtZS4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3R5cGVkZWYg
ZW51bSB7CisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9ERUZBVUxUID0gMSwKKyAg
ICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUMgPSAyLAorICAgIFdFQktJ
VF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9ESUdFU1QgPSAzLAorICAgIFdFQktJVF9BVVRI
RU5USUNBVElPTl9TQ0hFTUVfSFRNTF9GT1JNID0gNCwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fU0NIRU1FX05UTE0gPSA1LAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfTkVH
T1RJQVRFID0gNiwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0NMSUVOVF9DRVJU
SUZJQ0FURV9SRVFVRVNURUQgPSA3LAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVf
U0VSVkVSX1RSVVNUX0VWQUxVQVRJT05fUkVRVUVTVEVEID0gOCwKKyAgICBXRUJLSVRfQVVUSEVO
VElDQVRJT05fU0NIRU1FX1VOS05PV04gPSAxMDAsCit9IFdlYktpdEF1dGhlbnRpY2F0aW9uU2No
ZW1lOworCisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2dldF90eXBlICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMgICAg
ICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkg
V2ViS2l0Q3JlZGVudGlhbCAqCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJv
cG9zZWRfY3JlZGVudGlhbCAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0
KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdF9nZXRfaG9zdCAgICAgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfZ2V0X3BvcnQgICAgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtICAgICAgICAgICAgICAgICAgKFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0QXV0aGVu
dGljYXRpb25TY2hlbWUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUg
ICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOwor
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19m
b3JfcHJveHkgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1
ZXN0KTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rf
Z2V0X3ByZXZpb3VzX2ZhaWx1cmVfY291bnQgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAq
cmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfYXV0aGVudGljYXRlICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbCAg
ICAgICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3Qp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjkxM2ZiZGEyMDBmMDk1NWRlYTZiYjBkMWEwMmY2NjI2
ZTM3MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGVfaAorCisjaW5j
bHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKworV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVh
dGUoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiwgYm9vbCBwcml2YXRlQnJv
d3NpbmdFbmFibGVkKTsKK1dlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogd2Vi
a2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0Kik7CisKKyNlbmRpZiAvLyBXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGIyNGFjODAwMDg5MjQ2ZmFj
YmQyMzFjMmRiNTMwYTQxOTkwZDFhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwCkBAIC0wLDAgKzEsMTc5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3Jl
ZGVudGlhbC5oIgorCisjaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktp
dENyZWRlbnRpYWxQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdHJ1Y3QgX1dlYktpdENyZWRlbnRpYWwgeworICAg
IF9XZWJLaXRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNvcmVDcmVkZW50
aWFsKQorICAgICAgICA6IGNyZWRlbnRpYWwoY29yZUNyZWRlbnRpYWwpCisgICAgeworICAgIH0K
KworICAgIFdlYkNvcmU6OkNyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICBDU3RyaW5nIHVzZXJu
YW1lOworICAgIENTdHJpbmcgcGFzc3dvcmQ7Cit9OworCitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUsIFdlYkNvcmU6OkNyZWRl
bnRpYWxQZXJzaXN0ZW5jZU5vbmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJL
SVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTiwgV2ViQ29yZTo6Q3JlZGVudGlh
bFBlcnNpc3RlbmNlRm9yU2Vzc2lvbik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdF
QktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX1BFUk1BTkVOVCwgV2ViQ29yZTo6Q3JlZGVudGlh
bFBlcnNpc3RlbmNlUGVybWFuZW50KTsKKworR19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRDcmVk
ZW50aWFsLCB3ZWJraXRfY3JlZGVudGlhbCwgd2Via2l0X2NyZWRlbnRpYWxfY29weSwgd2Via2l0
X2NyZWRlbnRpYWxfZnJlZSkKKworV2ViS2l0Q3JlZGVudGlhbCogd2Via2l0Q3JlZGVudGlhbENy
ZWF0ZShjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjb3JlQ3JlZGVudGlhbCkKK3sKKyAgICBX
ZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gZ19zbGljZV9uZXcoV2ViS2l0Q3JlZGVudGlh
bCk7CisgICAgbmV3IChjcmVkZW50aWFsKSBXZWJLaXRDcmVkZW50aWFsKGNvcmVDcmVkZW50aWFs
KTsKKyAgICByZXR1cm4gY3JlZGVudGlhbDsKK30KKworY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlh
bCYgd2Via2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVu
dGlhbCkKK3sKKyAgICBnX2Fzc2VydChjcmVkZW50aWFsKTsKKworICAgIHJldHVybiBjcmVkZW50
aWFsLT5jcmVkZW50aWFsOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX25ldzoKKyAq
IEB1c2VybmFtZTogVGhlIHVzZXJuYW1lIGZvciB0aGUgbmV3IGNyZWRlbnRpYWwKKyAqIEBwYXNz
d29yZDogVGhlIHBhc3N3b3JkIGZvciB0aGUgbmV3IGNyZWRlbnRpYWwKKyAqIEBwZXJzaXN0ZW5j
ZTogVGhlICNXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2Ugb2YgdGhlIG5ldyBjcmVkZW50aWFs
CisgKgorICogQ3JlYXRlIGEgbmV3IGNyZWRlbnRpYWwgZnJvbSB0aGUgcHJvdmlkZWQgdXNlcm5h
bWUsIHBhc3N3b3JkIGFuZCBwZXJzaXN0ZW5jZSBtb2RlLgorICoKKyAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKTogQSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8K
K1dlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9jcmVkZW50aWFsX25ldyhjb25zdCBnY2hhciogdXNl
cm5hbWUsIGNvbnN0IGdjaGFyKiBwYXNzd29yZCwgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNl
IHBlcnNpc3RlbmNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVzZXJuYW1lLCAwKTsK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYXNzd29yZCwgMCk7CisKKyAgICByZXR1cm4gd2Vi
a2l0Q3JlZGVudGlhbENyZWF0ZShXZWJDb3JlOjpDcmVkZW50aWFsKFN0cmluZzo6ZnJvbVVURjgo
dXNlcm5hbWUpLCBTdHJpbmc6OmZyb21VVEY4KHBhc3N3b3JkKSwgc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihwZXJzaXN0ZW5jZSkpKTsKK30KKworLyoqCisgKiB3
ZWJraXRfY3JlZGVudGlhbF9jb3B5OgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRp
YWwKKyAqCisgKiBNYWtlIGEgY29weSBvZiB0aGUgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIGNvcHkgb2YgcGFzc2VkIGluICNXZWJLaXRDcmVk
ZW50aWFsCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRf
Y3JlZGVudGlhbF9jb3B5KFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19h
c3NlcnQoY3JlZGVudGlhbCk7CisKKyAgICByZXR1cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShj
cmVkZW50aWFsLT5jcmVkZW50aWFsKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9m
cmVlOgorICogQGNyZWRlbnRpYWw6IEEgI1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBGcmVlIHRo
ZSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3ZvaWQgd2Via2l0
X2NyZWRlbnRpYWxfZnJlZShXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGNy
ZWRlbnRpYWwtPn5XZWJLaXRDcmVkZW50aWFsKCk7CisgICAgZ19zbGljZV9mcmVlKFdlYktpdENy
ZWRlbnRpYWwsIGNyZWRlbnRpYWwpOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dl
dF91c2VybmFtZToKKyAqIEBjcmVkZW50aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICog
R2V0IHRoZSB1c2VybmFtZSBjdXJyZW50bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFs
LgorICoKKyAqIFJldHVybnM6IFRoZSB1c2VybmFtZSBzdG9yZWQgaW4gdGhlICNXZWJLaXRDcmVk
ZW50aWFsLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9jcmVk
ZW50aWFsX2dldF91c2VybmFtZShXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNyZWRlbnRpYWwsIDApOworCisgICAgY3JlZGVudGlhbC0+
dXNlcm5hbWUgPSBjcmVkZW50aWFsLT5jcmVkZW50aWFsLnVzZXIoKS51dGY4KCk7CisgICAgcmV0
dXJuIGNyZWRlbnRpYWwtPnVzZXJuYW1lLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3Jl
ZGVudGlhbF9nZXRfcGFzc3dvcmQ6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlh
bAorICoKKyAqIEdldCB0aGUgcGFzc3dvcmQgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0
Q3JlZGVudGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcGFzc3dvcmQgc3RvcmVkIGluIHRoZSAj
V2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3
ZWJraXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlh
bCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCAwKTsKKworICAgIGNy
ZWRlbnRpYWwtPnBhc3N3b3JkID0gY3JlZGVudGlhbC0+Y3JlZGVudGlhbC5wYXNzd29yZCgpLnV0
ZjgoKTsKKyAgICByZXR1cm4gY3JlZGVudGlhbC0+cGFzc3dvcmQuZGF0YSgpOworfQorCisvKioK
KyAqIHdlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNzd29yZDoKKyAqIEBjcmVkZW50aWFsOiBhICNX
ZWJLaXRDcmVkZW50aWFsCisgKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBjcmVkZW50aWFs
IGhhcyBhIHBhc3N3b3JkIHN0b3JlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB0aGUgY3Jl
ZGVudGlhbCBoYXMgYSBwYXNzd29yZCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNl
OiAyLjIKKyAqLworZ2Jvb2xlYW4gd2Via2l0X2NyZWRlbnRpYWxfaGFzX3Bhc3N3b3JkKFdlYktp
dENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY3Jl
ZGVudGlhbCwgRkFMU0UpOworCisgICAgcmV0dXJuIGNyZWRlbnRpYWwtPmNyZWRlbnRpYWwuaGFz
UGFzc3dvcmQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVu
Y2U6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIEdldCB0aGUg
cGVyc2lzdGVuY2UgbW9kZSBjdXJyZW50bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFs
LgorICoKKyAqIFJldHVybnM6IFRoZSAjV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHN0b3Jl
ZCBpbiB0aGUgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJL
aXRDcmVkZW50aWFsUGVyc2lzdGVuY2Ugd2Via2l0X2NyZWRlbnRpYWxfZ2V0X3BlcnNpc3RlbmNl
KFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoY3JlZGVudGlhbCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORSk7CisKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihjcmVkZW50
aWFsLT5jcmVkZW50aWFsLnBlcnNpc3RlbmNlKCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNTBl
NWUxMjljODhmYmY2MGM4OTE1ZTM5ZmFjMDgwZGZlNmUwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmgKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNz
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdENyZWRlbnRpYWxfaAorI2RlZmluZSBXZWJLaXRDcmVkZW50aWFsX2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9DUkVERU5USUFMICh3ZWJr
aXRfY3JlZGVudGlhbF9nZXRfdHlwZSgpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Q3JlZGVu
dGlhbCBXZWJLaXRDcmVkZW50aWFsOworCisvKioKKyAqIFdlYktpdENyZWRlbnRpYWxQZXJzaXN0
ZW5jZToKKyAqIEBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FOiBDcmVkZW50aWFs
IGRvZXMgbm90IHBlcnNpc3QKKyAqIEBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1Jf
U0VTU0lPTjogQ3JlZGVudGlhbCBwZXJzaXN0cyBmb3Igc2Vzc2lvbiBvbmx5CisgKiBAV0VCS0lU
X0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfUEVSTUFORU5UOiBDcmVkZW50aWFsIHBlcnNpc3RzIHBl
cm1hbmVudGx5CisgKgorICogRW51bSB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBkdXJhdGlvbiBm
b3Igd2hpY2ggYSBjcmVkZW50aWFsIHBlcnNpc3RzLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwor
dHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FLAor
ICAgIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX0ZPUl9TRVNTSU9OLAorICAgIFdFQktJ
VF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX1BFUk1BTkVOVAorfSBXZWJLaXRDcmVkZW50aWFsUGVy
c2lzdGVuY2U7CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9jcmVkZW50aWFsX2dldF90eXBl
ICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDcmVkZW50aWFsICoKK3dl
YmtpdF9jcmVkZW50aWFsX25ldyAgICAgICAgICAgICAgICAgIChjb25zdCBnY2hhciAgICAgICAg
ICAgICAgICAgKnVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAqcGFzc3dvcmQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlICBw
ZXJzaXN0ZW5jZSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q3JlZGVudGlhbCAqCit3ZWJraXRfY3Jl
ZGVudGlhbF9jb3B5ICAgICAgICAgICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAg
ICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfY3JlZGVudGlhbF9mcmVl
ICAgICAgICAgICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50aWFs
KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNl
cm5hbWUgICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsK
KworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGFzc3dv
cmQgICAgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2NyZWRlbnRpYWxfaGFzX3Bhc3N3b3JkICAgICAg
ICAgKFdlYktpdENyZWRlbnRpYWwgICAgICAgICAgICAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9B
UEkgV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVy
c2lzdGVuY2UgICAgICAoV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NjdiYzdkMmM4YWMzNWVkMDVkOTc4MDRlZjQzMTU5NWM3YjE3NWRiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbFByaXZh
dGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcg
RWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdENyZWRl
bnRpYWxQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0Q3JlZGVudGlhbFByaXZhdGVfaAorCisjaW5j
bHVkZSAiV2ViS2l0Q3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KKworV2ViS2l0Q3JlZGVudGlhbCogd2Via2l0
Q3JlZGVudGlhbENyZWF0ZShjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik7Citjb25zdCBXZWJD
b3JlOjpDcmVkZW50aWFsJiB3ZWJraXRDcmVkZW50aWFsR2V0Q3JlZGVudGlhbChXZWJLaXRDcmVk
ZW50aWFsKik7CisKKyNlbmRpZiAvLyBXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4
IDI5NDk3MDkwZGI2MDdkYmNhOWYwMWFiOWY0NGM5MzI3ZTQ4MjFjMWYuLmFiOTc5MGIyNjFiMDkz
MDAyYjIxZTFkNzg1Y2M3OWRkZWJjODNhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiV2ViQ29udGV4dE1lbnVJdGVtRGF0YS5oIgogI2luY2x1ZGUgIldlYkRhdGEuaCIKICNp
bmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgorI2luY2x1ZGUgIldlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2Fy
ZExpc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVDbGllbnQuaCIKICNp
bmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUl0ZW1Qcml2YXRlLmgiCkBAIC0xMTksNiArMTIwLDgg
QEAgZW51bSB7CiAKICAgICBXRUJfUFJPQ0VTU19DUkFTSEVELAogCisgICAgQVVUSEVOVElDQVRF
LAorCiAgICAgTEFTVF9TSUdOQUwKIH07CiAKQEAgLTQyOSw2ICs0MzIsMTQgQEAgc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyhX
ZWJLaXRXZWJWaWV3KgogICAgIHByaXYtPmZhdmljb25DaGFuZ2VkSGFuZGxlcklEID0gMDsKIH0K
IAorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdBdXRoZW50aWNhdGUoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAg
IENyZWRlbnRpYWxTdG9yYWdlTW9kZSBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSA/IEFsbG93
UGVyc2lzdGVudFN0b3JhZ2UgOiBEaXNhbGxvd1BlcnNpc3RlbnRTdG9yYWdlOworICAgIHdlYmtp
dFdlYlZpZXdCYXNlQWRkQXV0aGVudGljYXRpb25EaWFsb2coV0VCS0lUX1dFQl9WSUVXX0JBU0Uo
d2ViVmlldyksIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KHJlcXVlc3QsIGNyZWRlbnRp
YWxTdG9yYWdlTW9kZSkpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIGZp
bGVDaG9vc2VyRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtEaWFsb2cqIGRpYWxvZywgZ2ludCBy
ZXNwb25zZUlELCBXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3QqIHJlcXVlc3QpCiB7CiAgICAgR1Jl
ZlB0cjxXZWJLaXRGaWxlQ2hvb3NlclJlcXVlc3Q+IGFkb3B0ZWRSZXF1ZXN0ID0gYWRvcHRHUmVm
KHJlcXVlc3QpOwpAQCAtNjA1LDYgKzYxNiw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgIHdlYlZp
ZXdDbGFzcy0+ZGVjaWRlX3BvbGljeSA9IHdlYmtpdFdlYlZpZXdEZWNpZGVQb2xpY3k7CiAgICAg
d2ViVmlld0NsYXNzLT5wZXJtaXNzaW9uX3JlcXVlc3QgPSB3ZWJraXRXZWJWaWV3UGVybWlzc2lv
blJlcXVlc3Q7CiAgICAgd2ViVmlld0NsYXNzLT5ydW5fZmlsZV9jaG9vc2VyID0gd2Via2l0V2Vi
Vmlld1J1bkZpbGVDaG9vc2VyOworICAgIHdlYlZpZXdDbGFzcy0+YXV0aGVudGljYXRlID0gd2Vi
a2l0V2ViVmlld0F1dGhlbnRpY2F0ZTsKIAogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6
d2ViLWNvbnRleHQ6CkBAIC0xMzY2LDYgKzEzNzgsMzkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAg
ICAgIDAsCiAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1ZPSUQsCiAgICAgICAgIEdf
VFlQRV9CT09MRUFOLCAwKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmF1dGhl
bnRpY2F0ZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldyBvbiB3aGljaCB0
aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4g
dGhlIHVzZXIgaXMgY2hhbGxlbmdlZCB3aXRoIEhUVFAKKyAgICAgKiBhdXRoZW50aWNhdGlvbi4g
VG8gbGV0IHRoZSAgYXBwbGljYXRpb24gYWNjZXNzIG9yIHN1cHBseQorICAgICAqIHRoZSBjcmVk
ZW50aWFscyBhcyB3ZWxsIGFzIHRvIGFsbG93IHRoZSBjbGllbnQgYXBwbGljYXRpb24KKyAgICAg
KiB0byBlaXRoZXIgY2FuY2VsIHRoZSByZXF1ZXN0IG9yIHBlcmZvcm0gdGhlIGF1dGhlbnRpY2F0
aW9uLAorICAgICAqIHRoZSBzaWduYWwgd2lsbCBwYXNzIGFuIGluc3RhbmNlIG9mIHRoZQorICAg
ICAqICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgaW4gdGhlIEByZXF1ZXN0IGFyZ3VtZW50
LgorICAgICAqIFRvIGhhbmRsZSB0aGlzIHNpZ25hbCBhc3luY2hyb25vdXNseSB5b3Ugc2hvdWxk
IGtlZXAgYSByZWYKKyAgICAgKiBvZiB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIFRSVUUuIFRvIGRp
c2FibGUgSFRUUCBhdXRoZW50aWNhdGlvbgorICAgICAqIGVudGlyZWx5LCBjb25uZWN0IHRvIHRo
aXMgc2lnbmFsIGFuZCBzaW1wbHkgcmV0dXJuICVUUlVFOworICAgICAqCisgICAgICogVGhlIGRl
ZmF1bHQgc2lnbmFsIGhhbmRsZXIgd2lsbCBydW4gYSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uCisg
ICAgICogZGlhbG9nIGFzeW5jaHJvbm91c2x5IGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRo
LgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBm
cm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9w
YWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4yCisgICAg
ICovCisgICAgc2lnbmFsc1tBVVRIRU5USUNBVEVdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJh
dXRoZW50aWNhdGUiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNz
KSwKKyAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgR19TVFJVQ1Rf
T0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgYXV0aGVudGljYXRlKSwKKyAgICAgICAgICAgIGdf
c2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICov
LAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAg
ICAgR19UWVBFX0JPT0xFQU4sIDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNUKTsKIH0KIAogc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld1NldElzTG9hZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29s
IGlzTG9hZGluZykKQEAgLTE3MzgsMTMgKzE3ODMsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3Vi
bWl0Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Np
b24KIAogdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpCiB7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRp
YWxTdG9yYWdlTW9kZTsKLSAgICBpZiAod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0
ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpKSkKLSAgICAg
ICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKLSAg
ICBlbHNlCi0gICAgICAgIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVudFN0
b3JhZ2U7Ci0KLSAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdF
QktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05l
dyhhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisgICAg
Z2Jvb2xlYW4gcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5h
YmxlX3ByaXZhdGVfYnJvd3Npbmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3
KSk7CisgICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IHJlcXVlc3QgPSBh
ZG9wdEdSZWYod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlLCBwcml2YXRlQnJvd3NpbmdFbmFibGVkKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJu
VmFsdWU7CisgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0FVVEhFTlRJQ0FURV0s
IDAsIHJlcXVlc3QuZ2V0KCksICZyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmll
d0luc2VjdXJlQ29udGVudERldGVjdGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdElu
c2VjdXJlQ29udGVudEV2ZW50IHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggYjIzZDdmZmIxM2EwOGYwOTU0ZWNhMzU0Y2U4
NmVjNTcwNzNjYTFkNy4uYTRkNmU0MzllY2E3MjZlOTA2Mzc2MTMyMTZhNTE0NzdlYjdhZTk3ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aApAQCAtMjksNiArMjksNyBAQAogI2RlZmluZSBXZWJLaXRXZWJWaWV3X2gKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdEZpbGVDaG9vc2VyUmVxdWVzdC5oPgpAQCAtMjQyLDYgKzI0Myw4IEBAIHN0cnVj
dCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXRJbnNlY3VyZUNvbnRlbnRFdmVudCAgIGV2ZW50KTsKICAgICBn
Ym9vbGVhbiAgICgqIHdlYl9wcm9jZXNzX2NyYXNoZWQpICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgICAgICAgKndlYl92aWV3KTsKIAorICAgIGdib29sZWFuICAgKCogYXV0aGVudGljYXRl
KSAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDAp
ICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKICAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKQEAgLTI0OSw3ICsyNTIsNiBAQCBzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9p
ZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ1KSAodm9pZCk7CiAgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQ2KSAodm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ3KSAo
dm9pZCk7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCAy
ZmE3ZWJhY2ZkYzYyN2ZiMjQwOTRmMDBiZTZiNzEyZjhkMmQ0M2NiLi5kNzY5ZTJhNTRiOWVkMzJm
YTQxOGE4MjFhMmNlMDYxODE5NTA3NDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTEzLDYg
KzEzLDcgQEAKICAgICA8dGl0bGU+Q2xhc3MgT3ZlcnZpZXc8L3RpdGxlPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRXZWJDb250ZXh0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRXZWJWaWV3LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9X
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdEJhY2tGb3J3YXJkTGlzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0U2V0dGluZ3MueG1sIi8+CkBAIC01Myw1ICs1NCwxMSBAQAogICA8aW5kZXgg
aWQ9ImluZGV4LWFsbCI+CiAgICAgPHRpdGxlPkluZGV4PC90aXRsZT4KICAgPC9pbmRleD4KKyAg
CisgIDxpbmRleCBpZD0iYXBpLWluZGV4LTItMiIgcm9sZT0iMi4yIj4KKyAgICA8dGl0bGU+SW5k
ZXggb2YgbmV3IHN5bWJvbHMgaW4gMi4yPC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvYXBpLWluZGV4LTIuMi54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KKyAgPC9p
bmRleD4gIAorICAKICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL2Fubm90YXRpb24tZ2xvc3Nhcnku
eG1sIj48eGk6ZmFsbGJhY2sgLz48L3hpOmluY2x1ZGU+CiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dAppbmRleCBmMjgwYzYyZGYyOWYyNmIzMjI2MmNkYWRmMmU4ZGEzM2MxZDliOTkw
Li5kZTY0NzM4ZWQ5MmE3NmFiYTRlOWI4Y2Q2NTA1MDBjMjFiOTU3OTFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQKQEAgLTE3OCw2ICsxNzgsNDggQEAgV2ViS2l0V2ViVmlld1ByaXZhdGUK
IDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3Q8L0ZJTEU+CitXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKK1dlYktpdEF1dGhlbnRpY2F0
aW9uU2NoZW1lCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUKK3dl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbAord2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2dldF9ob3N0Cit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydAord2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3ByZXZpb3VzX2ZhaWx1cmVfY291bnQKK3dl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsCit3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0KK3dlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9zY2hlbWUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zv
cl9wcm94eQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdENsYXNzCitXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9SRVFVRVNUCitXRUJLSVRfQVVU
SEVOVElDQVRJT05fUkVRVUVTVAorV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1MK
K1dFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0dFVF9DTEFTUworV0VCS0lUX0lTX0FVVEhF
TlRJQ0FUSU9OX1JFUVVFU1QKK1dFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNT
CitXRUJLSVRfVFlQRV9DUkVERU5USUFMCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfdHlwZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5cGUKKworPFNVQlNFQ1RJT04+CitX
ZWJLaXRDcmVkZW50aWFsCitXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVk
ZW50aWFsX25ldword2Via2l0X2NyZWRlbnRpYWxfY29weQord2Via2l0X2NyZWRlbnRpYWxfZnJl
ZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkCit3ZWJraXRfY3JlZGVudGlhbF9nZXRf
cGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFtZQord2Via2l0X2NyZWRl
bnRpYWxfaGFzX3Bhc3N3b3JkCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJTEU+V2ViS2l0
QmFja0ZvcndhcmRMaXN0PC9GSUxFPgogV2ViS2l0QmFja0ZvcndhcmRMaXN0CiB3ZWJraXRfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IDVkOTdmNjliZWQ1ZGQ3
ZjNhNzYxMWE4ZGE5ZGZlNzg4M2ZkYTQ0NDUuLmFiNjIwZjBkMTJhMzg3MGY0N2VlNmRjMjkzZTU1
ZDkwZGE3OWFlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L2RvY3Mvd2Via2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKQEAgLTI0LDMgKzI0LDUgQEAgd2Via2l0X2NvbnRl
eHRfbWVudV9pdGVtX2dldF90eXBlCiB3ZWJraXRfd2ViX3ZpZXdfZ3JvdXBfZ2V0X3R5cGUKIHdl
YmtpdF93ZWJfZXh0ZW5zaW9uX2dldF90eXBlCiB3ZWJraXRfd2ViX3BhZ2VfZ2V0X3R5cGUKK3dl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF90eXBlCit3ZWJraXRfY3JlZGVudGlhbF9n
ZXRfdHlwZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNw
cAppbmRleCA4OGQ3N2YyODYwZTA2MGE1MDZhYjliYjVjODJmYTI4YWZhNjZiMTdhLi5hOThjMmE5
MzY3MjA3NjFlZDE4OTMzN2Y0ZjhiNjYzZmQ1MDhlNmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcu
Y3BwCkBAIC0xOCw2ICsxOCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNWYWx1ZVJlZi5oPgpAQCAtMjYsNiArMjcsOCBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKK3N0YXRpYyBX
ZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0RlZmF1
bHRDb250ZXh0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewogICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpID09IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKQEAgLTc5Myw2ICs3OTYsMTc0IEBAIHN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3RmlsZUNob29zZXJSZXF1ZXN0KEZpbGVDaG9vc2VyVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKICAgICB3ZWJraXRfZmlsZV9jaG9vc2VyX3JlcXVlc3RfY2FuY2Vs
KGZpbGVDaG9vc2VyUmVxdWVzdCk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNl
cm5hbWVbXSA9ICJ1c2VybmFtZSI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3Jk
W10gPSAicGFzc3dvcmQiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1Rp
dGxlW10gPSAiV2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7CitzdGF0aWMgY29uc3Qg
Y2hhciBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1
aXJlZCI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAi
QmFzaWMgZFhObGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1
c2VybmFtZTpwYXNzd29yZCIuCitzdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJp
bmdbXSA9CisgICAgIjxodG1sPiIKKyAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhl
bnRpY2F0aW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+
IjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0
bWw+IgorICAgICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxl
PjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKKworCitjbGFzcyBBdXRoZW50
aWNhdGlvblRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShBdXRoZW50aWNhdGlvblRlc3QpOworCisgICAgQXV0aGVudGljYXRpb25U
ZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJWaWV3LCAiYXV0aGVu
dGljYXRlIiwgR19DQUxMQkFDSyhydW5BdXRoZW50aWNhdGlvbkNhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgfQorCisgICAgfkF1dGhlbnRpY2F0aW9uVGVzdCgpCisgICAgeworICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJWaWV3LCBHX1NJR05BTF9NQVRDSF9E
QVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IHJldHJpZXM7
CisKKyAgICBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiwgU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29u
dGV4dCosIHZvaWQqKQorICAgIHsKKyAgICAgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQ
X01FVEhPRF9HRVQpIHsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3Nh
Z2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIXN0cmNtcChwYXRoLCAiL2luZGV4Lmh0bWwiKSkgewor
ICAgICAgICAgICAgY29uc3QgY2hhciogYXV0aG9yaXphdGlvbiA9IHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQXV0aG9yaXphdGlvbiIpOwor
ICAgICAgICAgICAgLy8gUmVxdWlyZSBhdXRoZW50aWNhdGlvbgorICAgICAgICAgICAgaWYgKGF1
dGhvcml6YXRpb24gJiYgIXN0cmNtcChhdXRob3JpemF0aW9uLCBhdXRoRXhwZWN0ZWRBdXRob3Jp
emF0aW9uKSkgeworICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24u
CisgICAgICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfT0spOworICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBhdXRoU3VjY2Vzc0hUTUxTdHJp
bmcsIHN0cmxlbihhdXRoU3VjY2Vzc0hUTUxTdHJpbmcpKTsKKyAgICAgICAgICAgICAgICByZXRy
aWVzID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKytyZXRyaWVzIDwgMykgeworICAgICAg
ICAgICAgICAgIC8vIE5vIG9yIGludmFsaWQgYXV0aG9yaXphdGlvbiBoZWFkZXIgcHJvdmlkZWQg
YnkgdGhlIGNsaWVudCwgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0d2ljZSB0aGVuIGZhaWwuCisg
ICAgICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfVU5BVVRIT1JJWkVEKTsKKyAgICAgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIldXVy1BdXRoZW50aWNhdGUiLCAiQmFz
aWMgcmVhbG09XCJteSByZWFsbVwiIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIEF1dGhlbnRpY2F0aW9uIG5vdCBzdWNjZXNzZnVsLCBkaXNwbGF5IGEgIjQwMSBB
dXRob3JpemF0aW9uIFJlcXVpcmVkIiBwYWdlCisgICAgICAgICAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICAgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9DT1BZLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxTdHJp
bmcpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisKKyAg
ICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7
CisgICAgfQorCisgICAgdm9pZCBsb2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKKyAgICB7CisgICAg
ICAgIC8vIHJlc2V0IHRoZSByZXRyeSBjb3VudCBvZiB0aGUgZmFrZSBzZXJ2ZXIgd2hlbiBhIHBh
Z2UgaXMgbG9hZGVkCisgICAgICAgIHJldHJpZXMgPSAwOworICAgICAgICBXZWJWaWV3VGVzdDo6
bG9hZFVSSSh1cmkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNh
dGlvbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qq
IHJlcXVlc3QsIEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3Qt
PnJ1bkF1dGhlbnRpY2F0aW9uKHJlcXVlc3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9
CisKKyAgICB2b2lkIHJ1bkF1dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVx
dWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVudGlj
YXRpb25SZXF1ZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKKyAgICAgICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9h
dXRoZW50aWNhdGlvblJlcXVlc3Q7Cit9OworCitpbnQgQXV0aGVudGljYXRpb25UZXN0OjpyZXRy
aWVzID0gMDsKKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblJlcXVlc3Qo
QXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGtTZXJ2ZXIg
PSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bih0ZXN0LT5zZXJ2ZXJD
YWxsYmFjayk7CisKKyAgICAvLyB0ZXN0IG5vIHN0b3JlZCBjcmVkZW50aWFscworICAgIFdlYktp
dFNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+
bV93ZWJWaWV3KTsKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dz
aW5nKHNldHRpbmdzLCBUUlVFKTsKKworICAgIC8vIHRlc3QgYXV0aGVudGljYXRpb24gcmVxdWVz
dCBnZXR0ZXJzIG1hdGNoIHNvdXAgYXV0aGVudGljYXRpb24gaGVhZGVyCisgICAgdGVzdC0+bG9h
ZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAg
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhl
bnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfaG9zdChyZXF1ZXN0KSwgPT0sICIxMjcuMC4wLjEiKTsKKyAgICAv
LyBkb24ndCB0ZXN0IHBvcnQsIGl0IGlzIHJhbmRvbWx5IGFzc2lnbmVkIGJ5IGxpYnNvdXAgaW4g
V2ViS2l0VGVzdFNlcnZlcgorICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfcmVhbG0ocmVxdWVzdCksID09LCAibXkgcmVhbG0iKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpID09
IFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJQyk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eShyZXF1ZXN0KSk7Cisg
ICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcmV2aW91c19m
YWlsdXJlX2NvdW50KHJlcXVlc3QpKTsKKworICAgIC8vIHRlc3Qgc3RvcmVkIGNyZWRlbnRpYWxz
IGFyZSBlbXB0eQorICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9j
YW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0KSk7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3Jl
ZGVudGlhbCA9IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVk
ZW50aWFsKHJlcXVlc3QpOworICAgIGdfYXNzZXJ0KCFjcmVkZW50aWFsKTsKKworICAgIC8vIHRl
c3QgY2FuY2VsCisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKHJlcXVl
c3QpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KCF3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgLy8gdGVz
dCBjb250aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxzCisgICAgd2Via2l0X3NldHRpbmdzX3NldF9l
bmFibGVfcHJpdmF0ZV9icm93c2luZyhzZXR0aW5ncywgRkFMU0UpOworICAgIHRlc3QtPmxvYWRV
Ukkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIHJl
cXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVx
dWVzdCkpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShy
ZXF1ZXN0LCAwKTsKKyAgICAvLyBkb2Vzbid0IGFzayBmb3IgbmV3IGNyZWRlbnRpYWxzCisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJf
dmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICAvLyB0ZXN0IGF1dGhlbnRp
Y2F0aW9uIGZhaWx1cmVzCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRo
ZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxf
bmV3KGF1dGhUZXN0VXNlcm5hbWUsICJ3cm9uZ3Bhc3N3b3JkIiwgV0VCS0lUX0NSRURFTlRJQUxf
UEVSU0lTVEVOQ0VfTk9ORSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0
aGVudGljYXRlKHJlcXVlc3QsIGNyZWRlbnRpYWwpOworICAgIHdlYmtpdF9jcmVkZW50aWFsX2Zy
ZWUoY3JlZGVudGlhbCk7CisgICAgLy8gZXhwZWN0IGEgc2Vjb25kIGF1dGhlbnRpY2F0aW9uIHJl
cXVlc3QKKyAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcmV2aW91
c19mYWlsdXJlX2NvdW50KHJlcXVlc3QpID09IDEpOworICAgIC8vIHRlc3Qgc2Vjb25kIGZhaWx1
cmUKKyAgICBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3KGF1dGhUZXN0VXNlcm5h
bWUsICJ3cm9uZ3Bhc3N3b3JkMiIsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUp
OworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0
LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOwor
ICAgIC8vIHNob3VsZCBsb2FkIGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBwYWdlCisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
dmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZhaWx1cmVU
aXRsZSk7CisKKyAgICAvLyB0ZXN0IGNvcnJlY3QgYXV0aGVudGljYXRpb24KKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAg
ICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGNy
ZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgYXV0aFRl
c3RQYXNzd29yZCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04pOwor
ICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBj
cmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRT
dWNjZXNzVGl0bGUpOworCisgICAgLy8gdGVzdCBsb2FkaW5nIHRoZSBzYW1lIChhdXRob3JpemVk
KSBwYWdlIGFnYWluCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
aW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgLy8gdGhlcmUgaXMgbm8gYXV0aGVudGljYXRpb24g
Y2hhbGxlbmdlCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0s
IGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7CisKKyAgICBkZWxldGUga1NlcnZlcjsKK30KKwog
Y2xhc3MgRnVsbFNjcmVlbkNsaWVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CiBwdWJsaWM6
CiAgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGdWxsU2NyZWVuQ2xpZW50VGVzdCk7CkBAIC0x
MjMxLDYgKzE0MDIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1NuYXBzaG90KFNuYXBzaG90
V2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAKIHZvaWQgYmVmb3JlQWxsKCkKIHsK
KyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNh
dGlvbiIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KTsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RXZWJWaWV3RGVm
YXVsdENvbnRleHQpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiY3Vz
dG9tLWNoYXJzZXQiLCB0ZXN0V2ViVmlld0N1c3RvbUNoYXJzZXQpOwogICAgIFdlYlZpZXdUZXN0
OjphZGQoIldlYktpdFdlYlZpZXciLCAic2V0dGluZ3MiLCB0ZXN0V2ViVmlld1NldHRpbmdzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBkMTg0MzE1
MjgxYTgzNjNiODEwNTc4YzM4OGYxZTM2ZWEzY2FiMmIyLi43MGUzYjQzMzA1OTNlZjZkMGZkNzg4
YmEyZTkzMzFmNDIwZjg5Nzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oCkBAIC0yMywxMiArMjMsMTQgQEAKIAogI2RlZmluZSBfX1dFQktJVDJfSF9JTlNJ
REVfXwogCisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0Q29udGV4dE1lbnUuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51QWN0
aW9ucy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRDcmVkZW50aWFsLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0RWRpdGluZ0NvbW1hbmRzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208316</attachid>
            <date>2013-08-08 00:41:25 -0700</date>
            <delta_ts>2013-08-08 09:17:55 -0700</delta_ts>
            <desc>Patch + docs + unit test vs</desc>
            <filename>bug-99352-20130808084154.patch</filename>
            <type>text/plain</type>
            <size>64522</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTUwZTc3MzRjYmZkMzRk
NGRlN2VlMzZjOWRlMWViNTQ0NmY0YmVhYi4uNWQ1YThiN2QwODMwOWU1NzdkY2Y5YzgxYmQ5M2Fj
YmMyOGQzN2QxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDEzLTA4LTA4ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIG5ldyBwdWJsaWMg
Y2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBiZQorICAg
ICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRl
IHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwcm92aWRlIHRo
ZWlyIG93biBhdXRoZW50aWNhdGlvbgorICAgICAgICB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5n
ZWQgd2l0aCBIVFRQIGF1dGhlbnRpY2F0aW9uLiBUaGUKKyAgICAgICAgY3JlZGVudGlhbCBpcyBl
eHBvc2VkIHRocm91Z2ggYSBuZXcgY2xhc3MgV2ViS2l0Q3JlZGVudGlhbC4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAob2tCdXR0b25DbGlja2VkKTogVXNl
IG5ldyBBUEkgZm9yIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoY2FuY2VsQnV0dG9uQ2xpY2tl
ZCk6IERpdHRvLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0aWFsaXpl
KTpHZXQKKyAgICAgICAgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgZnJvbSByZXF1ZXN0IG9iamVj
dC4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KTogRGl0dG8uCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuY3Bw
OiBBZGRlZCBuZXcKKyAgICAgICAgY2xhc3MgcmVwcmVzZW50aW5nIGEgSFRUUCBhdXRoZW50aWNh
dGlvbiByZXF1ZXN0LgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlzcG9z
ZSk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19pbml0KToK
KyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAgICAgICh3
ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6Cisg
ICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFs
cyk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRf
Y3JlZGVudGlhbCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
aG9zdCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydCk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0pOgorICAg
ICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZSk6CisgICAgICAg
ICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkpOgorICAgICAgICAo
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkpOgorICAgICAgICAod2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKToKKyAgICAgICAgKHdlYmtpdF9h
dXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5jcHA6IEFkZGVk
IG5ldyBjbGFzcyB0bworICAgICAgICBzdXBwb3J0IGNyZWRlbnRpYWxzIGZvciBIVFRQIGF1dGhl
bnRpY2F0aW9uLgorICAgICAgICAoX1dlYktpdENyZWRlbnRpYWw6Ol9XZWJLaXRDcmVkZW50aWFs
KToKKyAgICAgICAgKHdlYmtpdENyZWRlbnRpYWxDcmVhdGUpOgorICAgICAgICAod2Via2l0Q3Jl
ZGVudGlhbEdldENyZWRlbnRpYWwpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfbmV3KToK
KyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2NvcHkpOgorICAgICAgICAod2Via2l0X2NyZWRl
bnRpYWxfZnJlZSk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNlcm5hbWUpOgor
ICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkKToKKyAgICAgICAgKHdlYmtp
dF9jcmVkZW50aWFsX2hhc19wYXNzd29yZCk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9n
ZXRfcGVyc2lzdGVuY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRl
bnRpYWwuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVu
dGlhbFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5jcHA6IEFkZGVkIGF1dGhlbnRpY2F0ZSBzaWduYWwuCisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QXV0aGVudGljYXRlKTogRGVmYXVsdCBzaWduYWwgaGFuZGxlciBmb3IgYXV0aGVudGlj
YXRlLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IENyZWF0ZSBh
bgorICAgICAgICBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGFuZCBlbWl0IGl0IHdpdGggYXV0aGVu
dGljYXRlIHNpZ25hbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
Lmg6IFJlcGxhY2VkIHJlc2VydmVkIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgc2xvdCB3aXRo
IGZvciBXZWJWaWV3Q2xhc3Mgd2l0aCBmdW5jdGlvbiBwb2ludGVyIHRvCisgICAgICAgIGF1dGhl
bnRpY2F0ZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgc2VjdGlvbiBmb3IKKyAgICAgICAgdGhl
IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGRlZCBhdXRoZW50aWNhdGlvbgorICAgICAg
ICByZXF1ZXN0IGFuZCBjcmVkZW50aWFsIHR5cGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDogQ3JlYXRlZCBhIG5ldworICAgICAgICB1
bml0IHRlc3QgZm9yIEhUVFAgYXV0aGVudGljYXRpb24uIEEgbGlic291cCBzZXJ2ZXIgY2FsbGJh
Y2sKKyAgICAgICAgaGFuZGxlciBpcyBpbnN0YWxsZWQgdGhhdCBjcmVhdGVzIHNvdXAgbWVzc2Fn
ZXMgd2l0aCBhcHByb3ByaWF0ZQorICAgICAgICBoZWFkZXJzIGFuZCBib2R5IHRvIHRlc3QgSFRU
UCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25SZXF1
ZXN0KTogVGVzdCB0aGUgYXV0aGVudGljYXRpb24KKyAgICAgICAgcmVxdWVzdCBhbmQgY3JlZGVu
dGlhbCBBUEkuCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2VsKTogVGVz
dCBjYW5jZWxsZWQgYXV0aGVudGljYXRpb24uCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRp
Y2F0aW9uRmFpbHVyZSk6IFRlc3QgcmVwZWF0ZWQgYXV0aGVudGljYXRpb24gZmFpbHVyZXMuCisg
ICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKTogVGVzdCBjb250
aW51ZSB3aXRob3V0IGNyZWRlbnRpYWxzLgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvblN1Y2Nlc3MpOiBUZXN0IHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24uCisgICAgICAgIChi
ZWZvcmVBbGwpOiBBZGRlZCB0ZXN0cy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmg6IEFkZGVkIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCBhbmQKKyAgICAgICAgV2Vi
S2l0Q3JlZGVudGlhbCBoZWFkZXJzLgorCiAyMDEzLTA3LTI2ICBNYXJrIFJvd2UgIDxtcm93ZUBh
cHBsZS5jb20+CiAKICAgICAgICAgTG9nZ2luZyBzaG91bGQgYmUgY29uZmlndXJhYmxlIHVzaW5n
IGh1bWFuLXJlYWRhYmxlIGNoYW5uZWwgbmFtZXMgcmF0aGVyIHRoYW4gY3JhenkgYml0bWFza3MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGRjOTMzYzQyYzlhNTEzODIwY2QzOTY5
ZDY5ZjA5MTUwOWVmMjg5MmYuLjYyNmNlZDMzM2ZkNzRiZDVjYjM0NDMzYTRjNDE3ODhkMjM1ZmIz
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIv
U291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtOTQsMTIgKzk0LDE0IEBAIHdl
YmtpdDJfaF9hcGkgKz0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9jcHAvV0tSZXRhaW5Q
dHIuaAogCiB3ZWJraXQyZ3RrX2hfYXBpICs9IFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRNZW51SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERvd25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RWRp
dGluZ0NvbW1hbmRzLmggXApAQCAtNjUzLDYgKzY1NSw5IEBAIHdlYmtpdDJfc291cmNlcyArPSBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgg
XAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlz
dC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2Fy
ZExpc3QuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNr
Rm9yd2FyZExpc3RJdGVtLmggXApAQCAtNjcyLDYgKzY3Nyw5IEBAIHdlYmtpdDJfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdl
ci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5h
Z2VyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q3JlZGVudGlhbC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdENyZWRlbnRpYWwuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q3JlZGVudGlhbFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERvd25sb2FkLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCmluZGV4IDA2OTlk
YTdlZWQzMWM1NTQ1Y2U5MDczN2FjMmEwM2MyNTEwMGNjNzUuLmIzYWRmMDQ5YTZjM2QzODlmYmYz
ODljMDJjYTJjMmQyYTJlY2YzMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHAKQEAg
LTIxLDE0ICsyMSwxNCBAQAogI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgi
CiAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKLSNpbmNsdWRl
ICJXZWJDcmVkZW50aWFsLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWxQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0UHJpdmF0ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBzdHJ1Y3Qg
X1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSB7Ci0gICAgUmVmUHRyPEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHk+IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotCisgICAgR1Jl
ZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IHJlcXVlc3Q7CiAgICAgR3RrV2lkZ2V0
KiBhdXRoV2lkZ2V0OwogICAgIEd0a1dpZGdldCogZGVmYXVsdEJ1dHRvbjsKICAgICBHUmVmUHRy
PEd0a1N0eWxlQ29udGV4dD4gc3R5bGVDb250ZXh0OwpAQCAtMzYsMjMgKzM2LDE5IEBAIHN0cnVj
dCBfV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dQcml2YXRlIHsKIAogV0VCS0lUX0RFRklORV9U
WVBFKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlh
bG9nLCBHVEtfVFlQRV9FVkVOVF9CT1gpCiAKLXN0YXRpYyB2b2lkIHdlYmtpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nQXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlh
bG9nLCBXZWJDcmVkZW50aWFsKiBjcmVkZW50aWFsKQotewotICAgIFdlYktpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ctPnByaXY7Ci0gICAgcHJpdi0+YXV0
aGVudGljYXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCktPnVzZUNyZWRlbnRpYWwoY3JlZGVudGlh
bCk7Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoYXV0aERpYWxvZykpOwotfQot
CiBzdGF0aWMgdm9pZCBva0J1dHRvbkNsaWNrZWQoR3RrQnV0dG9uKiwgV2ViS2l0QXV0aGVudGlj
YXRpb25EaWFsb2cqIGF1dGhEaWFsb2cpCiB7CiAgICAgV2ViS2l0QXV0aGVudGljYXRpb25EaWFs
b2dQcml2YXRlKiBwcml2ID0gYXV0aERpYWxvZy0+cHJpdjsKLSAgICBSZWZQdHI8V2ViQ3JlZGVu
dGlhbD4gd2ViQ3JlZGVudGlhbCA9IFdlYkNyZWRlbnRpYWw6OmNyZWF0ZSh3ZWJraXRBdXRoZW50
aWNhdGlvbldpZGdldENyZWF0ZUNyZWRlbnRpYWwoV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdF
VChwcml2LT5hdXRoV2lkZ2V0KSkpOwotICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQXV0
aGVudGljYXRlKGF1dGhEaWFsb2csIHdlYkNyZWRlbnRpYWwuZ2V0KCkpOworICAgIFdlYktpdENy
ZWRlbnRpYWwqIGNyZWRlbnRpYWwgPSB3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKHdlYmtpdEF1dGhl
bnRpY2F0aW9uV2lkZ2V0Q3JlYXRlQ3JlZGVudGlhbChXRUJLSVRfQVVUSEVOVElDQVRJT05fV0lE
R0VUKHByaXYtPmF1dGhXaWRnZXQpKSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfYXV0aGVudGljYXRlKHByaXYtPnJlcXVlc3QuZ2V0KCksIGNyZWRlbnRpYWwpOworICAgIHdl
YmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlhbCk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95
KEdUS19XSURHRVQoYXV0aERpYWxvZykpOwogfQogCiBzdGF0aWMgdm9pZCBjYW5jZWxCdXR0b25D
bGlja2VkKEd0a0J1dHRvbiosIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9n
KQogewotICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQXV0aGVudGljYXRlKGF1dGhEaWFs
b2csIDApOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShh
dXRoRGlhbG9nLT5wcml2LT5yZXF1ZXN0LmdldCgpLCAwKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3koR1RLX1dJREdFVChhdXRoRGlhbG9nKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZyogYXV0
aERpYWxvZywgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSkKQEAg
LTgwLDcgKzc2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0
aWFsaXplKFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXQKICAgICBndGtfYm94X3BhY2tf
ZW5kKEdUS19CT1goYnV0dG9uQm94KSwgYnV0dG9uLCBGQUxTRSwgVFJVRSwgMCk7CiAgICAgZ3Rr
X3dpZGdldF9zaG93KGJ1dHRvbik7CiAKLSAgICBhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0
ID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXROZXcoYXV0aERpYWxvZy0+cHJpdi0+YXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UtPmNvcmUoKSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKKyAgICBh
dXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0ID0gd2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRO
ZXcod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
YXV0aERpYWxvZy0+cHJpdi0+cmVxdWVzdC5nZXQoKSktPmNvcmUoKSwgY3JlZGVudGlhbFN0b3Jh
Z2VNb2RlKTsKICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Qm94KSwgYXV0aERpYWxv
Zy0+cHJpdi0+YXV0aFdpZGdldCwgVFJVRSwgVFJVRSwgMCk7CiAgICAgZ3RrX3dpZGdldF9zaG93
KGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQpOwogCkBAIC0xMzgsMTAgKzEzNCwxMCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fZGlhbG9nX2NsYXNzX2luaXQoV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2dDbAogICAgIHdpZGdldENsYXNzLT5tYXAgPSB3ZWJraXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ01hcDsKIH0KIAotR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ05ldyhBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCitHdGtXaWRnZXQqIHdlYmtpdEF1
dGhlbnRpY2F0aW9uRGlhbG9nTmV3KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIG1vZGUpCiB7CiAgICAgV2ViS2l0QXV0aGVudGljYXRp
b25EaWFsb2cqIGF1dGhEaWFsb2cgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05fRElBTE9HKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9ESUFMT0csIE5VTEwpKTsKLSAgICBh
dXRoRGlhbG9nLT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOworICAgIGF1dGhEaWFsb2ctPnByaXYtPnJlcXVlc3QgPSByZXF1ZXN0OwogICAg
IHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShhdXRoRGlhbG9nLCBtb2RlKTsK
ICAgICByZXR1cm4gR1RLX1dJREdFVChhdXRoRGlhbG9nKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZy5oCmluZGV4IDdkNGRlMmE2ZDNkODE5Y2IxYzY4NzMwM2RiYzE1YTBjN2QxM2VlNDIuLjYx
MGZhZDY1NTFkYTVkMjk0YjBmOTczNmMxNGRjODFlYmMxZjMwZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRp
b25EaWFsb2cuaApAQCAtMjAsNyArMjAsNyBAQAogI2lmbmRlZiBXZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZ19oCiAjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nX2gKIAotI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvbldpZGdl
dC5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIApAQCAtNDgsNyArNDgsNyBAQCBzdHJ1Y3QgX1dl
YktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2xhc3MgewogfTsKIAogR1R5cGUgd2Via2l0X2F1dGhl
bnRpY2F0aW9uX2RpYWxvZ19nZXRfdHlwZSgpOwotR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNh
dGlvbkRpYWxvZ05ldyhXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqLCBDcmVk
ZW50aWFsU3RvcmFnZU1vZGUpOworR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxv
Z05ldyhXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqLCBDcmVkZW50aWFsU3RvcmFnZU1vZGUp
OwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mMDRmZTg2NWQ0ZTQ2NGYzMDQ5MjY0NDBhZjJiNzQ4ZjM1MTFmZmQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0LmNwcApAQCAtMCwwICsxLDI5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIgor
CisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyLmgiCisjaW5jbHVkZSAi
V2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYlByb3RlY3Rpb25TcGFjZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgorICogU0VDVElPTjogV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0CisgKiBAU2hvcnRfZGVzY3JpcHRpb246IFJlcHJlc2VudHMgYW4gYXV0aGVu
dGljYXRpb24gcmVxdWVzdAorICogQFRpdGxlOiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QK
KyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYlZpZXcKKyAqCisgKiBXaGVuZXZlciBhIGNsaWVudCBh
dHRlbXB0cyB0byBsb2FkIGEgcGFnZSBwcm90ZWN0ZWQgYnkgSFRUUAorICogYXV0aGVudGljYXRp
b24sIGNyZWRlbnRpYWxzIHdpbGwgbmVlZCB0byBiZSBwcm92aWRlZCB0byBhdXRob3JpemUgYWNj
ZXNzLgorICogVG8gYWxsb3cgdGhlIGNsaWVudCB0byBkZWNpZGUgaG93IGl0IHdpc2hlcyB0byBo
YW5kbGUgYXV0aGVudGljYXRpb24sCisgKiBXZWJLaXQgd2lsbCBmaXJlIGEgI1dlYktpdFdlYlZp
ZXc6OmF1dGhlbnRpY2F0ZSBzaWduYWwgd2l0aCBhCisgKiBXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3Qgb2JqZWN0IHRvIHByb3ZpZGUgY2xpZW50IHNpZGUKKyAqIGF1dGhlbnRpY2F0aW9uIHN1
cHBvcnQuIENyZWRlbnRpYWxzIGFyZSBleHBvc2VkIHRocm91Z2ggdGhlCisgKiAjV2ViS2l0Q3Jl
ZGVudGlhbCBvYmplY3QuCisgKgorICogSW4gY2FzZSB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIGRv
ZXMgbm90IHdpc2gKKyAqIHRvIGhhbmRsZSB0aGlzIHNpZ25hbCBXZWJLaXQgd2lsbCBwcm92aWRl
IGEgZGVmYXVsdCBoYW5kbGVyLiBUbyBoYW5kbGUKKyAqIGF1dGhlbnRpY2F0aW9uIGFzeW5jaHJv
bm91c2x5LCBzaW1wbHkgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUKKyAqIFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCBvYmplY3QuCisgKi8KKworc3RydWN0IF9XZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlIHsKKyAgICBSZWZQdHI8QXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eT4gYXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgYm9vbCBwcml2YXRl
QnJvd3NpbmdFbmFibGVkOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7CisgICAgQ1N0cmluZyBo
b3N0OworICAgIENTdHJpbmcgcmVhbG07Cit9OworCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfREVGQVVMVCwgUHJvdGVjdGlvblNwYWNl
QXV0aGVudGljYXRpb25TY2hlbWVEZWZhdWx0KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDLCBQcm90ZWN0aW9uU3Bh
Y2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBCYXNpYyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9ESUdFU1QsIFByb3RlY3Rp
b25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lSFRUUERpZ2VzdCk7CitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRNTF9GT1JNLCBQcm90
ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUTUxGb3JtKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9OVExNLCBQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5UTE0pOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05FR09USUFURSwgUHJvdGVjdGlv
blNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOZWdvdGlhdGUpOworQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0NMSUVOVF9DRVJUSUZJQ0FU
RV9SRVFVRVNURUQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lQ2xpZW50Q2Vy
dGlmaWNhdGVSZXF1ZXN0ZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRf
QVVUSEVOVElDQVRJT05fU0NIRU1FX1NFUlZFUl9UUlVTVF9FVkFMVUFUSU9OX1JFUVVFU1RFRCwg
UHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25S
ZXF1ZXN0ZWQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElD
QVRJT05fU0NIRU1FX1VOS05PV04sIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
VW5rbm93bik7CisKK1dFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QsIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKQorCitzdGF0
aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3REaXNwb3NlKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRf
QVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmplY3QpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBy
ZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9yZSBmaW5hbGl6aW5nLgorICAgIGlmICghcmVx
dWVzdC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QpCisgICAgICAgIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9h
dXRoZW50aWNhdGlvbl9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2xhc3NfaW5pdChX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdP
YmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOwor
ICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlz
cG9zZTsKK30KKworV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3ZWJraXRBdXRoZW50aWNh
dGlvblJlcXVlc3RDcmVhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UsIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3sKKyAgICBXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfQVVUSEVOVElDQVRJT05f
UkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwg
TlVMTCkpOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlID0gYXV0
aGVudGljYXRpb25DaGFsbGVuZ2U7CisgICAgcmVxdWVzdC0+cHJpdi0+cHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCA9IHByaXZhdGVCcm93c2luZ0VuYWJsZWQ7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9
CisKK0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdEdldEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25D
aGFsbGVuZ2UuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfY2FuX3NhdmVfY3JlZGVudGlhbHM6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0CisgKgorICogRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGF1dGhlbnRpY2F0aW9u
IG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhpcworICogI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCBzaG91bGQgYWxsb3cgdGhlIHN0b3JhZ2Ugb2YgY3JlZGVudGlhbHMuCisgKiBUaGlzIHdp
bGwgcmV0dXJuICVGQUxTRSBpZiB3ZWJraXQgZG9lc24ndCBzdXBwb3J0IGNyZWRlbnRpYWwgc3Rv
cmluZworICogb3IgaWYgcHJpdmF0ZSBicm93c2luZyBpcyBlbmFibGVkLgorICoKKyAqIFJldHVy
bnM6ICVUUlVFIGlmIHdlYmtpdCBjYW4gc3RvcmUgY3JlZGVudGlhbHMgb3IgJUZBTFNFIG90aGVy
d2lzZS4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2dib29sZWFuIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVU
SEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgRkFMU0UpOworCisjaWYgRU5BQkxFKENSRURF
TlRJQUxfU1RPUkFHRSkKKyAgICByZXR1cm4gIXJlcXVlc3QtPnByaXYtPnByaXZhdGVCcm93c2lu
Z0VuYWJsZWQ7CisjZWxzZQorICAgIHJldHVybiBGQUxTRTsKKyNlbmRpZgorfQorCisvKioKKyAq
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsOgor
ICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0
aGUgI1dlYktpdENyZWRlbnRpYWwgb2YgdGhlIHByb3Bvc2VkIGF1dGhlbnRpY2F0aW9uIGNoYWxs
ZW5nZSB0aGF0IHdhcworICogc3RvcmVkIGZyb20gYSBwcmV2aW91cyBzZXNzaW9uLiBUaGUgY2xp
ZW50IGNhbiB1c2UgdGhpcyBkaXJlY3RseSBmb3IKKyAqIGF1dGhlbnRpY2F0aW9uIG9yIGNvbnN0
cnVjdCB0aGVpciBvd24gI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBBICNXZWJLaXRDcmVkZW50aWFsIGVuY2Fwc3VsYXRpbmcgY3JlZGVudGlhbCBk
ZXRhaWxzCisgKiBvciAlTlVMTCBpZiB0aGVyZSBpcyBubyBzdG9yZWQgY3JlZGVudGlhbC4KKyAq
CisgKiBTaW5jZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
QVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICBjb25zdCBXZWJDb3Jl
OjpDcmVkZW50aWFsJiBjcmVkZW50aWFsID0gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25D
aGFsbGVuZ2UtPnByb3Bvc2VkQ3JlZGVudGlhbCgpLT5jb3JlKCk7CisgICAgaWYgKGNyZWRlbnRp
YWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB3ZWJraXRDcmVk
ZW50aWFsQ3JlYXRlKGNyZWRlbnRpYWwpOworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9ob3N0OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgaG9zdCB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24g
Y2hhbGxlbmdlIGlzIGFwcGxpY2FibGUgdG8uCisgKgorICogUmV0dXJuczogVGhlIGhvc3Qgb2Yg
QHJlcXVlc3QuCisgKgorICogU2luY2U6IDIuMgorICovCitjb25zdCBnY2hhciogd2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X2hvc3QoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5U
SUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5o
b3N0LmlzTnVsbCgpKQorICAgICAgICByZXF1ZXN0LT5wcml2LT5ob3N0ID0gcmVxdWVzdC0+cHJp
di0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5ob3N0KCkudXRm
OCgpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5ob3N0LmRhdGEoKTsKK30KKworLyoqCisg
KiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydDoKKyAqIEByZXF1ZXN0OiBh
ICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIHBvcnQgdGhhdCB0
aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAqIFJl
dHVybnM6IFRoZSBwb3J0IG9mIEByZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworZ3Vp
bnQgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQoV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIHJldHVybiBy
ZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+cHJvdGVjdGlvblNwYWNlKCkt
PnBvcnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cmVhbG06CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgor
ICogR2V0IHRoZSByZWFsbSB0aGF0IHRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIGlzIGFw
cGxpY2FibGUgdG8uCisgKgorICogUmV0dXJuczogVGhlIHJlYWxtIG9mIEByZXF1ZXN0LgorICoK
KyAqIFNpbmNlOiAyLjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2dldF9yZWFsbShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVF
U1QocmVxdWVzdCksIDApOworCisgICAgaWYgKHJlcXVlc3QtPnByaXYtPnJlYWxtLmlzTnVsbCgp
KQorICAgICAgICByZXF1ZXN0LT5wcml2LT5yZWFsbSA9IHJlcXVlc3QtPnByaXYtPmF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlLT5wcm90ZWN0aW9uU3BhY2UoKS0+cmVhbG0oKS51dGY4KCk7CisgICAg
cmV0dXJuIHJlcXVlc3QtPnByaXYtPnJlYWxtLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lOgorICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgYXV0aGVudGljYXRpb24gc2No
ZW1lIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UuCisgKgorICogUmV0dXJuczogVGhl
ICNXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZSBvZiBAcmVxdWVzdC4KKyAqCisgKiBTaW5jZTog
Mi4yCisgKi8KK1dlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9zY2hlbWUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9S
RVFVRVNUKHJlcXVlc3QpLCBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX1VOS05PV04pOwor
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lPihyZXF1
ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+cHJvdGVjdGlvblNwYWNlKCktPmF1
dGhlbnRpY2F0aW9uU2NoZW1lKCkpOworfQorCisvKioKKyAqIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2lzX2Zvcl9wcm94eToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QKKyAqCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgYXV0aGVudGljYXRpb24g
Y2hhbGxlbmdlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIHByb3h5IHNlcnZlciByYXRoZXIgdGhhbiBh
biAib3JpZ2luIiBzZXJ2ZXIuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgYXV0aGVudGljYXRp
b24gaXMgZm9yIGEgcHJveHkgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi4y
CisgKi8KK2dib29sZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94
eShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCksIEZB
TFNFKTsKKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZS0+cHJvdGVjdGlvblNwYWNlKCktPmlzUHJveHkoKTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIHRoaXMgaXMg
YSBmaXJzdCBhdHRlbXB0IG9yIGEgcmV0cnkgZm9yIHRoaXMgYXV0aGVudGljYXRpb24gY2hhbGxl
bmdlLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHQgaXMg
YSByZXRyeSBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworZ2Jv
b2xlYW4gd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkoV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIHJldHVy
biByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+cHJldmlvdXNGYWlsdXJl
Q291bnQoKSA/IFRSVUUgOiBGQUxTRTsKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9hdXRoZW50aWNhdGU6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0CisgKiBAY3JlZGVudGlhbDogKHRyYW5zZmVyIG5vbmUpIChhbGxvdy1ub25l
KTogQSAjV2ViS2l0Q3JlZGVudGlhbCwgb3IgJU5VTEwKKyAqCisgKiBBdXRoZW50aWNhdGUgdGhl
ICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgdXNpbmcgdGhlICNXZWJLaXRDcmVkZW50aWFs
CisgKiBzdXBwbGllZC4gVG8gY29udGludWUgd2l0aG91dCBjcmVkZW50aWFscywgcGFzcyAlTlVM
TCBhcyBAY3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3ZvaWQgd2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdCogcmVxdWVzdCwgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpKTsK
KworICAgIFJlZlB0cjxXZWJDcmVkZW50aWFsPiB3ZWJDcmVkZW50aWFsID0gY3JlZGVudGlhbCA/
IFdlYkNyZWRlbnRpYWw6OmNyZWF0ZSh3ZWJraXRDcmVkZW50aWFsR2V0Q3JlZGVudGlhbChjcmVk
ZW50aWFsKSkgOiAwOworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
LT5saXN0ZW5lcigpLT51c2VDcmVkZW50aWFsKHdlYkNyZWRlbnRpYWwuZ2V0KCkpOworICAgIHJl
cXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0ID0gdHJ1ZTsKK30KKworLyoqCisgKiB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWw6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogQ2FuY2VsIHRoZSBhdXRoZW50aWNhdGlvbiBjaGFs
bGVuZ2UuIFRoaXMgd2lsbCBhbHNvIGNhbmNlbCB0aGUgcGFnZSBsb2FkaW5nIGFuZCByZXN1bHQg
aW4gYQorICogI1dlYktpdFdlYlZpZXc6OmxvYWQtZmFpbGVkIHNpZ25hbCB3aXRoIGEgI1dlYktp
dE5ldHdvcmtFcnJvciBvZiB0eXBlICNXRUJLSVRfTkVUV09SS19FUlJPUl9DQU5DRUxMRUQgYmVp
bmcgZW1pdHRlZC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3ZvaWQgd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfY2FuY2VsKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFV
RVNUKHJlcXVlc3QpKTsKKworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLT5saXN0ZW5lcigpLT5jYW5jZWwoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTljYzlmMDhjN2E3MWE2MWU1MGExODRhZjcwMTc4OWVmZDVmOGQ1ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09N
UElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVk
ZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0X2gKKyNkZWZpbmUgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0X2gKKworI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENyZWRlbnRpYWwuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Rf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9BVVRI
RU5USUNBVElPTl9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5U
SUNBVElPTl9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsIFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0OwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0Q2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0UHJpdmF0ZSBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlOworCitz
dHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7
CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQ
cml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RD
bGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIHZvaWQgKCpfd2Vi
a2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZv
aWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpf
d2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworLyoqCisgKiBXZWJLaXRBdXRoZW50aWNh
dGlvblNjaGVtZToKKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0RFRkFVTFQ6IFRo
ZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvZiBXZWJLaXQuCisgKiBAV0VCS0lUX0FV
VEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDOiBCYXNpYyBhdXRoZW50aWNhdGlvbiBzY2hl
bWUgYXMgZGVmaW5lZCBpbiBSRkMgMjYxNy4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NI
RU1FX0hUVFBfRElHRVNUOiBEaWdlc3QgYXV0aGVudGljYXRpb24gc2NoZW1lIGFzIGRlZmluZWQg
aW4gUkZDIDI2MTcuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVE1MX0ZPUk06
IEhUTUwgRm9ybSBhdXRoZW50aWNhdGlvbi4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NI
RU1FX05UTE06IE5UTE0gTWljcm9zb2Z0IHByb3ByaWV0YXJ5IGF1dGhlbnRpY2F0aW9uIHNjaGVt
ZS4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05FR09USUFURTogTmVnb3RpYXRl
IChvciBTUE5FR08pIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBhcyBkZWZpbmVkIGluIFJGQyA0NTU5
LgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfQ0xJRU5UX0NFUlRJRklDQVRFX1JF
UVVFU1RFRDogQ2xpZW50IENlcnRpZmljYXRlIEF1dGhlbnRpY2F0aW9uIChzZWUgUkZDIDIyNDYp
LgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfU0VSVkVSX1RSVVNUX0VWQUxVQVRJ
T05fUkVRVUVTVEVEOiBTZXJ2ZXIgVHJ1c3QgQXV0aGVudGljYXRpb24uCisgKiBAV0VCS0lUX0FV
VEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOOiBBdXRoZW50aWNhdGlvbiBzY2hlbWUgdW5rbm93
bi4KKyAqCisgKiBFbnVtIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIHNj
aGVtZS4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lU
X0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9ERUZBVUxUID0gMSwKKyAgICBXRUJLSVRfQVVUSEVOVElD
QVRJT05fU0NIRU1FX0hUVFBfQkFTSUMgPSAyLAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9T
Q0hFTUVfSFRUUF9ESUdFU1QgPSAzLAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVf
SFRNTF9GT1JNID0gNCwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX05UTE0gPSA1
LAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfTkVHT1RJQVRFID0gNiwKKyAgICBX
RUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0NMSUVOVF9DRVJUSUZJQ0FURV9SRVFVRVNURUQg
PSA3LAorICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfU0VSVkVSX1RSVVNUX0VWQUxV
QVRJT05fUkVRVUVTVEVEID0gOCwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX1VO
S05PV04gPSAxMDAsCit9IFdlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lOworCisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF90eXBlICAgICAgICAg
ICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q3JlZGVudGlhbCAqCit3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbCAoV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
ciAqCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdCAgICAgICAgICAgICAg
ICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBn
dWludAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQgICAgICAgICAgICAg
ICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkg
Y29uc3QgZ2NoYXIgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtICAg
ICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0QXV0aGVudGljYXRpb25TY2hlbWUKK3dlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9zY2hlbWUgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRl
bnRpYWwpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2NhbmNlbCAgICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJl
cXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjkxM2ZiZGEyMDBmMDk1NWRlYTZiYjBkMWEw
MmY2NjI2ZTM3MTA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oCkBAIC0wLDAgKzEs
MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGVfaAor
CisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIK
KworV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVl
c3RDcmVhdGUoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiwgYm9vbCBwcml2
YXRlQnJvd3NpbmdFbmFibGVkKTsKK1dlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eSogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Kik7CisKKyNlbmRpZiAvLyBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAyMjkyNDNjOWE5
M2Q0ZDVlMzUwNzc2NjQ1NTI5ZjNlZmNiNWFiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwCkBAIC0wLDAgKzEs
MTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
S2l0Q3JlZGVudGlhbC5oIgorCisjaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUg
IldlYktpdENyZWRlbnRpYWxQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdHJ1Y3QgX1dlYktpdENyZWRlbnRpYWwg
eworICAgIF9XZWJLaXRDcmVkZW50aWFsKGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIGNvcmVD
cmVkZW50aWFsKQorICAgICAgICA6IGNyZWRlbnRpYWwoY29yZUNyZWRlbnRpYWwpCisgICAgewor
ICAgIH0KKworICAgIFdlYkNvcmU6OkNyZWRlbnRpYWwgY3JlZGVudGlhbDsKKyAgICBDU3RyaW5n
IHVzZXJuYW1lOworICAgIENTdHJpbmcgcGFzc3dvcmQ7Cit9OworCitDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUsIFdlYkNvcmU6
OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZU5vbmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTiwgV2ViQ29yZTo6Q3Jl
ZGVudGlhbFBlcnNpc3RlbmNlRm9yU2Vzc2lvbik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX1BFUk1BTkVOVCwgV2ViQ29yZTo6Q3Jl
ZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KTsKKworR19ERUZJTkVfQk9YRURfVFlQRShXZWJL
aXRDcmVkZW50aWFsLCB3ZWJraXRfY3JlZGVudGlhbCwgd2Via2l0X2NyZWRlbnRpYWxfY29weSwg
d2Via2l0X2NyZWRlbnRpYWxfZnJlZSkKKworV2ViS2l0Q3JlZGVudGlhbCogd2Via2l0Q3JlZGVu
dGlhbENyZWF0ZShjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjb3JlQ3JlZGVudGlhbCkKK3sK
KyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gZ19zbGljZV9uZXcoV2ViS2l0Q3Jl
ZGVudGlhbCk7CisgICAgbmV3IChjcmVkZW50aWFsKSBXZWJLaXRDcmVkZW50aWFsKGNvcmVDcmVk
ZW50aWFsKTsKKyAgICByZXR1cm4gY3JlZGVudGlhbDsKK30KKworY29uc3QgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCYgd2Via2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwoV2ViS2l0Q3JlZGVudGlhbCog
Y3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCBXZWJD
b3JlOjpDcmVkZW50aWFsKCkpOworCisgICAgcmV0dXJuIGNyZWRlbnRpYWwtPmNyZWRlbnRpYWw7
Cit9CisKKy8qKgorICogd2Via2l0X2NyZWRlbnRpYWxfbmV3OgorICogQHVzZXJuYW1lOiBUaGUg
dXNlcm5hbWUgZm9yIHRoZSBuZXcgY3JlZGVudGlhbAorICogQHBhc3N3b3JkOiBUaGUgcGFzc3dv
cmQgZm9yIHRoZSBuZXcgY3JlZGVudGlhbAorICogQHBlcnNpc3RlbmNlOiBUaGUgI1dlYktpdENy
ZWRlbnRpYWxQZXJzaXN0ZW5jZSBvZiB0aGUgbmV3IGNyZWRlbnRpYWwKKyAqCisgKiBDcmVhdGUg
YSBuZXcgY3JlZGVudGlhbCBmcm9tIHRoZSBwcm92aWRlZCB1c2VybmFtZSwgcGFzc3dvcmQgYW5k
IHBlcnNpc3RlbmNlIG1vZGUuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBICNX
ZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLworV2ViS2l0Q3JlZGVudGlh
bCogd2Via2l0X2NyZWRlbnRpYWxfbmV3KGNvbnN0IGdjaGFyKiB1c2VybmFtZSwgY29uc3QgZ2No
YXIqIHBhc3N3b3JkLCBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2UgcGVyc2lzdGVuY2UpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXNlcm5hbWUsIDApOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKHBhc3N3b3JkLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRDcmVkZW50aWFsQ3Jl
YXRlKFdlYkNvcmU6OkNyZWRlbnRpYWwoU3RyaW5nOjpmcm9tVVRGOCh1c2VybmFtZSksIFN0cmlu
Zzo6ZnJvbVVURjgocGFzc3dvcmQpLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDcmVkZW50aWFsUGVy
c2lzdGVuY2U+KHBlcnNpc3RlbmNlKSkpOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFs
X2NvcHk6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIE1ha2Ug
YSBjb3B5IG9mIHRoZSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgZnVsbCk6IEEgY29weSBvZiBwYXNzZWQgaW4gI1dlYktpdENyZWRlbnRpYWwKKyAqCisgKiBT
aW5jZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9jcmVkZW50aWFsX2NvcHko
V2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChjcmVkZW50aWFsLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKGNy
ZWRlbnRpYWwtPmNyZWRlbnRpYWwpOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2Zy
ZWU6CisgKiBAY3JlZGVudGlhbDogQSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIEZyZWUgdGhl
ICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNpbmNlOiAyLjIKKyAqLwordm9pZCB3ZWJraXRf
Y3JlZGVudGlhbF9mcmVlKFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChjcmVkZW50aWFsKTsKKworICAgIGNyZWRlbnRpYWwtPn5XZWJLaXRDcmVk
ZW50aWFsKCk7CisgICAgZ19zbGljZV9mcmVlKFdlYktpdENyZWRlbnRpYWwsIGNyZWRlbnRpYWwp
OworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFtZToKKyAqIEBjcmVk
ZW50aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogR2V0IHRoZSB1c2VybmFtZSBjdXJy
ZW50bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFJldHVybnM6IFRo
ZSB1c2VybmFtZSBzdG9yZWQgaW4gdGhlICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNpbmNl
OiAyLjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFtZShX
ZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGNyZWRlbnRpYWwsIDApOworCisgICAgaWYgKGNyZWRlbnRpYWwtPnVzZXJuYW1lLmlzTnVsbCgp
KQorICAgICAgICBjcmVkZW50aWFsLT51c2VybmFtZSA9IGNyZWRlbnRpYWwtPmNyZWRlbnRpYWwu
dXNlcigpLnV0ZjgoKTsKKyAgICByZXR1cm4gY3JlZGVudGlhbC0+dXNlcm5hbWUuZGF0YSgpOwor
fQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZDoKKyAqIEBjcmVkZW50
aWFsOiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogR2V0IHRoZSBwYXNzd29yZCBjdXJyZW50
bHkgaGVsZCBieSB0aGlzICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFJldHVybnM6IFRoZSBw
YXNzd29yZCBzdG9yZWQgaW4gdGhlICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNpbmNlOiAy
LjIKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZChXZWJL
aXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGNy
ZWRlbnRpYWwsIDApOworCisgICAgaWYgKGNyZWRlbnRpYWwtPnBhc3N3b3JkLmlzTnVsbCgpKQor
ICAgICAgICBjcmVkZW50aWFsLT5wYXNzd29yZCA9IGNyZWRlbnRpYWwtPmNyZWRlbnRpYWwucGFz
c3dvcmQoKS51dGY4KCk7CisgICAgcmV0dXJuIGNyZWRlbnRpYWwtPnBhc3N3b3JkLmRhdGEoKTsK
K30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQ6CisgKiBAY3JlZGVu
dGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoKKyAqIERldGVybWluZSB3aGV0aGVyIHRoaXMg
Y3JlZGVudGlhbCBoYXMgYSBwYXNzd29yZCBzdG9yZWQuCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgdGhlIGNyZWRlbnRpYWwgaGFzIGEgcGFzc3dvcmQgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAq
CisgKiBTaW5jZTogMi4yCisgKi8KK2dib29sZWFuIHdlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNz
d29yZChXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKGNyZWRlbnRpYWwsIEZBTFNFKTsKKworICAgIHJldHVybiBjcmVkZW50aWFsLT5jcmVk
ZW50aWFsLmhhc1Bhc3N3b3JkKCk7Cit9CisKKy8qKgorICogd2Via2l0X2NyZWRlbnRpYWxfZ2V0
X3BlcnNpc3RlbmNlOgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRpYWwKKyAqCisg
KiBHZXQgdGhlIHBlcnNpc3RlbmNlIG1vZGUgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0
Q3JlZGVudGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgI1dlYktpdENyZWRlbnRpYWxQZXJzaXN0
ZW5jZSBzdG9yZWQgaW4gdGhlICNXZWJLaXRDcmVkZW50aWFsLgorICoKKyAqIFNpbmNlOiAyLjIK
KyAqLworV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlIHdlYmtpdF9jcmVkZW50aWFsX2dldF9w
ZXJzaXN0ZW5jZShXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGNyZWRlbnRpYWwsIFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05P
TkUpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5j
ZT4oY3JlZGVudGlhbC0+Y3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42MzUwZTVlMTI5Yzg4ZmJmNjBjODkxNWUzOWZhYzA4MGRmZTZlMGJhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlh
bC5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBF
bGVjdHJvbmljcyBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJ
VDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAi
T25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5k
aWYKKworI2lmbmRlZiBXZWJLaXRDcmVkZW50aWFsX2gKKyNkZWZpbmUgV2ViS2l0Q3JlZGVudGlh
bF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfQ1JFREVO
VElBTCAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdENyZWRlbnRpYWwgV2ViS2l0Q3JlZGVudGlhbDsKKworLyoqCisgKiBXZWJLaXRDcmVkZW50
aWFsUGVyc2lzdGVuY2U6CisgKiBAV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfTk9ORTog
Q3JlZGVudGlhbCBkb2VzIG5vdCBwZXJzaXN0CisgKiBAV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lT
VEVOQ0VfRk9SX1NFU1NJT046IENyZWRlbnRpYWwgcGVyc2lzdHMgZm9yIHNlc3Npb24gb25seQor
ICogQFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX1BFUk1BTkVOVDogQ3JlZGVudGlhbCBw
ZXJzaXN0cyBwZXJtYW5lbnRseQorICoKKyAqIEVudW0gdmFsdWVzIHJlcHJlc2VudGluZyB0aGUg
ZHVyYXRpb24gZm9yIHdoaWNoIGEgY3JlZGVudGlhbCBwZXJzaXN0cy4KKyAqCisgKiBTaW5jZTog
Mi4yCisgKi8KK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVO
Q0VfTk9ORSwKKyAgICBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTiwK
KyAgICBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9QRVJNQU5FTlQKK30gV2ViS2l0Q3Jl
ZGVudGlhbFBlcnNpc3RlbmNlOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfY3JlZGVudGlh
bF9nZXRfdHlwZSAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Q3JlZGVu
dGlhbCAqCit3ZWJraXRfY3JlZGVudGlhbF9uZXcgICAgICAgICAgICAgICAgICAoY29uc3QgZ2No
YXIgICAgICAgICAgICAgICAgICp1c2VybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgKnBhc3N3b3JkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENyZWRlbnRpYWxQZXJz
aXN0ZW5jZSAgcGVyc2lzdGVuY2UpOworCitXRUJLSVRfQVBJIFdlYktpdENyZWRlbnRpYWwgKgor
d2Via2l0X2NyZWRlbnRpYWxfY29weSAgICAgICAgICAgICAgICAgKFdlYktpdENyZWRlbnRpYWwg
ICAgICAgICAgICAqY3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2NyZWRl
bnRpYWxfZnJlZSAgICAgICAgICAgICAgICAgKFdlYktpdENyZWRlbnRpYWwgICAgICAgICAgICAq
Y3JlZGVudGlhbCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2NyZWRlbnRp
YWxfZ2V0X3VzZXJuYW1lICAgICAgICAgKFdlYktpdENyZWRlbnRpYWwgICAgICAgICAgICAqY3Jl
ZGVudGlhbCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2NyZWRlbnRpYWxf
Z2V0X3Bhc3N3b3JkICAgICAgICAgKFdlYktpdENyZWRlbnRpYWwgICAgICAgICAgICAqY3JlZGVu
dGlhbCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNz
d29yZCAgICAgICAgIChXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOwor
CitXRUJLSVRfQVBJIFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZQord2Via2l0X2NyZWRlbnRp
YWxfZ2V0X3BlcnNpc3RlbmNlICAgICAgKFdlYktpdENyZWRlbnRpYWwgICAgICAgICAgICAqY3Jl
ZGVudGlhbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTY3YmM3ZDJjOGFjMzVlZDA1ZDk3ODA0ZWY0MzE1OTVjN2IxNzVkYgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRl
bnRpYWxQcml2YXRlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRDcmVkZW50aWFsUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdENyZWRlbnRpYWxQcml2YXRl
X2gKKworI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2
YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DcmVkZW50aWFsLmg+CisKK1dlYktpdENyZWRlbnRp
YWwqIHdlYmtpdENyZWRlbnRpYWxDcmVhdGUoY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpOwor
Y29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgd2Via2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwo
V2ViS2l0Q3JlZGVudGlhbCopOworCisjZW5kaWYgLy8gV2ViS2l0Q3JlZGVudGlhbFByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAppbmRleCAyOTQ5NzA5MGRiNjA3ZGJjYTlmMDFhYjlmNDRjOTMyN2U0ODIxYzFmLi5lNWNi
MGY4MDU0NTUyNWUyYjNjNTI5MTNiYTU1MTgzNTlmNTAzMTI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51SXRlbURhdGEuaCIKICNpbmNsdWRlICJXZWJE
YXRhLmgiCiAjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaCIKKyNpbmNsdWRl
ICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdENvbnRleHRNZW51Q2xp
ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29udGV4dE1lbnVJdGVtUHJpdmF0ZS5oIgpAQCAtMTE5
LDYgKzEyMCw4IEBAIGVudW0gewogCiAgICAgV0VCX1BST0NFU1NfQ1JBU0hFRCwKIAorICAgIEFV
VEhFTlRJQ0FURSwKKwogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC00MjksNiArNDMyLDE0IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0RmF2aWNvbkRhdGFiYXNlU2lnbmFs
SGFuZGxlcnMoV2ViS2l0V2ViVmlldyoKICAgICBwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJ
RCA9IDA7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QXV0aGVudGljYXRlKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCkKK3sKKyAgICBDcmVkZW50aWFsU3RvcmFnZU1vZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0g
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVxdWVz
dCkgPyBBbGxvd1BlcnNpc3RlbnRTdG9yYWdlIDogRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsK
KyAgICB3ZWJraXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdFQktJVF9XRUJf
VklFV19CQVNFKHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhyZXF1ZXN0
LCBjcmVkZW50aWFsU3RvcmFnZU1vZGUpKTsKKworICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0
aWMgdm9pZCBmaWxlQ2hvb3NlckRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3RrRGlhbG9nKiBkaWFs
b2csIGdpbnQgcmVzcG9uc2VJRCwgV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0KiByZXF1ZXN0KQog
ewogICAgIEdSZWZQdHI8V2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0PiBhZG9wdGVkUmVxdWVzdCA9
IGFkb3B0R1JlZihyZXF1ZXN0KTsKQEAgLTYwNSw2ICs2MTYsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
ICAgICB3ZWJWaWV3Q2xhc3MtPmRlY2lkZV9wb2xpY3kgPSB3ZWJraXRXZWJWaWV3RGVjaWRlUG9s
aWN5OwogICAgIHdlYlZpZXdDbGFzcy0+cGVybWlzc2lvbl9yZXF1ZXN0ID0gd2Via2l0V2ViVmll
d1Blcm1pc3Npb25SZXF1ZXN0OwogICAgIHdlYlZpZXdDbGFzcy0+cnVuX2ZpbGVfY2hvb3NlciA9
IHdlYmtpdFdlYlZpZXdSdW5GaWxlQ2hvb3NlcjsKKyAgICB3ZWJWaWV3Q2xhc3MtPmF1dGhlbnRp
Y2F0ZSA9IHdlYmtpdFdlYlZpZXdBdXRoZW50aWNhdGU7CiAKICAgICAvKioKICAgICAgKiBXZWJL
aXRXZWJWaWV3OndlYi1jb250ZXh0OgpAQCAtMTM2Niw2ICsxMzc4LDM5IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0Ns
YXNzKQogICAgICAgICAwLAogICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19WT0lELAog
ICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJW
aWV3OjphdXRoZW50aWNhdGU6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcg
b24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1p
dHRlZCB3aGVuIHRoZSB1c2VyIGlzIGNoYWxsZW5nZWQgd2l0aCBIVFRQCisgICAgICogYXV0aGVu
dGljYXRpb24uIFRvIGxldCB0aGUgIGFwcGxpY2F0aW9uIGFjY2VzcyBvciBzdXBwbHkKKyAgICAg
KiB0aGUgY3JlZGVudGlhbHMgYXMgd2VsbCBhcyB0byBhbGxvdyB0aGUgY2xpZW50IGFwcGxpY2F0
aW9uCisgICAgICogdG8gZWl0aGVyIGNhbmNlbCB0aGUgcmVxdWVzdCBvciBwZXJmb3JtIHRoZSBh
dXRoZW50aWNhdGlvbiwKKyAgICAgKiB0aGUgc2lnbmFsIHdpbGwgcGFzcyBhbiBpbnN0YW5jZSBv
ZiB0aGUKKyAgICAgKiAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IGluIHRoZSBAcmVxdWVz
dCBhcmd1bWVudC4KKyAgICAgKiBUbyBoYW5kbGUgdGhpcyBzaWduYWwgYXN5bmNocm9ub3VzbHkg
eW91IHNob3VsZCBrZWVwIGEgcmVmCisgICAgICogb2YgdGhlIHJlcXVlc3QgYW5kIHJldHVybiAl
VFJVRS4gVG8gZGlzYWJsZSBIVFRQIGF1dGhlbnRpY2F0aW9uCisgICAgICogZW50aXJlbHksIGNv
bm5lY3QgdG8gdGhpcyBzaWduYWwgYW5kIHNpbXBseSByZXR1cm4gJVRSVUU7CisgICAgICoKKyAg
ICAgKiBUaGUgZGVmYXVsdCBzaWduYWwgaGFuZGxlciB3aWxsIHJ1biBhIGRlZmF1bHQgYXV0aGVu
dGljYXRpb24KKyAgICAgKiBkaWFsb2cgYXN5bmNocm9ub3VzbHkgZm9yIHRoZSB1c2VyIHRvIGlu
dGVyYWN0IHdpdGguCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVy
IGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZB
TFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKgorICAgICAqIFNpbmNl
OiAyLjIKKyAgICAgKi8KKyAgICBzaWduYWxzW0FVVEhFTlRJQ0FURV0gPQorICAgICAgICBnX3Np
Z25hbF9uZXcoImF1dGhlbnRpY2F0ZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3
ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAg
ICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBhdXRoZW50aWNhdGUpLAorICAg
ICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwIC8qIGFjY3VtdWxh
dG9yIGRhdGEgKi8sCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1Qs
CisgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMSwgLyogbnVtYmVyIG9mIHBhcmFtZXRlcnMg
Ki8KKyAgICAgICAgICAgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QpOwogfQog
CiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0SXNMb2FkaW5nKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIGJvb2wgaXNMb2FkaW5nKQpAQCAtMTczOCwxMyArMTc4MywxMCBAQCB2b2lkIHdlYmtp
dFdlYlZpZXdTdWJtaXRGb3JtUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRG
b3JtU3VibWlzc2lvbgogCiB2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKIHsKLSAgICBDcmVkZW50aWFsU3RvcmFnZU1v
ZGUgY3JlZGVudGlhbFN0b3JhZ2VNb2RlOwotICAgIGlmICh3ZWJraXRfc2V0dGluZ3NfZ2V0X2Vu
YWJsZV9wcml2YXRlX2Jyb3dzaW5nKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmll
dykpKQotICAgICAgICBjcmVkZW50aWFsU3RvcmFnZU1vZGUgPSBEaXNhbGxvd1BlcnNpc3RlbnRT
dG9yYWdlOwotICAgIGVsc2UKLSAgICAgICAgY3JlZGVudGlhbFN0b3JhZ2VNb2RlID0gQWxsb3dQ
ZXJzaXN0ZW50U3RvcmFnZTsKLQotICAgIHdlYmtpdFdlYlZpZXdCYXNlQWRkQXV0aGVudGljYXRp
b25EaWFsb2coV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldyksIHdlYmtpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nTmV3KGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBjcmVkZW50aWFsU3RvcmFnZU1v
ZGUpKTsKKyAgICBnYm9vbGVhbiBwcml2YXRlQnJvd3NpbmdFbmFibGVkID0gd2Via2l0X3NldHRp
bmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRp
bmdzKHdlYlZpZXcpKTsKKyAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4g
cmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUoYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UsIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpKTsKKyAgICBnYm9v
bGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbQVVU
SEVOVElDQVRFXSwgMCwgcmVxdWVzdC5nZXQoKSwgJnJldHVyblZhbHVlKTsKIH0KIAogdm9pZCB3
ZWJraXRXZWJWaWV3SW5zZWN1cmVDb250ZW50RGV0ZWN0ZWQoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgV2ViS2l0SW5zZWN1cmVDb250ZW50RXZlbnQgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCBiMjNkN2ZmYjEzYTA4ZjA5
NTRlY2EzNTRjZTg2ZWM1NzA3M2NhMWQ3Li5hNGQ2ZTQzOWVjYTcyNmU5MDYzNzYxMzIxNmE1MTQ3
N2ViN2FlOTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFdlYktpdFdlYlZpZXdfaAog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNCYXNlLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJh
Y2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0Lmg+CkBAIC0yNDIsNiArMjQz
LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50ICAgZXZl
bnQpOwogICAgIGdib29sZWFuICAgKCogd2ViX3Byb2Nlc3NfY3Jhc2hlZCkgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCisgICAgZ2Jvb2xlYW4gICAoKiBh
dXRoZW50aWNhdGUpICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAgICp3
ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOwogICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkMCkgKHZvaWQpOwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQp
OwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOwpAQCAtMjQ5LDcgKzI1Miw2
IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDQpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDUpICh2b2lkKTsKICAg
ICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDYpICh2b2lkKTsKLSAgICB2b2lkICgqX3dlYmtpdF9y
ZXNlcnZlZDcpICh2b2lkKTsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5z
Z21sCmluZGV4IDJmYTdlYmFjZmRjNjI3ZmIyNDA5NGYwMGJlNmI3MTJmOGQyZDQzY2IuLmQ3Njll
MmE1NGI5ZWQzMmZhNDE4YTgyMWEyY2UwNjE4MTk1MDc0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bApAQCAtMTMsNiArMTMsNyBAQAogICAgIDx0aXRsZT5DbGFzcyBPdmVydmlldzwvdGl0bGU+CiAg
ICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFdlYkNvbnRleHQueG1sIi8+CiAgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFdlYlZpZXcueG1sIi8+CisgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC54bWwiLz4KICAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0QmFja0ZvcndhcmRMaXN0LnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLnhtbCIvPgogICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRTZXR0aW5ncy54bWwiLz4KQEAgLTUzLDUgKzU0LDExIEBA
CiAgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KICAgICA8dGl0bGU+SW5kZXg8L3RpdGxlPgogICA8
L2luZGV4PgorICAKKyAgPGluZGV4IGlkPSJhcGktaW5kZXgtMi0yIiByb2xlPSIyLjIiPgorICAg
IDx0aXRsZT5JbmRleCBvZiBuZXcgc3ltYm9scyBpbiAyLjI8L3RpdGxlPgorICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9hcGktaW5kZXgtMi4yLnhtbCI+PHhpOmZhbGxiYWNrIC8+PC94aTppbmNs
dWRlPgorICA8L2luZGV4PiAgCisgIAogICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYW5ub3RhdGlv
bi1nbG9zc2FyeS54bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KIDwvYm9vaz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IGYyODBjNjJkZjI5ZjI2YjMyMjYyY2RhZGYyZThk
YTMzYzFkOWI5OTAuLjI3MDRkNjNkMzAxNWYxMzQzYjIyZTM1ZjZmMTQ2M2U0ODY5YmJhMmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMTc4LDYgKzE3OCw0OCBAQCBXZWJLaXRXZWJW
aWV3UHJpdmF0ZQogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdDwvRklMRT4KK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorV2ViS2l0
QXV0aGVudGljYXRpb25TY2hlbWUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhl
bnRpY2F0ZQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsCit3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscword2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfZ2V0X2hvc3QKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dl
dF9wb3J0Cit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeQord2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwKK3dlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3NjaGVtZQord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5
CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xh
c3MKK1dFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QKK1dFQktJVF9BVVRIRU5USUNB
VElPTl9SRVFVRVNUCitXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVF9DTEFTUworV0VCS0lU
X0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfR0VUX0NMQVNTCitXRUJLSVRfSVNfQVVUSEVOVElDQVRJ
T05fUkVRVUVTVAorV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1RfQ0xBU1MKK1dFQktJ
VF9UWVBFX0NSRURFTlRJQUwKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdFByaXZhdGUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF90
eXBlCit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdHlwZQorCis8U1VCU0VDVElPTj4KK1dlYktpdENy
ZWRlbnRpYWwKK1dlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZQord2Via2l0X2NyZWRlbnRpYWxf
bmV3Cit3ZWJraXRfY3JlZGVudGlhbF9jb3B5Cit3ZWJraXRfY3JlZGVudGlhbF9mcmVlCit3ZWJr
aXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQKK3dlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0
ZW5jZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3VzZXJuYW1lCit3ZWJraXRfY3JlZGVudGlhbF9o
YXNfcGFzc3dvcmQKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRCYWNrRm9y
d2FyZExpc3Q8L0ZJTEU+CiBXZWJLaXRCYWNrRm9yd2FyZExpc3QKIHdlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbGVuZ3RoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggNWQ5N2Y2OWJlZDVkZDdmM2E3NjEx
YThkYTlkZmU3ODgzZmRhNDQ0NS4uYWI2MjBmMGQxMmEzODcwZjQ3ZWU2ZGMyOTNlNTVkOTBkYTc5
YWU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMjQsMyArMjQsNSBAQCB3ZWJraXRfY29udGV4dF9tZW51
X2l0ZW1fZ2V0X3R5cGUKIHdlYmtpdF93ZWJfdmlld19ncm91cF9nZXRfdHlwZQogd2Via2l0X3dl
Yl9leHRlbnNpb25fZ2V0X3R5cGUKIHdlYmtpdF93ZWJfcGFnZV9nZXRfdHlwZQord2Via2l0X2F1
dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3R5cGUKK3dlYmtpdF9jcmVkZW50aWFsX2dldF90eXBl
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4
IDg4ZDc3ZjI4NjBlMDYwYTUwNmFiOWJiNWM4MmZhMjhhZmE2NmIxN2EuLjA2Njc1MWFiZjQ0NDU4
YTY2M2UwOThlNDU3NDBiMDJjZGQxZjM3YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAg
LTE4LDYgKzE4LDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9h
ZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKICNpbmNsdWRl
ICJXZWJWaWV3VGVzdC5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5oPgpAQCAtMTIyOSw2ICsxMjMx
LDIzMCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld1NuYXBzaG90KFNuYXBzaG90V2ViVmlld1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQodGVzdC0+Z2V0U25hcHNob3RB
bmRDYW5jZWwoKSk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNlcm5hbWVbXSA9
ICJ1c2VybmFtZSI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3JkW10gPSAicGFz
c3dvcmQiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAi
V2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRo
RXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCI7Citz
dGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAiQmFzaWMgZFhO
bGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1c2VybmFtZTpw
YXNzd29yZCIuCitzdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJpbmdbXSA9Cisg
ICAgIjxodG1sPiIKKyAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhlbnRpY2F0aW9u
IHRlc3Q8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKK3N0YXRp
YyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0bWw+IgorICAg
ICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4i
CisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKKworCitjbGFzcyBBdXRoZW50aWNhdGlvblRl
c3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVT
VF9GSVhUVVJFKEF1dGhlbnRpY2F0aW9uVGVzdCk7CisKKyAgICBBdXRoZW50aWNhdGlvblRlc3Qo
KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYlZpZXcsICJhdXRoZW50aWNh
dGUiLCBHX0NBTExCQUNLKHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9
CisKKyAgICB+QXV0aGVudGljYXRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYlZpZXcsIEdfU0lHTkFMX01BVENIX0RBVEEs
IDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgcmV0cmllczsKKwor
ICAgIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0
Kiwgdm9pZCopCisgICAgeworICAgICAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVU
SE9EX0dFVCkgeworICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICghc3RyY21wKHBhdGgsICIvaW5kZXguaHRtbCIpKSB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBhdXRob3JpemF0aW9uID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X29uZShtZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBdXRob3JpemF0aW9uIik7CisgICAg
ICAgICAgICAvLyBSZXF1aXJlIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgICAgaWYgKGF1dGhv
cml6YXRpb24gJiYgIXN0cmNtcChhdXRob3JpemF0aW9uLCBhdXRoRXhwZWN0ZWRBdXRob3JpemF0
aW9uKSkgeworICAgICAgICAgICAgICAgIC8vIFN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24uCisg
ICAgICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfT0spOworICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhTdWNjZXNzSFRNTFN0cmlu
Zywgc3RybGVuKGF1dGhTdWNjZXNzSFRNTFN0cmluZykpOworICAgICAgICAgICAgICAgIHJldHJp
ZXMgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICgrK3JldHJpZXMgPCAzKSB7CisgICAgICAg
ICAgICAgICAgLy8gTm8gb3IgaW52YWxpZCBhdXRob3JpemF0aW9uIGhlYWRlciBwcm92aWRlZCBi
eSB0aGUgY2xpZW50LCByZXF1ZXN0IGF1dGhlbnRpY2F0aW9uIHR3aWNlIHRoZW4gZmFpbC4KKyAg
ICAgICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRV
U19VTkFVVEhPUklaRUQpOworICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNp
YyByZWFsbT1cIm15IHJlYWxtXCIiKTsKKyAgICAgICAgICAgICAgICAvLyBJbmNsdWRlIGEgZmFp
bHVyZSBtZXNzYWdlIGluIGNhc2UgdGhlIHVzZXIgYXR0ZW1wdHMgdG8gcHJvY2VlZCB3aXRob3V0
IGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJl
SFRNTFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBBdXRoZW50aWNhdGlvbiBub3Qgc3VjY2Vzc2Z1
bCwgZGlzcGxheSBhICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCIgcGFnZS4KKyAgICAgICAg
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
CisgICAgICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJs
ZW4oYXV0aEZhaWx1cmVIVE1MU3RyaW5nKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0ZPVU5EKTsKKworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRVUkkoY29uc3QgY2hh
ciogdXJpKQorICAgIHsKKyAgICAgICAgLy8gUmVzZXQgdGhlIHJldHJ5IGNvdW50IG9mIHRoZSBm
YWtlIHNlcnZlciB3aGVuIGEgcGFnZSBpcyBsb2FkZWQuCisgICAgICAgIHJldHJpZXMgPSAwOwor
ICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJKHVyaSk7CisgICAgfQorCisgICAgc3Rh
dGljIGdib29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2soV2ViS2l0V2ViVmlldyosIFdl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgQXV0aGVudGljYXRpb25UZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+cnVuQXV0aGVudGljYXRpb24ocmVxdWVzdCk7Cisg
ICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHZvaWQgcnVuQXV0aGVudGljYXRpb24o
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgYXNz
ZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7Cisg
ICAgICAgIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QqIHdhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKQorICAgIHsKKyAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gbV9hdXRoZW50aWNh
dGlvblJlcXVlc3QuZ2V0KCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdSZWZQdHI8V2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0PiBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdDsKK307CisKK2lu
dCBBdXRoZW50aWNhdGlvblRlc3Q6OnJldHJpZXMgPSAwOworCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdChBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2ZXIgPSBuZXcg
V2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bih0ZXN0LT5zZXJ2ZXJDYWxsYmFj
ayk7CisKKyAgICAvLyBFbmFibGUgcHJpdmF0ZSBicm93c2luZyBiZWZvcmUgYXV0aGVudGljYXRp
b24gcmVxdWVzdCB0byB0ZXN0IHRoYXQgY3JlZGVudGlhbHMgY2FuJ3QgYmUgc2F2ZWQuCisgICAg
d2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworCisgICAgLy8gVGVzdCBh
dXRoZW50aWNhdGlvbiByZXF1ZXN0IGdldHRlcnMgbWF0Y2ggc291cCBhdXRoZW50aWNhdGlvbiBo
ZWFkZXIuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXgu
aHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0
ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdChyZXF1ZXN0KSwgPT0s
IHNvdXBfdXJpX2dldF9ob3N0KGtTZXJ2ZXItPmJhc2VVUkkoKSkpOworICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQocmVxdWVzdCksID09
LCBzb3VwX3VyaV9nZXRfcG9ydChrU2VydmVyLT5iYXNlVVJJKCkpKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtKHJlcXVlc3QpLCA9
PSwgIm15IHJlYWxtIik7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3NjaGVtZShyZXF1ZXN0KSA9PSBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hU
VFBfQkFTSUMpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9p
c19mb3JfcHJveHkocmVxdWVzdCkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKKyAg
ICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVu
dGlhbHMocmVxdWVzdCkpOworCisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVy
ID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4odGVzdC0+c2VydmVy
Q2FsbGJhY2spOworCisgICAgLy8gVGVzdCBjYW5jZWwuCisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9u
UmVxdWVzdCgpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChyZXF1
ZXN0KTsKKyAgICAvLyBTZXJ2ZXIgZG9lc24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09
LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
RmluaXNoZWQpOworCisgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VC
S0lUX05FVFdPUktfRVJST1IsIFdFQktJVF9ORVRXT1JLX0VSUk9SX0NBTkNFTExFRCk7CisKKyAg
ICBkZWxldGUga1NlcnZlcjsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvbkZhaWx1cmUoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHN0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2
ZXIoKTsKKyAgICBrU2VydmVyLT5ydW4odGVzdC0+c2VydmVyQ2FsbGJhY2spOworCisgICAgLy8g
VGVzdCBhdXRoZW50aWNhdGlvbiBmYWlsdXJlcy4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9pbmRleC5odG1sIikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1
ZXN0KCk7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCA9IHdlYmtpdF9jcmVkZW50
aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29yZCIsIFdFQktJVF9DUkVERU5U
SUFMX1BFUlNJU1RFTkNFX05PTkUpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlh
bF9mcmVlKGNyZWRlbnRpYWwpOworICAgIC8vIEV4cGVjdCBhIHNlY29uZCBhdXRoZW50aWNhdGlv
biByZXF1ZXN0LgorICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1
ZXN0KCk7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0
cnkocmVxdWVzdCkpOworICAgIC8vIFRlc3Qgc2Vjb25kIGZhaWx1cmUuCisgICAgY3JlZGVudGlh
bCA9IHdlYmtpdF9jcmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCAid3JvbmdwYXNzd29y
ZDIiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKyAgICB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7Cisg
ICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICAvLyBFeHBlY3QgYXV0
aGVudGljYXRpb24gZmFpbGVkIHBhZ2UuCisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzLnNpemUoKSwgPT0s
IDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMF0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1p
dHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtp
dF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZEZh
aWx1cmVUaXRsZSk7CisKKyAgICBkZWxldGUga1NlcnZlcjsKK30KKworc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvbk5vQ3JlZGVudGlhbChBdXRoZW50aWNhdGlvblRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bih0ZXN0LT5zZXJ2
ZXJDYWxsYmFjayk7CisKKyAgICAvLyBUZXN0IGNvbnRpbnVlIHdpdGhvdXQgY3JlZGVudGlhbHMu
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIp
LmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVz
dC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIHdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCAwKTsKKyAgICAvLyBTZXJ2ZXIgZG9l
c24ndCBhc2sgZm9yIG5ldyBjcmVkZW50aWFscy4KKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgp
LCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0s
IExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0
X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
Q29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIo
d2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVj
dGVkRmFpbHVyZVRpdGxlKTsKKworICAgIGRlbGV0ZSBrU2VydmVyOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3VjY2VzcyhBdXRoZW50aWNhdGlvblRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIFdlYktpdFRlc3RTZXJ2ZXIqIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bih0ZXN0LT5zZXJ2
ZXJDYWxsYmFjayk7CisKKyAgICAvLyBUZXN0IGNvcnJlY3QgYXV0aGVudGljYXRpb24uCisgICAg
dGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW5kZXguaHRtbCIpLmRhdGEo
KSk7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRl
bnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgYXV0aFRlc3RQ
YXNzd29yZCwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04pOworICAg
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShyZXF1ZXN0LCBjcmVk
ZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRpYWwpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3Qt
Pm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3Rh
cnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExv
YWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOwor
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2Vi
VmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOworCisgICAgLy8gVGVzdCBsb2Fk
aW5nIHRoZSBzYW1lIChhdXRob3JpemVkKSBwYWdlIGFnYWluLgorICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOworICAgIC8vIFRo
ZXJlIGlzIG5vIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMu
c2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sw
XSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkQ29tbWl0dGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0
aEV4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKKworICAgIGRlbGV0ZSBrU2VydmVyOworfQorCiB2b2lk
IGJlZm9yZUFsbCgpCiB7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJk
ZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0KTsKQEAgLTEyNTEsNiAr
MTQ3NywxMSBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJ2aWV3LW1vZGUiLCB0ZXN0V2ViVmlld01vZGUpOwogICAgIFNuYXBzaG90V2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzbmFwc2hvdCIsIHRlc3RXZWJWaWV3U25h
cHNob3QpOwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAicGFnZS12aXNp
YmlsaXR5IiwgdGVzdFdlYlZpZXdQYWdlVmlzaWJpbGl0eSk7CisgICAgQXV0aGVudGljYXRpb25U
ZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tcmVxdWVzdCIsIHRlc3RX
ZWJWaWV3QXV0aGVudGljYXRpb25SZXF1ZXN0KTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFk
ZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1jYW5jZWwiLCB0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uQ2FuY2VsKTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0
V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1mYWlsdXJlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvbkZhaWx1cmUpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3
IiwgImF1dGhlbnRpY2F0aW9uLW5vLWNyZWRlbnRpYWwiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0
aW9uTm9DcmVkZW50aWFsKTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2Vi
VmlldyIsICJhdXRoZW50aWNhdGlvbi1zdWNjZXNzIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlv
blN1Y2Nlc3MpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBkMTg0MzE1MjgxYTgzNjNiODEwNTc4YzM4OGYxZTM2
ZWEzY2FiMmIyLi43MGUzYjQzMzA1OTNlZjZkMGZkNzg4YmEyZTkzMzFmNDIwZjg5Nzg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yMywxMiArMjMs
MTQgQEAKIAogI2RlZmluZSBfX1dFQktJVDJfSF9JTlNJREVfXwogCisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRM
aXN0SXRlbS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnUuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29r
aWVNYW5hZ2VyLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDcmVkZW50aWFsLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRE
b3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208349</attachid>
            <date>2013-08-08 09:18:07 -0700</date>
            <delta_ts>2013-08-09 02:22:43 -0700</delta_ts>
            <desc>Final patch</desc>
            <filename>bug-99352-20130808171837.patch</filename>
            <type>text/plain</type>
            <size>65674</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTUwZTc3MzRjYmZkMzRk
NGRlN2VlMzZjOWRlMWViNTQ0NmY0YmVhYi4uYjEyNjY4OWQ0NTIzN2RiODIwYzU1ZWJlNTE4NTg3
ZThjOTM2MjU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEzLTA4LTA4ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAgICAgIEFkZCBhIG5ldyBw
dWJsaWMgY2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBi
ZQorICAgICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVu
dGljYXRlIHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwcm92
aWRlIHRoZWlyIG93biBhdXRoZW50aWNhdGlvbgorICAgICAgICB3aGVuIHRoZSB1c2VyIGlzIGNo
YWxsZW5nZWQgd2l0aCBIVFRQIGF1dGhlbnRpY2F0aW9uLiBUaGUKKyAgICAgICAgY3JlZGVudGlh
bCBpcyBleHBvc2VkIHRocm91Z2ggYSBuZXcgY2xhc3MgV2ViS2l0Q3JlZGVudGlhbC4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAob2tCdXR0b25DbGlja2Vk
KTogVXNlIG5ldyBBUEkgZm9yIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoY2FuY2VsQnV0dG9u
Q2xpY2tlZCk6IERpdHRvLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0
aWFsaXplKTpHZXQKKyAgICAgICAgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgZnJvbSByZXF1ZXN0
IG9iamVjdC4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KTogRGl0dG8u
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QuY3BwOiBBZGRlZCBuZXcKKyAgICAgICAgY2xhc3MgcmVwcmVzZW50aW5nIGEgSFRUUCBhdXRo
ZW50aWNhdGlvbiByZXF1ZXN0LgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
RGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19p
bml0KToKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAg
ICAgICh3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVk
ZW50aWFscyk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJv
cG9zZWRfY3JlZGVudGlhbCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfaG9zdCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cG9ydCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0p
OgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZSk6Cisg
ICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkpOgorICAg
ICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkpOgorICAgICAgICAo
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKToKKyAgICAgICAgKHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5jcHA6
IEFkZGVkIG5ldyBjbGFzcyB0bworICAgICAgICBzdXBwb3J0IGNyZWRlbnRpYWxzIGZvciBIVFRQ
IGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoX1dlYktpdENyZWRlbnRpYWw6Ol9XZWJLaXRDcmVk
ZW50aWFsKToKKyAgICAgICAgKHdlYmtpdENyZWRlbnRpYWxDcmVhdGUpOgorICAgICAgICAod2Vi
a2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxf
bmV3KToKKyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2NvcHkpOgorICAgICAgICAod2Via2l0
X2NyZWRlbnRpYWxfZnJlZSk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNlcm5h
bWUpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkKToKKyAgICAgICAg
KHdlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNzd29yZCk6CisgICAgICAgICh3ZWJraXRfY3JlZGVu
dGlhbF9nZXRfcGVyc2lzdGVuY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENyZWRlbnRpYWwuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q3JlZGVudGlhbFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHA6IEFkZGVkIGF1dGhlbnRpY2F0ZSBzaWduYWwuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3QXV0aGVudGljYXRlKTogRGVmYXVsdCBzaWduYWwgaGFuZGxlciBmb3IgYXV0
aGVudGljYXRlLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBEaXR0by4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IENy
ZWF0ZSBhbgorICAgICAgICBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGFuZCBlbWl0IGl0IHdpdGgg
YXV0aGVudGljYXRlIHNpZ25hbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3Lmg6IFJlcGxhY2VkIHJlc2VydmVkIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgc2xv
dCB3aXRoIGZvciBXZWJWaWV3Q2xhc3Mgd2l0aCBmdW5jdGlvbiBwb2ludGVyIHRvCisgICAgICAg
IGF1dGhlbnRpY2F0ZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgc2VjdGlvbiBmb3IKKyAgICAg
ICAgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogRGl0dG8uCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGRlZCBhdXRoZW50aWNhdGlvbgor
ICAgICAgICByZXF1ZXN0IGFuZCBjcmVkZW50aWFsIHR5cGVzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDogQ3JlYXRlZCBhIG5ldworICAg
ICAgICB1bml0IHRlc3QgZm9yIEhUVFAgYXV0aGVudGljYXRpb24uIEEgbGlic291cCBzZXJ2ZXIg
Y2FsbGJhY2sKKyAgICAgICAgaGFuZGxlciBpcyBpbnN0YWxsZWQgdGhhdCBjcmVhdGVzIHNvdXAg
bWVzc2FnZXMgd2l0aCBhcHByb3ByaWF0ZQorICAgICAgICBoZWFkZXJzIGFuZCBib2R5IHRvIHRl
c3QgSFRUUCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25SZXF1ZXN0KTogVGVzdCB0aGUgYXV0aGVudGljYXRpb24KKyAgICAgICAgcmVxdWVzdCBhbmQg
Y3JlZGVudGlhbCBBUEkuCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2Vs
KTogVGVzdCBjYW5jZWxsZWQgYXV0aGVudGljYXRpb24uCisgICAgICAgICh0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uRmFpbHVyZSk6IFRlc3QgcmVwZWF0ZWQgYXV0aGVudGljYXRpb24gZmFpbHVy
ZXMuCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKTogVGVz
dCBjb250aW51ZSB3aXRob3V0CisgICAgICAgIGNyZWRlbnRpYWxzLgorICAgICAgICAodGVzdFdl
YlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOiBUZXN0IGNyZWRlbnRpYWwgc3RvcmFnZS4KKyAg
ICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKTogVGVzdCBzdWNjZXNzZnVs
IGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkZWQgdGVzdHMuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGRlZCBXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QgYW5kCisgICAgICAgIFdlYktpdENyZWRlbnRpYWwgaGVhZGVycy4KKwogMjAx
My0wNy0yNiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIExvZ2dpbmcg
c2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB1c2luZyBodW1hbi1yZWFkYWJsZSBjaGFubmVsIG5hbWVz
IHJhdGhlciB0aGFuIGNyYXp5IGJpdG1hc2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCBkYzkzM2M0MmM5YTUxMzgyMGNkMzk2OWQ2OWYwOTE1MDllZjI4OTJmLi42MjZjZWQzMzNm
ZDc0YmQ1Y2IzNDQzM2E0YzQxNzg4ZDIzNWZiM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTk0LDEyICs5NCwxNCBAQCB3ZWJraXQyX2hfYXBpICs9IFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmgKIAogd2Via2l0Mmd0a19oX2FwaSArPSBc
CisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1l
bnUuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFj
dGlvbnMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVu
dUl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5h
Z2VyLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5o
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oIFwKQEAgLTY1Myw2ICs2
NTUsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKQEAgLTY3Miw2
ICs2NzcsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2YXRlLmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nLmNwcAppbmRleCAwNjk5ZGE3ZWVkMzFjNTU0NWNlOTA3MzdhYzJhMDNjMjUx
MDBjYzc1Li5iM2FkZjA0OWE2YzNkMzg5ZmJmMzg5YzAyY2EyYzJkMmEyZWNmMzExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBAIC0yMSwxNCArMjEsMTQgQEAKICNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUg
IldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRD
cmVkZW50aWFsUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1By
aXZhdGUgewotICAgIFJlZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTsKLQorICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0PiByZXF1ZXN0OwogICAgIEd0a1dpZGdldCogYXV0aFdpZGdldDsKICAgICBHdGtXaWRnZXQq
IGRlZmF1bHRCdXR0b247CiAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4
dDsKQEAgLTM2LDIzICszNiwxOSBAQCBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
UHJpdmF0ZSB7CiAKIFdFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxv
Zywgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZywgR1RLX1RZUEVfRVZFTlRfQk9YKQogCi1z
dGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlh
bCkKLXsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBhdXRo
RGlhbG9nLT5wcml2OwotICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5l
cigpLT51c2VDcmVkZW50aWFsKGNyZWRlbnRpYWwpOwotICAgIGd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKGF1dGhEaWFsb2cpKTsKLX0KLQogc3RhdGljIHZvaWQgb2tCdXR0b25DbGlja2Vk
KEd0a0J1dHRvbiosIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQogewog
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ct
PnByaXY7Ci0gICAgUmVmUHRyPFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVk
ZW50aWFsOjpjcmVhdGUod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFs
KFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVQocHJpdi0+YXV0aFdpZGdldCkpKTsKLSAgICB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCB3ZWJDcmVk
ZW50aWFsLmdldCgpKTsKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0
Q3JlZGVudGlhbENyZWF0ZSh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0ZUNyZWRlbnRp
YWwoV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChwcml2LT5hdXRoV2lkZ2V0KSkpOworICAg
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShwcml2LT5yZXF1ZXN0
LmdldCgpLCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRp
YWwpOworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGF1dGhEaWFsb2cpKTsKIH0K
IAogc3RhdGljIHZvaWQgY2FuY2VsQnV0dG9uQ2xpY2tlZChHdGtCdXR0b24qLCBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKIHsKLSAgICB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCAwKTsKKyAgICB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUoYXV0aERpYWxvZy0+cHJpdi0+cmVxdWVzdC5nZXQo
KSwgMCk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoYXV0aERpYWxvZykpOwog
fQogCiBzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0luaXRpYWxpemUoV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2csIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSBjcmVkZW50aWFsU3RvcmFnZU1vZGUpCkBAIC04MCw3ICs3Niw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZyogYXV0CiAgICAgZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGJ1dHRvbkJveCksIGJ1dHRv
biwgRkFMU0UsIFRSVUUsIDApOwogICAgIGd0a193aWRnZXRfc2hvdyhidXR0b24pOwogCi0gICAg
YXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
TmV3KGF1dGhEaWFsb2ctPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5jb3JlKCksIGNy
ZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCA9
IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3KHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dEdldEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGF1dGhEaWFsb2ctPnByaXYtPnJlcXVlc3QuZ2V0
KCkpLT5jb3JlKCksIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CiAgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1godkJveCksIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQsIFRSVUUsIFRS
VUUsIDApOwogICAgIGd0a193aWRnZXRfc2hvdyhhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0
KTsKIApAQCAtMTM4LDEwICsxMzQsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X2F1dGhlbnRpY2F0
aW9uX2RpYWxvZ19jbGFzc19pbml0KFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2wKICAgICB3
aWRnZXRDbGFzcy0+bWFwID0gd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXA7CiB9CiAKLUd0
a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSBtb2RlKQorR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2Rl
KQogewogICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nID0gV0VCS0lU
X0FVVEhFTlRJQ0FUSU9OX0RJQUxPRyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElD
QVRJT05fRElBTE9HLCBOVUxMKSk7Ci0gICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgPSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICBhdXRoRGlhbG9nLT5w
cml2LT5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0lu
aXRpYWxpemUoYXV0aERpYWxvZywgbW9kZSk7CiAgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aERp
YWxvZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA3ZDRkZTJhNmQzZDgxOWNi
MWM2ODczMDNkYmMxNWEwYzdkMTNlZTQyLi42MTBmYWQ2NTUxZGE1ZDI5NGIwZjk3MzZjMTRkYzgx
ZWJjMWYzMGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDcgKzIwLDcgQEAK
ICNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAogI2RlZmluZSBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ19oCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAK
QEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNz
IHsKIH07CiAKIEdUeXBlIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsK
LUd0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdl
dCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThjMzNiMmI1ZjlmNDAyM2Q0ZDdiNTVj
OGNiOGQ5YmJhZmI2MzRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwy
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRGVj
aXNpb25MaXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3Jl
ZGVudGlhbFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQcm90ZWN0aW9uU3BhY2UuaCIKKyNpbmNs
dWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvKioK
KyAqIFNFQ1RJT046IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQFNob3J0X2Rlc2Ny
aXB0aW9uOiBSZXByZXNlbnRzIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QKKyAqIEBUaXRsZTog
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3
CisgKgorICogV2hlbmV2ZXIgYSBjbGllbnQgYXR0ZW1wdHMgdG8gbG9hZCBhIHBhZ2UgcHJvdGVj
dGVkIGJ5IEhUVFAKKyAqIGF1dGhlbnRpY2F0aW9uLCBjcmVkZW50aWFscyB3aWxsIG5lZWQgdG8g
YmUgcHJvdmlkZWQgdG8gYXV0aG9yaXplIGFjY2Vzcy4KKyAqIFRvIGFsbG93IHRoZSBjbGllbnQg
dG8gZGVjaWRlIGhvdyBpdCB3aXNoZXMgdG8gaGFuZGxlIGF1dGhlbnRpY2F0aW9uLAorICogV2Vi
S2l0IHdpbGwgZmlyZSBhICNXZWJLaXRXZWJWaWV3OjphdXRoZW50aWNhdGUgc2lnbmFsIHdpdGgg
YQorICogV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IG9iamVjdCB0byBwcm92aWRlIGNsaWVu
dCBzaWRlCisgKiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0LiBDcmVkZW50aWFscyBhcmUgZXhwb3Nl
ZCB0aHJvdWdoIHRoZQorICogI1dlYktpdENyZWRlbnRpYWwgb2JqZWN0LgorICoKKyAqIEluIGNh
c2UgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoCisgKiB0byBoYW5kbGUgdGhp
cyBzaWduYWwgV2ViS2l0IHdpbGwgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlci4gVG8gaGFuZGxl
CisgKiBhdXRoZW50aWNhdGlvbiBhc3luY2hyb25vdXNseSwgc2ltcGx5IGluY3JlYXNlIHRoZSBy
ZWZlcmVuY2UgY291bnQgb2YgdGhlCisgKiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgb2Jq
ZWN0LgorICovCisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSB7
CisgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+IGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOworICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKKyAgICBib29sIGhh
bmRsZWRSZXF1ZXN0OworICAgIENTdHJpbmcgaG9zdDsKKyAgICBDU3RyaW5nIHJlYWxtOworfTsK
KworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NI
RU1FX0RFRkFVTFQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdCk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hF
TUVfSFRUUF9CQVNJQywgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFz
aWMpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX0hUVFBfRElHRVNULCBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhU
VFBEaWdlc3QpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElD
QVRJT05fU0NIRU1FX0hUTUxfRk9STSwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVIVE1MRm9ybSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5U
SUNBVElPTl9TQ0hFTUVfTlRMTSwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVO
VExNKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X1NDSEVNRV9ORUdPVElBVEUsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVn
b3RpYXRlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FU
SU9OX1NDSEVNRV9DTElFTlRfQ0VSVElGSUNBVEVfUkVRVUVTVEVELCBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZUNsaWVudENlcnRpZmljYXRlUmVxdWVzdGVkKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9TRVJWRVJf
VFJVU1RfRVZBTFVBVElPTl9SRVFVRVNURUQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOLCBQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pOworCitXRUJLSVRfREVGSU5FX1RZ
UEUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqZWN0
KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZv
cmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQor
ICAgICAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisK
KyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9wYXJlbnRf
Y2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdl
YmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdERpc3Bvc2U7Cit9CisKK1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBib29sIHByaXZhdGVC
cm93c2luZ0VuYWJsZWQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1
ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5h
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIHJl
cXVlc3QtPnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmdldCgpOworfQorCisvKioKKyAq
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzOgorICog
QHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIERldGVybWlu
ZSB3aGV0aGVyIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoaXMK
KyAqICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgc2hvdWxkIGFsbG93IHRoZSBzdG9yYWdl
IG9mIGNyZWRlbnRpYWxzLgorICogVGhpcyB3aWxsIHJldHVybiAlRkFMU0UgaWYgd2Via2l0IGRv
ZXNuJ3Qgc3VwcG9ydCBjcmVkZW50aWFsIHN0b3JpbmcKKyAqIG9yIGlmIHByaXZhdGUgYnJvd3Np
bmcgaXMgZW5hYmxlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB3ZWJraXQgY2FuIHN0b3Jl
IGNyZWRlbnRpYWxzIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICov
CitnYm9vbGVhbiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50
aWFscyhXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCks
IEZBTFNFKTsKKworI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JBR0UpCisgICAgcmV0dXJuICFy
ZXF1ZXN0LT5wcml2LT5wcml2YXRlQnJvd3NpbmdFbmFibGVkOworI2Vsc2UKKyAgICByZXR1cm4g
RkFMU0U7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbDoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRDcmVkZW50aWFsIG9mIHRoZSBw
cm9wb3NlZCBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgdGhhdCB3YXMKKyAqIHN0b3JlZCBmcm9t
IGEgcHJldmlvdXMgc2Vzc2lvbi4gVGhlIGNsaWVudCBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9y
CisgKiBhdXRoZW50aWNhdGlvbiBvciBjb25zdHJ1Y3QgdGhlaXIgb3duICNXZWJLaXRDcmVkZW50
aWFsLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0Q3JlZGVudGlh
bCBlbmNhcHN1bGF0aW5nIGNyZWRlbnRpYWwgZGV0YWlscworICogb3IgJU5VTEwgaWYgdGhlcmUg
aXMgbm8gc3RvcmVkIGNyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRD
cmVkZW50aWFsKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3Jl
ZGVudGlhbChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVz
dCksIDApOworCisgICAgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCA9IHJl
cXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm9wb3NlZENyZWRlbnRpYWwo
KS0+Y29yZSgpOworICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShjcmVkZW50aWFsKTsKK30K
KworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdDoKKyAqIEBy
ZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGhv
c3QgdGhhdCB0aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgor
ICoKKyAqIFJldHVybnM6IFRoZSBob3N0IG9mIEByZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIK
KyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0
KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7
CisKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+aG9zdC5pc051bGwoKSkKKyAgICAgICAgcmVxdWVz
dC0+cHJpdi0+aG9zdCA9IHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5w
cm90ZWN0aW9uU3BhY2UoKS0+aG9zdCgpLnV0ZjgoKTsKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJp
di0+aG9zdC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3BvcnQ6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
CisgKgorICogR2V0IHRoZSBwb3J0IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2Ug
aXMgYXBwbGljYWJsZSB0by4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcG9ydCBvZiBAcmVxdWVzdC4K
KyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2d1aW50IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2dldF9wb3J0KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChy
ZXF1ZXN0KSwgMCk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25D
aGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5wb3J0KCk7Cit9CisKKy8qKgorICogd2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtOgorICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgcmVhbG0gdGhhdCB0aGlzIGF1
dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAqIFJldHVybnM6
IFRoZSByZWFsbSBvZiBAcmVxdWVzdC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdj
aGFyKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0oV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIGlmIChy
ZXF1ZXN0LT5wcml2LT5yZWFsbS5pc051bGwoKSkKKyAgICAgICAgcmVxdWVzdC0+cHJpdi0+cmVh
bG0gPSByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+cHJvdGVjdGlvblNw
YWNlKCktPnJlYWxtKCkudXRmOCgpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5yZWFsbS5k
YXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Nj
aGVtZToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisg
KiBHZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gY2hh
bGxlbmdlLgorICoKKyAqIFJldHVybnM6IFRoZSAjV2ViS2l0QXV0aGVudGljYXRpb25TY2hlbWUg
b2YgQHJlcXVlc3QuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRBdXRoZW50aWNhdGlv
blNjaGVtZSB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJL
aXRBdXRoZW50aWNhdGlvblNjaGVtZT4ocmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFs
bGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5hdXRoZW50aWNhdGlvblNjaGVtZSgpKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHk6CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogRGV0ZXJtaW5l
IHdoZXRoZXIgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhc3NvY2lhdGVkIHdpdGgg
YSBwcm94eSBzZXJ2ZXIgcmF0aGVyIHRoYW4gYW4gIm9yaWdpbiIgc2VydmVyLgorICoKKyAqIFJl
dHVybnM6ICVUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGlzIGZvciBhIHByb3h5IG9yICVGQUxTRSBv
dGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICovCitnYm9vbGVhbiB3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5U
SUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+
cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5pc1Byb3h5
KCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnk6
CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogRGV0
ZXJtaW5lIHdoZXRoZXIgdGhpcyB0aGlzIGlzIGEgZmlyc3QgYXR0ZW1wdCBvciBhIHJldHJ5IGZv
ciB0aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBp
ZiBhdXRoZW50aWNhdGlvbiBhdHRlbXB0IGlzIGEgcmV0cnkgb3IgJUZBTFNFIG90aGVyd2lzZS4K
KyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2dib29sZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2lzX3JldHJ5KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVT
VChyZXF1ZXN0KSwgMCk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRp
b25DaGFsbGVuZ2UtPnByZXZpb3VzRmFpbHVyZUNvdW50KCkgPyBUUlVFIDogRkFMU0U7Cit9CisK
Ky8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlOgorICog
QHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQGNyZWRlbnRpYWw6
ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IEEgI1dlYktpdENyZWRlbnRpYWwsIG9yICVO
VUxMCisgKgorICogQXV0aGVudGljYXRlIHRoZSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
IHVzaW5nIHRoZSAjV2ViS2l0Q3JlZGVudGlhbAorICogc3VwcGxpZWQuIFRvIGNvbnRpbnVlIHdp
dGhvdXQgY3JlZGVudGlhbHMsIHBhc3MgJU5VTEwgYXMgQGNyZWRlbnRpYWwuCisgKgorICogU2lu
Y2U6IDIuMgorICovCit2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRp
Y2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdENyZWRlbnRp
YWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQVVUSEVO
VElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBSZWZQdHI8V2ViQ3JlZGVudGlhbD4g
d2ViQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWwgPyBXZWJDcmVkZW50aWFsOjpjcmVhdGUod2Via2l0
Q3JlZGVudGlhbEdldENyZWRlbnRpYWwoY3JlZGVudGlhbCkpIDogMDsKKyAgICByZXF1ZXN0LT5w
cml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+dXNlQ3JlZGVudGlhbCh3
ZWJDcmVkZW50aWFsLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9
IHRydWU7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2Vs
OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIENh
bmNlbCB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLiBUaGlzIHdpbGwgYWxzbyBjYW5jZWwg
dGhlIHBhZ2UgbG9hZGluZyBhbmQgcmVzdWx0IGluIGEKKyAqICNXZWJLaXRXZWJWaWV3Ojpsb2Fk
LWZhaWxlZCBzaWduYWwgd2l0aCBhICNXZWJLaXROZXR3b3JrRXJyb3Igb2YgdHlwZSAlV0VCS0lU
X05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEIGJlaW5nIGVtaXR0ZWQuCisgKgorICogU2luY2U6IDIu
MgorICovCit2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICByZXF1ZXN0
LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+Y2FuY2VsKCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5Y2M5ZjA4YzdhNzFhNjFl
NTBhMTg0YWY3MDE3ODllZmQ1ZjhkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaApAQCAtMCww
ICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNz
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRDcmVkZW50aWFsLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9S
RVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1QsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCkpCisjZGVmaW5lIFdF
QktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qs
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCkpCisjZGVmaW5l
IFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVF
U1QpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9BVVRIRU5U
SUNBVElPTl9SRVFVRVNULCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgICAgICAgIFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3RDbGFzcyAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAg
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBf
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307
CisKKy8qKgorICogV2ViS2l0QXV0aGVudGljYXRpb25TY2hlbWU6CisgKiBAV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX1NDSEVNRV9ERUZBVUxUOiBUaGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBzY2hl
bWUgb2YgV2ViS2l0LgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJ
QzogQmFzaWMgYXV0aGVudGljYXRpb24gc2NoZW1lIGFzIGRlZmluZWQgaW4gUkZDIDI2MTcuCisg
KiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0RJR0VTVDogRGlnZXN0IGF1dGhl
bnRpY2F0aW9uIHNjaGVtZSBhcyBkZWZpbmVkIGluIFJGQyAyNjE3LgorICogQFdFQktJVF9BVVRI
RU5USUNBVElPTl9TQ0hFTUVfSFRNTF9GT1JNOiBIVE1MIEZvcm0gYXV0aGVudGljYXRpb24uCisg
KiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9OVExNOiBOVExNIE1pY3Jvc29mdCBwcm9w
cmlldGFyeSBhdXRoZW50aWNhdGlvbiBzY2hlbWUuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X1NDSEVNRV9ORUdPVElBVEU6IE5lZ290aWF0ZSAob3IgU1BORUdPKSBhdXRoZW50aWNhdGlvbiBz
Y2hlbWUgYXMgZGVmaW5lZCBpbiBSRkMgNDU1OS4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX0NMSUVOVF9DRVJUSUZJQ0FURV9SRVFVRVNURUQ6IENsaWVudCBDZXJ0aWZpY2F0ZSBB
dXRoZW50aWNhdGlvbiAoc2VlIFJGQyAyMjQ2KS4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX1NFUlZFUl9UUlVTVF9FVkFMVUFUSU9OX1JFUVVFU1RFRDogU2VydmVyIFRydXN0IEF1
dGhlbnRpY2F0aW9uLgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfVU5LTk9XTjog
QXV0aGVudGljYXRpb24gc2NoZW1lIHVua25vd24uCisgKgorICogRW51bSB2YWx1ZXMgcmVwcmVz
ZW50aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzY2hlbWUuCisgKgorICogU2luY2U6IDIuMgorICov
Cit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfREVGQVVM
VCA9IDEsCisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDID0gMiwK
KyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfRElHRVNUID0gMywKKyAgICBX
RUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUTUxfRk9STSA9IDQsCisgICAgV0VCS0lUX0FV
VEhFTlRJQ0FUSU9OX1NDSEVNRV9OVExNID0gNSwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX05FR09USUFURSA9IDYsCisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9D
TElFTlRfQ0VSVElGSUNBVEVfUkVRVUVTVEVEID0gNywKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fU0NIRU1FX1NFUlZFUl9UUlVTVF9FVkFMVUFUSU9OX1JFUVVFU1RFRCA9IDgsCisgICAgV0VC
S0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOID0gMTAwLAorfSBXZWJLaXRBdXRoZW50
aWNhdGlvblNjaGVtZTsKKworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRp
YWxzICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRf
QVBJIFdlYktpdENyZWRlbnRpYWwgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X3Byb3Bvc2VkX2NyZWRlbnRpYWwgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVz
dCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3RfZ2V0X2hvc3QgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2dldF9wb3J0ICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbSAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEF1dGhlbnRpY2F0aW9u
U2NoZW1lCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lICAgICAgICAg
ICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5ICAg
ICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5ICAg
ICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0
ZSAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwgICAgICAgICAgICAgICAgICAoV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDY5MTNmYmRhMjAwZjA5NTVkZWE2YmIwZDFhMDJmNjYyNmUzNzEwNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIK
KyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eSosIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CitXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dEdldEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCop
OworCisjZW5kaWYgLy8gV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmUwMjI5MjQzYzlhOTNkNGQ1ZTM1MDc3NjY0NTUyOWYzZWZjYjVhYjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDcmVkZW50aWFsLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIKKworI2luY2x1ZGUg
IldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
Kworc3RydWN0IF9XZWJLaXRDcmVkZW50aWFsIHsKKyAgICBfV2ViS2l0Q3JlZGVudGlhbChjb25z
dCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjb3JlQ3JlZGVudGlhbCkKKyAgICAgICAgOiBjcmVkZW50
aWFsKGNvcmVDcmVkZW50aWFsKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpDcmVkZW50
aWFsIGNyZWRlbnRpYWw7CisgICAgQ1N0cmluZyB1c2VybmFtZTsKKyAgICBDU3RyaW5nIHBhc3N3
b3JkOworfTsKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQ1JFREVOVElB
TF9QRVJTSVNURU5DRV9OT05FLCBXZWJDb3JlOjpDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVO
Q0VfRk9SX1NFU1NJT04sIFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24p
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNU
RU5DRV9QRVJNQU5FTlQsIFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCk7
CisKK0dfREVGSU5FX0JPWEVEX1RZUEUoV2ViS2l0Q3JlZGVudGlhbCwgd2Via2l0X2NyZWRlbnRp
YWwsIHdlYmtpdF9jcmVkZW50aWFsX2NvcHksIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUpCisKK1dl
YktpdENyZWRlbnRpYWwqIHdlYmtpdENyZWRlbnRpYWxDcmVhdGUoY29uc3QgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCYgY29yZUNyZWRlbnRpYWwpCit7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVu
dGlhbCA9IGdfc2xpY2VfbmV3KFdlYktpdENyZWRlbnRpYWwpOworICAgIG5ldyAoY3JlZGVudGlh
bCkgV2ViS2l0Q3JlZGVudGlhbChjb3JlQ3JlZGVudGlhbCk7CisgICAgcmV0dXJuIGNyZWRlbnRp
YWw7Cit9CisKK2NvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIHdlYmtpdENyZWRlbnRpYWxHZXRD
cmVkZW50aWFsKFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoY3JlZGVudGlhbCwgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKKworICAgIHJl
dHVybiBjcmVkZW50aWFsLT5jcmVkZW50aWFsOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50
aWFsX25ldzoKKyAqIEB1c2VybmFtZTogVGhlIHVzZXJuYW1lIGZvciB0aGUgbmV3IGNyZWRlbnRp
YWwKKyAqIEBwYXNzd29yZDogVGhlIHBhc3N3b3JkIGZvciB0aGUgbmV3IGNyZWRlbnRpYWwKKyAq
IEBwZXJzaXN0ZW5jZTogVGhlICNXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2Ugb2YgdGhlIG5l
dyBjcmVkZW50aWFsCisgKgorICogQ3JlYXRlIGEgbmV3IGNyZWRlbnRpYWwgZnJvbSB0aGUgcHJv
dmlkZWQgdXNlcm5hbWUsIHBhc3N3b3JkIGFuZCBwZXJzaXN0ZW5jZSBtb2RlLgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5j
ZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9jcmVkZW50aWFsX25ldyhjb25z
dCBnY2hhciogdXNlcm5hbWUsIGNvbnN0IGdjaGFyKiBwYXNzd29yZCwgV2ViS2l0Q3JlZGVudGlh
bFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVz
ZXJuYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYXNzd29yZCwgMCk7CisKKyAg
ICByZXR1cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShXZWJDb3JlOjpDcmVkZW50aWFsKFN0cmlu
Zzo6ZnJvbVVURjgodXNlcm5hbWUpLCBTdHJpbmc6OmZyb21VVEY4KHBhc3N3b3JkKSwgc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihwZXJzaXN0ZW5jZSkpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9jb3B5OgorICogQGNyZWRlbnRpYWw6IGEgI1dl
YktpdENyZWRlbnRpYWwKKyAqCisgKiBNYWtlIGEgY29weSBvZiB0aGUgI1dlYktpdENyZWRlbnRp
YWwuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIGNvcHkgb2YgcGFzc2VkIGlu
ICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRDcmVkZW50
aWFsKiB3ZWJraXRfY3JlZGVudGlhbF9jb3B5KFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY3JlZGVudGlhbCwgMCk7CisKKyAgICByZXR1
cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShjcmVkZW50aWFsLT5jcmVkZW50aWFsKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9mcmVlOgorICogQGNyZWRlbnRpYWw6IEEgI1dlYktp
dENyZWRlbnRpYWwKKyAqCisgKiBGcmVlIHRoZSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBT
aW5jZTogMi4yCisgKi8KK3ZvaWQgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShXZWJLaXRDcmVkZW50
aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY3JlZGVudGlhbCk7CisK
KyAgICBjcmVkZW50aWFsLT5+V2ViS2l0Q3JlZGVudGlhbCgpOworICAgIGdfc2xpY2VfZnJlZShX
ZWJLaXRDcmVkZW50aWFsLCBjcmVkZW50aWFsKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVu
dGlhbF9nZXRfdXNlcm5hbWU6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAor
ICoKKyAqIEdldCB0aGUgdXNlcm5hbWUgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3Jl
ZGVudGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgdXNlcm5hbWUgc3RvcmVkIGluIHRoZSAjV2Vi
S2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJr
aXRfY3JlZGVudGlhbF9nZXRfdXNlcm5hbWUoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCAwKTsKKworICAgIGlmIChj
cmVkZW50aWFsLT51c2VybmFtZS5pc051bGwoKSkKKyAgICAgICAgY3JlZGVudGlhbC0+dXNlcm5h
bWUgPSBjcmVkZW50aWFsLT5jcmVkZW50aWFsLnVzZXIoKS51dGY4KCk7CisgICAgcmV0dXJuIGNy
ZWRlbnRpYWwtPnVzZXJuYW1lLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlh
bF9nZXRfcGFzc3dvcmQ6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoK
KyAqIEdldCB0aGUgcGFzc3dvcmQgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3JlZGVu
dGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcGFzc3dvcmQgc3RvcmVkIGluIHRoZSAjV2ViS2l0
Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRf
Y3JlZGVudGlhbF9nZXRfcGFzc3dvcmQoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCAwKTsKKworICAgIGlmIChjcmVk
ZW50aWFsLT5wYXNzd29yZC5pc051bGwoKSkKKyAgICAgICAgY3JlZGVudGlhbC0+cGFzc3dvcmQg
PSBjcmVkZW50aWFsLT5jcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpOworICAgIHJldHVybiBj
cmVkZW50aWFsLT5wYXNzd29yZC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2NyZWRlbnRp
YWxfaGFzX3Bhc3N3b3JkOgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRpYWwKKyAq
CisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGNyZWRlbnRpYWwgaGFzIGEgcGFzc3dvcmQgc3Rv
cmVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjcmVkZW50aWFsIGhhcyBhIHBhc3N3
b3JkIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICovCitnYm9vbGVh
biB3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVu
dGlhbCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCBGQUxTRSk7CisK
KyAgICByZXR1cm4gY3JlZGVudGlhbC0+Y3JlZGVudGlhbC5oYXNQYXNzd29yZCgpOworfQorCisv
KioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZToKKyAqIEBjcmVkZW50aWFs
OiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogR2V0IHRoZSBwZXJzaXN0ZW5jZSBtb2RlIGN1
cnJlbnRseSBoZWxkIGJ5IHRoaXMgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogUmV0dXJuczog
VGhlICNXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2Ugc3RvcmVkIGluIHRoZSAjV2ViS2l0Q3Jl
ZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWxQZXJzaXN0
ZW5jZSB3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UoV2ViS2l0Q3JlZGVudGlhbCog
Y3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCBXRUJL
SVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2U+KGNyZWRlbnRpYWwtPmNyZWRlbnRpYWwucGVy
c2lzdGVuY2UoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRDcmVkZW50aWFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDcmVkZW50aWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM1MGU1ZTEyOWM4OGZiZjYwYzg5MTVl
MzlmYWMwODBkZmU2ZTBiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaApAQCAtMCwwICsxLDgwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdF
QktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0Q3JlZGVudGlh
bF9oCisjZGVmaW5lIFdlYktpdENyZWRlbnRpYWxfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX0NSRURFTlRJQUwgKHdlYmtpdF9jcmVkZW50aWFsX2dldF90
eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRDcmVkZW50aWFsIFdlYktpdENyZWRlbnRp
YWw7CisKKy8qKgorICogV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlOgorICogQFdFQktJVF9D
UkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkU6IENyZWRlbnRpYWwgZG9lcyBub3QgcGVyc2lzdAor
ICogQFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX0ZPUl9TRVNTSU9OOiBDcmVkZW50aWFs
IHBlcnNpc3RzIGZvciBzZXNzaW9uIG9ubHkKKyAqIEBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNU
RU5DRV9QRVJNQU5FTlQ6IENyZWRlbnRpYWwgcGVyc2lzdHMgcGVybWFuZW50bHkKKyAqCisgKiBF
bnVtIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIGZvciB3aGljaCBhIGNyZWRlbnRp
YWwgcGVyc2lzdHMuCisgKgorICogU2luY2U6IDIuMgorICovCit0eXBlZGVmIGVudW0geworICAg
IFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUsCisgICAgV0VCS0lUX0NSRURFTlRJ
QUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04sCisgICAgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lT
VEVOQ0VfUEVSTUFORU5UCit9IFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5cGUgICAgICAgICAgICAgKHZvaWQp
OworCitXRUJLSVRfQVBJIFdlYktpdENyZWRlbnRpYWwgKgord2Via2l0X2NyZWRlbnRpYWxfbmV3
ICAgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAqdXNlcm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgICAgICAgICpwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2UgIHBlcnNpc3RlbmNlKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRDcmVkZW50aWFsICoKK3dlYmtpdF9jcmVkZW50aWFsX2NvcHkgICAgICAg
ICAgICAgICAgIChXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jcmVkZW50aWFsX2ZyZWUgICAgICAgICAgICAgICAgIChX
ZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIGNv
bnN0IGdjaGFyICoKK3dlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFtZSAgICAgICAgIChXZWJL
aXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyICoKK3dlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZCAgICAgICAgIChXZWJLaXRD
cmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQgICAgICAgICAoV2ViS2l0Q3JlZGVudGlh
bCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDcmVkZW50aWFs
UGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZSAgICAgIChXZWJL
aXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENyZWRlbnRpYWxQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2N2JjN2QyYzhhYzM1ZWQwNWQ5
NzgwNGVmNDMxNTk1YzdiMTc1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q3JlZGVudGlhbFByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50
aWFsLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ3Jl
ZGVudGlhbC5oPgorCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKGNv
bnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsKK2NvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIHdl
YmtpdENyZWRlbnRpYWxHZXRDcmVkZW50aWFsKFdlYktpdENyZWRlbnRpYWwqKTsKKworI2VuZGlm
IC8vIFdlYktpdENyZWRlbnRpYWxQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggMjk0OTcwOTBkYjYwN2RiY2E5
ZjAxYWI5ZjQ0YzkzMjdlNDgyMWMxZi4uYmNjMWRiNzI5OWI4ZDcwOTZjOWQyYjhiMTgzYzQ3ZTVi
ZDk3Yjk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViRGF0YS5oIgogI2luY2x1ZGUgIldlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdENvbnRl
eHRNZW51SXRlbVByaXZhdGUuaCIKQEAgLTExOSw2ICsxMjAsOCBAQCBlbnVtIHsKIAogICAgIFdF
Ql9QUk9DRVNTX0NSQVNIRUQsCiAKKyAgICBBVVRIRU5USUNBVEUsCisKICAgICBMQVNUX1NJR05B
TAogfTsKIApAQCAtNDI5LDYgKzQzMiwxNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RGlz
Y29ubmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKFdlYktpdFdlYlZpZXcqCiAgICAg
cHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSAwOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgQ3JlZGVudGlhbFN0b3JhZ2VN
b2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpID8gQWxsb3dQZXJzaXN0ZW50U3RvcmFnZSA6
IERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2U7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRo
ZW50aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0QXV0
aGVudGljYXRpb25EaWFsb2dOZXcocmVxdWVzdCwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisK
KyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNw
b25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdD4gYWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdSZWYocmVxdWVzdCk7CkBAIC02MDUs
NiArNjE2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9s
aWN5ID0gd2Via2l0V2ViVmlld0RlY2lkZVBvbGljeTsKICAgICB3ZWJWaWV3Q2xhc3MtPnBlcm1p
c3Npb25fcmVxdWVzdCA9IHdlYmtpdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdDsKICAgICB3ZWJW
aWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7
CisgICAgd2ViVmlld0NsYXNzLT5hdXRoZW50aWNhdGUgPSB3ZWJraXRXZWJWaWV3QXV0aGVudGlj
YXRlOwogCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzp3ZWItY29udGV4dDoKQEAgLTEz
NjYsNiArMTM3OCwzOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChX
ZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgMCwKICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfQk9PTEVBTl9fVk9JRCwKICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRlOgorICAgICAqIEB3
ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAgICAg
KgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBpcyBjaGFsbGVu
Z2VkIHdpdGggSFRUUAorICAgICAqIGF1dGhlbnRpY2F0aW9uLiBUbyBsZXQgdGhlICBhcHBsaWNh
dGlvbiBhY2Nlc3Mgb3Igc3VwcGx5CisgICAgICogdGhlIGNyZWRlbnRpYWxzIGFzIHdlbGwgYXMg
dG8gYWxsb3cgdGhlIGNsaWVudCBhcHBsaWNhdGlvbgorICAgICAqIHRvIGVpdGhlciBjYW5jZWwg
dGhlIHJlcXVlc3Qgb3IgcGVyZm9ybSB0aGUgYXV0aGVudGljYXRpb24sCisgICAgICogdGhlIHNp
Z25hbCB3aWxsIHBhc3MgYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgICogI1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCBpbiB0aGUgQHJlcXVlc3QgYXJndW1lbnQuCisgICAgICogVG8gaGFuZGxl
IHRoaXMgc2lnbmFsIGFzeW5jaHJvbm91c2x5IHlvdSBzaG91bGQga2VlcCBhIHJlZgorICAgICAq
IG9mIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gJVRSVUUuIFRvIGRpc2FibGUgSFRUUCBhdXRoZW50
aWNhdGlvbgorICAgICAqIGVudGlyZWx5LCBjb25uZWN0IHRvIHRoaXMgc2lnbmFsIGFuZCBzaW1w
bHkgcmV0dXJuICVUUlVFLgorICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRs
ZXIgd2lsbCBydW4gYSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uCisgICAgICogZGlhbG9nIGFzeW5j
aHJvbm91c2x5IGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICAgICAqCisgICAgICog
UmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQg
Zm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1
cnRoZXIuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4yCisgICAgICovCisgICAgc2lnbmFsc1tB
VVRIRU5USUNBVEVdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJhdXRoZW50aWNhdGUiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIEdf
U0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZp
ZXdDbGFzcywgYXV0aGVudGljYXRlKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9y
X3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4s
IDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9B
VVRIRU5USUNBVElPTl9SRVFVRVNUKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1Nl
dElzTG9hZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29sIGlzTG9hZGluZykKQEAgLTE3
MzgsMTMgKzE3ODMsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24KIAogdm9pZCB3ZWJraXRX
ZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
CiB7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZTsKLSAg
ICBpZiAod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpKSkKLSAgICAgICAgY3JlZGVudGlhbFN0b3Jh
Z2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKLSAgICBlbHNlCi0gICAgICAgIGNy
ZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVudFN0b3JhZ2U7Ci0KLSAgICB3ZWJr
aXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNF
KHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisgICAgZ2Jvb2xlYW4gcHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Np
bmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CisgICAgR1JlZlB0cjxX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBwcml2YXRl
QnJvd3NpbmdFbmFibGVkKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWdu
YWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0FVVEhFTlRJQ0FURV0sIDAsIHJlcXVlc3QuZ2V0KCks
ICZyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0luc2VjdXJlQ29udGVudERl
dGVjdGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50
IHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKaW5kZXggYjIzZDdmZmIxM2EwOGYwOTU0ZWNhMzU0Y2U4NmVjNTcwNzNjYTFkNy4uYTRk
NmU0MzllY2E3MjZlOTA2Mzc2MTMyMTZhNTE0NzdlYjdhZTk3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjksNiArMjksNyBA
QAogI2RlZmluZSBXZWJLaXRXZWJWaWV3X2gKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5oPgpAQCAtMjQyLDYgKzI0Myw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRJbnNlY3VyZUNvbnRlbnRFdmVudCAgIGV2ZW50KTsKICAgICBnYm9vbGVhbiAgICgqIHdlYl9w
cm9jZXNzX2NyYXNoZWQpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92
aWV3KTsKIAorICAgIGdib29sZWFuICAgKCogYXV0aGVudGljYXRlKSAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpy
ZXF1ZXN0KTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKICAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDIpICh2b2lkKTsKQEAgLTI0OSw3ICsyNTIsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFz
cyB7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7CiAgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQ1KSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ2KSAo
dm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ3KSAodm9pZCk7CiB9OwogCiBXRUJL
SVRfQVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCAyZmE3ZWJhY2ZkYzYyN2ZiMjQw
OTRmMDBiZTZiNzEyZjhkMmQ0M2NiLi5kNzY5ZTJhNTRiOWVkMzJmYTQxOGE4MjFhMmNlMDYxODE5
NTA3NDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTEzLDYgKzEzLDcgQEAKICAgICA8dGl0
bGU+Q2xhc3MgT3ZlcnZpZXc8L3RpdGxlPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRXZWJDb250ZXh0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJW
aWV3LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEJhY2tGb3J3
YXJkTGlzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0U2V0dGlu
Z3MueG1sIi8+CkBAIC01Myw1ICs1NCwxMSBAQAogICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+CiAg
ICAgPHRpdGxlPkluZGV4PC90aXRsZT4KICAgPC9pbmRleD4KKyAgCisgIDxpbmRleCBpZD0iYXBp
LWluZGV4LTItMiIgcm9sZT0iMi4yIj4KKyAgICA8dGl0bGU+SW5kZXggb2YgbmV3IHN5bWJvbHMg
aW4gMi4yPC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTIuMi54
bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KKyAgPC9pbmRleD4gIAorICAKICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL2Fubm90YXRpb24tZ2xvc3NhcnkueG1sIj48eGk6ZmFsbGJhY2sg
Lz48L3hpOmluY2x1ZGU+CiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBm
MjgwYzYyZGYyOWYyNmIzMjI2MmNkYWRmMmU4ZGEzM2MxZDliOTkwLi4yNzA0ZDYzZDMwMTVmMTM0
M2IyMmUzNWY2ZjE0NjNlNDg2OWJiYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAg
LTE3OCw2ICsxNzgsNDggQEAgV2ViS2l0V2ViVmlld1ByaXZhdGUKIDwvU0VDVElPTj4KIAogPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QKK1dlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lCit3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUKK3dlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2NhbmNlbAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVf
Y3JlZGVudGlhbHMKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0Cit3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydAord2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfaXNfcmV0cnkKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9w
b3NlZF9jcmVkZW50aWFsCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0K
K3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUKK3dlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzCitXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElP
Tl9SRVFVRVNUCitXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVAorV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0dFVF9D
TEFTUworV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QKK1dFQktJVF9JU19BVVRIRU5U
SUNBVElPTl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfVFlQRV9DUkVERU5USUFMCisKKzxTVUJTRUNU
SU9OIFByaXZhdGU+CitXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlCit3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfdHlwZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5
cGUKKworPFNVQlNFQ1RJT04+CitXZWJLaXRDcmVkZW50aWFsCitXZWJLaXRDcmVkZW50aWFsUGVy
c2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX25ldword2Via2l0X2NyZWRlbnRpYWxfY29weQor
d2Via2l0X2NyZWRlbnRpYWxfZnJlZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkCit3
ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX2dldF91
c2VybmFtZQord2Via2l0X2NyZWRlbnRpYWxfaGFzX3Bhc3N3b3JkCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgogPEZJTEU+V2ViS2l0QmFja0ZvcndhcmRMaXN0PC9GSUxFPgogV2ViS2l0QmFja0Zv
cndhcmRMaXN0CiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVz
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVz
CmluZGV4IDVkOTdmNjliZWQ1ZGQ3ZjNhNzYxMWE4ZGE5ZGZlNzg4M2ZkYTQ0NDUuLmFiNjIwZjBk
MTJhMzg3MGY0N2VlNmRjMjkzZTU1ZDkwZGE3OWFlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKQEAgLTI0LDMg
KzI0LDUgQEAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF90eXBlCiB3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfZ2V0X3R5cGUKIHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF90eXBlCiB3ZWJraXRf
d2ViX3BhZ2VfZ2V0X3R5cGUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF90eXBl
Cit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdHlwZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAppbmRleCA4OGQ3N2YyODYwZTA2MGE1MDZhYjliYjVjODJm
YTI4YWZhNjZiMTdhLi4yYTgxODRlMjY1N2JkOGRmMTQ4ZDg3NjgwYzM4MmNmNTQ1OTM0YjdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCkBAIC0xOCw2ICsxOCw4IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJX
ZWJLaXRUZXN0U2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
VmFsdWVSZWYuaD4KQEAgLTI2LDYgKzI4LDggQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCitzdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKKwogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29u
dGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CkBAIC0xMjI5LDggKzEyMzMsMjI1IEBAIHN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3U25hcHNob3QoU25hcHNob3RXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBnX2Fzc2VydCh0ZXN0LT5nZXRTbmFwc2hvdEFuZENhbmNlbCgpKTsKIH0K
IAorY2xhc3MgQXV0aGVudGljYXRpb25UZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShBdXRoZW50aWNhdGlvblRlc3QpOwor
CisgICAgQXV0aGVudGljYXRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJWaWV3LCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhydW5BdXRoZW50aWNhdGlv
bkNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkF1dGhlbnRpY2F0aW9uVGVzdCgpCisg
ICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJW
aWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgaW50IGF1dGhlbnRpY2F0aW9uUmV0cmllczsKKworICAgIHZvaWQgbG9hZFVSSShj
b25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICAvLyBSZXNldCB0aGUgcmV0cnkgY291bnQg
b2YgdGhlIGZha2Ugc2VydmVyIHdoZW4gYSBwYWdlIGlzIGxvYWRlZC4KKyAgICAgICAgYXV0aGVu
dGljYXRpb25SZXRyaWVzID0gMDsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSh1
cmkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxi
YWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3Qs
IEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkF1dGhl
bnRpY2F0aW9uKHJlcXVlc3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2
b2lkIHJ1bkF1dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHJl
cXVlc3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1
ZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAg
ICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50aWNh
dGlvblJlcXVlc3Q7Cit9OworCitpbnQgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlv
blJldHJpZXMgPSAwOworCitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFVzZXJuYW1lW10gPSAi
dXNlcm5hbWUiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RQYXNzd29yZFtdID0gInBhc3N3
b3JkIjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldl
YktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3QiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4
cGVjdGVkRmFpbHVyZVRpdGxlW10gPSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiOworc3Rh
dGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlvbltdID0gIkJhc2ljIGRYTmxj
bTVoYldVNmNHRnpjM2R2Y21RPSI7IC8vIEJhc2U2NCBlbmNvZGluZyBvZiAidXNlcm5hbWU6cGFz
c3dvcmQiLgorc3RhdGljIGNvbnN0IGNoYXIgYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nW10gPQorICAg
ICI8aHRtbD4iCisgICAgIjxoZWFkPjx0aXRsZT5XZWJLaXQyR3RrKyBBdXRoZW50aWNhdGlvbiB0
ZXN0PC90aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48L2JvZHk+PC9odG1sPiI7CitzdGF0aWMg
Y29uc3QgY2hhciBhdXRoRmFpbHVyZUhUTUxTdHJpbmdbXSA9CisgICAgIjxodG1sPiIKKyAgICAi
PGhlYWQ+PHRpdGxlPjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkPC90aXRsZT48L2hlYWQ+Igor
ICAgICI8Ym9keT48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0
aGVudGljYXRpb25SZXF1ZXN0KEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZ2V0dGVycyBtYXRjaCBz
b3VwIGF1dGhlbnRpY2F0aW9uIGhlYWRlci4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVx
dWVzdCgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfaG9zdChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9ob3N0KGtTZXJ2ZXItPmJhc2VV
UkkoKSkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3BvcnQocmVxdWVzdCksID09LCBzb3VwX3VyaV9nZXRfcG9ydChrU2VydmVyLT5iYXNl
VVJJKCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3JlYWxtKHJlcXVlc3QpLCA9PSwgIm15IHJlYWxtIik7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KSA9PSBXRUJLSVRf
QVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUMpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkocmVxdWVzdCkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwoQXV0aGVudGlj
YXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY2FuY2VsLgor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1s
IikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0
ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOworICAgIC8vIFNlcnZlciBkb2Vzbid0IGFz
ayBmb3IgbmV3IGNyZWRlbnRpYWxzLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAz
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisKKyAgICBnX2Fzc2VydF9lcnJv
cih0ZXN0LT5tX2Vycm9yLmdldCgpLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdP
UktfRVJST1JfQ0FOQ0VMTEVEKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvbkZhaWx1cmUoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gZmFpbHVyZXMuCisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAg
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRo
ZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOworICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRl
bnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgIndyb25ncGFz
c3dvcmQiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKyAgICB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7
CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICAvLyBFeHBlY3Qg
YSBzZWNvbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdC4KKyAgICByZXF1ZXN0ID0gdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKKyAgICAvLyBUZXN0IHNlY29uZCBm
YWlsdXJlLgorICAgIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RV
c2VybmFtZSwgIndyb25ncGFzc3dvcmQyIiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0Vf
Tk9ORSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJl
cXVlc3QsIGNyZWRlbnRpYWwpOworICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlh
bCk7CisgICAgLy8gRXhwZWN0IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBwYWdlLgorICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmll
dyksID09LCBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGNvbnRpbnVlIHdpdGhvdXQgY3JlZGVu
dGlhbHMuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10
ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVx
dWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgMCk7CisgICAgLy8g
U2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMuCisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0s
IGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25TdG9yYWdlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICAvLyBFbmFibGUgcHJpdmF0ZSBicm93c2luZyBiZWZvcmUgYXV0aGVudGlj
YXRpb24gcmVxdWVzdCB0byB0ZXN0IHRoYXQgY3JlZGVudGlhbHMgY2FuJ3QgYmUgc2F2ZWQuCisg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsK
KyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMo
cmVxdWVzdCkpOworCisgICAgLy8gSWYgV2ViS2l0IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggbGli
c2VjcmV0LCBhbmQgcHJpdmF0ZSBicm93c2luZyBpcyBkaXNhYmxlZAorICAgIC8vIHRoZW4gY2hl
Y2sgdGhhdCBjcmVkZW50aWFscyBjYW4gYmUgc2F2ZWQuCisjaWYgRU5BQkxFKENSRURFTlRJQUxf
U1RPUkFHRSkKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5n
KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1s
IikuZGF0YSgpKTsKKyAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVx
dWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVxdWVzdCkpOworI2VuZGlm
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKEF1dGhl
bnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGNvcnJl
Y3QgYXV0aGVudGljYXRpb24uCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsK
KyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3
KGF1dGhUZXN0VXNlcm5hbWUsIGF1dGhUZXN0UGFzc3dvcmQsIFdFQktJVF9DUkVERU5USUFMX1BF
UlNJU1RFTkNFX0ZPUl9TRVNTSU9OKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRp
YWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7
CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFj
a2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkU3VjY2Vz
c1RpdGxlKTsKKworICAgIC8vIFRlc3QgbG9hZGluZyB0aGUgc2FtZSAoYXV0aG9yaXplZCkgcGFn
ZSBhZ2Fpbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRo
LXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgLy8gVGhlcmUgaXMgbm8gYXV0aGVudGljYXRpb24g
Y2hhbGxlbmdlLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwor
fQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4
dCosIHZvaWQqKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VU
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0
cmNtcChwYXRoLCAiL2F1dGgtdGVzdC5odG1sIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogYXV0
aG9yaXphdGlvbiA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVz
dF9oZWFkZXJzLCAiQXV0aG9yaXphdGlvbiIpOworICAgICAgICAvLyBSZXF1aXJlIGF1dGhlbnRp
Y2F0aW9uLgorICAgICAgICBpZiAoYXV0aG9yaXphdGlvbiAmJiAhc3RyY21wKGF1dGhvcml6YXRp
b24sIGF1dGhFeHBlY3RlZEF1dGhvcml6YXRpb24pKSB7CisgICAgICAgICAgICAvLyBTdWNjZXNz
ZnVsIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aFN1
Y2Nlc3NIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nKSk7CisgICAgICAg
ICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmllcyA9IDA7CisgICAg
ICAgIH0gZWxzZSBpZiAoKytBdXRoZW50aWNhdGlvblRlc3Q6OmF1dGhlbnRpY2F0aW9uUmV0cmll
cyA8IDMpIHsKKyAgICAgICAgICAgIC8vIE5vIG9yIGludmFsaWQgYXV0aG9yaXphdGlvbiBoZWFk
ZXIgcHJvdmlkZWQgYnkgdGhlIGNsaWVudCwgcmVxdWVzdCBhdXRoZW50aWNhdGlvbiB0d2ljZSB0
aGVuIGZhaWwuCisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBT
T1VQX1NUQVRVU19VTkFVVEhPUklaRUQpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJXV1ctQXV0aGVudGljYXRlIiwg
IkJhc2ljIHJlYWxtPVwibXkgcmVhbG1cIiIpOworICAgICAgICAgICAgLy8gSW5jbHVkZSBhIGZh
aWx1cmUgbWVzc2FnZSBpbiBjYXNlIHRoZSB1c2VyIGF0dGVtcHRzIHRvIHByb2NlZWQgd2l0aG91
dCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhGYWlsdXJlSFRN
TFN0cmluZywgc3RybGVuKGF1dGhGYWlsdXJlSFRNTFN0cmluZykpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gQXV0aGVudGljYXRpb24gbm90IHN1Y2Nlc3NmdWwsIGRpc3BsYXkg
YSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiIHBhZ2UuCisgICAgICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1P
UllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxlbihhdXRoRmFpbHVyZUhUTUxT
dHJpbmcpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0
X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworCisgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKIHZvaWQgYmVm
b3JlQWxsKCkKIHsKKyAgICBrU2VydmVyID0gbmV3IFdlYktpdFRlc3RTZXJ2ZXIoKTsKKyAgICBr
U2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViVmlld0RlZmF1bHRDb250ZXh0
KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImN1c3RvbS1jaGFyc2V0
IiwgdGVzdFdlYlZpZXdDdXN0b21DaGFyc2V0KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJL
aXRXZWJWaWV3IiwgInNldHRpbmdzIiwgdGVzdFdlYlZpZXdTZXR0aW5ncyk7CkBAIC0xMjUxLDgg
KzE0NzIsMTcgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAidmlldy1tb2RlIiwgdGVzdFdlYlZpZXdNb2RlKTsKICAgICBTbmFwc2hvdFdl
YlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAic25hcHNob3QiLCB0ZXN0V2ViVmlld1Nu
YXBzaG90KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInBhZ2Utdmlz
aWJpbGl0eSIsIHRlc3RXZWJWaWV3UGFnZVZpc2liaWxpdHkpOworICAgIEF1dGhlbnRpY2F0aW9u
VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhlbnRpY2F0aW9uLXJlcXVlc3QiLCB0ZXN0
V2ViVmlld0F1dGhlbnRpY2F0aW9uUmVxdWVzdCk7CisgICAgQXV0aGVudGljYXRpb25UZXN0Ojph
ZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tY2FuY2VsIiwgdGVzdFdlYlZpZXdB
dXRoZW50aWNhdGlvbkNhbmNlbCk7CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktp
dFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tZmFpbHVyZSIsIHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25GYWlsdXJlKTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmll
dyIsICJhdXRoZW50aWNhdGlvbi1uby1jcmVkZW50aWFsIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNh
dGlvbk5vQ3JlZGVudGlhbCk7CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdl
YlZpZXciLCAiYXV0aGVudGljYXRpb24tc3RvcmFnZSIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25TdG9yYWdlKTsKKyAgICAvLyBUZXN0aW5nIGF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MgbXVzdCBi
ZSBkb25lIGxhc3QgYmVjYXVzZSBsaWJzb3VwIHdpbGwgbmV2ZXIgZmlyZQorICAgIC8vIHRoZSBh
dXRoZW50aWNhdGUgc2lnbmFsIGFnYWluIG9uY2UgYXV0aGVudGljYXRpb24gaXMgc3VjY2Vzc2Z1
bC4KKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJhdXRoZW50
aWNhdGlvbi1zdWNjZXNzIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOwogfQog
CiB2b2lkIGFmdGVyQWxsKCkKIHsKKyAgICBkZWxldGUga1NlcnZlcjsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBkMTg0MzE1MjgxYTgzNjNiODEw
NTc4YzM4OGYxZTM2ZWEzY2FiMmIyLi43MGUzYjQzMzA1OTNlZjZkMGZkNzg4YmEyZTkzMzFmNDIw
Zjg5Nzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBA
IC0yMywxMiArMjMsMTQgQEAKIAogI2RlZmluZSBfX1dFQktJVDJfSF9JTlNJREVfXwogCisjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
QmFja0ZvcndhcmRMaXN0SXRlbS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1l
bnUuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29udGV4dE1lbnVJdGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDcmVkZW50
aWFsLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXREb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0Nv
bW1hbmRzLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>208408</attachid>
            <date>2013-08-09 02:22:56 -0700</date>
            <delta_ts>2013-08-09 03:47:37 -0700</delta_ts>
            <desc>Final final patch</desc>
            <filename>bug-99352-20130809102326.patch</filename>
            <type>text/plain</type>
            <size>65660</size>
            <attacher name="Brian Holt">brian.holt</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzNzUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTUwZTc3MzRjYmZkMzRk
NGRlN2VlMzZjOWRlMWViNTQ0NmY0YmVhYi4uYjEyNjY4OWQ0NTIzN2RiODIwYzU1ZWJlNTE4NTg3
ZThjOTM2MjU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDEzLTA4LTA4ICBCcmlh
biBIb2x0ICA8YnJpYW4uaG9sdEBzYW1zdW5nLmNvbT4KKworICAgICAgICBbR1RLXSBbV2ViS2l0
Ml0gQWRkIGFuICdhdXRoZW50aWNhdGUnIHNpZ25hbCB0byBXZWJLaXRXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTM1MgorCisgICAgICAg
IFJldmlld2VkIGJ5IENhcmxvcyBHYXJjaWEgQ2FtcG9zLgorCisgICAgICAgIEFkZCBhIG5ldyBw
dWJsaWMgY2xhc3MgdG8gdGhlIEFQSSwgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB0byBi
ZQorICAgICAgICBlbWl0dGVkIGFsb25nIHdpdGggYSBuZXcgV2ViS2l0V2ViVmlldzo6YXV0aGVu
dGljYXRlIHNpZ25hbCB0bworICAgICAgICBsZXQgY2xpZW50IGFwcGxpY2F0aW9ucyB0byBwcm92
aWRlIHRoZWlyIG93biBhdXRoZW50aWNhdGlvbgorICAgICAgICB3aGVuIHRoZSB1c2VyIGlzIGNo
YWxsZW5nZWQgd2l0aCBIVFRQIGF1dGhlbnRpY2F0aW9uLiBUaGUKKyAgICAgICAgY3JlZGVudGlh
bCBpcyBleHBvc2VkIHRocm91Z2ggYSBuZXcgY2xhc3MgV2ViS2l0Q3JlZGVudGlhbC4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAob2tCdXR0b25DbGlja2Vk
KTogVXNlIG5ldyBBUEkgZm9yIGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoY2FuY2VsQnV0dG9u
Q2xpY2tlZCk6IERpdHRvLgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dJbml0
aWFsaXplKTpHZXQKKyAgICAgICAgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UgZnJvbSByZXF1ZXN0
IG9iamVjdC4KKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nTmV3KTogRGl0dG8u
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QuY3BwOiBBZGRlZCBuZXcKKyAgICAgICAgY2xhc3MgcmVwcmVzZW50aW5nIGEgSFRUUCBhdXRo
ZW50aWNhdGlvbiByZXF1ZXN0LgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
RGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jbGFzc19p
bml0KToKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZSk6CisgICAg
ICAgICh3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVk
ZW50aWFscyk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJv
cG9zZWRfY3JlZGVudGlhbCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfaG9zdCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cG9ydCk6CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0p
OgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZSk6Cisg
ICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkpOgorICAg
ICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnkpOgorICAgICAgICAo
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKToKKyAgICAgICAgKHdl
YmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaDog
QWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5jcHA6
IEFkZGVkIG5ldyBjbGFzcyB0bworICAgICAgICBzdXBwb3J0IGNyZWRlbnRpYWxzIGZvciBIVFRQ
IGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoX1dlYktpdENyZWRlbnRpYWw6Ol9XZWJLaXRDcmVk
ZW50aWFsKToKKyAgICAgICAgKHdlYmtpdENyZWRlbnRpYWxDcmVhdGUpOgorICAgICAgICAod2Vi
a2l0Q3JlZGVudGlhbEdldENyZWRlbnRpYWwpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxf
bmV3KToKKyAgICAgICAgKHdlYmtpdF9jcmVkZW50aWFsX2NvcHkpOgorICAgICAgICAod2Via2l0
X2NyZWRlbnRpYWxfZnJlZSk6CisgICAgICAgICh3ZWJraXRfY3JlZGVudGlhbF9nZXRfdXNlcm5h
bWUpOgorICAgICAgICAod2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkKToKKyAgICAgICAg
KHdlYmtpdF9jcmVkZW50aWFsX2hhc19wYXNzd29yZCk6CisgICAgICAgICh3ZWJraXRfY3JlZGVu
dGlhbF9nZXRfcGVyc2lzdGVuY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENyZWRlbnRpYWwuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q3JlZGVudGlhbFByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5jcHA6IEFkZGVkIGF1dGhlbnRpY2F0ZSBzaWduYWwuCisgICAgICAgICh3
ZWJraXRXZWJWaWV3QXV0aGVudGljYXRlKTogRGVmYXVsdCBzaWduYWwgaGFuZGxlciBmb3IgYXV0
aGVudGljYXRlLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBEaXR0by4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6IENy
ZWF0ZSBhbgorICAgICAgICBhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGFuZCBlbWl0IGl0IHdpdGgg
YXV0aGVudGljYXRlIHNpZ25hbC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3Lmg6IFJlcGxhY2VkIHJlc2VydmVkIGZ1bmN0aW9uCisgICAgICAgIHBvaW50ZXIgc2xv
dCB3aXRoIGZvciBXZWJWaWV3Q2xhc3Mgd2l0aCBmdW5jdGlvbiBwb2ludGVyIHRvCisgICAgICAg
IGF1dGhlbnRpY2F0ZSBzaWduYWwgaGFuZGxlci4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sOiBBZGRlZCBuZXcgc2VjdGlvbiBmb3IKKyAgICAg
ICAgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogRGl0dG8uCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGRlZCBhdXRoZW50aWNhdGlvbgor
ICAgICAgICByZXF1ZXN0IGFuZCBjcmVkZW50aWFsIHR5cGVzLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3LmNwcDogQ3JlYXRlZCBhIG5ldworICAg
ICAgICB1bml0IHRlc3QgZm9yIEhUVFAgYXV0aGVudGljYXRpb24uIEEgbGlic291cCBzZXJ2ZXIg
Y2FsbGJhY2sKKyAgICAgICAgaGFuZGxlciBpcyBpbnN0YWxsZWQgdGhhdCBjcmVhdGVzIHNvdXAg
bWVzc2FnZXMgd2l0aCBhcHByb3ByaWF0ZQorICAgICAgICBoZWFkZXJzIGFuZCBib2R5IHRvIHRl
c3QgSFRUUCBhdXRoZW50aWNhdGlvbi4KKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRp
b25SZXF1ZXN0KTogVGVzdCB0aGUgYXV0aGVudGljYXRpb24KKyAgICAgICAgcmVxdWVzdCBhbmQg
Y3JlZGVudGlhbCBBUEkuCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uQ2FuY2Vs
KTogVGVzdCBjYW5jZWxsZWQgYXV0aGVudGljYXRpb24uCisgICAgICAgICh0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uRmFpbHVyZSk6IFRlc3QgcmVwZWF0ZWQgYXV0aGVudGljYXRpb24gZmFpbHVy
ZXMuCisgICAgICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKTogVGVz
dCBjb250aW51ZSB3aXRob3V0CisgICAgICAgIGNyZWRlbnRpYWxzLgorICAgICAgICAodGVzdFdl
YlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOiBUZXN0IGNyZWRlbnRpYWwgc3RvcmFnZS4KKyAg
ICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKTogVGVzdCBzdWNjZXNzZnVs
IGF1dGhlbnRpY2F0aW9uLgorICAgICAgICAoYmVmb3JlQWxsKTogQWRkZWQgdGVzdHMuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOiBBZGRlZCBXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QgYW5kCisgICAgICAgIFdlYktpdENyZWRlbnRpYWwgaGVhZGVycy4KKwogMjAx
My0wNy0yNiAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAgIExvZ2dpbmcg
c2hvdWxkIGJlIGNvbmZpZ3VyYWJsZSB1c2luZyBodW1hbi1yZWFkYWJsZSBjaGFubmVsIG5hbWVz
IHJhdGhlciB0aGFuIGNyYXp5IGJpdG1hc2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCBkYzkzM2M0MmM5YTUxMzgyMGNkMzk2OWQ2OWYwOTE1MDllZjI4OTJmLi42MjZjZWQzMzNm
ZDc0YmQ1Y2IzNDQzM2E0YzQxNzg4ZDIzNWZiM2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTk0LDEyICs5NCwxNCBAQCB3ZWJraXQyX2hfYXBpICs9IFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvY3BwL1dLUmV0YWluUHRyLmgKIAogd2Via2l0Mmd0a19oX2FwaSArPSBc
CisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExp
c3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1l
bnUuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVudUFj
dGlvbnMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0TWVu
dUl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5h
Z2VyLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3JlZGVudGlhbC5o
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oIFwKQEAgLTY1Myw2ICs2
NTUsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuY3Bw
IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0LmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKQEAgLTY3Miw2
ICs2NzcsOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuY3BwIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsLmggXAorCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWxQcml2YXRlLmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRp
Y2F0aW9uRGlhbG9nLmNwcAppbmRleCAwNjk5ZGE3ZWVkMzFjNTU0NWNlOTA3MzdhYzJhMDNjMjUx
MDBjYzc1Li5iM2FkZjA0OWE2YzNkMzg5ZmJmMzg5YzAyY2EyYzJkMmEyZWNmMzExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlv
bkRpYWxvZy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCkBAIC0yMSwxNCArMjEsMTQgQEAKICNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIgogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyLmgiCi0jaW5jbHVkZSAiV2ViQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUg
IldlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRD
cmVkZW50aWFsUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1By
aXZhdGUgewotICAgIFJlZlB0cjxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5PiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTsKLQorICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0PiByZXF1ZXN0OwogICAgIEd0a1dpZGdldCogYXV0aFdpZGdldDsKICAgICBHdGtXaWRnZXQq
IGRlZmF1bHRCdXR0b247CiAgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHN0eWxlQ29udGV4
dDsKQEAgLTM2LDIzICszNiwxOSBAQCBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9n
UHJpdmF0ZSB7CiAKIFdFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxv
Zywgd2Via2l0X2F1dGhlbnRpY2F0aW9uX2RpYWxvZywgR1RLX1RZUEVfRVZFTlRfQk9YKQogCi1z
dGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShXZWJLaXRB
dXRoZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZywgV2ViQ3JlZGVudGlhbCogY3JlZGVudGlh
bCkKLXsKLSAgICBXZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ1ByaXZhdGUqIHByaXYgPSBhdXRo
RGlhbG9nLT5wcml2OwotICAgIHByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5l
cigpLT51c2VDcmVkZW50aWFsKGNyZWRlbnRpYWwpOwotICAgIGd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKGF1dGhEaWFsb2cpKTsKLX0KLQogc3RhdGljIHZvaWQgb2tCdXR0b25DbGlja2Vk
KEd0a0J1dHRvbiosIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nKQogewog
ICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nUHJpdmF0ZSogcHJpdiA9IGF1dGhEaWFsb2ct
PnByaXY7Ci0gICAgUmVmUHRyPFdlYkNyZWRlbnRpYWw+IHdlYkNyZWRlbnRpYWwgPSBXZWJDcmVk
ZW50aWFsOjpjcmVhdGUod2Via2l0QXV0aGVudGljYXRpb25XaWRnZXRDcmVhdGVDcmVkZW50aWFs
KFdFQktJVF9BVVRIRU5USUNBVElPTl9XSURHRVQocHJpdi0+YXV0aFdpZGdldCkpKTsKLSAgICB3
ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCB3ZWJDcmVk
ZW50aWFsLmdldCgpKTsKKyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0
Q3JlZGVudGlhbENyZWF0ZSh3ZWJraXRBdXRoZW50aWNhdGlvbldpZGdldENyZWF0ZUNyZWRlbnRp
YWwoV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1dJREdFVChwcml2LT5hdXRoV2lkZ2V0KSkpOworICAg
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0ZShwcml2LT5yZXF1ZXN0
LmdldCgpLCBjcmVkZW50aWFsKTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKGNyZWRlbnRp
YWwpOworICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGF1dGhEaWFsb2cpKTsKIH0K
IAogc3RhdGljIHZvaWQgY2FuY2VsQnV0dG9uQ2xpY2tlZChHdGtCdXR0b24qLCBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZykKIHsKLSAgICB3ZWJraXRBdXRoZW50aWNhdGlv
bkRpYWxvZ0F1dGhlbnRpY2F0ZShhdXRoRGlhbG9nLCAwKTsKKyAgICB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUoYXV0aERpYWxvZy0+cHJpdi0+cmVxdWVzdC5nZXQo
KSwgMCk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQoYXV0aERpYWxvZykpOwog
fQogCiBzdGF0aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0luaXRpYWxpemUoV2Vi
S2l0QXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2csIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSBjcmVkZW50aWFsU3RvcmFnZU1vZGUpCkBAIC04MCw3ICs3Niw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdEF1dGhlbnRpY2F0aW9uRGlhbG9nSW5pdGlhbGl6ZShXZWJLaXRBdXRoZW50aWNhdGlvbkRp
YWxvZyogYXV0CiAgICAgZ3RrX2JveF9wYWNrX2VuZChHVEtfQk9YKGJ1dHRvbkJveCksIGJ1dHRv
biwgRkFMU0UsIFRSVUUsIDApOwogICAgIGd0a193aWRnZXRfc2hvdyhidXR0b24pOwogCi0gICAg
YXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0
TmV3KGF1dGhEaWFsb2ctPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5jb3JlKCksIGNy
ZWRlbnRpYWxTdG9yYWdlTW9kZSk7CisgICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aFdpZGdldCA9
IHdlYmtpdEF1dGhlbnRpY2F0aW9uV2lkZ2V0TmV3KHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dEdldEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGF1dGhEaWFsb2ctPnByaXYtPnJlcXVlc3QuZ2V0
KCkpLT5jb3JlKCksIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSk7CiAgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1godkJveCksIGF1dGhEaWFsb2ctPnByaXYtPmF1dGhXaWRnZXQsIFRSVUUsIFRS
VUUsIDApOwogICAgIGd0a193aWRnZXRfc2hvdyhhdXRoRGlhbG9nLT5wcml2LT5hdXRoV2lkZ2V0
KTsKIApAQCAtMTM4LDEwICsxMzQsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X2F1dGhlbnRpY2F0
aW9uX2RpYWxvZ19jbGFzc19pbml0KFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nQ2wKICAgICB3
aWRnZXRDbGFzcy0+bWFwID0gd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dNYXA7CiB9CiAKLUd0
a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIENyZWRlbnRpYWxTdG9yYWdlTW9k
ZSBtb2RlKQorR3RrV2lkZ2V0KiB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIENyZWRlbnRpYWxTdG9yYWdlTW9kZSBtb2Rl
KQogewogICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nID0gV0VCS0lU
X0FVVEhFTlRJQ0FUSU9OX0RJQUxPRyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUSEVOVElD
QVRJT05fRElBTE9HLCBOVUxMKSk7Ci0gICAgYXV0aERpYWxvZy0+cHJpdi0+YXV0aGVudGljYXRp
b25DaGFsbGVuZ2UgPSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKKyAgICBhdXRoRGlhbG9nLT5w
cml2LT5yZXF1ZXN0ID0gcmVxdWVzdDsKICAgICB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ0lu
aXRpYWxpemUoYXV0aERpYWxvZywgbW9kZSk7CiAgICAgcmV0dXJuIEdUS19XSURHRVQoYXV0aERp
YWxvZyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuaAppbmRleCA3ZDRkZTJhNmQzZDgxOWNi
MWM2ODczMDNkYmMxNWEwYzdkMTNlZTQyLi42MTBmYWQ2NTUxZGE1ZDI5NGIwZjk3MzZjMTRkYzgx
ZWJjMWYzMGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTIwLDcgKzIwLDcgQEAK
ICNpZm5kZWYgV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2dfaAogI2RlZmluZSBXZWJLaXRBdXRo
ZW50aWNhdGlvbkRpYWxvZ19oCiAKLSNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0QXV0aGVudGljYXRpb25XaWRnZXQuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+CiAK
QEAgLTQ4LDcgKzQ4LDcgQEAgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZ0NsYXNz
IHsKIH07CiAKIEdUeXBlIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9kaWFsb2dfZ2V0X3R5cGUoKTsK
LUd0a1dpZGdldCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0OjpBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKK0d0a1dpZGdl
dCogd2Via2l0QXV0aGVudGljYXRpb25EaWFsb2dOZXcoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiwgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZThjMzNiMmI1ZjlmNDAyM2Q0ZDdiNTVj
OGNiOGQ5YmJhZmI2MzRkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwy
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJL
aXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uRGVj
aXNpb25MaXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q3Jl
ZGVudGlhbFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQcm90ZWN0aW9uU3BhY2UuaCIKKyNpbmNs
dWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvKioK
KyAqIFNFQ1RJT046IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQFNob3J0X2Rlc2Ny
aXB0aW9uOiBSZXByZXNlbnRzIGFuIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QKKyAqIEBUaXRsZTog
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKiBAU2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3
CisgKgorICogV2hlbmV2ZXIgYSBjbGllbnQgYXR0ZW1wdHMgdG8gbG9hZCBhIHBhZ2UgcHJvdGVj
dGVkIGJ5IEhUVFAKKyAqIGF1dGhlbnRpY2F0aW9uLCBjcmVkZW50aWFscyB3aWxsIG5lZWQgdG8g
YmUgcHJvdmlkZWQgdG8gYXV0aG9yaXplIGFjY2Vzcy4KKyAqIFRvIGFsbG93IHRoZSBjbGllbnQg
dG8gZGVjaWRlIGhvdyBpdCB3aXNoZXMgdG8gaGFuZGxlIGF1dGhlbnRpY2F0aW9uLAorICogV2Vi
S2l0IHdpbGwgZmlyZSBhICNXZWJLaXRXZWJWaWV3OjphdXRoZW50aWNhdGUgc2lnbmFsIHdpdGgg
YQorICogV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0IG9iamVjdCB0byBwcm92aWRlIGNsaWVu
dCBzaWRlCisgKiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0LiBDcmVkZW50aWFscyBhcmUgZXhwb3Nl
ZCB0aHJvdWdoIHRoZQorICogI1dlYktpdENyZWRlbnRpYWwgb2JqZWN0LgorICoKKyAqIEluIGNh
c2UgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBkb2VzIG5vdCB3aXNoCisgKiB0byBoYW5kbGUgdGhp
cyBzaWduYWwgV2ViS2l0IHdpbGwgcHJvdmlkZSBhIGRlZmF1bHQgaGFuZGxlci4gVG8gaGFuZGxl
CisgKiBhdXRoZW50aWNhdGlvbiBhc3luY2hyb25vdXNseSwgc2ltcGx5IGluY3JlYXNlIHRoZSBy
ZWZlcmVuY2UgY291bnQgb2YgdGhlCisgKiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgb2Jq
ZWN0LgorICovCisKK3N0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSB7
CisgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHk+IGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlOworICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKKyAgICBib29sIGhh
bmRsZWRSZXF1ZXN0OworICAgIENTdHJpbmcgaG9zdDsKKyAgICBDU3RyaW5nIHJlYWxtOworfTsK
KworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NI
RU1FX0RFRkFVTFQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lRGVmYXVsdCk7
CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hF
TUVfSFRUUF9CQVNJQywgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQQmFz
aWMpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX0hUVFBfRElHRVNULCBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhU
VFBEaWdlc3QpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQVVUSEVOVElD
QVRJT05fU0NIRU1FX0hUTUxfRk9STSwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hl
bWVIVE1MRm9ybSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9BVVRIRU5U
SUNBVElPTl9TQ0hFTUVfTlRMTSwgUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVO
VExNKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X1NDSEVNRV9ORUdPVElBVEUsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTmVn
b3RpYXRlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FU
SU9OX1NDSEVNRV9DTElFTlRfQ0VSVElGSUNBVEVfUkVRVUVTVEVELCBQcm90ZWN0aW9uU3BhY2VB
dXRoZW50aWNhdGlvblNjaGVtZUNsaWVudENlcnRpZmljYXRlUmVxdWVzdGVkKTsKK0NPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9TRVJWRVJf
VFJVU1RfRVZBTFVBVElPTl9SRVFVRVNURUQsIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOLCBQcm90ZWN0
aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVVua25vd24pOworCitXRUJLSVRfREVGSU5FX1RZ
UEUoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0RGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqZWN0
KTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBhbHdheXMgaGFuZGxlZCBiZWZv
cmUgZmluYWxpemluZy4KKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPmhhbmRsZWRSZXF1ZXN0KQor
ICAgICAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisK
KyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9wYXJlbnRf
Y2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2NsYXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xh
c3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdl
YmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdERpc3Bvc2U7Cit9CisKK1dlYktpdEF1dGhlbnRpY2F0
aW9uUmVxdWVzdCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBib29sIHByaXZhdGVC
cm93c2luZ0VuYWJsZWQpCit7CisgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1
ZXN0ID0gV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5h
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOworICAgIHJl
cXVlc3QtPnByaXYtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBwcml2YXRlQnJvd3NpbmdFbmFi
bGVkOworICAgIHJldHVybiByZXF1ZXN0OworfQorCitBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJl
cXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmdldCgpOworfQorCisvKioKKyAq
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzOgorICog
QHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIERldGVybWlu
ZSB3aGV0aGVyIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoaXMK
KyAqICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Qgc2hvdWxkIGFsbG93IHRoZSBzdG9yYWdl
IG9mIGNyZWRlbnRpYWxzLgorICogVGhpcyB3aWxsIHJldHVybiAlRkFMU0UgaWYgd2Via2l0IGRv
ZXNuJ3Qgc3VwcG9ydCBjcmVkZW50aWFsIHN0b3JpbmcKKyAqIG9yIGlmIHByaXZhdGUgYnJvd3Np
bmcgaXMgZW5hYmxlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB3ZWJraXQgY2FuIHN0b3Jl
IGNyZWRlbnRpYWxzIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICov
CitnYm9vbGVhbiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50
aWFscyhXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCks
IEZBTFNFKTsKKworI2lmIEVOQUJMRShDUkVERU5USUFMX1NUT1JBR0UpCisgICAgcmV0dXJuICFy
ZXF1ZXN0LT5wcml2LT5wcml2YXRlQnJvd3NpbmdFbmFibGVkOworI2Vsc2UKKyAgICByZXR1cm4g
RkFMU0U7CisjZW5kaWYKK30KKworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbDoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRDcmVkZW50aWFsIG9mIHRoZSBw
cm9wb3NlZCBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgdGhhdCB3YXMKKyAqIHN0b3JlZCBmcm9t
IGEgcHJldmlvdXMgc2Vzc2lvbi4gVGhlIGNsaWVudCBjYW4gdXNlIHRoaXMgZGlyZWN0bHkgZm9y
CisgKiBhdXRoZW50aWNhdGlvbiBvciBjb25zdHJ1Y3QgdGhlaXIgb3duICNXZWJLaXRDcmVkZW50
aWFsLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0Q3JlZGVudGlh
bCBlbmNhcHN1bGF0aW5nIGNyZWRlbnRpYWwgZGV0YWlscworICogb3IgJU5VTEwgaWYgdGhlcmUg
aXMgbm8gc3RvcmVkIGNyZWRlbnRpYWwuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRD
cmVkZW50aWFsKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3Jl
ZGVudGlhbChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVz
dCksIDApOworCisgICAgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbCA9IHJl
cXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5wcm9wb3NlZENyZWRlbnRpYWwo
KS0+Y29yZSgpOworICAgIGlmIChjcmVkZW50aWFsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShjcmVkZW50aWFsKTsKK30K
KworLyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfaG9zdDoKKyAqIEBy
ZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisgKiBHZXQgdGhlIGhv
c3QgdGhhdCB0aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgor
ICoKKyAqIFJldHVybnM6IFRoZSBob3N0IG9mIEByZXF1ZXN0LgorICoKKyAqIFNpbmNlOiAyLjIK
KyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0
KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7
CisKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+aG9zdC5pc051bGwoKSkKKyAgICAgICAgcmVxdWVz
dC0+cHJpdi0+aG9zdCA9IHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5w
cm90ZWN0aW9uU3BhY2UoKS0+aG9zdCgpLnV0ZjgoKTsKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJp
di0+aG9zdC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3BvcnQ6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
CisgKgorICogR2V0IHRoZSBwb3J0IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2Ug
aXMgYXBwbGljYWJsZSB0by4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcG9ydCBvZiBAcmVxdWVzdC4K
KyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2d1aW50IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1
ZXN0X2dldF9wb3J0KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChy
ZXF1ZXN0KSwgMCk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25D
aGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5wb3J0KCk7Cit9CisKKy8qKgorICogd2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtOgorICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIEdldCB0aGUgcmVhbG0gdGhhdCB0aGlzIGF1
dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhcHBsaWNhYmxlIHRvLgorICoKKyAqIFJldHVybnM6
IFRoZSByZWFsbSBvZiBAcmVxdWVzdC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdj
aGFyKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0oV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAgIGlmIChy
ZXF1ZXN0LT5wcml2LT5yZWFsbS5pc051bGwoKSkKKyAgICAgICAgcmVxdWVzdC0+cHJpdi0+cmVh
bG0gPSByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+cHJvdGVjdGlvblNw
YWNlKCktPnJlYWxtKCkudXRmOCgpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5yZWFsbS5k
YXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Nj
aGVtZToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAqCisg
KiBHZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHNjaGVtZSBvZiB0aGUgYXV0aGVudGljYXRpb24gY2hh
bGxlbmdlLgorICoKKyAqIFJldHVybnM6IFRoZSAjV2ViS2l0QXV0aGVudGljYXRpb25TY2hlbWUg
b2YgQHJlcXVlc3QuCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRBdXRoZW50aWNhdGlv
blNjaGVtZSB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lKFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJL
aXRBdXRoZW50aWNhdGlvblNjaGVtZT4ocmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFs
bGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5hdXRoZW50aWNhdGlvblNjaGVtZSgpKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHk6CisgKiBA
cmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogRGV0ZXJtaW5l
IHdoZXRoZXIgdGhlIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZSBpcyBhc3NvY2lhdGVkIHdpdGgg
YSBwcm94eSBzZXJ2ZXIgcmF0aGVyIHRoYW4gYW4gIm9yaWdpbiIgc2VydmVyLgorICoKKyAqIFJl
dHVybnM6ICVUUlVFIGlmIGF1dGhlbnRpY2F0aW9uIGlzIGZvciBhIHByb3h5IG9yICVGQUxTRSBv
dGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICovCitnYm9vbGVhbiB3ZWJraXRfYXV0aGVu
dGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5U
SUNBVElPTl9SRVFVRVNUKHJlcXVlc3QpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+
cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPnByb3RlY3Rpb25TcGFjZSgpLT5pc1Byb3h5
KCk7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfcmV0cnk6
CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CisgKgorICogRGV0
ZXJtaW5lIHdoZXRoZXIgdGhpcyB0aGlzIGlzIGEgZmlyc3QgYXR0ZW1wdCBvciBhIHJldHJ5IGZv
ciB0aGlzIGF1dGhlbnRpY2F0aW9uIGNoYWxsZW5nZS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBp
ZiBhdXRoZW50aWNhdGlvbiBhdHRlbXB0IGlzIGEgcmV0cnkgb3IgJUZBTFNFIG90aGVyd2lzZS4K
KyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2dib29sZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2lzX3JldHJ5KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVT
VChyZXF1ZXN0KSwgMCk7CisKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRp
b25DaGFsbGVuZ2UtPnByZXZpb3VzRmFpbHVyZUNvdW50KCkgPyBUUlVFIDogRkFMU0U7Cit9CisK
Ky8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlOgorICog
QHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQGNyZWRlbnRpYWw6
ICh0cmFuc2ZlciBub25lKSAoYWxsb3ctbm9uZSk6IEEgI1dlYktpdENyZWRlbnRpYWwsIG9yICVO
VUxMCisgKgorICogQXV0aGVudGljYXRlIHRoZSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
IHVzaW5nIHRoZSAjV2ViS2l0Q3JlZGVudGlhbAorICogc3VwcGxpZWQuIFRvIGNvbnRpbnVlIHdp
dGhvdXQgY3JlZGVudGlhbHMsIHBhc3MgJU5VTEwgYXMgQGNyZWRlbnRpYWwuCisgKgorICogU2lu
Y2U6IDIuMgorICovCit2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRp
Y2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdENyZWRlbnRp
YWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQVVUSEVO
VElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICBSZWZQdHI8V2ViQ3JlZGVudGlhbD4g
d2ViQ3JlZGVudGlhbCA9IGNyZWRlbnRpYWwgPyBXZWJDcmVkZW50aWFsOjpjcmVhdGUod2Via2l0
Q3JlZGVudGlhbEdldENyZWRlbnRpYWwoY3JlZGVudGlhbCkpIDogMDsKKyAgICByZXF1ZXN0LT5w
cml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+dXNlQ3JlZGVudGlhbCh3
ZWJDcmVkZW50aWFsLmdldCgpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5oYW5kbGVkUmVxdWVzdCA9
IHRydWU7Cit9CisKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2Vs
OgorICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICoKKyAqIENh
bmNlbCB0aGUgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlLiBUaGlzIHdpbGwgYWxzbyBjYW5jZWwg
dGhlIHBhZ2UgbG9hZGluZyBhbmQgcmVzdWx0IGluIGEKKyAqICNXZWJLaXRXZWJWaWV3Ojpsb2Fk
LWZhaWxlZCBzaWduYWwgd2l0aCBhICNXZWJLaXROZXR3b3JrRXJyb3Igb2YgdHlwZSAlV0VCS0lU
X05FVFdPUktfRVJST1JfQ0FOQ0VMTEVEIGJlaW5nIGVtaXR0ZWQuCisgKgorICogU2luY2U6IDIu
MgorICovCit2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NhbmNlbChXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSk7CisKKyAgICByZXF1ZXN0
LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS0+bGlzdGVuZXIoKS0+Y2FuY2VsKCk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5Y2M5ZjA4YzdhNzFhNjFl
NTBhMTg0YWY3MDE3ODllZmQ1ZjhkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaApAQCAtMCww
ICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNz
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lE
RV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJr
aXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZu
ZGVmIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRDcmVkZW50aWFsLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElPTl9S
RVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1QsIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCkpCisjZGVmaW5lIFdF
QktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNL
X0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1Qs
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0FV
VEhFTlRJQ0FUSU9OX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQVVUSEVOVElDQVRJT05fUkVRVUVTVCkpCisjZGVmaW5l
IFdFQktJVF9JU19BVVRIRU5USUNBVElPTl9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0FVVEhFTlRJQ0FUSU9OX1JFUVVF
U1QpKQorI2RlZmluZSBXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9BVVRIRU5U
SUNBVElPTl9SRVFVRVNULCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgICAgICAgIFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3RDbGFzcyAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAg
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBf
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307
CisKKy8qKgorICogV2ViS2l0QXV0aGVudGljYXRpb25TY2hlbWU6CisgKiBAV0VCS0lUX0FVVEhF
TlRJQ0FUSU9OX1NDSEVNRV9ERUZBVUxUOiBUaGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBzY2hl
bWUgb2YgV2ViS2l0LgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfSFRUUF9CQVNJ
QzogQmFzaWMgYXV0aGVudGljYXRpb24gc2NoZW1lIGFzIGRlZmluZWQgaW4gUkZDIDI2MTcuCisg
KiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0RJR0VTVDogRGlnZXN0IGF1dGhl
bnRpY2F0aW9uIHNjaGVtZSBhcyBkZWZpbmVkIGluIFJGQyAyNjE3LgorICogQFdFQktJVF9BVVRI
RU5USUNBVElPTl9TQ0hFTUVfSFRNTF9GT1JNOiBIVE1MIEZvcm0gYXV0aGVudGljYXRpb24uCisg
KiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9OVExNOiBOVExNIE1pY3Jvc29mdCBwcm9w
cmlldGFyeSBhdXRoZW50aWNhdGlvbiBzY2hlbWUuCisgKiBAV0VCS0lUX0FVVEhFTlRJQ0FUSU9O
X1NDSEVNRV9ORUdPVElBVEU6IE5lZ290aWF0ZSAob3IgU1BORUdPKSBhdXRoZW50aWNhdGlvbiBz
Y2hlbWUgYXMgZGVmaW5lZCBpbiBSRkMgNDU1OS4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX0NMSUVOVF9DRVJUSUZJQ0FURV9SRVFVRVNURUQ6IENsaWVudCBDZXJ0aWZpY2F0ZSBB
dXRoZW50aWNhdGlvbiAoc2VlIFJGQyAyMjQ2KS4KKyAqIEBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX1NFUlZFUl9UUlVTVF9FVkFMVUFUSU9OX1JFUVVFU1RFRDogU2VydmVyIFRydXN0IEF1
dGhlbnRpY2F0aW9uLgorICogQFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfVU5LTk9XTjog
QXV0aGVudGljYXRpb24gc2NoZW1lIHVua25vd24uCisgKgorICogRW51bSB2YWx1ZXMgcmVwcmVz
ZW50aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBzY2hlbWUuCisgKgorICogU2luY2U6IDIuMgorICov
Cit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9BVVRIRU5USUNBVElPTl9TQ0hFTUVfREVGQVVM
VCA9IDEsCisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9IVFRQX0JBU0lDID0gMiwK
KyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfRElHRVNUID0gMywKKyAgICBX
RUJLSVRfQVVUSEVOVElDQVRJT05fU0NIRU1FX0hUTUxfRk9STSA9IDQsCisgICAgV0VCS0lUX0FV
VEhFTlRJQ0FUSU9OX1NDSEVNRV9OVExNID0gNSwKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJT05f
U0NIRU1FX05FR09USUFURSA9IDYsCisgICAgV0VCS0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9D
TElFTlRfQ0VSVElGSUNBVEVfUkVRVUVTVEVEID0gNywKKyAgICBXRUJLSVRfQVVUSEVOVElDQVRJ
T05fU0NIRU1FX1NFUlZFUl9UUlVTVF9FVkFMVUFUSU9OX1JFUVVFU1RFRCA9IDgsCisgICAgV0VC
S0lUX0FVVEhFTlRJQ0FUSU9OX1NDSEVNRV9VTktOT1dOID0gMTAwLAorfSBXZWJLaXRBdXRoZW50
aWNhdGlvblNjaGVtZTsKKworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkg
Z2Jvb2xlYW4KK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRp
YWxzICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRf
QVBJIFdlYktpdENyZWRlbnRpYWwgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X3Byb3Bvc2VkX2NyZWRlbnRpYWwgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVz
dCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3Jl
cXVlc3RfZ2V0X2hvc3QgICAgICAgICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2dldF9wb3J0ICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2dldF9yZWFsbSAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNh
dGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIFdlYktpdEF1dGhlbnRpY2F0aW9u
U2NoZW1lCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lICAgICAgICAg
ICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQ
SSBnYm9vbGVhbgord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5ICAg
ICAgICAgICAgKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5ICAg
ICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0
ZSAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSB2b2lkCit3
ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwgICAgICAgICAgICAgICAgICAoV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDY5MTNmYmRhMjAwZjA5NTVkZWE2YmIwZDFhMDJmNjYyNmUzNzEwNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkuaCIKKyNpbmNsdWRlICJXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCIK
KyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eSosIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCk7CitXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dEdldEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCop
OworCisjZW5kaWYgLy8gV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0UHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFs
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmUwMjI5MjQzYzlhOTNkNGQ1ZTM1MDc3NjY0NTUyOWYzZWZjYjVhYjgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDcmVkZW50aWFsLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdENyZWRlbnRpYWwuaCIKKworI2luY2x1ZGUg
IldlYkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
Kworc3RydWN0IF9XZWJLaXRDcmVkZW50aWFsIHsKKyAgICBfV2ViS2l0Q3JlZGVudGlhbChjb25z
dCBXZWJDb3JlOjpDcmVkZW50aWFsJiBjb3JlQ3JlZGVudGlhbCkKKyAgICAgICAgOiBjcmVkZW50
aWFsKGNvcmVDcmVkZW50aWFsKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpDcmVkZW50
aWFsIGNyZWRlbnRpYWw7CisgICAgQ1N0cmluZyB1c2VybmFtZTsKKyAgICBDU3RyaW5nIHBhc3N3
b3JkOworfTsKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQ1JFREVOVElB
TF9QRVJTSVNURU5DRV9OT05FLCBXZWJDb3JlOjpDcmVkZW50aWFsUGVyc2lzdGVuY2VOb25lKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVO
Q0VfRk9SX1NFU1NJT04sIFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZUZvclNlc3Npb24p
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNU
RU5DRV9QRVJNQU5FTlQsIFdlYkNvcmU6OkNyZWRlbnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCk7
CisKK0dfREVGSU5FX0JPWEVEX1RZUEUoV2ViS2l0Q3JlZGVudGlhbCwgd2Via2l0X2NyZWRlbnRp
YWwsIHdlYmtpdF9jcmVkZW50aWFsX2NvcHksIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUpCisKK1dl
YktpdENyZWRlbnRpYWwqIHdlYmtpdENyZWRlbnRpYWxDcmVhdGUoY29uc3QgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCYgY29yZUNyZWRlbnRpYWwpCit7CisgICAgV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVu
dGlhbCA9IGdfc2xpY2VfbmV3KFdlYktpdENyZWRlbnRpYWwpOworICAgIG5ldyAoY3JlZGVudGlh
bCkgV2ViS2l0Q3JlZGVudGlhbChjb3JlQ3JlZGVudGlhbCk7CisgICAgcmV0dXJuIGNyZWRlbnRp
YWw7Cit9CisKK2NvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIHdlYmtpdENyZWRlbnRpYWxHZXRD
cmVkZW50aWFsKFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoY3JlZGVudGlhbCwgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKKworICAgIHJl
dHVybiBjcmVkZW50aWFsLT5jcmVkZW50aWFsOworfQorCisvKioKKyAqIHdlYmtpdF9jcmVkZW50
aWFsX25ldzoKKyAqIEB1c2VybmFtZTogVGhlIHVzZXJuYW1lIGZvciB0aGUgbmV3IGNyZWRlbnRp
YWwKKyAqIEBwYXNzd29yZDogVGhlIHBhc3N3b3JkIGZvciB0aGUgbmV3IGNyZWRlbnRpYWwKKyAq
IEBwZXJzaXN0ZW5jZTogVGhlICNXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2Ugb2YgdGhlIG5l
dyBjcmVkZW50aWFsCisgKgorICogQ3JlYXRlIGEgbmV3IGNyZWRlbnRpYWwgZnJvbSB0aGUgcHJv
dmlkZWQgdXNlcm5hbWUsIHBhc3N3b3JkIGFuZCBwZXJzaXN0ZW5jZSBtb2RlLgorICoKKyAqIFJl
dHVybnM6ICh0cmFuc2ZlciBmdWxsKTogQSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5j
ZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9jcmVkZW50aWFsX25ldyhjb25z
dCBnY2hhciogdXNlcm5hbWUsIGNvbnN0IGdjaGFyKiBwYXNzd29yZCwgV2ViS2l0Q3JlZGVudGlh
bFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVz
ZXJuYW1lLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChwYXNzd29yZCwgMCk7CisKKyAg
ICByZXR1cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShXZWJDb3JlOjpDcmVkZW50aWFsKFN0cmlu
Zzo6ZnJvbVVURjgodXNlcm5hbWUpLCBTdHJpbmc6OmZyb21VVEY4KHBhc3N3b3JkKSwgc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6Q3JlZGVudGlhbFBlcnNpc3RlbmNlPihwZXJzaXN0ZW5jZSkpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9jb3B5OgorICogQGNyZWRlbnRpYWw6IGEgI1dl
YktpdENyZWRlbnRpYWwKKyAqCisgKiBNYWtlIGEgY29weSBvZiB0aGUgI1dlYktpdENyZWRlbnRp
YWwuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBBIGNvcHkgb2YgcGFzc2VkIGlu
ICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogU2luY2U6IDIuMgorICovCitXZWJLaXRDcmVkZW50
aWFsKiB3ZWJraXRfY3JlZGVudGlhbF9jb3B5KFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRpYWwp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoY3JlZGVudGlhbCwgMCk7CisKKyAgICByZXR1
cm4gd2Via2l0Q3JlZGVudGlhbENyZWF0ZShjcmVkZW50aWFsLT5jcmVkZW50aWFsKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfY3JlZGVudGlhbF9mcmVlOgorICogQGNyZWRlbnRpYWw6IEEgI1dlYktp
dENyZWRlbnRpYWwKKyAqCisgKiBGcmVlIHRoZSAjV2ViS2l0Q3JlZGVudGlhbC4KKyAqCisgKiBT
aW5jZTogMi4yCisgKi8KK3ZvaWQgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShXZWJLaXRDcmVkZW50
aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY3JlZGVudGlhbCk7CisK
KyAgICBjcmVkZW50aWFsLT5+V2ViS2l0Q3JlZGVudGlhbCgpOworICAgIGdfc2xpY2VfZnJlZShX
ZWJLaXRDcmVkZW50aWFsLCBjcmVkZW50aWFsKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVu
dGlhbF9nZXRfdXNlcm5hbWU6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAor
ICoKKyAqIEdldCB0aGUgdXNlcm5hbWUgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3Jl
ZGVudGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgdXNlcm5hbWUgc3RvcmVkIGluIHRoZSAjV2Vi
S2l0Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJr
aXRfY3JlZGVudGlhbF9nZXRfdXNlcm5hbWUoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCAwKTsKKworICAgIGlmIChj
cmVkZW50aWFsLT51c2VybmFtZS5pc051bGwoKSkKKyAgICAgICAgY3JlZGVudGlhbC0+dXNlcm5h
bWUgPSBjcmVkZW50aWFsLT5jcmVkZW50aWFsLnVzZXIoKS51dGY4KCk7CisgICAgcmV0dXJuIGNy
ZWRlbnRpYWwtPnVzZXJuYW1lLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfY3JlZGVudGlh
bF9nZXRfcGFzc3dvcmQ6CisgKiBAY3JlZGVudGlhbDogYSAjV2ViS2l0Q3JlZGVudGlhbAorICoK
KyAqIEdldCB0aGUgcGFzc3dvcmQgY3VycmVudGx5IGhlbGQgYnkgdGhpcyAjV2ViS2l0Q3JlZGVu
dGlhbC4KKyAqCisgKiBSZXR1cm5zOiBUaGUgcGFzc3dvcmQgc3RvcmVkIGluIHRoZSAjV2ViS2l0
Q3JlZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRf
Y3JlZGVudGlhbF9nZXRfcGFzc3dvcmQoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVudGlhbCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCAwKTsKKworICAgIGlmIChjcmVk
ZW50aWFsLT5wYXNzd29yZC5pc051bGwoKSkKKyAgICAgICAgY3JlZGVudGlhbC0+cGFzc3dvcmQg
PSBjcmVkZW50aWFsLT5jcmVkZW50aWFsLnBhc3N3b3JkKCkudXRmOCgpOworICAgIHJldHVybiBj
cmVkZW50aWFsLT5wYXNzd29yZC5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2NyZWRlbnRp
YWxfaGFzX3Bhc3N3b3JkOgorICogQGNyZWRlbnRpYWw6IGEgI1dlYktpdENyZWRlbnRpYWwKKyAq
CisgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGNyZWRlbnRpYWwgaGFzIGEgcGFzc3dvcmQgc3Rv
cmVkLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHRoZSBjcmVkZW50aWFsIGhhcyBhIHBhc3N3
b3JkIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuMgorICovCitnYm9vbGVh
biB3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQoV2ViS2l0Q3JlZGVudGlhbCogY3JlZGVu
dGlhbCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCBGQUxTRSk7CisK
KyAgICByZXR1cm4gY3JlZGVudGlhbC0+Y3JlZGVudGlhbC5oYXNQYXNzd29yZCgpOworfQorCisv
KioKKyAqIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZToKKyAqIEBjcmVkZW50aWFs
OiBhICNXZWJLaXRDcmVkZW50aWFsCisgKgorICogR2V0IHRoZSBwZXJzaXN0ZW5jZSBtb2RlIGN1
cnJlbnRseSBoZWxkIGJ5IHRoaXMgI1dlYktpdENyZWRlbnRpYWwuCisgKgorICogUmV0dXJuczog
VGhlICNXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2Ugc3RvcmVkIGluIHRoZSAjV2ViS2l0Q3Jl
ZGVudGlhbC4KKyAqCisgKiBTaW5jZTogMi4yCisgKi8KK1dlYktpdENyZWRlbnRpYWxQZXJzaXN0
ZW5jZSB3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UoV2ViS2l0Q3JlZGVudGlhbCog
Y3JlZGVudGlhbCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChjcmVkZW50aWFsLCBXRUJL
SVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2U+KGNyZWRlbnRpYWwtPmNyZWRlbnRpYWwucGVy
c2lzdGVuY2UoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRDcmVkZW50aWFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRDcmVkZW50aWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjM1MGU1ZTEyOWM4OGZiZjYwYzg5MTVl
MzlmYWMwODBkZmU2ZTBiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdENyZWRlbnRpYWwuaApAQCAtMCwwICsxLDgwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdF
QktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4g
YmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0Q3JlZGVudGlh
bF9oCisjZGVmaW5lIFdlYktpdENyZWRlbnRpYWxfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX0NSRURFTlRJQUwgKHdlYmtpdF9jcmVkZW50aWFsX2dldF90
eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRDcmVkZW50aWFsIFdlYktpdENyZWRlbnRp
YWw7CisKKy8qKgorICogV2ViS2l0Q3JlZGVudGlhbFBlcnNpc3RlbmNlOgorICogQFdFQktJVF9D
UkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkU6IENyZWRlbnRpYWwgZG9lcyBub3QgcGVyc2lzdAor
ICogQFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX0ZPUl9TRVNTSU9OOiBDcmVkZW50aWFs
IHBlcnNpc3RzIGZvciBzZXNzaW9uIG9ubHkKKyAqIEBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNU
RU5DRV9QRVJNQU5FTlQ6IENyZWRlbnRpYWwgcGVyc2lzdHMgcGVybWFuZW50bHkKKyAqCisgKiBF
bnVtIHZhbHVlcyByZXByZXNlbnRpbmcgdGhlIGR1cmF0aW9uIGZvciB3aGljaCBhIGNyZWRlbnRp
YWwgcGVyc2lzdHMuCisgKgorICogU2luY2U6IDIuMgorICovCit0eXBlZGVmIGVudW0geworICAg
IFdFQktJVF9DUkVERU5USUFMX1BFUlNJU1RFTkNFX05PTkUsCisgICAgV0VCS0lUX0NSRURFTlRJ
QUxfUEVSU0lTVEVOQ0VfRk9SX1NFU1NJT04sCisgICAgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lT
VEVOQ0VfUEVSTUFORU5UCit9IFdlYktpdENyZWRlbnRpYWxQZXJzaXN0ZW5jZTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5cGUgICAgICAgICAgICAgKHZvaWQp
OworCitXRUJLSVRfQVBJIFdlYktpdENyZWRlbnRpYWwgKgord2Via2l0X2NyZWRlbnRpYWxfbmV3
ICAgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAqdXNlcm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgICAgICAgICpwYXNzd29yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRDcmVkZW50aWFsUGVyc2lzdGVuY2UgIHBlcnNpc3RlbmNlKTsKKworV0VC
S0lUX0FQSSBXZWJLaXRDcmVkZW50aWFsICoKK3dlYmtpdF9jcmVkZW50aWFsX2NvcHkgICAgICAg
ICAgICAgICAgIChXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9jcmVkZW50aWFsX2ZyZWUgICAgICAgICAgICAgICAgIChX
ZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIGNv
bnN0IGdjaGFyICoKK3dlYmtpdF9jcmVkZW50aWFsX2dldF91c2VybmFtZSAgICAgICAgIChXZWJL
aXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyICoKK3dlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZCAgICAgICAgIChXZWJLaXRD
cmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitXRUJLSVRfQVBJIGdib29sZWFu
Cit3ZWJraXRfY3JlZGVudGlhbF9oYXNfcGFzc3dvcmQgICAgICAgICAoV2ViS2l0Q3JlZGVudGlh
bCAgICAgICAgICAgICpjcmVkZW50aWFsKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDcmVkZW50aWFs
UGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZSAgICAgIChXZWJL
aXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRlbnRpYWwpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENyZWRlbnRpYWxQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2N2JjN2QyYzhhYzM1ZWQwNWQ5
NzgwNGVmNDMxNTk1YzdiMTc1ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDcmVkZW50aWFsUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcyBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q3JlZGVudGlhbFByaXZhdGVfaAorI2Rl
ZmluZSBXZWJLaXRDcmVkZW50aWFsUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRDcmVkZW50
aWFsLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ3Jl
ZGVudGlhbC5oPgorCitXZWJLaXRDcmVkZW50aWFsKiB3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKGNv
bnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKTsKK2NvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIHdl
YmtpdENyZWRlbnRpYWxHZXRDcmVkZW50aWFsKFdlYktpdENyZWRlbnRpYWwqKTsKKworI2VuZGlm
IC8vIFdlYktpdENyZWRlbnRpYWxQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggMjk0OTcwOTBkYjYwN2RiY2E5
ZjAxYWI5ZjQ0YzkzMjdlNDgyMWMxZi4uYmNjMWRiNzI5OWI4ZDcwOTZjOWQyYjhiMTgzYzQ3ZTVi
ZDk3Yjk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0TWVu
dUl0ZW1EYXRhLmgiCiAjaW5jbHVkZSAiV2ViRGF0YS5oIgogI2luY2x1ZGUgIldlYktpdEF1dGhl
bnRpY2F0aW9uRGlhbG9nLmgiCisjaW5jbHVkZSAiV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEJhY2tGb3J3YXJkTGlzdFByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJLaXRDb250ZXh0TWVudUNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdENvbnRl
eHRNZW51SXRlbVByaXZhdGUuaCIKQEAgLTExOSw2ICsxMjAsOCBAQCBlbnVtIHsKIAogICAgIFdF
Ql9QUk9DRVNTX0NSQVNIRUQsCiAKKyAgICBBVVRIRU5USUNBVEUsCisKICAgICBMQVNUX1NJR05B
TAogfTsKIApAQCAtNDI5LDYgKzQzMiwxNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3RGlz
Y29ubmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKFdlYktpdFdlYlZpZXcqCiAgICAg
cHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSAwOwogfQogCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0V2ViVmlld0F1dGhlbnRpY2F0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgQ3JlZGVudGlhbFN0b3JhZ2VN
b2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZSA9IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0
X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpID8gQWxsb3dQZXJzaXN0ZW50U3RvcmFnZSA6
IERpc2FsbG93UGVyc2lzdGVudFN0b3JhZ2U7CisgICAgd2Via2l0V2ViVmlld0Jhc2VBZGRBdXRo
ZW50aWNhdGlvbkRpYWxvZyhXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSwgd2Via2l0QXV0
aGVudGljYXRpb25EaWFsb2dOZXcocmVxdWVzdCwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisK
KyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgZmlsZUNob29zZXJEaWFsb2dSZXNw
b25zZUNhbGxiYWNrKEd0a0RpYWxvZyogZGlhbG9nLCBnaW50IHJlc3BvbnNlSUQsIFdlYktpdEZp
bGVDaG9vc2VyUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBHUmVmUHRyPFdlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdD4gYWRvcHRlZFJlcXVlc3QgPSBhZG9wdEdSZWYocmVxdWVzdCk7CkBAIC02MDUs
NiArNjE2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgd2ViVmlld0NsYXNzLT5kZWNpZGVfcG9s
aWN5ID0gd2Via2l0V2ViVmlld0RlY2lkZVBvbGljeTsKICAgICB3ZWJWaWV3Q2xhc3MtPnBlcm1p
c3Npb25fcmVxdWVzdCA9IHdlYmtpdFdlYlZpZXdQZXJtaXNzaW9uUmVxdWVzdDsKICAgICB3ZWJW
aWV3Q2xhc3MtPnJ1bl9maWxlX2Nob29zZXIgPSB3ZWJraXRXZWJWaWV3UnVuRmlsZUNob29zZXI7
CisgICAgd2ViVmlld0NsYXNzLT5hdXRoZW50aWNhdGUgPSB3ZWJraXRXZWJWaWV3QXV0aGVudGlj
YXRlOwogCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzp3ZWItY29udGV4dDoKQEAgLTEz
NjYsNiArMTM3OCwzOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChX
ZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgMCwKICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfQk9PTEVBTl9fVk9JRCwKICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6YXV0aGVudGljYXRlOgorICAgICAqIEB3
ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqIEByZXF1ZXN0OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKKyAgICAg
KgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBpcyBjaGFsbGVu
Z2VkIHdpdGggSFRUUAorICAgICAqIGF1dGhlbnRpY2F0aW9uLiBUbyBsZXQgdGhlICBhcHBsaWNh
dGlvbiBhY2Nlc3Mgb3Igc3VwcGx5CisgICAgICogdGhlIGNyZWRlbnRpYWxzIGFzIHdlbGwgYXMg
dG8gYWxsb3cgdGhlIGNsaWVudCBhcHBsaWNhdGlvbgorICAgICAqIHRvIGVpdGhlciBjYW5jZWwg
dGhlIHJlcXVlc3Qgb3IgcGVyZm9ybSB0aGUgYXV0aGVudGljYXRpb24sCisgICAgICogdGhlIHNp
Z25hbCB3aWxsIHBhc3MgYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgICogI1dlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCBpbiB0aGUgQHJlcXVlc3QgYXJndW1lbnQuCisgICAgICogVG8gaGFuZGxl
IHRoaXMgc2lnbmFsIGFzeW5jaHJvbm91c2x5IHlvdSBzaG91bGQga2VlcCBhIHJlZgorICAgICAq
IG9mIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gJVRSVUUuIFRvIGRpc2FibGUgSFRUUCBhdXRoZW50
aWNhdGlvbgorICAgICAqIGVudGlyZWx5LCBjb25uZWN0IHRvIHRoaXMgc2lnbmFsIGFuZCBzaW1w
bHkgcmV0dXJuICVUUlVFLgorICAgICAqCisgICAgICogVGhlIGRlZmF1bHQgc2lnbmFsIGhhbmRs
ZXIgd2lsbCBydW4gYSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uCisgICAgICogZGlhbG9nIGFzeW5j
aHJvbm91c2x5IGZvciB0aGUgdXNlciB0byBpbnRlcmFjdCB3aXRoLgorICAgICAqCisgICAgICog
UmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQg
Zm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1
cnRoZXIuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4yCisgICAgICovCisgICAgc2lnbmFsc1tB
VVRIRU5USUNBVEVdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJhdXRoZW50aWNhdGUiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIEdf
U0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZp
ZXdDbGFzcywgYXV0aGVudGljYXRlKSwKKyAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9y
X3RydWVfaGFuZGxlZCwgMCAvKiBhY2N1bXVsYXRvciBkYXRhICovLAorICAgICAgICAgICAgd2Vi
a2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4s
IDEsIC8qIG51bWJlciBvZiBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9B
VVRIRU5USUNBVElPTl9SRVFVRVNUKTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1Nl
dElzTG9hZGluZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBib29sIGlzTG9hZGluZykKQEAgLTE3
MzgsMTMgKzE3ODMsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24KIAogdm9pZCB3ZWJraXRX
ZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
CiB7Ci0gICAgQ3JlZGVudGlhbFN0b3JhZ2VNb2RlIGNyZWRlbnRpYWxTdG9yYWdlTW9kZTsKLSAg
ICBpZiAod2Via2l0X3NldHRpbmdzX2dldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpKSkKLSAgICAgICAgY3JlZGVudGlhbFN0b3Jh
Z2VNb2RlID0gRGlzYWxsb3dQZXJzaXN0ZW50U3RvcmFnZTsKLSAgICBlbHNlCi0gICAgICAgIGNy
ZWRlbnRpYWxTdG9yYWdlTW9kZSA9IEFsbG93UGVyc2lzdGVudFN0b3JhZ2U7Ci0KLSAgICB3ZWJr
aXRXZWJWaWV3QmFzZUFkZEF1dGhlbnRpY2F0aW9uRGlhbG9nKFdFQktJVF9XRUJfVklFV19CQVNF
KHdlYlZpZXcpLCB3ZWJraXRBdXRoZW50aWNhdGlvbkRpYWxvZ05ldyhhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgY3JlZGVudGlhbFN0b3JhZ2VNb2RlKSk7CisgICAgZ2Jvb2xlYW4gcHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZCA9IHdlYmtpdF9zZXR0aW5nc19nZXRfZW5hYmxlX3ByaXZhdGVfYnJvd3Np
bmcod2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CisgICAgR1JlZlB0cjxX
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBwcml2YXRl
QnJvd3NpbmdFbmFibGVkKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWdu
YWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0FVVEhFTlRJQ0FURV0sIDAsIHJlcXVlc3QuZ2V0KCks
ICZyZXR1cm5WYWx1ZSk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0luc2VjdXJlQ29udGVudERl
dGVjdGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdEluc2VjdXJlQ29udGVudEV2ZW50
IHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3LmgKaW5kZXggYjIzZDdmZmIxM2EwOGYwOTU0ZWNhMzU0Y2U4NmVjNTcwNzNjYTFkNy4uYTRk
NmU0MzllY2E3MjZlOTA2Mzc2MTMyMTZhNTE0NzdlYjdhZTk3ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMjksNiArMjksNyBA
QAogI2RlZmluZSBXZWJLaXRXZWJWaWV3X2gKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
QmFzZS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbGVDaG9v
c2VyUmVxdWVzdC5oPgpAQCAtMjQyLDYgKzI0Myw4IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Ns
YXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRJbnNlY3VyZUNvbnRlbnRFdmVudCAgIGV2ZW50KTsKICAgICBnYm9vbGVhbiAgICgqIHdlYl9w
cm9jZXNzX2NyYXNoZWQpICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICAgKndlYl92
aWV3KTsKIAorICAgIGdib29sZWFuICAgKCogYXV0aGVudGljYXRlKSAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0ICpy
ZXF1ZXN0KTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKICAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKICAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDIpICh2b2lkKTsKQEAgLTI0OSw3ICsyNTIsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFz
cyB7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ0KSAodm9pZCk7CiAgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQ1KSAodm9pZCk7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ2KSAo
dm9pZCk7Ci0gICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ3KSAodm9pZCk7CiB9OwogCiBXRUJL
SVRfQVBJIEdUeXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCAyZmE3ZWJhY2ZkYzYyN2ZiMjQw
OTRmMDBiZTZiNzEyZjhkMmQ0M2NiLi5kNzY5ZTJhNTRiOWVkMzJmYTQxOGE4MjFhMmNlMDYxODE5
NTA3NDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTEzLDYgKzEzLDcgQEAKICAgICA8dGl0
bGU+Q2xhc3MgT3ZlcnZpZXc8L3RpdGxlPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJL
aXRXZWJDb250ZXh0LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJW
aWV3LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEJhY2tGb3J3
YXJkTGlzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0QmFja0Zvcndh
cmRMaXN0SXRlbS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0U2V0dGlu
Z3MueG1sIi8+CkBAIC01Myw1ICs1NCwxMSBAQAogICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+CiAg
ICAgPHRpdGxlPkluZGV4PC90aXRsZT4KICAgPC9pbmRleD4KKyAgCisgIDxpbmRleCBpZD0iYXBp
LWluZGV4LTItMiIgcm9sZT0iMi4yIj4KKyAgICA8dGl0bGU+SW5kZXggb2YgbmV3IHN5bWJvbHMg
aW4gMi4yPC90aXRsZT4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvYXBpLWluZGV4LTIuMi54
bWwiPjx4aTpmYWxsYmFjayAvPjwveGk6aW5jbHVkZT4KKyAgPC9pbmRleD4gIAorICAKICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL2Fubm90YXRpb24tZ2xvc3NhcnkueG1sIj48eGk6ZmFsbGJhY2sg
Lz48L3hpOmluY2x1ZGU+CiA8L2Jvb2s+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBm
MjgwYzYyZGYyOWYyNmIzMjI2MmNkYWRmMmU4ZGEzM2MxZDliOTkwLi4yNzA0ZDYzZDMwMTVmMTM0
M2IyMmUzNWY2ZjE0NjNlNDg2OWJiYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAg
LTE3OCw2ICsxNzgsNDggQEAgV2ViS2l0V2ViVmlld1ByaXZhdGUKIDwvU0VDVElPTj4KIAogPFNF
Q1RJT04+Cis8RklMRT5XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QKK1dlYktpdEF1dGhlbnRpY2F0aW9uU2NoZW1lCit3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUKK3dlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2NhbmNlbAord2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVf
Y3JlZGVudGlhbHMKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0Cit3ZWJr
aXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydAord2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfaXNfcmV0cnkKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9w
b3NlZF9jcmVkZW50aWFsCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcmVhbG0K
K3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9zY2hlbWUKK3dlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2lzX2Zvcl9wcm94eQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dl
YktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENsYXNzCitXRUJLSVRfVFlQRV9BVVRIRU5USUNBVElP
Tl9SRVFVRVNUCitXRUJLSVRfQVVUSEVOVElDQVRJT05fUkVRVUVTVAorV0VCS0lUX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9BVVRIRU5USUNBVElPTl9SRVFVRVNUX0dFVF9D
TEFTUworV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QKK1dFQktJVF9JU19BVVRIRU5U
SUNBVElPTl9SRVFVRVNUX0NMQVNTCitXRUJLSVRfVFlQRV9DUkVERU5USUFMCisKKzxTVUJTRUNU
SU9OIFByaXZhdGU+CitXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlCit3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfdHlwZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3R5
cGUKKworPFNVQlNFQ1RJT04+CitXZWJLaXRDcmVkZW50aWFsCitXZWJLaXRDcmVkZW50aWFsUGVy
c2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX25ldword2Via2l0X2NyZWRlbnRpYWxfY29weQor
d2Via2l0X2NyZWRlbnRpYWxfZnJlZQord2Via2l0X2NyZWRlbnRpYWxfZ2V0X3Bhc3N3b3JkCit3
ZWJraXRfY3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UKK3dlYmtpdF9jcmVkZW50aWFsX2dldF91
c2VybmFtZQord2Via2l0X2NyZWRlbnRpYWxfaGFzX3Bhc3N3b3JkCis8L1NFQ1RJT04+CisKKzxT
RUNUSU9OPgogPEZJTEU+V2ViS2l0QmFja0ZvcndhcmRMaXN0PC9GSUxFPgogV2ViS2l0QmFja0Zv
cndhcmRMaXN0CiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xlbmd0aApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVz
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVz
CmluZGV4IDVkOTdmNjliZWQ1ZGQ3ZjNhNzYxMWE4ZGE5ZGZlNzg4M2ZkYTQ0NDUuLmFiNjIwZjBk
MTJhMzg3MGY0N2VlNmRjMjkzZTU1ZDkwZGE3OWFlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKQEAgLTI0LDMg
KzI0LDUgQEAgd2Via2l0X2NvbnRleHRfbWVudV9pdGVtX2dldF90eXBlCiB3ZWJraXRfd2ViX3Zp
ZXdfZ3JvdXBfZ2V0X3R5cGUKIHdlYmtpdF93ZWJfZXh0ZW5zaW9uX2dldF90eXBlCiB3ZWJraXRf
d2ViX3BhZ2VfZ2V0X3R5cGUKK3dlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF90eXBl
Cit3ZWJraXRfY3JlZGVudGlhbF9nZXRfdHlwZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3LmNwcAppbmRleCA4OGQ3N2YyODYwZTA2MGE1MDZhYjliYjVjODJm
YTI4YWZhNjZiMTdhLi42ZmZlNTE0YzI3MTUzOWIxNjllNGNhMmQ1ZTA5Yzg5MGUyNjQzMjQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCkBAIC0xOCw2ICsxOCw4IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rlc3QuaCIKKyNpbmNsdWRlICJX
ZWJLaXRUZXN0U2VydmVyLmgiCiAjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
VmFsdWVSZWYuaD4KQEAgLTI2LDYgKzI4LDggQEAKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCitzdGF0aWMgV2ViS2l0
VGVzdFNlcnZlcioga1NlcnZlcjsKKwogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdEZWZhdWx0Q29u
dGV4dChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSA9PSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CkBAIC0xMjI5LDggKzEyMzMsMjI1IEBAIHN0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3U25hcHNob3QoU25hcHNob3RXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBnX2Fzc2VydCh0ZXN0LT5nZXRTbmFwc2hvdEFuZENhbmNlbCgpKTsKIH0K
IAorY2xhc3MgQXV0aGVudGljYXRpb25UZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShBdXRoZW50aWNhdGlvblRlc3QpOwor
CisgICAgQXV0aGVudGljYXRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJWaWV3LCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhydW5BdXRoZW50aWNhdGlv
bkNhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgfkF1dGhlbnRpY2F0aW9uVGVzdCgpCisg
ICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJW
aWV3LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgaW50IGF1dGhlbnRpY2F0aW9uUmV0cmllczsKKworICAgIHZvaWQgbG9hZFVSSShj
b25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICAvLyBSZXNldCB0aGUgcmV0cnkgY291bnQg
b2YgdGhlIGZha2Ugc2VydmVyIHdoZW4gYSBwYWdlIGlzIGxvYWRlZC4KKyAgICAgICAgYXV0aGVu
dGljYXRpb25SZXRyaWVzID0gMDsKKyAgICAgICAgTG9hZFRyYWNraW5nVGVzdDo6bG9hZFVSSSh1
cmkpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBydW5BdXRoZW50aWNhdGlvbkNhbGxi
YWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3Qs
IEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJ1bkF1dGhl
bnRpY2F0aW9uKHJlcXVlc3QpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2
b2lkIHJ1bkF1dGhlbnRpY2F0aW9uKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVz
dCkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBtX2F1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IHJl
cXVlc3Q7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1
ZXN0KCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAg
ICAgcmV0dXJuIG1fYXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBHUmVmUHRyPFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gbV9hdXRoZW50aWNh
dGlvblJlcXVlc3Q7Cit9OworCitpbnQgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlv
blJldHJpZXMgPSAwOworCitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFVzZXJuYW1lW10gPSAi
dXNlcm5hbWUiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aFRlc3RQYXNzd29yZFtdID0gInBhc3N3
b3JkIjsKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZVtdID0gIldl
YktpdDJHdGsrIEF1dGhlbnRpY2F0aW9uIHRlc3QiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4
cGVjdGVkRmFpbHVyZVRpdGxlW10gPSAiNDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQiOworc3Rh
dGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkQXV0aG9yaXphdGlvbltdID0gIkJhc2ljIGRYTmxj
bTVoYldVNmNHRnpjM2R2Y21RPSI7IC8vIEJhc2U2NCBlbmNvZGluZyBvZiAidXNlcm5hbWU6cGFz
c3dvcmQiLgorc3RhdGljIGNvbnN0IGNoYXIgYXV0aFN1Y2Nlc3NIVE1MU3RyaW5nW10gPQorICAg
ICI8aHRtbD4iCisgICAgIjxoZWFkPjx0aXRsZT5XZWJLaXQyR3RrKyBBdXRoZW50aWNhdGlvbiB0
ZXN0PC90aXRsZT48L2hlYWQ+IgorICAgICI8Ym9keT48L2JvZHk+PC9odG1sPiI7CitzdGF0aWMg
Y29uc3QgY2hhciBhdXRoRmFpbHVyZUhUTUxTdHJpbmdbXSA9CisgICAgIjxodG1sPiIKKyAgICAi
PGhlYWQ+PHRpdGxlPjQwMSBBdXRob3JpemF0aW9uIFJlcXVpcmVkPC90aXRsZT48L2hlYWQ+Igor
ICAgICI8Ym9keT48L2JvZHk+PC9odG1sPiI7CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0
aGVudGljYXRpb25SZXF1ZXN0KEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICAvLyBUZXN0IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZ2V0dGVycyBtYXRjaCBz
b3VwIGF1dGhlbnRpY2F0aW9uIGhlYWRlci4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdl
dFVSSUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgV2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVx
dWVzdCgpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9nZXRfaG9zdChyZXF1ZXN0KSwgPT0sIHNvdXBfdXJpX2dldF9ob3N0KGtTZXJ2ZXItPmJhc2VV
UkkoKSkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3BvcnQocmVxdWVzdCksID09LCBzb3VwX3VyaV9nZXRfcG9ydChrU2VydmVyLT5iYXNl
VVJJKCkpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfZ2V0X3JlYWxtKHJlcXVlc3QpLCA9PSwgIm15IHJlYWxtIik7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KSA9PSBXRUJLSVRf
QVVUSEVOVElDQVRJT05fU0NIRU1FX0hUVFBfQkFTSUMpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19mb3JfcHJveHkocmVxdWVzdCkpOworICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9pc19yZXRyeShyZXF1ZXN0KSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25DYW5jZWwoQXV0aGVudGlj
YXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIFRlc3QgY2FuY2VsLgor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1s
IikuZGF0YSgpKTsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0
ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfY2FuY2VsKHJlcXVlc3QpOworICAgIC8vIFNlcnZlciBkb2Vzbid0IGFz
ayBmb3IgbmV3IGNyZWRlbnRpYWxzLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAz
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50
KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OlByb3Zpc2lvbmFs
TG9hZEZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwg
PT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisKKyAgICBnX2Fzc2VydF9lcnJv
cih0ZXN0LT5tX2Vycm9yLmdldCgpLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdP
UktfRVJST1JfQ0FOQ0VMTEVEKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvbkZhaWx1cmUoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIC8vIFRlc3QgYXV0aGVudGljYXRpb24gZmFpbHVyZXMuCisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAg
IFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRo
ZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfaXNfcmV0cnkocmVxdWVzdCkpOworICAgIFdlYktpdENyZWRlbnRpYWwqIGNyZWRl
bnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RVc2VybmFtZSwgIndyb25ncGFz
c3dvcmQiLCBXRUJLSVRfQ1JFREVOVElBTF9QRVJTSVNURU5DRV9OT05FKTsKKyAgICB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7
CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICAvLyBFeHBlY3Qg
YSBzZWNvbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdC4KKyAgICByZXF1ZXN0ID0gdGVzdC0+d2Fp
dEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9hdXRoZW50
aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5KHJlcXVlc3QpKTsKKyAgICAvLyBUZXN0IHNlY29uZCBm
YWlsdXJlLgorICAgIGNyZWRlbnRpYWwgPSB3ZWJraXRfY3JlZGVudGlhbF9uZXcoYXV0aFRlc3RV
c2VybmFtZSwgIndyb25ncGFzc3dvcmQyIiwgV0VCS0lUX0NSRURFTlRJQUxfUEVSU0lTVEVOQ0Vf
Tk9ORSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKHJl
cXVlc3QsIGNyZWRlbnRpYWwpOworICAgIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUoY3JlZGVudGlh
bCk7CisgICAgLy8gRXhwZWN0IGF1dGhlbnRpY2F0aW9uIGZhaWxlZCBwYWdlLgorICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1f
bG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6UHJvdmlzaW9uYWxMb2FkU3RhcnRl
ZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1sxXSwgPT0sIExvYWRU
cmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5t
X2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmluaXNoZWQpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0X3RpdGxlKHRlc3QtPm1fd2ViVmll
dyksID09LCBhdXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGNvbnRpbnVlIHdpdGhvdXQgY3JlZGVu
dGlhbHMuCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10
ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVx
dWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsKKyAgICB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVxdWVzdCwgMCk7CisgICAgLy8g
U2VydmVyIGRvZXNuJ3QgYXNrIGZvciBuZXcgY3JlZGVudGlhbHMuCisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZl
bnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVu
dHNbMF0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRTdGFydGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZENvbW1pdHRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2
ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0s
IGF1dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25TdG9yYWdlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICAvLyBFbmFibGUgcHJpdmF0ZSBicm93c2luZyBiZWZvcmUgYXV0aGVudGlj
YXRpb24gcmVxdWVzdCB0byB0ZXN0IHRoYXQgY3JlZGVudGlhbHMgY2FuJ3QgYmUgc2F2ZWQuCisg
ICAgd2Via2l0X3NldHRpbmdzX3NldF9lbmFibGVfcHJpdmF0ZV9icm93c2luZyh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzKHRlc3QtPm1fd2ViVmlldyksIFRSVUUpOworICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsK
KyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9y
QXV0aGVudGljYXRpb25SZXF1ZXN0KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF9hdXRoZW50aWNh
dGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKKyAgICBnX2Fz
c2VydCghd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMo
cmVxdWVzdCkpOworCisgICAgLy8gSWYgV2ViS2l0IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggbGli
c2VjcmV0LCBhbmQgcHJpdmF0ZSBicm93c2luZyBpcyBkaXNhYmxlZAorICAgIC8vIHRoZW4gY2hl
Y2sgdGhhdCBjcmVkZW50aWFscyBjYW4gYmUgc2F2ZWQuCisjaWYgRU5BQkxFKENSRURFTlRJQUxf
U1RPUkFHRSkKKyAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9wcml2YXRlX2Jyb3dzaW5n
KHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3ModGVzdC0+bV93ZWJWaWV3KSwgRkFMU0UpOwor
ICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1s
IikuZGF0YSgpKTsKKyAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVx
dWVzdCgpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRf
cHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVxdWVzdCkpOworI2VuZGlm
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKEF1dGhl
bnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBUZXN0IGNvcnJl
Y3QgYXV0aGVudGljYXRpb24uCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkpOworICAgIFdlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdCogcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsK
KyAgICBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsID0gd2Via2l0X2NyZWRlbnRpYWxfbmV3
KGF1dGhUZXN0VXNlcm5hbWUsIGF1dGhUZXN0UGFzc3dvcmQsIFdFQktJVF9DUkVERU5USUFMX1BF
UlNJU1RFTkNFX0ZPUl9TRVNTSU9OKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9hdXRoZW50aWNhdGUocmVxdWVzdCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRp
YWxfZnJlZShjcmVkZW50aWFsKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHMuc2l6ZSgpLCA9PSwgMyk7
CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1swXSwgPT0sIExvYWRUcmFj
a2luZ1Rlc3Q6OlByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludCh0
ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRy
YWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
Yl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkU3VjY2Vz
c1RpdGxlKTsKKworICAgIC8vIFRlc3QgbG9hZGluZyB0aGUgc2FtZSAoYXV0aG9yaXplZCkgcGFn
ZSBhZ2Fpbi4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hdXRo
LXRlc3QuaHRtbCIpLmRhdGEoKSk7CisgICAgLy8gVGhlcmUgaXMgbm8gYXV0aGVudGljYXRpb24g
Y2hhbGxlbmdlLgorICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1sxXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMl0sID09LCBMb2FkVHJhY2tpbmdUZXN0
OjpMb2FkRmluaXNoZWQpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3RpdGxlKHRlc3QtPm1fd2ViVmlldyksID09LCBhdXRoRXhwZWN0ZWRTdWNjZXNzVGl0bGUpOwor
fQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4
dCosIHZvaWQqKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VU
KSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0
cmNtcChwYXRoLCAiL2F1dGgtdGVzdC5odG1sIikpIHsKKyAgICAgICAgY29uc3QgY2hhciogYXV0
aG9yaXphdGlvbiA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUobWVzc2FnZS0+cmVxdWVz
dF9oZWFkZXJzLCAiQXV0aG9yaXphdGlvbiIpOworICAgICAgICAvLyBSZXF1aXJlIGF1dGhlbnRp
Y2F0aW9uLgorICAgICAgICBpZiAoIWdfc3RyY21wMChhdXRob3JpemF0aW9uLCBhdXRoRXhwZWN0
ZWRBdXRob3JpemF0aW9uKSkgeworICAgICAgICAgICAgLy8gU3VjY2Vzc2Z1bCBhdXRoZW50aWNh
dGlvbi4KKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX09LKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGF1dGhTdWNjZXNzSFRNTFN0cmlu
Zywgc3RybGVuKGF1dGhTdWNjZXNzSFRNTFN0cmluZykpOworICAgICAgICAgICAgQXV0aGVudGlj
YXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOworICAgICAgICB9IGVsc2UgaWYg
KCsrQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvblJldHJpZXMgPCAzKSB7CisgICAg
ICAgICAgICAvLyBObyBvciBpbnZhbGlkIGF1dGhvcml6YXRpb24gaGVhZGVyIHByb3ZpZGVkIGJ5
IHRoZSBjbGllbnQsIHJlcXVlc3QgYXV0aGVudGljYXRpb24gdHdpY2UgdGhlbiBmYWlsLgorICAg
ICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfVU5B
VVRIT1JJWkVEKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWFsbT1c
Im15IHJlYWxtXCIiKTsKKyAgICAgICAgICAgIC8vIEluY2x1ZGUgYSBmYWlsdXJlIG1lc3NhZ2Ug
aW4gY2FzZSB0aGUgdXNlciBhdHRlbXB0cyB0byBwcm9jZWVkIHdpdGhvdXQgYXV0aGVudGljYXRp
b24uCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxl
bihhdXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIEF1dGhlbnRpY2F0aW9uIG5vdCBzdWNjZXNzZnVsLCBkaXNwbGF5IGEgIjQwMSBBdXRob3Jp
emF0aW9uIFJlcXVpcmVkIiBwYWdlLgorICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0
aEZhaWx1cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVIVE1MU3RyaW5nKSk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7Cisg
ICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNl
cnZlckNhbGxiYWNrKTsKKwogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAi
ZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYlZpZXdEZWZhdWx0Q29udGV4dCk7CiAgICAgV2ViVmll
d1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJjdXN0b20tY2hhcnNldCIsIHRlc3RXZWJWaWV3
Q3VzdG9tQ2hhcnNldCk7CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJz
ZXR0aW5ncyIsIHRlc3RXZWJWaWV3U2V0dGluZ3MpOwpAQCAtMTI1MSw4ICsxNDcyLDE3IEBAIHZv
aWQgYmVmb3JlQWxsKCkKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgInZp
ZXctbW9kZSIsIHRlc3RXZWJWaWV3TW9kZSk7CiAgICAgU25hcHNob3RXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRXZWJWaWV3IiwgInNuYXBzaG90IiwgdGVzdFdlYlZpZXdTbmFwc2hvdCk7CiAgICAg
V2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJwYWdlLXZpc2liaWxpdHkiLCB0ZXN0
V2ViVmlld1BhZ2VWaXNpYmlsaXR5KTsKKyAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiV2Vi
S2l0V2ViVmlldyIsICJhdXRoZW50aWNhdGlvbi1yZXF1ZXN0IiwgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvblJlcXVlc3QpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJW
aWV3IiwgImF1dGhlbnRpY2F0aW9uLWNhbmNlbCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25D
YW5jZWwpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1
dGhlbnRpY2F0aW9uLWZhaWx1cmUiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZSk7
CisgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGlj
YXRpb24tbm8tY3JlZGVudGlhbCIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Ob0NyZWRlbnRp
YWwpOworICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3IiwgImF1dGhl
bnRpY2F0aW9uLXN0b3JhZ2UiLCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZSk7Cisg
ICAgLy8gVGVzdGluZyBhdXRoZW50aWNhdGlvbiBzdWNjZXNzIG11c3QgYmUgZG9uZSBsYXN0IGJl
Y2F1c2UgbGlic291cCB3aWxsIG5ldmVyIGZpcmUKKyAgICAvLyB0aGUgYXV0aGVudGljYXRlIHNp
Z25hbCBhZ2FpbiBvbmNlIGF1dGhlbnRpY2F0aW9uIGlzIHN1Y2Nlc3NmdWwuCisgICAgQXV0aGVu
dGljYXRpb25UZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiYXV0aGVudGljYXRpb24tc3VjY2Vz
cyIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKTsKIH0KIAogdm9pZCBhZnRlckFs
bCgpCiB7CisgICAgZGVsZXRlIGtTZXJ2ZXI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmgKaW5kZXggZDE4NDMxNTI4MWE4MzYzYjgxMDU3OGMzODhmMWUzNmVh
M2NhYjJiMi4uNzBlM2I0MzMwNTkzZWY2ZDBmZDc4OGJhMmU5MzMxZjQyMGY4OTc4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMjMsMTIgKzIzLDE0
IEBACiAKICNkZWZpbmUgX19XRUJLSVQyX0hfSU5TSURFX18KIAorI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRC
YWNrRm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvbnRleHRNZW51Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdENvbnRleHRNZW51SXRlbS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29va2ll
TWFuYWdlci5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q3JlZGVudGlhbC5oPgogI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RG93
bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVkaXRpbmdDb21tYW5kcy5oPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>