<?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>122427</bug_id>
          
          <creation_ts>2013-10-06 15:03:00 -0700</creation_ts>
          <short_desc>CTTE: Use references in and around DragController</short_desc>
          <delta_ts>2013-10-07 13:34:27 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>philn</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936854</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-06 15:03:00 -0700</bug_when>
    <thetext>CTTE: Use references in and around DragController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936855</commentid>
    <comment_count>1</comment_count>
      <attachid>213529</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-06 15:04:41 -0700</bug_when>
    <thetext>Created attachment 213529
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936856</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-06 15:05:14 -0700</bug_when>
    <thetext>This touches a lot of port code. Let&apos;s give the bots a moment to chew on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936858</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-06 15:07:16 -0700</bug_when>
    <thetext>Attachment 213529 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/bindings/objc/DOMHTML.mm&apos;, u&apos;Source/WebCore/editing/Editor.cpp&apos;, u&apos;Source/WebCore/editing/ReplaceSelectionCommand.cpp&apos;, u&apos;Source/WebCore/editing/SpellingCorrectionCommand.cpp&apos;, u&apos;Source/WebCore/editing/mac/EditorMac.mm&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/editing/markup.h&apos;, u&apos;Source/WebCore/html/FileInputType.cpp&apos;, u&apos;Source/WebCore/html/FileInputType.h&apos;, u&apos;Source/WebCore/html/HTMLInputElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLInputElement.h&apos;, u&apos;Source/WebCore/html/InputType.cpp&apos;, u&apos;Source/WebCore/html/InputType.h&apos;, u&apos;Source/WebCore/loader/EmptyClients.h&apos;, u&apos;Source/WebCore/page/DragClient.h&apos;, u&apos;Source/WebCore/page/DragController.cpp&apos;, u&apos;Source/WebCore/page/DragController.h&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;, u&apos;Source/WebCore/page/efl/DragControllerEfl.cpp&apos;, u&apos;Source/WebCore/page/gtk/DragControllerGtk.cpp&apos;, u&apos;Source/WebCore/page/mac/DragControllerMac.mm&apos;, u&apos;Source/WebCore/page/win/DragControllerWin.cpp&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/Pasteboard.h&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.h&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/mac/DragDataMac.mm&apos;, u&apos;Source/WebCore/platform/win/PasteboardWin.cpp&apos;, u&apos;Source/WebKit/efl/ChangeLog&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/DragClientEfl.h&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h&apos;, u&apos;Source/WebKit/gtk/webkit/webkitwebview.cpp&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebDragClient.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebFrame.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebHTMLView.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebView.mm&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebDragClient.cpp&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKView.mm&apos;, u&apos;Source/WebKit2/UIProcess/WebPageProxy.cpp&apos;, u&apos;Source/WebKit2/UIProcess/WebPageProxy.h&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/WebPage.cpp&apos;]&quot; exit_code: 1
Source/WebCore/page/gtk/DragControllerGtk.cpp:56:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/page/DragClient.h:51:  The parameter name &quot;dragImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h:54:  The parameter name &quot;dragImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 57 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>936860</commentid>
    <comment_count>4</comment_count>
      <attachid>213529</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-06 15:23:07 -0700</bug_when>
    <thetext>Comment on attachment 213529
Patch

Attachment 213529 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/3486068</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936862</commentid>
    <comment_count>5</comment_count>
      <attachid>213529</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-06 15:28:24 -0700</bug_when>
    <thetext>Comment on attachment 213529
Patch

Attachment 213529 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/3558062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936868</commentid>
    <comment_count>6</comment_count>
      <attachid>213529</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-10-06 15:48:30 -0700</bug_when>
    <thetext>Comment on attachment 213529
Patch

Attachment 213529 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/3558066</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936900</commentid>
    <comment_count>7</comment_count>
      <attachid>213529</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-06 17:40:45 -0700</bug_when>
    <thetext>Comment on attachment 213529
Patch

Attachment 213529 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/3518047</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936985</commentid>
    <comment_count>8</comment_count>
      <attachid>213567</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-06 23:55:12 -0700</bug_when>
    <thetext>Created attachment 213567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936986</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-06 23:57:01 -0700</bug_when>
    <thetext>Attachment 213567 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/bindings/objc/DOMHTML.mm&apos;, u&apos;Source/WebCore/editing/Editor.cpp&apos;, u&apos;Source/WebCore/editing/ReplaceSelectionCommand.cpp&apos;, u&apos;Source/WebCore/editing/SpellingCorrectionCommand.cpp&apos;, u&apos;Source/WebCore/editing/mac/EditorMac.mm&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/editing/markup.h&apos;, u&apos;Source/WebCore/html/FileInputType.cpp&apos;, u&apos;Source/WebCore/html/FileInputType.h&apos;, u&apos;Source/WebCore/html/HTMLInputElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLInputElement.h&apos;, u&apos;Source/WebCore/html/InputType.cpp&apos;, u&apos;Source/WebCore/html/InputType.h&apos;, u&apos;Source/WebCore/loader/EmptyClients.h&apos;, u&apos;Source/WebCore/page/DragClient.h&apos;, u&apos;Source/WebCore/page/DragController.cpp&apos;, u&apos;Source/WebCore/page/DragController.h&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;, u&apos;Source/WebCore/page/efl/DragControllerEfl.cpp&apos;, u&apos;Source/WebCore/page/gtk/DragControllerGtk.cpp&apos;, u&apos;Source/WebCore/page/mac/DragControllerMac.mm&apos;, u&apos;Source/WebCore/page/win/DragControllerWin.cpp&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/Pasteboard.h&apos;, u&apos;Source/WebCore/platform/efl/DragDataEfl.cpp&apos;, u&apos;Source/WebCore/platform/gtk/DragDataGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.h&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/mac/DragDataMac.mm&apos;, u&apos;Source/WebCore/platform/win/DragDataWin.cpp&apos;, u&apos;Source/WebCore/platform/win/PasteboardWin.cpp&apos;, u&apos;Source/WebKit/efl/ChangeLog&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/DragClientEfl.h&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h&apos;, u&apos;Source/WebKit/gtk/webkit/webkitwebview.cpp&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebDragClient.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebFrame.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebHTMLView.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebView.mm&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebDragClient.cpp&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKView.mm&apos;, u&apos;Source/WebKit2/UIProcess/WebPageProxy.cpp&apos;, u&apos;Source/WebKit2/UIProcess/WebPageProxy.h&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/WebPage.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/win/PasteboardWin.cpp:811:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/page/gtk/DragControllerGtk.cpp:56:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/page/DragClient.h:51:  The parameter name &quot;dragImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h:54:  The parameter name &quot;dragImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 60 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>936993</commentid>
    <comment_count>10</comment_count>
      <attachid>213567</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-07 00:34:37 -0700</bug_when>
    <thetext>Comment on attachment 213567
Patch

Attachment 213567 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/3512091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936994</commentid>
    <comment_count>11</comment_count>
      <attachid>213567</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-10-07 00:38:24 -0700</bug_when>
    <thetext>Comment on attachment 213567
Patch

Attachment 213567 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/3515127</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937117</commentid>
    <comment_count>12</comment_count>
      <attachid>213601</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-07 10:21:56 -0700</bug_when>
    <thetext>Created attachment 213601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937120</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-07 10:24:20 -0700</bug_when>
    <thetext>Attachment 213601 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/bindings/objc/DOMHTML.mm&apos;, u&apos;Source/WebCore/editing/Editor.cpp&apos;, u&apos;Source/WebCore/editing/ReplaceSelectionCommand.cpp&apos;, u&apos;Source/WebCore/editing/SpellingCorrectionCommand.cpp&apos;, u&apos;Source/WebCore/editing/mac/EditorMac.mm&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/editing/markup.h&apos;, u&apos;Source/WebCore/html/FileInputType.cpp&apos;, u&apos;Source/WebCore/html/FileInputType.h&apos;, u&apos;Source/WebCore/html/HTMLInputElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLInputElement.h&apos;, u&apos;Source/WebCore/html/InputType.cpp&apos;, u&apos;Source/WebCore/html/InputType.h&apos;, u&apos;Source/WebCore/loader/EmptyClients.h&apos;, u&apos;Source/WebCore/page/DragClient.h&apos;, u&apos;Source/WebCore/page/DragController.cpp&apos;, u&apos;Source/WebCore/page/DragController.h&apos;, u&apos;Source/WebCore/page/EventHandler.cpp&apos;, u&apos;Source/WebCore/page/efl/DragControllerEfl.cpp&apos;, u&apos;Source/WebCore/page/gtk/DragControllerGtk.cpp&apos;, u&apos;Source/WebCore/page/mac/DragControllerMac.mm&apos;, u&apos;Source/WebCore/page/win/DragControllerWin.cpp&apos;, u&apos;Source/WebCore/platform/DragData.h&apos;, u&apos;Source/WebCore/platform/Pasteboard.h&apos;, u&apos;Source/WebCore/platform/efl/DragDataEfl.cpp&apos;, u&apos;Source/WebCore/platform/gtk/DragDataGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.cpp&apos;, u&apos;Source/WebCore/platform/gtk/GtkDragAndDropHelper.h&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/mac/DragDataMac.mm&apos;, u&apos;Source/WebCore/platform/win/DragDataWin.cpp&apos;, u&apos;Source/WebCore/platform/win/PasteboardWin.cpp&apos;, u&apos;Source/WebKit/efl/ChangeLog&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/DragClientEfl.cpp&apos;, u&apos;Source/WebKit/efl/WebCoreSupport/DragClientEfl.h&apos;, u&apos;Source/WebKit/gtk/ChangeLog&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/DragClientGtk.cpp&apos;, u&apos;Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h&apos;, u&apos;Source/WebKit/gtk/webkit/webkitwebview.cpp&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit/mac/WebCoreSupport/WebDragClient.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebFrame.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebHTMLView.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebView.mm&apos;, u&apos;Source/WebKit/win/ChangeLog&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebDragClient.cpp&apos;, u&apos;Source/WebKit/win/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/mac/WKView.mm&apos;, u&apos;Source/WebKit2/UIProcess/WebPageProxy.cpp&apos;, u&apos;Source/WebKit2/UIProcess/WebPageProxy.h&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/WebDragClient.h&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebCoreSupport/mac/WebDragClientMac.mm&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/WebPage.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/win/PasteboardWin.cpp:811:  Local variables should never be PassRefPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Source/WebCore/page/gtk/DragControllerGtk.cpp:56:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/page/DragClient.h:51:  The parameter name &quot;dragImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/gtk/WebCoreSupport/DragClientGtk.h:54:  The parameter name &quot;dragImage&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 60 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>937135</commentid>
    <comment_count>14</comment_count>
      <attachid>213601</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-07 11:04:00 -0700</bug_when>
    <thetext>Comment on attachment 213601
Patch

Attachment 213601 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/3707005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937137</commentid>
    <comment_count>15</comment_count>
      <attachid>213604</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-07 11:08:37 -0700</bug_when>
    <thetext>Created attachment 213604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937155</commentid>
    <comment_count>16</comment_count>
      <attachid>213604</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-07 11:50:56 -0700</bug_when>
    <thetext>Comment on attachment 213604
Patch

Attachment 213604 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/3720001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937185</commentid>
    <comment_count>17</comment_count>
      <attachid>213611</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-07 12:22:33 -0700</bug_when>
    <thetext>Created attachment 213611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937219</commentid>
    <comment_count>18</comment_count>
      <attachid>213611</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-07 13:34:24 -0700</bug_when>
    <thetext>Comment on attachment 213611
Patch

Clearing flags on attachment: 213611

Committed r157058: &lt;http://trac.webkit.org/changeset/157058&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937220</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-07 13:34:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213529</attachid>
            <date>2013-10-06 15:04:41 -0700</date>
            <delta_ts>2013-10-06 23:55:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122427-20131006150437.patch</filename>
            <type>text/plain</type>
            <size>122438</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTA2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4g
YW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgdG8gaW5kaWNhdGUgbm9uLW51bGxuZXNz
IG9mIERyYWdDb250cm9sbGVyIHJlbGF0ZWQKKyAgICAgICAgb2JqZWN0cy4KKwogMjAxMy0xMC0w
NiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRWxlbWVudCBh
bmNlc3RvciBpdGVyYXRvciBzaG91bGQgaGF2ZSBhIGZpcnN0KCkgZm9yIGNvbnZlbmllbmNlLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC03NDIsNyArNzQyLDcgQEAgX19a
TjdXZWJDb3JlMjJTY3JpcHRFeGVjdXRpb25Db250ZXh0MjZjYQogX19aTjdXZWJDb3JlMjJTdG9y
YWdlRXZlbnREaXNwYXRjaGVyMzRkaXNwYXRjaExvY2FsU3RvcmFnZUV2ZW50c1RvRnJhbWVzRVJO
U185UGFnZUdyb3VwRVJLTjNXVEY2VmVjdG9ySU5TM182UmVmUHRySU5TXzVGcmFtZUVFRUxtMEVO
UzNfMTVDcmFzaE9uT3ZlcmZsb3dFRUVSS05TM182U3RyaW5nRVNFX1NFX1NFX1BOU18xNFNlY3Vy
aXR5T3JpZ2luRQogX19aTjdXZWJDb3JlMjJVUkxXaXRoVXNlclR5cGVkU3RyaW5nRVA4TlNTdHJp
bmdQNU5TVVJMCiBfX1pON1dlYkNvcmUyMmNvdW50ZXJWYWx1ZUZvckVsZW1lbnRFUE5TXzdFbGVt
ZW50RQotX19aTjdXZWJDb3JlMjJjcmVhdGVGcmFnbWVudEZyb21UZXh0RVBOU181UmFuZ2VFUktO
M1dURjZTdHJpbmdFCitfX1pON1dlYkNvcmUyMmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUk5TXzVS
YW5nZUVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTIyZXh0ZXJuYWxSZXByZXNlbnRhdGlv
bkVQTlNfNUZyYW1lRWoKIF9fWk43V2ViQ29yZTIyZXh0ZXJuYWxSZXByZXNlbnRhdGlvbkVQTlNf
N0VsZW1lbnRFagogX19aTjdXZWJDb3JlMjJzeXN0ZW1NYXJrZXRpbmdWZXJzaW9uRXYKQEAgLTI0
NTYsMTUgKzI0NTYsMTUgQEAgX19aTks3V2ViQ29yZTEyU2hhcmVkQnVmZmVyMzZtZW1vcnlNYXBw
ZQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIF9fWk43V2ViQ29yZTEyRXZlbnRIYW5kbGVy
MTdkcmFnU291cmNlRW5kZWRBdEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RU5TXzEzRHJhZ09w
ZXJhdGlvbkUKLV9fWk5LN1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE3ZXZlbnRNYXlTdGFydERyYWdF
UktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKLV9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIx
MGRyYWdFeGl0ZWRFUE5TXzhEcmFnRGF0YUUKLV9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIx
MWRyYWdFbnRlcmVkRVBOU184RHJhZ0RhdGFFCi1fX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVy
MTFkcmFnVXBkYXRlZEVQTlNfOERyYWdEYXRhRQotX19aTjdXZWJDb3JlMTREcmFnQ29udHJvbGxl
cjExcGVyZm9ybURyYWdFUE5TXzhEcmFnRGF0YUUKK19fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xs
ZXIxMGRyYWdFeGl0ZWRFUk5TXzhEcmFnRGF0YUUKK19fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xs
ZXIxMWRyYWdFbnRlcmVkRVJOU184RHJhZ0RhdGFFCitfX1pON1dlYkNvcmUxNERyYWdDb250cm9s
bGVyMTFkcmFnVXBkYXRlZEVSTlNfOERyYWdEYXRhRQorX19aTjdXZWJDb3JlMTREcmFnQ29udHJv
bGxlcjExcGVyZm9ybURyYWdFUk5TXzhEcmFnRGF0YUUKIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRy
b2xsZXIxNHBsYWNlRHJhZ0NhcmV0RVJLTlNfOEludFBvaW50RQogX19aTjdXZWJDb3JlMTREcmFn
Q29udHJvbGxlcjlkcmFnRW5kZWRFdgogX19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUDExb2JqY19v
YmplY3RSS05TXzhJbnRQb2ludEVTNV9OU18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBwbGlj
YXRpb25GbGFnc0UKIF9fWk43V2ViQ29yZThEcmFnRGF0YUMxRVJLTjNXVEY2U3RyaW5nRVJLTlNf
OEludFBvaW50RVM3X05TXzEzRHJhZ09wZXJhdGlvbkVOU18yMERyYWdBcHBsaWNhdGlvbkZsYWdz
RQorX19aTks3V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdldmVudE1heVN0YXJ0RHJhZ0VSS05TXzE4
UGxhdGZvcm1Nb3VzZUV2ZW50RQogI2VuZGlmCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElB
X1YyKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkocmV2aXNp
b24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilj
cmVhdGVEb2N1bWVudEYKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVEb2N1bWVudEZy
YWdtZW50V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogewogICAgIC8vIEZJWE1FOiBTaW5jZSB0
aGlzIGlzIG5vdCBhIGNvbnRleHR1YWwgZnJhZ21lbnQsIGl0IHdvbid0IGhhbmRsZSB3aGl0ZXNw
YWNlIHByb3Blcmx5LgotICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb3Jl
KHNlbGYpLT5jcmVhdGVSYW5nZSgpLmdldCgpLCB0ZXh0KS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpjb3JlKHNlbGYpLT5jcmVhdGVSYW5nZSgpLmdldCgp
LCB0ZXh0KS5nZXQoKSk7CiB9CiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDkzLDcgKzQ5MywxMSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVuCiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNt
YXJ0UmVwbGFjZSkKIHsKLSAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCB0ZXh0KSwgc2VsZWN0UmVwbGFj
ZW1lbnQsIHNtYXJ0UmVwbGFjZSwgdHJ1ZSk7IAorICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBz
ZWxlY3RlZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5n
ZSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIHRydWUpOwogfQogCiBQ
YXNzUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlz
aW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDExIEBAIFJlcGxhY2VtZW50
RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICBpZiAodGV4dCAhPSBldnQtPnRleHQo
KSB8fCAhZWRpdGFibGVSb290LT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKSkgewogICAgICAg
ICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudChob2xkZXIuZ2V0
KCkpOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBldnQtPnRleHQoKSk7CisgICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAg
ICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2ZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIGV2dC0+dGV4dCgpKTsKICAgICAgICAg
aWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kLmNwcAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgs
MTAgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KAogICAgIGlmICgh
ZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub0Jl
Q29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtX3JhbmdlVG9CZUNvcnJlY3Rl
ZC5nZXQoKSwgbV9jb3JyZWN0aW9uKTsKKyAgICBpZiAoIW1fcmFuZ2VUb0JlQ29ycmVjdGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCptX3JhbmdlVG9CZUNvcnJlY3RlZCwgbV9jb3JyZWN0
aW9uKTsKICAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUyLDEyICs3NTIsOSBAQCBz
dGF0aWMgYm9vbCBjb250ZXh0UHJlc2VydmVzTmV3bGluZShjb25zCiAgICAgcmV0dXJuIGNvbnRh
aW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSogY29u
dGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQp
CiB7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIERvY3VtZW50
JiBkb2N1bWVudCA9IGNvbnRleHQtPm93bmVyRG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCYgZG9j
dW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAg
CiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpAQCAtNzY3LDcgKzc2NCw3IEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIs
ICJcbiIpOwogICAgIHN0cmluZy5yZXBsYWNlKCdccicsICdcbicpOwogCi0gICAgaWYgKGNvbnRl
eHRQcmVzZXJ2ZXNOZXdsaW5lKCpjb250ZXh0KSkgeworICAgIGlmIChjb250ZXh0UHJlc2VydmVz
TmV3bGluZShjb250ZXh0KSkgewogICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoc3RyaW5nKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgICAg
IGlmIChzdHJpbmcuZW5kc1dpdGgoJ1xuJykpIHsKICAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50
PiBlbGVtZW50ID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KTsKQEAgLTc4NCwxNCArNzgx
LDE0IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICB9CiAK
ICAgICAvLyBCcmVhayBzdHJpbmcgaW50byBwYXJhZ3JhcGhzLiBFeHRyYSBsaW5lIGJyZWFrcyB0
dXJuIGludG8gZW1wdHkgcGFyYWdyYXBocy4KLSAgICBOb2RlKiBibG9ja05vZGUgPSBlbmNsb3Np
bmdCbG9jayhjb250ZXh0LT5maXJzdE5vZGUoKSk7CisgICAgTm9kZSogYmxvY2tOb2RlID0gZW5j
bG9zaW5nQmxvY2soY29udGV4dC5maXJzdE5vZGUoKSk7CiAgICAgRWxlbWVudCogYmxvY2sgPSB0
b0VsZW1lbnQoYmxvY2tOb2RlKTsKICAgICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sg
PSBibG9ja05vZGUKICAgICAgICAgJiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAg
ICAgJiYgIWJsb2NrLT5oYXNUYWdOYW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFz
VGFnTmFtZShodG1sVGFnKQotICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3Np
dGlvbihjb250ZXh0LT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGJvb2wgdXNlTGluZUJyZWFrID0g
ZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNvbnRleHQtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAg
ICAgICYmIGJsb2NrICE9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnRleHQuc3RhcnRQb3Np
dGlvbigpKTsKKyAgICBib29sIHVzZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJv
bChjb250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0Owog
ICAgIHN0cmluZy5zcGxpdCgnXG4nLCB0cnVlLCBsaXN0KTsgLy8gdHJ1ZSBnZXRzIHVzIGVtcHR5
IHN0cmluZ3MgaW4gdGhlIGxpc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAkocmV2aXNp
b24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNDksNyArNDksNyBAQCBlbnVtIEVDaGlsZHJlbk9ubHkgeyBJbmNsdWRlTm9kZSwg
Q2hpbGRyCiBlbnVtIEVBYnNvbHV0ZVVSTHMgeyBEb05vdFJlc29sdmVVUkxzLCBSZXNvbHZlQWxs
VVJMcywgUmVzb2x2ZU5vbkxvY2FsVVJMcyB9OwogZW51bSBFRnJhZ21lbnRTZXJpYWxpemF0aW9u
IHsgSFRNTEZyYWdtZW50U2VyaWFsaXphdGlvbiwgWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uIH07
CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChS
YW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3Ry
aW5nJiB0ZXh0KTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhU
TUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ksIEV4Y2VwdGlv
bkNvZGUmKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGb3JU
cmFuc2Zvcm1Ub0ZyYWdtZW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc291cmNlTUlN
RVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAg
Ym9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpbgogICAgIGlmICghYWxsb3dQ
bGFpblRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dCgmY29udGV4dCwgW3RleHQgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ10pOworICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChj
b250ZXh0LCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSk7CiAg
ICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMywxMCAr
NDMzLDEwIEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6dXBkYXRlUmVuZGVyaW5nKFBhc3MKICAgICAg
ICAgZWxlbWVudCgpLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotYm9vbCBGaWxlSW5wdXRU
eXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wg
RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgZHJhZ0RhdGEtPmFzRmlsZW5h
bWVzKHBhdGhzKTsKKyAgICBkcmFnRGF0YS5hc0ZpbGVuYW1lcyhwYXRocyk7CiAgICAgaWYgKHBh
dGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0ZpbGVJbnB1dFR5cGUuaAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9GaWxlSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUoY29uc3QgU3RyaW5nJikgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIGdldFR5cGVTcGVjaWZpY1ZhbHVlKFN0cmluZyYpIE9WRVJS
SURFOyAvLyBDaGVja2VkIGZpcnN0LCBiZWZvcmUgaW50ZXJuYWwgc3RvcmFnZSBvciB0aGUgdmFs
dWUgYXR0cmlidXRlLgogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBi
b29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvcikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBib29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYp
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgSWNvbiogaWNvbigpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3
LDcgKzEzNTcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVzKFBhc3NSZWZQCiAg
ICAgbV9pbnB1dFR5cGUtPnNldEZpbGVzKGZpbGVzKTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVt
ZW50OjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wg
SFRNTElucHV0RWxlbWVudDo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYgZHJh
Z0RhdGEpCiB7CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5yZWNlaXZlRHJvcHBlZEZpbGVzKGRy
YWdEYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShy
ZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEZpbGVzKFBhc3NSZWZQdHI8RmlsZUxpc3Q+KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gRHJhZ0RhdGEgaGFzIG1vcmUgdGhhbiBvbmUgZHJvcHBlZCBmaWxlcy4KLSAgICBi
b29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEqKTsKKyAgICBib29sIHJlY2Vp
dmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmKTsKIAogICAgIEljb24qIGljb24oKSBjb25z
dDsKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgaW5w
dXQgYWN0aXZlIGR1cmluZyBhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAxNTcwMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwNSw3ICs3MDUsNyBAQCBTdHJpbmcgSW5wdXRUeXBlOjpzYW5pdGl6ZVZh
bHVlKGNvbnN0IFN0CiAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7CiB9CiAKLWJvb2wgSW5wdXRU
eXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhKikKK2Jvb2wgSW5wdXRUeXBl
OjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhJikKIHsKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0lucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBl
LmgJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBG
aWxlTGlzdCogZmlsZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZXMoUGFzc1JlZlB0cjxG
aWxlTGlzdD4pOwogICAgIC8vIFNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gRHJhZ0Rh
dGEgaGFzIG1vcmUgdGhhbiBvbmUgZHJvcHBlZCBmaWxlcy4KLSAgICB2aXJ0dWFsIGJvb2wgcmVj
ZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSopOworICAgIHZpcnR1YWwgYm9vbCByZWNl
aXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhJik7CiAgICAgdmlydHVhbCBJY29uKiBpY29u
KCkgY29uc3Q7CiAgICAgLy8gU2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5n
IHJlbmRlcmVyIGZvciBhIHR5cGUgY2FuIGRpc3BsYXkgYSBzdWdnZXN0ZWQgdmFsdWUuCiAgICAg
dmlydHVhbCBib29sIGNhblNldFN1Z2dlc3RlZFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzOSwxMSArNTM5LDExIEBA
IGNsYXNzIEVtcHR5RHJhZ0NsaWVudCA6IHB1YmxpYyBEcmFnQ2xpZW4KIHB1YmxpYzoKICAgICBF
bXB0eURyYWdDbGllbnQoKSB7IH0KICAgICB2aXJ0dWFsIH5FbXB0eURyYWdDbGllbnQoKSB7fQot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVz
dGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJm
b3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENs
aXBib2FyZCopIHsgfQotICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1h
c2tGb3JEcmFnKERyYWdEYXRhKikgeyByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZTsg
fQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFn
RGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxQ
ZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYs
IENsaXBib2FyZCYpIHsgfQorICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2tGb3JEcmFnKERyYWdEYXRhJikgeyByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9u
ZTsgfQogICAgIHZpcnR1YWwgRHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0Zv
clBvaW50KGNvbnN0IEludFBvaW50JikgeyByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbk5vbmU7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkgeyB9CisgICAgdmly
dHVhbCB2b2lkIHN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3Qg
SW50UG9pbnQmLCBDbGlwYm9hcmQmLCBGcmFtZSYsIGJvb2wpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpIHsgfQogfTsKICNlbmRpZiAvLyBFTkFCTEUoRFJB
R19TVVBQT1JUKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzAw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw0NCArMzEsMzYgQEAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRQ
b2ludC5oIgogCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBET01FbGVtZW50OwotT0JK
Q19DTEFTUyBOU1VSTDsKLU9CSkNfQ0xBU1MgTlNTdHJpbmc7Ci0jZW5kaWYKLQogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIENsaXBib2FyZDsKLSAgICBjbGFzcyBEcmFnRGF0
YTsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBJbWFnZTsKLSAgICBjbGFzcyBIVE1MSW1h
Z2VFbGVtZW50OworY2xhc3MgQ2xpcGJvYXJkOworY2xhc3MgRHJhZ0RhdGE7CitjbGFzcyBFbGVt
ZW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBJbWFnZTsKKworY2xhc3MgRHJhZ0NsaWVudCB7Citw
dWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdE
ZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQ
ZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYs
IENsaXBib2FyZCYpID0gMDsKKyAgICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rp
b25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIERyYWdTb3VyY2VBY3Rp
b24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcm9vdFZpZXdQ
b2ludCkgPSAwOwogICAgIAotICAgIGNsYXNzIERyYWdDbGllbnQgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdE
ZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3
aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9p
bnQmLCBDbGlwYm9hcmQqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uIGFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikgPSAwOwotCi0gICAgICAgIHZpcnR1YWwg
RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBv
aW50JiByb290Vmlld1BvaW50KSA9IDA7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1h
Z2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkKiwgRnJhbWUqLCBi
b29sIGxpbmtEcmFnID0gZmFsc2UpID0gMDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRE
cmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmln
aW4sIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sIGxp
bmtEcmFnID0gZmFsc2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhZ0VuZGVkKCkgeyB9CiAK
ICNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIC8vIE1hYy1zcGVjaWZpYyBoZWxwZXIgZnVuY3Rp
b24gdG8gYWxsb3cgYWNjZXNzIHRvIHdlYiBhcmNoaXZlcyBhbmQgTlNQYXN0ZWJvYXJkIGV4dHJh
cyBpbiBXZWJLaXQuCi0gICAgICAgIC8vIFRoaXMgaXMgbm90IGFic3RyYWN0IGFzIHRoYXQgd291
bGQgcmVxdWlyZSBhbm90aGVyICNpZiBQTEFURk9STShNQUMpIGZvciB0aGUgU1ZHSW1hZ2UgY2xp
ZW50IGVtcHR5IGltcGxlbnRhdGlvbi4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcmLCBET01FbGVtZW50KiwgTlNVUkwgKiwgTlNTdHJp
bmcgKiwgRnJhbWUqKSB7IH0KKyAgICAvLyBNYWMtc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9uIHRv
IGFsbG93IGFjY2VzcyB0byB3ZWIgYXJjaGl2ZXMgYW5kIE5TUGFzdGVib2FyZCBleHRyYXMgaW4g
V2ViS2l0LgorICAgIC8vIFRoaXMgaXMgbm90IGFic3RyYWN0IGFzIHRoYXQgd291bGQgcmVxdWly
ZSBhbm90aGVyICNpZiBQTEFURk9STShNQUMpIGZvciB0aGUgU1ZHSW1hZ2UgY2xpZW50IGVtcHR5
IGltcGxlbnRhdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdl
KGNvbnN0IFN0cmluZyYsIEVsZW1lbnQmLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmLCBGcmFt
ZSopIHsgfQogI2VuZGlmCi0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0VuZGVk
KCkgeyB9CiAKLSAgICAgICAgdmlydHVhbCB+RHJhZ0NsaWVudCgpIHsgfQotICAgIH07CisgICAg
dmlydHVhbCB+RHJhZ0NsaWVudCgpIHsgfQorfTsKICAgICAKLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vICFEcmFnQ2xpZW50X2gKKyNlbmRpZiAvLyBEcmFnQ2xpZW50X2gK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE1
NzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MywxNyArODMsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgUGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZU1vdXNlRXZlbnQoRHJhZ0RhdGEqIGRyYWdEYXRh
KQorc3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBjcmVhdGVNb3VzZUV2ZW50KERyYWdEYXRhJiBk
cmFnRGF0YSkKIHsKICAgICBib29sIHNoaWZ0S2V5LCBjdHJsS2V5LCBhbHRLZXksIG1ldGFLZXk7
CiAgICAgc2hpZnRLZXkgPSBjdHJsS2V5ID0gYWx0S2V5ID0gbWV0YUtleSA9IGZhbHNlOwotICAg
IGludCBrZXlTdGF0ZSA9IGRyYWdEYXRhLT5tb2RpZmllcktleVN0YXRlKCk7CisgICAgaW50IGtl
eVN0YXRlID0gZHJhZ0RhdGEubW9kaWZpZXJLZXlTdGF0ZSgpOwogICAgIHNoaWZ0S2V5ID0gc3Rh
dGljX2Nhc3Q8Ym9vbD4oa2V5U3RhdGUgJiBQbGF0Zm9ybUV2ZW50OjpTaGlmdEtleSk7CiAgICAg
Y3RybEtleSA9IHN0YXRpY19jYXN0PGJvb2w+KGtleVN0YXRlICYgUGxhdGZvcm1FdmVudDo6Q3Ry
bEtleSk7CiAgICAgYWx0S2V5ID0gc3RhdGljX2Nhc3Q8Ym9vbD4oa2V5U3RhdGUgJiBQbGF0Zm9y
bUV2ZW50OjpBbHRLZXkpOwogICAgIG1ldGFLZXkgPSBzdGF0aWNfY2FzdDxib29sPihrZXlTdGF0
ZSAmIFBsYXRmb3JtRXZlbnQ6Ok1ldGFLZXkpOwogCi0gICAgcmV0dXJuIFBsYXRmb3JtTW91c2VF
dmVudChkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEtPmdsb2JhbFBvc2l0aW9u
KCksCisgICAgcmV0dXJuIFBsYXRmb3JtTW91c2VFdmVudChkcmFnRGF0YS5jbGllbnRQb3NpdGlv
bigpLCBkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VNb3ZlZCwgMCwgc2hpZnRLZXks
IGN0cmxLZXksIGFsdEtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFLZXks
IGN1cnJlbnRUaW1lKCkpOwogfQpAQCAtMTE3LDI2ICsxMTcsMjUgQEAgRHJhZ0NvbnRyb2xsZXI6
On5EcmFnQ29udHJvbGxlcigpCiAgICAgbV9jbGllbnQuZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQo
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFn
bWVudEZyb21EcmFnRGF0YShEcmFnRGF0YSogZHJhZ0RhdGEsIEZyYW1lKiBmcmFtZSwgUGFzc1Jl
ZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFp
blRleHQpCitzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdt
ZW50RnJvbURyYWdEYXRhKERyYWdEYXRhJiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lLCBSYW5nZSYg
Y29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7Ci0g
ICAgQVNTRVJUKGRyYWdEYXRhKTsKICAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogCi0gICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gY29udGV4dC0+b3duZXJEb2N1bWVudCgpOwotICAgIGlmIChk
cmFnRGF0YS0+Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpKSB7Ci0gICAgICAgIGlmIChQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZHJhZ0RhdGEtPmFzRnJhZ21lbnQo
ZnJhbWUsIGNvbnRleHQuZ2V0KCksIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCkpCisg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY29udGV4dC5vd25lckRvY3VtZW50KCk7CisgICAgaWYg
KGRyYWdEYXRhLmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSkgeworICAgICAgICBpZiAoUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRyYWdEYXRhLmFzRnJhZ21lbnQo
ZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCkpCiAgICAgICAg
ICAgICByZXR1cm4gZnJhZ21lbnQ7CiAKLSAgICAgICAgaWYgKGRyYWdEYXRhLT5jb250YWluc1VS
TChmcmFtZSwgRHJhZ0RhdGE6OkRvTm90Q29udmVydEZpbGVuYW1lcykpIHsKKyAgICAgICAgaWYg
KGRyYWdEYXRhLmNvbnRhaW5zVVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5h
bWVzKSkgewogICAgICAgICAgICAgU3RyaW5nIHRpdGxlOwotICAgICAgICAgICAgU3RyaW5nIHVy
bCA9IGRyYWdEYXRhLT5hc1VSTChmcmFtZSwgRHJhZ0RhdGE6OkRvTm90Q29udmVydEZpbGVuYW1l
cywgJnRpdGxlKTsKKyAgICAgICAgICAgIFN0cmluZyB1cmwgPSBkcmFnRGF0YS5hc1VSTChmcmFt
ZSwgRHJhZ0RhdGE6OkRvTm90Q29udmVydEZpbGVuYW1lcywgJnRpdGxlKTsKICAgICAgICAgICAg
IGlmICghdXJsLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxIVE1MQW5jaG9y
RWxlbWVudD4gYW5jaG9yID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAg
ICAgICAgICAgICAgICAgYW5jaG9yLT5zZXRIcmVmKHVybCk7CiAgICAgICAgICAgICAgICAgaWYg
KHRpdGxlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIHBsYWlu
IHRleHQgZmlyc3QgYmVjYXVzZSB0aGUgdXJsIG1pZ2h0IGJlIG5vcm1hbGl6ZWQgb3IgZXNjYXBl
ZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWdEYXRhLT5jb250YWluc1BsYWluVGV4dCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBkcmFnRGF0YS0+YXNQbGFpblRleHQo
ZnJhbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNQbGFpblRl
eHQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZHJhZ0RhdGEuYXNQbGFpblRl
eHQoZnJhbWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSB1cmw7CiAgICAgICAgICAgICAgICAgfQpAQCAt
MTQ4LDE1ICsxNDcsMTUgQEAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9j
dQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmIChhbGxvd1BsYWluVGV4
dCAmJiBkcmFnRGF0YS0+Y29udGFpbnNQbGFpblRleHQoKSkgeworICAgIGlmIChhbGxvd1BsYWlu
VGV4dCAmJiBkcmFnRGF0YS5jb250YWluc1BsYWluVGV4dCgpKSB7CiAgICAgICAgIGNob3NlUGxh
aW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29u
dGV4dC5nZXQoKSwgZHJhZ0RhdGEtPmFzUGxhaW5UZXh0KGZyYW1lKSkuZ2V0KCk7CisgICAgICAg
IHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQsIGRyYWdEYXRhLmFzUGxhaW5U
ZXh0KGZyYW1lKSkuZ2V0KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CiAKLWJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgRHJhZ0Rh
dGEqIGRyYWdEYXRhKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShGcmFtZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgcmV0dXJuIG1fZG9j
dW1lbnRVbmRlck1vdXNlID09IG1fZHJhZ0luaXRpYXRvciAmJiBzZWxlY3Rpb24uaXNDb250ZW50
RWRpdGFibGUoKSAmJiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFpc0NvcHlLZXlEb3duKGRyYWdE
YXRhKTsKIH0KQEAgLTE3NiwxOSArMTc1LDE3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRyYWdF
bmRlZCgpCiAgICAgbV9jbGllbnQuZHJhZ0VuZGVkKCk7CiB9CiAKLURyYWdTZXNzaW9uIERyYWdD
b250cm9sbGVyOjpkcmFnRW50ZXJlZChEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnU2Vzc2lvbiBE
cmFnQ29udHJvbGxlcjo6ZHJhZ0VudGVyZWQoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIHJl
dHVybiBkcmFnRW50ZXJlZE9yVXBkYXRlZChkcmFnRGF0YSk7CiB9CiAKLXZvaWQgRHJhZ0NvbnRy
b2xsZXI6OmRyYWdFeGl0ZWQoRHJhZ0RhdGEqIGRyYWdEYXRhKQordm9pZCBEcmFnQ29udHJvbGxl
cjo6ZHJhZ0V4aXRlZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRh
KTsKLQogICAgIGlmIChSZWZQdHI8RnJhbWVWaWV3PiB2ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZp
ZXcoKSkgewogICAgICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5ID0gKCFtX2RvY3Vt
ZW50VW5kZXJNb3VzZSB8fCBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2VjdXJpdHlPcmlnaW4oKS0+
aXNMb2NhbCgpKSA/IENsaXBib2FyZFJlYWRhYmxlIDogQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZTsK
LSAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpjcmVhdGVG
b3JEcmFnQW5kRHJvcChwb2xpY3ksICpkcmFnRGF0YSk7Ci0gICAgICAgIGNsaXBib2FyZC0+c2V0
U291cmNlT3BlcmF0aW9uKGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7
CisgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRl
Rm9yRHJhZ0FuZERyb3AocG9saWN5LCBkcmFnRGF0YSk7CisgICAgICAgIGNsaXBib2FyZC0+c2V0
U291cmNlT3BlcmF0aW9uKGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsK
ICAgICAgICAgbV9wYWdlLm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmNhbmNlbERyYWdBbmRE
cm9wKGNyZWF0ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBjbGlwYm9hcmQuZ2V0KCkpOwogICAgICAg
ICBjbGlwYm9hcmQtPnNldEFjY2Vzc1BvbGljeShDbGlwYm9hcmROdW1iKTsgICAgLy8gaW52YWxp
ZGF0ZSBjbGlwYm9hcmQgaGVyZSBmb3Igc2VjdXJpdHkKICAgICB9CkBAIC0xOTgsMjMgKzE5NSwy
MiBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpkcmFnRXhpdGVkKERyYWdEYXRhCiAgICAgbV9maWxl
SW5wdXRFbGVtZW50VW5kZXJNb3VzZSA9IDA7CiB9CiAKLURyYWdTZXNzaW9uIERyYWdDb250cm9s
bGVyOjpkcmFnVXBkYXRlZChEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnU2Vzc2lvbiBEcmFnQ29u
dHJvbGxlcjo6ZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIHJldHVybiBk
cmFnRW50ZXJlZE9yVXBkYXRlZChkcmFnRGF0YSk7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnBlcmZvcm1EcmFnKERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OnBl
cmZvcm1EcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwot
ICAgIG1fZG9jdW1lbnRVbmRlck1vdXNlID0gbV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQ
b2ludChkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSk7CisgICAgbV9kb2N1bWVudFVuZGVyTW91
c2UgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLmNsaWVudFBv
c2l0aW9uKCkpOwogICAgIGlmICgobV9kcmFnRGVzdGluYXRpb25BY3Rpb24gJiBEcmFnRGVzdGlu
YXRpb25BY3Rpb25ESFRNTCkgJiYgbV9kb2N1bWVudElzSGFuZGxpbmdEcmFnKSB7CiAgICAgICAg
IG1fY2xpZW50LndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlv
bkFjdGlvbkRIVE1MLCBkcmFnRGF0YSk7CiAgICAgICAgIFJlZjxNYWluRnJhbWU+IG1haW5GcmFt
ZShtX3BhZ2UubWFpbkZyYW1lKCkpOwogICAgICAgICBib29sIHByZXZlbnRlZERlZmF1bHQgPSBm
YWxzZTsKICAgICAgICAgaWYgKG1haW5GcmFtZS0+dmlldygpKSB7CiAgICAgICAgICAgICAvLyBT
ZW5kaW5nIGFuIGV2ZW50IGNhbiByZXN1bHQgaW4gdGhlIGRlc3RydWN0aW9uIG9mIHRoZSB2aWV3
IGFuZCBwYXJ0LgotICAgICAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkID0gQ2xp
cGJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChDbGlwYm9hcmRSZWFkYWJsZSwgKmRyYWdEYXRh
KTsKLSAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0U291cmNlT3BlcmF0aW9uKGRyYWdEYXRhLT5k
cmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7CisgICAgICAgICAgICBSZWZQdHI8Q2xpcGJv
YXJkPiBjbGlwYm9hcmQgPSBDbGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKENsaXBib2Fy
ZFJlYWRhYmxlLCBkcmFnRGF0YSk7CisgICAgICAgICAgICBjbGlwYm9hcmQtPnNldFNvdXJjZU9w
ZXJhdGlvbihkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7CiAgICAgICAg
ICAgICBwcmV2ZW50ZWREZWZhdWx0ID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS5wZXJmb3Jt
RHJhZ0FuZERyb3AoY3JlYXRlTW91c2VFdmVudChkcmFnRGF0YSksIGNsaXBib2FyZC5nZXQoKSk7
CiAgICAgICAgICAgICBjbGlwYm9hcmQtPnNldEFjY2Vzc1BvbGljeShDbGlwYm9hcmROdW1iKTsg
Ly8gSW52YWxpZGF0ZSBjbGlwYm9hcmQgaGVyZSBmb3Igc2VjdXJpdHkKICAgICAgICAgfQpAQCAt
MjM1LDcgKzIzMSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnBlcmZvcm1EcmFnKERyYWdEYXQK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9jbGllbnQud2lsbFBlcmZvcm1EcmFnRGVz
dGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCwgZHJhZ0RhdGEpOwotICAg
IG1fcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKEZyYW1lTG9hZFJlcXVlc3QoJm1fcGFn
ZS5tYWluRnJhbWUoKSwgUmVzb3VyY2VSZXF1ZXN0KGRyYWdEYXRhLT5hc1VSTCgmbV9wYWdlLm1h
aW5GcmFtZSgpKSkpKTsKKyAgICBtX3BhZ2UubWFpbkZyYW1lKCkubG9hZGVyKCkubG9hZChGcmFt
ZUxvYWRSZXF1ZXN0KCZtX3BhZ2UubWFpbkZyYW1lKCksIFJlc291cmNlUmVxdWVzdChkcmFnRGF0
YS5hc1VSTCgmbV9wYWdlLm1haW5GcmFtZSgpKSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMjUwLDEwICsyNDYsOSBAQCB2b2lkIERyYWdDb250cm9sbGVyOjptb3VzZU1vdmVkSW50b0Rv
Y3VtCiAgICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBuZXdEb2N1bWVudDsKIH0KIAotRHJhZ1Nl
c3Npb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKERyYWdEYXRhKiBkcmFn
RGF0YSkKK0RyYWdTZXNzaW9uIERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJlZE9yVXBkYXRlZChE
cmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKLSAgICBtb3VzZU1v
dmVkSW50b0RvY3VtZW50KG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudEF0UG9pbnQoZHJhZ0Rh
dGEtPmNsaWVudFBvc2l0aW9uKCkpKTsKKyAgICBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG1fcGFn
ZS5tYWluRnJhbWUoKS5kb2N1bWVudEF0UG9pbnQoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSkp
OwogCiAgICAgbV9kcmFnRGVzdGluYXRpb25BY3Rpb24gPSBtX2NsaWVudC5hY3Rpb25NYXNrRm9y
RHJhZyhkcmFnRGF0YSk7CiAgICAgaWYgKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID09IERyYWdE
ZXN0aW5hdGlvbkFjdGlvbk5vbmUpIHsKQEAgLTMwMSwxMCArMjk2LDggQEAgc3RhdGljIEVsZW1l
bnQqIGVsZW1lbnRVbmRlck1vdXNlKERvY3VtZQogICAgIHJldHVybiB0b0VsZW1lbnQobik7CiB9
CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmFnRGF0YSogZHJhZ0Rh
dGEsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrLCBEcmFnU2Vzc2lvbiYgZHJhZ1Nl
c3Npb24pCitib29sIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoRHJhZ0RhdGEmIGRy
YWdEYXRhLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFzaywgRHJhZ1Nlc3Npb24mIGRy
YWdTZXNzaW9uKQogewotICAgIEFTU0VSVChkcmFnRGF0YSk7Ci0KICAgICBpZiAoIW1fZG9jdW1l
bnRVbmRlck1vdXNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMzNSwxMiArMzI4LDEy
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmEKICAgICB9CiAKICAg
ICBpZiAoKGFjdGlvbk1hc2sgJiBEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0KSAmJiBjYW5Qcm9j
ZXNzRHJhZyhkcmFnRGF0YSkpIHsKLSAgICAgICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0NvbG9y
KCkpIHsKKyAgICAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zQ29sb3IoKSkgewogICAgICAgICAg
ICAgZHJhZ1Nlc3Npb24ub3BlcmF0aW9uID0gRHJhZ09wZXJhdGlvbkdlbmVyaWM7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCi0gICAgICAgIEludFBvaW50IHBvaW50ID0g
ZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKTsK
KyAgICAgICAgSW50UG9pbnQgcG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMoZHJh
Z0RhdGEuY2xpZW50UG9zaXRpb24oKSk7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50VW5kZXJNb3VzZShtX2RvY3VtZW50VW5kZXJNb3VzZS5nZXQoKSwgcG9pbnQpOwogICAgICAg
ICBpZiAoIWVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNjAsNyArMzUz
LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKERyYQogICAgICAgICBk
cmFnU2Vzc2lvbi5tb3VzZUlzT3ZlckZpbGVJbnB1dCA9IG1fZmlsZUlucHV0RWxlbWVudFVuZGVy
TW91c2U7CiAgICAgICAgIGRyYWdTZXNzaW9uLm51bWJlck9mSXRlbXNUb0JlQWNjZXB0ZWQgPSAw
OwogCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9mRmlsZXMgPSBkcmFnRGF0YS0+bnVtYmVyT2ZG
aWxlcygpOworICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkZpbGVzID0gZHJhZ0RhdGEubnVtYmVy
T2ZGaWxlcygpOwogICAgICAgICBpZiAobV9maWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZSkgewog
ICAgICAgICAgICAgaWYgKG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2UtPmlzRGlzYWJsZWRG
b3JtQ29udHJvbCgpKQogICAgICAgICAgICAgICAgIGRyYWdTZXNzaW9uLm51bWJlck9mSXRlbXNU
b0JlQWNjZXB0ZWQgPSAwOwpAQCAtMzk3LDEwICszOTAsOSBAQCBEcmFnU291cmNlQWN0aW9uIERy
YWdDb250cm9sbGVyOjpkZWxlZ2F0CiAgICAgcmV0dXJuIG1fZHJhZ1NvdXJjZUFjdGlvbjsKIH0K
IAotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChEcmFnRGF0
YSogZHJhZ0RhdGEpCitEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JM
b2FkKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotICAgIERv
Y3VtZW50KiBkb2MgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRh
LT5jbGllbnRQb3NpdGlvbigpKTsKKyAgICBEb2N1bWVudCogZG9jID0gbV9wYWdlLm1haW5GcmFt
ZSgpLmRvY3VtZW50QXRQb2ludChkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKTsKIAogICAgIGJv
b2wgcGx1Z2luRG9jdW1lbnRBY2NlcHRzRHJhZ3MgPSBmYWxzZTsKIApAQCAtNDI4LDE4ICs0MjAs
MTYgQEAgc3RhdGljIGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbQogICAgIHJldHVy
biAhZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0Nv
bnRlbnRFZGl0YWJsZSgpOwogfQogCi1ib29sIERyYWdDb250cm9sbGVyOjpkaXNwYXRjaFRleHRJ
bnB1dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZyYW1lLCBEcmFnRGF0YSogZHJhZ0RhdGEpCitib29s
IERyYWdDb250cm9sbGVyOjpkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiBpbm5lckZy
YW1lLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgQVNTRVJUKG1fcGFnZS5kcmFnQ2FyZXRD
b250cm9sbGVyKCkuaGFzQ2FyZXQoKSk7Ci0gICAgU3RyaW5nIHRleHQgPSBtX3BhZ2UuZHJhZ0Nh
cmV0Q29udHJvbGxlcigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgPyAiIiA6IGRyYWdEYXRh
LT5hc1BsYWluVGV4dChpbm5lckZyYW1lKTsKKyAgICBTdHJpbmcgdGV4dCA9IG1fcGFnZS5kcmFn
Q2FyZXRDb250cm9sbGVyKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSA/IGVtcHR5U3RyaW5n
KCkgOiBkcmFnRGF0YS5hc1BsYWluVGV4dChpbm5lckZyYW1lKTsKICAgICBOb2RlKiB0YXJnZXQg
PSBpbm5lckZyYW1lLT5lZGl0b3IoKS5maW5kRXZlbnRUYXJnZXRGcm9tKG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpKTsKICAgICByZXR1cm4gdGFyZ2V0LT5kaXNw
YXRjaEV2ZW50KFRleHRFdmVudDo6Y3JlYXRlRm9yRHJvcChpbm5lckZyYW1lLT5kb2N1bWVudCgp
LT5kb21XaW5kb3coKSwgdGV4dCksIElHTk9SRV9FWENFUFRJT04pOwogfQogCi1ib29sIERyYWdD
b250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAg
IEFTU0VSVChkcmFnRGF0YSk7Ci0KICAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gZmlsZUlu
cHV0ID0gbV9maWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZTsKICAgICBpZiAobV9maWxlSW5wdXRF
bGVtZW50VW5kZXJNb3VzZSkgewogICAgICAgICBtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNl
LT5zZXRDYW5SZWNlaXZlRHJvcHBlZEZpbGVzKGZhbHNlKTsKQEAgLTQ0OSw3ICs0MzksNyBAQCBi
b29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyCiAgICAgaWYgKCFtX2RvY3Vt
ZW50VW5kZXJNb3VzZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQgcG9p
bnQgPSBtX2RvY3VtZW50VW5kZXJNb3VzZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGRyYWdE
YXRhLT5jbGllbnRQb3NpdGlvbigpKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IG1fZG9jdW1lbnRV
bmRlck1vdXNlLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZHJhZ0RhdGEuY2xpZW50UG9zaXRp
b24oKSk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRVbmRlck1vdXNlKG1fZG9jdW1l
bnRVbmRlck1vdXNlLmdldCgpLCBwb2ludCk7CiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC00NTksOCArNDQ5LDggQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29u
Y2x1ZGVFZGl0RHJhZyhEcgogICAgIGlmIChtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmhh
c0NhcmV0KCkgJiYgIWRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoaW5uZXJGcmFtZS5nZXQoKSwg
ZHJhZ0RhdGEpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChkcmFnRGF0YS0+Y29u
dGFpbnNDb2xvcigpKSB7Ci0gICAgICAgIENvbG9yIGNvbG9yID0gZHJhZ0RhdGEtPmFzQ29sb3Io
KTsKKyAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNDb2xvcigpKSB7CisgICAgICAgIENvbG9yIGNv
bG9yID0gZHJhZ0RhdGEuYXNDb2xvcigpOwogICAgICAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBpbm5lclJh
bmdlID0gaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKQEAgLTQ3
Myw3ICs0NjMsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNG
aWxlcygpICYmIGZpbGVJbnB1dCkgeworICAgIGlmIChkcmFnRGF0YS5jb250YWluc0ZpbGVzKCkg
JiYgZmlsZUlucHV0KSB7CiAgICAgICAgIC8vIGZpbGVJbnB1dCBzaG91bGQgYmUgdGhlIGVsZW1l
bnQgd2UgaGl0IHRlc3RlZCBmb3IsIHVubGVzcyBpdCB3YXMgbWFkZQogICAgICAgICAvLyBkaXNw
bGF5Om5vbmUgaW4gYSBkcm9wIGV2ZW50IGhhbmRsZXIuCiAgICAgICAgIEFTU0VSVChmaWxlSW5w
dXQgPT0gZWxlbWVudCB8fCAhZmlsZUlucHV0LT5yZW5kZXJlcigpKTsKQEAgLTQ5NywxMSArNDg3
LDEyIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAvLyBt
YW51YWxseSBjb250cm9sbGluZyBkcmFnIGJlaGF2aW91cgogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKKwogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBjYWNoZWRSZXNv
dXJjZUxvYWRlciA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIo
KTsKICAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHBy
ZXNzb3IoY2FjaGVkUmVzb3VyY2VMb2FkZXIpOwogICAgIGlmIChkcmFnSXNNb3ZlKGlubmVyRnJh
bWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSkgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hseUVk
aXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotICAgICAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50RnJv
bURyYWdEYXRhKGRyYWdEYXRhLCBpbm5lckZyYW1lLmdldCgpLCByYW5nZSwgdHJ1ZSwgY2hvc2VQ
bGFpblRleHQpOworICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBk
b2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCBpbm5lckZyYW1lLmdldCgpLCAq
cmFuZ2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKICAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAh
aW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoZnJhZ21lbnQsIHJhbmdl
LCBFZGl0b3JJbnNlcnRBY3Rpb25Ecm9wcGVkKSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CkBAIC01MTEsMTIgKzUwMiwxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjpj
b25jbHVkZUVkaXREcmFnKERyCiAgICAgICAgICAgICAvLyBOU1RleHRWaWV3IGJlaGF2aW9yIGlz
IHRvIGFsd2F5cyBzbWFydCBkZWxldGUgb24gbW92aW5nIGEgc2VsZWN0aW9uLAogICAgICAgICAg
ICAgLy8gYnV0IG9ubHkgdG8gc21hcnQgaW5zZXJ0IGlmIHRoZSBzZWxlY3Rpb24gZ3JhbnVsYXJp
dHkgaXMgd29yZCBncmFudWxhcml0eS4KICAgICAgICAgICAgIGJvb2wgc21hcnREZWxldGUgPSBp
bm5lckZyYW1lLT5lZGl0b3IoKS5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKLSAgICAgICAg
ICAgIGJvb2wgc21hcnRJbnNlcnQgPSBzbWFydERlbGV0ZSAmJiBpbm5lckZyYW1lLT5zZWxlY3Rp
b24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSAmJiBkcmFnRGF0YS0+Y2FuU21h
cnRSZXBsYWNlKCk7CisgICAgICAgICAgICBib29sIHNtYXJ0SW5zZXJ0ID0gc21hcnREZWxldGUg
JiYgaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJp
dHkgJiYgZHJhZ0RhdGEuY2FuU21hcnRSZXBsYWNlKCk7CiAgICAgICAgICAgICBhcHBseUNvbW1h
bmQoTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShmcmFnbWVudCwgZHJhZ0NhcmV0LmJhc2Uo
KSwgc21hcnRJbnNlcnQsIHNtYXJ0RGVsZXRlKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0Nh
cmV0LCByYW5nZSwgcG9pbnQpKSB7CiAgICAgICAgICAgICAgICAgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OkNvbW1hbmRPcHRpb25zIG9wdGlvbnMgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rp
bmc7Ci0gICAgICAgICAgICAgICAgaWYgKGRyYWdEYXRhLT5jYW5TbWFydFJlcGxhY2UoKSkKKyAg
ICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEuY2FuU21hcnRSZXBsYWNlKCkpCiAgICAgICAgICAg
ICAgICAgICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNtYXJ0UmVwbGFj
ZTsKICAgICAgICAgICAgICAgICBpZiAoY2hvc2VQbGFpblRleHQpCiAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGU7CkBAIC01
MjQsMTQgKzUxNSwxNCBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERy
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBTdHJpbmcg
dGV4dCA9IGRyYWdEYXRhLT5hc1BsYWluVGV4dChpbm5lckZyYW1lLmdldCgpKTsKKyAgICAgICAg
U3RyaW5nIHRleHQgPSBkcmFnRGF0YS5hc1BsYWluVGV4dChpbm5lckZyYW1lLmdldCgpKTsKICAg
ICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8ICFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRJ
bnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25Ecm9wcGVkKSkg
ewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKICAgICAgICAgbV9jbGll
bnQud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
RWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5u
ZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCByYW5nZSwgcG9pbnQpKQotICAgICAgICAgICAgYXBw
bHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRl
ck1vdXNlLCBjcmVhdGVGcmFnbWVudEZyb21UZXh0KHJhbmdlLmdldCgpLCB0ZXh0KSwgIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCB8IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpNYXRjaFN0eWxlIHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0
aW5nKSk7CisgICAgICAgICAgICBhcHBseUNvbW1hbmQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OmNyZWF0ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJh
bmdlLCB0ZXh0KSwgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCB8
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OlByZXZlbnROZXN0aW5nKSk7CiAgICAgfQogCiAgICAgaWYgKHJvb3RFZGl0YWJsZUVs
ZW1lbnQpIHsKQEAgLTU0MiwxNCArNTMzLDEyIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNs
dWRlRWRpdERyYWcoRHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQorYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFn
RGF0YSk7Ci0KLSAgICBpZiAoIWRyYWdEYXRhLT5jb250YWluc0NvbXBhdGlibGVDb250ZW50KCkp
CisgICAgaWYgKCFkcmFnRGF0YS5jb250YWluc0NvbXBhdGlibGVDb250ZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEludFBvaW50IHBvaW50ID0gbV9wYWdlLm1haW5GcmFtZSgp
LnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSk7Cisg
ICAgSW50UG9pbnQgcG9pbnQgPSBtX3BhZ2UubWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0Nv
bnRlbnRzKGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpOwogICAgIEhpdFRlc3RSZXN1bHQgcmVz
dWx0ID0gSGl0VGVzdFJlc3VsdChwb2ludCk7CiAgICAgaWYgKCFtX3BhZ2UubWFpbkZyYW1lKCku
Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU1OSw3ICs1NDgs
NyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyhEcmFnCiAgICAgaWYgKCFy
ZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmIChkcmFnRGF0YS0+Y29udGFpbnNGaWxlcygpICYmIGFzRmlsZUlucHV0KHJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKSkpCisgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMoKSAmJiBh
c0ZpbGVJbnB1dChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIGlmIChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmlzUGx1Z2luRWxl
bWVudCgpKSB7CkBAIC01OTQsOSArNTgzLDggQEAgc3RhdGljIERyYWdPcGVyYXRpb24gZGVmYXVs
dE9wZXJhdGlvbkZvcgogICAgIHJldHVybiBEcmFnT3BlcmF0aW9uR2VuZXJpYzsKIH0KIAotYm9v
bCBEcmFnQ29udHJvbGxlcjo6dHJ5REhUTUxEcmFnKERyYWdEYXRhKiBkcmFnRGF0YSwgRHJhZ09w
ZXJhdGlvbiYgb3BlcmF0aW9uKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5REhUTUxEcmFnKERy
YWdEYXRhJiBkcmFnRGF0YSwgRHJhZ09wZXJhdGlvbiYgb3BlcmF0aW9uKQogewotICAgIEFTU0VS
VChkcmFnRGF0YSk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnRVbmRlck1vdXNlKTsKICAgICBSZWY8
TWFpbkZyYW1lPiBtYWluRnJhbWUobV9wYWdlLm1haW5GcmFtZSgpKTsKICAgICBSZWZQdHI8RnJh
bWVWaWV3PiB2aWV3UHJvdGVjdG9yID0gbWFpbkZyYW1lLT52aWV3KCk7CkBAIC02MDQsOCArNTky
LDggQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5REhUTUxEcmFnKERyYWdEYQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5ID0gbV9kb2N1
bWVudFVuZGVyTW91c2UtPnNlY3VyaXR5T3JpZ2luKCktPmlzTG9jYWwoKSA/IENsaXBib2FyZFJl
YWRhYmxlIDogQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZTsKLSAgICBSZWZQdHI8Q2xpcGJvYXJkPiBj
bGlwYm9hcmQgPSBDbGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKHBvbGljeSwgKmRyYWdE
YXRhKTsKLSAgICBEcmFnT3BlcmF0aW9uIHNyY09wTWFzayA9IGRyYWdEYXRhLT5kcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soKTsKKyAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBD
bGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKHBvbGljeSwgZHJhZ0RhdGEpOworICAgIERy
YWdPcGVyYXRpb24gc3JjT3BNYXNrID0gZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrKCk7CiAgICAgY2xpcGJvYXJkLT5zZXRTb3VyY2VPcGVyYXRpb24oc3JjT3BNYXNrKTsKIAog
ICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudCA9IGNyZWF0ZU1vdXNlRXZlbnQoZHJhZ0RhdGEp
OwpAQCAtNjY0LDE5ICs2NTIsMTcgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJs
ZUVsZW1lbgogICAgIHJldHVybiAoc3RhdGUudHlwZSAmIERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rp
b24pID8gc3RhcnRFbGVtZW50IDogMDsKIH0KIAotc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNo
ZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIENhY2hlZEltYWdlKiBnZXRDYWNoZWRJ
bWFnZShFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIgfHwg
IXJlbmRlcmVyLT5pc0ltYWdlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlbmRlckltYWdl
KiBpbWFnZSA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpOwogICAgIHJldHVybiBpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKTsKIH0KIAotc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50KiBlbGVtZW50
KQorc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogewotICAgIEFTU0VS
VChlbGVtZW50KTsKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFn
ZShlbGVtZW50KTsKICAgICAvLyBEb24ndCB1c2UgY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVy
ZXIoKSBoZXJlIGFzIHRoYXQgbWF5IHJldHVybiBCaXRtYXBJbWFnZXMgZm9yIGNhY2hlZCBTVkcg
SW1hZ2VzLgogICAgIC8vIFVzZXJzIG9mIGdldEltYWdlKCkgd2FudCBhY2Nlc3MgdG8gdGhlIFNW
R0ltYWdlLCBpbiBvcmRlciB0byBmaWd1cmUgb3V0IHRoZSBmaWxlbmFtZSBleHRlbnNpb25zLApA
QCAtNjg1LDExICs2NzEsMTEgQEAgc3RhdGljIEltYWdlKiBnZXRJbWFnZShFbGVtZW50KiBlbGVt
ZW50KQogICAgICAgICBjYWNoZWRJbWFnZS0+aW1hZ2UoKSA6IDA7CiB9CiAKLXN0YXRpYyB2b2lk
IHNlbGVjdEVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyB2b2lkIHNlbGVjdEVsZW1l
bnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWxlbWVu
dC0+ZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlKGVsZW1l
bnQpOwotICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWxlbWVudC5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Cisg
ICAgcmFuZ2UtPnNlbGVjdE5vZGUoJmVsZW1lbnQpOworICAgIGVsZW1lbnQuZG9jdW1lbnQoKS5m
cmFtZSgpLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5n
ZXQoKSwgRE9XTlNUUkVBTSkpOwogfQogCiBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvckRIVE1M
RHJhZyhjb25zdCBJbnRQb2ludCYgbW91c2VEcmFnZ2VkUG9pbnQsIGNvbnN0IEludFBvaW50JiBk
cmFnT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT2Zmc2V0LCBib29sIGlzTGlua0lt
YWdlKQpAQCAtNzA4LDkgKzY5NCw5IEBAIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yREhUTUxE
cmFnKGNvbnMKICAgICByZXR1cm4gSW50UG9pbnQoZHJhZ09yaWdpbi54KCkgLSBkcmFnSW1hZ2VP
ZmZzZXQueCgpLCBkcmFnT3JpZ2luLnkoKSArIHlPZmZzZXQpOwogfQogCi1zdGF0aWMgSW50UG9p
bnQgZHJhZ0xvY0ZvclNlbGVjdGlvbkRyYWcoRnJhbWUqIHNyYykKK3N0YXRpYyBJbnRQb2ludCBk
cmFnTG9jRm9yU2VsZWN0aW9uRHJhZyhGcmFtZSYgc3JjKQogewotICAgIEludFJlY3QgZHJhZ2dp
bmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzcmMtPnNlbGVjdGlvbigpLmJvdW5kcygpKTsKKyAg
ICBJbnRSZWN0IGRyYWdnaW5nUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc3JjLnNlbGVjdGlvbigp
LmJvdW5kcygpKTsKICAgICBpbnQgeHBvcyA9IGRyYWdnaW5nUmVjdC5tYXhYKCk7CiAgICAgeHBv
cyA9IGRyYWdnaW5nUmVjdC54KCkgPCB4cG9zID8gZHJhZ2dpbmdSZWN0LngoKSA6IHhwb3M7CiAg
ICAgaW50IHlwb3MgPSBkcmFnZ2luZ1JlY3QubWF4WSgpOwpAQCAtNzIzLDE0ICs3MDksMTIgQEAg
c3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JTZWxlY3Rpb25EcmFnKAogICAgIHJldHVybiBJbnRQ
b2ludCh4cG9zLCB5cG9zKTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZy
YW1lKiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVyYXRpb24gc3JjT3AsIGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09y
aWdpbikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBE
cmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uIHNyY09wLCBjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIGRyYWdFdmVudCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4pCiB7Ci0gICAgQVNT
RVJUKHNyYyk7Ci0KLSAgICBpZiAoIXNyYy0+dmlldygpIHx8ICFzcmMtPmNvbnRlbnRSZW5kZXJl
cigpKQorICAgIGlmICghc3JjLnZpZXcoKSB8fCAhc3JjLmNvbnRlbnRSZW5kZXJlcigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIaXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQgPSBz
cmMtPmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KGRyYWdPcmlnaW4sIEhpdFRl
c3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOworICAgIEhpdFRl
c3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IHNyYy5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0
QXRQb2ludChkcmFnT3JpZ2luLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVx
dWVzdDo6QWN0aXZlKTsKICAgICBpZiAoIXN0YXRlLnNvdXJjZS0+Y29udGFpbnMoaGl0VGVzdFJl
c3VsdC5pbm5lck5vZGUoKSkpCiAgICAgICAgIC8vIFRoZSBvcmlnaW5hbCBub2RlIGJlaW5nIGRy
YWdnZWQgaXNuJ3QgdW5kZXIgdGhlIGRyYWcgb3JpZ2luIGFueW1vcmUuLi4gbWF5YmUgaXQgd2Fz
CiAgICAgICAgIC8vIGhpZGRlbiBvciBtb3ZlZCBvdXQgZnJvbSB1bmRlciB0aGUgY3Vyc29yLiBS
ZWdhcmRsZXNzLCB3ZSBkb24ndCB3YW50IHRvIHN0YXJ0IGEgZHJhZyBvbgpAQCAtNzM5LDcgKzcy
Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKICAgICBVUkwg
bGlua1VSTCA9IGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgVVJMIGltYWdl
VVJMID0gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCk7CiAKLSAgICBJbnRQb2ludCBt
b3VzZURyYWdnZWRQb2ludCA9IHNyYy0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGRyYWdFdmVu
dC5wb3NpdGlvbigpKTsKKyAgICBJbnRQb2ludCBtb3VzZURyYWdnZWRQb2ludCA9IHNyYy52aWV3
KCktPndpbmRvd1RvQ29udGVudHMoZHJhZ0V2ZW50LnBvc2l0aW9uKCkpOwogCiAgICAgbV9kcmFn
Z2luZ0ltYWdlVVJMID0gVVJMKCk7CiAgICAgbV9zb3VyY2VEcmFnT3BlcmF0aW9uID0gc3JjT3A7
CkBAIC03NDgsOSArNzMyLDExIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFt
ZSogc3IKICAgICBJbnRQb2ludCBkcmFnTG9jKDAsIDApOwogICAgIEludFBvaW50IGRyYWdJbWFn
ZU9mZnNldCgwLCAwKTsKIAotICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gc3RhdGUuY2xpcGJv
YXJkLmdldCgpOworICAgIEFTU0VSVChzdGF0ZS5jbGlwYm9hcmQpOworCisgICAgQ2xpcGJvYXJk
JiBjbGlwYm9hcmQgPSAqc3RhdGUuY2xpcGJvYXJkOwogICAgIGlmIChzdGF0ZS50eXBlID09IERy
YWdTb3VyY2VBY3Rpb25ESFRNTCkKLSAgICAgICAgZHJhZ0ltYWdlID0gY2xpcGJvYXJkLT5jcmVh
dGVEcmFnSW1hZ2UoZHJhZ0ltYWdlT2Zmc2V0KTsKKyAgICAgICAgZHJhZ0ltYWdlID0gY2xpcGJv
YXJkLmNyZWF0ZURyYWdJbWFnZShkcmFnSW1hZ2VPZmZzZXQpOwogICAgIGlmIChzdGF0ZS50eXBl
ID09IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24gfHwgIWltYWdlVVJMLmlzRW1wdHkoKSB8fCAh
bGlua1VSTC5pc0VtcHR5KCkpCiAgICAgICAgIC8vIFNlbGVjdGlvbiwgaW1hZ2UsIGFuZCBsaW5r
IGRyYWdzIHJlY2VpdmUgYSBkZWZhdWx0IHNldCBvZiBhbGxvd2VkIGRyYWcgb3BlcmF0aW9ucyB0
aGF0CiAgICAgICAgIC8vIGZvbGxvd3MgZnJvbToKQEAgLTc2Niw0NSArNzUyLDQ2IEBAIGJvb2wg
RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKIAogICAgIGJvb2wgc3RhcnRlZERy
YWcgPSB0cnVlOyAvLyBvcHRpbWlzbSAtIHdlIGFsbW9zdCBhbHdheXMgbWFuYWdlIHRvIHN0YXJ0
IHRoZSBkcmFnCiAKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGUuc291cmNlLmdldCgpOwor
ICAgIEFTU0VSVChzdGF0ZS5zb3VyY2UpOworICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqc3RhdGUu
c291cmNlOwogCiAgICAgSW1hZ2UqIGltYWdlID0gZ2V0SW1hZ2UoZWxlbWVudCk7CiAgICAgaWYg
KHN0YXRlLnR5cGUgPT0gRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikgewotICAgICAgICBpZiAo
IWNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmhhc0RhdGEoKSkgeworICAgICAgICBpZiAoIWNsaXBi
b2FyZC5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBlbnRpcmUgYmxvY2sgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgY29kZSBpbiBFZGl0b3I6
OmNvcHksIGFuZCB0aGUgY29kZSBzaG91bGQgYmUgc2hhcmVkLgogCi0gICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc3JjLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgQVNTRVJUKHNlbGVj
dGlvblJhbmdlKTsKIAotICAgICAgICAgICAgc3JjLT5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgc3JjLmVk
aXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb25SYW5nZS5nZXQo
KSk7CiAKLSAgICAgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3JjLT5zZWxl
Y3Rpb24oKS5zdGFydCgpKSkKLSAgICAgICAgICAgICAgICBjbGlwYm9hcmQtPnBhc3RlYm9hcmQo
KS53cml0ZVBsYWluVGV4dChzcmMtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgp
LCBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJlcGxhY2UpOworICAgICAgICAgICAgaWYgKGVuY2xv
c2luZ1RleHRGb3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgICAgICAg
ICAgICAgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS53cml0ZVBsYWluVGV4dChzcmMuZWRpdG9yKCku
c2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksIFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFj
ZSk7CiAgICAgICAgICAgICBlbHNlIHsKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEVG
TCkKLSAgICAgICAgICAgICAgICBzcmMtPmVkaXRvcigpLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKGNsaXBib2FyZC0+cGFzdGVib2FyZCgpKTsKKyAgICAgICAgICAgICAgICBzcmMuZWRpdG9y
KCkud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY2xpcGJvYXJkLnBhc3RlYm9hcmQoKSk7CiAj
ZWxzZQogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IGFsbCBvdGhlciBwbGF0Zm9y
bXMgdG8gbWF0Y2ggTWFjIGFuZCBkZWxldGUgdGhpcy4KLSAgICAgICAgICAgICAgICBjbGlwYm9h
cmQtPnBhc3RlYm9hcmQoKS53cml0ZVNlbGVjdGlvbihzZWxlY3Rpb25SYW5nZS5nZXQoKSwgc3Jj
LT5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRl
eHRGb3JDbGlwYm9hcmQpOworICAgICAgICAgICAgICAgIGNsaXBib2FyZC5wYXN0ZWJvYXJkKCku
d3JpdGVTZWxlY3Rpb24oc2VsZWN0aW9uUmFuZ2UuZ2V0KCksIHNyYy5lZGl0b3IoKS5jYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQpOwog
I2VuZGlmCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNyYy0+ZWRpdG9yKCkuZGlkV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKKyAgICAgICAgICAgIHNyYy5lZGl0b3IoKS5kaWRX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogICAgICAgICB9CiAgICAgICAgIG1fY2xpZW50
LndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uLCBk
cmFnT3JpZ2luLCBjbGlwYm9hcmQpOwogICAgICAgICBpZiAoIWRyYWdJbWFnZSkgewotICAgICAg
ICAgICAgZHJhZ0ltYWdlID0gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKHNyYy0+ZHJhZ0lt
YWdlRm9yU2VsZWN0aW9uKCksIERyYWdJbWFnZUFscGhhKTsKKyAgICAgICAgICAgIGRyYWdJbWFn
ZSA9IGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihzcmMuZHJhZ0ltYWdlRm9yU2VsZWN0aW9u
KCksIERyYWdJbWFnZUFscGhhKTsKICAgICAgICAgICAgIGRyYWdMb2MgPSBkcmFnTG9jRm9yU2Vs
ZWN0aW9uRHJhZyhzcmMpOwogICAgICAgICAgICAgbV9kcmFnT2Zmc2V0ID0gSW50UG9pbnQoZHJh
Z09yaWdpbi54KCkgLSBkcmFnTG9jLngoKSwgZHJhZ09yaWdpbi55KCkgLSBkcmFnTG9jLnkoKSk7
CiAgICAgICAgIH0KICAgICAgICAgZG9TeXN0ZW1EcmFnKGRyYWdJbWFnZSwgZHJhZ0xvYywgZHJh
Z09yaWdpbiwgY2xpcGJvYXJkLCBzcmMsIGZhbHNlKTsKLSAgICB9IGVsc2UgaWYgKCFpbWFnZVVS
TC5pc0VtcHR5KCkgJiYgZWxlbWVudCAmJiBpbWFnZSAmJiAhaW1hZ2UtPmlzTnVsbCgpICYmICht
X2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uSW1hZ2UpKSB7CisgICAgfSBlbHNl
IGlmICghaW1hZ2VVUkwuaXNFbXB0eSgpICYmIGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkgJiYg
KG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VBY3Rpb25JbWFnZSkpIHsKICAgICAgICAg
Ly8gV2Ugc2hvdWxkbid0IGJlIHN0YXJ0aW5nIGEgZHJhZyBmb3IgYW4gaW1hZ2UgdGhhdCBjYW4n
dCBwcm92aWRlIGFuIGV4dGVuc2lvbi4KICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJseSBkZXRl
Y3Rpb24gZm9yIHByb2JsZW1zIGVuY291bnRlcmVkIGxhdGVyIHVwb24gZHJvcC4KICAgICAgICAg
QVNTRVJUKCFpbWFnZS0+ZmlsZW5hbWVFeHRlbnNpb24oKS5pc0VtcHR5KCkpOwotICAgICAgICBp
ZiAoIWNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmhhc0RhdGEoKSkgeworICAgICAgICBpZiAoIWNs
aXBib2FyZC5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgpKSB7CiAgICAgICAgICAgICBtX2RyYWdnaW5n
SW1hZ2VVUkwgPSBpbWFnZVVSTDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50KGVsZW1lbnQpOwogICAg
ICAgICAgICAgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNsaXBib2FyZCwgZWxlbWVudCwgIWxp
bmtVUkwuaXNFbXB0eSgpID8gbGlua1VSTCA6IGltYWdlVVJMLCBoaXRUZXN0UmVzdWx0LmFsdERp
c3BsYXlTdHJpbmcoKSk7CiAgICAgICAgIH0KQEAgLTgxMywzMSArODAwLDMxIEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKIAogICAgICAgICBpZiAoIWRyYWdJbWFn
ZSkgewogICAgICAgICAgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBoaXRUZXN0UmVzdWx0LmltYWdl
UmVjdCgpOwotICAgICAgICAgICAgaW1hZ2VSZWN0LnNldExvY2F0aW9uKG1fcGFnZS5tYWluRnJh
bWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhzcmMtPnZpZXcoKS0+Y29udGVudHNUb1Jv
b3RWaWV3KGltYWdlUmVjdC5sb2NhdGlvbigpKSkpOworICAgICAgICAgICAgaW1hZ2VSZWN0LnNl
dExvY2F0aW9uKG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhz
cmMudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoaW1hZ2VSZWN0LmxvY2F0aW9uKCkpKSk7CiAg
ICAgICAgICAgICBkb0ltYWdlRHJhZyhlbGVtZW50LCBkcmFnT3JpZ2luLCBoaXRUZXN0UmVzdWx0
LmltYWdlUmVjdCgpLCBjbGlwYm9hcmQsIHNyYywgbV9kcmFnT2Zmc2V0KTsKLSAgICAgICAgfSBl
bHNlCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBESFRNTCBkZWZpbmVkIGRyYWcg
aW1hZ2UKICAgICAgICAgICAgIGRvU3lzdGVtRHJhZyhkcmFnSW1hZ2UsIGRyYWdMb2MsIGRyYWdP
cmlnaW4sIGNsaXBib2FyZCwgc3JjLCBmYWxzZSk7Ci0KKyAgICAgICAgfQogICAgIH0gZWxzZSBp
ZiAoIWxpbmtVUkwuaXNFbXB0eSgpICYmIChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNl
QWN0aW9uTGluaykpIHsKLSAgICAgICAgaWYgKCFjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5oYXNE
YXRhKCkpCisgICAgICAgIGlmICghY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpCiAg
ICAgICAgICAgICAvLyBTaW1wbGlmeSB3aGl0ZXNwYWNlIHNvIHRoZSB0aXRsZSBwdXQgb24gdGhl
IGNsaXBib2FyZCByZXNlbWJsZXMgd2hhdCB0aGUgdXNlciBzZWVzCiAgICAgICAgICAgICAvLyBv
biB0aGUgd2ViIHBhZ2UuIFRoaXMgaW5jbHVkZXMgcmVwbGFjaW5nIG5ld2xpbmVzIHdpdGggc3Bh
Y2VzLgotICAgICAgICAgICAgc3JjLT5lZGl0b3IoKS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRlc3RS
ZXN1bHQudGV4dENvbnRlbnQoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKSwgY2xpcGJvYXJkLT5wYXN0
ZWJvYXJkKCkpOworICAgICAgICAgICAgc3JjLmVkaXRvcigpLmNvcHlVUkwobGlua1VSTCwgaGl0
VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLCBjbGlwYm9hcmQu
cGFzdGVib2FyZCgpKTsKIAotICAgICAgICBpZiAoc3JjLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkg
JiYgc3JjLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChz
cmMuc2VsZWN0aW9uKCkuaXNDYXJldCgpICYmIHNyYy5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0
YWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBhIHVzZXIgY2FuIGluaXRpYXRlIGEgZHJhZyBvbiBh
IGxpbmsgd2l0aG91dCBoYXZpbmcgYW55IHRleHQKICAgICAgICAgICAgIC8vIHNlbGVjdGVkLiAg
SW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgZXhwYW5kIHRoZSBzZWxlY3Rpb24gdG8KICAgICAgICAg
ICAgIC8vIHRoZSBlbmNsb3NpbmcgYW5jaG9yIGVsZW1lbnQKLSAgICAgICAgICAgIFBvc2l0aW9u
IHBvcyA9IHNyYy0+c2VsZWN0aW9uKCkuYmFzZSgpOworICAgICAgICAgICAgUG9zaXRpb24gcG9z
ID0gc3JjLnNlbGVjdGlvbigpLmJhc2UoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbmNs
b3NpbmdBbmNob3JFbGVtZW50KHBvcyk7CiAgICAgICAgICAgICBpZiAobm9kZSkKLSAgICAgICAg
ICAgICAgICBzcmMtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uOjpz
ZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHNyYy5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNv
bnRlbnRzT2ZOb2RlKG5vZGUpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fY2xpZW50LndpbGxQ
ZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uTGluaywgZHJhZ09yaWdpbiwg
Y2xpcGJvYXJkKTsKICAgICAgICAgaWYgKCFkcmFnSW1hZ2UpIHsKLSAgICAgICAgICAgIGRyYWdJ
bWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZvckxpbmsobGlua1VSTCwgaGl0VGVzdFJlc3VsdC50ZXh0
Q29udGVudCgpLCBzcmMtPnNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAg
ICAgICBkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKGxpbmtVUkwsIGhpdFRlc3RS
ZXN1bHQudGV4dENvbnRlbnQoKSwgc3JjLnNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7
CiAgICAgICAgICAgICBJbnRTaXplIHNpemUgPSBkcmFnSW1hZ2VTaXplKGRyYWdJbWFnZSk7CiAg
ICAgICAgICAgICBtX2RyYWdPZmZzZXQgPSBJbnRQb2ludCgtc2l6ZS53aWR0aCgpIC8gMiwgLUxp
bmtEcmFnQm9yZGVySW5zZXQpOwogICAgICAgICAgICAgZHJhZ0xvYyA9IEludFBvaW50KG1vdXNl
RHJhZ2dlZFBvaW50LngoKSArIG1fZHJhZ09mZnNldC54KCksIG1vdXNlRHJhZ2dlZFBvaW50Lnko
KSArIG1fZHJhZ09mZnNldC55KCkpOwpAQCAtODYxLDcgKzg0OCw3IEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKICAgICByZXR1cm4gc3RhcnRlZERyYWc7CiB9CiAK
LXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0
IEludFBvaW50JiBkcmFnT3JpZ2luLCBjb25zdCBJbnRSZWN0JiByZWN0LCBDbGlwYm9hcmQqIGNs
aXBib2FyZCwgRnJhbWUqIGZyYW1lLCBJbnRQb2ludCYgZHJhZ0ltYWdlT2Zmc2V0KQordm9pZCBE
cmFnQ29udHJvbGxlcjo6ZG9JbWFnZURyYWcoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgSW50UG9p
bnQmIGRyYWdPcmlnaW4sIGNvbnN0IEludFJlY3QmIHJlY3QsIENsaXBib2FyZCYgY2xpcGJvYXJk
LCBGcmFtZSYgZnJhbWUsIEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQpCiB7CiAgICAgSW50UG9p
bnQgbW91c2VEb3duUG9pbnQgPSBkcmFnT3JpZ2luOwogICAgIERyYWdJbWFnZVJlZiBkcmFnSW1h
Z2UgPSAwOwpAQCAtODY5LDcgKzg1Niw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VE
cmFnKEVsZW1lbnQKIAogICAgIEltYWdlKiBpbWFnZSA9IGdldEltYWdlKGVsZW1lbnQpOwogICAg
IGlmIChpbWFnZSAmJiBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpICogaW1hZ2UtPnNpemUoKS53aWR0
aCgpIDw9IE1heE9yaWdpbmFsSW1hZ2VBcmVhCi0gICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVh
dGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UsIGVsZW1lbnQtPnJlbmRlcmVyKCkgPyBJbWFnZU9y
aWVudGF0aW9uRGVzY3JpcHRpb24oZWxlbWVudC0+cmVuZGVyZXIoKS0+c2hvdWxkUmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSkgOiBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkpKSB7Cisg
ICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UsIGVs
ZW1lbnQucmVuZGVyZXIoKSA/IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihlbGVtZW50LnJl
bmRlcmVyKCktPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkpIDogSW1hZ2VPcmllbnRh
dGlvbkRlc2NyaXB0aW9uKCkpKSkgewogICAgICAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZSA9IHJl
Y3Quc2l6ZSgpOwogICAgICAgICBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CiAKQEAgLTkwMywx
NSArODkwLDE1IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQKICAg
ICBkZWxldGVEcmFnSW1hZ2UoZHJhZ0ltYWdlKTsKIH0KIAotdm9pZCBEcmFnQ29udHJvbGxlcjo6
ZG9TeXN0ZW1EcmFnKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdMb2Ms
IGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBm
cmFtZSwgYm9vbCBmb3JMaW5rKQordm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFnKERy
YWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdMb2MsIGNvbnN0IEludFBvaW50
JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBmb3JM
aW5rKQogewogICAgIG1fZGlkSW5pdGlhdGVEcmFnID0gdHJ1ZTsKLSAgICBtX2RyYWdJbml0aWF0
b3IgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBtX2RyYWdJbml0aWF0b3IgPSBmcmFtZS5kb2N1
bWVudCgpOwogICAgIC8vIFByb3RlY3QgdGhpcyBmcmFtZSBhbmQgdmlldywgYXMgYSBsb2FkIG1h
eSBvY2N1ciBtaWQgZHJhZyBhbmQgYXR0ZW1wdCB0byB1bmxvYWQgdGhpcyBmcmFtZQogICAgIFJl
ZjxNYWluRnJhbWU+IGZyYW1lUHJvdGVjdG9yKG1fcGFnZS5tYWluRnJhbWUoKSk7CiAgICAgUmVm
UHRyPEZyYW1lVmlldz4gdmlld1Byb3RlY3RvciA9IGZyYW1lUHJvdGVjdG9yLT52aWV3KCk7Ci0g
ICAgbV9jbGllbnQuc3RhcnREcmFnKGltYWdlLCB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29u
dGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGRyYWdMb2MpKSwKLSAgICAg
ICAgdmlld1Byb3RlY3Rvci0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRl
bnRzVG9Sb290VmlldyhldmVudFBvcykpLCBjbGlwYm9hcmQsICZmcmFtZVByb3RlY3Rvci5nZXQo
KSwgZm9yTGluayk7CisgICAgbV9jbGllbnQuc3RhcnREcmFnKGltYWdlLCB2aWV3UHJvdGVjdG9y
LT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZHJh
Z0xvYykpLAorICAgICAgICB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUu
dmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZXZlbnRQb3MpKSwgY2xpcGJvYXJkLCBmcmFtZVBy
b3RlY3Rvci5nZXQoKSwgZm9yTGluayk7CiAgICAgLy8gRHJhZ0NsaWVudDo6c3RhcnREcmFnIGNh
biBjYXVzZSBvdXIgUGFnZSB0byBkaXNwZWFyLCBkZWFsbG9jYXRpbmcgfHRoaXN8LgogICAgIGlm
ICghZnJhbWVQcm90ZWN0b3ItPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgs
MTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIERyYWdDbGllbnQmIGNsaWVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0Vu
dGVyZWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgdm9pZCBkcmFnRXhpdGVkKERyYWdEYXRhKik7Ci0g
ICAgICAgIERyYWdTZXNzaW9uIGRyYWdVcGRhdGVkKERyYWdEYXRhKik7Ci0gICAgICAgIGJvb2wg
cGVyZm9ybURyYWcoRHJhZ0RhdGEqKTsKKyAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVyZWQo
RHJhZ0RhdGEmKTsKKyAgICAgICAgdm9pZCBkcmFnRXhpdGVkKERyYWdEYXRhJik7CisgICAgICAg
IERyYWdTZXNzaW9uIGRyYWdVcGRhdGVkKERyYWdEYXRhJik7CisgICAgICAgIGJvb2wgcGVyZm9y
bURyYWcoRHJhZ0RhdGEmKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJdCBzaG91bGQg
YmUgcG9zc2libGUgdG8gcmVtb3ZlIGEgbnVtYmVyIG9mIHRoZXNlIGFjY2Vzc29ycyBvbmNlIGFs
bAogICAgICAgICAvLyBkcmFnIGxvZ2ljIGlzIGluIFdlYkNvcmUuCkBAIC04Miw3ICs4Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcGxhY2VEcmFnQ2Fy
ZXQoY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgc3RhcnREcmFnKEZy
YW1lKiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYsIERyYWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBs
YXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbik7
CisgICAgICAgIGJvb2wgc3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYsIERy
YWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBj
b25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBJbnRTaXpl
JiBtYXhEcmFnSW1hZ2VTaXplKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IExpbmtEcmFnQm9yZGVySW5zZXQ7CkBAIC05MiwyNCArOTIsMjQgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgRHJhZ0ltYWdlQWxwaGE7CiAKICAgICBw
cml2YXRlOgotICAgICAgICBib29sIGRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqLCBE
cmFnRGF0YSopOwotICAgICAgICBib29sIGNhblByb2Nlc3NEcmFnKERyYWdEYXRhKik7Ci0gICAg
ICAgIGJvb2wgY29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSopOwotICAgICAgICBEcmFnU2Vzc2lv
biBkcmFnRW50ZXJlZE9yVXBkYXRlZChEcmFnRGF0YSopOwotICAgICAgICBEcmFnT3BlcmF0aW9u
IG9wZXJhdGlvbkZvckxvYWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgYm9vbCB0cnlEb2N1bWVudERy
YWcoRHJhZ0RhdGEqLCBEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdTZXNzaW9uJik7Ci0gICAg
ICAgIGJvb2wgdHJ5REhUTUxEcmFnKERyYWdEYXRhKiwgRHJhZ09wZXJhdGlvbiYpOwotICAgICAg
ICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqKTsKKyAgICAgICAgYm9vbCBk
aXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiwgRHJhZ0RhdGEmKTsKKyAgICAgICAgYm9v
bCBjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSYpOworICAgICAgICBib29sIGNvbmNsdWRlRWRpdERy
YWcoRHJhZ0RhdGEmKTsKKyAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVyZWRPclVwZGF0ZWQo
RHJhZ0RhdGEmKTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb25Gb3JMb2FkKERyYWdE
YXRhJik7CisgICAgICAgIGJvb2wgdHJ5RG9jdW1lbnREcmFnKERyYWdEYXRhJiwgRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uLCBEcmFnU2Vzc2lvbiYpOworICAgICAgICBib29sIHRyeURIVE1MRHJhZyhE
cmFnRGF0YSYsIERyYWdPcGVyYXRpb24mKTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnT3Bl
cmF0aW9uKERyYWdEYXRhJik7CiAgICAgICAgIHZvaWQgY2FuY2VsRHJhZygpOwotICAgICAgICBi
b29sIGRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mLCBEcmFnRGF0YSopOwotICAgICAgICBib29s
IGlzQ29weUtleURvd24oRHJhZ0RhdGEqKTsKKyAgICAgICAgYm9vbCBkcmFnSXNNb3ZlKEZyYW1l
U2VsZWN0aW9uJiwgRHJhZ0RhdGEmKTsKKyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdE
YXRhJik7CiAKICAgICAgICAgdm9pZCBtb3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7
CiAKLSAgICAgICAgdm9pZCBkb0ltYWdlRHJhZyhFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmLCBj
b25zdCBJbnRSZWN0JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBJbnRQb2ludCYpOwotICAgICAgICB2
b2lkIGRvU3lzdGVtRHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50
UG9pbnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wgZm9yTGluayk7CisgICAgICAgIHZvaWQg
ZG9JbWFnZURyYWcoRWxlbWVudCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYsIENs
aXBib2FyZCYsIEZyYW1lJiwgSW50UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkb1N5c3RlbURyYWco
RHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJk
JiwgRnJhbWUmLCBib29sIGZvckxpbmspOwogICAgICAgICB2b2lkIGNsZWFudXBBZnRlclN5c3Rl
bURyYWcoKTsKLSAgICAgICAgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJk
KiwgRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgICAgICB2
b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQmLCBFbGVtZW50JiwgY29uc3Qg
VVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAKICAgICAgICAgUGFnZSYgbV9wYWdlOwogICAg
ICAgICBEcmFnQ2xpZW50JiBtX2NsaWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY2OCw3ICszNjY4LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OmhhbmRsZURyYWcoY29uc3QgTW91cwogICAgIAogICAgIGlmIChtX21vdXNlRG93
bk1heVN0YXJ0RHJhZykgewogICAgICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7Ci0g
ICAgICAgIG1fZGlkU3RhcnREcmFnID0gcGFnZSAmJiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLnN0
YXJ0RHJhZygmbV9mcmFtZSwgZHJhZ1N0YXRlKCksIHNyY09wLCBldmVudC5ldmVudCgpLCBtX21v
dXNlRG93blBvcyk7CisgICAgICAgIG1fZGlkU3RhcnREcmFnID0gcGFnZSAmJiBwYWdlLT5kcmFn
Q29udHJvbGxlcigpLnN0YXJ0RHJhZyhtX2ZyYW1lLCBkcmFnU3RhdGUoKSwgc3JjT3AsIGV2ZW50
LmV2ZW50KCksIG1fbW91c2VEb3duUG9zKTsKICAgICAgICAgLy8gSW4gV2ViS2l0MiB3ZSBjb3Vs
ZCByZS1lbnRlciB0aGlzIGNvZGUgYW5kIHN0YXJ0IGFub3RoZXIgZHJhZy4KICAgICAgICAgLy8g
T24gT1MgWCB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHRoZSBvd25lcnNoaXAgb2YgdGhlIHBh
c3RlYm9hcmQgYW5kIHRoZSBwcm9taXNlZCB0eXBlcy4KICAgICAgICAgaWYgKG1fZGlkU3RhcnRE
cmFnKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJF
ZmwuY3BwCShyZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFn
Q29udHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0MywxNCBAQCBjb25z
dCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdD
b250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVy
Ojppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtl
eURvd24oRHJhZ0RhdGEmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRHJhZ09wZXJhdGlv
biBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFn
T3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0
YSkKIHsKLSAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKDApKQorICAgIGlmIChkcmFnRGF0
YS5jb250YWluc1VSTCgwKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5OwogCiAg
ICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIERyYWdD
b250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xs
ZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqLCBFbGVtZW50KiwgY29uc3Qg
VVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShDbGlwYm9hcmQmLCBFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5n
JikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9s
bGVyR3RrLmNwcAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ndGsv
RHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMTUgQEAg
Y29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBE
cmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJv
bGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCitib29sIERyYWdDb250cm9sbGVyOjppc0Nv
cHlLZXlEb3duKERyYWdEYXRhJikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLURyYWdPcGVy
YXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqIGRyYWdEYXRhKQor
RHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSYgZHJh
Z0RhdGEpCiB7CiAgICAgLy9GSVhNRTogVGhpcyBsb2dpYyBpcyBpbmNvbXBsZXRlCi0gICAgIGlm
IChkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkpCisgICAgIGlmIChkcmFnRGF0YS5jb250YWluc1VS
TCgwKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5OwogCiAgICAgcmV0dXJuIERy
YWdPcGVyYXRpb25Ob25lOwpAQCAtNjksOSArNjksOSBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpj
bGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVB
bmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdDb250cm9sbGVy
OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIGNs
aXBib2FyZC0+cGFzdGVib2FyZCgpLndyaXRlSW1hZ2UoZWxlbWVudCwgdXJsLCBsYWJlbCk7Cisg
ICAgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS53cml0ZUltYWdlKGVsZW1lbnQsIHVybCwgbGFiZWwp
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxl
ck1hYy5tbQkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRHJh
Z0NvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKQogCiAjaW1wb3J0ICJDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIkRP
TUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAiRHJh
Z0RhdGEuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKQEAgLTQ4LDE5ICs0NywxNyBAQCBjb25zdCBp
bnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250
cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjpp
c0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6Omlz
Q29weUtleURvd24oRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIHJldHVybiBkcmFnRGF0YS0+
ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAgcmV0dXJuIGRyYWdE
YXRhLmZsYWdzKCkgJiBEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duOwogfQogICAgIAotRHJh
Z09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0Rh
dGEpCitEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRh
JiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotCi0gICAgaWYgKChkcmFnRGF0
YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzTW9kYWwpIHx8ICFkcmFnRGF0YS0+Y29udGFp
bnNVUkwoJm1fcGFnZS5tYWluRnJhbWUoKSkpCisgICAgaWYgKChkcmFnRGF0YS5mbGFncygpICYg
RHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLmNvbnRhaW5zVVJMKCZtX3BhZ2Uu
bWFpbkZyYW1lKCkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CiAKLSAgICBp
ZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgKERyYWdB
cHBsaWNhdGlvbkhhc0F0dGFjaGVkU2hlZXQgfCBEcmFnQXBwbGljYXRpb25Jc1NvdXJjZSkpKSkK
KyAgICBpZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLmZsYWdzKCkgJiAo
RHJhZ0FwcGxpY2F0aW9uSGFzQXR0YWNoZWRTaGVldCB8IERyYWdBcHBsaWNhdGlvbklzU291cmNl
KSkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7CiAKICAgICByZXR1cm4gRHJh
Z09wZXJhdGlvbk5vbmU7CkBAIC04NSw5ICs4Miw5IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNs
ZWFudXBBZnRlclN5c3RlbUQKICAgICAgICAgZHJhZ0VuZGVkKCk7CiB9CiAKLXZvaWQgRHJhZ0Nv
bnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2
b2lkIERyYWdDb250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBj
bGlwYm9hcmQsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGxhYmVsKQogewotICAgIG1fY2xpZW50LmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjbGlwYm9h
cmQtPnBhc3RlYm9hcmQoKS5uYW1lKCksIGtpdChlbGVtZW50KSwgdXJsLCBsYWJlbCwgZWxlbWVu
dC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICBtX2NsaWVudC5kZWNsYXJlQW5kV3JpdGVEcmFn
SW1hZ2UoY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1lKCksIGVsZW1lbnQsIHVybCwgbGFiZWws
IGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNw
cAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRy
b2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMTYgQEAgY29uc3QgaW50
IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJv
bGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJv
bGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnT3BlcmF0aW9uIERy
YWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICAv
L0ZJWE1FOiB0byBtYXRjaCB0aGUgbWFjb3MgYmVoYXZpb3VyIHdlIHNob3VsZCByZXR1cm4gRHJh
Z09wZXJhdGlvbk5vbmUKICAgICAvL2lmIHdlIGFyZSBhIG1vZGFsIHdpbmRvdywgd2UgYXJlIHRo
ZSBkcmFnIHNvdXJjZSwgb3IgdGhlIHdpbmRvdyBpcyBhbiBhdHRhY2hlZCBzaGVldAogICAgIC8v
SWYgdGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHdpdGhpbiBXZWJDb3JlIG9wZXJhdGlvbkZv
ckRyYWcgY2FuIGJlIHB1bGxlZCBpbnRvIAogICAgIC8vV2ViQ29yZSBpdHNlbGYKLSAgICBBU1NF
UlQoZHJhZ0RhdGEpOwotICAgIHJldHVybiBkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkgJiYgIW1f
ZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsK
KyAgICByZXR1cm4gZHJhZ0RhdGEuY29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFn
ID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAotYm9vbCBEcmFn
Q29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCitib29sIERyYWdDb250cm9sbGVy
Ojppc0NvcHlLZXlEb3duKERyYWdEYXRhJikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tleVN0
YXRlKFZLX0NPTlRST0wpOwogfQpAQCAtNzAsOSArNjksOSBAQCB2b2lkIERyYWdDb250cm9sbGVy
OjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xh
cmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdDb250cm9s
bGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAg
IFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKTsKKyAgICBQ
YXN0ZWJvYXJkJiBwYXN0ZWJvYXJkID0gY2xpcGJvYXJkLnBhc3RlYm9hcmQoKTsKIAogICAgIC8v
IEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0aGlzIGNoZWNrPwogICAgIGlmICghcGFzdGVib2Fy
ZC53cml0YWJsZURhdGFPYmplY3QoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEu
aAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
YXNQbGFpblRleHQoRnJhbWUqKSBjb25zdDsKICAgICB2b2lkIGFzRmlsZW5hbWVzKFZlY3RvcjxT
dHJpbmc+JikgY29uc3Q7CiAgICAgQ29sb3IgYXNDb2xvcigpIGNvbnN0OwotICAgIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gYXNGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+
IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSBjb25zdDsKKyAgICBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGFzRnJhZ21lbnQoRnJhbWUqLCBSYW5nZSYgY29udGV4
dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpIGNvbnN0OwogICAg
IGJvb2wgY2FuU21hcnRSZXBsYWNlKCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0NvbG9yKCkg
Y29uc3Q7CiAgICAgYm9vbCBjb250YWluc0ZpbGVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZC5oCShyZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQot
ICAgIHZvaWQgd3JpdGVJbWFnZShOb2RlKiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCisgICAgdm9pZCB3cml0ZUltYWdlKEVs
ZW1lbnQmLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsgLy8gRklYTUU6IExheWVy
aW5nIHZpb2xhdGlvbi4KICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uKFJhbmdlKiwgYm9vbCBjYW5T
bWFydENvcHlPckRlbGV0ZSwgRnJhbWUqLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JD
bGlwYm9hcmQgPSBEZWZhdWx0U2VsZWN0ZWRUZXh0VHlwZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2
aW9sYXRpb24uCiAjZW5kaWYKIApAQCAtMTk5LDcgKzE5OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldEV4dGVybmFsRGF0YU9iamVjdChJRGF0YU9iamVjdCopOwogICAgIHZvaWQgd3JpdGVVUkxU
b1dyaXRhYmxlRGF0YU9iamVjdChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKTsKICAgICBDT01Q
dHI8V0NEYXRhT2JqZWN0PiB3cml0YWJsZURhdGFPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3dy
aXRhYmxlRGF0YU9iamVjdDsgfQotICAgIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVt
ZW50KiwgY29uc3QgVVJMJik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCisgICAgdm9p
ZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KEVsZW1lbnQmLCBjb25zdCBVUkwmKTsgLy8gRklYTUU6
IExheWVyaW5nIHZpb2xhdGlvbi4KICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCShy
ZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0Fu
ZERyb3BIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgR3Rr
RHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWEKICAgICBEcmFnRGF0YSBkcmFnRGF0YShj
b250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCiAg
ICAgICAgICAgICAgICAgICAgICAgRHJhZ09wZXJhdGlvbk5vbmUpOwotICAgIGNvbnRleHQtPmV4
aXRlZENhbGxiYWNrKG1fd2lkZ2V0LCAmZHJhZ0RhdGEsIGNvbnRleHQtPmRyb3BIYXBwZW5lZCk7
CisgICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sobV93aWRnZXQsIGRyYWdEYXRhLCBjb250ZXh0
LT5kcm9wSGFwcGVuZWQpOwogCiAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnJlbW92ZShpdGVyYXRv
cik7CiAgICAgZGVsZXRlIGNvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaAkocmV2aXNpb24gMTU3MDA0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IERy
b3BwaW5nQ29udGV4dDsKIGNsYXNzIERyYWdEYXRhOwogCi10eXBlZGVmIHZvaWQgKCpEcmFnRXhp
dGVkQ2FsbGJhY2spKEd0a1dpZGdldCosIERyYWdEYXRhKiwgYm9vbCBkcm9wSGFwcGVuZWQpOwor
dHlwZWRlZiB2b2lkICgqRHJhZ0V4aXRlZENhbGxiYWNrKShHdGtXaWRnZXQqLCBEcmFnRGF0YSYs
IGJvb2wgZHJvcEhhcHBlbmVkKTsKIAogY2xhc3MgR3RrRHJhZ0FuZERyb3BIZWxwZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a0RyYWdBbmREcm9wSGVscGVyKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHJldmlzaW9uIDE1
NzAwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg3LDMxICsxODcsMjggQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZShjb25zdCBQYXN0ZWJvYXJkVQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFz
dGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsK
IH0KIAotc3RhdGljIFVSTCBnZXRVUkxGb3JJbWFnZU5vZGUoTm9kZSogbm9kZSkKK3N0YXRpYyBV
UkwgZ2V0VVJMRm9ySW1hZ2VFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklY
TUU6IExhdGVyIHRoaXMgY29kZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggQ2hyb21pdW0gc29tZWhv
dy4gQ2hhbmNlcyBhcmUgYWxsIHBsYXRmb3JtcyB3YW50IGl0LgogICAgIEF0b21pY1N0cmluZyB1
cmxTdHJpbmc7Ci0gICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChub2RlKSB8fCBpc0hUTUxJbnB1
dEVsZW1lbnQobm9kZSkpCi0gICAgICAgIHVybFN0cmluZyA9IHRvRWxlbWVudChub2RlKS0+Z2V0
QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVu
dChlbGVtZW50KSB8fCBpc0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIHVybFN0
cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CiAjaWYgRU5B
QkxFKFNWRykKLSAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRh
ZykpCi0gICAgICAgIHVybFN0cmluZyA9IHRvRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKFhM
aW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoU1ZH
TmFtZXM6OmltYWdlVGFnKSkKKyAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1
dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogI2VuZGlmCi0gICAgZWxzZSBpZiAobm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBpc0hUTUxPYmplY3RFbGVtZW50KG5vZGUp
KSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7Ci0gICAgICAg
IHVybFN0cmluZyA9IGVsZW1lbnQtPmltYWdlU291cmNlVVJMKCk7Ci0gICAgfQotICAgIHJldHVy
biB1cmxTdHJpbmcuaXNFbXB0eSgpID8gVVJMKCkgOiBub2RlLT5kb2N1bWVudCgpLmNvbXBsZXRl
VVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKKyAgICBl
bHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykgfHwgaXNIVE1M
T2JqZWN0RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC5pbWFn
ZVNvdXJjZVVSTCgpOworCisgICAgcmV0dXJuIHVybFN0cmluZy5pc0VtcHR5KCkgPyBVUkwoKSA6
IGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hU
TUxTcGFjZXModXJsU3RyaW5nKSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShO
b2RlKiBub2RlLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKQordm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVuZGVy
ZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQorICAgIGlmICghKGVsZW1lbnQu
cmVuZGVyZXIoKSAmJiBlbGVtZW50LnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+
cmVuZGVyZXIoKSk7CisgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShl
bGVtZW50LnJlbmRlcmVyKCkpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRl
cmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2Ut
PmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIwLDExICsyMTcsMTEgQEAg
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogCiAgICAgbV9kYXRhT2Jq
ZWN0LT5jbGVhckFsbCgpOwogCi0gICAgVVJMIHVybCA9IGdldFVSTEZvckltYWdlTm9kZShub2Rl
KTsKKyAgICBVUkwgdXJsID0gZ2V0VVJMRm9ySW1hZ2VFbGVtZW50KGVsZW1lbnQpOwogICAgIGlm
ICghdXJsLmlzRW1wdHkoKSkgewogICAgICAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIHRp
dGxlKTsKIAotICAgICAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoKnRv
RWxlbWVudChub2RlKSwgSW5jbHVkZU5vZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7CisgICAgICAg
IG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChlbGVtZW50LCBJbmNsdWRlTm9k
ZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKICAgICB9CiAKICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
cGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQaXhidWYoKSk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCShyZXZpc2lvbiAxNTcwMDQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE4OSwxMCArMTg5LDEwIEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqIGZy
YW1lLCBGaWwKICAgICByZXR1cm4gU3RyaW5nKCk7ICAgICAgICAKIH0KIAotUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NS
ZWZQdHI8UmFuZ2U+IHJhbmdlLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWlu
VGV4dCkgY29uc3QKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJh
Z21lbnQoRnJhbWUqIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJv
b2wmIGNob3NlUGxhaW5UZXh0KSBjb25zdAogewogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZCht
X3Bhc3RlYm9hcmROYW1lKTsKLSAgICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLndlYkNvbnRlbnRG
cm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBs
YWluVGV4dCk7CisgICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS53ZWJDb250ZW50RnJvbVBhc3Rl
Ym9hcmQocGFzdGVib2FyZCwgcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7
CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZpc2lvbiAxNTcwMDQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcyNSwxNCArNzI1LDEyIEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFz
dGVib2FyZFUKICAgICB3cml0ZVVSTFRvRGF0YU9iamVjdChwYXN0ZWJvYXJkVVJMLnVybCwgcGFz
dGVib2FyZFVSTC50aXRsZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2Rl
KiBub2RlLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZUltYWdlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpCiB7Ci0g
ICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5y
ZW5kZXJlcigpLT5pc0ltYWdlKCkpKQorICAgIGlmICghKGVsZW1lbnQucmVuZGVyZXIoKSAmJiBl
bGVtZW50LnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
bmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7Cisg
ICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LnJlbmRlcmVy
KCkpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFn
ZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtODYxLDExICs4NTksMTAgQEAgdm9pZCBQYXN0ZWJvYXJk
OjpzZXRFeHRlcm5hbERhdGFPYmplY3QoSQogICAgIG1fZGF0YU9iamVjdCA9IGRhdGFPYmplY3Q7
CiB9CiAKLXN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVu
dCkKK3N0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICAvLyBBdHRlbXB0IHRvIHB1bGwgQ2FjaGVkSW1hZ2UgZnJvbSBlbGVtZW50Ci0gICAg
QVNTRVJUKGVsZW1lbnQpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5y
ZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVy
KCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkgCiAgICAgICAg
IHJldHVybiAwOwogCkBAIC0xMDAxLDE4ICs5OTgsMTggQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRl
R2xvYmFsSERyb3BDb250ZW50KAogICAgIHJldHVybiBtZW1PYmo7CiB9CiAKLXZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwm
IHVybCkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBVUkwmIHVybCkKIHsKICAgICAvLyBTaG92ZSBpbWFnZSBkYXRhIGludG8g
YSBEYXRhT2JqZWN0IGZvciB1c2UgYXMgYSBmaWxlCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZElt
YWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAh
Y2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSkgfHwgIWNh
Y2hlZEltYWdlLT5pc0xvYWRlZCgpKQorICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZElt
YWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQucmVuZGVyZXIoKSkgfHwgIWNhY2hlZEltYWdl
LT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFyZWRCdWZmZXIqIGltYWdl
QnVmZmVyID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIo
KSktPmRhdGEoKTsKKyAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FjaGVkSW1hZ2Ut
PmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC5yZW5kZXJlcigpKS0+ZGF0YSgpOwogICAgIGlmICgh
aW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEhHTE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURl
c2NyaXB0b3IodXJsLnN0cmluZygpLCBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjph
bHRBdHRyKSwgY2FjaGVkSW1hZ2UpOworICAgIEhHTE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9
IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IodXJsLnN0cmluZygpLCBlbGVtZW50Lmdl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6OmFsdEF0dHIpLCBjYWNoZWRJbWFnZSk7CiAgICAgaWYgKCFp
bWFnZUZpbGVEZXNjcmlwdG9yKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1NzAwOCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTEwLTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5kIGFyb3VuZCBEcmFnQ29u
dHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJr
aXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VEcmFnTW90aW9uKToKKyAgICAgICAgKGRyYWdFeGl0ZWRDYWxsYmFjayk6CisgICAgICAgICh3
ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9X
S1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBkcmFnZ2luZ0VudGVyZWQ6XSk6CisgICAgICAg
ICgtW1dLVmlldyBkcmFnZ2luZ1VwZGF0ZWQ6XSk6CisgICAgICAgICgtW1dLVmlldyBkcmFnZ2lu
Z0V4aXRlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRyYWdFbnRlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpkcmFnVXBkYXRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRl
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRy
YWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcpOgorICAgICAgICAo
V2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEcmFnQ2xpZW50OjpzdGFydERyYWcpOgorICAgICAgICAoV2ViS2l0OjpjYWNoZWRJbWFnZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFn
ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorCiAyMDEzLTEw
LTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5
IHRvIGZpeCB0aGUgR1RLKyBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5NCw0MCArMTE5NCw0
MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tbWl0UGFnZVRyYW5zaXRpb25WCiAjZW5kaWYKIAog
I2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi12b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0VudGVyZWQo
RHJhZ0RhdGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSkKK3ZvaWQg
V2ViUGFnZVByb3h5OjpkcmFnRW50ZXJlZChEcmFnRGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmlu
ZyYgZHJhZ1N0b3JhZ2VOYW1lKQogewogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNh
bmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxl
ckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQsIGRyYWdEYXRhLCBkcmFnU3RvcmFn
ZU5hbWUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0
eUFycmF5KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYWdVcGRhdGVkKERyYWdEYXRhKiBk
cmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit2b2lkIFdlYlBhZ2VQcm94
eTo6ZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9y
YWdlTmFtZSkKIHsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlRW1wdHlBcnJheTsKICAgICBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJh
Z0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkLCBkcmFnRGF0YSwgZHJhZ1N0b3JhZ2VOYW1lLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlRW1wdHlBcnJheSk7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkcmFnRXhpdGVkKERyYWdEYXRhKiBkcmFnRGF0YSwgY29u
c3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRl
ZChEcmFnRGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lKQogewog
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAg
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0
eUFycmF5OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFj
dGlvbkV4aXRlZCwgZHJhZ0RhdGEsIGRyYWdTdG9yYWdlTmFtZSwgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZUVtcHR5QXJyYXkpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6cGVyZm9ybURyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRy
YWdTdG9yYWdlTmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJv
eEV4dGVuc2lvbnNGb3JVcGxvYWQpCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWcoRHJh
Z0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpCiB7
CiAgICAgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uUGVy
Zm9ybURyYWcsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5hbWUsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24s
IERyYWdEYXRhKiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2Fk
KQordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29u
dHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBk
cmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRi
b3hFeHRlbnNpb25zRm9yVXBsb2FkKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm47CiAjaWYgUExBVEZPUk0oR1RLKQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgKmRyYWdEYXRhKSwg
bV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9y
bURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEpLCBtX3BhZ2VJRCk7CiAjZWxz
ZQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250
cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRh
LT5nbG9iYWxQb3NpdGlvbigpLCBkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNr
KCksIGRyYWdTdG9yYWdlTmFtZSwgZHJhZ0RhdGEtPmZsYWdzKCksIHNhbmRib3hFeHRlbnNpb25I
YW5kbGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKSwgbV9wYWdlSUQpOworICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9u
KGFjdGlvbiwgZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRp
b24oKSwgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRyYWdTdG9yYWdl
TmFtZSwgZHJhZ0RhdGEuZmxhZ3MoKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4
dGVuc2lvbnNGb3JVcGxvYWQpLCBtX3BhZ2VJRCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTU3MDA0KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NzQsMTAgKzU3NCwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAgICAK
ICAgICAvLyBEcmFnIGFuZCBkcm9wIHN1cHBvcnQuCi0gICAgdm9pZCBkcmFnRW50ZXJlZChXZWJD
b3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkp
OwotICAgIHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcm
IGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKLSAgICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29y
ZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsK
LSAgICB2b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRyYWdEYXRhKiwgY29uc3QgU3RyaW5nJiBk
cmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CisgICAgdm9pZCBkcmFnRW50ZXJlZChXZWJD
b3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkp
OworICAgIHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcm
IGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAgICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29y
ZTo6RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsK
KyAgICB2b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRyYWdEYXRhJiwgY29uc3QgU3RyaW5nJiBk
cmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAKICAgICB2b2lkIGRpZFBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihXZWJDb3JlOjpEcmFnU2Vzc2lvbik7CiAgICAgdm9pZCBkcmFnRW5k
ZWQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbik7CkBAIC0xMDE1
LDcgKzEwMTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVhckxvYWREZXBlbmRlbnRDYWxs
YmFja3MoKTsKIAotICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250
cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3Jh
Z2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSYpOworICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKERyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0cmlu
ZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOwogCiAgICAgdm9pZCB1cGRhdGVCYWNr
aW5nU3RvcmVEaXNjYXJkYWJsZVN0YXRlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAJKHJldmlzaW9u
IDE1NzAwNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDcgKzcyMyw3IEBAIHN0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWMKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRh
dGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdl
dCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRl
eHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVBy
b3h5LT5yZXNldERyYWdPcGVyYXRpb24oKTsKLSAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVBy
b3h5LT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdl
UHJveHktPmRyYWdFbnRlcmVkKGRyYWdEYXRhKTsKICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlv
biA9IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9u
OwogICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtE
cmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogfQpAQCAtNzY3LDEzICs3NjcsMTMgQEAgc3Rh
dGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ01vdAogICAgICAgICByZXR1cm4gVFJV
RTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0
V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9u
VG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsK
LSAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEp
OworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdVcGRhdGVkKGRyYWdEYXRh
KTsKICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdl
UHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uOwogICAgIGdka19kcmFnX3N0YXR1cyhjb250
ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUp
OwogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2so
R3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdEYXRhKiBkcmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQp
CitzdGF0aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdE
YXRhJiBkcmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQpCiB7CiAgICAgLy8gRG9uJ3QgY2FsbCBk
cmFnRXhpdGVkIGlmIHdlIGhhdmUganVzdCByZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRo
aXMKICAgICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8g
dGhlIHZpZXcuCkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZp
ZXdCYXNlRHJhZ0RybwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9u
LCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtE
cmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29u
dGV4dCkpKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwogICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQ7Ci0gICAg
d2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhLCBTdHJp
bmcoKSwgaGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkKTsKKyAgICB3ZWJWaWV3QmFz
ZS0+cHJpdi0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZyhkcmFnRGF0YSwgU3RyaW5nKCksIGhhbmRs
ZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRl
eHQsIFRSVUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDE1NzAwNCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMTc3Myw3ICsxNzczLDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50
ZXJlZDooaWQgPAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBn
bG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZv
XSk7CiAKICAgICBfZGF0YS0+X3BhZ2UtPnJlc2V0RHJhZ09wZXJhdGlvbigpOwotICAgIF9kYXRh
LT5fcGFnZS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bh
c3RlYm9hcmRdIG5hbWVdKTsKKyAgICBfZGF0YS0+X3BhZ2UtPmRyYWdFbnRlcmVkKGRyYWdEYXRh
LCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKICAgICByZXR1cm4g
TlNEcmFnT3BlcmF0aW9uQ29weTsKIH0KIApAQCAtMTc4Miw3ICsxNzgyLDcgQEAgLSAoTlNEcmFn
T3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAogICAgIEludFBvaW50IGNsaWVudChbc2Vs
ZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpu
aWxdKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRy
YWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0
aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgX2RhdGEtPl9wYWdlLT5kcmFnVXBkYXRlZCgm
ZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAg
IF9kYXRhLT5fcGFnZS0+ZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdn
aW5nUGFzdGVib2FyZF0gbmFtZV0pOwogICAgIAogICAgIFdlYkNvcmU6OkRyYWdTZXNzaW9uIGRy
YWdTZXNzaW9uID0gX2RhdGEtPl9wYWdlLT5kcmFnU2Vzc2lvbigpOwogICAgIE5TSW50ZWdlciBu
dW1iZXJPZlZhbGlkSXRlbXNGb3JEcm9wID0gZHJhZ1Nlc3Npb24ubnVtYmVyT2ZJdGVtc1RvQmVB
Y2NlcHRlZDsKQEAgLTE4MDMsNyArMTgwMyw3IEBAIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlk
IDxOU0RyYWdnaW5nSW4KICAgICBJbnRQb2ludCBjbGllbnQoW3NlbGYgY29udmVydFBvaW50Oltk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0gZnJvbVZpZXc6bmlsXSk7CiAgICAgSW50UG9p
bnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtz
ZWxmIHdpbmRvd10pKTsKICAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVu
dCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdn
aW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5n
SW5mb10pOwotICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEsIFtbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIF9kYXRhLT5fcGFnZS0+ZHJh
Z0V4aXRlZChkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1l
XSk7CiAgICAgX2RhdGEtPl9wYWdlLT5yZXNldERyYWdPcGVyYXRpb24oKTsKIH0KIApAQCAtMTg2
Nyw3ICsxODY3LDcgQEAgLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwog
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxv
YWQ7CiAgICAgY3JlYXRlU2FuZGJveEV4dGVuc2lvbnNGb3JGaWxlVXBsb2FkKFtkcmFnZ2luZ0lu
Zm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAKLSAg
ICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4
dGVuc2lvbkZvclVwbG9hZCk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZyhkcmFnRGF0
YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSwgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAKICAgICByZXR1cm4gWUVT
OwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJE
cmFnQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCShyZXZpc2lvbiAxNTcwMDQpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURy
YWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0
YSopCit2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJikKIHsKICAgICBpZiAoYWN0
aW9uID09IERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQpCiAgICAgICAgIG1fcGFnZS0+d2lsbFBl
cmZvcm1Mb2FkRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCk7CkBAIC00MiwyMiArNDIsMjIgQEAgdm9p
ZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aQogICAgICAgICBtX3BhZ2UtPm1h
eVBlcmZvcm1VcGxvYWREcmFnRGVzdGluYXRpb25BY3Rpb24oKTsgLy8gVXBsb2FkIGNhbiBoYXBw
ZW4gZnJvbSBhIGRyb3AgZXZlbnQgaGFuZGxlciwgc28gd2Ugc2hvdWxkIHByZXBhcmUgZWFybHku
CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERy
YWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKikKK3ZvaWQgV2ViRHJh
Z0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNv
bnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJikKIHsKIH0KIAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IFdlYkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKK0RyYWdEZXN0aW5h
dGlvbkFjdGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpCiB7
CiAgICAgcmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKIH0KIAotRHJhZ1NvdXJjZUFj
dGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IElu
dFBvaW50JiAvKndpbmRvd1BvaW50Ki8pCitEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6
OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKQogewogICAgIHJl
dHVybiBEcmFnU291cmNlQWN0aW9uQW55OwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBM
QVRGT1JNKEdUSykKLXZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwg
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9v
bCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYsIEZyYW1lJiwgYm9vbCkKIHsKIH0K
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJEcmFnQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MiwxNSArNDIsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29y
ZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSopIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJh
Z1NvdXJjZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9h
cmQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlv
biBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFn
RGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNl
QWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KSBPVkVSUklERTsKIAotICAgIHZpcnR1
YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQ
b3MsIFdlYkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9
IGZhbHNlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRy
YWdJbWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJD
b3JlOjpGcmFtZSYsIGJvb2wgbGlua0RyYWcgPSBmYWxzZSkgT1ZFUlJJREU7CiAKICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBET01FbGVtZW50KiwgTlNVUkwqLCBOU1N0cmluZyos
IFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpFbGVt
ZW50JiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RnJhbWUq
KSBPVkVSUklERTsKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVz
dHJveWVkKCkgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNw
cAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcg
KzU2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZQogICAgIHJl
dHVybiBiaXRtYXAucmVsZWFzZSgpOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJh
ZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24s
IGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZy
YW1lKiwgYm9vbCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBk
cmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQm
IGdsb2JhbFBvc2l0aW9uLCBDbGlwYm9hcmQmIGNsaXBib2FyZCwgRnJhbWUmLCBib29sKQogewog
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRDYWlyb1N1cmZhY2VU
b1NoYXJlYWJsZUJpdG1hcChkcmFnSW1hZ2UpOwogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZTsKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWco
RHJhZ0ltYWdlUgogICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2Jq
ZWN0ID0gY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwotICAgIERyYWdEYXRh
IGRyYWdEYXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlv
biwgY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7CisgICAgUmVmUHRyPERhdGFPYmplY3RH
dGs+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAg
ICBEcmFnRGF0YSBkcmFnRGF0YShkYXRhT2JqZWN0LmdldCgpLCBjbGllbnRQb3NpdGlvbiwgZ2xv
YmFsUG9zaXRpb24sIGNsaXBib2FyZC5zb3VyY2VPcGVyYXRpb24oKSk7CiAgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkRyYWdDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkocmV2aXNpb24gMTU3
MDA0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
RHJhZ0NsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsMjIgKzc2LDIyIEBAIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmUKICAgICByZXR1cm4gYml0bWFwLnJl
bGVhc2UoKTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoUmV0YWluUHRyPE5T
SW1hZ2U+IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFBvaW50JiwgQ2xp
cGJvYXJkKiwgRnJhbWUqIGZyYW1lLCBib29sIGxpbmtEcmFnKQordm9pZCBXZWJEcmFnQ2xpZW50
OjpzdGFydERyYWcoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmIGZyYW1lLCBib29sIGxpbmtE
cmFnKQogewogICAgIEludFNpemUgYml0bWFwU2l6ZShbaW1hZ2UuZ2V0KCkgc2l6ZV0pOwotICAg
IGJpdG1hcFNpemUuc2NhbGUoZnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Cisg
ICAgYml0bWFwU2l6ZS5zY2FsZShmcmFtZS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwog
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRJbWFnZVRvQml0bWFw
KGltYWdlLmdldCgpLCBiaXRtYXBTaXplKTsKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7CiAgICAgaWYgKCFiaXRtYXAgfHwgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTZWVtcyB0aGlzIG1lc3NhZ2Ugc2hv
dWxkIGJlIG5hbWVkIFN0YXJ0RHJhZywgbm90IFNldERyYWdJbWFnZS4KLSAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RHJhZ0ltYWdlKGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzVG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxpbmtEcmFnKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldERyYWdJbWFnZShmcmFtZS52aWV3KCktPmNv
bnRlbnRzVG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxpbmtEcmFnKSk7CiB9CiAKLXN0YXRpYyBX
ZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3N0YXRp
YyBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsK
LSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVySW1h
Z2UoKSkKQEAgLTEwMiwyOSArMTAyLDI3IEBAIHN0YXRpYyBXZWJDb3JlOjpDYWNoZWRJbWFnZSog
Y2FjaGVkSW1hZ2UKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERP
TUVsZW1lbnQgKmVsZW1lbnQsIE5TVVJMICpVUkwsIE5TU3RyaW5nICp0aXRsZSwgV2ViQ29yZTo6
RnJhbWUqKQordm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7
CiAgICAgQVNTRVJUKHBhc3RlYm9hcmROYW1lID09IFN0cmluZyhOU0RyYWdQYm9hcmQpKTsKIAot
ICAgIEVsZW1lbnQqIGNvcmVFbGVtZW50ID0gY29yZShlbGVtZW50KTsKKyAgICBXZWJDb3JlOjpD
YWNoZWRJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZShlbGVtZW50KTsKIAotICAgIFdlYkNvcmU6
OkNhY2hlZEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlKGNvcmVFbGVtZW50KTsKLQotICAgIE5T
U3RyaW5nICpleHRlbnNpb24gPSBAIiI7CisgICAgU3RyaW5nIGV4dGVuc2lvbjsKICAgICBpZiAo
aW1hZ2UpIHsKICAgICAgICAgZXh0ZW5zaW9uID0gaW1hZ2UtPmltYWdlKCktPmZpbGVuYW1lRXh0
ZW5zaW9uKCk7Ci0gICAgICAgIGlmICghW2V4dGVuc2lvbiBsZW5ndGhdKQorICAgICAgICBpZiAo
ZXh0ZW5zaW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoIVt0aXRsZSBsZW5ndGhdKSB7Ci0gICAgICAgIHRpdGxlID0gW1tVUkwgcGF0aF0gbGFzdFBh
dGhDb21wb25lbnRdOwotICAgICAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKQotICAgICAgICAgICAg
dGl0bGUgPSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAgIFN0cmluZyB0aXRsZSA9
IGxhYmVsOworICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdGl0bGUgPSB1cmwu
bGFzdFBhdGhDb21wb25lbnQoKTsKKyAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHRpdGxlID0gWyhOU1VSTCAqKXVybCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKICAg
ICB9CiAKLSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFy
Y2hpdmU6OmNyZWF0ZShjb3JlRWxlbWVudCk7CisgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+
IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoJmVsZW1lbnQpOwogCiAgICAgTlNV
UkxSZXNwb25zZSAqcmVzcG9uc2UgPSBpbWFnZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNlKCk7
CiAgICAgCkBAIC0xNDYsNyArMTQ0LDcgQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5k
V3JpdGVEcmFnSQogICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1
ZmZlci0+ZGF0YSgpLCBhcmNoaXZlU2l6ZSk7CiAgICAgICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+
Y3JlYXRlSGFuZGxlKGFyY2hpdmVIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOyAgICAg
ICAgICAgIAogICAgIH0KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2V0UHJvbWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBT
dHJpbmcoW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIFN0cmluZyhleHRlbnNpb24pLCBT
dHJpbmcodGl0bGUpLCBTdHJpbmcoW1tyZXNwb25zZSBVUkxdIGFic29sdXRlU3RyaW5nXSksIFN0
cmluZyhbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddKSwgYXJjaGl2ZUhhbmRsZSwgYXJjaGl2
ZVNpemUpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0UHJv
bWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBTdHJpbmco
W3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIGV4dGVuc2lvbiwgdGl0bGUsIFN0cmluZyhb
W3Jlc3BvbnNlIFVSTF0gYWJzb2x1dGVTdHJpbmddKSwgU3RyaW5nKFsoTlNVUkwgKil1cmwgX3dl
Yl91c2VyVmlzaWJsZVN0cmluZ10pLCBhcmNoaXZlSGFuZGxlLCBhcmNoaXZlU2l6ZSkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0
MCwxOSArMjU0MCwxOSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
CiAKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25F
bnRlcmVkOgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQo
JmRyYWdEYXRhKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0Vu
dGVyZWQoZHJhZ0RhdGEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29udHJv
bGxlckFjdGlvblVwZGF0ZWQ6Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5k
cmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNl
IERyYWdDb250cm9sbGVyQWN0aW9uRXhpdGVkOgotICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9s
bGVyKCkuZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9s
bGVyKCkuZHJhZ0V4aXRlZChkcmFnRGF0YSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBE
cmFnQ29udHJvbGxlckFjdGlvblBlcmZvcm1EcmFnOiB7Ci0gICAgICAgIG1fcGFnZS0+ZHJhZ0Nv
bnRyb2xsZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdD
b250cm9sbGVyKCkucGVyZm9ybURyYWcoZHJhZ0RhdGEpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTI1NzUsMTUgKzI1NzUsMTUgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3RpbwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdTdG9yYWdlTmFtZSwgY2xpZW50
UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihkcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2spLCBzdGF0aWNfY2FzdDxEcmFnQXBwbGljYXRpb25GbGFn
cz4oZmxhZ3MpKTsKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgRHJhZ0NvbnRyb2xs
ZXJBY3Rpb25FbnRlcmVkOgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJh
Z0VudGVyZWQoJmRyYWdEYXRhKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVy
KCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBE
cmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQ6Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQ6Ci0gICAgICAgIG1f
cGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIG1f
cGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVkKGRyYWdEYXRhKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZzog
ewpAQCAtMjU5NSw3ICsyNTk1LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xs
ZXJBY3RpbwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ0Ryb3BFeHRlbnNpb25zRm9yRmlsZVVw
bG9hZC5hcHBlbmQoZXh0ZW5zaW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fcGFnZS0+ZHJh
Z0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRy
YWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoZHJhZ0RhdGEpOwogCiAgICAgICAgIC8vIElmIHdl
IHN0YXJ0ZWQgbG9hZGluZyBhIGxvY2FsIGZpbGUsIHRoZSBzYW5kYm94IGV4dGVuc2lvbiB0cmFj
a2VyIHdvdWxkIGhhdmUgYWRvcHRlZCB0aGlzCiAgICAgICAgIC8vIHBlbmRpbmcgZHJvcCBzYW5k
Ym94IGV4dGVuc2lvbi4gSWYgbm90LCB3ZSdsbCBwbGF5IGl0IHNhZmUgYW5kIGNsZWFyIGl0LgpJ
bmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MDA4KQorKysgU291cmNlL1dlYktpdC9l
ZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMTAtMDYg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBDVFRFOiBVc2UgcmVmZXJl
bmNlcyBpbiBhbmQgYXJvdW5kIERyYWdDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRFZmwu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1EcmFnRGVz
dGluYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6d2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRFZmw6
OmFjdGlvbk1hc2tGb3JEcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRFZmw6OnN0
YXJ0RHJhZyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5oOgorCiAy
MDEzLTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgRnJhbWVQb2xpY3lGdW5jdGlvbiBzaG91bGQgYmUgYW4gc3RkOjpmdW5jdGlvbgpJbmRleDog
U291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5j
cHAJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0RyYWdDbGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNyArMzUsMTcgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEcmFn
Q2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRp
b25BY3Rpb24sIERyYWdEYXRhKikKK3ZvaWQgRHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9y
bURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlw
Ym9hcmQqKQordm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24o
RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQmKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLURyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50RWZs
OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCitEcmFnRGVzdGluYXRpb25BY3Rpb24gRHJh
Z0NsaWVudEVmbDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEmKQogewogICAgIHJldHVybiBE
cmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7CiB9CkBAIC01NSw3ICs1NSw3IEBAIERyYWdTb3VyY2VB
Y3Rpb24gRHJhZ0NsaWVudEVmbDo6ZHJhZ1NvdXIKICAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlv
bkFueTsKIH0KIAotdm9pZCBEcmFnQ2xpZW50RWZsOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBj
b25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29s
KQordm9pZCBEcmFnQ2xpZW50RWZsOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQ
b2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9EcmFnQ2xpZW50RWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5oCShyZXZpc2lvbiAxNTcwMDQpCisrKyBTb3VyY2Uv
V2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50RWZsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDE4ICszNiwxOCBAQAogI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgeworCiBjbGFzcyBEcmFnQ2xpZW50RWZsIDogcHVibGljIFdlYkNvcmU6OkRyYWdD
bGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdE
YXRhKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJD
b3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6
OkNsaXBib2FyZCopOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKik7CisgICAgdmlydHVhbCB2b2lk
IGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZv
cm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBX
ZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3Vy
Y2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0
aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSYpOwogICAg
IHZpcnR1YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0Zv
clBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2ludCk7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50
UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wgbGlua0RyYWcg
PSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wg
bGlua0RyYWcgPSBmYWxzZSk7CiB9OworCiB9CiAKICNlbmRpZiAvLyBEcmFnQ2xpZW50RWZsX2gK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzAwOCkKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEzLTEwLTA2
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVy
ZW5jZXMgaW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3Rr
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURy
YWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjphY3Rpb25NYXNr
Rm9yRHJhZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oOgorICAgICAgICAqIHdlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKGRyYWdFeGl0ZWRDYWxsYmFjayk6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb24pOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2RyYWdfZGF0YV9yZWNlaXZlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9w
KToKKwogMjAxMy0xMC0wNSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCBHVEsgYnVpbGQgZml4IGFmdGVyIHIxNTY5NDYuIFRoZSBmcmFt
ZVBvbGljeUZ1bmN0aW9uIGlzIGFuIGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAJKHJldmlzaW9uIDE1NzAw
NCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNiArNTUsMTYgQEAgRHJhZ0NsaWVudDo6fkRyYWdDbGll
bnQoKQogewogfQogCi12b2lkIERyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKQordm9pZCBEcmFnQ2xpZW50
Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24s
IERyYWdEYXRhJikKIHsKIH0KIAotdm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3Vy
Y2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0YXJ0UG9zLCBDbGlw
Ym9hcmQqKQordm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJh
Z1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0YXJ0UG9zLCBDbGlwYm9hcmQmKQogewog
ICAgIG1fc3RhcnRQb3MgPSBzdGFydFBvczsKIH0KIAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIERy
YWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKK0RyYWdEZXN0aW5hdGlvbkFj
dGlvbiBEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55OwpAQCAt
NzYsMTQgKzc2LDE0IEBAIERyYWdTb3VyY2VBY3Rpb24gRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUEK
ICAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbkFueTsKIH0KIAotdm9pZCBEcmFnQ2xpZW50Ojpz
dGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT3Jp
Z2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFt
ZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit2b2lkIERyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFn
SW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IElu
dFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1lJiBmcmFtZSwgYm9v
bCBsaW5rRHJhZykKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfd2ViX3ZpZXcoa2l0KGZyYW1lKSk7Ci0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+
IGRhdGFPYmplY3QgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KGtp
dCgmZnJhbWUpKTsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCA9IGNsaXBi
b2FyZC5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwogICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlz
dD4gdGFyZ2V0TGlzdCA9IGFkb3B0R1JlZihQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVi
b2FyZEhlbHBlcigpLT50YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0LmdldCgpKSk7
CiAgICAgR093blB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVudF9ldmVu
dCgpKTsKIAotICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4oR1RL
X1dJREdFVChtX3dlYlZpZXcpLCB0YXJnZXRMaXN0LmdldCgpLCBkcmFnT3BlcmF0aW9uVG9HZGtE
cmFnQWN0aW9ucyhjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpKSwgMSwgY3VycmVudEV2ZW50
LmdldCgpKTsKKyAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0a19kcmFnX2JlZ2luKEdU
S19XSURHRVQobV93ZWJWaWV3KSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2Rr
RHJhZ0FjdGlvbnMoY2xpcGJvYXJkLnNvdXJjZU9wZXJhdGlvbigpKSwgMSwgY3VycmVudEV2ZW50
LmdldCgpKTsKICAgICB3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5zdGFydGVkRHJh
Zyhjb250ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKIAogICAgIC8vIEEgZHJhZyBzdGFydGluZyBz
aG91bGQgcHJldmVudCBhIGRvdWJsZS1jbGljayBmcm9tIGhhcHBlbmluZy4gVGhpcyBtaWdodApJ
bmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRH
dGsuaAkocmV2aXNpb24gMTU3MDA0KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyNiArNDAsMjQgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotICAgIGNsYXNzIERyYWdDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6RHJhZ0NsaWVudCB7
Ci0gICAgcHVibGljOgotICAgICAgICBEcmFnQ2xpZW50KFdlYktpdFdlYlZpZXcqKTsKLSAgICAg
ICAgfkRyYWdDbGllbnQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3Jl
OjpEcmFnRGF0YSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNl
QWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiwgV2ViQ29yZTo6Q2xpcGJvYXJkKik7Ci0gICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKik7Ci0K
LSAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rp
b25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiBkcmFn
SW1hZ2UsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBldmVudFBvcywgV2ViQ29yZTo6Q2xpcGJvYXJkKiwgV2ViQ29yZTo6
RnJhbWUqLCBib29sIGxpbmtEcmFnID0gZmFsc2UpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBk
cmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV2ViS2l0
V2ViVmlldyogbV93ZWJWaWV3OwotICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N0YXJ0UG9z
OwotICAgICAgICBXZWJDb3JlOjpEcmFnSWNvbiBtX2RyYWdJY29uOwotICAgIH07CitjbGFzcyBE
cmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgeworcHVibGljOgorICAgIERy
YWdDbGllbnQoV2ViS2l0V2ViVmlldyopOworICAgIH5EcmFnQ2xpZW50KCk7CisKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCB3
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25B
Y3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3Jt
RHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRh
Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rp
b25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiBkcmFnSW1hZ2Us
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBldmVudFBvcywgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6RnJhbWUm
LCBib29sIGxpbmtEcmFnID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIFdlYktpdFdlYlZpZXcq
IG1fd2ViVmlldzsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N0YXJ0UG9zOworICAgIFdlYkNv
cmU6OkRyYWdJY29uIG1fZHJhZ0ljb247Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDE1NzAwNCkKKysr
IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdf
ZGF0YV9nZQogICAgIFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5kcmFnQW5kRHJvcEhl
bHBlci5oYW5kbGVHZXREcmFnRGF0YShjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZvKTsKIH0K
IAotc3RhdGljIHZvaWQgZHJhZ0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFn
RGF0YSogZHJhZ0RhdGEsIGJvb2wgZHJvcEhhcHBlbmVkKQorc3RhdGljIHZvaWQgZHJhZ0V4aXRl
ZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSYgZHJhZ0RhdGEsIGJvb2wgZHJv
cEhhcHBlbmVkKQogewogICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBoYXZlIGp1
c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCiAgICAgLy8gaGFwcGVucyBpbiB0
aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2aWV3LgpAQCAtMTU1Miw3ICsx
NTUyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmFnX21vdAogICAgICAg
ICByZXR1cm4gVFJVRTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0
aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBn
ZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMo
Y29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldykt
PmRyYWdDb250cm9sbGVyKCkuZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAg
RHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigp
LmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNv
bnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGlt
ZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CkBAIC0xNTY2LDcgKzE1NjYsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX3JlCiAgICAgICAgIHJldHVybjsKIAogICAgIERy
YWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRU
b1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0
aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3Bl
cmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0Vu
dGVyZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24g
PSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFbnRlcmVkKGRyYWdEYXRhKS5v
cGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1Np
bmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiB9CiAKQEAgLTE1NzksNyArMTU3
OSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm8KIAogICAgIElu
dFBvaW50IHBvc2l0aW9uKHgsIHkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3Qs
IHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRp
b24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2Fj
dGlvbnMoY29udGV4dCkpKTsKLSAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLnBl
cmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIo
KS5wZXJmb3JtRHJhZyhkcmFnRGF0YSk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQsIFRS
VUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE1NzAwOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTEwLTA2ICBTYW0gV2VpbmlnICA8c2Ft
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5kIGFyb3Vu
ZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OmFj
dGlvbk1hc2tGb3JEcmFnKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3Jt
RHJhZ1NvdXJjZUFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcpOgor
ICAgICAgICAoV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKToKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZG9j
dW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOmZvclR5cGU6aW5Db250ZXh0OnN1YnJlc291cmNl
czpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcg
ZHJhZ2dpbmdFbnRlcmVkOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nVXBkYXRlZDpd
KToKKyAgICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ0V4aXRlZDpdKToKKyAgICAgICAgKC1bV2Vi
VmlldyBwZXJmb3JtRHJhZ09wZXJhdGlvbjpdKToKKwogMjAxMy0xMC0wNSAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIENUVEU6IFRocmVhZCByZWZlcmVuY2VzIHRocm91
Z2ggbWFya3VwLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRy
YWdDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJEcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMg
KzMyLDEzIEBACiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGll
bnQgewogcHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyopOwotICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9u
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCopIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdp
bGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFj
dGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ls
bFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0ZvckRyYWco
V2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRy
b2xsZXJEZXN0cm95ZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdTb3Vy
Y2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgd2luZG93UG9pbnQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWco
V2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1Bvcywg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBX
ZWJDb3JlOjpGcmFtZSosIGJvb2wgbGlua0RyYWcpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwg
RE9NRWxlbWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBXZWJDb3JlOjpGcmFtZSopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1BvcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2
ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wgbGlua0Ry
YWcpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2Uo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViQ29yZTo6RWxlbWVudCYsIGNvbnN0IFdl
YkNvcmU6OlVSTCYsIGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CiBw
cml2YXRlOgogICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHJldmlzaW9uIDE1
NzAwNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShEUkFHX1NV
UFBPUlQpCiAKKyNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViQXJj
aGl2ZS5oIgogI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9ucy5oIgogI2ltcG9ydCAiV2ViRnJhbWUu
aCIKQEAgLTY2LDE0ICs2NywxNCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmdldFRvcEhUTUxWaWV3
KEZyYW1lCiAgICAgcmV0dXJuIChXZWJIVE1MVmlldyopW1traXQoJmZyYW1lLT5wYWdlKCktPm1h
aW5GcmFtZSgpKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiB9CiAKLVdlYkNvcmU6OkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3Jl
OjpEcmFnRGF0YSogZHJhZ0RhdGEpCitXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gV2Vi
RHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRh
KQogewotICAgIHJldHVybiAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKVtbbV93ZWJW
aWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBkcmFnRGVzdGluYXRp
b25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKV07Cisg
ICAgcmV0dXJuIChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24pW1ttX3dlYlZpZXcgX1VJ
RGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IGRyYWdEZXN0aW5hdGlvbkFjdGlv
bk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCldOwogfQogCi12b2lk
IFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6
OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKiBkcmFnRGF0
YSkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24o
V2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEm
IGRyYWdEYXRhKQogewotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJW
aWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbjooV2ViRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKWFjdGlvbiBmb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEtPnBsYXRmb3Jt
RGF0YSgpXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpt
X3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246KFdlYkRyYWdEZXN0aW5h
dGlvbkFjdGlvbilhY3Rpb24gZm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLnBsYXRmb3JtRGF0YSgp
XTsKIH0KIAogCkBAIC04MywyNyArODQsMjMgQEAgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBX
ZWJEcmFnQ2xpZW50OgogICAgIHJldHVybiAoRHJhZ1NvdXJjZUFjdGlvbilbW21fd2ViVmlldyBf
VUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgZHJhZ1NvdXJjZUFjdGlvbk1h
c2tGb3JQb2ludDp2aWV3UG9pbnRdOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJm
b3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGFjdGlvbiwgY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIG1vdXNlRG93blBvaW50LCBXZWJDb3JlOjpDbGlwYm9hcmQq
IGNsaXBib2FyZCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0
aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgbW91c2VEb3duUG9pbnQsIFdlYkNvcmU6OkNsaXBib2FyZCYgY2xpcGJvYXJkKQogewot
ICAgIEFTU0VSVChjbGlwYm9hcmQpOwotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb246KFdlYkRy
YWdTb3VyY2VBY3Rpb24pYWN0aW9uIGZyb21Qb2ludDptb3VzZURvd25Qb2ludCB3aXRoUGFzdGVi
b2FyZDpbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpjbGlwYm9hcmQtPnBhc3RlYm9h
cmQoKS5uYW1lKCldXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
VmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uOihXZWJEcmFnU291cmNl
QWN0aW9uKWFjdGlvbiBmcm9tUG9pbnQ6bW91c2VEb3duUG9pbnQgd2l0aFBhc3RlYm9hcmQ6W05T
UGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1l
KCldXTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRy
YWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGF0LCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENs
aXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit2b2lkIFdl
YkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQ
b2ludCYgYXQsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQs
IEZyYW1lJiBmcmFtZSwgYm9vbCBsaW5rRHJhZykKIHsKLSAgICBpZiAoIWZyYW1lKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKGNsaXBib2FyZCk7Ci0gICAgUmV0YWluUHRyPFdlYkhUTUxW
aWV3PiBodG1sVmlldyA9IChXZWJIVE1MVmlldyopW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9j
dW1lbnRWaWV3XTsKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IGh0bWxWaWV3ID0gKFdlYkhU
TUxWaWV3KilbW2tpdCgmZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICBpZiAo
IVtodG1sVmlldy5nZXQoKSBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgTlNFdmVudCAqZXZlbnQgPSBsaW5rRHJhZyA/IGZyYW1l
LT5ldmVudEhhbmRsZXIoKS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgpIF9tb3Vz
ZURvd25FdmVudF07Ci0gICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRNTFZp
ZXcoZnJhbWUpOworICAgIE5TRXZlbnQgKmV2ZW50ID0gbGlua0RyYWcgPyBmcmFtZS5ldmVudEhh
bmRsZXIoKS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgpIF9tb3VzZURvd25FdmVu
dF07CisgICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRNTFZpZXcoJmZyYW1l
KTsKICAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHRvcFZpZXdQcm90ZWN0b3IgPSB0b3BIVE1M
VmlldzsKICAgICAKICAgICBbdG9wSFRNTFZpZXcgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwotICAg
IE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhO
YW1lOmNsaXBib2FyZC0+cGFzdGVib2FyZCgpLm5hbWUoKV07CisgICAgTlNQYXN0ZWJvYXJkICpw
YXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJvYXJkLnBh
c3RlYm9hcmQoKS5uYW1lKCldOwogCiAgICAgTlNJbWFnZSAqZHJhZ05TSW1hZ2UgPSBkcmFnSW1h
Z2UuZ2V0KCk7CiAgICAgV2ViSFRNTFZpZXcgKnNvdXJjZUhUTUxWaWV3ID0gaHRtbFZpZXcuZ2V0
KCk7CkBAIC0xMjMsMTQgKzEyMCwxMyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhE
cmFnSW1hZ2VSCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiB9CiAKLXZvaWQgV2ViRHJh
Z0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUsIERPTUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0aXRsZSwg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lKSAKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdy
aXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIEVsZW1lbnQmIGVsZW1l
bnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUKHBhc3RlYm9hcmROYW1lKTsKLSAgICBBU1NFUlQoZWxlbWVu
dCk7Ci0gICAgV2ViSFRNTFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsgICAg
ICAKLSAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW2VsZW1lbnQgd2ViQXJjaGl2ZV07CisgICAg
V2ViSFRNTFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsKKyAgICBXZWJBcmNo
aXZlICphcmNoaXZlID0gW2tpdCgmZWxlbWVudCkgd2ViQXJjaGl2ZV07CiAgICAgCi0gICAgW1tO
U1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXSBfd2ViX2RlY2xh
cmVBbmRXcml0ZURyYWdJbWFnZUZvckVsZW1lbnQ6ZWxlbWVudCBVUkw6VVJMIHRpdGxlOnRpdGxl
IGFyY2hpdmU6YXJjaGl2ZSBzb3VyY2U6c291cmNlXTsKKyAgICBbW05TUGFzdGVib2FyZCBwYXN0
ZWJvYXJkV2l0aE5hbWU6cGFzdGVib2FyZE5hbWVdIF93ZWJfZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlRm9yRWxlbWVudDpraXQoJmVsZW1lbnQpIFVSTDp1cmwgdGl0bGU6dGl0bGUgYXJjaGl2ZTph
cmNoaXZlIHNvdXJjZTpzb3VyY2VdOwogfQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdDb250
cm9sbGVyRGVzdHJveWVkKCkgCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0JKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5OCw4ICs5OTgsMTAgQEAgLSAodm9pZClfcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRAogfQogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9u
V2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RS
ZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCi17ICAgCi0gICAgRE9N
RG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCB0ZXh0KS5nZXQoKSk7Cit7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgCisgICAgRE9N
RG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZy
b21UZXh0KCpyYW5nZSwgdGV4dCkuZ2V0KCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxh
Y2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE1
NzAwNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTIwNjUsOCArMjA2NSwxMSBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICop
X2RvY3VtZW50RnJhZ21lCiAgICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNob3JdOwog
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5T
U3RyaW5nUGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KGNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJv
YXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLmdldCgpKTsK
KyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0cmluZ1Bib2FyZFR5cGUpIHsKKyAgICAgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIGtpdChj
cmVhdGVGcmFnbWVudEZyb21UZXh0KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5n
Rm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNh
bE1hcHBpbmddKS5nZXQoKSk7CisgICAgfQogICAgIHJldHVybiBuaWw7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMzMiw3
ICs0MzMyLDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPAogICAg
IEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJ
bnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9u
XSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywg
Y2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8g
ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJh
Z2dpbmdJbmZvXSk7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkuZHJh
Z0VudGVyZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgcmV0dXJuIGNvcmUoc2VsZiktPmRy
YWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpLm9wZXJhdGlvbjsKIH0KIAogLSAo
TlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFn
Z2luZ0luZm8KQEAgLTQzNDQsNyArNDM0NCw3IEBAIC0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2lu
Z1VwZGF0ZWQ6KGlkIDwKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2lu
Z0xvY2F0aW9uXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0lu
Zm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKICAgICBEcmFnRGF0YSBkcmFn
RGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0
aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBh
cHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwotICAgIHJldHVybiBwYWdlLT5kcmFnQ29u
dHJvbGxlcigpLmRyYWdVcGRhdGVkKCZkcmFnRGF0YSkub3BlcmF0aW9uOworICAgIHJldHVybiBw
YWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiB9
CiAKIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJ
bmZvCkBAIC00MzU2LDcgKzQzNTYsNyBAQCAtICh2b2lkKWRyYWdnaW5nRXhpdGVkOihpZCA8TlNE
cmFnZ2luZ0luCiAgICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2Nh
dGlvbl0pOwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRy
YWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEo
ZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4o
W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGlj
YXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKLSAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRy
YWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFeGl0
ZWQoZHJhZ0RhdGEpOwogfQogCiAtIChCT09MKXByZXBhcmVGb3JEcmFnT3BlcmF0aW9uOihpZCA8
TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwpAQCAtNDM2OSw3ICs0MzY5LDcgQEAgLSAoQk9P
TClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogICAgIEludFBvaW50IGNsaWVudChb
ZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xv
YmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkp
OwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0
YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVy
YXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAg
cmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoJmRyYWdEYXRh
KTsKKyAgICByZXR1cm4gY29yZShzZWxmKS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZyhk
cmFnRGF0YSk7CiB9CiAKIC0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50ICopcG9pbnQgZHJh
Z1R5cGVzOihOU1NldCAqKXR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTcw
MDgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNyBAQAorMjAxMy0xMC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIENUVEU6IFVzZSByZWZlcmVuY2VzIGluIGFuZCBhcm91bmQgRHJhZ0NvbnRyb2xsZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjQyNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJEcmFnQ2xpZW50OjphY3Rp
b25NYXNrRm9yRHJhZyk6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdE
ZXN0aW5hdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURy
YWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisKIDIwMTMtMTAtMDQgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGcmFtZVBvbGlj
eUZ1bmN0aW9uIHNob3VsZCBiZSBhbiBzdGQ6OmZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkocmV2aXNpb24g
MTU3MDA0KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDI1ICs2NSwyNSBAQCBXZWJEcmFnQ2xpZW50OjpX
ZWJEcmFnQ2xpZW50KFdlYlZpZXcqIHdlCiAgICAgQVNTRVJUKHdlYlZpZXcpOwogfQogCi1EcmFn
RGVzdGluYXRpb25BY3Rpb24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0Rh
dGEqIGRyYWdEYXRhKQorRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmFjdGlv
bk1hc2tGb3JEcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICBDT01QdHI8SVdlYlVJRGVs
ZWdhdGU+IGRlbGVnYXRlUmVmID0gMDsKICAgICAvL0RlZmF1bHQgYmVoYXZpb3VyIChlZy4gbm8g
ZGVsZWdhdGUsIG9yIGNhbGxiYWNrIG5vdCBpbXBsZW1lbnRlZCkgaXMgdG8gYWxsb3cKICAgICAv
L2FueSBhY3Rpb24KICAgICBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24gbWFzayA9IFdlYkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbkFueTsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxl
Z2F0ZSgmZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPmRyYWdEZXN0aW5hdGlv
bkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0YS0+cGxhdGZvcm1E
YXRhKCksICZtYXNrKTsKKyAgICAgICAgZGVsZWdhdGVSZWYtPmRyYWdEZXN0aW5hdGlvbkFjdGlv
bk1hc2tGb3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSwg
Jm1hc2spOwogCiAgICAgcmV0dXJuIChEcmFnRGVzdGluYXRpb25BY3Rpb24pbWFzazsKIH0KIAot
dm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFn
RGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEpCit2b2lkIFdlYkRy
YWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlv
bkFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICAvL0RlZmF1bHQgZGVs
ZWdhdGUgZm9yIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGhhcyBubyBzaWRlIGVm
ZmVjdHMKICAgICAvL3NvIHdlIGp1c3QgY2FsbCB0aGUgZGVsZWdhdGUsIGFuZCBkb24ndCB3b3Jy
eSBhYm91dCB3aGV0aGVyIGl0J3MgaW1wbGVtZW50ZWQKICAgICBDT01QdHI8SVdlYlVJRGVsZWdh
dGU+IGRlbGVnYXRlUmVmID0gMDsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxl
Z2F0ZSgmZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKG1fd2ViVmlldywgKFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbilh
Y3Rpb24sIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgIGRlbGVnYXRlUmVmLT53
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihtX3dlYlZpZXcsIChXZWJEcmFnRGVzdGlu
YXRpb25BY3Rpb24pYWN0aW9uLCBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CiB9CiAKIERyYWdT
b3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCkBAIC05NiwyNyArOTYsMjcgQEAgRHJhZ1NvdXJj
ZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cgogICAgIHJldHVybiAoRHJhZ1NvdXJjZUFj
dGlvbilhY3Rpb247CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291
cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBJbnRQb2ludCYgaW50UG9p
bnQsIENsaXBib2FyZCogY2xpcGJvYXJkKQordm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9y
bURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24sIGNvbnN0IEludFBvaW50
JiBpbnRQb2ludCwgQ2xpcGJvYXJkJiBjbGlwYm9hcmQpCiB7CiAgICAgQ09NUHRyPElXZWJVSURl
bGVnYXRlPiB1aURlbGVnYXRlOwogICAgIGlmICghU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxl
Z2F0ZSgmdWlEZWxlZ2F0ZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQT0lOVCBwb2ludCA9
IGludFBvaW50OwotICAgIENPTVB0cjxJRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IGNsaXBib2Fy
ZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBDT01QdHI8SURhdGFPYmplY3Q+IGRh
dGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKIAogICAgIENP
TVB0cjxJRGF0YU9iamVjdD4gbmV3RGF0YU9iamVjdDsKICAgICBIUkVTVUxUIHJlc3VsdCA9IHVp
RGVsZWdhdGUtPndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihtX3dlYlZpZXcsIHN0YXRpY19j
YXN0PFdlYkRyYWdTb3VyY2VBY3Rpb24+KGFjdGlvbiksICZwb2ludCwgZGF0YU9iamVjdC5nZXQo
KSwgJm5ld0RhdGFPYmplY3QpOwogICAgIGlmIChyZXN1bHQgPT0gU19PSyAmJiBuZXdEYXRhT2Jq
ZWN0ICE9IGRhdGFPYmplY3QpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVib2FyZCY+KGNsaXBi
b2FyZC0+cGFzdGVib2FyZCgpKS5zZXRFeHRlcm5hbERhdGFPYmplY3QobmV3RGF0YU9iamVjdC5n
ZXQoKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVib2FyZCY+KGNsaXBib2FyZC5wYXN0ZWJv
YXJkKCkpLnNldEV4dGVybmFsRGF0YU9iamVjdChuZXdEYXRhT2JqZWN0LmdldCgpKTsKIH0KIAot
dm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJ
bnRQb2ludCYgaW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnUG9pbnQsIENsaXBib2Fy
ZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgaXNMaW5rKQordm9pZCBXZWJEcmFnQ2xp
ZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaW1hZ2VP
cmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnUG9pbnQsIENsaXBib2FyZCYgY2xpcGJvYXJkLCBG
cmFtZSYgZnJhbWUsIGJvb2wgaXNMaW5rKQogewogICAgIC8vRklYTUU6IEFsbG93IFVJRGVsZWdh
dGUgdG8gb3ZlcnJpZGUgYmVoYXZpb3VyIDxyZGFyOi8vcHJvYmxlbS81MDE1OTUzPgogCiAgICAg
Ly9XZSBsaWJlcmFsbHkgcHJvdGVjdCBldmVyeXRoaW5nLCB0byBwcm90ZWN0IGFnYWluc3QgYSBs
b2FkIG9jY3VycmluZyBtaWQtZHJhZwotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWVQcm90ZWN0b3Ig
PSBmcmFtZTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lUHJvdGVjdG9yID0gJmZyYW1lOwogICAg
IENPTVB0cjxJRHJhZ1NvdXJjZUhlbHBlcj4gaGVscGVyOwogICAgIENPTVB0cjxJRGF0YU9iamVj
dD4gZGF0YU9iamVjdDsKICAgICBDT01QdHI8V2ViVmlldz4gdmlld1Byb3RlY3RvciA9IG1fd2Vi
VmlldzsKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhE
cmFnSW1hZ2VSCiAgICAgaWYgKEZBSUxFRChXZWJEcm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZSht
X3dlYlZpZXcsICZzb3VyY2UpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGF0YU9iamVjdCA9
IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBkYXRhT2JqZWN0ID0g
Y2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CiAgICAgaWYgKHNvdXJjZSAmJiAo
aW1hZ2UgfHwgZGF0YU9iamVjdCkpIHsKICAgICAgICAgaWYgKGltYWdlKSB7CiAgICAgICAgICAg
ICBpZihTVUNDRUVERUQoQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9EcmFnRHJvcEhlbHBlciwgMCwg
Q0xTQ1RYX0lOUFJPQ19TRVJWRVIsCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBXZWJEcmFnQ2xp
ZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUgogICAgICAgICAgICAgZWxzZSBpZiAoZWZmZWN0ICYg
RFJPUEVGRkVDVF9NT1ZFKQogICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IERyYWdPcGVyYXRp
b25Nb3ZlOwogICAgICAgICB9Ci0gICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kcmFnU291
cmNlRW5kZWRBdChnZW5lcmF0ZU1vdXNlRXZlbnQobV93ZWJWaWV3LCBmYWxzZSksIG9wZXJhdGlv
bik7CisgICAgICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRyYWdTb3VyY2VFbmRlZEF0KGdlbmVy
YXRlTW91c2VFdmVudChtX3dlYlZpZXcsIGZhbHNlKSwgb3BlcmF0aW9uKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xp
ZW50LmgJKHJldmlzaW9uIDE1NzAwNCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE0IEBAIGNs
YXNzIFdlYlZpZXc7CiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdD
bGllbnQgewogcHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyopOwotICAgIHZpcnR1
YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNv
cmU6OkRyYWdEYXRhKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0Rh
dGEqKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAg
IHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFn
KFdlYkNvcmU6OkRyYWdEYXRhJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0
aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
KTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6
OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xp
cGJvYXJkKik7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1hZ2VS
ZWYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBX
ZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wpOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQ
ZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpOworICAgIHZpcnR1YWwgdm9p
ZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29y
ZTo6RnJhbWUmLCBib29sKTsKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CiB9
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213567</attachid>
            <date>2013-10-06 23:55:12 -0700</date>
            <delta_ts>2013-10-07 10:21:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122427-20131006235511.patch</filename>
            <type>text/plain</type>
            <size>134687</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTA2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4g
YW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgdG8gaW5kaWNhdGUgbm9uLW51bGxuZXNz
IG9mIERyYWdDb250cm9sbGVyIHJlbGF0ZWQKKyAgICAgICAgb2JqZWN0cy4KKwogMjAxMy0xMC0w
NiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEdl
bmVyYXRlIHRvQ1NTRm9vVmFsdWUoKSBmb3IgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSwgQ1NTQ3ViaWNC
ZXppZXJUaW1pbmdGdW5jdGlvblZhbHVlLCBDU1NTdGVwc1RpbWluZ0Z1bmN0aW9uVmFsdWUgYW5k
IENTU1VuaWNvZGVSYW5nZVZhbHVlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24g
MTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkK
QEAgLTc0Miw3ICs3NDIsNyBAQCBfX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQy
NmNhCiBfX1pON1dlYkNvcmUyMlN0b3JhZ2VFdmVudERpc3BhdGNoZXIzNGRpc3BhdGNoTG9jYWxT
dG9yYWdlRXZlbnRzVG9GcmFtZXNFUk5TXzlQYWdlR3JvdXBFUktOM1dURjZWZWN0b3JJTlMzXzZS
ZWZQdHJJTlNfNUZyYW1lRUVFTG0wRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRVJLTlMzXzZTdHJp
bmdFU0VfU0VfU0VfUE5TXzE0U2VjdXJpdHlPcmlnaW5FCiBfX1pON1dlYkNvcmUyMlVSTFdpdGhV
c2VyVHlwZWRTdHJpbmdFUDhOU1N0cmluZ1A1TlNVUkwKIF9fWk43V2ViQ29yZTIyY291bnRlclZh
bHVlRm9yRWxlbWVudEVQTlNfN0VsZW1lbnRFCi1fX1pON1dlYkNvcmUyMmNyZWF0ZUZyYWdtZW50
RnJvbVRleHRFUE5TXzVSYW5nZUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTIyY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dEVSTlNfNVJhbmdlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MjJleHRlcm5hbFJlcHJlc2VudGF0aW9uRVBOU181RnJhbWVFagogX19aTjdXZWJDb3JlMjJleHRl
cm5hbFJlcHJlc2VudGF0aW9uRVBOU183RWxlbWVudEVqCiBfX1pON1dlYkNvcmUyMnN5c3RlbU1h
cmtldGluZ1ZlcnNpb25FdgpAQCAtMjQ1NiwxNSArMjQ1NiwxNSBAQCBfX1pOSzdXZWJDb3JlMTJT
aGFyZWRCdWZmZXIzNm1lbW9yeU1hcHBlCiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogX19a
TjdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2RyYWdTb3VyY2VFbmRlZEF0RVJLTlNfMThQbGF0Zm9y
bU1vdXNlRXZlbnRFTlNfMTNEcmFnT3BlcmF0aW9uRQotX19aTks3V2ViQ29yZTEyRXZlbnRIYW5k
bGVyMTdldmVudE1heVN0YXJ0RHJhZ0VSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQotX19aTjdX
ZWJDb3JlMTREcmFnQ29udHJvbGxlcjEwZHJhZ0V4aXRlZEVQTlNfOERyYWdEYXRhRQotX19aTjdX
ZWJDb3JlMTREcmFnQ29udHJvbGxlcjExZHJhZ0VudGVyZWRFUE5TXzhEcmFnRGF0YUUKLV9fWk43
V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMWRyYWdVcGRhdGVkRVBOU184RHJhZ0RhdGFFCi1fX1pO
N1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTFwZXJmb3JtRHJhZ0VQTlNfOERyYWdEYXRhRQorX19a
TjdXZWJDb3JlMTREcmFnQ29udHJvbGxlcjEwZHJhZ0V4aXRlZEVSTlNfOERyYWdEYXRhRQorX19a
TjdXZWJDb3JlMTREcmFnQ29udHJvbGxlcjExZHJhZ0VudGVyZWRFUk5TXzhEcmFnRGF0YUUKK19f
Wk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMWRyYWdVcGRhdGVkRVJOU184RHJhZ0RhdGFFCitf
X1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTFwZXJmb3JtRHJhZ0VSTlNfOERyYWdEYXRhRQog
X19aTjdXZWJDb3JlMTREcmFnQ29udHJvbGxlcjE0cGxhY2VEcmFnQ2FyZXRFUktOU184SW50UG9p
bnRFCiBfX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyOWRyYWdFbmRlZEV2CiBfX1pON1dlYkNv
cmU4RHJhZ0RhdGFDMUVQMTFvYmpjX29iamVjdFJLTlNfOEludFBvaW50RVM1X05TXzEzRHJhZ09w
ZXJhdGlvbkVOU18yMERyYWdBcHBsaWNhdGlvbkZsYWdzRQogX19aTjdXZWJDb3JlOERyYWdEYXRh
QzFFUktOM1dURjZTdHJpbmdFUktOU184SW50UG9pbnRFUzdfTlNfMTNEcmFnT3BlcmF0aW9uRU5T
XzIwRHJhZ0FwcGxpY2F0aW9uRmxhZ3NFCitfX1pOSzdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2V2
ZW50TWF5U3RhcnREcmFnRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiAjZW5kaWYKIAogI2lm
IEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9vYmpjL0RPTUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
b2JqYy9ET01IVE1MLm1tCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL0RPTUhUTUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgLSAo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RgogLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7
CiAgICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgaXMgbm90IGEgY29udGV4dHVhbCBmcmFnbWVudCwg
aXQgd29uJ3QgaGFuZGxlIHdoaXRlc3BhY2UgcHJvcGVybHkuCi0gICAgcmV0dXJuIGtpdChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KGNvcmUoc2VsZiktPmNyZWF0ZVJhbmdlKCkuZ2V0KCksIHRleHQp
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvcmUoc2Vs
ZiktPmNyZWF0ZVJhbmdlKCkuZ2V0KCksIHRleHQpLmdldCgpKTsKIH0KIAogQGVuZApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDAsOCArNDQwLDEx
IEBAIFN0cmluZyBFZGl0b3I6OnBsYWluVGV4dEZyb21QYXN0ZWJvYXJkKGMKIHZvaWQgRWRpdG9y
OjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIGJvb2wgYWxsb3dQ
bGFpblRleHQpCiB7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsK
KyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisKICAgICBib29sIGNob3NlUGxhaW5U
ZXh0OwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQt
PmRvY3VtZW50RnJhZ21lbnQoJm1fZnJhbWUsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQ
bGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3Rl
Ym9hcmQtPmRvY3VtZW50RnJhZ21lbnQobV9mcmFtZSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCwg
Y2hvc2VQbGFpblRleHQpOwogICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVu
dChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCiAgICAgICAgIHBh
c3RlQXNGcmFnbWVudChmcmFnbWVudCwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBh
c3RlYm9hcmQpLCBjaG9zZVBsYWluVGV4dCk7CiB9CkBAIC00OTMsNyArNDk2LDExIEBAIHZvaWQg
RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW4KIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0UmVwbGFj
ZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKQogewotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJh
Z21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHRleHQp
LCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCB0cnVlKTsgCisgICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoKnJhbmdlLCB0ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwg
dHJ1ZSk7CiB9CiAKIFBhc3NSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCkBA
IC0xMDg3LDcgKzEwOTQsNyBAQCB2b2lkIEVkaXRvcjo6Y29weSgpCiAjaWYgKFBMQVRGT1JNKE1B
QykgJiYgIVBMQVRGT1JNKElPUykpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAgICAgIHdyaXRl
SW1hZ2VUb1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLCAq
aW1hZ2VFbGVtZW50LCBkb2N1bWVudCgpLnVybCgpLCBkb2N1bWVudCgpLnRpdGxlKCkpOwogI2Vs
c2UKLSAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0
ZUltYWdlKGltYWdlRWxlbWVudCwgZG9jdW1lbnQoKS51cmwoKSwgZG9jdW1lbnQoKS50aXRsZSgp
KTsKKyAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0
ZUltYWdlKCppbWFnZUVsZW1lbnQsIGRvY3VtZW50KCkudXJsKCksIGRvY3VtZW50KCkudGl0bGUo
KSk7CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIHsKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhUExB
VEZPUk0oSU9TKSkgfHwgUExBVEZPUk0oRUZMKQpAQCAtMTE5Niw3ICsxMjAzLDcgQEAgdm9pZCBF
ZGl0b3I6OmNvcHlJbWFnZShjb25zdCBIaXRUZXN0UmVzdQogI2lmIFBMQVRGT1JNKE1BQykgfHwg
UExBVEZPUk0oRUZMKQogICAgIHdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLCAqZWxlbWVudCwgdXJsLCByZXN1bHQuYWx0RGlzcGxheVN0
cmluZygpKTsKICNlbHNlCi0gICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkt
PndyaXRlSW1hZ2UoZWxlbWVudCwgdXJsLCByZXN1bHQuYWx0RGlzcGxheVN0cmluZygpKTsKKyAg
ICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVJbWFnZSgqZWxlbWVu
dCwgdXJsLCByZXN1bHQuYWx0RGlzcGxheVN0cmluZygpKTsKICNlbmRpZgogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsMTEgQEAgUmVw
bGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudAogICAgIGlmICh0ZXh0ICE9IGV2
dC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPnJlbmRlcmVySXNSaWNobHlFZGl0YWJsZSgpKSB7
CiAgICAgICAgIHJlc3RvcmVBbmRSZW1vdmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhv
bGRlci5nZXQoKSk7CiAKLSAgICAgICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGV2dC0+dGV4dCgpKTsKKyAg
ICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1f
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgZXZ0LT50ZXh0KCkpOwog
ICAgICAgICBpZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
OCw3ICs5OCwxMCBAQCB2b2lkIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoCiAg
ICAgaWYgKCFmcmFtZSgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihtX3NlbGVj
dGlvblRvQmVDb3JyZWN0ZWQpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KG1fcmFuZ2VUb0Jl
Q29ycmVjdGVkLmdldCgpLCBtX2NvcnJlY3Rpb24pOworICAgIGlmICghbV9yYW5nZVRvQmVDb3Jy
ZWN0ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKm1fcmFuZ2VUb0JlQ29ycmVjdGVkLCBt
X2NvcnJlY3Rpb24pOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJldHVybjsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsMTIgKzc1
Miw5IEBAIHN0YXRpYyBib29sIGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKGNvbnMKICAgICByZXR1
cm4gY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0K
IAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJh
bmdlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCitQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKIHsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gY29udGV4dC0+b3duZXJEb2N1bWVudCgpOworICAgIERvY3Vt
ZW50JiBkb2N1bWVudCA9IGNvbnRleHQub3duZXJEb2N1bWVudCgpOwogICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQo
KTsKICAgICAKICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCkBAIC03NjcsNyArNzY0LDcgQEAgUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQogICAgIHN0cmluZy5yZXBsYWNl
KCJcclxuIiwgIlxuIik7CiAgICAgc3RyaW5nLnJlcGxhY2UoJ1xyJywgJ1xuJyk7CiAKLSAgICBp
ZiAoY29udGV4dFByZXNlcnZlc05ld2xpbmUoKmNvbnRleHQpKSB7CisgICAgaWYgKGNvbnRleHRQ
cmVzZXJ2ZXNOZXdsaW5lKGNvbnRleHQpKSB7CiAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHJpbmcpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsK
ICAgICAgICAgaWYgKHN0cmluZy5lbmRzV2l0aCgnXG4nKSkgewogICAgICAgICAgICAgUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQpOwpAQCAtNzg0
LDE0ICs3ODEsMTQgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbQog
ICAgIH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFwaHMuIEV4dHJhIGxpbmUg
YnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAgIE5vZGUqIGJsb2NrTm9kZSA9
IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQtPmZpcnN0Tm9kZSgpKTsKKyAgICBOb2RlKiBibG9ja05v
ZGUgPSBlbmNsb3NpbmdCbG9jayhjb250ZXh0LmZpcnN0Tm9kZSgpKTsKICAgICBFbGVtZW50KiBi
bG9jayA9IHRvRWxlbWVudChibG9ja05vZGUpOwogICAgIGJvb2wgdXNlQ2xvbmVzT2ZFbmNsb3Np
bmdCbG9jayA9IGJsb2NrTm9kZQogICAgICAgICAmJiBibG9ja05vZGUtPmlzRWxlbWVudE5vZGUo
KQogICAgICAgICAmJiAhYmxvY2stPmhhc1RhZ05hbWUoYm9keVRhZykKICAgICAgICAgJiYgIWJs
b2NrLT5oYXNUYWdOYW1lKGh0bWxUYWcpCi0gICAgICAgICYmIGJsb2NrICE9IGVkaXRhYmxlUm9v
dEZvclBvc2l0aW9uKGNvbnRleHQtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgYm9vbCB1c2VMaW5l
QnJlYWsgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woY29udGV4dC0+c3RhcnRQb3NpdGlvbigp
KTsKKyAgICAgICAgJiYgYmxvY2sgIT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29udGV4dC5z
dGFydFBvc2l0aW9uKCkpOworICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZv
cm1Db250cm9sKGNvbnRleHQuc3RhcnRQb3NpdGlvbigpKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+
IGxpc3Q7CiAgICAgc3RyaW5nLnNwbGl0KCdcbicsIHRydWUsIGxpc3QpOyAvLyB0cnVlIGdldHMg
dXMgZW1wdHkgc3RyaW5ncyBpbiB0aGUgbGlzdApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5o
CShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGVudW0gRUNoaWxkcmVuT25seSB7IEluY2x1
ZGVOb2RlLCBDaGlsZHIKIGVudW0gRUFic29sdXRlVVJMcyB7IERvTm90UmVzb2x2ZVVSTHMsIFJl
c29sdmVBbGxVUkxzLCBSZXNvbHZlTm9uTG9jYWxVUkxzIH07CiBlbnVtIEVGcmFnbWVudFNlcmlh
bGl6YXRpb24geyBIVE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uLCBYTUxGcmFnbWVudFNlcmlhbGl6
YXRpb24gfTsKIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZy
b21UZXh0KFJhbmdlKiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpOworUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIHRleHQpOwogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQmLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3Qg
U3RyaW5nJiBiYXNlVVJMLCBQYXJzZXJDb250ZW50UG9saWN5ID0gQWxsb3dTY3JpcHRpbmdDb250
ZW50KTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGb3JJbm5l
ck91dGVySFRNTChjb25zdCBTdHJpbmcmLCBFbGVtZW50KiwgUGFyc2VyQ29udGVudFBvbGljeSwg
RXhjZXB0aW9uQ29kZSYpOwogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBz
b3VyY2VNSU1FVHlwZSwgRG9jdW1lbnQqIG91dHB1dERvYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2NCw3ICs1
NjQsNyBAQCBib29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluCiAgICAgaWYg
KCFhbGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCZjb250ZXh0LCBbdGV4dCBwcmVjb21wb3NlZFN0cmlu
Z1dpdGhDYW5vbmljYWxNYXBwaW5nXSk7CisgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZy
b21UZXh0KGNvbnRleHQsIFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBp
bmddKTsKICAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU3MDI0KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDMzLDEwICs0MzMsMTAgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjp1cGRhdGVSZW5kZXJpbmcoUGFz
cwogICAgICAgICBlbGVtZW50KCkucmVuZGVyZXIoKS0+cmVwYWludCgpOwogfQogCi1ib29sIEZp
bGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEqIGRyYWdEYXRh
KQorYm9vbCBGaWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRh
JiBkcmFnRGF0YSkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBwYXRoczsKLSAgICBkcmFnRGF0YS0+
YXNGaWxlbmFtZXMocGF0aHMpOworICAgIGRyYWdEYXRhLmFzRmlsZW5hbWVzKHBhdGhzKTsKICAg
ICBpZiAocGF0aHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRWYWx1ZShjb25zdCBTdHJpbmcm
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VHlwZVNwZWNpZmljVmFsdWUoU3RyaW5n
JikgT1ZFUlJJREU7IC8vIENoZWNrZWQgZmlyc3QsIGJlZm9yZSBpbnRlcm5hbCBzdG9yYWdlIG9y
IHRoZSB2YWx1ZSBhdHRyaWJ1dGUuCiAgICAgdmlydHVhbCB2b2lkIHNldFZhbHVlKGNvbnN0IFN0
cmluZyYsIGJvb2wgdmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERy
YWdEYXRhJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBJY29uKiBpY29uKCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBib29sIGlzRmlsZVVwbG9hZCgpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVTaGFkb3dTdWJ0cmVlKCkgT1ZFUlJJREU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzNTcsNyArMTM1Nyw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0RmlsZXMoUGFz
c1JlZlAKICAgICBtX2lucHV0VHlwZS0+c2V0RmlsZXMoZmlsZXMpOwogfQogCi1ib29sIEhUTUxJ
bnB1dEVsZW1lbnQ6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEqIGRyYWdEYXRh
KQorYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdE
YXRhJiBkcmFnRGF0YSkKIHsKICAgICByZXR1cm4gbV9pbnB1dFR5cGUtPnJlY2VpdmVEcm9wcGVk
RmlsZXMoZHJhZ0RhdGEpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmgJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsNyArMjQzLDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0RmlsZXMoUGFzc1JlZlB0cjxGaWxlTGlzdD4pOwogCiAgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBnaXZlbiBEcmFnRGF0YSBoYXMgbW9yZSB0aGFuIG9uZSBkcm9wcGVkIGZpbGVz
LgotICAgIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSopOworICAgIGJv
b2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYpOwogCiAgICAgSWNvbiogaWNv
bigpIGNvbnN0OwogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBmb3IgcmVuZGVyaW5n
IHRoZSBpbnB1dCBhY3RpdmUgZHVyaW5nIGEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzA1LDcgKzcwNSw3IEBAIFN0cmluZyBJbnB1dFR5cGU6OnNh
bml0aXplVmFsdWUoY29uc3QgU3QKICAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZTsKIH0KIAotYm9v
bCBJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEqKQorYm9vbCBJ
bnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmKQogewogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9J
bnB1dFR5cGUuaAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1
dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIEZpbGVMaXN0KiBmaWxlcygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRGaWxlcyhQYXNz
UmVmUHRyPEZpbGVMaXN0Pik7CiAgICAgLy8gU2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBnaXZl
biBEcmFnRGF0YSBoYXMgbW9yZSB0aGFuIG9uZSBkcm9wcGVkIGZpbGVzLgotICAgIHZpcnR1YWwg
Ym9vbCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhKik7CisgICAgdmlydHVhbCBi
b29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmKTsKICAgICB2aXJ0dWFsIElj
b24qIGljb24oKSBjb25zdDsKICAgICAvLyBTaG91bGQgcmV0dXJuIHRydWUgaWYgdGhlIGNvcnJl
c3BvbmRpbmcgcmVuZGVyZXIgZm9yIGEgdHlwZSBjYW4gZGlzcGxheSBhIHN1Z2dlc3RlZCB2YWx1
ZS4KICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0U3VnZ2VzdGVkVmFsdWUoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDExICs1
MzksMTEgQEAgY2xhc3MgRW1wdHlEcmFnQ2xpZW50IDogcHVibGljIERyYWdDbGllbgogcHVibGlj
OgogICAgIEVtcHR5RHJhZ0NsaWVudCgpIHsgfQogICAgIHZpcnR1YWwgfkVtcHR5RHJhZ0NsaWVu
dCgpIHt9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBv
aW50JiwgQ2xpcGJvYXJkKikgeyB9Ci0gICAgdmlydHVhbCBEcmFnRGVzdGluYXRpb25BY3Rpb24g
YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEqKSB7IHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rp
b25Ob25lOyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEmKSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IElu
dFBvaW50JiwgQ2xpcGJvYXJkJikgeyB9CisgICAgdmlydHVhbCBEcmFnRGVzdGluYXRpb25BY3Rp
b24gYWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEmKSB7IHJldHVybiBEcmFnRGVzdGluYXRpb25B
Y3Rpb25Ob25lOyB9CiAgICAgdmlydHVhbCBEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rp
b25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSB7IHJldHVybiBEcmFnU291cmNlQWN0aW9u
Tm9uZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYsIEZyYW1lJiwgYm9vbCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgeyB9CiB9OwogI2VuZGlmIC8vIEVO
QUJMRShEUkFHX1NVUFBPUlQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDbGllbnQuaAkocmV2aXNp
b24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ2xpZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDQ0ICszMSwzNiBAQAogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogI2luY2x1
ZGUgIkludFBvaW50LmgiCiAKLSNpZiBQTEFURk9STShNQUMpCi1PQkpDX0NMQVNTIERPTUVsZW1l
bnQ7Ci1PQkpDX0NMQVNTIE5TVVJMOwotT0JKQ19DTEFTUyBOU1N0cmluZzsKLSNlbmRpZgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3MgQ2xpcGJvYXJkOwotICAgIGNsYXNz
IERyYWdEYXRhOwotICAgIGNsYXNzIEZyYW1lOwotICAgIGNsYXNzIEltYWdlOwotICAgIGNsYXNz
IEhUTUxJbWFnZUVsZW1lbnQ7CitjbGFzcyBDbGlwYm9hcmQ7CitjbGFzcyBEcmFnRGF0YTsKK2Ns
YXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEltYWdlOworCitjbGFzcyBEcmFnQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQo
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rp
b24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IElu
dFBvaW50JiwgQ2xpcGJvYXJkJikgPSAwOworICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uIGFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhJikgPSAwOworICAgIHZpcnR1YWwgRHJhZ1Nv
dXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JiBy
b290Vmlld1BvaW50KSA9IDA7CiAgICAgCi0gICAgY2xhc3MgRHJhZ0NsaWVudCB7Ci0gICAgcHVi
bGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rp
b24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSopID0gMDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25z
dCBJbnRQb2ludCYsIENsaXBib2FyZCopID0gMDsKLSAgICAgICAgdmlydHVhbCBEcmFnRGVzdGlu
YXRpb25BY3Rpb24gYWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEqKSA9IDA7Ci0KLSAgICAgICAg
dmlydHVhbCBEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmIHJvb3RWaWV3UG9pbnQpID0gMDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1
YWwgdm9pZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQm
IGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqLCBG
cmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxzZSkgPSAwOwotICAgICAgICAKLSAgICAgICAgdmly
dHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdJ
bWFnZU9yaWdpbiwgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQmLCBGcmFtZSYs
IGJvb2wgbGlua0RyYWcgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmFnRW5kZWQo
KSB7IH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgLy8gTWFjLXNwZWNpZmljIGhlbHBl
ciBmdW5jdGlvbiB0byBhbGxvdyBhY2Nlc3MgdG8gd2ViIGFyY2hpdmVzIGFuZCBOU1Bhc3RlYm9h
cmQgZXh0cmFzIGluIFdlYktpdC4KLSAgICAgICAgLy8gVGhpcyBpcyBub3QgYWJzdHJhY3QgYXMg
dGhhdCB3b3VsZCByZXF1aXJlIGFub3RoZXIgI2lmIFBMQVRGT1JNKE1BQykgZm9yIHRoZSBTVkdJ
bWFnZSBjbGllbnQgZW1wdHkgaW1wbGVudGF0aW9uLgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVj
bGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYsIERPTUVsZW1lbnQqLCBOU1VSTCAq
LCBOU1N0cmluZyAqLCBGcmFtZSopIHsgfQorICAgIC8vIE1hYy1zcGVjaWZpYyBoZWxwZXIgZnVu
Y3Rpb24gdG8gYWxsb3cgYWNjZXNzIHRvIHdlYiBhcmNoaXZlcyBhbmQgTlNQYXN0ZWJvYXJkIGV4
dHJhcyBpbiBXZWJLaXQuCisgICAgLy8gVGhpcyBpcyBub3QgYWJzdHJhY3QgYXMgdGhhdCB3b3Vs
ZCByZXF1aXJlIGFub3RoZXIgI2lmIFBMQVRGT1JNKE1BQykgZm9yIHRoZSBTVkdJbWFnZSBjbGll
bnQgZW1wdHkgaW1wbGVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UoY29uc3QgU3RyaW5nJiwgRWxlbWVudCYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmlu
ZyYsIEZyYW1lKikgeyB9CiAjZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBk
cmFnRW5kZWQoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIH5EcmFnQ2xpZW50KCkgeyB9Ci0gICAg
fTsKKyAgICB2aXJ0dWFsIH5EcmFnQ2xpZW50KCkgeyB9Cit9OwogICAgIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gIURyYWdDbGllbnRfaAorI2VuZGlmIC8vIERyYWdD
bGllbnRfaAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgzLDE3ICs4MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3JlYXRlTW91c2VFdmVudChEcmFnRGF0YSog
ZHJhZ0RhdGEpCitzdGF0aWMgUGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZU1vdXNlRXZlbnQoRHJh
Z0RhdGEmIGRyYWdEYXRhKQogewogICAgIGJvb2wgc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwg
bWV0YUtleTsKICAgICBzaGlmdEtleSA9IGN0cmxLZXkgPSBhbHRLZXkgPSBtZXRhS2V5ID0gZmFs
c2U7Ci0gICAgaW50IGtleVN0YXRlID0gZHJhZ0RhdGEtPm1vZGlmaWVyS2V5U3RhdGUoKTsKKyAg
ICBpbnQga2V5U3RhdGUgPSBkcmFnRGF0YS5tb2RpZmllcktleVN0YXRlKCk7CiAgICAgc2hpZnRL
ZXkgPSBzdGF0aWNfY2FzdDxib29sPihrZXlTdGF0ZSAmIFBsYXRmb3JtRXZlbnQ6OlNoaWZ0S2V5
KTsKICAgICBjdHJsS2V5ID0gc3RhdGljX2Nhc3Q8Ym9vbD4oa2V5U3RhdGUgJiBQbGF0Zm9ybUV2
ZW50OjpDdHJsS2V5KTsKICAgICBhbHRLZXkgPSBzdGF0aWNfY2FzdDxib29sPihrZXlTdGF0ZSAm
IFBsYXRmb3JtRXZlbnQ6OkFsdEtleSk7CiAgICAgbWV0YUtleSA9IHN0YXRpY19jYXN0PGJvb2w+
KGtleVN0YXRlICYgUGxhdGZvcm1FdmVudDo6TWV0YUtleSk7CiAKLSAgICByZXR1cm4gUGxhdGZv
cm1Nb3VzZUV2ZW50KGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS0+Z2xvYmFs
UG9zaXRpb24oKSwKKyAgICByZXR1cm4gUGxhdGZvcm1Nb3VzZUV2ZW50KGRyYWdEYXRhLmNsaWVu
dFBvc2l0aW9uKCksIGRyYWdEYXRhLmdsb2JhbFBvc2l0aW9uKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAwLCBz
aGlmdEtleSwgY3RybEtleSwgYWx0S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWV0YUtleSwgY3VycmVudFRpbWUoKSk7CiB9CkBAIC0xMTcsMjYgKzExNywyNSBAQCBEcmFnQ29u
dHJvbGxlcjo6fkRyYWdDb250cm9sbGVyKCkKICAgICBtX2NsaWVudC5kcmFnQ29udHJvbGxlckRl
c3Ryb3llZCgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1
bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1l
LCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBj
aG9zZVBsYWluVGV4dCkKK3N0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3Vt
ZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoRHJhZ0RhdGEmIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUs
IFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4
dCkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
CiAKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0LT5vd25lckRvY3VtZW50KCk7Ci0g
ICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0NvbXBhdGlibGVDb250ZW50KCkpIHsKLSAgICAgICAg
aWYgKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkcmFnRGF0YS0+YXNG
cmFnbWVudChmcmFtZSwgY29udGV4dC5nZXQoKSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5U
ZXh0KSkKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsK
KyAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpKSB7CisgICAgICAg
IGlmIChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZHJhZ0RhdGEuYXNG
cmFnbWVudChmcmFtZSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KSkK
ICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKIAotICAgICAgICBpZiAoZHJhZ0RhdGEtPmNv
bnRhaW5zVVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5hbWVzKSkgeworICAg
ICAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNVUkwoZnJhbWUsIERyYWdEYXRhOjpEb05vdENvbnZl
cnRGaWxlbmFtZXMpKSB7CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7Ci0gICAgICAgICAgICBT
dHJpbmcgdXJsID0gZHJhZ0RhdGEtPmFzVVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0
RmlsZW5hbWVzLCAmdGl0bGUpOworICAgICAgICAgICAgU3RyaW5nIHVybCA9IGRyYWdEYXRhLmFz
VVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5hbWVzLCAmdGl0bGUpOwogICAg
ICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPEhU
TUxBbmNob3JFbGVtZW50PiBhbmNob3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3Vt
ZW50KTsKICAgICAgICAgICAgICAgICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAgICAg
ICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0
aGUgcGxhaW4gdGV4dCBmaXJzdCBiZWNhdXNlIHRoZSB1cmwgbWlnaHQgYmUgbm9ybWFsaXplZCBv
ciBlc2NhcGVkLgotICAgICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zUGxh
aW5UZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGRyYWdEYXRhLT5hc1Bs
YWluVGV4dChmcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS5jb250YWlu
c1BsYWluVGV4dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBkcmFnRGF0YS5h
c1BsYWluVGV4dChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHVybDsKICAgICAgICAgICAgICAg
ICB9CkBAIC0xNDgsMTUgKzE0NywxNSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBkb2N1CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGFsbG93
UGxhaW5UZXh0ICYmIGRyYWdEYXRhLT5jb250YWluc1BsYWluVGV4dCgpKSB7CisgICAgaWYgKGFs
bG93UGxhaW5UZXh0ICYmIGRyYWdEYXRhLmNvbnRhaW5zUGxhaW5UZXh0KCkpIHsKICAgICAgICAg
Y2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChjb250ZXh0LmdldCgpLCBkcmFnRGF0YS0+YXNQbGFpblRleHQoZnJhbWUpKS5nZXQoKTsK
KyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dCwgZHJhZ0RhdGEu
YXNQbGFpblRleHQoZnJhbWUpKS5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAot
Ym9vbCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9u
LCBEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIERyYWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICByZXR1
cm4gbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHNlbGVjdGlvbi5p
c0NvbnRlbnRFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIWlzQ29weUtleURv
d24oZHJhZ0RhdGEpOwogfQpAQCAtMTc2LDE5ICsxNzUsMTcgQEAgdm9pZCBEcmFnQ29udHJvbGxl
cjo6ZHJhZ0VuZGVkKCkKICAgICBtX2NsaWVudC5kcmFnRW5kZWQoKTsKIH0KIAotRHJhZ1Nlc3Np
b24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdT
ZXNzaW9uIERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJlZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7
CiAgICAgcmV0dXJuIGRyYWdFbnRlcmVkT3JVcGRhdGVkKGRyYWdEYXRhKTsKIH0KIAotdm9pZCBE
cmFnQ29udHJvbGxlcjo6ZHJhZ0V4aXRlZChEcmFnRGF0YSogZHJhZ0RhdGEpCit2b2lkIERyYWdD
b250cm9sbGVyOjpkcmFnRXhpdGVkKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQo
ZHJhZ0RhdGEpOwotCiAgICAgaWYgKFJlZlB0cjxGcmFtZVZpZXc+IHYgPSBtX3BhZ2UubWFpbkZy
YW1lKCkudmlldygpKSB7CiAgICAgICAgIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kgPSAo
IW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8IG1fZG9jdW1lbnRVbmRlck1vdXNlLT5zZWN1cml0eU9y
aWdpbigpLT5pc0xvY2FsKCkpID8gQ2xpcGJvYXJkUmVhZGFibGUgOiBDbGlwYm9hcmRUeXBlc1Jl
YWRhYmxlOwotICAgICAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBDbGlwYm9hcmQ6
OmNyZWF0ZUZvckRyYWdBbmREcm9wKHBvbGljeSwgKmRyYWdEYXRhKTsKLSAgICAgICAgY2xpcGJv
YXJkLT5zZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9u
TWFzaygpKTsKKyAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJk
OjpjcmVhdGVGb3JEcmFnQW5kRHJvcChwb2xpY3ksIGRyYWdEYXRhKTsKKyAgICAgICAgY2xpcGJv
YXJkLT5zZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrKCkpOwogICAgICAgICBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuY2FuY2Vs
RHJhZ0FuZERyb3AoY3JlYXRlTW91c2VFdmVudChkcmFnRGF0YSksIGNsaXBib2FyZC5nZXQoKSk7
CiAgICAgICAgIGNsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5KENsaXBib2FyZE51bWIpOyAgICAv
LyBpbnZhbGlkYXRlIGNsaXBib2FyZCBoZXJlIGZvciBzZWN1cml0eQogICAgIH0KQEAgLTE5OCwy
MyArMTk1LDIyIEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRyYWdFeGl0ZWQoRHJhZ0RhdGEKICAg
ICBtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlID0gMDsKIH0KIAotRHJhZ1Nlc3Npb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdVcGRhdGVkKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdTZXNzaW9u
IERyYWdDb250cm9sbGVyOjpkcmFnVXBkYXRlZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAg
cmV0dXJuIGRyYWdFbnRlcmVkT3JVcGRhdGVkKGRyYWdEYXRhKTsKIH0KIAotYm9vbCBEcmFnQ29u
dHJvbGxlcjo6cGVyZm9ybURyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQorYm9vbCBEcmFnQ29udHJv
bGxlcjo6cGVyZm9ybURyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFn
RGF0YSk7Ci0gICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9j
dW1lbnRBdFBvaW50KGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKTsKKyAgICBtX2RvY3VtZW50
VW5kZXJNb3VzZSA9IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudEF0UG9pbnQoZHJhZ0RhdGEu
Y2xpZW50UG9zaXRpb24oKSk7CiAgICAgaWYgKChtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiAmIERy
YWdEZXN0aW5hdGlvbkFjdGlvbkRIVE1MKSAmJiBtX2RvY3VtZW50SXNIYW5kbGluZ0RyYWcpIHsK
ICAgICAgICAgbV9jbGllbnQud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uREhUTUwsIGRyYWdEYXRhKTsKICAgICAgICAgUmVmPE1haW5GcmFtZT4g
bWFpbkZyYW1lKG1fcGFnZS5tYWluRnJhbWUoKSk7CiAgICAgICAgIGJvb2wgcHJldmVudGVkRGVm
YXVsdCA9IGZhbHNlOwogICAgICAgICBpZiAobWFpbkZyYW1lLT52aWV3KCkpIHsKICAgICAgICAg
ICAgIC8vIFNlbmRpbmcgYW4gZXZlbnQgY2FuIHJlc3VsdCBpbiB0aGUgZGVzdHJ1Y3Rpb24gb2Yg
dGhlIHZpZXcgYW5kIHBhcnQuCi0gICAgICAgICAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9h
cmQgPSBDbGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKENsaXBib2FyZFJlYWRhYmxlLCAq
ZHJhZ0RhdGEpOwotICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXRTb3VyY2VPcGVyYXRpb24oZHJh
Z0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3Ao
Q2xpcGJvYXJkUmVhZGFibGUsIGRyYWdEYXRhKTsKKyAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0
U291cmNlT3BlcmF0aW9uKGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsK
ICAgICAgICAgICAgIHByZXZlbnRlZERlZmF1bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigp
LnBlcmZvcm1EcmFnQW5kRHJvcChjcmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKSwgY2xpcGJvYXJk
LmdldCgpKTsKICAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5KENsaXBib2Fy
ZE51bWIpOyAvLyBJbnZhbGlkYXRlIGNsaXBib2FyZCBoZXJlIGZvciBzZWN1cml0eQogICAgICAg
ICB9CkBAIC0yMzUsNyArMjMxLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWco
RHJhZ0RhdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2NsaWVudC53aWxsUGVyZm9y
bURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkLCBkcmFnRGF0
YSk7Ci0gICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWQoRnJhbWVMb2FkUmVxdWVz
dCgmbV9wYWdlLm1haW5GcmFtZSgpLCBSZXNvdXJjZVJlcXVlc3QoZHJhZ0RhdGEtPmFzVVJMKCZt
X3BhZ2UubWFpbkZyYW1lKCkpKSkpOworICAgIG1fcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5s
b2FkKEZyYW1lTG9hZFJlcXVlc3QoJm1fcGFnZS5tYWluRnJhbWUoKSwgUmVzb3VyY2VSZXF1ZXN0
KGRyYWdEYXRhLmFzVVJMKCZtX3BhZ2UubWFpbkZyYW1lKCkpKSkpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0yNTAsMTAgKzI0Niw5IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6Om1vdXNlTW92
ZWRJbnRvRG9jdW0KICAgICBtX2RvY3VtZW50VW5kZXJNb3VzZSA9IG5ld0RvY3VtZW50OwogfQog
Ci1EcmFnU2Vzc2lvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ0VudGVyZWRPclVwZGF0ZWQoRHJhZ0Rh
dGEqIGRyYWdEYXRhKQorRHJhZ1Nlc3Npb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JV
cGRhdGVkKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotICAg
IG1vdXNlTW92ZWRJbnRvRG9jdW1lbnQobV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQb2lu
dChkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSkpOworICAgIG1vdXNlTW92ZWRJbnRvRG9jdW1l
bnQobV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQb2ludChkcmFnRGF0YS5jbGllbnRQb3Np
dGlvbigpKSk7CiAKICAgICBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiA9IG1fY2xpZW50LmFjdGlv
bk1hc2tGb3JEcmFnKGRyYWdEYXRhKTsKICAgICBpZiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb24g
PT0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSkgewpAQCAtMzAxLDEwICsyOTYsOCBAQCBzdGF0
aWMgRWxlbWVudCogZWxlbWVudFVuZGVyTW91c2UoRG9jdW1lCiAgICAgcmV0dXJuIHRvRWxlbWVu
dChuKTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKERyYWdEYXRh
KiBkcmFnRGF0YSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2ssIERyYWdTZXNzaW9u
JiBkcmFnU2Vzc2lvbikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmFn
RGF0YSYgZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrLCBEcmFnU2Vz
c2lvbiYgZHJhZ1Nlc3Npb24pCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKLQogICAgIGlmICgh
bV9kb2N1bWVudFVuZGVyTW91c2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzM1LDEy
ICszMjgsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKERyYQogICAg
IH0KIAogICAgIGlmICgoYWN0aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYm
IGNhblByb2Nlc3NEcmFnKGRyYWdEYXRhKSkgewotICAgICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRh
aW5zQ29sb3IoKSkgeworICAgICAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNDb2xvcigpKSB7CiAg
ICAgICAgICAgICBkcmFnU2Vzc2lvbi5vcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9uR2VuZXJpYzsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgSW50UG9pbnQg
cG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMoZHJhZ0RhdGEtPmNsaWVudFBvc2l0
aW9uKCkpOworICAgICAgICBJbnRQb2ludCBwb2ludCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250
ZW50cyhkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKTsKICAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IGVsZW1lbnRVbmRlck1vdXNlKG1fZG9jdW1lbnRVbmRlck1vdXNlLmdldCgpLCBwb2ludCk7
CiAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2
MCw3ICszNTMsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoRHJhCiAg
ICAgICAgIGRyYWdTZXNzaW9uLm1vdXNlSXNPdmVyRmlsZUlucHV0ID0gbV9maWxlSW5wdXRFbGVt
ZW50VW5kZXJNb3VzZTsKICAgICAgICAgZHJhZ1Nlc3Npb24ubnVtYmVyT2ZJdGVtc1RvQmVBY2Nl
cHRlZCA9IDA7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZGaWxlcyA9IGRyYWdEYXRhLT5u
dW1iZXJPZkZpbGVzKCk7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mRmlsZXMgPSBkcmFnRGF0
YS5udW1iZXJPZkZpbGVzKCk7CiAgICAgICAgIGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1v
dXNlKSB7CiAgICAgICAgICAgICBpZiAobV9maWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZS0+aXNE
aXNhYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICAgICAgZHJhZ1Nlc3Npb24ubnVtYmVy
T2ZJdGVtc1RvQmVBY2NlcHRlZCA9IDA7CkBAIC0zOTcsMTAgKzM5MCw5IEBAIERyYWdTb3VyY2VB
Y3Rpb24gRHJhZ0NvbnRyb2xsZXI6OmRlbGVnYXQKICAgICByZXR1cm4gbV9kcmFnU291cmNlQWN0
aW9uOwogfQogCi1EcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2Fk
KERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJh
dGlvbkZvckxvYWQoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFnRGF0YSk7
Ci0gICAgRG9jdW1lbnQqIGRvYyA9IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudEF0UG9pbnQo
ZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOworICAgIERvY3VtZW50KiBkb2MgPSBtX3BhZ2Uu
bWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpOwog
CiAgICAgYm9vbCBwbHVnaW5Eb2N1bWVudEFjY2VwdHNEcmFncyA9IGZhbHNlOwogCkBAIC00Mjgs
MTggKzQyMCwxNiBAQCBzdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtCiAg
ICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlv
bigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3Bh
dGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVyRnJhbWUsIERyYWdEYXRhKiBkcmFnRGF0
YSkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUq
IGlubmVyRnJhbWUsIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICBBU1NFUlQobV9wYWdlLmRy
YWdDYXJldENvbnRyb2xsZXIoKS5oYXNDYXJldCgpKTsKLSAgICBTdHJpbmcgdGV4dCA9IG1fcGFn
ZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSA/ICIiIDog
ZHJhZ0RhdGEtPmFzUGxhaW5UZXh0KGlubmVyRnJhbWUpOworICAgIFN0cmluZyB0ZXh0ID0gbV9w
YWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpID8gZW1w
dHlTdHJpbmcoKSA6IGRyYWdEYXRhLmFzUGxhaW5UZXh0KGlubmVyRnJhbWUpOwogICAgIE5vZGUq
IHRhcmdldCA9IGlubmVyRnJhbWUtPmVkaXRvcigpLmZpbmRFdmVudFRhcmdldEZyb20obV9wYWdl
LmRyYWdDYXJldENvbnRyb2xsZXIoKS5jYXJldFBvc2l0aW9uKCkpOwogICAgIHJldHVybiB0YXJn
ZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKGlubmVyRnJhbWUtPmRv
Y3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0KSwgSUdOT1JFX0VYQ0VQVElPTik7CiB9CiAKLWJv
b2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQor
Ym9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEp
CiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKLQogICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50
PiBmaWxlSW5wdXQgPSBtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlOwogICAgIGlmIChtX2Zp
bGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKSB7CiAgICAgICAgIG1fZmlsZUlucHV0RWxlbWVudFVu
ZGVyTW91c2UtPnNldENhblJlY2VpdmVEcm9wcGVkRmlsZXMoZmFsc2UpOwpAQCAtNDQ5LDcgKzQz
OSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICBpZiAo
IW1fZG9jdW1lbnRVbmRlck1vdXNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRQ
b2ludCBwb2ludCA9IG1fZG9jdW1lbnRVbmRlck1vdXNlLT52aWV3KCktPndpbmRvd1RvQ29udGVu
dHMoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOworICAgIEludFBvaW50IHBvaW50ID0gbV9k
b2N1bWVudFVuZGVyTW91c2UtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFnRGF0YS5jbGll
bnRQb3NpdGlvbigpKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudFVuZGVyTW91c2Uo
bV9kb2N1bWVudFVuZGVyTW91c2UuZ2V0KCksIHBvaW50KTsKICAgICBpZiAoIWVsZW1lbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1OSw4ICs0NDksOCBAQCBib29sIERyYWdDb250cm9s
bGVyOjpjb25jbHVkZUVkaXREcmFnKERyCiAgICAgaWYgKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9s
bGVyKCkuaGFzQ2FyZXQoKSAmJiAhZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZvcihpbm5lckZyYW1l
LmdldCgpLCBkcmFnRGF0YSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGRyYWdE
YXRhLT5jb250YWluc0NvbG9yKCkpIHsKLSAgICAgICAgQ29sb3IgY29sb3IgPSBkcmFnRGF0YS0+
YXNDb2xvcigpOworICAgIGlmIChkcmFnRGF0YS5jb250YWluc0NvbG9yKCkpIHsKKyAgICAgICAg
Q29sb3IgY29sb3IgPSBkcmFnRGF0YS5hc0NvbG9yKCk7CiAgICAgICAgIGlmICghY29sb3IuaXNW
YWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBSZWZQdHI8UmFuZ2U+
IGlubmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OwpAQCAtNDczLDcgKzQ2Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERy
YWcoRHIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGRyYWdEYXRhLT5j
b250YWluc0ZpbGVzKCkgJiYgZmlsZUlucHV0KSB7CisgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5z
RmlsZXMoKSAmJiBmaWxlSW5wdXQpIHsKICAgICAgICAgLy8gZmlsZUlucHV0IHNob3VsZCBiZSB0
aGUgZWxlbWVudCB3ZSBoaXQgdGVzdGVkIGZvciwgdW5sZXNzIGl0IHdhcyBtYWRlCiAgICAgICAg
IC8vIGRpc3BsYXk6bm9uZSBpbiBhIGRyb3AgZXZlbnQgaGFuZGxlci4KICAgICAgICAgQVNTRVJU
KGZpbGVJbnB1dCA9PSBlbGVtZW50IHx8ICFmaWxlSW5wdXQtPnJlbmRlcmVyKCkpOwpAQCAtNDk3
LDExICs0ODcsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgog
ICAgIC8vIG1hbnVhbGx5IGNvbnRyb2xsaW5nIGRyYWcgYmVoYXZpb3VyCiAgICAgaWYgKCFyYW5n
ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNh
Y2hlZFJlc291cmNlTG9hZGVyID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpOwogICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0
aW9uU3VwcHJlc3NvcihjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgaWYgKGRyYWdJc01vdmUo
aW5uZXJGcmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJh
Z21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsIGlubmVyRnJhbWUuZ2V0KCksIHJhbmdlLCB0cnVl
LCBjaG9zZVBsYWluVGV4dCk7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsIGlubmVyRnJhbWUu
Z2V0KCksICpyYW5nZSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOwogICAgICAgICBpZiAoIWZyYWdt
ZW50IHx8ICFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVu
dCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpKSB7CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUxMSwxMiArNTAyLDEyIEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgICAgIC8vIE5TVGV4dFZpZXcgYmVo
YXZpb3IgaXMgdG8gYWx3YXlzIHNtYXJ0IGRlbGV0ZSBvbiBtb3ZpbmcgYSBzZWxlY3Rpb24sCiAg
ICAgICAgICAgICAvLyBidXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYgdGhlIHNlbGVjdGlvbiBn
cmFudWxhcml0eSBpcyB3b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAgICAgYm9vbCBzbWFydERl
bGV0ZSA9IGlubmVyRnJhbWUtPmVkaXRvcigpLnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwot
ICAgICAgICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0RGVsZXRlICYmIGlubmVyRnJhbWUt
PnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5ICYmIGRyYWdEYXRh
LT5jYW5TbWFydFJlcGxhY2UoKTsKKyAgICAgICAgICAgIGJvb2wgc21hcnRJbnNlcnQgPSBzbWFy
dERlbGV0ZSAmJiBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRH
cmFudWxhcml0eSAmJiBkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKTsKICAgICAgICAgICAgIGFw
cGx5Q29tbWFuZChNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGZyYWdtZW50LCBkcmFnQ2Fy
ZXQuYmFzZSgpLCBzbWFydEluc2VydCwgc21hcnREZWxldGUpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgp
LCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpIHsKICAgICAgICAgICAgICAgICBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2
ZW50TmVzdGluZzsKLSAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEtPmNhblNtYXJ0UmVwbGFj
ZSgpKQorICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKSkKICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21h
cnRSZXBsYWNlOwogICAgICAgICAgICAgICAgIGlmIChjaG9zZVBsYWluVGV4dCkKICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHls
ZTsKQEAgLTUyNCwxNCArNTE1LDE0IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcoRHIKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAg
IFN0cmluZyB0ZXh0ID0gZHJhZ0RhdGEtPmFzUGxhaW5UZXh0KGlubmVyRnJhbWUuZ2V0KCkpOwor
ICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KGlubmVyRnJhbWUuZ2V0
KCkpOwogICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWlubmVyRnJhbWUtPmVkaXRvcigp
LnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbkRy
b3BwZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAg
ICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRp
b25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdD
YXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpCi0gICAgICAg
ICAgICBhcHBseUNvbW1hbmQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1
bWVudFVuZGVyTW91c2UsIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFuZ2UuZ2V0KCksIHRleHQp
LCAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJl
dmVudE5lc3RpbmcpKTsKKyAgICAgICAgICAgIGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dCgqcmFuZ2UsIHRleHQpLCAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxh
Y2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcpKTsKICAgICB9CiAKICAgICBpZiAocm9vdEVk
aXRhYmxlRWxlbWVudCkgewpAQCAtNTQyLDE0ICs1MzMsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIERyYWdD
b250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIERyYWdD
b250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNT
RVJUKGRyYWdEYXRhKTsKLQotICAgIGlmICghZHJhZ0RhdGEtPmNvbnRhaW5zQ29tcGF0aWJsZUNv
bnRlbnQoKSkKKyAgICBpZiAoIWRyYWdEYXRhLmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQgcG9pbnQgPSBtX3BhZ2UubWFp
bkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGRyYWdEYXRhLT5jbGllbnRQb3NpdGlv
bigpKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCktPndp
bmRvd1RvQ29udGVudHMoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSk7CiAgICAgSGl0VGVzdFJl
c3VsdCByZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHBvaW50KTsKICAgICBpZiAoIW1fcGFnZS5tYWlu
RnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU5
LDcgKzU0OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNhblByb2Nlc3NEcmFnKERyYWcKICAg
ICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0ZpbGVzKCkgJiYgYXNGaWxlSW5wdXQocmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKSkKKyAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNGaWxl
cygpICYmIGFzRmlsZUlucHV0KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+aXNQ
bHVnaW5FbGVtZW50KCkpIHsKQEAgLTU5NCw5ICs1ODMsOCBAQCBzdGF0aWMgRHJhZ09wZXJhdGlv
biBkZWZhdWx0T3BlcmF0aW9uRm9yCiAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25HZW5lcmljOwog
fQogCi1ib29sIERyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRh
LCBEcmFnT3BlcmF0aW9uJiBvcGVyYXRpb24pCitib29sIERyYWdDb250cm9sbGVyOjp0cnlESFRN
TERyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmFnT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB7Ci0g
ICAgQVNTRVJUKGRyYWdEYXRhKTsKICAgICBBU1NFUlQobV9kb2N1bWVudFVuZGVyTW91c2UpOwog
ICAgIFJlZjxNYWluRnJhbWU+IG1haW5GcmFtZShtX3BhZ2UubWFpbkZyYW1lKCkpOwogICAgIFJl
ZlB0cjxGcmFtZVZpZXc+IHZpZXdQcm90ZWN0b3IgPSBtYWluRnJhbWUtPnZpZXcoKTsKQEAgLTYw
NCw4ICs1OTIsOCBAQCBib29sIERyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWcoRHJhZ0RhCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kg
PSBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNMb2NhbCgpID8gQ2xp
cGJvYXJkUmVhZGFibGUgOiBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlOwotICAgIFJlZlB0cjxDbGlw
Ym9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AocG9saWN5
LCAqZHJhZ0RhdGEpOwotICAgIERyYWdPcGVyYXRpb24gc3JjT3BNYXNrID0gZHJhZ0RhdGEtPmRy
YWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpOworICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBi
b2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AocG9saWN5LCBkcmFnRGF0YSk7
CisgICAgRHJhZ09wZXJhdGlvbiBzcmNPcE1hc2sgPSBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9w
ZXJhdGlvbk1hc2soKTsKICAgICBjbGlwYm9hcmQtPnNldFNvdXJjZU9wZXJhdGlvbihzcmNPcE1h
c2spOwogCiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50ID0gY3JlYXRlTW91c2VFdmVudChk
cmFnRGF0YSk7CkBAIC02NjQsMTkgKzY1MiwxNyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ2dhYmxlRWxlbWVuCiAgICAgcmV0dXJuIChzdGF0ZS50eXBlICYgRHJhZ1NvdXJjZUFjdGlv
blNlbGVjdGlvbikgPyBzdGFydEVsZW1lbnQgOiAwOwogfQogCi1zdGF0aWMgQ2FjaGVkSW1hZ2Uq
IGdldENhY2hlZEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgQ2FjaGVkSW1hZ2UqIGdl
dENhY2hlZEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwot
ICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVu
ZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcik7CiAgICAgcmV0dXJuIGlt
YWdlLT5jYWNoZWRJbWFnZSgpOwogfQogCi1zdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQq
IGVsZW1lbnQpCitzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGdldENh
Y2hlZEltYWdlKGVsZW1lbnQpOwogICAgIC8vIERvbid0IHVzZSBjYWNoZWRJbWFnZS0+aW1hZ2VG
b3JSZW5kZXJlcigpIGhlcmUgYXMgdGhhdCBtYXkgcmV0dXJuIEJpdG1hcEltYWdlcyBmb3IgY2Fj
aGVkIFNWRyBJbWFnZXMuCiAgICAgLy8gVXNlcnMgb2YgZ2V0SW1hZ2UoKSB3YW50IGFjY2VzcyB0
byB0aGUgU1ZHSW1hZ2UsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgdGhlIGZpbGVuYW1lIGV4dGVu
c2lvbnMsCkBAIC02ODUsMTEgKzY3MSwxMSBAQCBzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1l
bnQqIGVsZW1lbnQpCiAgICAgICAgIGNhY2hlZEltYWdlLT5pbWFnZSgpIDogMDsKIH0KIAotc3Rh
dGljIHZvaWQgc2VsZWN0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIHZvaWQgc2Vs
ZWN0RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBlbGVtZW50LT5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5v
ZGUoZWxlbWVudCk7Ci0gICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkp
OworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50LmRvY3VtZW50KCkuY3JlYXRlUmFu
Z2UoKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZSgmZWxlbWVudCk7CisgICAgZWxlbWVudC5kb2N1
bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9j
Rm9yREhUTUxEcmFnKGNvbnN0IEludFBvaW50JiBtb3VzZURyYWdnZWRQb2ludCwgY29uc3QgSW50
UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQsIGJvb2wg
aXNMaW5rSW1hZ2UpCkBAIC03MDgsOSArNjk0LDkgQEAgc3RhdGljIEludFBvaW50IGRyYWdMb2NG
b3JESFRNTERyYWcoY29ucwogICAgIHJldHVybiBJbnRQb2ludChkcmFnT3JpZ2luLngoKSAtIGRy
YWdJbWFnZU9mZnNldC54KCksIGRyYWdPcmlnaW4ueSgpICsgeU9mZnNldCk7CiB9CiAKLXN0YXRp
YyBJbnRQb2ludCBkcmFnTG9jRm9yU2VsZWN0aW9uRHJhZyhGcmFtZSogc3JjKQorc3RhdGljIElu
dFBvaW50IGRyYWdMb2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lJiBzcmMpCiB7Ci0gICAgSW50UmVj
dCBkcmFnZ2luZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCkuYm91bmRz
KCkpOworICAgIEludFJlY3QgZHJhZ2dpbmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzcmMuc2Vs
ZWN0aW9uKCkuYm91bmRzKCkpOwogICAgIGludCB4cG9zID0gZHJhZ2dpbmdSZWN0Lm1heFgoKTsK
ICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2luZ1JlY3QueCgpIDog
eHBvczsKICAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CkBAIC03MjMsMTQgKzcw
OSwxMiBAQCBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvclNlbGVjdGlvbkRyYWcoCiAgICAgcmV0
dXJuIEludFBvaW50KHhwb3MsIHlwb3MpOwogfQogCi1ib29sIERyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcoRnJhbWUqIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJhdGlvbiBz
cmNPcCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBkcmFnRXZlbnQsIGNvbnN0IEludFBvaW50
JiBkcmFnT3JpZ2luKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMs
IGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbikKIHsK
LSAgICBBU1NFUlQoc3JjKTsKLQotICAgIGlmICghc3JjLT52aWV3KCkgfHwgIXNyYy0+Y29udGVu
dFJlbmRlcmVyKCkpCisgICAgaWYgKCFzcmMudmlldygpIHx8ICFzcmMuY29udGVudFJlbmRlcmVy
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJl
c3VsdCA9IHNyYy0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoZHJhZ09yaWdp
biwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7Cisg
ICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0gc3JjLmV2ZW50SGFuZGxlcigpLmhpdFRl
c3RSZXN1bHRBdFBvaW50KGRyYWdPcmlnaW4sIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhp
dFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwogICAgIGlmICghc3RhdGUuc291cmNlLT5jb250YWlucyho
aXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpKSkKICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIG5vZGUg
YmVpbmcgZHJhZ2dlZCBpc24ndCB1bmRlciB0aGUgZHJhZyBvcmlnaW4gYW55bW9yZS4uLiBtYXli
ZSBpdCB3YXMKICAgICAgICAgLy8gaGlkZGVuIG9yIG1vdmVkIG91dCBmcm9tIHVuZGVyIHRoZSBj
dXJzb3IuIFJlZ2FyZGxlc3MsIHdlIGRvbid0IHdhbnQgdG8gc3RhcnQgYSBkcmFnIG9uCkBAIC03
MzksNyArNzIzLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgog
ICAgIFVSTCBsaW5rVVJMID0gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICBV
UkwgaW1hZ2VVUkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKTsKIAotICAgIElu
dFBvaW50IG1vdXNlRHJhZ2dlZFBvaW50ID0gc3JjLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMo
ZHJhZ0V2ZW50LnBvc2l0aW9uKCkpOworICAgIEludFBvaW50IG1vdXNlRHJhZ2dlZFBvaW50ID0g
c3JjLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFnRXZlbnQucG9zaXRpb24oKSk7CiAKICAg
ICBtX2RyYWdnaW5nSW1hZ2VVUkwgPSBVUkwoKTsKICAgICBtX3NvdXJjZURyYWdPcGVyYXRpb24g
PSBzcmNPcDsKQEAgLTc0OCw5ICs3MzIsMTEgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnRE
cmFnKEZyYW1lKiBzcgogICAgIEludFBvaW50IGRyYWdMb2MoMCwgMCk7CiAgICAgSW50UG9pbnQg
ZHJhZ0ltYWdlT2Zmc2V0KDAsIDApOwogCi0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBzdGF0
ZS5jbGlwYm9hcmQuZ2V0KCk7CisgICAgQVNTRVJUKHN0YXRlLmNsaXBib2FyZCk7CisKKyAgICBD
bGlwYm9hcmQmIGNsaXBib2FyZCA9ICpzdGF0ZS5jbGlwYm9hcmQ7CiAgICAgaWYgKHN0YXRlLnR5
cGUgPT0gRHJhZ1NvdXJjZUFjdGlvbkRIVE1MKQotICAgICAgICBkcmFnSW1hZ2UgPSBjbGlwYm9h
cmQtPmNyZWF0ZURyYWdJbWFnZShkcmFnSW1hZ2VPZmZzZXQpOworICAgICAgICBkcmFnSW1hZ2Ug
PSBjbGlwYm9hcmQuY3JlYXRlRHJhZ0ltYWdlKGRyYWdJbWFnZU9mZnNldCk7CiAgICAgaWYgKHN0
YXRlLnR5cGUgPT0gRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbiB8fCAhaW1hZ2VVUkwuaXNFbXB0
eSgpIHx8ICFsaW5rVVJMLmlzRW1wdHkoKSkKICAgICAgICAgLy8gU2VsZWN0aW9uLCBpbWFnZSwg
YW5kIGxpbmsgZHJhZ3MgcmVjZWl2ZSBhIGRlZmF1bHQgc2V0IG9mIGFsbG93ZWQgZHJhZyBvcGVy
YXRpb25zIHRoYXQKICAgICAgICAgLy8gZm9sbG93cyBmcm9tOgpAQCAtNzY2LDQ1ICs3NTIsNDYg
QEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogCiAgICAgYm9vbCBz
dGFydGVkRHJhZyA9IHRydWU7IC8vIG9wdGltaXNtIC0gd2UgYWxtb3N0IGFsd2F5cyBtYW5hZ2Ug
dG8gc3RhcnQgdGhlIGRyYWcKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5zb3VyY2Uu
Z2V0KCk7CisgICAgQVNTRVJUKHN0YXRlLnNvdXJjZSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9
ICpzdGF0ZS5zb3VyY2U7CiAKICAgICBJbWFnZSogaW1hZ2UgPSBnZXRJbWFnZShlbGVtZW50KTsK
ICAgICBpZiAoc3RhdGUudHlwZSA9PSBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSB7Ci0gICAg
ICAgIGlmICghY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgpKSB7CisgICAgICAgIGlm
ICghY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGVudGlyZSBibG9jayBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBjb2RlIGlu
IEVkaXRvcjo6Y29weSwgYW5kIHRoZSBjb2RlIHNob3VsZCBiZSBzaGFyZWQuCiAKLSAgICAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBzcmMtPnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdl
ID0gc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NF
UlQoc2VsZWN0aW9uUmFuZ2UpOwogCi0gICAgICAgICAgICBzcmMtPmVkaXRvcigpLndpbGxXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CisgICAgICAgICAg
ICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvblJh
bmdlLmdldCgpKTsKIAotICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChz
cmMtPnNlbGVjdGlvbigpLnN0YXJ0KCkpKQotICAgICAgICAgICAgICAgIGNsaXBib2FyZC0+cGFz
dGVib2FyZCgpLndyaXRlUGxhaW5UZXh0KHNyYy0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xp
cGJvYXJkKCksIFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CisgICAgICAgICAgICBp
ZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAg
ICAgICAgICAgICAgICBjbGlwYm9hcmQucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0KHNyYy5l
ZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSwgUGFzdGVib2FyZDo6Q2Fubm90U21h
cnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2UgewogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExB
VEZPUk0oRUZMKQotICAgICAgICAgICAgICAgIHNyYy0+ZWRpdG9yKCkud3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkpOworICAgICAgICAgICAgICAgIHNy
Yy5lZGl0b3IoKS53cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjbGlwYm9hcmQucGFzdGVib2Fy
ZCgpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgYWxsIG90aGVy
IHBsYXRmb3JtcyB0byBtYXRjaCBNYWMgYW5kIGRlbGV0ZSB0aGlzLgotICAgICAgICAgICAgICAg
IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLndyaXRlU2VsZWN0aW9uKHNlbGVjdGlvblJhbmdlLmdl
dCgpLCBzcmMtPmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCksIHNyYywgSW5jbHVkZUlt
YWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CisgICAgICAgICAgICAgICAgY2xpcGJvYXJkLnBhc3Rl
Ym9hcmQoKS53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2UsIHNyYy5lZGl0b3IoKS5jYW5T
bWFydENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQp
OwogI2VuZGlmCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNyYy0+ZWRpdG9yKCkuZGlk
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKKyAgICAgICAgICAgIHNyYy5lZGl0b3IoKS5k
aWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogICAgICAgICB9CiAgICAgICAgIG1fY2xp
ZW50LndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9u
LCBkcmFnT3JpZ2luLCBjbGlwYm9hcmQpOwogICAgICAgICBpZiAoIWRyYWdJbWFnZSkgewotICAg
ICAgICAgICAgZHJhZ0ltYWdlID0gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKHNyYy0+ZHJh
Z0ltYWdlRm9yU2VsZWN0aW9uKCksIERyYWdJbWFnZUFscGhhKTsKKyAgICAgICAgICAgIGRyYWdJ
bWFnZSA9IGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihzcmMuZHJhZ0ltYWdlRm9yU2VsZWN0
aW9uKCksIERyYWdJbWFnZUFscGhhKTsKICAgICAgICAgICAgIGRyYWdMb2MgPSBkcmFnTG9jRm9y
U2VsZWN0aW9uRHJhZyhzcmMpOwogICAgICAgICAgICAgbV9kcmFnT2Zmc2V0ID0gSW50UG9pbnQo
ZHJhZ09yaWdpbi54KCkgLSBkcmFnTG9jLngoKSwgZHJhZ09yaWdpbi55KCkgLSBkcmFnTG9jLnko
KSk7CiAgICAgICAgIH0KICAgICAgICAgZG9TeXN0ZW1EcmFnKGRyYWdJbWFnZSwgZHJhZ0xvYywg
ZHJhZ09yaWdpbiwgY2xpcGJvYXJkLCBzcmMsIGZhbHNlKTsKLSAgICB9IGVsc2UgaWYgKCFpbWFn
ZVVSTC5pc0VtcHR5KCkgJiYgZWxlbWVudCAmJiBpbWFnZSAmJiAhaW1hZ2UtPmlzTnVsbCgpICYm
IChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uSW1hZ2UpKSB7CisgICAgfSBl
bHNlIGlmICghaW1hZ2VVUkwuaXNFbXB0eSgpICYmIGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkg
JiYgKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VBY3Rpb25JbWFnZSkpIHsKICAgICAg
ICAgLy8gV2Ugc2hvdWxkbid0IGJlIHN0YXJ0aW5nIGEgZHJhZyBmb3IgYW4gaW1hZ2UgdGhhdCBj
YW4ndCBwcm92aWRlIGFuIGV4dGVuc2lvbi4KICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJseSBk
ZXRlY3Rpb24gZm9yIHByb2JsZW1zIGVuY291bnRlcmVkIGxhdGVyIHVwb24gZHJvcC4KICAgICAg
ICAgQVNTRVJUKCFpbWFnZS0+ZmlsZW5hbWVFeHRlbnNpb24oKS5pc0VtcHR5KCkpOwotICAgICAg
ICBpZiAoIWNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmhhc0RhdGEoKSkgeworICAgICAgICBpZiAo
IWNsaXBib2FyZC5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgpKSB7CiAgICAgICAgICAgICBtX2RyYWdn
aW5nSW1hZ2VVUkwgPSBpbWFnZVVSTDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50KGVsZW1lbnQpOwog
ICAgICAgICAgICAgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNsaXBib2FyZCwgZWxlbWVudCwg
IWxpbmtVUkwuaXNFbXB0eSgpID8gbGlua1VSTCA6IGltYWdlVVJMLCBoaXRUZXN0UmVzdWx0LmFs
dERpc3BsYXlTdHJpbmcoKSk7CiAgICAgICAgIH0KQEAgLTgxMywzMSArODAwLDMxIEBAIGJvb2wg
RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKIAogICAgICAgICBpZiAoIWRyYWdJ
bWFnZSkgewogICAgICAgICAgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBoaXRUZXN0UmVzdWx0Lmlt
YWdlUmVjdCgpOwotICAgICAgICAgICAgaW1hZ2VSZWN0LnNldExvY2F0aW9uKG1fcGFnZS5tYWlu
RnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhzcmMtPnZpZXcoKS0+Y29udGVudHNU
b1Jvb3RWaWV3KGltYWdlUmVjdC5sb2NhdGlvbigpKSkpOworICAgICAgICAgICAgaW1hZ2VSZWN0
LnNldExvY2F0aW9uKG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50
cyhzcmMudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoaW1hZ2VSZWN0LmxvY2F0aW9uKCkpKSk7
CiAgICAgICAgICAgICBkb0ltYWdlRHJhZyhlbGVtZW50LCBkcmFnT3JpZ2luLCBoaXRUZXN0UmVz
dWx0LmltYWdlUmVjdCgpLCBjbGlwYm9hcmQsIHNyYywgbV9kcmFnT2Zmc2V0KTsKLSAgICAgICAg
fSBlbHNlCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBESFRNTCBkZWZpbmVkIGRy
YWcgaW1hZ2UKICAgICAgICAgICAgIGRvU3lzdGVtRHJhZyhkcmFnSW1hZ2UsIGRyYWdMb2MsIGRy
YWdPcmlnaW4sIGNsaXBib2FyZCwgc3JjLCBmYWxzZSk7Ci0KKyAgICAgICAgfQogICAgIH0gZWxz
ZSBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpICYmIChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291
cmNlQWN0aW9uTGluaykpIHsKLSAgICAgICAgaWYgKCFjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5o
YXNEYXRhKCkpCisgICAgICAgIGlmICghY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkp
CiAgICAgICAgICAgICAvLyBTaW1wbGlmeSB3aGl0ZXNwYWNlIHNvIHRoZSB0aXRsZSBwdXQgb24g
dGhlIGNsaXBib2FyZCByZXNlbWJsZXMgd2hhdCB0aGUgdXNlciBzZWVzCiAgICAgICAgICAgICAv
LyBvbiB0aGUgd2ViIHBhZ2UuIFRoaXMgaW5jbHVkZXMgcmVwbGFjaW5nIG5ld2xpbmVzIHdpdGgg
c3BhY2VzLgotICAgICAgICAgICAgc3JjLT5lZGl0b3IoKS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRl
c3RSZXN1bHQudGV4dENvbnRlbnQoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKSwgY2xpcGJvYXJkLT5w
YXN0ZWJvYXJkKCkpOworICAgICAgICAgICAgc3JjLmVkaXRvcigpLmNvcHlVUkwobGlua1VSTCwg
aGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLCBjbGlwYm9h
cmQucGFzdGVib2FyZCgpKTsKIAotICAgICAgICBpZiAoc3JjLT5zZWxlY3Rpb24oKS5pc0NhcmV0
KCkgJiYgc3JjLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGlm
IChzcmMuc2VsZWN0aW9uKCkuaXNDYXJldCgpICYmIHNyYy5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBhIHVzZXIgY2FuIGluaXRpYXRlIGEgZHJhZyBv
biBhIGxpbmsgd2l0aG91dCBoYXZpbmcgYW55IHRleHQKICAgICAgICAgICAgIC8vIHNlbGVjdGVk
LiAgSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgZXhwYW5kIHRoZSBzZWxlY3Rpb24gdG8KICAgICAg
ICAgICAgIC8vIHRoZSBlbmNsb3NpbmcgYW5jaG9yIGVsZW1lbnQKLSAgICAgICAgICAgIFBvc2l0
aW9uIHBvcyA9IHNyYy0+c2VsZWN0aW9uKCkuYmFzZSgpOworICAgICAgICAgICAgUG9zaXRpb24g
cG9zID0gc3JjLnNlbGVjdGlvbigpLmJhc2UoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBl
bmNsb3NpbmdBbmNob3JFbGVtZW50KHBvcyk7CiAgICAgICAgICAgICBpZiAobm9kZSkKLSAgICAg
ICAgICAgICAgICBzcmMtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
OjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHNy
Yy5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJv
bUNvbnRlbnRzT2ZOb2RlKG5vZGUpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fY2xpZW50Lndp
bGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uTGluaywgZHJhZ09yaWdp
biwgY2xpcGJvYXJkKTsKICAgICAgICAgaWYgKCFkcmFnSW1hZ2UpIHsKLSAgICAgICAgICAgIGRy
YWdJbWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZvckxpbmsobGlua1VSTCwgaGl0VGVzdFJlc3VsdC50
ZXh0Q29udGVudCgpLCBzcmMtPnNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAg
ICAgICAgICBkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKGxpbmtVUkwsIGhpdFRl
c3RSZXN1bHQudGV4dENvbnRlbnQoKSwgc3JjLnNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUo
KSk7CiAgICAgICAgICAgICBJbnRTaXplIHNpemUgPSBkcmFnSW1hZ2VTaXplKGRyYWdJbWFnZSk7
CiAgICAgICAgICAgICBtX2RyYWdPZmZzZXQgPSBJbnRQb2ludCgtc2l6ZS53aWR0aCgpIC8gMiwg
LUxpbmtEcmFnQm9yZGVySW5zZXQpOwogICAgICAgICAgICAgZHJhZ0xvYyA9IEludFBvaW50KG1v
dXNlRHJhZ2dlZFBvaW50LngoKSArIG1fZHJhZ09mZnNldC54KCksIG1vdXNlRHJhZ2dlZFBvaW50
LnkoKSArIG1fZHJhZ09mZnNldC55KCkpOwpAQCAtODYxLDcgKzg0OCw3IEBAIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKICAgICByZXR1cm4gc3RhcnRlZERyYWc7CiB9
CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IEludFBvaW50JiBkcmFnT3JpZ2luLCBjb25zdCBJbnRSZWN0JiByZWN0LCBDbGlwYm9hcmQq
IGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lLCBJbnRQb2ludCYgZHJhZ0ltYWdlT2Zmc2V0KQordm9p
ZCBEcmFnQ29udHJvbGxlcjo6ZG9JbWFnZURyYWcoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgSW50
UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0IEludFJlY3QmIHJlY3QsIENsaXBib2FyZCYgY2xpcGJv
YXJkLCBGcmFtZSYgZnJhbWUsIEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQpCiB7CiAgICAgSW50
UG9pbnQgbW91c2VEb3duUG9pbnQgPSBkcmFnT3JpZ2luOwogICAgIERyYWdJbWFnZVJlZiBkcmFn
SW1hZ2UgPSAwOwpAQCAtODY5LDcgKzg1Niw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1h
Z2VEcmFnKEVsZW1lbnQKIAogICAgIEltYWdlKiBpbWFnZSA9IGdldEltYWdlKGVsZW1lbnQpOwog
ICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpICogaW1hZ2UtPnNpemUoKS53
aWR0aCgpIDw9IE1heE9yaWdpbmFsSW1hZ2VBcmVhCi0gICAgICAgICYmIChkcmFnSW1hZ2UgPSBj
cmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UsIGVsZW1lbnQtPnJlbmRlcmVyKCkgPyBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oZWxlbWVudC0+cmVuZGVyZXIoKS0+c2hvdWxkUmVzcGVj
dEltYWdlT3JpZW50YXRpb24oKSkgOiBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkpKSB7
CisgICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2Us
IGVsZW1lbnQucmVuZGVyZXIoKSA/IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihlbGVtZW50
LnJlbmRlcmVyKCktPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkpIDogSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uKCkpKSkgewogICAgICAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZSA9
IHJlY3Quc2l6ZSgpOwogICAgICAgICBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CiAKQEAgLTkw
MywxNSArODkwLDE1IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQK
ICAgICBkZWxldGVEcmFnSW1hZ2UoZHJhZ0ltYWdlKTsKIH0KIAotdm9pZCBEcmFnQ29udHJvbGxl
cjo6ZG9TeXN0ZW1EcmFnKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdM
b2MsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1l
KiBmcmFtZSwgYm9vbCBmb3JMaW5rKQordm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFn
KERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdMb2MsIGNvbnN0IEludFBv
aW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBm
b3JMaW5rKQogewogICAgIG1fZGlkSW5pdGlhdGVEcmFnID0gdHJ1ZTsKLSAgICBtX2RyYWdJbml0
aWF0b3IgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBtX2RyYWdJbml0aWF0b3IgPSBmcmFtZS5k
b2N1bWVudCgpOwogICAgIC8vIFByb3RlY3QgdGhpcyBmcmFtZSBhbmQgdmlldywgYXMgYSBsb2Fk
IG1heSBvY2N1ciBtaWQgZHJhZyBhbmQgYXR0ZW1wdCB0byB1bmxvYWQgdGhpcyBmcmFtZQogICAg
IFJlZjxNYWluRnJhbWU+IGZyYW1lUHJvdGVjdG9yKG1fcGFnZS5tYWluRnJhbWUoKSk7CiAgICAg
UmVmUHRyPEZyYW1lVmlldz4gdmlld1Byb3RlY3RvciA9IGZyYW1lUHJvdGVjdG9yLT52aWV3KCk7
Ci0gICAgbV9jbGllbnQuc3RhcnREcmFnKGltYWdlLCB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1Rv
Q29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGRyYWdMb2MpKSwKLSAg
ICAgICAgdmlld1Byb3RlY3Rvci0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNv
bnRlbnRzVG9Sb290VmlldyhldmVudFBvcykpLCBjbGlwYm9hcmQsICZmcmFtZVByb3RlY3Rvci5n
ZXQoKSwgZm9yTGluayk7CisgICAgbV9jbGllbnQuc3RhcnREcmFnKGltYWdlLCB2aWV3UHJvdGVj
dG9yLT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXco
ZHJhZ0xvYykpLAorICAgICAgICB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29udGVudHMoZnJh
bWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZXZlbnRQb3MpKSwgY2xpcGJvYXJkLCBmcmFt
ZVByb3RlY3Rvci5nZXQoKSwgZm9yTGluayk7CiAgICAgLy8gRHJhZ0NsaWVudDo6c3RhcnREcmFn
IGNhbiBjYXVzZSBvdXIgUGFnZSB0byBkaXNwZWFyLCBkZWFsbG9jYXRpbmcgfHRoaXN8LgogICAg
IGlmICghZnJhbWVQcm90ZWN0b3ItPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCAr
NTgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIERyYWdDbGllbnQmIGNsaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICAgICAgRHJhZ1Nlc3Npb24gZHJh
Z0VudGVyZWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgdm9pZCBkcmFnRXhpdGVkKERyYWdEYXRhKik7
Ci0gICAgICAgIERyYWdTZXNzaW9uIGRyYWdVcGRhdGVkKERyYWdEYXRhKik7Ci0gICAgICAgIGJv
b2wgcGVyZm9ybURyYWcoRHJhZ0RhdGEqKTsKKyAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVy
ZWQoRHJhZ0RhdGEmKTsKKyAgICAgICAgdm9pZCBkcmFnRXhpdGVkKERyYWdEYXRhJik7CisgICAg
ICAgIERyYWdTZXNzaW9uIGRyYWdVcGRhdGVkKERyYWdEYXRhJik7CisgICAgICAgIGJvb2wgcGVy
Zm9ybURyYWcoRHJhZ0RhdGEmKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJdCBzaG91
bGQgYmUgcG9zc2libGUgdG8gcmVtb3ZlIGEgbnVtYmVyIG9mIHRoZXNlIGFjY2Vzc29ycyBvbmNl
IGFsbAogICAgICAgICAvLyBkcmFnIGxvZ2ljIGlzIGluIFdlYkNvcmUuCkBAIC04Miw3ICs4Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcGxhY2VEcmFn
Q2FyZXQoY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgc3RhcnREcmFn
KEZyYW1lKiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYsIERyYWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdp
bik7CisgICAgICAgIGJvb2wgc3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYs
IERyYWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50
LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBJbnRT
aXplJiBtYXhEcmFnSW1hZ2VTaXplKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IExpbmtEcmFnQm9yZGVySW5zZXQ7CkBAIC05MiwyNCArOTIsMjQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgRHJhZ0ltYWdlQWxwaGE7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBib29sIGRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUq
LCBEcmFnRGF0YSopOwotICAgICAgICBib29sIGNhblByb2Nlc3NEcmFnKERyYWdEYXRhKik7Ci0g
ICAgICAgIGJvb2wgY29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSopOwotICAgICAgICBEcmFnU2Vz
c2lvbiBkcmFnRW50ZXJlZE9yVXBkYXRlZChEcmFnRGF0YSopOwotICAgICAgICBEcmFnT3BlcmF0
aW9uIG9wZXJhdGlvbkZvckxvYWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgYm9vbCB0cnlEb2N1bWVu
dERyYWcoRHJhZ0RhdGEqLCBEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdTZXNzaW9uJik7Ci0g
ICAgICAgIGJvb2wgdHJ5REhUTUxEcmFnKERyYWdEYXRhKiwgRHJhZ09wZXJhdGlvbiYpOwotICAg
ICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqKTsKKyAgICAgICAgYm9v
bCBkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiwgRHJhZ0RhdGEmKTsKKyAgICAgICAg
Ym9vbCBjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSYpOworICAgICAgICBib29sIGNvbmNsdWRlRWRp
dERyYWcoRHJhZ0RhdGEmKTsKKyAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVyZWRPclVwZGF0
ZWQoRHJhZ0RhdGEmKTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb25Gb3JMb2FkKERy
YWdEYXRhJik7CisgICAgICAgIGJvb2wgdHJ5RG9jdW1lbnREcmFnKERyYWdEYXRhJiwgRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uLCBEcmFnU2Vzc2lvbiYpOworICAgICAgICBib29sIHRyeURIVE1MRHJh
ZyhEcmFnRGF0YSYsIERyYWdPcGVyYXRpb24mKTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBkcmFn
T3BlcmF0aW9uKERyYWdEYXRhJik7CiAgICAgICAgIHZvaWQgY2FuY2VsRHJhZygpOwotICAgICAg
ICBib29sIGRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mLCBEcmFnRGF0YSopOwotICAgICAgICBi
b29sIGlzQ29weUtleURvd24oRHJhZ0RhdGEqKTsKKyAgICAgICAgYm9vbCBkcmFnSXNNb3ZlKEZy
YW1lU2VsZWN0aW9uJiwgRHJhZ0RhdGEmKTsKKyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERy
YWdEYXRhJik7CiAKICAgICAgICAgdm9pZCBtb3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50
Kik7CiAKLSAgICAgICAgdm9pZCBkb0ltYWdlRHJhZyhFbGVtZW50KiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRSZWN0JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBJbnRQb2ludCYpOwotICAgICAg
ICB2b2lkIGRvU3lzdGVtRHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3Qg
SW50UG9pbnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wgZm9yTGluayk7CisgICAgICAgIHZv
aWQgZG9JbWFnZURyYWcoRWxlbWVudCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYs
IENsaXBib2FyZCYsIEZyYW1lJiwgSW50UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkb1N5c3RlbURy
YWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJv
YXJkJiwgRnJhbWUmLCBib29sIGZvckxpbmspOwogICAgICAgICB2b2lkIGNsZWFudXBBZnRlclN5
c3RlbURyYWcoKTsKLSAgICAgICAgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJv
YXJkKiwgRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgICAg
ICB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQmLCBFbGVtZW50JiwgY29u
c3QgVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAKICAgICAgICAgUGFnZSYgbV9wYWdlOwog
ICAgICAgICBEcmFnQ2xpZW50JiBtX2NsaWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY2OCw3ICszNjY4LDcgQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmhhbmRsZURyYWcoY29uc3QgTW91cwogICAgIAogICAgIGlmIChtX21vdXNl
RG93bk1heVN0YXJ0RHJhZykgewogICAgICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7
Ci0gICAgICAgIG1fZGlkU3RhcnREcmFnID0gcGFnZSAmJiBwYWdlLT5kcmFnQ29udHJvbGxlcigp
LnN0YXJ0RHJhZygmbV9mcmFtZSwgZHJhZ1N0YXRlKCksIHNyY09wLCBldmVudC5ldmVudCgpLCBt
X21vdXNlRG93blBvcyk7CisgICAgICAgIG1fZGlkU3RhcnREcmFnID0gcGFnZSAmJiBwYWdlLT5k
cmFnQ29udHJvbGxlcigpLnN0YXJ0RHJhZyhtX2ZyYW1lLCBkcmFnU3RhdGUoKSwgc3JjT3AsIGV2
ZW50LmV2ZW50KCksIG1fbW91c2VEb3duUG9zKTsKICAgICAgICAgLy8gSW4gV2ViS2l0MiB3ZSBj
b3VsZCByZS1lbnRlciB0aGlzIGNvZGUgYW5kIHN0YXJ0IGFub3RoZXIgZHJhZy4KICAgICAgICAg
Ly8gT24gT1MgWCB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHRoZSBvd25lcnNoaXAgb2YgdGhl
IHBhc3RlYm9hcmQgYW5kIHRoZSBwcm9taXNlZCB0eXBlcy4KICAgICAgICAgaWYgKG1fZGlkU3Rh
cnREcmFnKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVm
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xs
ZXJFZmwuY3BwCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9E
cmFnQ29udHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0MywxNCBAQCBj
b25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERy
YWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29w
eUtleURvd24oRHJhZ0RhdGEmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRHJhZ09wZXJh
dGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitE
cmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFn
RGF0YSkKIHsKLSAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKDApKQorICAgIGlmIChkcmFn
RGF0YS5jb250YWluc1VSTCgwKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5Owog
CiAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIERy
YWdDb250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRy
b2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqLCBFbGVtZW50KiwgY29u
c3QgVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZShDbGlwYm9hcmQmLCBFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3Ry
aW5nJikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xs
ZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250
cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9n
dGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMTUg
QEAgY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9h
dCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29u
dHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCitib29sIERyYWdDb250cm9sbGVyOjpp
c0NvcHlLZXlEb3duKERyYWdEYXRhJikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLURyYWdP
cGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqIGRyYWdEYXRh
KQorRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiB7CiAgICAgLy9GSVhNRTogVGhpcyBsb2dpYyBpcyBpbmNvbXBsZXRlCi0gICAg
IGlmIChkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkpCisgICAgIGlmIChkcmFnRGF0YS5jb250YWlu
c1VSTCgwKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5OwogCiAgICAgcmV0dXJu
IERyYWdPcGVyYXRpb25Ob25lOwpAQCAtNjksOSArNjksOSBAQCB2b2lkIERyYWdDb250cm9sbGVy
OjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xh
cmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdDb250cm9s
bGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAg
IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLndyaXRlSW1hZ2UoZWxlbWVudCwgdXJsLCBsYWJlbCk7
CisgICAgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS53cml0ZUltYWdlKGVsZW1lbnQsIHVybCwgbGFi
ZWwpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJv
bGxlck1hYy5tbQkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RHJhZ0NvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogCiAjaW1wb3J0ICJDbGlwYm9hcmQuaCIKLSNpbXBvcnQg
IkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAi
RHJhZ0RhdGEuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKQEAgLTQ4LDE5ICs0NywxNyBAQCBjb25z
dCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdD
b250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVy
Ojppc0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6
OmlzQ29weUtleURvd24oRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIHJldHVybiBkcmFnRGF0
YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAgcmV0dXJuIGRy
YWdEYXRhLmZsYWdzKCkgJiBEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duOwogfQogICAgIAot
RHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJh
Z0RhdGEpCitEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdE
YXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotCi0gICAgaWYgKChkcmFn
RGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzTW9kYWwpIHx8ICFkcmFnRGF0YS0+Y29u
dGFpbnNVUkwoJm1fcGFnZS5tYWluRnJhbWUoKSkpCisgICAgaWYgKChkcmFnRGF0YS5mbGFncygp
ICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLmNvbnRhaW5zVVJMKCZtX3Bh
Z2UubWFpbkZyYW1lKCkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CiAKLSAg
ICBpZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgKERy
YWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVkU2hlZXQgfCBEcmFnQXBwbGljYXRpb25Jc1NvdXJjZSkp
KSkKKyAgICBpZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLmZsYWdzKCkg
JiAoRHJhZ0FwcGxpY2F0aW9uSGFzQXR0YWNoZWRTaGVldCB8IERyYWdBcHBsaWNhdGlvbklzU291
cmNlKSkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7CiAKICAgICByZXR1cm4g
RHJhZ09wZXJhdGlvbk5vbmU7CkBAIC04NSw5ICs4Miw5IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6
OmNsZWFudXBBZnRlclN5c3RlbUQKICAgICAgICAgZHJhZ0VuZGVkKCk7CiB9CiAKLXZvaWQgRHJh
Z0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2Fy
ZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwp
Cit2b2lkIERyYWdDb250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJk
JiBjbGlwYm9hcmQsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGxhYmVsKQogewotICAgIG1fY2xpZW50LmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjbGlw
Ym9hcmQtPnBhc3RlYm9hcmQoKS5uYW1lKCksIGtpdChlbGVtZW50KSwgdXJsLCBsYWJlbCwgZWxl
bWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICBtX2NsaWVudC5kZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UoY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1lKCksIGVsZW1lbnQsIHVybCwgbGFi
ZWwsIGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2lu
LmNwcAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0Nv
bnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMTYgQEAgY29uc3Qg
aW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29u
dHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotRHJhZ09wZXJhdGlvbiBEcmFnQ29u
dHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnT3BlcmF0aW9u
IERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAg
ICAvL0ZJWE1FOiB0byBtYXRjaCB0aGUgbWFjb3MgYmVoYXZpb3VyIHdlIHNob3VsZCByZXR1cm4g
RHJhZ09wZXJhdGlvbk5vbmUKICAgICAvL2lmIHdlIGFyZSBhIG1vZGFsIHdpbmRvdywgd2UgYXJl
IHRoZSBkcmFnIHNvdXJjZSwgb3IgdGhlIHdpbmRvdyBpcyBhbiBhdHRhY2hlZCBzaGVldAogICAg
IC8vSWYgdGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHdpdGhpbiBXZWJDb3JlIG9wZXJhdGlv
bkZvckRyYWcgY2FuIGJlIHB1bGxlZCBpbnRvIAogICAgIC8vV2ViQ29yZSBpdHNlbGYKLSAgICBB
U1NFUlQoZHJhZ0RhdGEpOwotICAgIHJldHVybiBkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkgJiYg
IW1fZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9u
ZTsKKyAgICByZXR1cm4gZHJhZ0RhdGEuY29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVE
cmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAotYm9vbCBE
cmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCitib29sIERyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhJikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tl
eVN0YXRlKFZLX0NPTlRST0wpOwogfQpAQCAtNzAsOSArNjksOSBAQCB2b2lkIERyYWdDb250cm9s
bGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRl
Y2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdDb250
cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewot
ICAgIFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKTsKKyAg
ICBQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkID0gY2xpcGJvYXJkLnBhc3RlYm9hcmQoKTsKIAogICAg
IC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0aGlzIGNoZWNrPwogICAgIGlmICghcGFzdGVi
b2FyZC53cml0YWJsZURhdGFPYmplY3QoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0Rh
dGEuaAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0Rh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDggKzEwNCw3IEBAIHB1YmxpYzoKICAgICBTdHJp
bmcgYXNQbGFpblRleHQoRnJhbWUqKSBjb25zdDsKICAgICB2b2lkIGFzRmlsZW5hbWVzKFZlY3Rv
cjxTdHJpbmc+JikgY29uc3Q7CiAgICAgQ29sb3IgYXNDb2xvcigpIGNvbnN0OwotICAgIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gYXNGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFu
Z2U+IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSBjb25zdDsKKyAgICBQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGFzRnJhZ21lbnQoRnJhbWUqLCBSYW5nZSYgY29u
dGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpIGNvbnN0Owog
ICAgIGJvb2wgY2FuU21hcnRSZXBsYWNlKCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0NvbG9y
KCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0ZpbGVzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCwyMSArMTY0
LDE1IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShX
SU4pCi0gICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50KEZy
YW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3Nl
UGxhaW5UZXh0KTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCi0gICAgdm9pZCB3cml0ZUltYWdlKE5vZGUq
LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsgLy8gRklYTUU6IExheWVyaW5nIHZp
b2xhdGlvbi4KLSAgICB2b2lkIHdyaXRlU2VsZWN0aW9uKFJhbmdlKiwgYm9vbCBjYW5TbWFydENv
cHlPckRlbGV0ZSwgRnJhbWUqLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQgPSBEZWZhdWx0U2VsZWN0ZWRUZXh0VHlwZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRp
b24uCisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50KEZy
YW1lJiwgUmFuZ2UmLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7
IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCisgICAgdm9pZCB3cml0ZUltYWdlKEVsZW1l
bnQmLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsgLy8gRklYTUU6IExheWVyaW5n
IHZpb2xhdGlvbi4KKyAgICB2b2lkIHdyaXRlU2VsZWN0aW9uKFJhbmdlJiwgYm9vbCBjYW5TbWFy
dENvcHlPckRlbGV0ZSwgRnJhbWUmLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQgPSBEZWZhdWx0U2VsZWN0ZWRUZXh0VHlwZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9s
YXRpb24uCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICBzdGF0aWMgUGFzc093blB0
cjxQYXN0ZWJvYXJkPiBjcmVhdGUoUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPik7CiAgICAgc3Rh
dGljIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gY3JlYXRlKEd0a0NsaXBib2FyZCopOwogICAgIFBh
c3NSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCgpIGNvbnN0OwotI2VuZGlmCi0KLSNp
ZiBQTEFURk9STShHVEspCiAgICAgc3RhdGljIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gY3JlYXRl
Rm9yR2xvYmFsU2VsZWN0aW9uKCk7CiAjZW5kaWYKIApAQCAtMTk5LDcgKzE5Myw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldEV4dGVybmFsRGF0YU9iamVjdChJRGF0YU9iamVjdCopOwogICAgIHZv
aWQgd3JpdGVVUkxUb1dyaXRhYmxlRGF0YU9iamVjdChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcm
KTsKICAgICBDT01QdHI8V0NEYXRhT2JqZWN0PiB3cml0YWJsZURhdGFPYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX3dyaXRhYmxlRGF0YU9iamVjdDsgfQotICAgIHZvaWQgd3JpdGVJbWFnZVRvRGF0
YU9iamVjdChFbGVtZW50KiwgY29uc3QgVVJMJik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRp
b24uCisgICAgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KEVsZW1lbnQmLCBjb25zdCBVUkwm
KTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KICNlbmRpZgogCiBwcml2YXRlOgpAQCAt
MjE2LDcgKzIxMCw3IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgUGFzdGVib2FyZChjb25zdCBE
cmFnRGF0YU1hcCYpOwogCiAgICAgdm9pZCBmaW5pc2hDcmVhdGluZ1Bhc3RlYm9hcmQoKTsKLSAg
ICB2b2lkIHdyaXRlUmFuZ2VUb0RhdGFPYmplY3QoUmFuZ2UqLCBGcmFtZSopOyAvLyBGSVhNRTog
TGF5ZXJpbmcgdmlvbGF0aW9uLgorICAgIHZvaWQgd3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5n
ZSYsIEZyYW1lJik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAgICAgdm9pZCB3cml0
ZVVSTFRvRGF0YU9iamVjdChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHdy
aXRlUGxhaW5UZXh0VG9EYXRhT2JqZWN0KGNvbnN0IFN0cmluZyYsIFNtYXJ0UmVwbGFjZU9wdGlv
bik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9EcmFnRGF0YUVm
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdEYXRh
RWZsLmNwcAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZs
L0RyYWdEYXRhRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBTdHJpbmcg
RHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZy
YW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wmKSBjb25zdAorUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSosIFJhbmdlJiwgYm9v
bCwgYm9vbCYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkyLDcgKzkyLDcgQEAgU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1l
QwogfQogCiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21l
bnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0CitQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBm
cmFtZSwgUmFuZ2UmLCBib29sLCBib29sJikgY29uc3QKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1E
cmFnRGF0YS0+aGFzTWFya3VwKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIu
Y3BwCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3Rr
RHJhZ0FuZERyb3BIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHZv
aWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWEKICAgICBEcmFnRGF0YSBkcmFn
RGF0YShjb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2lkZ2V0LCBwb3NpdGlv
biksCiAgICAgICAgICAgICAgICAgICAgICAgRHJhZ09wZXJhdGlvbk5vbmUpOwotICAgIGNvbnRl
eHQtPmV4aXRlZENhbGxiYWNrKG1fd2lkZ2V0LCAmZHJhZ0RhdGEsIGNvbnRleHQtPmRyb3BIYXBw
ZW5lZCk7CisgICAgY29udGV4dC0+ZXhpdGVkQ2FsbGJhY2sobV93aWRnZXQsIGRyYWdEYXRhLCBj
b250ZXh0LT5kcm9wSGFwcGVuZWQpOwogCiAgICAgbV9kcm9wcGluZ0NvbnRleHRzLnJlbW92ZShp
dGVyYXRvcik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0Fu
ZERyb3BIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrRHJhZ0FuZERyb3BIZWxwZXIuaAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDcgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IERyb3BwaW5nQ29udGV4
dDsKIGNsYXNzIERyYWdEYXRhOwogCi10eXBlZGVmIHZvaWQgKCpEcmFnRXhpdGVkQ2FsbGJhY2sp
KEd0a1dpZGdldCosIERyYWdEYXRhKiwgYm9vbCBkcm9wSGFwcGVuZWQpOwordHlwZWRlZiB2b2lk
ICgqRHJhZ0V4aXRlZENhbGxiYWNrKShHdGtXaWRnZXQqLCBEcmFnRGF0YSYsIGJvb2wgZHJvcEhh
cHBlbmVkKTsKIAogY2xhc3MgR3RrRHJhZ0FuZERyb3BIZWxwZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEd0a0RyYWdBbmREcm9wSGVscGVyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU3LDExICsxNTcsMTEgQEAgYm9vbCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25z
dCBTdHJpbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNl
bGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwg
RnJhbWUqIGZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgc2hv
dWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQordm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZVNlbGVjdGlvbihSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRl
bGV0ZSwgRnJhbWUmIGZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQgc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQogewogICAgIG1fZGF0
YU9iamVjdC0+Y2xlYXJBbGwoKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldFRleHQoc2hvdWxkU2Vy
aWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID09IEluY2x1ZGVJbWFnZUFsdFRleHRGb3JD
bGlwYm9hcmQgPyBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCkgOiBm
cmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0KCkpOwotICAgIG1fZGF0YU9iamVjdC0+c2V0TWFy
a3VwKGNyZWF0ZU1hcmt1cCgqc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKKyAgICBtX2RhdGFPYmplY3QtPnNldFRl
eHQoc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID09IEluY2x1ZGVJbWFn
ZUFsdFRleHRGb3JDbGlwYm9hcmQgPyBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSA6IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKKyAgICBtX2RhdGFPYmpl
Y3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKIAogICAgIGlmIChtX2d0
a0NsaXBib2FyZCkKICAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRI
ZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCwgY2FuU21hcnRD
b3B5T3JEZWxldGUgPyBQYXN0ZWJvYXJkSGVscGVyOjpJbmNsdWRlU21hcnRQYXN0ZSA6IFBhc3Rl
Ym9hcmRIZWxwZXI6OkRvTm90SW5jbHVkZVNtYXJ0UGFzdGUpOwpAQCAtMTg3LDMxICsxODcsMjgg
QEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkVQogICAgICAgICBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENv
bnRlbnRzKG1fZ3RrQ2xpcGJvYXJkKTsKIH0KIAotc3RhdGljIFVSTCBnZXRVUkxGb3JJbWFnZU5v
ZGUoTm9kZSogbm9kZSkKK3N0YXRpYyBVUkwgZ2V0VVJMRm9ySW1hZ2VFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IExhdGVyIHRoaXMgY29kZSBzaG91bGQgYmUgc2hh
cmVkIHdpdGggQ2hyb21pdW0gc29tZWhvdy4gQ2hhbmNlcyBhcmUgYWxsIHBsYXRmb3JtcyB3YW50
IGl0LgogICAgIEF0b21pY1N0cmluZyB1cmxTdHJpbmc7Ci0gICAgaWYgKGlzSFRNTEltYWdlRWxl
bWVudChub2RlKSB8fCBpc0hUTUxJbnB1dEVsZW1lbnQobm9kZSkpCi0gICAgICAgIHVybFN0cmlu
ZyA9IHRvRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7Cisg
ICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChlbGVtZW50KSB8fCBpc0hUTUxJbnB1dEVsZW1lbnQo
ZWxlbWVudCkpCisgICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEhUTUxO
YW1lczo6c3JjQXR0cik7CiAjaWYgRU5BQkxFKFNWRykKLSAgICBlbHNlIGlmIChub2RlLT5oYXNU
YWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHRvRWxlbWVu
dChub2RlKS0+Z2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmltYWdlVGFnKSkKKyAgICAgICAgdXJsU3Ry
aW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOwogI2VuZGlm
Ci0gICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSB8fCBp
c0hUTUxPYmplY3RFbGVtZW50KG5vZGUpKSB7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0VsZW1lbnQobm9kZSk7Ci0gICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmltYWdlU291cmNl
VVJMKCk7Ci0gICAgfQotICAgIHJldHVybiB1cmxTdHJpbmcuaXNFbXB0eSgpID8gVVJMKCkgOiBu
b2RlLT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNw
YWNlcyh1cmxTdHJpbmcpKTsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjplbWJlZFRhZykgfHwgaXNIVE1MT2JqZWN0RWxlbWVudChlbGVtZW50KSkKKyAgICAgICAg
dXJsU3RyaW5nID0gZWxlbWVudC5pbWFnZVNvdXJjZVVSTCgpOworCisgICAgcmV0dXJuIHVybFN0
cmluZy5pc0VtcHR5KCkgPyBVUkwoKSA6IGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChz
dHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7CiB9CiAKLXZvaWQg
UGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBVUkwmLCBjb25zdCBTdHJp
bmcmIHRpdGxlKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwot
Ci0gICAgaWYgKCEobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdl
KCkpKQorICAgIGlmICghKGVsZW1lbnQucmVuZGVyZXIoKSAmJiBlbGVtZW50LnJlbmRlcmVyKCkt
PmlzSW1hZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlckltYWdlKiByZW5kZXJl
ciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVySW1hZ2UqIHJl
bmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LnJlbmRlcmVyKCkpOwogICAgIENhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIGlmICghY2Fj
aGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjIwLDExICsyMTcsMTEgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUq
IG5vZGUsIAogCiAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwogCi0gICAgVVJMIHVybCA9
IGdldFVSTEZvckltYWdlTm9kZShub2RlKTsKKyAgICBVUkwgdXJsID0gZ2V0VVJMRm9ySW1hZ2VF
bGVtZW50KGVsZW1lbnQpOwogICAgIGlmICghdXJsLmlzRW1wdHkoKSkgewogICAgICAgICBtX2Rh
dGFPYmplY3QtPnNldFVSTCh1cmwsIHRpdGxlKTsKIAotICAgICAgICBtX2RhdGFPYmplY3QtPnNl
dE1hcmt1cChjcmVhdGVNYXJrdXAoKnRvRWxlbWVudChub2RlKSwgSW5jbHVkZU5vZGUsIDAsIFJl
c29sdmVBbGxVUkxzKSk7CisgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1h
cmt1cChlbGVtZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKICAgICB9CiAK
ICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmID0gYWRvcHRHUmVmKGltYWdlLT5nZXRHZGtQ
aXhidWYoKSk7CkBAIC0zMDIsOCArMjk5LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjpzZXREcmFnSW1h
Z2UoRHJhZ0ltYWdlUgogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFu
Z2U+IGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQp
CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21l
bnQoRnJhbWUmIGZyYW1lLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9v
bCYgY2hvc2VQbGFpblRleHQpCiB7CiAgICAgaWYgKG1fZ3RrQ2xpcGJvYXJkKQogICAgICAgICBQ
YXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5nZXRDbGlwYm9hcmRD
b250ZW50cyhtX2d0a0NsaXBib2FyZCk7CkBAIC0zMTEsOCArMzA3LDggQEAgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNNYXJrdXAoKSkgewotICAgICAgICBpZiAoZnJh
bWUtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUtPmRvY3VtZW50KCksIG1f
ZGF0YU9iamVjdC0+bWFya3VwKCksIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5k
UGx1Z2luQ29udGVudCk7CisgICAgICAgIGlmIChmcmFtZS5kb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXAoKmZyYW1lLmRvY3VtZW50KCksIG1fZGF0YU9iamVjdC0+bWFya3VwKCksIGVtcHR5
U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAgICAgICAgICAg
ICBpZiAoZnJhZ21lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2Uo
KTsKICAgICAgICAgfQpAQCAtMzIzLDcgKzMxOSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gUGFzdGVib2FyZDoKIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc1RleHQoKSkgewog
ICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwg
bV9kYXRhT2JqZWN0LT50ZXh0KCkpOworICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQsIG1fZGF0YU9iamVjdC0+
dGV4dCgpKTsKICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZyYWdt
ZW50LnJlbGVhc2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
RHJhZ0RhdGFNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0RyYWdEYXRhTWFjLm1tCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvRHJhZ0RhdGFNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4OSwxMCArMTg5LDEw
IEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqIGZyYW1lLCBGaWwKICAgICByZXR1cm4g
U3RyaW5nKCk7ICAgICAgICAKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFn
RGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlLCBi
b29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkgY29uc3QKK1Bhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBS
YW5nZSYgcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSBj
b25zdAogewogICAgIFBhc3RlYm9hcmQgcGFzdGVib2FyZChtX3Bhc3RlYm9hcmROYW1lKTsKLSAg
ICByZXR1cm4gZnJhbWUtPmVkaXRvcigpLndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChwYXN0ZWJv
YXJkLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisgICAgcmV0dXJu
IGZyYW1lLT5lZGl0b3IoKS53ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCwgcmFu
Z2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiB9CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0
YVdpbi5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnRGF0YVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw3ICsyMDYsNyBAQCBib29s
IERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50CiAgICAgICAgIHx8IGNvbnRhaW5z
Q29sb3IoKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNG
cmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sLCBib29sJikgY29u
c3QKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJh
bWUqIGZyYW1lLCBSYW5nZSYsIGJvb2wsIGJvb2wmKSBjb25zdAogeyAgICAgCiAgICAgLyoKICAg
ICAgKiBPcmRlciBpcyByaWNoZXN0IGZvcm1hdCBmaXJzdC4gT24gT1NYIHRoaXMgaXM6CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCShyZXZp
c2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyMiw5ICs0MjIsOCBAQCB2b2lkIFBhc3RlYm9hcmQ6
OnNldERyYWdJbWFnZShEcmFnSW1hZ2VSCiB9CiAjZW5kaWYKIAotdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBGcmFtZSogZnJhbWUp
Cit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUmFuZ2VUb0RhdGFPYmplY3QoUmFuZ2UmIHNlbGVjdGVk
UmFuZ2UsIEZyYW1lJiBmcmFtZSkKIHsKLSAgICBBU1NFUlQoc2VsZWN0ZWRSYW5nZSk7CiAgICAg
aWYgKCFtX3dyaXRhYmxlRGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MzIsMTMg
KzQzMSwxMyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUmFuZ2VUb0RhdGFPYmplY3QoCiAgICAg
bWVkaXVtLnR5bWVkID0gVFlNRURfSEdMT0JBTDsKIAogICAgIFZlY3RvcjxjaGFyPiBkYXRhOwot
ICAgIG1hcmt1cFRvQ0ZIVE1MKGNyZWF0ZU1hcmt1cCgqc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSksCi0gICAgICAgIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCksIGRhdGEpOworICAgIG1hcmt1cFRvQ0ZIVE1M
KGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKSwK
KyAgICAgICAgc2VsZWN0ZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLnVybCgp
LnN0cmluZygpLCBkYXRhKTsKICAgICBtZWRpdW0uaEdsb2JhbCA9IGNyZWF0ZUdsb2JhbERhdGEo
ZGF0YSk7CiAgICAgaWYgKG1lZGl1bS5oR2xvYmFsICYmIEZBSUxFRChtX3dyaXRhYmxlRGF0YU9i
amVjdC0+U2V0RGF0YShodG1sRm9ybWF0KCksICZtZWRpdW0sIFRSVUUpKSkKICAgICAgICAgOjpH
bG9iYWxGcmVlKG1lZGl1bS5oR2xvYmFsKTsKIAotICAgIFN0cmluZyBzdHIgPSBmcmFtZS0+ZWRp
dG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCk7CisgICAgU3RyaW5nIHN0ciA9IGZyYW1l
LmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpOwogICAgIHJlcGxhY2VOZXdsaW5l
c1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIpOwogICAgIHJlcGxhY2VOQlNQV2l0aFNwYWNl
KHN0cik7CiAgICAgbWVkaXVtLmhHbG9iYWwgPSBjcmVhdGVHbG9iYWxEYXRhKHN0cik7CkBAIC00
NDYsMTkgKzQ0NSwxOSBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUmFuZ2VUb0RhdGFPYmplY3Qo
CiAgICAgICAgIDo6R2xvYmFsRnJlZShtZWRpdW0uaEdsb2JhbCk7CiAKICAgICBtZWRpdW0uaEds
b2JhbCA9IDA7Ci0gICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRlbGV0ZSgp
KQorICAgIGlmIChmcmFtZS5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRlbGV0ZSgpKQogICAgICAg
ICBtX3dyaXRhYmxlRGF0YU9iamVjdC0+U2V0RGF0YShzbWFydFBhc3RlRm9ybWF0KCksICZtZWRp
dW0sIFRSVUUpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBz
ZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSogZnJhbWUsIFNo
b3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxpemVTZWxl
Y3RlZFRleHRGb3JDbGlwYm9hcmQpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJh
bmdlJiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSYgZnJh
bWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRTZXJpYWxp
emVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQpCiB7CiAgICAgY2xlYXIoKTsKIAogICAgIC8vIFB1
dCBDRl9IVE1MIGZvcm1hdCBvbiB0aGUgcGFzdGVib2FyZCAKICAgICBpZiAoOjpPcGVuQ2xpcGJv
YXJkKG1fb3duZXIpKSB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBkYXRhOwotICAgICAgICBtYXJr
dXBUb0NGSFRNTChjcmVhdGVNYXJrdXAoKnNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2UpLAotICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS51cmwoKS5zdHJpbmcoKSwgZGF0YSk7CisgICAgICAgIG1hcmt1cFRvQ0ZIVE1M
KGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKSwK
KyAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS51
cmwoKS5zdHJpbmcoKSwgZGF0YSk7CiAgICAgICAgIEhHTE9CQUwgY2JEYXRhID0gY3JlYXRlR2xv
YmFsRGF0YShkYXRhKTsKICAgICAgICAgaWYgKCE6OlNldENsaXBib2FyZERhdGEoSFRNTENsaXBi
b2FyZEZvcm1hdCwgY2JEYXRhKSkKICAgICAgICAgICAgIDo6R2xvYmFsRnJlZShjYkRhdGEpOwpA
QCAtNDY2LDcgKzQ2NSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2Uq
IHMKICAgICB9CiAgICAgCiAgICAgLy8gUHV0IHBsYWluIHN0cmluZyBvbiB0aGUgcGFzdGVib2Fy
ZC4gQ0ZfVU5JQ09ERVRFWFQgY292ZXJzIENGX1RFWFQgYXMgd2VsbAotICAgIFN0cmluZyBzdHIg
PSBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVkZUltYWdl
QWx0VGV4dEZvckNsaXBib2FyZCA/IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSA6IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKTsKKyAgICBTdHJpbmcgc3Ry
ID0gc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID09IEluY2x1ZGVJbWFn
ZUFsdFRleHRGb3JDbGlwYm9hcmQgPyBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSA6IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpOwogICAgIHJlcGxhY2VOZXds
aW5lc1dpdGhXaW5kb3dzU3R5bGVOZXdsaW5lcyhzdHIpOwogICAgIHJlcGxhY2VOQlNQV2l0aFNw
YWNlKHN0cik7CiAgICAgaWYgKDo6T3BlbkNsaXBib2FyZChtX293bmVyKSkgewpAQCAtNzI1LDE0
ICs3MjQsMTIgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkVQogICAg
IHdyaXRlVVJMVG9EYXRhT2JqZWN0KHBhc3RlYm9hcmRVUkwudXJsLCBwYXN0ZWJvYXJkVVJMLnRp
dGxlKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0
IFVSTCYsIGNvbnN0IFN0cmluZyYpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBBU1NFUlQobm9k
ZSk7Ci0KLSAgICBpZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlz
SW1hZ2UoKSkpCisgICAgaWYgKCEoZWxlbWVudC5yZW5kZXJlcigpICYmIGVsZW1lbnQucmVuZGVy
ZXIoKS0+aXNJbWFnZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVySW1hZ2UqIHJl
bmRlcmVyID0gdG9SZW5kZXJJbWFnZShub2RlLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJJbWFn
ZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKGVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgQ2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgaWYg
KCFjYWNoZWRJbWFnZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICBy
ZXR1cm47CkBAIC03OTgsNyArNzk1LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9h
cmRQbGFpblRleAogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0
ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4g
Y29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJh
bWUmIGZyYW1lLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hv
c2VQbGFpblRleHQpCiB7CiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKICAgICAKQEAgLTgx
MSw3ICs4MDgsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAg
ICAgICAgICAgICBHbG9iYWxVbmxvY2soY2JEYXRhKTsKICAgICAgICAgICAgIDo6Q2xvc2VDbGlw
Ym9hcmQoKTsKIAotICAgICAgICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGZyYWdtZW50RnJvbUNGSFRNTChmcmFtZS0+ZG9jdW1lbnQoKSwgY2ZodG1sKTsKKyAg
ICAgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFnbWVu
dEZyb21DRkhUTUwoZnJhbWUuZG9jdW1lbnQoKSwgY2ZodG1sKTsKICAgICAgICAgICAgIGlmIChm
cmFnbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgICAgIH0gZWxz
ZSAKQEAgLTgyNyw3ICs4MjQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3Rl
Ym9hcmQ6CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cihidWZmZXIpOwogICAgICAgICAgICAg
ICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgICAgIDo6Q2xvc2VDbGlwYm9h
cmQoKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIHN0cik7CisgICAgICAgICAg
ICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjb250ZXh0LCBzdHIpOwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgICAg
IH0gZWxzZSAKQEAgLTg0NCw3ICs4NDEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IFBhc3RlYm9hcmQ6CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cihidWZmZXIpOwogICAgICAg
ICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgICAgIDo6Q2xvc2VD
bGlwYm9hcmQoKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIHN0cik7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChjb250ZXh0LCBzdHIpOwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVu
dCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAg
ICAgICAgIH0gZWxzZQpAQCAtODYxLDExICs4NTgsMTAgQEAgdm9pZCBQYXN0ZWJvYXJkOjpzZXRF
eHRlcm5hbERhdGFPYmplY3QoSQogICAgIG1fZGF0YU9iamVjdCA9IGRhdGFPYmplY3Q7CiB9CiAK
LXN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3N0
YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICAvLyBBdHRlbXB0IHRvIHB1bGwgQ2FjaGVkSW1hZ2UgZnJvbSBlbGVtZW50Ci0gICAgQVNTRVJU
KGVsZW1lbnQpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJl
cigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkgCiAgICAgICAgIHJldHVy
biAwOwogCkBAIC0xMDAxLDE4ICs5OTcsMTggQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFs
SERyb3BDb250ZW50KAogICAgIHJldHVybiBtZW1PYmo7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6
d3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCkK
K3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBVUkwmIHVybCkKIHsKICAgICAvLyBTaG92ZSBpbWFnZSBkYXRhIGludG8gYSBEYXRh
T2JqZWN0IGZvciB1c2UgYXMgYSBmaWxlCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
Z2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVk
SW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSkgfHwgIWNhY2hlZElt
YWdlLT5pc0xvYWRlZCgpKQorICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKGVsZW1lbnQucmVuZGVyZXIoKSkgfHwgIWNhY2hlZEltYWdlLT5pc0xv
YWRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVy
ID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSktPmRh
dGEoKTsKKyAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FjaGVkSW1hZ2UtPmltYWdl
Rm9yUmVuZGVyZXIoZWxlbWVudC5yZW5kZXJlcigpKS0+ZGF0YSgpOwogICAgIGlmICghaW1hZ2VC
dWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhH
TE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0
b3IodXJsLnN0cmluZygpLCBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRy
KSwgY2FjaGVkSW1hZ2UpOworICAgIEhHTE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9IGNyZWF0
ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IodXJsLnN0cmluZygpLCBlbGVtZW50LmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6OmFsdEF0dHIpLCBjYWNoZWRJbWFnZSk7CiAgICAgaWYgKCFpbWFnZUZp
bGVEZXNjcmlwdG9yKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQzIEBACisyMDEzLTEwLTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJW
aWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFn
TW90aW9uKToKKyAgICAgICAgKGRyYWdFeGl0ZWRDYWxsYmFjayk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZURyYWdEcm9wKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW06CisgICAgICAgICgtW1dLVmlldyBkcmFnZ2luZ0VudGVyZWQ6XSk6CisgICAgICAgICgtW1dL
VmlldyBkcmFnZ2luZ1VwZGF0ZWQ6XSk6CisgICAgICAgICgtW1dLVmlldyBkcmFnZ2luZ0V4aXRl
ZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRyYWdFbnRlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmFn
VXBkYXRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGll
bnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
Q2xpZW50OjpzdGFydERyYWcpOgorICAgICAgICAoV2ViS2l0OjpjYWNoZWRJbWFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorCiAyMDEzLTEwLTA1ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZp
eCB0aGUgR1RLKyBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5NCw0MCArMTE5NCw0MCBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6Y29tbWl0UGFnZVRyYW5zaXRpb25WCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCi12b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0VudGVyZWQoRHJhZ0Rh
dGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkcmFnRW50ZXJlZChEcmFnRGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lKQogewogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hF
eHRlbnNpb25IYW5kbGVFbXB0eUFycmF5OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5hbWUs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYWdVcGRhdGVkKERyYWdEYXRhKiBkcmFnRGF0
YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJh
Z1VwZGF0ZWQoRHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFt
ZSkKIHsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlRW1wdHlBcnJheTsKICAgICBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRy
b2xsZXJBY3Rpb25VcGRhdGVkLCBkcmFnRGF0YSwgZHJhZ1N0b3JhZ2VOYW1lLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlRW1wdHlBcnJheSk7CiB9CiAKLXZv
aWQgV2ViUGFnZVByb3h5OjpkcmFnRXhpdGVkKERyYWdEYXRhKiBkcmFnRGF0YSwgY29uc3QgU3Ry
aW5nJiBkcmFnU3RvcmFnZU5hbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRlZChEcmFn
RGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lKQogewogICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5
OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkV4
aXRlZCwgZHJhZ0RhdGEsIGRyYWdTdG9yYWdlTmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZUVtcHR5QXJyYXkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6cGVyZm9ybURyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9y
YWdlTmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVu
c2lvbnNGb3JVcGxvYWQpCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWcoRHJhZ0RhdGEm
IGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpCiB7CiAgICAg
cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uUGVyZm9ybURy
YWcsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5hbWUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNh
bmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWdE
YXRhKiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKQordm9p
ZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxl
ckFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRib3hFeHRl
bnNpb25zRm9yVXBsb2FkKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
CiAjaWYgUExBVEZPUk0oR1RLKQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgKmRyYWdEYXRhKSwgbV9wYWdl
SUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEpLCBtX3BhZ2VJRCk7CiAjZWxzZQotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLT5nbG9i
YWxQb3NpdGlvbigpLCBkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRy
YWdTdG9yYWdlTmFtZSwgZHJhZ0RhdGEtPmZsYWdzKCksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUs
IHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlv
biwgZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSwg
ZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRyYWdTdG9yYWdlTmFtZSwg
ZHJhZ0RhdGEuZmxhZ3MoKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lv
bnNGb3JVcGxvYWQpLCBtX3BhZ2VJRCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzQsMTAg
KzU3NCwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAgICAKICAgICAv
LyBEcmFnIGFuZCBkcm9wIHN1cHBvcnQuCi0gICAgdm9pZCBkcmFnRW50ZXJlZChXZWJDb3JlOjpE
cmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOwotICAg
IHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdT
dG9yYWdlTmFtZSA9IFN0cmluZygpKTsKLSAgICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29yZTo6RHJh
Z0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKLSAgICB2
b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRyYWdEYXRhKiwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5Jik7CisgICAgdm9pZCBkcmFnRW50ZXJlZChXZWJDb3JlOjpE
cmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOworICAg
IHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdT
dG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAgICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29yZTo6RHJh
Z0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAgICB2
b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRyYWdEYXRhJiwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAKICAgICB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbihXZWJDb3JlOjpEcmFnU2Vzc2lvbik7CiAgICAgdm9pZCBkcmFnRW5kZWQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbik7CkBAIC0xMDE1LDcgKzEw
MTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVhckxvYWREZXBlbmRlbnRDYWxsYmFja3Mo
KTsKIAotICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVy
QWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1l
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGVBcnJheSYpOworICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERy
YWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOwogCiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3Rv
cmVEaXNjYXJkYWJsZVN0YXRlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAJKHJldmlzaW9uIDE1NzAy
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDcgKzcyMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWMKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmpl
Y3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9z
aXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0
X2FjdGlvbnMoY29udGV4dCkpKTsKICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5y
ZXNldERyYWdPcGVyYXRpb24oKTsKLSAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5k
cmFnRW50ZXJlZCgmZHJhZ0RhdGEpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHkt
PmRyYWdFbnRlcmVkKGRyYWdEYXRhKTsKICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdl
YlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uOwogICAg
IGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0
aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogfQpAQCAtNzY3LDEzICs3NjcsMTMgQEAgc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ01vdAogICAgICAgICByZXR1cm4gVFJVRTsKIAog
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0
UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFn
T3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICB3
ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAg
IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdVcGRhdGVkKGRyYWdEYXRhKTsKICAg
ICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHkt
PmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uOwogICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBk
cmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogICAg
IHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIERyYWdEYXRhKiBkcmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQpCitzdGF0
aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdEYXRhJiBk
cmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQpCiB7CiAgICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhp
dGVkIGlmIHdlIGhhdmUganVzdCByZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKICAg
ICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZp
ZXcuCkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0RybwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252
ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0
aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkp
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwogICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQ7Ci0gICAgd2ViVmll
d0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhLCBTdHJpbmcoKSwg
aGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkKTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJp
di0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZyhkcmFnRGF0YSwgU3RyaW5nKCksIGhhbmRsZSwgc2Fu
ZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQsIFRS
VUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDE1NzAyNCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTc3Myw3ICsxNzczLDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDoo
aWQgPAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWws
IHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VP
cGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CiAK
ICAgICBfZGF0YS0+X3BhZ2UtPnJlc2V0RHJhZ09wZXJhdGlvbigpOwotICAgIF9kYXRhLT5fcGFn
ZS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9h
cmRdIG5hbWVdKTsKKyAgICBfZGF0YS0+X3BhZ2UtPmRyYWdFbnRlcmVkKGRyYWdEYXRhLCBbW2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKICAgICByZXR1cm4gTlNEcmFn
T3BlcmF0aW9uQ29weTsKIH0KIApAQCAtMTc4Miw3ICsxNzgyLDcgQEAgLSAoTlNEcmFnT3BlcmF0
aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAogICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252
ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsK
ICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xv
Y2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5n
SW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxh
Z3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgX2RhdGEtPl9wYWdlLT5kcmFnVXBkYXRlZCgmZHJhZ0Rh
dGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIF9kYXRh
LT5fcGFnZS0+ZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFz
dGVib2FyZF0gbmFtZV0pOwogICAgIAogICAgIFdlYkNvcmU6OkRyYWdTZXNzaW9uIGRyYWdTZXNz
aW9uID0gX2RhdGEtPl9wYWdlLT5kcmFnU2Vzc2lvbigpOwogICAgIE5TSW50ZWdlciBudW1iZXJP
ZlZhbGlkSXRlbXNGb3JEcm9wID0gZHJhZ1Nlc3Npb24ubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRl
ZDsKQEAgLTE4MDMsNyArMTgwMyw3IEBAIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0Ry
YWdnaW5nSW4KICAgICBJbnRQb2ludCBjbGllbnQoW3NlbGYgY29udmVydFBvaW50OltkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0gZnJvbVZpZXc6bmlsXSk7CiAgICAgSW50UG9pbnQgZ2xv
YmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdp
bmRvd10pKTsKICAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xv
YmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10p
OwotICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZv
IGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0V4aXRl
ZChkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CiAg
ICAgX2RhdGEtPl9wYWdlLT5yZXNldERyYWdPcGVyYXRpb24oKTsKIH0KIApAQCAtMTg2Nyw3ICsx
ODY3LDcgQEAgLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQ7CiAg
ICAgY3JlYXRlU2FuZGJveEV4dGVuc2lvbnNGb3JGaWxlVXBsb2FkKFtkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdQYXN0ZWJvYXJkXSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAKLSAgICBfZGF0
YS0+X3BhZ2UtPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQ
YXN0ZWJvYXJkXSBuYW1lXSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lv
bkZvclVwbG9hZCk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZyhkcmFnRGF0YSwgW1tk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSwgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAKICAgICByZXR1cm4gWUVTOwogfQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSopCit2
b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdE
ZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJikKIHsKICAgICBpZiAoYWN0aW9uID09
IERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQpCiAgICAgICAgIG1fcGFnZS0+d2lsbFBlcmZvcm1M
b2FkRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCk7CkBAIC00MiwyMiArNDIsMjIgQEAgdm9pZCBXZWJE
cmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aQogICAgICAgICBtX3BhZ2UtPm1heVBlcmZv
cm1VcGxvYWREcmFnRGVzdGluYXRpb25BY3Rpb24oKTsgLy8gVXBsb2FkIGNhbiBoYXBwZW4gZnJv
bSBhIGRyb3AgZXZlbnQgaGFuZGxlciwgc28gd2Ugc2hvdWxkIHByZXBhcmUgZWFybHkuCiB9CiAK
LXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3Vy
Y2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKikKK3ZvaWQgV2ViRHJhZ0NsaWVu
dDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IElu
dFBvaW50JiwgQ2xpcGJvYXJkJikKIHsKIH0KIAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRy
YWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKK0RyYWdEZXN0aW5hdGlvbkFj
dGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpCiB7CiAgICAg
cmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKIH0KIAotRHJhZ1NvdXJjZUFjdGlvbiBX
ZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50
JiAvKndpbmRvd1BvaW50Ki8pCitEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmRyYWdT
b3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKQogewogICAgIHJldHVybiBE
cmFnU291cmNlQWN0aW9uQW55OwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JN
KEdUSykKLXZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKK3Zv
aWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYsIEZyYW1lJiwgYm9vbCkKIHsKIH0KICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFn
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxNSArNDIsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSopIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJj
ZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQqKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rp
b25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSopIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9u
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdl
YkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNl
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFn
ZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpG
cmFtZSYsIGJvb2wgbGlua0RyYWcgPSBmYWxzZSkgT1ZFUlJJREU7CiAKICNpZiBQTEFURk9STShN
QUMpCi0gICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBET01FbGVtZW50KiwgTlNVUkwqLCBOU1N0cmluZyosIFdlYkNv
cmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURy
YWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpFbGVtZW50Jiwg
Y29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RnJhbWUqKSBPVkVS
UklERTsKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVk
KCkgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAkocmV2
aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZQogICAgIHJldHVybiBi
aXRtYXAucmVsZWFzZSgpOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFn
SW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0
IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiwg
Ym9vbCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1h
Z2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2Jh
bFBvc2l0aW9uLCBDbGlwYm9hcmQmIGNsaXBib2FyZCwgRnJhbWUmLCBib29sKQogewogICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJl
YWJsZUJpdG1hcChkcmFnSW1hZ2UpOwogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZTsKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0lt
YWdlUgogICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0g
Y2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwotICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgY2xp
cGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRh
dGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBEcmFn
RGF0YSBkcmFnRGF0YShkYXRhT2JqZWN0LmdldCgpLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9z
aXRpb24sIGNsaXBib2FyZC5zb3VyY2VPcGVyYXRpb24oKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRy
YWdDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkocmV2aXNpb24gMTU3MDI0KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0Ns
aWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsMjIgKzc2LDIyIEBAIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmUKICAgICByZXR1cm4gYml0bWFwLnJlbGVhc2Uo
KTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoUmV0YWluUHRyPE5TSW1hZ2U+
IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJk
KiwgRnJhbWUqIGZyYW1lLCBib29sIGxpbmtEcmFnKQordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFy
dERyYWcoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNv
bnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmIGZyYW1lLCBib29sIGxpbmtEcmFnKQog
ewogICAgIEludFNpemUgYml0bWFwU2l6ZShbaW1hZ2UuZ2V0KCkgc2l6ZV0pOwotICAgIGJpdG1h
cFNpemUuc2NhbGUoZnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgYml0
bWFwU2l6ZS5zY2FsZShmcmFtZS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRJbWFnZVRvQml0bWFwKGltYWdl
LmdldCgpLCBiaXRtYXBTaXplKTsKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7
CiAgICAgaWYgKCFiaXRtYXAgfHwgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTZWVtcyB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJl
IG5hbWVkIFN0YXJ0RHJhZywgbm90IFNldERyYWdJbWFnZS4KLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RHJhZ0ltYWdlKGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxpbmtEcmFnKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldERyYWdJbWFnZShmcmFtZS52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxpbmtEcmFnKSk7CiB9CiAKLXN0YXRpYyBXZWJDb3Jl
OjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBXZWJD
b3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVySW1hZ2UoKSkK
QEAgLTEwMiwyOSArMTAyLDI3IEBAIHN0YXRpYyBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1l
bnQgKmVsZW1lbnQsIE5TVVJMICpVUkwsIE5TU3RyaW5nICp0aXRsZSwgV2ViQ29yZTo6RnJhbWUq
KQordm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAg
QVNTRVJUKHBhc3RlYm9hcmROYW1lID09IFN0cmluZyhOU0RyYWdQYm9hcmQpKTsKIAotICAgIEVs
ZW1lbnQqIGNvcmVFbGVtZW50ID0gY29yZShlbGVtZW50KTsKKyAgICBXZWJDb3JlOjpDYWNoZWRJ
bWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZShlbGVtZW50KTsKIAotICAgIFdlYkNvcmU6OkNhY2hl
ZEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlKGNvcmVFbGVtZW50KTsKLQotICAgIE5TU3RyaW5n
ICpleHRlbnNpb24gPSBAIiI7CisgICAgU3RyaW5nIGV4dGVuc2lvbjsKICAgICBpZiAoaW1hZ2Up
IHsKICAgICAgICAgZXh0ZW5zaW9uID0gaW1hZ2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9u
KCk7Ci0gICAgICAgIGlmICghW2V4dGVuc2lvbiBsZW5ndGhdKQorICAgICAgICBpZiAoZXh0ZW5z
aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIVt0
aXRsZSBsZW5ndGhdKSB7Ci0gICAgICAgIHRpdGxlID0gW1tVUkwgcGF0aF0gbGFzdFBhdGhDb21w
b25lbnRdOwotICAgICAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKQotICAgICAgICAgICAgdGl0bGUg
PSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAgIFN0cmluZyB0aXRsZSA9IGxhYmVs
OworICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdGl0bGUgPSB1cmwubGFzdFBh
dGhDb21wb25lbnQoKTsKKyAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHRpdGxlID0gWyhOU1VSTCAqKXVybCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKICAgICB9CiAK
LSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZShjb3JlRWxlbWVudCk7CisgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hp
dmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoJmVsZW1lbnQpOwogCiAgICAgTlNVUkxSZXNw
b25zZSAqcmVzcG9uc2UgPSBpbWFnZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNlKCk7CiAgICAg
CkBAIC0xNDYsNyArMTQ0LDcgQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVE
cmFnSQogICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
ZGF0YSgpLCBhcmNoaXZlU2l6ZSk7CiAgICAgICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRl
SGFuZGxlKGFyY2hpdmVIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOyAgICAgICAgICAg
IAogICAgIH0KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0UHJv
bWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBTdHJpbmco
W3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIFN0cmluZyhleHRlbnNpb24pLCBTdHJpbmco
dGl0bGUpLCBTdHJpbmcoW1tyZXNwb25zZSBVUkxdIGFic29sdXRlU3RyaW5nXSksIFN0cmluZyhb
VVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddKSwgYXJjaGl2ZUhhbmRsZSwgYXJjaGl2ZVNpemUp
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0UHJvbWlzZWRE
YXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBTdHJpbmcoW3Jlc3Bv
bnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIGV4dGVuc2lvbiwgdGl0bGUsIFN0cmluZyhbW3Jlc3Bv
bnNlIFVSTF0gYWJzb2x1dGVTdHJpbmddKSwgU3RyaW5nKFsoTlNVUkwgKil1cmwgX3dlYl91c2Vy
VmlzaWJsZVN0cmluZ10pLCBhcmNoaXZlSGFuZGxlLCBhcmNoaXZlU2l6ZSkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0MCwxOSAr
MjU0MCwxOSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvCiAKICAg
ICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVk
OgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdE
YXRhKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQo
ZHJhZ0RhdGEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFj
dGlvblVwZGF0ZWQ6Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVy
Zm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnVXBk
YXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5k
cmFnVXBkYXRlZChkcmFnRGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERyYWdD
b250cm9sbGVyQWN0aW9uRXhpdGVkOgotICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCku
ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCku
ZHJhZ0V4aXRlZChkcmFnRGF0YSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29u
dHJvbGxlckFjdGlvblBlcmZvcm1EcmFnOiB7Ci0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9s
bGVyKCkucGVyZm9ybURyYWcoZHJhZ0RhdGEpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTI1NzUsMTUgKzI1NzUsMTUgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJB
Y3RpbwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdTdG9yYWdlTmFtZSwgY2xpZW50UG9zaXRp
b24sIGdsb2JhbFBvc2l0aW9uLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihkcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2spLCBzdGF0aWNfY2FzdDxEcmFnQXBwbGljYXRpb25GbGFncz4oZmxh
Z3MpKTsKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rp
b25FbnRlcmVkOgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVy
ZWQoJmRyYWdEYXRhKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJh
Z0VudGVyZWQoZHJhZ0RhdGEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29u
dHJvbGxlckFjdGlvblVwZGF0ZWQ6Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIo
KS5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQ6Ci0gICAgICAgIG1fcGFnZS0+
ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIG1fcGFnZS0+
ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVkKGRyYWdEYXRhKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZzogewpAQCAt
MjU5NSw3ICsyNTk1LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rp
bwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ0Ryb3BFeHRlbnNpb25zRm9yRmlsZVVwbG9hZC5h
cHBlbmQoZXh0ZW5zaW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250
cm9sbGVyKCkucGVyZm9ybURyYWcoZHJhZ0RhdGEpOwogCiAgICAgICAgIC8vIElmIHdlIHN0YXJ0
ZWQgbG9hZGluZyBhIGxvY2FsIGZpbGUsIHRoZSBzYW5kYm94IGV4dGVuc2lvbiB0cmFja2VyIHdv
dWxkIGhhdmUgYWRvcHRlZCB0aGlzCiAgICAgICAgIC8vIHBlbmRpbmcgZHJvcCBzYW5kYm94IGV4
dGVuc2lvbi4gSWYgbm90LCB3ZSdsbCBwbGF5IGl0IHNhZmUgYW5kIGNsZWFyIGl0LgpJbmRleDog
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMTAtMDYgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBDVFRFOiBVc2UgcmVmZXJlbmNlcyBp
biBhbmQgYXJvdW5kIERyYWdDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRFZmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRp
b25BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRFZmw6OmFjdGlv
bk1hc2tGb3JEcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRFZmw6OnN0YXJ0RHJh
Zyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5oOgorCiAyMDEzLTEw
LTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRnJh
bWVQb2xpY3lGdW5jdGlvbiBzaG91bGQgYmUgYW4gc3RkOjpmdW5jdGlvbgpJbmRleDogU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAJKHJl
dmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNyArMzUsMTcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEcmFnQ2xpZW50
RWZsOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rp
b24sIERyYWdEYXRhKikKK3ZvaWQgRHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQq
KQordm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1Nv
dXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQmKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLURyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50RWZsOjphY3Rp
b25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCitEcmFnRGVzdGluYXRpb25BY3Rpb24gRHJhZ0NsaWVu
dEVmbDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEmKQogewogICAgIHJldHVybiBEcmFnRGVz
dGluYXRpb25BY3Rpb25Bbnk7CiB9CkBAIC01NSw3ICs1NSw3IEBAIERyYWdTb3VyY2VBY3Rpb24g
RHJhZ0NsaWVudEVmbDo6ZHJhZ1NvdXIKICAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbkFueTsK
IH0KIAotdm9pZCBEcmFnQ2xpZW50RWZsOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKQordm9p
ZCBEcmFnQ2xpZW50RWZsOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9E
cmFnQ2xpZW50RWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRHJhZ0NsaWVudEVmbC5oCShyZXZpc2lvbiAxNTcwMjQpCisrKyBTb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50RWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDE4ICszNiwxOCBAQAogI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworCiBjbGFzcyBEcmFnQ2xpZW50RWZsIDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQg
ewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKik7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpE
cmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBi
b2FyZCopOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKik7CisgICAgdmlydHVhbCB2b2lkIGRyYWdD
b250cm9sbGVyRGVzdHJveWVkKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3Jl
OjpEcmFnRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rp
b24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBX
ZWJDb3JlOjpDbGlwYm9hcmQmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlv
bkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSYpOwogICAgIHZpcnR1
YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2ludCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBX
ZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxz
ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2
ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wgbGlua0Ry
YWcgPSBmYWxzZSk7CiB9OworCiB9CiAKICNlbmRpZiAvLyBEcmFnQ2xpZW50RWZsX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEzLTEwLTA2ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMg
aW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25B
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3Vy
Y2VBY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJh
Zyk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKGRyYWdFeGl0ZWRDYWxsYmFjayk6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb24pOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYWdf
ZGF0YV9yZWNlaXZlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9wKToKKwog
MjAxMy0xMC0wNSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCBHVEsgYnVpbGQgZml4IGFmdGVyIHIxNTY5NDYuIFRoZSBmcmFtZVBvbGlj
eUZ1bmN0aW9uIGlzIGFuIGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysr
IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSwxNiArNTUsMTYgQEAgRHJhZ0NsaWVudDo6fkRyYWdDbGllbnQoKQog
ewogfQogCi12b2lkIERyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKQordm9pZCBEcmFnQ2xpZW50Ojp3aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdE
YXRhJikKIHsKIH0KIAotdm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rp
b24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0YXJ0UG9zLCBDbGlwYm9hcmQq
KQordm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJj
ZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0YXJ0UG9zLCBDbGlwYm9hcmQmKQogewogICAgIG1f
c3RhcnRQb3MgPSBzdGFydFBvczsKIH0KIAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIERyYWdDbGll
bnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKK0RyYWdEZXN0aW5hdGlvbkFjdGlvbiBE
cmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55OwpAQCAtNzYsMTQg
Kzc2LDE0IEBAIERyYWdTb3VyY2VBY3Rpb24gRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUEKICAgICBy
ZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbkFueTsKIH0KIAotdm9pZCBEcmFnQ2xpZW50OjpzdGFydERy
YWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBj
b25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJh
bWUsIGJvb2wgbGlua0RyYWcpCit2b2lkIERyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VS
ZWYgaW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50
JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBsaW5r
RHJhZykKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcoa2l0KGZyYW1lKSk7Ci0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFP
YmplY3QgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KGtpdCgmZnJh
bWUpKTsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCA9IGNsaXBib2FyZC5w
YXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwogICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFy
Z2V0TGlzdCA9IGFkb3B0R1JlZihQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhl
bHBlcigpLT50YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0LmdldCgpKSk7CiAgICAg
R093blB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVudF9ldmVudCgpKTsK
IAotICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4oR1RLX1dJREdF
VChtX3dlYlZpZXcpLCB0YXJnZXRMaXN0LmdldCgpLCBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0
aW9ucyhjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpKSwgMSwgY3VycmVudEV2ZW50LmdldCgp
KTsKKyAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0a19kcmFnX2JlZ2luKEdUS19XSURH
RVQobV93ZWJWaWV3KSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0Fj
dGlvbnMoY2xpcGJvYXJkLnNvdXJjZU9wZXJhdGlvbigpKSwgMSwgY3VycmVudEV2ZW50LmdldCgp
KTsKICAgICB3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5zdGFydGVkRHJhZyhjb250
ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKIAogICAgIC8vIEEgZHJhZyBzdGFydGluZyBzaG91bGQg
cHJldmVudCBhIGRvdWJsZS1jbGljayBmcm9tIGhhcHBlbmluZy4gVGhpcyBtaWdodApJbmRleDog
U291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuaAko
cmV2aXNpb24gMTU3MDI0KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyNiArNDAsMjQgQEAgdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAot
ICAgIGNsYXNzIERyYWdDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6RHJhZ0NsaWVudCB7Ci0gICAg
cHVibGljOgotICAgICAgICBEcmFnQ2xpZW50KFdlYktpdFdlYlZpZXcqKTsKLSAgICAgICAgfkRy
YWdDbGllbnQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFn
RGF0YSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9u
KFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2Vi
Q29yZTo6Q2xpcGJvYXJkKik7Ci0gICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKik7Ci0KLSAgICAg
ICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNr
Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiBkcmFnSW1hZ2Us
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBldmVudFBvcywgV2ViQ29yZTo6Q2xpcGJvYXJkKiwgV2ViQ29yZTo6RnJhbWUq
LCBib29sIGxpbmtEcmFnID0gZmFsc2UpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29u
dHJvbGxlckRlc3Ryb3llZCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV2ViS2l0V2ViVmll
dyogbV93ZWJWaWV3OwotICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N0YXJ0UG9zOwotICAg
ICAgICBXZWJDb3JlOjpEcmFnSWNvbiBtX2RyYWdJY29uOwotICAgIH07CitjbGFzcyBEcmFnQ2xp
ZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgeworcHVibGljOgorICAgIERyYWdDbGll
bnQoV2ViS2l0V2ViVmlldyopOworICAgIH5EcmFnQ2xpZW50KCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24s
IFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1Nv
dXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJik7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNr
Rm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBldmVudFBvcywgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6RnJhbWUmLCBib29s
IGxpbmtEcmFnID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIFdlYktpdFdlYlZpZXcqIG1fd2Vi
VmlldzsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N0YXJ0UG9zOworICAgIFdlYkNvcmU6OkRy
YWdJY29uIG1fZHJhZ0ljb247Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJj
ZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUyOSw3ICsxNTI5LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdfZGF0YV9n
ZQogICAgIFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5o
YW5kbGVHZXREcmFnRGF0YShjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZvKTsKIH0KIAotc3Rh
dGljIHZvaWQgZHJhZ0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSog
ZHJhZ0RhdGEsIGJvb2wgZHJvcEhhcHBlbmVkKQorc3RhdGljIHZvaWQgZHJhZ0V4aXRlZENhbGxi
YWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSYgZHJhZ0RhdGEsIGJvb2wgZHJvcEhhcHBl
bmVkKQogewogICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBoYXZlIGp1c3QgcmVj
ZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCiAgICAgLy8gaGFwcGVucyBpbiB0aGUgY2Fz
ZSBvZiBhIHN1Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2aWV3LgpAQCAtMTU1Miw3ICsxNTUyLDcg
QEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmFnX21vdAogICAgICAgICByZXR1
cm4gVFJVRTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBj
b252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFn
QWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4
dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdD
b250cm9sbGVyKCkuZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgRHJhZ09w
ZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLmRyYWdV
cGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQs
IGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiAg
ICAgcmV0dXJuIFRSVUU7CiB9CkBAIC0xNTY2LDcgKzE1NjYsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfZHJhZ19kYXRhX3JlCiAgICAgICAgIHJldHVybjsKIAogICAgIERyYWdEYXRh
IGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVl
blBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdk
a19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9u
IG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQo
JmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3Jl
KHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFbnRlcmVkKGRyYWdEYXRhKS5vcGVyYXRp
b247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdk
a0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiB9CiAKQEAgLTE1NzksNyArMTU3OSw3IEBA
IHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm8KIAogICAgIEludFBvaW50
IHBvc2l0aW9uKHgsIHkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0
aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBn
ZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMo
Y29udGV4dCkpKTsKLSAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLnBlcmZvcm1E
cmFnKCZkcmFnRGF0YSk7CisgICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJm
b3JtRHJhZyhkcmFnRGF0YSk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQsIFRSVUUsIEZB
TFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTEwLTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5kIGFyb3VuZCBEcmFn
Q29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRHJhZ0NsaWVudC5tbToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OmFjdGlvbk1h
c2tGb3JEcmFnKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1Nv
dXJjZUFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcpOgorICAgICAg
ICAoV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZG9jdW1lbnRG
cmFnbWVudEZyb21QYXN0ZWJvYXJkOmZvclR5cGU6aW5Db250ZXh0OnN1YnJlc291cmNlczpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgZHJhZ2dp
bmdFbnRlcmVkOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAg
ICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ0V4aXRlZDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBw
ZXJmb3JtRHJhZ09wZXJhdGlvbjpdKToKKwogMjAxMy0xMC0wNSAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIENUVEU6IFRocmVhZCByZWZlcmVuY2VzIHRocm91Z2ggbWFy
a3VwLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJE
cmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDEz
IEBACiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgewog
cHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyopOwotICAgIHZpcnR1YWwgdm9pZCB3
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25B
Y3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHdp
bGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCopIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFn
KFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwg
V2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZv
cm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0ZvckRyYWcoV2ViQ29y
ZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJE
ZXN0cm95ZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rp
b24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
d2luZG93UG9pbnQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29y
ZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1BvcywgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3Jl
OjpGcmFtZSosIGJvb2wgbGlua0RyYWcpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgRE9NRWxl
bWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBXZWJDb3JlOjpGcmFtZSopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZHJhZ1BvcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9z
LCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wgbGlua0RyYWcpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViQ29yZTo6RWxlbWVudCYsIGNvbnN0IFdlYkNvcmU6
OlVSTCYsIGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CiBwcml2YXRl
OgogICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHJldmlzaW9uIDE1NzAyNCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQp
CiAKKyNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZS5o
IgogI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9ucy5oIgogI2ltcG9ydCAiV2ViRnJhbWUuaCIKQEAg
LTY2LDE0ICs2NywxNCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmdldFRvcEhUTUxWaWV3KEZyYW1l
CiAgICAgcmV0dXJuIChXZWJIVE1MVmlldyopW1traXQoJmZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiB9CiAKLVdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFn
RGF0YSogZHJhZ0RhdGEpCitXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gV2ViRHJhZ0Ns
aWVudDo6YWN0aW9uTWFza0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhKQogewot
ICAgIHJldHVybiAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKVtbbV93ZWJWaWV3IF9V
SURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBkcmFnRGVzdGluYXRpb25BY3Rp
b25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKV07CisgICAgcmV0
dXJuIChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24pW1ttX3dlYlZpZXcgX1VJRGVsZWdh
dGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tG
b3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCldOwogfQogCi12b2lkIFdlYkRy
YWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKiBkcmFnRGF0YSkKK3Zv
aWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29y
ZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdE
YXRhKQogewotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1f
d2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbjooV2ViRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKWFjdGlvbiBmb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgp
XTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZp
ZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246KFdlYkRyYWdEZXN0aW5hdGlvbkFj
dGlvbilhY3Rpb24gZm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpXTsKIH0K
IAogCkBAIC04MywyNyArODQsMjMgQEAgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFn
Q2xpZW50OgogICAgIHJldHVybiAoRHJhZ1NvdXJjZUFjdGlvbilbW21fd2ViVmlldyBfVUlEZWxl
Z2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQ
b2ludDp2aWV3UG9pbnRdOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJh
Z1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGFjdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIG1vdXNlRG93blBvaW50LCBXZWJDb3JlOjpDbGlwYm9hcmQqIGNsaXBi
b2FyZCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdl
YkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
bW91c2VEb3duUG9pbnQsIFdlYkNvcmU6OkNsaXBib2FyZCYgY2xpcGJvYXJkKQogewotICAgIEFT
U0VSVChjbGlwYm9hcmQpOwotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3
ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb246KFdlYkRyYWdTb3Vy
Y2VBY3Rpb24pYWN0aW9uIGZyb21Qb2ludDptb3VzZURvd25Qb2ludCB3aXRoUGFzdGVib2FyZDpb
TlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5u
YW1lKCldXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzpt
X3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uOihXZWJEcmFnU291cmNlQWN0aW9u
KWFjdGlvbiBmcm9tUG9pbnQ6bW91c2VEb3duUG9pbnQgd2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVi
b2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1lKCldXTsK
IH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFn
ZSwgY29uc3QgSW50UG9pbnQmIGF0LCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2Fy
ZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit2b2lkIFdlYkRyYWdD
bGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYg
YXQsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1l
JiBmcmFtZSwgYm9vbCBsaW5rRHJhZykKIHsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1
cm47Ci0gICAgQVNTRVJUKGNsaXBib2FyZCk7Ci0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBo
dG1sVmlldyA9IChXZWJIVE1MVmlldyopW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRW
aWV3XTsKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IGh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3
KilbW2tpdCgmZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICBpZiAoIVtodG1s
Vmlldy5nZXQoKSBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgTlNFdmVudCAqZXZlbnQgPSBsaW5rRHJhZyA/IGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgpIF9tb3VzZURvd25F
dmVudF07Ci0gICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRNTFZpZXcoZnJh
bWUpOworICAgIE5TRXZlbnQgKmV2ZW50ID0gbGlua0RyYWcgPyBmcmFtZS5ldmVudEhhbmRsZXIo
KS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgpIF9tb3VzZURvd25FdmVudF07Cisg
ICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRNTFZpZXcoJmZyYW1lKTsKICAg
ICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHRvcFZpZXdQcm90ZWN0b3IgPSB0b3BIVE1MVmlldzsK
ICAgICAKICAgICBbdG9wSFRNTFZpZXcgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwotICAgIE5TUGFz
dGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOmNs
aXBib2FyZC0+cGFzdGVib2FyZCgpLm5hbWUoKV07CisgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJv
YXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJvYXJkLnBhc3RlYm9h
cmQoKS5uYW1lKCldOwogCiAgICAgTlNJbWFnZSAqZHJhZ05TSW1hZ2UgPSBkcmFnSW1hZ2UuZ2V0
KCk7CiAgICAgV2ViSFRNTFZpZXcgKnNvdXJjZUhUTUxWaWV3ID0gaHRtbFZpZXcuZ2V0KCk7CkBA
IC0xMjMsMTQgKzEyMCwxMyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1h
Z2VSCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVu
dDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUs
IERPTUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0aXRsZSwgV2ViQ29y
ZTo6RnJhbWUqIGZyYW1lKSAKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJh
Z0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBXZWJDb3JlOjpGcmFtZSogZnJhbWUp
CiB7CiAgICAgQVNTRVJUKHBhc3RlYm9hcmROYW1lKTsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0g
ICAgV2ViSFRNTFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsgICAgICAKLSAg
ICBXZWJBcmNoaXZlICphcmNoaXZlID0gW2VsZW1lbnQgd2ViQXJjaGl2ZV07CisgICAgV2ViSFRN
TFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsKKyAgICBXZWJBcmNoaXZlICph
cmNoaXZlID0gW2tpdCgmZWxlbWVudCkgd2ViQXJjaGl2ZV07CiAgICAgCi0gICAgW1tOU1Bhc3Rl
Ym9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXSBfd2ViX2RlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZUZvckVsZW1lbnQ6ZWxlbWVudCBVUkw6VVJMIHRpdGxlOnRpdGxlIGFyY2hp
dmU6YXJjaGl2ZSBzb3VyY2U6c291cmNlXTsKKyAgICBbW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJk
V2l0aE5hbWU6cGFzdGVib2FyZE5hbWVdIF93ZWJfZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlRm9y
RWxlbWVudDpraXQoJmVsZW1lbnQpIFVSTDp1cmwgdGl0bGU6dGl0bGUgYXJjaGl2ZTphcmNoaXZl
IHNvdXJjZTpzb3VyY2VdOwogfQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdDb250cm9sbGVy
RGVzdHJveWVkKCkgCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJl
dmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTk5OCw4ICs5OTgsMTAgQEAgLSAodm9pZClfcmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVudDooRAogfQogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRl
eHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNl
bWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCi17ICAgCi0gICAgRE9NRG9jdW1l
bnRGcmFnbWVudCogZnJhZ21lbnQgPSBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0ZXh0
KS5nZXQoKSk7Cit7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgCisgICAgRE9NRG9jdW1l
bnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpyYW5nZSwgdGV4dCkuZ2V0KCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9u
V2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50
IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE1NzAyNCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTIwNjUsOCArMjA2NSwxMSBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3Vt
ZW50RnJhZ21lCiAgICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNob3JdOwogICAgICAg
ICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TU3RyaW5n
UGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNv
cmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlw
ZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLmdldCgpKTsKKyAgICBp
ZiAocGJvYXJkVHlwZSA9PSBOU1N0cmluZ1Bib2FyZFR5cGUpIHsKKyAgICAgICAgaWYgKCFjb250
ZXh0KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVG
cmFnbWVudEZyb21UZXh0KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlw
ZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBp
bmddKS5nZXQoKSk7CisgICAgfQogICAgIHJldHVybiBuaWw7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMzMiw3ICs0MzMy
LDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPAogICAgIEludFBv
aW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2lu
dCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3Nl
bGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50
LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJ
bmZvXSk7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVy
ZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250
cm9sbGVyKCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpLm9wZXJhdGlvbjsKIH0KIAogLSAoTlNEcmFn
T3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0lu
Zm8KQEAgLTQzNDQsNyArNDM0NCw3IEBAIC0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ1VwZGF0
ZWQ6KGlkIDwKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0
aW9uXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKICAgICBEcmFnRGF0YSBkcmFnRGF0YShk
cmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihb
ZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNh
dGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwotICAgIHJldHVybiBwYWdlLT5kcmFnQ29udHJvbGxl
cigpLmRyYWdVcGRhdGVkKCZkcmFnRGF0YSkub3BlcmF0aW9uOworICAgIHJldHVybiBwYWdlLT5k
cmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiB9CiAKIC0g
KHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCkBA
IC00MzU2LDcgKzQzNTYsNyBAQCAtICh2b2lkKWRyYWdnaW5nRXhpdGVkOihpZCA8TlNEcmFnZ2lu
Z0luCiAgICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0p
OwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5n
TG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dp
bmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdn
aW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25G
bGFnczpkcmFnZ2luZ0luZm9dKTsKLSAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFeGl0
ZWQoJmRyYWdEYXRhKTsKKyAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFeGl0ZWQoZHJh
Z0RhdGEpOwogfQogCiAtIChCT09MKXByZXBhcmVGb3JEcmFnT3BlcmF0aW9uOihpZCA8TlNEcmFn
Z2luZ0luZm8+KWRyYWdnaW5nSW5mbwpAQCAtNDM2OSw3ICs0MzY5LDcgQEAgLSAoQk9PTClwZXJm
b3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9p
bnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19j
YXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgcmV0dXJu
IGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAg
ICByZXR1cm4gY29yZShzZWxmKS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZyhkcmFnRGF0
YSk7CiB9CiAKIC0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50ICopcG9pbnQgZHJhZ1R5cGVz
OihOU1NldCAqKXR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTcwMjQpCisr
KyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NyBAQAorMjAxMy0xMC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAg
IENUVEU6IFVzZSByZWZlcmVuY2VzIGluIGFuZCBhcm91bmQgRHJhZ0NvbnRyb2xsZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjQyNworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNr
Rm9yRHJhZyk6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3Vy
Y2VBY3Rpb24pOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisKIDIwMTMtMTAtMDQgIEFuZGVycyBD
YXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGcmFtZVBvbGljeUZ1bmN0
aW9uIHNob3VsZCBiZSBhbiBzdGQ6OmZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkocmV2aXNpb24gMTU3MDI0
KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDI1ICs2NSwyNSBAQCBXZWJEcmFnQ2xpZW50OjpXZWJEcmFn
Q2xpZW50KFdlYlZpZXcqIHdlCiAgICAgQVNTRVJUKHdlYlZpZXcpOwogfQogCi1EcmFnRGVzdGlu
YXRpb25BY3Rpb24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEqIGRy
YWdEYXRhKQorRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tG
b3JEcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+
IGRlbGVnYXRlUmVmID0gMDsKICAgICAvL0RlZmF1bHQgYmVoYXZpb3VyIChlZy4gbm8gZGVsZWdh
dGUsIG9yIGNhbGxiYWNrIG5vdCBpbXBsZW1lbnRlZCkgaXMgdG8gYWxsb3cKICAgICAvL2FueSBh
Y3Rpb24KICAgICBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24gbWFzayA9IFdlYkRyYWdEZXN0aW5h
dGlvbkFjdGlvbkFueTsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxlZ2F0ZSgm
ZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPmRyYWdEZXN0aW5hdGlvbkFjdGlv
bk1hc2tGb3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCks
ICZtYXNrKTsKKyAgICAgICAgZGVsZWdhdGVSZWYtPmRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tG
b3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSwgJm1hc2sp
OwogCiAgICAgcmV0dXJuIChEcmFnRGVzdGluYXRpb25BY3Rpb24pbWFzazsKIH0KIAotdm9pZCBX
ZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGlu
YXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEpCit2b2lkIFdlYkRyYWdDbGll
bnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlv
biBhY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICAvL0RlZmF1bHQgZGVsZWdhdGUg
Zm9yIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGhhcyBubyBzaWRlIGVmZmVjdHMK
ICAgICAvL3NvIHdlIGp1c3QgY2FsbCB0aGUgZGVsZWdhdGUsIGFuZCBkb24ndCB3b3JyeSBhYm91
dCB3aGV0aGVyIGl0J3MgaW1wbGVtZW50ZWQKICAgICBDT01QdHI8SVdlYlVJRGVsZWdhdGU+IGRl
bGVnYXRlUmVmID0gMDsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxlZ2F0ZSgm
ZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPndpbGxQZXJmb3JtRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKG1fd2ViVmlldywgKFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbilhY3Rpb24s
IGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgIGRlbGVnYXRlUmVmLT53aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihtX3dlYlZpZXcsIChXZWJEcmFnRGVzdGluYXRpb25B
Y3Rpb24pYWN0aW9uLCBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CiB9CiAKIERyYWdTb3VyY2VB
Y3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgd2luZG93UG9pbnQpCkBAIC05NiwyNyArOTYsMjcgQEAgRHJhZ1NvdXJjZUFjdGlv
biBXZWJEcmFnQ2xpZW50OjpkcmFnU291cgogICAgIHJldHVybiAoRHJhZ1NvdXJjZUFjdGlvbilh
Y3Rpb247CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0
aW9uKERyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBJbnRQb2ludCYgaW50UG9pbnQsIENs
aXBib2FyZCogY2xpcGJvYXJkKQordm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24sIGNvbnN0IEludFBvaW50JiBpbnRQ
b2ludCwgQ2xpcGJvYXJkJiBjbGlwYm9hcmQpCiB7CiAgICAgQ09NUHRyPElXZWJVSURlbGVnYXRl
PiB1aURlbGVnYXRlOwogICAgIGlmICghU1VDQ0VFREVEKG1fd2ViVmlldy0+dWlEZWxlZ2F0ZSgm
dWlEZWxlZ2F0ZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQT0lOVCBwb2ludCA9IGludFBv
aW50OwotICAgIENPTVB0cjxJRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IGNsaXBib2FyZC0+cGFz
dGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBDT01QdHI8SURhdGFPYmplY3Q+IGRhdGFPYmpl
Y3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKIAogICAgIENPTVB0cjxJ
RGF0YU9iamVjdD4gbmV3RGF0YU9iamVjdDsKICAgICBIUkVTVUxUIHJlc3VsdCA9IHVpRGVsZWdh
dGUtPndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihtX3dlYlZpZXcsIHN0YXRpY19jYXN0PFdl
YkRyYWdTb3VyY2VBY3Rpb24+KGFjdGlvbiksICZwb2ludCwgZGF0YU9iamVjdC5nZXQoKSwgJm5l
d0RhdGFPYmplY3QpOwogICAgIGlmIChyZXN1bHQgPT0gU19PSyAmJiBuZXdEYXRhT2JqZWN0ICE9
IGRhdGFPYmplY3QpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVib2FyZCY+KGNsaXBib2FyZC0+
cGFzdGVib2FyZCgpKS5zZXRFeHRlcm5hbERhdGFPYmplY3QobmV3RGF0YU9iamVjdC5nZXQoKSk7
CisgICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVib2FyZCY+KGNsaXBib2FyZC5wYXN0ZWJvYXJkKCkp
LnNldEV4dGVybmFsRGF0YU9iamVjdChuZXdEYXRhT2JqZWN0LmdldCgpKTsKIH0KIAotdm9pZCBX
ZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2lu
dCYgaW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnUG9pbnQsIENsaXBib2FyZCogY2xp
cGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgaXNMaW5rKQordm9pZCBXZWJEcmFnQ2xpZW50Ojpz
dGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgaW1hZ2VPcmlnaW4s
IGNvbnN0IEludFBvaW50JiBkcmFnUG9pbnQsIENsaXBib2FyZCYgY2xpcGJvYXJkLCBGcmFtZSYg
ZnJhbWUsIGJvb2wgaXNMaW5rKQogewogICAgIC8vRklYTUU6IEFsbG93IFVJRGVsZWdhdGUgdG8g
b3ZlcnJpZGUgYmVoYXZpb3VyIDxyZGFyOi8vcHJvYmxlbS81MDE1OTUzPgogCiAgICAgLy9XZSBs
aWJlcmFsbHkgcHJvdGVjdCBldmVyeXRoaW5nLCB0byBwcm90ZWN0IGFnYWluc3QgYSBsb2FkIG9j
Y3VycmluZyBtaWQtZHJhZwotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWVQcm90ZWN0b3IgPSBmcmFt
ZTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lUHJvdGVjdG9yID0gJmZyYW1lOwogICAgIENPTVB0
cjxJRHJhZ1NvdXJjZUhlbHBlcj4gaGVscGVyOwogICAgIENPTVB0cjxJRGF0YU9iamVjdD4gZGF0
YU9iamVjdDsKICAgICBDT01QdHI8V2ViVmlldz4gdmlld1Byb3RlY3RvciA9IG1fd2ViVmlldzsK
QEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1h
Z2VSCiAgICAgaWYgKEZBSUxFRChXZWJEcm9wU291cmNlOjpjcmVhdGVJbnN0YW5jZShtX3dlYlZp
ZXcsICZzb3VyY2UpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGF0YU9iamVjdCA9IGNsaXBi
b2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBkYXRhT2JqZWN0ID0gY2xpcGJv
YXJkLnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CiAgICAgaWYgKHNvdXJjZSAmJiAoaW1hZ2Ug
fHwgZGF0YU9iamVjdCkpIHsKICAgICAgICAgaWYgKGltYWdlKSB7CiAgICAgICAgICAgICBpZihT
VUNDRUVERUQoQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9EcmFnRHJvcEhlbHBlciwgMCwgQ0xTQ1RY
X0lOUFJPQ19TRVJWRVIsCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBXZWJEcmFnQ2xpZW50Ojpz
dGFydERyYWcoRHJhZ0ltYWdlUgogICAgICAgICAgICAgZWxzZSBpZiAoZWZmZWN0ICYgRFJPUEVG
RkVDVF9NT1ZFKQogICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IERyYWdPcGVyYXRpb25Nb3Zl
OwogICAgICAgICB9Ci0gICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5kcmFnU291cmNlRW5k
ZWRBdChnZW5lcmF0ZU1vdXNlRXZlbnQobV93ZWJWaWV3LCBmYWxzZSksIG9wZXJhdGlvbik7Cisg
ICAgICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRyYWdTb3VyY2VFbmRlZEF0KGdlbmVyYXRlTW91
c2VFdmVudChtX3dlYlZpZXcsIGZhbHNlKSwgb3BlcmF0aW9uKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJ
KHJldmlzaW9uIDE1NzAyNCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE0IEBAIGNsYXNzIFdl
YlZpZXc7CiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQg
ewogcHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyopOwotICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRy
YWdEYXRhKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEqKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZpcnR1
YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNv
cmU6OkRyYWdEYXRhJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRy
YWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdT
b3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJk
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3Jl
OjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25B
Y3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3Jt
RHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpOworICAgIHZpcnR1YWwgdm9pZCBzdGFy
dERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6RnJh
bWUmLCBib29sKTsKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213601</attachid>
            <date>2013-10-07 10:21:56 -0700</date>
            <delta_ts>2013-10-07 11:08:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122427-20131007102155.patch</filename>
            <type>text/plain</type>
            <size>135731</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTA2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4g
YW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgdG8gaW5kaWNhdGUgbm9uLW51bGxuZXNz
IG9mIERyYWdDb250cm9sbGVyIHJlbGF0ZWQKKyAgICAgICAgb2JqZWN0cy4KKwogMjAxMy0xMC0w
NyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICAtd2Vi
a2l0LWNyb3NzLWZhZGUgcGFpbnRzIFNWR3MgYXQgZnVsbCBvcGFjaXR5IGR1cmluZyBjcm9zcy1m
YWRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTc0Miw3ICs3NDIsNyBA
QCBfX1pON1dlYkNvcmUyMlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQyNmNhCiBfX1pON1dlYkNvcmUy
MlN0b3JhZ2VFdmVudERpc3BhdGNoZXIzNGRpc3BhdGNoTG9jYWxTdG9yYWdlRXZlbnRzVG9GcmFt
ZXNFUk5TXzlQYWdlR3JvdXBFUktOM1dURjZWZWN0b3JJTlMzXzZSZWZQdHJJTlNfNUZyYW1lRUVF
TG0wRU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRVJLTlMzXzZTdHJpbmdFU0VfU0VfU0VfUE5TXzE0
U2VjdXJpdHlPcmlnaW5FCiBfX1pON1dlYkNvcmUyMlVSTFdpdGhVc2VyVHlwZWRTdHJpbmdFUDhO
U1N0cmluZ1A1TlNVUkwKIF9fWk43V2ViQ29yZTIyY291bnRlclZhbHVlRm9yRWxlbWVudEVQTlNf
N0VsZW1lbnRFCi1fX1pON1dlYkNvcmUyMmNyZWF0ZUZyYWdtZW50RnJvbVRleHRFUE5TXzVSYW5n
ZUVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTIyY3JlYXRlRnJhZ21lbnRGcm9tVGV4dEVS
TlNfNVJhbmdlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uRVBOU181RnJhbWVFagogX19aTjdXZWJDb3JlMjJleHRlcm5hbFJlcHJlc2VudGF0aW9u
RVBOU183RWxlbWVudEVqCiBfX1pON1dlYkNvcmUyMnN5c3RlbU1hcmtldGluZ1ZlcnNpb25FdgpA
QCAtMjQ1NiwxNSArMjQ1NiwxNSBAQCBfX1pOSzdXZWJDb3JlMTJTaGFyZWRCdWZmZXIzNm1lbW9y
eU1hcHBlCiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogX19aTjdXZWJDb3JlMTJFdmVudEhh
bmRsZXIxN2RyYWdTb3VyY2VFbmRlZEF0RVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFTlNfMTNE
cmFnT3BlcmF0aW9uRQotX19aTks3V2ViQ29yZTEyRXZlbnRIYW5kbGVyMTdldmVudE1heVN0YXJ0
RHJhZ0VSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQotX19aTjdXZWJDb3JlMTREcmFnQ29udHJv
bGxlcjEwZHJhZ0V4aXRlZEVQTlNfOERyYWdEYXRhRQotX19aTjdXZWJDb3JlMTREcmFnQ29udHJv
bGxlcjExZHJhZ0VudGVyZWRFUE5TXzhEcmFnRGF0YUUKLV9fWk43V2ViQ29yZTE0RHJhZ0NvbnRy
b2xsZXIxMWRyYWdVcGRhdGVkRVBOU184RHJhZ0RhdGFFCi1fX1pON1dlYkNvcmUxNERyYWdDb250
cm9sbGVyMTFwZXJmb3JtRHJhZ0VQTlNfOERyYWdEYXRhRQorX19aTjdXZWJDb3JlMTREcmFnQ29u
dHJvbGxlcjEwZHJhZ0V4aXRlZEVSTlNfOERyYWdEYXRhRQorX19aTjdXZWJDb3JlMTREcmFnQ29u
dHJvbGxlcjExZHJhZ0VudGVyZWRFUk5TXzhEcmFnRGF0YUUKK19fWk43V2ViQ29yZTE0RHJhZ0Nv
bnRyb2xsZXIxMWRyYWdVcGRhdGVkRVJOU184RHJhZ0RhdGFFCitfX1pON1dlYkNvcmUxNERyYWdD
b250cm9sbGVyMTFwZXJmb3JtRHJhZ0VSTlNfOERyYWdEYXRhRQogX19aTjdXZWJDb3JlMTREcmFn
Q29udHJvbGxlcjE0cGxhY2VEcmFnQ2FyZXRFUktOU184SW50UG9pbnRFCiBfX1pON1dlYkNvcmUx
NERyYWdDb250cm9sbGVyOWRyYWdFbmRlZEV2CiBfX1pON1dlYkNvcmU4RHJhZ0RhdGFDMUVQMTFv
YmpjX29iamVjdFJLTlNfOEludFBvaW50RVM1X05TXzEzRHJhZ09wZXJhdGlvbkVOU18yMERyYWdB
cHBsaWNhdGlvbkZsYWdzRQogX19aTjdXZWJDb3JlOERyYWdEYXRhQzFFUktOM1dURjZTdHJpbmdF
UktOU184SW50UG9pbnRFUzdfTlNfMTNEcmFnT3BlcmF0aW9uRU5TXzIwRHJhZ0FwcGxpY2F0aW9u
RmxhZ3NFCitfX1pOSzdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2V2ZW50TWF5U3RhcnREcmFnRVJL
TlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCiAjZW5kaWYKIAogI2lmIEVOQUJMRShFTkNSWVBURURf
TUVESUFfVjIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCShy
ZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgLSAoRE9NRG9jdW1lbnRGcmFnbWVu
dCAqKWNyZWF0ZURvY3VtZW50RgogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKWNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnRXaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7CiAgICAgLy8gRklYTUU6IFNp
bmNlIHRoaXMgaXMgbm90IGEgY29udGV4dHVhbCBmcmFnbWVudCwgaXQgd29uJ3QgaGFuZGxlIHdo
aXRlc3BhY2UgcHJvcGVybHkuCi0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KGNvcmUoc2VsZiktPmNyZWF0ZVJhbmdlKCkuZ2V0KCksIHRleHQpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvcmUoc2VsZiktPmNyZWF0ZVJhbmdlKCku
Z2V0KCksIHRleHQpLmdldCgpKTsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDAsOCArNDQwLDExIEBAIFN0cmluZyBFZGl0b3I6
OnBsYWluVGV4dEZyb21QYXN0ZWJvYXJkKGMKIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJv
YXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIGJvb2wgYWxsb3dQbGFpblRleHQpCiB7CiAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQor
ICAgICAgICByZXR1cm47CisKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQo
Jm1fZnJhbWUsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOworICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJh
Z21lbnQobV9mcmFtZSwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwog
ICAgIGlmIChmcmFnbWVudCAmJiBzaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFuZ2Us
IEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCiAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFn
bWVudCwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBjaG9zZVBs
YWluVGV4dCk7CiB9CkBAIC00OTMsNyArNDk2LDExIEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW4KIAogdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRS
ZXBsYWNlKQogewotICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dChzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVu
dCwgc21hcnRSZXBsYWNlLCB0cnVlKTsgCisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVj
dGVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisKKyAgICByZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0
ZXh0KSwgc2VsZWN0UmVwbGFjZW1lbnQsIHNtYXJ0UmVwbGFjZSwgdHJ1ZSk7CiB9CiAKIFBhc3NS
ZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCkBAIC0xMDYxLDcgKzEwNjgsNyBA
QCB2b2lkIEVkaXRvcjo6Y3V0KCkKICAgICAgICAgICAgIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxzZQogICAgICAg
ICAgICAgLy8gRklYTUU6IENvbnZlcnQgYWxsIG90aGVyIHBsYXRmb3JtcyB0byBtYXRjaCBNYWMg
YW5kIGRlbGV0ZSB0aGlzLgotICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKHNlbGVjdGlvbi5nZXQoKSwgY2FuU21hcnRDb3B5T3JE
ZWxldGUoKSwgJm1fZnJhbWUsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQpOworICAg
ICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0
aW9uKCpzZWxlY3Rpb24sIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUsIEluY2x1ZGVJ
bWFnZUFsdFRleHRGb3JDbGlwYm9hcmQpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgZGlk
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKQEAgLTEwODcsMTQgKzEwOTQsMTQgQEAgdm9p
ZCBFZGl0b3I6OmNvcHkoKQogI2lmIChQTEFURk9STShNQUMpICYmICFQTEFURk9STShJT1MpKSB8
fCBQTEFURk9STShFRkwpCiAgICAgICAgICAgICB3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKCpQYXN0
ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSwgKmltYWdlRWxlbWVudCwgZG9jdW1lbnQo
KS51cmwoKSwgZG9jdW1lbnQoKS50aXRsZSgpKTsKICNlbHNlCi0gICAgICAgICAgICBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVJbWFnZShpbWFnZUVsZW1lbnQsIGRv
Y3VtZW50KCkudXJsKCksIGRvY3VtZW50KCkudGl0bGUoKSk7CisgICAgICAgICAgICBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVJbWFnZSgqaW1hZ2VFbGVtZW50LCBk
b2N1bWVudCgpLnVybCgpLCBkb2N1bWVudCgpLnRpdGxlKCkpOwogI2VuZGlmCiAgICAgICAgIH0g
ZWxzZSB7CiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykpIHx8IFBMQVRGT1JN
KEVGTCkKICAgICAgICAgICAgIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJk
OjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSk7CiAjZWxzZQogICAgICAgICAgICAgLy8gRklYTUU6
IENvbnZlcnQgYWxsIG90aGVyIHBsYXRmb3JtcyB0byBtYXRjaCBNYWMgYW5kIGRlbGV0ZSB0aGlz
LgotICAgICAgICAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRl
U2VsZWN0aW9uKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwg
Jm1fZnJhbWUsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQpOworICAgICAgICAgICAg
UGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlU2VsZWN0aW9uKCpzZWxl
Y3RlZFJhbmdlKCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCksIG1fZnJhbWUsIEluY2x1ZGVJbWFn
ZUFsdFRleHRGb3JDbGlwYm9hcmQpOwogI2VuZGlmCiAgICAgICAgIH0KICAgICB9CkBAIC0xMTk2
LDcgKzEyMDMsNyBAQCB2b2lkIEVkaXRvcjo6Y29weUltYWdlKGNvbnN0IEhpdFRlc3RSZXN1CiAj
aWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShFRkwpCiAgICAgd3JpdGVJbWFnZVRvUGFzdGVi
b2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCksICplbGVtZW50LCB1cmws
IHJlc3VsdC5hbHREaXNwbGF5U3RyaW5nKCkpOwogI2Vsc2UKLSAgICBQYXN0ZWJvYXJkOjpjcmVh
dGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVJbWFnZShlbGVtZW50LCB1cmwsIHJlc3VsdC5hbHRE
aXNwbGF5U3RyaW5nKCkpOworICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgp
LT53cml0ZUltYWdlKCplbGVtZW50LCB1cmwsIHJlc3VsdC5hbHREaXNwbGF5U3RyaW5nKCkpOwog
I2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg3LDcgKzE4NywxMSBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50
CiAgICAgaWYgKHRleHQgIT0gZXZ0LT50ZXh0KCkgfHwgIWVkaXRhYmxlUm9vdC0+cmVuZGVyZXJJ
c1JpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgcmVzdG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJp
bmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKIAotICAgICAgICBtX2ZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgZXZ0LT50ZXh0KCkpOworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJh
bmdlLCBldnQtPnRleHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1NzA0NikK
KysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4LDEwIEBAIHZvaWQgU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZDo6ZG9BcHBseSgKICAgICBpZiAoIWZyYW1lKCkuc2VsZWN0aW9uKCkuc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQobV9yYW5nZVRvQmVDb3JyZWN0ZWQuZ2V0KCksIG1fY29ycmVjdGlvbik7CisgICAg
aWYgKCFtX3JhbmdlVG9CZUNvcnJlY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqbV9y
YW5nZVRvQmVDb3JyZWN0ZWQsIG1fY29ycmVjdGlvbik7CiAgICAgaWYgKCFmcmFnbWVudCkKICAg
ICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lv
biAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1MiwxMiArNzUyLDkgQEAgc3RhdGljIGJvb2wgY29udGV4dFByZXNlcnZlc05l
d2xpbmUoY29ucwogICAgIHJldHVybiBjb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPnBy
ZXNlcnZlTmV3bGluZSgpOwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCkKK1Bh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYg
Y29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAgIGlmICghY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0LT5vd25lckRv
Y3VtZW50KCk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY29udGV4dC5vd25lckRvY3VtZW50
KCk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIAogICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkKQEAg
LTc2Nyw3ICs3NjQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
CiAgICAgc3RyaW5nLnJlcGxhY2UoIlxyXG4iLCAiXG4iKTsKICAgICBzdHJpbmcucmVwbGFjZSgn
XHInLCAnXG4nKTsKIAotICAgIGlmIChjb250ZXh0UHJlc2VydmVzTmV3bGluZSgqY29udGV4dCkp
IHsKKyAgICBpZiAoY29udGV4dFByZXNlcnZlc05ld2xpbmUoY29udGV4dCkpIHsKICAgICAgICAg
ZnJhZ21lbnQtPmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0cmluZyksIEFT
U0VSVF9OT19FWENFUFRJT04pOwogICAgICAgICBpZiAoc3RyaW5nLmVuZHNXaXRoKCdcbicpKSB7
CiAgICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZUJyZWFrRWxlbWVu
dChkb2N1bWVudCk7CkBAIC03ODQsMTQgKzc4MSwxNCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgfQogCiAgICAgLy8gQnJlYWsgc3RyaW5nIGludG8gcGFy
YWdyYXBocy4gRXh0cmEgbGluZSBicmVha3MgdHVybiBpbnRvIGVtcHR5IHBhcmFncmFwaHMuCi0g
ICAgTm9kZSogYmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2soY29udGV4dC0+Zmlyc3ROb2RlKCkp
OworICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNvbnRleHQuZmlyc3ROb2Rl
KCkpOwogICAgIEVsZW1lbnQqIGJsb2NrID0gdG9FbGVtZW50KGJsb2NrTm9kZSk7CiAgICAgYm9v
bCB1c2VDbG9uZXNPZkVuY2xvc2luZ0Jsb2NrID0gYmxvY2tOb2RlCiAgICAgICAgICYmIGJsb2Nr
Tm9kZS0+aXNFbGVtZW50Tm9kZSgpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShib2R5
VGFnKQogICAgICAgICAmJiAhYmxvY2stPmhhc1RhZ05hbWUoaHRtbFRhZykKLSAgICAgICAgJiYg
YmxvY2sgIT0gZWRpdGFibGVSb290Rm9yUG9zaXRpb24oY29udGV4dC0+c3RhcnRQb3NpdGlvbigp
KTsKLSAgICBib29sIHVzZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChjb250
ZXh0LT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RG
b3JQb3NpdGlvbihjb250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7CisgICAgYm9vbCB1c2VMaW5lQnJl
YWsgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woY29udGV4dC5zdGFydFBvc2l0aW9uKCkpOwog
CiAgICAgVmVjdG9yPFN0cmluZz4gbGlzdDsKICAgICBzdHJpbmcuc3BsaXQoJ1xuJywgdHJ1ZSwg
bGlzdCk7IC8vIHRydWUgZ2V0cyB1cyBlbXB0eSBzdHJpbmdzIGluIHRoZSBsaXN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmgJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgZW51bSBF
Q2hpbGRyZW5Pbmx5IHsgSW5jbHVkZU5vZGUsIENoaWxkcgogZW51bSBFQWJzb2x1dGVVUkxzIHsg
RG9Ob3RSZXNvbHZlVVJMcywgUmVzb2x2ZUFsbFVSTHMsIFJlc29sdmVOb25Mb2NhbFVSTHMgfTsK
IGVudW0gRUZyYWdtZW50U2VyaWFsaXphdGlvbiB7IEhUTUxGcmFnbWVudFNlcmlhbGl6YXRpb24s
IFhNTEZyYWdtZW50U2VyaWFsaXphdGlvbiB9OwogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
dGV4dCk7CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoUmFuZ2UmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCYsIGNvbnN0IFN0
cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kg
PSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKGNvbnN0IFN0cmluZyYsIEVsZW1lbnQqLCBQ
YXJzZXJDb250ZW50UG9saWN5LCBFeGNlcHRpb25Db2RlJik7CiBQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9yVHJhbnNmb3JtVG9GcmFnbWVudChjb25zdCBTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBEb2N1bWVudCogb3V0cHV0RG9jKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE1
NzA0NikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTY0LDcgKzU2NCw3IEBAIGJvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVy
OjpyZWFkUGxhaW4KICAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoJmNvbnRleHQsIFt0
ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKTsKKyAgICBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dCwgW3RleHQgcHJlY29tcG9zZWRTdHJp
bmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pOwogICAgIGlmICghZnJhZ21lbnQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCShy
ZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzMsMTAgKzQzMywxMCBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6
OnVwZGF0ZVJlbmRlcmluZyhQYXNzCiAgICAgICAgIGVsZW1lbnQoKS5yZW5kZXJlcigpLT5yZXBh
aW50KCk7CiB9CiAKLWJvb2wgRmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25z
dCBEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVk
RmlsZXMoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHBh
dGhzOwotICAgIGRyYWdEYXRhLT5hc0ZpbGVuYW1lcyhwYXRocyk7CisgICAgZHJhZ0RhdGEuYXNG
aWxlbmFtZXMocGF0aHMpOwogICAgIGlmIChwYXRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJKHJldmlzaW9u
IDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNhblNl
dFZhbHVlKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUeXBl
U3BlY2lmaWNWYWx1ZShTdHJpbmcmKSBPVkVSUklERTsgLy8gQ2hlY2tlZCBmaXJzdCwgYmVmb3Jl
IGludGVybmFsIHN0b3JhZ2Ugb3IgdGhlIHZhbHVlIGF0dHJpYnV0ZS4KICAgICB2aXJ0dWFsIHZv
aWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2
ZW50QmVoYXZpb3IpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCByZWNlaXZlRHJvcHBlZEZp
bGVzKGNvbnN0IERyYWdEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHJlY2VpdmVE
cm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIEljb24q
IGljb24oKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgaXNGaWxlVXBsb2FkKCkg
Y29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVNoYWRvd1N1YnRyZWUoKSBP
VkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAgdm9pZCBIVE1MSW5wdXRF
bGVtZW50OjpzZXRGaWxlcyhQYXNzUmVmUAogICAgIG1faW5wdXRUeXBlLT5zZXRGaWxlcyhmaWxl
cyk7CiB9CiAKLWJvb2wgSFRNTElucHV0RWxlbWVudDo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25z
dCBEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnJlY2VpdmVEcm9w
cGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIHJldHVybiBtX2lucHV0
VHlwZS0+cmVjZWl2ZURyb3BwZWRGaWxlcyhkcmFnRGF0YSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Myw3ICsy
NDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRGaWxlcyhQYXNzUmVmUHRyPEZpbGVMaXN0Pik7
CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIERyYWdEYXRhIGhhcyBtb3JlIHRo
YW4gb25lIGRyb3BwZWQgZmlsZXMuCi0gICAgYm9vbCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0
IERyYWdEYXRhKik7CisgICAgYm9vbCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRh
Jik7CiAKICAgICBJY29uKiBpY29uKCkgY29uc3Q7CiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSB1c2VkIGZvciByZW5kZXJpbmcgdGhlIGlucHV0IGFjdGl2ZSBkdXJpbmcgYQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9JbnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDUsNyArNzA1LDcgQEAg
U3RyaW5nIElucHV0VHlwZTo6c2FuaXRpemVWYWx1ZShjb25zdCBTdAogICAgIHJldHVybiBwcm9w
b3NlZFZhbHVlOwogfQogCi1ib29sIElucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25z
dCBEcmFnRGF0YSopCitib29sIElucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBE
cmFnRGF0YSYpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgRmlsZUxpc3QqIGZpbGVzKCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldEZpbGVzKFBhc3NSZWZQdHI8RmlsZUxpc3Q+KTsKICAgICAvLyBTaG91bGQgcmV0
dXJuIHRydWUgaWYgdGhlIGdpdmVuIERyYWdEYXRhIGhhcyBtb3JlIHRoYW4gb25lIGRyb3BwZWQg
ZmlsZXMuCi0gICAgdmlydHVhbCBib29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0Rh
dGEqKTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0
YSYpOwogICAgIHZpcnR1YWwgSWNvbiogaWNvbigpIGNvbnN0OwogICAgIC8vIFNob3VsZCByZXR1
cm4gdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyByZW5kZXJlciBmb3IgYSB0eXBlIGNhbiBkaXNw
bGF5IGEgc3VnZ2VzdGVkIHZhbHVlLgogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRTdWdnZXN0ZWRW
YWx1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkocmV2aXNpb24g
MTU3MDQ2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MzMsMTEgKzUzMywxMSBAQCBjbGFzcyBFbXB0eURyYWdDbGllbnQgOiBwdWJs
aWMgRHJhZ0NsaWVuCiBwdWJsaWM6CiAgICAgRW1wdHlEcmFnQ2xpZW50KCkgeyB9CiAgICAgdmly
dHVhbCB+RW1wdHlEcmFnQ2xpZW50KCkge30KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1E
cmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSopIE9W
RVJSSURFIHsgfQotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24o
RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqKSBPVkVSUklERSB7
IH0KLSAgICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhE
cmFnRGF0YSopIE9WRVJSSURFIHsgcmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbk5vbmU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9p
ZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50
UG9pbnQmLCBDbGlwYm9hcmQmKSBPVkVSUklERSB7IH0KKyAgICB2aXJ0dWFsIERyYWdEZXN0aW5h
dGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpIE9WRVJSSURFIHsgcmV0dXJu
IERyYWdEZXN0aW5hdGlvbkFjdGlvbk5vbmU7IH0KICAgICB2aXJ0dWFsIERyYWdTb3VyY2VBY3Rp
b24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYpIE9WRVJSSURF
IHsgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Ob25lOyB9Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0
RHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlw
Ym9hcmQqLCBGcmFtZSosIGJvb2wpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzdGFy
dERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xp
cGJvYXJkJiwgRnJhbWUmLCBib29sKSBPVkVSUklERSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZHJh
Z0NvbnRyb2xsZXJEZXN0cm95ZWQoKSBPVkVSUklERSB7IH0KIH07CiAjZW5kaWYgLy8gRU5BQkxF
KERSQUdfU1VQUE9SVCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NsaWVudC5oCShyZXZpc2lvbiAx
NTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNDQgKzMxLDM2IEBACiAjaW5jbHVkZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAi
SW50UG9pbnQuaCIKIAotI2lmIFBMQVRGT1JNKE1BQykKLU9CSkNfQ0xBU1MgRE9NRWxlbWVudDsK
LU9CSkNfQ0xBU1MgTlNVUkw7Ci1PQkpDX0NMQVNTIE5TU3RyaW5nOwotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBjbGFzcyBDbGlwYm9hcmQ7Ci0gICAgY2xhc3MgRHJh
Z0RhdGE7Ci0gICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSFRN
TEltYWdlRWxlbWVudDsKK2NsYXNzIENsaXBib2FyZDsKK2NsYXNzIERyYWdEYXRhOworY2xhc3Mg
RWxlbWVudDsKK2NsYXNzIEZyYW1lOworY2xhc3MgSW1hZ2U7CisKK2NsYXNzIERyYWdDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihE
cmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3
aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9p
bnQmLCBDbGlwYm9hcmQmKSA9IDA7CisgICAgdmlydHVhbCBEcmFnRGVzdGluYXRpb25BY3Rpb24g
YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCBEcmFnU291cmNl
QWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHJvb3RW
aWV3UG9pbnQpID0gMDsKICAgICAKLSAgICBjbGFzcyBEcmFnQ2xpZW50IHsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihE
cmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IElu
dFBvaW50JiwgQ2xpcGJvYXJkKikgPSAwOwotICAgICAgICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlv
bkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopID0gMDsKLQotICAgICAgICB2aXJ0
dWFsIERyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgcm9vdFZpZXdQb2ludCkgPSAwOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJh
Z0ltYWdlT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCosIEZyYW1l
KiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKSA9IDA7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0
YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdl
T3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCYsIEZyYW1lJiwgYm9v
bCBsaW5rRHJhZyA9IGZhbHNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYWdFbmRlZCgpIHsg
fQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICAvLyBNYWMtc3BlY2lmaWMgaGVscGVyIGZ1
bmN0aW9uIHRvIGFsbG93IGFjY2VzcyB0byB3ZWIgYXJjaGl2ZXMgYW5kIE5TUGFzdGVib2FyZCBl
eHRyYXMgaW4gV2ViS2l0LgotICAgICAgICAvLyBUaGlzIGlzIG5vdCBhYnN0cmFjdCBhcyB0aGF0
IHdvdWxkIHJlcXVpcmUgYW5vdGhlciAjaWYgUExBVEZPUk0oTUFDKSBmb3IgdGhlIFNWR0ltYWdl
IGNsaWVudCBlbXB0eSBpbXBsZW50YXRpb24uCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiwgRE9NRWxlbWVudCosIE5TVVJMICosIE5T
U3RyaW5nICosIEZyYW1lKikgeyB9CisgICAgLy8gTWFjLXNwZWNpZmljIGhlbHBlciBmdW5jdGlv
biB0byBhbGxvdyBhY2Nlc3MgdG8gd2ViIGFyY2hpdmVzIGFuZCBOU1Bhc3RlYm9hcmQgZXh0cmFz
IGluIFdlYktpdC4KKyAgICAvLyBUaGlzIGlzIG5vdCBhYnN0cmFjdCBhcyB0aGF0IHdvdWxkIHJl
cXVpcmUgYW5vdGhlciAjaWYgUExBVEZPUk0oTUFDKSBmb3IgdGhlIFNWR0ltYWdlIGNsaWVudCBl
bXB0eSBpbXBsZW50YXRpb24uCisgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShjb25zdCBTdHJpbmcmLCBFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiwg
RnJhbWUqKSB7IH0KICNlbmRpZgotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRyYWdF
bmRlZCgpIHsgfQogCi0gICAgICAgIHZpcnR1YWwgfkRyYWdDbGllbnQoKSB7IH0KLSAgICB9Owor
ICAgIHZpcnR1YWwgfkRyYWdDbGllbnQoKSB7IH0KK307CiAgICAgCi19Cit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyAhRHJhZ0NsaWVudF9oCisjZW5kaWYgLy8gRHJhZ0NsaWVu
dF9oCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODMsMTcgKzgzLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIFBsYXRmb3JtTW91c2VFdmVudCBjcmVhdGVNb3VzZUV2ZW50KERyYWdEYXRhKiBkcmFn
RGF0YSkKK3N0YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3JlYXRlTW91c2VFdmVudChEcmFnRGF0
YSYgZHJhZ0RhdGEpCiB7CiAgICAgYm9vbCBzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LCBtZXRh
S2V5OwogICAgIHNoaWZ0S2V5ID0gY3RybEtleSA9IGFsdEtleSA9IG1ldGFLZXkgPSBmYWxzZTsK
LSAgICBpbnQga2V5U3RhdGUgPSBkcmFnRGF0YS0+bW9kaWZpZXJLZXlTdGF0ZSgpOworICAgIGlu
dCBrZXlTdGF0ZSA9IGRyYWdEYXRhLm1vZGlmaWVyS2V5U3RhdGUoKTsKICAgICBzaGlmdEtleSA9
IHN0YXRpY19jYXN0PGJvb2w+KGtleVN0YXRlICYgUGxhdGZvcm1FdmVudDo6U2hpZnRLZXkpOwog
ICAgIGN0cmxLZXkgPSBzdGF0aWNfY2FzdDxib29sPihrZXlTdGF0ZSAmIFBsYXRmb3JtRXZlbnQ6
OkN0cmxLZXkpOwogICAgIGFsdEtleSA9IHN0YXRpY19jYXN0PGJvb2w+KGtleVN0YXRlICYgUGxh
dGZvcm1FdmVudDo6QWx0S2V5KTsKICAgICBtZXRhS2V5ID0gc3RhdGljX2Nhc3Q8Ym9vbD4oa2V5
U3RhdGUgJiBQbGF0Zm9ybUV2ZW50OjpNZXRhS2V5KTsKIAotICAgIHJldHVybiBQbGF0Zm9ybU1v
dXNlRXZlbnQoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLT5nbG9iYWxQb3Np
dGlvbigpLAorICAgIHJldHVybiBQbGF0Zm9ybU1vdXNlRXZlbnQoZHJhZ0RhdGEuY2xpZW50UG9z
aXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNlTW92ZWQsIDAsIHNoaWZ0
S2V5LCBjdHJsS2V5LCBhbHRLZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRh
S2V5LCBjdXJyZW50VGltZSgpKTsKIH0KQEAgLTExNywyNiArMTE3LDI1IEBAIERyYWdDb250cm9s
bGVyOjp+RHJhZ0NvbnRyb2xsZXIoKQogICAgIG1fY2xpZW50LmRyYWdDb250cm9sbGVyRGVzdHJv
eWVkKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50
RnJhZ21lbnRGcm9tRHJhZ0RhdGEoRHJhZ0RhdGEqIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUsIFBh
c3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3Nl
UGxhaW5UZXh0KQorc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRG
cmFnbWVudEZyb21EcmFnRGF0YShEcmFnRGF0YSYgZHJhZ0RhdGEsIEZyYW1lKiBmcmFtZSwgUmFu
Z2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQog
ewotICAgIEFTU0VSVChkcmFnRGF0YSk7CiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIAot
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNvbnRleHQtPm93bmVyRG9jdW1lbnQoKTsKLSAgICBp
ZiAoZHJhZ0RhdGEtPmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSkgewotICAgICAgICBpZiAo
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRyYWdEYXRhLT5hc0ZyYWdt
ZW50KGZyYW1lLCBjb250ZXh0LmdldCgpLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQp
KQorICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNvbnRleHQub3duZXJEb2N1bWVudCgpOworICAg
IGlmIChkcmFnRGF0YS5jb250YWluc0NvbXBhdGlibGVDb250ZW50KCkpIHsKKyAgICAgICAgaWYg
KFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkcmFnRGF0YS5hc0ZyYWdt
ZW50KGZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpKQogICAg
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogCi0gICAgICAgIGlmIChkcmFnRGF0YS0+Y29udGFp
bnNVUkwoZnJhbWUsIERyYWdEYXRhOjpEb05vdENvbnZlcnRGaWxlbmFtZXMpKSB7CisgICAgICAg
IGlmIChkcmFnRGF0YS5jb250YWluc1VSTChmcmFtZSwgRHJhZ0RhdGE6OkRvTm90Q29udmVydEZp
bGVuYW1lcykpIHsKICAgICAgICAgICAgIFN0cmluZyB0aXRsZTsKLSAgICAgICAgICAgIFN0cmlu
ZyB1cmwgPSBkcmFnRGF0YS0+YXNVUkwoZnJhbWUsIERyYWdEYXRhOjpEb05vdENvbnZlcnRGaWxl
bmFtZXMsICZ0aXRsZSk7CisgICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEuYXNVUkwo
ZnJhbWUsIERyYWdEYXRhOjpEb05vdENvbnZlcnRGaWxlbmFtZXMsICZ0aXRsZSk7CiAgICAgICAg
ICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8SFRNTEFu
Y2hvckVsZW1lbnQ+IGFuY2hvciA9IEhUTUxBbmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OwogICAgICAgICAgICAgICAgIGFuY2hvci0+c2V0SHJlZih1cmwpOwogICAgICAgICAgICAgICAg
IGlmICh0aXRsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRoZSBw
bGFpbiB0ZXh0IGZpcnN0IGJlY2F1c2UgdGhlIHVybCBtaWdodCBiZSBub3JtYWxpemVkIG9yIGVz
Y2FwZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNQbGFpblRl
eHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZHJhZ0RhdGEtPmFzUGxhaW5U
ZXh0KGZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zUGxh
aW5UZXh0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGRyYWdEYXRhLmFzUGxh
aW5UZXh0KGZyYW1lKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdXJsOwogICAgICAgICAgICAgICAgIH0K
QEAgLTE0OCwxNSArMTQ3LDE1IEBAIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGRvY3UKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoYWxsb3dQbGFp
blRleHQgJiYgZHJhZ0RhdGEtPmNvbnRhaW5zUGxhaW5UZXh0KCkpIHsKKyAgICBpZiAoYWxsb3dQ
bGFpblRleHQgJiYgZHJhZ0RhdGEuY29udGFpbnNQbGFpblRleHQoKSkgewogICAgICAgICBjaG9z
ZVBsYWluVGV4dCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21UZXh0
KGNvbnRleHQuZ2V0KCksIGRyYWdEYXRhLT5hc1BsYWluVGV4dChmcmFtZSkpLmdldCgpOworICAg
ICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBkcmFnRGF0YS5hc1Bs
YWluVGV4dChmcmFtZSkpLmdldCgpOwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQogCi1ib29s
IERyYWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIERy
YWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmRyYWdJc01vdmUoRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIHJldHVybiBt
X2RvY3VtZW50VW5kZXJNb3VzZSA9PSBtX2RyYWdJbml0aWF0b3IgJiYgc2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkgJiYgc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhaXNDb3B5S2V5RG93bihk
cmFnRGF0YSk7CiB9CkBAIC0xNzYsMTkgKzE3NSwxNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpk
cmFnRW5kZWQoKQogICAgIG1fY2xpZW50LmRyYWdFbmRlZCgpOwogfQogCi1EcmFnU2Vzc2lvbiBE
cmFnQ29udHJvbGxlcjo6ZHJhZ0VudGVyZWQoRHJhZ0RhdGEqIGRyYWdEYXRhKQorRHJhZ1Nlc3Np
b24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAg
ICByZXR1cm4gZHJhZ0VudGVyZWRPclVwZGF0ZWQoZHJhZ0RhdGEpOwogfQogCi12b2lkIERyYWdD
b250cm9sbGVyOjpkcmFnRXhpdGVkKERyYWdEYXRhKiBkcmFnRGF0YSkKK3ZvaWQgRHJhZ0NvbnRy
b2xsZXI6OmRyYWdFeGl0ZWQoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFn
RGF0YSk7Ci0KICAgICBpZiAoUmVmUHRyPEZyYW1lVmlldz4gdiA9IG1fcGFnZS5tYWluRnJhbWUo
KS52aWV3KCkpIHsKICAgICAgICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSA9ICghbV9k
b2N1bWVudFVuZGVyTW91c2UgfHwgbV9kb2N1bWVudFVuZGVyTW91c2UtPnNlY3VyaXR5T3JpZ2lu
KCktPmlzTG9jYWwoKSkgPyBDbGlwYm9hcmRSZWFkYWJsZSA6IENsaXBib2FyZFR5cGVzUmVhZGFi
bGU7Ci0gICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AocG9saWN5LCAqZHJhZ0RhdGEpOwotICAgICAgICBjbGlwYm9hcmQt
PnNldFNvdXJjZU9wZXJhdGlvbihkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNr
KCkpOworICAgICAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBDbGlwYm9hcmQ6OmNy
ZWF0ZUZvckRyYWdBbmREcm9wKHBvbGljeSwgZHJhZ0RhdGEpOworICAgICAgICBjbGlwYm9hcmQt
PnNldFNvdXJjZU9wZXJhdGlvbihkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2so
KSk7CiAgICAgICAgIG1fcGFnZS5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5jYW5jZWxEcmFn
QW5kRHJvcChjcmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKSwgY2xpcGJvYXJkLmdldCgpKTsKICAg
ICAgICAgY2xpcGJvYXJkLT5zZXRBY2Nlc3NQb2xpY3koQ2xpcGJvYXJkTnVtYik7ICAgIC8vIGlu
dmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgZm9yIHNlY3VyaXR5CiAgICAgfQpAQCAtMTk4LDIzICsx
OTUsMjIgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0V4aXRlZChEcmFnRGF0YQogICAgIG1f
ZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2UgPSAwOwogfQogCi1EcmFnU2Vzc2lvbiBEcmFnQ29u
dHJvbGxlcjo6ZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEqIGRyYWdEYXRhKQorRHJhZ1Nlc3Npb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdVcGRhdGVkKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICByZXR1
cm4gZHJhZ0VudGVyZWRPclVwZGF0ZWQoZHJhZ0RhdGEpOwogfQogCi1ib29sIERyYWdDb250cm9s
bGVyOjpwZXJmb3JtRHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIERyYWdDb250cm9sbGVy
OjpwZXJmb3JtRHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRh
KTsKLSAgICBtX2RvY3VtZW50VW5kZXJNb3VzZSA9IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVu
dEF0UG9pbnQoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOworICAgIG1fZG9jdW1lbnRVbmRl
ck1vdXNlID0gbV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQb2ludChkcmFnRGF0YS5jbGll
bnRQb3NpdGlvbigpKTsKICAgICBpZiAoKG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uICYgRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uREhUTUwpICYmIG1fZG9jdW1lbnRJc0hhbmRsaW5nRHJhZykgewogICAg
ICAgICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGlu
YXRpb25BY3Rpb25ESFRNTCwgZHJhZ0RhdGEpOwogICAgICAgICBSZWY8TWFpbkZyYW1lPiBtYWlu
RnJhbWUobV9wYWdlLm1haW5GcmFtZSgpKTsKICAgICAgICAgYm9vbCBwcmV2ZW50ZWREZWZhdWx0
ID0gZmFsc2U7CiAgICAgICAgIGlmIChtYWluRnJhbWUtPnZpZXcoKSkgewogICAgICAgICAgICAg
Ly8gU2VuZGluZyBhbiBldmVudCBjYW4gcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBvZiB0aGUg
dmlldyBhbmQgcGFydC4KLSAgICAgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9
IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoQ2xpcGJvYXJkUmVhZGFibGUsICpkcmFn
RGF0YSk7Ci0gICAgICAgICAgICBjbGlwYm9hcmQtPnNldFNvdXJjZU9wZXJhdGlvbihkcmFnRGF0
YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpOworICAgICAgICAgICAgUmVmUHRyPENs
aXBib2FyZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChDbGlw
Ym9hcmRSZWFkYWJsZSwgZHJhZ0RhdGEpOworICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXRTb3Vy
Y2VPcGVyYXRpb24oZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpOwogICAg
ICAgICAgICAgcHJldmVudGVkRGVmYXVsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVy
Zm9ybURyYWdBbmREcm9wKGNyZWF0ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBjbGlwYm9hcmQuZ2V0
KCkpOwogICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXRBY2Nlc3NQb2xpY3koQ2xpcGJvYXJkTnVt
Yik7IC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgZm9yIHNlY3VyaXR5CiAgICAgICAgIH0K
QEAgLTIzNSw3ICsyMzEsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZyhEcmFn
RGF0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1fY2xpZW50LndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQsIGRyYWdEYXRhKTsK
LSAgICBtX3BhZ2UubWFpbkZyYW1lKCkubG9hZGVyKCkubG9hZChGcmFtZUxvYWRSZXF1ZXN0KCZt
X3BhZ2UubWFpbkZyYW1lKCksIFJlc291cmNlUmVxdWVzdChkcmFnRGF0YS0+YXNVUkwoJm1fcGFn
ZS5tYWluRnJhbWUoKSkpKSk7CisgICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWQo
RnJhbWVMb2FkUmVxdWVzdCgmbV9wYWdlLm1haW5GcmFtZSgpLCBSZXNvdXJjZVJlcXVlc3QoZHJh
Z0RhdGEuYXNVUkwoJm1fcGFnZS5tYWluRnJhbWUoKSkpKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTI1MCwxMCArMjQ2LDkgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6bW91c2VNb3ZlZElu
dG9Eb2N1bQogICAgIG1fZG9jdW1lbnRVbmRlck1vdXNlID0gbmV3RG9jdW1lbnQ7CiB9CiAKLURy
YWdTZXNzaW9uIERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJlZE9yVXBkYXRlZChEcmFnRGF0YSog
ZHJhZ0RhdGEpCitEcmFnU2Vzc2lvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ0VudGVyZWRPclVwZGF0
ZWQoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFnRGF0YSk7Ci0gICAgbW91
c2VNb3ZlZEludG9Eb2N1bWVudChtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRy
YWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKSk7CisgICAgbW91c2VNb3ZlZEludG9Eb2N1bWVudCht
X3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLmNsaWVudFBvc2l0aW9u
KCkpKTsKIAogICAgIG1fZHJhZ0Rlc3RpbmF0aW9uQWN0aW9uID0gbV9jbGllbnQuYWN0aW9uTWFz
a0ZvckRyYWcoZHJhZ0RhdGEpOwogICAgIGlmIChtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiA9PSBE
cmFnRGVzdGluYXRpb25BY3Rpb25Ob25lKSB7CkBAIC0zMDEsMTAgKzI5Niw4IEBAIHN0YXRpYyBF
bGVtZW50KiBlbGVtZW50VW5kZXJNb3VzZShEb2N1bWUKICAgICByZXR1cm4gdG9FbGVtZW50KG4p
OwogfQogCi1ib29sIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoRHJhZ0RhdGEqIGRy
YWdEYXRhLCBEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFzaywgRHJhZ1Nlc3Npb24mIGRy
YWdTZXNzaW9uKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKERyYWdEYXRh
JiBkcmFnRGF0YSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2ssIERyYWdTZXNzaW9u
JiBkcmFnU2Vzc2lvbikKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotCiAgICAgaWYgKCFtX2Rv
Y3VtZW50VW5kZXJNb3VzZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMzUsMTIgKzMy
OCwxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoRHJhCiAgICAgfQog
CiAgICAgaWYgKChhY3Rpb25NYXNrICYgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCkgJiYgY2Fu
UHJvY2Vzc0RyYWcoZHJhZ0RhdGEpKSB7Ci0gICAgICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnND
b2xvcigpKSB7CisgICAgICAgIGlmIChkcmFnRGF0YS5jb250YWluc0NvbG9yKCkpIHsKICAgICAg
ICAgICAgIGRyYWdTZXNzaW9uLm9wZXJhdGlvbiA9IERyYWdPcGVyYXRpb25HZW5lcmljOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAotICAgICAgICBJbnRQb2ludCBwb2lu
dCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24o
KSk7CisgICAgICAgIEludFBvaW50IHBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRz
KGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpOwogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZWxlbWVudFVuZGVyTW91c2UobV9kb2N1bWVudFVuZGVyTW91c2UuZ2V0KCksIHBvaW50KTsKICAg
ICAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzYwLDcg
KzM1Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmEKICAgICAg
ICAgZHJhZ1Nlc3Npb24ubW91c2VJc092ZXJGaWxlSW5wdXQgPSBtX2ZpbGVJbnB1dEVsZW1lbnRV
bmRlck1vdXNlOwogICAgICAgICBkcmFnU2Vzc2lvbi5udW1iZXJPZkl0ZW1zVG9CZUFjY2VwdGVk
ID0gMDsKIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkZpbGVzID0gZHJhZ0RhdGEtPm51bWJl
ck9mRmlsZXMoKTsKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZGaWxlcyA9IGRyYWdEYXRhLm51
bWJlck9mRmlsZXMoKTsKICAgICAgICAgaWYgKG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2Up
IHsKICAgICAgICAgICAgIGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlLT5pc0Rpc2Fi
bGVkRm9ybUNvbnRyb2woKSkKICAgICAgICAgICAgICAgICBkcmFnU2Vzc2lvbi5udW1iZXJPZkl0
ZW1zVG9CZUFjY2VwdGVkID0gMDsKQEAgLTM5NywxMCArMzkwLDkgQEAgRHJhZ1NvdXJjZUFjdGlv
biBEcmFnQ29udHJvbGxlcjo6ZGVsZWdhdAogICAgIHJldHVybiBtX2RyYWdTb3VyY2VBY3Rpb247
CiB9CiAKLURyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQoRHJh
Z0RhdGEqIGRyYWdEYXRhKQorRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9u
Rm9yTG9hZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKLSAg
ICBEb2N1bWVudCogZG9jID0gbV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQb2ludChkcmFn
RGF0YS0+Y2xpZW50UG9zaXRpb24oKSk7CisgICAgRG9jdW1lbnQqIGRvYyA9IG1fcGFnZS5tYWlu
RnJhbWUoKS5kb2N1bWVudEF0UG9pbnQoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSk7CiAKICAg
ICBib29sIHBsdWdpbkRvY3VtZW50QWNjZXB0c0RyYWdzID0gZmFsc2U7CiAKQEAgLTQyOCwxOCAr
NDIwLDE2IEBAIHN0YXRpYyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW0KICAgICBy
ZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCku
aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6ZGlzcGF0Y2hU
ZXh0SW5wdXRFdmVudEZvcihGcmFtZSogaW5uZXJGcmFtZSwgRHJhZ0RhdGEqIGRyYWdEYXRhKQor
Ym9vbCBEcmFnQ29udHJvbGxlcjo6ZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZvcihGcmFtZSogaW5u
ZXJGcmFtZSwgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIEFTU0VSVChtX3BhZ2UuZHJhZ0Nh
cmV0Q29udHJvbGxlcigpLmhhc0NhcmV0KCkpOwotICAgIFN0cmluZyB0ZXh0ID0gbV9wYWdlLmRy
YWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpID8gIiIgOiBkcmFn
RGF0YS0+YXNQbGFpblRleHQoaW5uZXJGcmFtZSk7CisgICAgU3RyaW5nIHRleHQgPSBtX3BhZ2Uu
ZHJhZ0NhcmV0Q29udHJvbGxlcigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgPyBlbXB0eVN0
cmluZygpIDogZHJhZ0RhdGEuYXNQbGFpblRleHQoaW5uZXJGcmFtZSk7CiAgICAgTm9kZSogdGFy
Z2V0ID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCkuZmluZEV2ZW50VGFyZ2V0RnJvbShtX3BhZ2UuZHJh
Z0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRpb24oKSk7CiAgICAgcmV0dXJuIHRhcmdldC0+
ZGlzcGF0Y2hFdmVudChUZXh0RXZlbnQ6OmNyZWF0ZUZvckRyb3AoaW5uZXJGcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9tV2luZG93KCksIHRleHQpLCBJR05PUkVfRVhDRVBUSU9OKTsKIH0KIAotYm9vbCBE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEpCitib29s
IERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsK
LSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotCiAgICAgUmVmUHRyPEhUTUxJbnB1dEVsZW1lbnQ+IGZp
bGVJbnB1dCA9IG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2U7CiAgICAgaWYgKG1fZmlsZUlu
cHV0RWxlbWVudFVuZGVyTW91c2UpIHsKICAgICAgICAgbV9maWxlSW5wdXRFbGVtZW50VW5kZXJN
b3VzZS0+c2V0Q2FuUmVjZWl2ZURyb3BwZWRGaWxlcyhmYWxzZSk7CkBAIC00NDksNyArNDM5LDcg
QEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgIGlmICghbV9k
b2N1bWVudFVuZGVyTW91c2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEludFBvaW50
IHBvaW50ID0gbV9kb2N1bWVudFVuZGVyTW91c2UtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhk
cmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSk7CisgICAgSW50UG9pbnQgcG9pbnQgPSBtX2RvY3Vt
ZW50VW5kZXJNb3VzZS0+dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGRyYWdEYXRhLmNsaWVudFBv
c2l0aW9uKCkpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50VW5kZXJNb3VzZShtX2Rv
Y3VtZW50VW5kZXJNb3VzZS5nZXQoKSwgcG9pbnQpOwogICAgIGlmICghZWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU5LDggKzQ0OSw4IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICBpZiAobV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIo
KS5oYXNDYXJldCgpICYmICFkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKGlubmVyRnJhbWUuZ2V0
KCksIGRyYWdEYXRhKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoZHJhZ0RhdGEt
PmNvbnRhaW5zQ29sb3IoKSkgewotICAgICAgICBDb2xvciBjb2xvciA9IGRyYWdEYXRhLT5hc0Nv
bG9yKCk7CisgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zQ29sb3IoKSkgeworICAgICAgICBDb2xv
ciBjb2xvciA9IGRyYWdEYXRhLmFzQ29sb3IoKTsKICAgICAgICAgaWYgKCFjb2xvci5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gaW5u
ZXJSYW5nZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CkBA
IC00NzMsNyArNDYzLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhE
cgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZHJhZ0RhdGEtPmNvbnRh
aW5zRmlsZXMoKSAmJiBmaWxlSW5wdXQpIHsKKyAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNGaWxl
cygpICYmIGZpbGVJbnB1dCkgewogICAgICAgICAvLyBmaWxlSW5wdXQgc2hvdWxkIGJlIHRoZSBl
bGVtZW50IHdlIGhpdCB0ZXN0ZWQgZm9yLCB1bmxlc3MgaXQgd2FzIG1hZGUKICAgICAgICAgLy8g
ZGlzcGxheTpub25lIGluIGEgZHJvcCBldmVudCBoYW5kbGVyLgogICAgICAgICBBU1NFUlQoZmls
ZUlucHV0ID09IGVsZW1lbnQgfHwgIWZpbGVJbnB1dC0+cmVuZGVyZXIoKSk7CkBAIC00OTcsMTEg
KzQ4NywxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyCiAgICAg
Ly8gbWFudWFsbHkgY29udHJvbGxpbmcgZHJhZyBiZWhhdmlvdXIKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVk
UmVzb3VyY2VMb2FkZXIgPSByYW5nZS0+b3duZXJEb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9h
ZGVyKCk7CiAgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25T
dXBwcmVzc29yKGNhY2hlZFJlc291cmNlTG9hZGVyKTsKICAgICBpZiAoZHJhZ0lzTW92ZShpbm5l
ckZyYW1lLT5zZWxlY3Rpb24oKSwgZHJhZ0RhdGEpIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLSAg
ICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVu
dEZyb21EcmFnRGF0YShkcmFnRGF0YSwgaW5uZXJGcmFtZS5nZXQoKSwgcmFuZ2UsIHRydWUsIGNo
b3NlUGxhaW5UZXh0KTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShkcmFnRGF0YSwgaW5uZXJGcmFtZS5nZXQo
KSwgKnJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CiAgICAgICAgIGlmICghZnJhZ21lbnQg
fHwgIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCBy
YW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uRHJvcHBlZCkpIHsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQpAQCAtNTExLDEyICs1MDIsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgICAgICAgICAgLy8gTlNUZXh0VmlldyBiZWhhdmlv
ciBpcyB0byBhbHdheXMgc21hcnQgZGVsZXRlIG9uIG1vdmluZyBhIHNlbGVjdGlvbiwKICAgICAg
ICAgICAgIC8vIGJ1dCBvbmx5IHRvIHNtYXJ0IGluc2VydCBpZiB0aGUgc2VsZWN0aW9uIGdyYW51
bGFyaXR5IGlzIHdvcmQgZ3JhbnVsYXJpdHkuCiAgICAgICAgICAgICBib29sIHNtYXJ0RGVsZXRl
ID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc21hcnRJbnNlcnREZWxldGVFbmFibGVkKCk7Ci0gICAg
ICAgICAgICBib29sIHNtYXJ0SW5zZXJ0ID0gc21hcnREZWxldGUgJiYgaW5uZXJGcmFtZS0+c2Vs
ZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkgJiYgZHJhZ0RhdGEtPmNh
blNtYXJ0UmVwbGFjZSgpOworICAgICAgICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0RGVs
ZXRlICYmIGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51
bGFyaXR5ICYmIGRyYWdEYXRhLmNhblNtYXJ0UmVwbGFjZSgpOwogICAgICAgICAgICAgYXBwbHlD
b21tYW5kKE1vdmVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZnJhZ21lbnQsIGRyYWdDYXJldC5i
YXNlKCksIHNtYXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSkpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRy
YWdDYXJldCwgcmFuZ2UsIHBvaW50KSkgewogICAgICAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpDb21tYW5kT3B0aW9ucyBvcHRpb25zID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnRO
ZXN0aW5nOwotICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS0+Y2FuU21hcnRSZXBsYWNlKCkp
CisgICAgICAgICAgICAgICAgaWYgKGRyYWdEYXRhLmNhblNtYXJ0UmVwbGFjZSgpKQogICAgICAg
ICAgICAgICAgICAgICBvcHRpb25zIHw9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJl
cGxhY2U7CiAgICAgICAgICAgICAgICAgaWYgKGNob3NlUGxhaW5UZXh0KQogICAgICAgICAgICAg
ICAgICAgICBvcHRpb25zIHw9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlOwpA
QCAtNTI0LDE0ICs1MTUsMTQgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJh
ZyhEcgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgU3Ry
aW5nIHRleHQgPSBkcmFnRGF0YS0+YXNQbGFpblRleHQoaW5uZXJGcmFtZS5nZXQoKSk7CisgICAg
ICAgIFN0cmluZyB0ZXh0ID0gZHJhZ0RhdGEuYXNQbGFpblRleHQoaW5uZXJGcmFtZS5nZXQoKSk7
CiAgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hv
dWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uRHJvcHBl
ZCkpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCiAgICAgICAgIG1f
Y2xpZW50LndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFj
dGlvbkVkaXQsIGRyYWdEYXRhKTsKICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcmFuZ2UsIHBvaW50KSkKLSAgICAgICAgICAg
IGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50
VW5kZXJNb3VzZSwgY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZS5nZXQoKSwgdGV4dCksICBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQgfCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50
TmVzdGluZykpOworICAgICAgICAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRlck1vdXNlLCBjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpyYW5nZSwgdGV4dCksICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1l
bnQgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSB8IFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpQcmV2ZW50TmVzdGluZykpOwogICAgIH0KIAogICAgIGlmIChyb290RWRpdGFi
bGVFbGVtZW50KSB7CkBAIC01NDIsMTQgKzUzMywxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjpj
b25jbHVkZUVkaXREcmFnKERyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNhblByb2Nlc3NEcmFnKERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNhblByb2Nlc3NEcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQo
ZHJhZ0RhdGEpOwotCi0gICAgaWYgKCFkcmFnRGF0YS0+Y29udGFpbnNDb21wYXRpYmxlQ29udGVu
dCgpKQorICAgIGlmICghZHJhZ0RhdGEuY29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRQb2ludCBwb2ludCA9IG1fcGFnZS5tYWluRnJh
bWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkp
OworICAgIEludFBvaW50IHBvaW50ID0gbV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyhkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKTsKICAgICBIaXRUZXN0UmVzdWx0
IHJlc3VsdCA9IEhpdFRlc3RSZXN1bHQocG9pbnQpOwogICAgIGlmICghbV9wYWdlLm1haW5GcmFt
ZSgpLmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NTksNyAr
NTQ4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y2FuUHJvY2Vzc0RyYWcoRHJhZwogICAgIGlm
ICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zRmlsZXMoKSAmJiBhc0ZpbGVJbnB1dChyZXN1bHQu
aW5uZXJOb25TaGFyZWROb2RlKCkpKQorICAgIGlmIChkcmFnRGF0YS5jb250YWluc0ZpbGVzKCkg
JiYgYXNGaWxlSW5wdXQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBpZiAocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5pc1BsdWdp
bkVsZW1lbnQoKSkgewpAQCAtNTk0LDkgKzU4Myw4IEBAIHN0YXRpYyBEcmFnT3BlcmF0aW9uIGRl
ZmF1bHRPcGVyYXRpb25Gb3IKICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkdlbmVyaWM7CiB9CiAK
LWJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURIVE1MRHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEsIERy
YWdPcGVyYXRpb24mIG9wZXJhdGlvbikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURIVE1MRHJh
ZyhEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYWdPcGVyYXRpb24mIG9wZXJhdGlvbikKIHsKLSAgICBB
U1NFUlQoZHJhZ0RhdGEpOwogICAgIEFTU0VSVChtX2RvY3VtZW50VW5kZXJNb3VzZSk7CiAgICAg
UmVmPE1haW5GcmFtZT4gbWFpbkZyYW1lKG1fcGFnZS5tYWluRnJhbWUoKSk7CiAgICAgUmVmUHRy
PEZyYW1lVmlldz4gdmlld1Byb3RlY3RvciA9IG1haW5GcmFtZS0+dmlldygpOwpAQCAtNjA0LDgg
KzU5Miw4IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURIVE1MRHJhZyhEcmFnRGEKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSA9IG1f
ZG9jdW1lbnRVbmRlck1vdXNlLT5zZWN1cml0eU9yaWdpbigpLT5pc0xvY2FsKCkgPyBDbGlwYm9h
cmRSZWFkYWJsZSA6IENsaXBib2FyZFR5cGVzUmVhZGFibGU7Ci0gICAgUmVmUHRyPENsaXBib2Fy
ZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChwb2xpY3ksICpk
cmFnRGF0YSk7Ci0gICAgRHJhZ09wZXJhdGlvbiBzcmNPcE1hc2sgPSBkcmFnRGF0YS0+ZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrKCk7CisgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJk
ID0gQ2xpcGJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChwb2xpY3ksIGRyYWdEYXRhKTsKKyAg
ICBEcmFnT3BlcmF0aW9uIHNyY09wTWFzayA9IGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0
aW9uTWFzaygpOwogICAgIGNsaXBib2FyZC0+c2V0U291cmNlT3BlcmF0aW9uKHNyY09wTWFzayk7
CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQgPSBjcmVhdGVNb3VzZUV2ZW50KGRyYWdE
YXRhKTsKQEAgLTY2NCwxOSArNjUyLDE3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFn
Z2FibGVFbGVtZW4KICAgICByZXR1cm4gKHN0YXRlLnR5cGUgJiBEcmFnU291cmNlQWN0aW9uU2Vs
ZWN0aW9uKSA/IHN0YXJ0RWxlbWVudCA6IDA7CiB9CiAKLXN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0
Q2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2Fj
aGVkSW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAg
UmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7CisgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVy
IHx8ICFyZW5kZXJlci0+aXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZW5kZXJJ
bWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsKICAgICByZXR1cm4gaW1hZ2Ut
PmNhY2hlZEltYWdlKCk7CiB9CiAKLXN0YXRpYyBJbWFnZSogZ2V0SW1hZ2UoRWxlbWVudCogZWxl
bWVudCkKK3N0YXRpYyBJbWFnZSogZ2V0SW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBB
U1NFUlQoZWxlbWVudCk7CiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gZ2V0Q2FjaGVk
SW1hZ2UoZWxlbWVudCk7CiAgICAgLy8gRG9uJ3QgdXNlIGNhY2hlZEltYWdlLT5pbWFnZUZvclJl
bmRlcmVyKCkgaGVyZSBhcyB0aGF0IG1heSByZXR1cm4gQml0bWFwSW1hZ2VzIGZvciBjYWNoZWQg
U1ZHIEltYWdlcy4KICAgICAvLyBVc2VycyBvZiBnZXRJbWFnZSgpIHdhbnQgYWNjZXNzIHRvIHRo
ZSBTVkdJbWFnZSwgaW4gb3JkZXIgdG8gZmlndXJlIG91dCB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9u
cywKQEAgLTY4NSwxMSArNjcxLDExIEBAIHN0YXRpYyBJbWFnZSogZ2V0SW1hZ2UoRWxlbWVudCog
ZWxlbWVudCkKICAgICAgICAgY2FjaGVkSW1hZ2UtPmltYWdlKCkgOiAwOwogfQogCi1zdGF0aWMg
dm9pZCBzZWxlY3RFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgdm9pZCBzZWxlY3RF
bGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVs
ZW1lbnQtPmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZShl
bGVtZW50KTsKLSAgICBlbGVtZW50LT5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgp
OworICAgIHJhbmdlLT5zZWxlY3ROb2RlKCZlbGVtZW50KTsKKyAgICBlbGVtZW50LmRvY3VtZW50
KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFu
Z2UuZ2V0KCksIERPV05TVFJFQU0pKTsKIH0KIAogc3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JE
SFRNTERyYWcoY29uc3QgSW50UG9pbnQmIG1vdXNlRHJhZ2dlZFBvaW50LCBjb25zdCBJbnRQb2lu
dCYgZHJhZ09yaWdpbiwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9mZnNldCwgYm9vbCBpc0xp
bmtJbWFnZSkKQEAgLTcwOCw5ICs2OTQsOSBAQCBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvckRI
VE1MRHJhZyhjb25zCiAgICAgcmV0dXJuIEludFBvaW50KGRyYWdPcmlnaW4ueCgpIC0gZHJhZ0lt
YWdlT2Zmc2V0LngoKSwgZHJhZ09yaWdpbi55KCkgKyB5T2Zmc2V0KTsKIH0KIAotc3RhdGljIElu
dFBvaW50IGRyYWdMb2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lKiBzcmMpCitzdGF0aWMgSW50UG9p
bnQgZHJhZ0xvY0ZvclNlbGVjdGlvbkRyYWcoRnJhbWUmIHNyYykKIHsKLSAgICBJbnRSZWN0IGRy
YWdnaW5nUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc3JjLT5zZWxlY3Rpb24oKS5ib3VuZHMoKSk7
CisgICAgSW50UmVjdCBkcmFnZ2luZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy5zZWxlY3Rp
b24oKS5ib3VuZHMoKSk7CiAgICAgaW50IHhwb3MgPSBkcmFnZ2luZ1JlY3QubWF4WCgpOwogICAg
IHhwb3MgPSBkcmFnZ2luZ1JlY3QueCgpIDwgeHBvcyA/IGRyYWdnaW5nUmVjdC54KCkgOiB4cG9z
OwogICAgIGludCB5cG9zID0gZHJhZ2dpbmdSZWN0Lm1heFkoKTsKQEAgLTcyMywxNCArNzA5LDEy
IEBAIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yU2VsZWN0aW9uRHJhZygKICAgICByZXR1cm4g
SW50UG9pbnQoeHBvcywgeXBvcyk7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJh
ZyhGcmFtZSogc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uIHNyY09w
LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGRyYWdFdmVudCwgY29uc3QgSW50UG9pbnQmIGRy
YWdPcmlnaW4pCitib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29u
c3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJhdGlvbiBzcmNPcCwgY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBkcmFnRXZlbnQsIGNvbnN0IEludFBvaW50JiBkcmFnT3JpZ2luKQogewotICAg
IEFTU0VSVChzcmMpOwotCi0gICAgaWYgKCFzcmMtPnZpZXcoKSB8fCAhc3JjLT5jb250ZW50UmVu
ZGVyZXIoKSkKKyAgICBpZiAoIXNyYy52aWV3KCkgfHwgIXNyYy5jb250ZW50UmVuZGVyZXIoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0
ID0gc3JjLT5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChkcmFnT3JpZ2luLCBI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlKTsKKyAgICBI
aXRUZXN0UmVzdWx0IGhpdFRlc3RSZXN1bHQgPSBzcmMuZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJl
c3VsdEF0UG9pbnQoZHJhZ09yaWdpbiwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVz
dFJlcXVlc3Q6OkFjdGl2ZSk7CiAgICAgaWYgKCFzdGF0ZS5zb3VyY2UtPmNvbnRhaW5zKGhpdFRl
c3RSZXN1bHQuaW5uZXJOb2RlKCkpKQogICAgICAgICAvLyBUaGUgb3JpZ2luYWwgbm9kZSBiZWlu
ZyBkcmFnZ2VkIGlzbid0IHVuZGVyIHRoZSBkcmFnIG9yaWdpbiBhbnltb3JlLi4uIG1heWJlIGl0
IHdhcwogICAgICAgICAvLyBoaWRkZW4gb3IgbW92ZWQgb3V0IGZyb20gdW5kZXIgdGhlIGN1cnNv
ci4gUmVnYXJkbGVzcywgd2UgZG9uJ3Qgd2FudCB0byBzdGFydCBhIGRyYWcgb24KQEAgLTczOSw3
ICs3MjMsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUqIHNyCiAgICAg
VVJMIGxpbmtVUkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIFVSTCBp
bWFnZVVSTCA9IGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpOwogCi0gICAgSW50UG9p
bnQgbW91c2VEcmFnZ2VkUG9pbnQgPSBzcmMtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFn
RXZlbnQucG9zaXRpb24oKSk7CisgICAgSW50UG9pbnQgbW91c2VEcmFnZ2VkUG9pbnQgPSBzcmMu
dmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGRyYWdFdmVudC5wb3NpdGlvbigpKTsKIAogICAgIG1f
ZHJhZ2dpbmdJbWFnZVVSTCA9IFVSTCgpOwogICAgIG1fc291cmNlRHJhZ09wZXJhdGlvbiA9IHNy
Y09wOwpAQCAtNzQ4LDkgKzczMiwxMSBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWco
RnJhbWUqIHNyCiAgICAgSW50UG9pbnQgZHJhZ0xvYygwLCAwKTsKICAgICBJbnRQb2ludCBkcmFn
SW1hZ2VPZmZzZXQoMCwgMCk7CiAKLSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IHN0YXRlLmNs
aXBib2FyZC5nZXQoKTsKKyAgICBBU1NFUlQoc3RhdGUuY2xpcGJvYXJkKTsKKworICAgIENsaXBi
b2FyZCYgY2xpcGJvYXJkID0gKnN0YXRlLmNsaXBib2FyZDsKICAgICBpZiAoc3RhdGUudHlwZSA9
PSBEcmFnU291cmNlQWN0aW9uREhUTUwpCi0gICAgICAgIGRyYWdJbWFnZSA9IGNsaXBib2FyZC0+
Y3JlYXRlRHJhZ0ltYWdlKGRyYWdJbWFnZU9mZnNldCk7CisgICAgICAgIGRyYWdJbWFnZSA9IGNs
aXBib2FyZC5jcmVhdGVEcmFnSW1hZ2UoZHJhZ0ltYWdlT2Zmc2V0KTsKICAgICBpZiAoc3RhdGUu
dHlwZSA9PSBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uIHx8ICFpbWFnZVVSTC5pc0VtcHR5KCkg
fHwgIWxpbmtVUkwuaXNFbXB0eSgpKQogICAgICAgICAvLyBTZWxlY3Rpb24sIGltYWdlLCBhbmQg
bGluayBkcmFncyByZWNlaXZlIGEgZGVmYXVsdCBzZXQgb2YgYWxsb3dlZCBkcmFnIG9wZXJhdGlv
bnMgdGhhdAogICAgICAgICAvLyBmb2xsb3dzIGZyb206CkBAIC03NjYsNDUgKzc1Miw0NiBAQCBi
b29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUqIHNyCiAKICAgICBib29sIHN0YXJ0
ZWREcmFnID0gdHJ1ZTsgLy8gb3B0aW1pc20gLSB3ZSBhbG1vc3QgYWx3YXlzIG1hbmFnZSB0byBz
dGFydCB0aGUgZHJhZwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRlLnNvdXJjZS5nZXQo
KTsKKyAgICBBU1NFUlQoc3RhdGUuc291cmNlKTsKKyAgICBFbGVtZW50JiBlbGVtZW50ID0gKnN0
YXRlLnNvdXJjZTsKIAogICAgIEltYWdlKiBpbWFnZSA9IGdldEltYWdlKGVsZW1lbnQpOwogICAg
IGlmIChzdGF0ZS50eXBlID09IERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pIHsKLSAgICAgICAg
aWYgKCFjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpIHsKKyAgICAgICAgaWYgKCFj
bGlwYm9hcmQucGFzdGVib2FyZCgpLmhhc0RhdGEoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IFRoaXMgZW50aXJlIGJsb2NrIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGNvZGUgaW4gRWRp
dG9yOjpjb3B5LCBhbmQgdGhlIGNvZGUgc2hvdWxkIGJlIHNoYXJlZC4KIAotICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBz
cmMuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChz
ZWxlY3Rpb25SYW5nZSk7CiAKLSAgICAgICAgICAgIHNyYy0+ZWRpdG9yKCkud2lsbFdyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHNy
Yy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoc2VsZWN0aW9uUmFuZ2Uu
Z2V0KCkpOwogCi0gICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy0+
c2VsZWN0aW9uKCkuc3RhcnQoKSkpCi0gICAgICAgICAgICAgICAgY2xpcGJvYXJkLT5wYXN0ZWJv
YXJkKCkud3JpdGVQbGFpblRleHQoc3JjLT5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9h
cmQoKSwgUGFzdGVib2FyZDo6Q2Fubm90U21hcnRSZXBsYWNlKTsKKyAgICAgICAgICAgIGlmIChl
bmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3JjLnNlbGVjdGlvbigpLnN0YXJ0KCkpKQorICAgICAg
ICAgICAgICAgIGNsaXBib2FyZC5wYXN0ZWJvYXJkKCkud3JpdGVQbGFpblRleHQoc3JjLmVkaXRv
cigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpLCBQYXN0ZWJvYXJkOjpDYW5ub3RTbWFydFJl
cGxhY2UpOwogICAgICAgICAgICAgZWxzZSB7CiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShFRkwpCi0gICAgICAgICAgICAgICAgc3JjLT5lZGl0b3IoKS53cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKSk7CisgICAgICAgICAgICAgICAgc3JjLmVk
aXRvcigpLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNsaXBib2FyZC5wYXN0ZWJvYXJkKCkp
OwogI2Vsc2UKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIgcGxh
dGZvcm1zIHRvIG1hdGNoIE1hYyBhbmQgZGVsZXRlIHRoaXMuCi0gICAgICAgICAgICAgICAgY2xp
cGJvYXJkLT5wYXN0ZWJvYXJkKCkud3JpdGVTZWxlY3Rpb24oc2VsZWN0aW9uUmFuZ2UuZ2V0KCks
IHNyYy0+ZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgc3JjLCBJbmNsdWRlSW1hZ2VB
bHRUZXh0Rm9yQ2xpcGJvYXJkKTsKKyAgICAgICAgICAgICAgICBjbGlwYm9hcmQucGFzdGVib2Fy
ZCgpLndyaXRlU2VsZWN0aW9uKCpzZWxlY3Rpb25SYW5nZSwgc3JjLmVkaXRvcigpLmNhblNtYXJ0
Q29weU9yRGVsZXRlKCksIHNyYywgSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CiAj
ZW5kaWYKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgc3JjLT5lZGl0b3IoKS5kaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOworICAgICAgICAgICAgc3JjLmVkaXRvcigpLmRpZFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7CiAgICAgICAgIH0KICAgICAgICAgbV9jbGllbnQu
d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24sIGRy
YWdPcmlnaW4sIGNsaXBib2FyZCk7CiAgICAgICAgIGlmICghZHJhZ0ltYWdlKSB7Ci0gICAgICAg
ICAgICBkcmFnSW1hZ2UgPSBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oc3JjLT5kcmFnSW1h
Z2VGb3JTZWxlY3Rpb24oKSwgRHJhZ0ltYWdlQWxwaGEpOworICAgICAgICAgICAgZHJhZ0ltYWdl
ID0gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKHNyYy5kcmFnSW1hZ2VGb3JTZWxlY3Rpb24o
KSwgRHJhZ0ltYWdlQWxwaGEpOwogICAgICAgICAgICAgZHJhZ0xvYyA9IGRyYWdMb2NGb3JTZWxl
Y3Rpb25EcmFnKHNyYyk7CiAgICAgICAgICAgICBtX2RyYWdPZmZzZXQgPSBJbnRQb2ludChkcmFn
T3JpZ2luLngoKSAtIGRyYWdMb2MueCgpLCBkcmFnT3JpZ2luLnkoKSAtIGRyYWdMb2MueSgpKTsK
ICAgICAgICAgfQogICAgICAgICBkb1N5c3RlbURyYWcoZHJhZ0ltYWdlLCBkcmFnTG9jLCBkcmFn
T3JpZ2luLCBjbGlwYm9hcmQsIHNyYywgZmFsc2UpOwotICAgIH0gZWxzZSBpZiAoIWltYWdlVVJM
LmlzRW1wdHkoKSAmJiBlbGVtZW50ICYmIGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkgJiYgKG1f
ZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VBY3Rpb25JbWFnZSkpIHsKKyAgICB9IGVsc2Ug
aWYgKCFpbWFnZVVSTC5pc0VtcHR5KCkgJiYgaW1hZ2UgJiYgIWltYWdlLT5pc051bGwoKSAmJiAo
bV9kcmFnU291cmNlQWN0aW9uICYgRHJhZ1NvdXJjZUFjdGlvbkltYWdlKSkgewogICAgICAgICAv
LyBXZSBzaG91bGRuJ3QgYmUgc3RhcnRpbmcgYSBkcmFnIGZvciBhbiBpbWFnZSB0aGF0IGNhbid0
IHByb3ZpZGUgYW4gZXh0ZW5zaW9uLgogICAgICAgICAvLyBUaGlzIGlzIGFuIGVhcmx5IGRldGVj
dGlvbiBmb3IgcHJvYmxlbXMgZW5jb3VudGVyZWQgbGF0ZXIgdXBvbiBkcm9wLgogICAgICAgICBB
U1NFUlQoIWltYWdlLT5maWxlbmFtZUV4dGVuc2lvbigpLmlzRW1wdHkoKSk7Ci0gICAgICAgIGlm
ICghY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgpKSB7CisgICAgICAgIGlmICghY2xp
cGJvYXJkLnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpIHsKICAgICAgICAgICAgIG1fZHJhZ2dpbmdJ
bWFnZVVSTCA9IGltYWdlVVJMOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzQ29udGVudFJp
Y2hseUVkaXRhYmxlKCkpCisgICAgICAgICAgICBpZiAoZWxlbWVudC5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQoZWxlbWVudCk7CiAgICAg
ICAgICAgICBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY2xpcGJvYXJkLCBlbGVtZW50LCAhbGlu
a1VSTC5pc0VtcHR5KCkgPyBsaW5rVVJMIDogaW1hZ2VVUkwsIGhpdFRlc3RSZXN1bHQuYWx0RGlz
cGxheVN0cmluZygpKTsKICAgICAgICAgfQpAQCAtODEzLDMxICs4MDAsMzEgQEAgYm9vbCBEcmFn
Q29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogCiAgICAgICAgIGlmICghZHJhZ0ltYWdl
KSB7CiAgICAgICAgICAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGhpdFRlc3RSZXN1bHQuaW1hZ2VS
ZWN0KCk7Ci0gICAgICAgICAgICBpbWFnZVJlY3Quc2V0TG9jYXRpb24obV9wYWdlLm1haW5GcmFt
ZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHNyYy0+dmlldygpLT5jb250ZW50c1RvUm9v
dFZpZXcoaW1hZ2VSZWN0LmxvY2F0aW9uKCkpKSk7CisgICAgICAgICAgICBpbWFnZVJlY3Quc2V0
TG9jYXRpb24obV9wYWdlLm1haW5GcmFtZSgpLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHNy
Yy52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhpbWFnZVJlY3QubG9jYXRpb24oKSkpKTsKICAg
ICAgICAgICAgIGRvSW1hZ2VEcmFnKGVsZW1lbnQsIGRyYWdPcmlnaW4sIGhpdFRlc3RSZXN1bHQu
aW1hZ2VSZWN0KCksIGNsaXBib2FyZCwgc3JjLCBtX2RyYWdPZmZzZXQpOwotICAgICAgICB9IGVs
c2UKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERIVE1MIGRlZmluZWQgZHJhZyBp
bWFnZQogICAgICAgICAgICAgZG9TeXN0ZW1EcmFnKGRyYWdJbWFnZSwgZHJhZ0xvYywgZHJhZ09y
aWdpbiwgY2xpcGJvYXJkLCBzcmMsIGZhbHNlKTsKLQorICAgICAgICB9CiAgICAgfSBlbHNlIGlm
ICghbGlua1VSTC5pc0VtcHR5KCkgJiYgKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VB
Y3Rpb25MaW5rKSkgewotICAgICAgICBpZiAoIWNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmhhc0Rh
dGEoKSkKKyAgICAgICAgaWYgKCFjbGlwYm9hcmQucGFzdGVib2FyZCgpLmhhc0RhdGEoKSkKICAg
ICAgICAgICAgIC8vIFNpbXBsaWZ5IHdoaXRlc3BhY2Ugc28gdGhlIHRpdGxlIHB1dCBvbiB0aGUg
Y2xpcGJvYXJkIHJlc2VtYmxlcyB3aGF0IHRoZSB1c2VyIHNlZXMKICAgICAgICAgICAgIC8vIG9u
IHRoZSB3ZWIgcGFnZS4gVGhpcyBpbmNsdWRlcyByZXBsYWNpbmcgbmV3bGluZXMgd2l0aCBzcGFj
ZXMuCi0gICAgICAgICAgICBzcmMtPmVkaXRvcigpLmNvcHlVUkwobGlua1VSTCwgaGl0VGVzdFJl
c3VsdC50ZXh0Q29udGVudCgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLCBjbGlwYm9hcmQtPnBhc3Rl
Ym9hcmQoKSk7CisgICAgICAgICAgICBzcmMuZWRpdG9yKCkuY29weVVSTChsaW5rVVJMLCBoaXRU
ZXN0UmVzdWx0LnRleHRDb250ZW50KCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCksIGNsaXBib2FyZC5w
YXN0ZWJvYXJkKCkpOwogCi0gICAgICAgIGlmIChzcmMtPnNlbGVjdGlvbigpLmlzQ2FyZXQoKSAm
JiBzcmMtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgaWYgKHNy
Yy5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgc3JjLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkpIHsKICAgICAgICAgICAgIC8vIGEgdXNlciBjYW4gaW5pdGlhdGUgYSBkcmFnIG9uIGEg
bGluayB3aXRob3V0IGhhdmluZyBhbnkgdGV4dAogICAgICAgICAgICAgLy8gc2VsZWN0ZWQuICBJ
biB0aGlzIGNhc2UsIHdlIHNob3VsZCBleHBhbmQgdGhlIHNlbGVjdGlvbiB0bwogICAgICAgICAg
ICAgLy8gdGhlIGVuY2xvc2luZyBhbmNob3IgZWxlbWVudAotICAgICAgICAgICAgUG9zaXRpb24g
cG9zID0gc3JjLT5zZWxlY3Rpb24oKS5iYXNlKCk7CisgICAgICAgICAgICBQb3NpdGlvbiBwb3Mg
PSBzcmMuc2VsZWN0aW9uKCkuYmFzZSgpOwogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGVuY2xv
c2luZ0FuY2hvckVsZW1lbnQocG9zKTsKICAgICAgICAgICAgIGlmIChub2RlKQotICAgICAgICAg
ICAgICAgIHNyYy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246OnNl
bGVjdGlvbkZyb21Db250ZW50c09mTm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgc3JjLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUobm9kZSkpOwogICAgICAgICB9CiAKICAgICAgICAgbV9jbGllbnQud2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb25MaW5rLCBkcmFnT3JpZ2luLCBj
bGlwYm9hcmQpOwogICAgICAgICBpZiAoIWRyYWdJbWFnZSkgewotICAgICAgICAgICAgZHJhZ0lt
YWdlID0gY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhsaW5rVVJMLCBoaXRUZXN0UmVzdWx0LnRleHRD
b250ZW50KCksIHNyYy0+c2V0dGluZ3MoKS5mb250UmVuZGVyaW5nTW9kZSgpKTsKKyAgICAgICAg
ICAgIGRyYWdJbWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZvckxpbmsobGlua1VSTCwgaGl0VGVzdFJl
c3VsdC50ZXh0Q29udGVudCgpLCBzcmMuc2V0dGluZ3MoKS5mb250UmVuZGVyaW5nTW9kZSgpKTsK
ICAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGRyYWdJbWFnZVNpemUoZHJhZ0ltYWdlKTsKICAg
ICAgICAgICAgIG1fZHJhZ09mZnNldCA9IEludFBvaW50KC1zaXplLndpZHRoKCkgLyAyLCAtTGlu
a0RyYWdCb3JkZXJJbnNldCk7CiAgICAgICAgICAgICBkcmFnTG9jID0gSW50UG9pbnQobW91c2VE
cmFnZ2VkUG9pbnQueCgpICsgbV9kcmFnT2Zmc2V0LngoKSwgbW91c2VEcmFnZ2VkUG9pbnQueSgp
ICsgbV9kcmFnT2Zmc2V0LnkoKSk7CkBAIC04NjEsNyArODQ4LDcgQEAgYm9vbCBEcmFnQ29udHJv
bGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogICAgIHJldHVybiBzdGFydGVkRHJhZzsKIH0KIAot
dm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9JbWFnZURyYWcoRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
SW50UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0IEludFJlY3QmIHJlY3QsIENsaXBib2FyZCogY2xp
cGJvYXJkLCBGcmFtZSogZnJhbWUsIEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQpCit2b2lkIERy
YWdDb250cm9sbGVyOjpkb0ltYWdlRHJhZyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBJbnRQb2lu
dCYgZHJhZ09yaWdpbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgQ2xpcGJvYXJkJiBjbGlwYm9hcmQs
IEZyYW1lJiBmcmFtZSwgSW50UG9pbnQmIGRyYWdJbWFnZU9mZnNldCkKIHsKICAgICBJbnRQb2lu
dCBtb3VzZURvd25Qb2ludCA9IGRyYWdPcmlnaW47CiAgICAgRHJhZ0ltYWdlUmVmIGRyYWdJbWFn
ZSA9IDA7CkBAIC04NjksNyArODU2LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9JbWFnZURy
YWcoRWxlbWVudAogCiAgICAgSW1hZ2UqIGltYWdlID0gZ2V0SW1hZ2UoZWxlbWVudCk7CiAgICAg
aWYgKGltYWdlICYmIGltYWdlLT5zaXplKCkuaGVpZ2h0KCkgKiBpbWFnZS0+c2l6ZSgpLndpZHRo
KCkgPD0gTWF4T3JpZ2luYWxJbWFnZUFyZWEKLSAgICAgICAgJiYgKGRyYWdJbWFnZSA9IGNyZWF0
ZURyYWdJbWFnZUZyb21JbWFnZShpbWFnZSwgZWxlbWVudC0+cmVuZGVyZXIoKSA/IEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbihlbGVtZW50LT5yZW5kZXJlcigpLT5zaG91bGRSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbigpKSA6IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbigpKSkpIHsKKyAg
ICAgICAgJiYgKGRyYWdJbWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShpbWFnZSwgZWxl
bWVudC5yZW5kZXJlcigpID8gSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKGVsZW1lbnQucmVu
ZGVyZXIoKS0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSkgOiBJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24oKSkpKSB7CiAgICAgICAgIEludFNpemUgb3JpZ2luYWxTaXplID0gcmVj
dC5zaXplKCk7CiAgICAgICAgIG9yaWdpbiA9IHJlY3QubG9jYXRpb24oKTsKIApAQCAtOTAzLDE1
ICs4OTAsMTUgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9JbWFnZURyYWcoRWxlbWVudAogICAg
IGRlbGV0ZURyYWdJbWFnZShkcmFnSW1hZ2UpOwogfQogCi12b2lkIERyYWdDb250cm9sbGVyOjpk
b1N5c3RlbURyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0xvYywg
Y29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZy
YW1lLCBib29sIGZvckxpbmspCit2b2lkIERyYWdDb250cm9sbGVyOjpkb1N5c3RlbURyYWcoRHJh
Z0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0xvYywgY29uc3QgSW50UG9pbnQm
IGV2ZW50UG9zLCBDbGlwYm9hcmQmIGNsaXBib2FyZCwgRnJhbWUmIGZyYW1lLCBib29sIGZvckxp
bmspCiB7CiAgICAgbV9kaWRJbml0aWF0ZURyYWcgPSB0cnVlOwotICAgIG1fZHJhZ0luaXRpYXRv
ciA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIG1fZHJhZ0luaXRpYXRvciA9IGZyYW1lLmRvY3Vt
ZW50KCk7CiAgICAgLy8gUHJvdGVjdCB0aGlzIGZyYW1lIGFuZCB2aWV3LCBhcyBhIGxvYWQgbWF5
IG9jY3VyIG1pZCBkcmFnIGFuZCBhdHRlbXB0IHRvIHVubG9hZCB0aGlzIGZyYW1lCiAgICAgUmVm
PE1haW5GcmFtZT4gZnJhbWVQcm90ZWN0b3IobV9wYWdlLm1haW5GcmFtZSgpKTsKICAgICBSZWZQ
dHI8RnJhbWVWaWV3PiB2aWV3UHJvdGVjdG9yID0gZnJhbWVQcm90ZWN0b3ItPnZpZXcoKTsKLSAg
ICBtX2NsaWVudC5zdGFydERyYWcoaW1hZ2UsIHZpZXdQcm90ZWN0b3ItPnJvb3RWaWV3VG9Db250
ZW50cyhmcmFtZS0+dmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZHJhZ0xvYykpLAotICAgICAg
ICB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVu
dHNUb1Jvb3RWaWV3KGV2ZW50UG9zKSksIGNsaXBib2FyZCwgJmZyYW1lUHJvdGVjdG9yLmdldCgp
LCBmb3JMaW5rKTsKKyAgICBtX2NsaWVudC5zdGFydERyYWcoaW1hZ2UsIHZpZXdQcm90ZWN0b3It
PnJvb3RWaWV3VG9Db250ZW50cyhmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhkcmFn
TG9jKSksCisgICAgICAgIHZpZXdQcm90ZWN0b3ItPnJvb3RWaWV3VG9Db250ZW50cyhmcmFtZS52
aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhldmVudFBvcykpLCBjbGlwYm9hcmQsIGZyYW1lUHJv
dGVjdG9yLmdldCgpLCBmb3JMaW5rKTsKICAgICAvLyBEcmFnQ2xpZW50OjpzdGFydERyYWcgY2Fu
IGNhdXNlIG91ciBQYWdlIHRvIGRpc3BlYXIsIGRlYWxsb2NhdGluZyB8dGhpc3wuCiAgICAgaWYg
KCFmcmFtZVByb3RlY3Rvci0+cGFnZSgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEwICs1OCwx
MCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRHJhZ0NsaWVudCYgY2xpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAotICAgICAgICBEcmFnU2Vzc2lvbiBkcmFnRW50
ZXJlZChEcmFnRGF0YSopOwotICAgICAgICB2b2lkIGRyYWdFeGl0ZWQoRHJhZ0RhdGEqKTsKLSAg
ICAgICAgRHJhZ1Nlc3Npb24gZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgYm9vbCBw
ZXJmb3JtRHJhZyhEcmFnRGF0YSopOworICAgICAgICBEcmFnU2Vzc2lvbiBkcmFnRW50ZXJlZChE
cmFnRGF0YSYpOworICAgICAgICB2b2lkIGRyYWdFeGl0ZWQoRHJhZ0RhdGEmKTsKKyAgICAgICAg
RHJhZ1Nlc3Npb24gZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEmKTsKKyAgICAgICAgYm9vbCBwZXJmb3Jt
RHJhZyhEcmFnRGF0YSYpOwogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IEl0IHNob3VsZCBi
ZSBwb3NzaWJsZSB0byByZW1vdmUgYSBudW1iZXIgb2YgdGhlc2UgYWNjZXNzb3JzIG9uY2UgYWxs
CiAgICAgICAgIC8vIGRyYWcgbG9naWMgaXMgaW4gV2ViQ29yZS4KQEAgLTgyLDcgKzgyLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgdm9pZCBwbGFjZURyYWdDYXJl
dChjb25zdCBJbnRQb2ludCYpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBzdGFydERyYWcoRnJh
bWUqIHNyYywgY29uc3QgRHJhZ1N0YXRlJiwgRHJhZ09wZXJhdGlvbiBzcmNPcCwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBkcmFnRXZlbnQsIGNvbnN0IEludFBvaW50JiBkcmFnT3JpZ2luKTsK
KyAgICAgICAgYm9vbCBzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiwgRHJh
Z09wZXJhdGlvbiBzcmNPcCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBkcmFnRXZlbnQsIGNv
bnN0IEludFBvaW50JiBkcmFnT3JpZ2luKTsKICAgICAgICAgc3RhdGljIGNvbnN0IEludFNpemUm
IG1heERyYWdJbWFnZVNpemUoKTsKICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
TGlua0RyYWdCb3JkZXJJbnNldDsKQEAgLTkyLDI0ICs5MiwyNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdCBEcmFnSW1hZ2VBbHBoYTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIGJvb2wgZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZvcihGcmFtZSosIERy
YWdEYXRhKik7Ci0gICAgICAgIGJvb2wgY2FuUHJvY2Vzc0RyYWcoRHJhZ0RhdGEqKTsKLSAgICAg
ICAgYm9vbCBjb25jbHVkZUVkaXREcmFnKERyYWdEYXRhKik7Ci0gICAgICAgIERyYWdTZXNzaW9u
IGRyYWdFbnRlcmVkT3JVcGRhdGVkKERyYWdEYXRhKik7Ci0gICAgICAgIERyYWdPcGVyYXRpb24g
b3BlcmF0aW9uRm9yTG9hZChEcmFnRGF0YSopOwotICAgICAgICBib29sIHRyeURvY3VtZW50RHJh
ZyhEcmFnRGF0YSosIERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ1Nlc3Npb24mKTsKLSAgICAg
ICAgYm9vbCB0cnlESFRNTERyYWcoRHJhZ0RhdGEqLCBEcmFnT3BlcmF0aW9uJik7Ci0gICAgICAg
IERyYWdPcGVyYXRpb24gZHJhZ09wZXJhdGlvbihEcmFnRGF0YSopOworICAgICAgICBib29sIGRp
c3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqLCBEcmFnRGF0YSYpOworICAgICAgICBib29s
IGNhblByb2Nlc3NEcmFnKERyYWdEYXRhJik7CisgICAgICAgIGJvb2wgY29uY2x1ZGVFZGl0RHJh
ZyhEcmFnRGF0YSYpOworICAgICAgICBEcmFnU2Vzc2lvbiBkcmFnRW50ZXJlZE9yVXBkYXRlZChE
cmFnRGF0YSYpOworICAgICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbkZvckxvYWQoRHJhZ0Rh
dGEmKTsKKyAgICAgICAgYm9vbCB0cnlEb2N1bWVudERyYWcoRHJhZ0RhdGEmLCBEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIERyYWdTZXNzaW9uJik7CisgICAgICAgIGJvb2wgdHJ5REhUTUxEcmFnKERy
YWdEYXRhJiwgRHJhZ09wZXJhdGlvbiYpOworICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVy
YXRpb24oRHJhZ0RhdGEmKTsKICAgICAgICAgdm9pZCBjYW5jZWxEcmFnKCk7Ci0gICAgICAgIGJv
b2wgZHJhZ0lzTW92ZShGcmFtZVNlbGVjdGlvbiYsIERyYWdEYXRhKik7Ci0gICAgICAgIGJvb2wg
aXNDb3B5S2V5RG93bihEcmFnRGF0YSopOworICAgICAgICBib29sIGRyYWdJc01vdmUoRnJhbWVT
ZWxlY3Rpb24mLCBEcmFnRGF0YSYpOworICAgICAgICBib29sIGlzQ29weUtleURvd24oRHJhZ0Rh
dGEmKTsKIAogICAgICAgICB2b2lkIG1vdXNlTW92ZWRJbnRvRG9jdW1lbnQoRG9jdW1lbnQqKTsK
IAotICAgICAgICB2b2lkIGRvSW1hZ2VEcmFnKEVsZW1lbnQqLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFJlY3QmLCBDbGlwYm9hcmQqLCBGcmFtZSosIEludFBvaW50Jik7Ci0gICAgICAgIHZv
aWQgZG9TeXN0ZW1EcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQ
b2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCBmb3JMaW5rKTsKKyAgICAgICAgdm9pZCBk
b0ltYWdlRHJhZyhFbGVtZW50JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiwgQ2xp
cGJvYXJkJiwgRnJhbWUmLCBJbnRQb2ludCYpOworICAgICAgICB2b2lkIGRvU3lzdGVtRHJhZyhE
cmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQm
LCBGcmFtZSYsIGJvb2wgZm9yTGluayk7CiAgICAgICAgIHZvaWQgY2xlYW51cEFmdGVyU3lzdGVt
RHJhZygpOwotICAgICAgICB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQq
LCBFbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CisgICAgICAgIHZv
aWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKENsaXBib2FyZCYsIEVsZW1lbnQmLCBjb25zdCBV
UkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsKTsKIAogICAgICAgICBQYWdlJiBtX3BhZ2U7CiAgICAg
ICAgIERyYWdDbGllbnQmIG1fY2xpZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjY4LDcgKzM2NjgsNyBAQCBib29sIEV2ZW50
SGFuZGxlcjo6aGFuZGxlRHJhZyhjb25zdCBNb3VzCiAgICAgCiAgICAgaWYgKG1fbW91c2VEb3du
TWF5U3RhcnREcmFnKSB7CiAgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKLSAg
ICAgICAgbV9kaWRTdGFydERyYWcgPSBwYWdlICYmIHBhZ2UtPmRyYWdDb250cm9sbGVyKCkuc3Rh
cnREcmFnKCZtX2ZyYW1lLCBkcmFnU3RhdGUoKSwgc3JjT3AsIGV2ZW50LmV2ZW50KCksIG1fbW91
c2VEb3duUG9zKTsKKyAgICAgICAgbV9kaWRTdGFydERyYWcgPSBwYWdlICYmIHBhZ2UtPmRyYWdD
b250cm9sbGVyKCkuc3RhcnREcmFnKG1fZnJhbWUsIGRyYWdTdGF0ZSgpLCBzcmNPcCwgZXZlbnQu
ZXZlbnQoKSwgbV9tb3VzZURvd25Qb3MpOwogICAgICAgICAvLyBJbiBXZWJLaXQyIHdlIGNvdWxk
IHJlLWVudGVyIHRoaXMgY29kZSBhbmQgc3RhcnQgYW5vdGhlciBkcmFnLgogICAgICAgICAvLyBP
biBPUyBYIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdpdGggdGhlIG93bmVyc2hpcCBvZiB0aGUgcGFz
dGVib2FyZCBhbmQgdGhlIHByb21pc2VkIHR5cGVzLgogICAgICAgICBpZiAobV9kaWRTdGFydERy
YWcpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0RyYWdDb250cm9sbGVyRWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVm
bC5jcHAJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZWZsL0RyYWdD
b250cm9sbGVyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTQgKzQzLDE0IEBAIGNvbnN0
IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIAogY29uc3QgZmxvYXQgRHJhZ0Nv
bnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmlzQ29weUtleURvd24oRHJhZ0RhdGEqKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bihEcmFnRGF0YSYpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1EcmFnT3BlcmF0aW9u
IERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdP
cGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEmIGRyYWdEYXRh
KQogewotICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkpCisgICAgaWYgKGRyYWdEYXRh
LmNvbnRhaW5zVVJMKDApKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7CiAKICAg
ICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgRHJhZ0Nv
bnRyb2xsZXI6OmNsZWFudXBBZnRlclN5c3RlbUQKIHsKIH0KIAotdm9pZCBEcmFnQ29udHJvbGxl
cjo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKENsaXBib2FyZCosIEVsZW1lbnQqLCBjb25zdCBV
UkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBEcmFnQ29udHJvbGxlcjo6ZGVjbGFyZUFuZFdyaXRl
RHJhZ0ltYWdlKENsaXBib2FyZCYsIEVsZW1lbnQmLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcm
KQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9EcmFnQ29udHJvbGxlckd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xs
ZXJHdGsuY3BwCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2d0ay9E
cmFnQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0NSwxNSBAQCBj
b25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERy
YWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9s
bGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29w
eUtleURvd24oRHJhZ0RhdGEmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRHJhZ09wZXJh
dGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitE
cmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFn
RGF0YSkKIHsKICAgICAvL0ZJWE1FOiBUaGlzIGxvZ2ljIGlzIGluY29tcGxldGUKLSAgICAgaWYg
KGRyYWdEYXRhLT5jb250YWluc1VSTCgwKSkKKyAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zVVJM
KDApKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7CiAKICAgICByZXR1cm4gRHJh
Z09wZXJhdGlvbk5vbmU7CkBAIC02OSw5ICs2OSw5IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNs
ZWFudXBBZnRlclN5c3RlbUQKIHsKIH0KIAotdm9pZCBEcmFnQ29udHJvbGxlcjo6ZGVjbGFyZUFu
ZFdyaXRlRHJhZ0ltYWdlKENsaXBib2FyZCogY2xpcGJvYXJkLCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6
OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQmIGNsaXBib2FyZCwgRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAgY2xp
cGJvYXJkLT5wYXN0ZWJvYXJkKCkud3JpdGVJbWFnZShlbGVtZW50LCB1cmwsIGxhYmVsKTsKKyAg
ICBjbGlwYm9hcmQucGFzdGVib2FyZCgpLndyaXRlSW1hZ2UoZWxlbWVudCwgdXJsLCBsYWJlbCk7
CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVyTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0RyYWdDb250cm9sbGVy
TWFjLm1tCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFn
Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCiAKICNpbXBvcnQgIkNsaXBib2FyZC5oIgotI2ltcG9ydCAiRE9N
RWxlbWVudEludGVybmFsLmgiCiAjaW1wb3J0ICJEcmFnQ2xpZW50LmgiCiAjaW1wb3J0ICJEcmFn
RGF0YS5oIgogI2ltcG9ydCAiRWxlbWVudC5oIgpAQCAtNDgsMTkgKzQ3LDE3IEBAIGNvbnN0IGlu
dCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b20KIAogY29uc3QgZmxvYXQgRHJhZ0NvbnRy
b2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6Omlz
Q29weUtleURvd24oRHJhZ0RhdGEqIGRyYWdEYXRhKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6aXND
b3B5S2V5RG93bihEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgcmV0dXJuIGRyYWdEYXRhLT5m
bGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSXNDb3B5S2V5RG93bjsKKyAgICByZXR1cm4gZHJhZ0Rh
dGEuZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CiB9CiAgICAgCi1EcmFn
T3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0
YSkKK0RyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEm
IGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFnRGF0YSk7Ci0KLSAgICBpZiAoKGRyYWdEYXRh
LT5mbGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLT5jb250YWlu
c1VSTCgmbV9wYWdlLm1haW5GcmFtZSgpKSkKKyAgICBpZiAoKGRyYWdEYXRhLmZsYWdzKCkgJiBE
cmFnQXBwbGljYXRpb25Jc01vZGFsKSB8fCAhZHJhZ0RhdGEuY29udGFpbnNVUkwoJm1fcGFnZS5t
YWluRnJhbWUoKSkpCiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uTm9uZTsKIAotICAgIGlm
ICghbV9kb2N1bWVudFVuZGVyTW91c2UgfHwgKCEoZHJhZ0RhdGEtPmZsYWdzKCkgJiAoRHJhZ0Fw
cGxpY2F0aW9uSGFzQXR0YWNoZWRTaGVldCB8IERyYWdBcHBsaWNhdGlvbklzU291cmNlKSkpKQor
ICAgIGlmICghbV9kb2N1bWVudFVuZGVyTW91c2UgfHwgKCEoZHJhZ0RhdGEuZmxhZ3MoKSAmIChE
cmFnQXBwbGljYXRpb25IYXNBdHRhY2hlZFNoZWV0IHwgRHJhZ0FwcGxpY2F0aW9uSXNTb3VyY2Up
KSkpCiAgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uQ29weTsKIAogICAgIHJldHVybiBEcmFn
T3BlcmF0aW9uTm9uZTsKQEAgLTg1LDkgKzgyLDkgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6Y2xl
YW51cEFmdGVyU3lzdGVtRAogICAgICAgICBkcmFnRW5kZWQoKTsKIH0KIAotdm9pZCBEcmFnQ29u
dHJvbGxlcjo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKENsaXBib2FyZCogY2xpcGJvYXJkLCBF
bGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3Zv
aWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQmIGNs
aXBib2FyZCwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bGFiZWwpCiB7Ci0gICAgbV9jbGllbnQuZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNsaXBib2Fy
ZC0+cGFzdGVib2FyZCgpLm5hbWUoKSwga2l0KGVsZW1lbnQpLCB1cmwsIGxhYmVsLCBlbGVtZW50
LT5kb2N1bWVudCgpLmZyYW1lKCkpOworICAgIG1fY2xpZW50LmRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZShjbGlwYm9hcmQucGFzdGVib2FyZCgpLm5hbWUoKSwgZWxlbWVudCwgdXJsLCBsYWJlbCwg
ZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9EcmFnQ29udHJvbGxlcldpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3Bw
CShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9EcmFnQ29udHJv
bGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE3ICs0NCwxNiBAQCBjb25zdCBpbnQg
RHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9s
bGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1EcmFnT3BlcmF0aW9uIERyYWdDb250cm9s
bGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdPcGVyYXRpb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIC8v
RklYTUU6IHRvIG1hdGNoIHRoZSBtYWNvcyBiZWhhdmlvdXIgd2Ugc2hvdWxkIHJldHVybiBEcmFn
T3BlcmF0aW9uTm9uZQogICAgIC8vaWYgd2UgYXJlIGEgbW9kYWwgd2luZG93LCB3ZSBhcmUgdGhl
IGRyYWcgc291cmNlLCBvciB0aGUgd2luZG93IGlzIGFuIGF0dGFjaGVkIHNoZWV0CiAgICAgLy9J
ZiB0aGlzIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gd2l0aGluIFdlYkNvcmUgb3BlcmF0aW9uRm9y
RHJhZyBjYW4gYmUgcHVsbGVkIGludG8gCiAgICAgLy9XZWJDb3JlIGl0c2VsZgotICAgIEFTU0VS
VChkcmFnRGF0YSk7Ci0gICAgcmV0dXJuIGRyYWdEYXRhLT5jb250YWluc1VSTCgwKSAmJiAhbV9k
aWRJbml0aWF0ZURyYWcgPyBEcmFnT3BlcmF0aW9uQ29weSA6IERyYWdPcGVyYXRpb25Ob25lOwor
ICAgIHJldHVybiBkcmFnRGF0YS5jb250YWluc1VSTCgwKSAmJiAhbV9kaWRJbml0aWF0ZURyYWcg
PyBEcmFnT3BlcmF0aW9uQ29weSA6IERyYWdPcGVyYXRpb25Ob25lOwogfQogCi1ib29sIERyYWdD
b250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6
OmlzQ29weUtleURvd24oRHJhZ0RhdGEmKQogewogICAgIHJldHVybiA6OkdldEFzeW5jS2V5U3Rh
dGUoVktfQ09OVFJPTCk7CiB9CkBAIC03MCw5ICs2OSw5IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6
OmNsZWFudXBBZnRlclN5c3RlbUQKIHsKIH0KIAotdm9pZCBEcmFnQ29udHJvbGxlcjo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKENsaXBib2FyZCogY2xpcGJvYXJkLCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQgRHJhZ0NvbnRyb2xs
ZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQmIGNsaXBib2FyZCwgRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCiB7Ci0gICAg
UGFzdGVib2FyZCYgcGFzdGVib2FyZCA9IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpOworICAgIFBh
c3RlYm9hcmQmIHBhc3RlYm9hcmQgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpOwogCiAgICAgLy8g
RklYTUU6IERvIHdlIHJlYWxseSBuZWVkIHRoaXMgY2hlY2s/CiAgICAgaWYgKCFwYXN0ZWJvYXJk
LndyaXRhYmxlRGF0YU9iamVjdCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5o
CShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBh
c1BsYWluVGV4dChGcmFtZSopIGNvbnN0OwogICAgIHZvaWQgYXNGaWxlbmFtZXMoVmVjdG9yPFN0
cmluZz4mKSBjb25zdDsKICAgICBDb2xvciBhc0NvbG9yKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBhc0ZyYWdtZW50KEZyYW1lKiwgUGFzc1JlZlB0cjxSYW5nZT4g
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpIGNvbnN0OworICAgIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gYXNGcmFnbWVudChGcmFtZSosIFJhbmdlJiBjb250ZXh0
LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkgY29uc3Q7CiAgICAg
Ym9vbCBjYW5TbWFydFJlcGxhY2UoKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zQ29sb3IoKSBj
b25zdDsKICAgICBib29sIGNvbnRhaW5zRmlsZXMoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY0LDIxICsxNjQsMTUg
QEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikK
LSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnQoRnJhbWUq
LCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFp
blRleHQpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHdyaXRlSW1hZ2UoTm9kZSosIGNv
bnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0
aW9uLgotICAgIHZvaWQgd3JpdGVTZWxlY3Rpb24oUmFuZ2UqLCBib29sIGNhblNtYXJ0Q29weU9y
RGVsZXRlLCBGcmFtZSosIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9
IERlZmF1bHRTZWxlY3RlZFRleHRUeXBlKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4K
KyAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnQoRnJhbWUm
LCBSYW5nZSYsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KTsgLy8g
RklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KKyAgICB2b2lkIHdyaXRlSW1hZ2UoRWxlbWVudCYs
IGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlv
bGF0aW9uLgorICAgIHZvaWQgd3JpdGVTZWxlY3Rpb24oUmFuZ2UmLCBib29sIGNhblNtYXJ0Q29w
eU9yRGVsZXRlLCBGcmFtZSYsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2Fy
ZCA9IERlZmF1bHRTZWxlY3RlZFRleHRUeXBlKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlv
bi4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHN0YXRpYyBQYXNzT3duUHRyPFBh
c3RlYm9hcmQ+IGNyZWF0ZShQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+KTsKICAgICBzdGF0aWMg
UGFzc093blB0cjxQYXN0ZWJvYXJkPiBjcmVhdGUoR3RrQ2xpcGJvYXJkKik7CiAgICAgUGFzc1Jl
ZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0KCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFBM
QVRGT1JNKEdUSykKICAgICBzdGF0aWMgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBjcmVhdGVGb3JH
bG9iYWxTZWxlY3Rpb24oKTsKICNlbmRpZgogCkBAIC0xOTksNyArMTkzLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0RXh0ZXJuYWxEYXRhT2JqZWN0KElEYXRhT2JqZWN0Kik7CiAgICAgdm9pZCB3
cml0ZVVSTFRvV3JpdGFibGVEYXRhT2JqZWN0KGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpOwog
ICAgIENPTVB0cjxXQ0RhdGFPYmplY3Q+IHdyaXRhYmxlRGF0YU9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fd3JpdGFibGVEYXRhT2JqZWN0OyB9Ci0gICAgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2Jq
ZWN0KEVsZW1lbnQqLCBjb25zdCBVUkwmKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4K
KyAgICB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoRWxlbWVudCYsIGNvbnN0IFVSTCYpOyAv
LyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0yMTYs
NyArMjEwLDcgQEAgcHJpdmF0ZToKICAgICBleHBsaWNpdCBQYXN0ZWJvYXJkKGNvbnN0IERyYWdE
YXRhTWFwJik7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW5nUGFzdGVib2FyZCgpOwotICAgIHZv
aWQgd3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSosIEZyYW1lKik7IC8vIEZJWE1FOiBMYXll
cmluZyB2aW9sYXRpb24uCisgICAgdm9pZCB3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlJiwg
RnJhbWUmKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KICAgICB2b2lkIHdyaXRlVVJM
VG9EYXRhT2JqZWN0KGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgd3JpdGVQ
bGFpblRleHRUb0RhdGFPYmplY3QoY29uc3QgU3RyaW5nJiwgU21hcnRSZXBsYWNlT3B0aW9uKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0RyYWdEYXRhRWZsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0RhdGFFZmwu
Y3BwCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJh
Z0RhdGFFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIFN0cmluZyBEcmFn
RGF0YTo6YXNVUkwoRnJhbWUqLCBGaWxlbmFtZUMKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAK
LVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUq
LCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0CitQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiwgUmFuZ2UmLCBib29sLCBi
b29sJikgY29uc3QKIHsKICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EcmFnRGF0YUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTIsNyArOTIsNyBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5hbWVDCiB9
CiAKIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChG
cmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sLCBib29sJikgY29uc3QKK1Bhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1l
LCBSYW5nZSYsIGJvb2wsIGJvb2wmKSBjb25zdAogewogICAgIGlmICghbV9wbGF0Zm9ybURyYWdE
YXRhLT5oYXNNYXJrdXAoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAJ
KHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFn
QW5kRHJvcEhlbHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBH
dGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0xlYQogICAgIERyYWdEYXRhIGRyYWdEYXRh
KGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQobV93aWRnZXQsIHBvc2l0aW9uKSwK
ICAgICAgICAgICAgICAgICAgICAgICBEcmFnT3BlcmF0aW9uTm9uZSk7Ci0gICAgY29udGV4dC0+
ZXhpdGVkQ2FsbGJhY2sobV93aWRnZXQsICZkcmFnRGF0YSwgY29udGV4dC0+ZHJvcEhhcHBlbmVk
KTsKKyAgICBjb250ZXh0LT5leGl0ZWRDYWxsYmFjayhtX3dpZGdldCwgZHJhZ0RhdGEsIGNvbnRl
eHQtPmRyb3BIYXBwZW5lZCk7CiAKICAgICBtX2Ryb3BwaW5nQ29udGV4dHMucmVtb3ZlKGl0ZXJh
dG9yKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJv
cEhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtE
cmFnQW5kRHJvcEhlbHBlci5oCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NyArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0Owog
Y2xhc3MgRHJhZ0RhdGE7CiAKLXR5cGVkZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFjaykoR3Rr
V2lkZ2V0KiwgRHJhZ0RhdGEqLCBib29sIGRyb3BIYXBwZW5lZCk7Cit0eXBlZGVmIHZvaWQgKCpE
cmFnRXhpdGVkQ2FsbGJhY2spKEd0a1dpZGdldCosIERyYWdEYXRhJiwgYm9vbCBkcm9wSGFwcGVu
ZWQpOwogCiBjbGFzcyBHdGtEcmFnQW5kRHJvcEhlbHBlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoR3RrRHJhZ0FuZERyb3BIZWxwZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTcsMTEgKzE1NywxMSBAQCBib29sIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0
cmluCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0
aW9uKFJhbmdlKiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFt
ZSogZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCBzaG91bGRT
ZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRl
U2VsZWN0aW9uKFJhbmdlJiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRl
LCBGcmFtZSYgZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCBz
aG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQpCiB7CiAgICAgbV9kYXRhT2Jq
ZWN0LT5jbGVhckFsbCgpOwotICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChzaG91bGRTZXJpYWxp
emVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBi
b2FyZCA/IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSA6IGZyYW1l
LT5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKSk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAo
Y3JlYXRlTWFya3VwKCpzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBm
YWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOworICAgIG1fZGF0YU9iamVjdC0+c2V0VGV4dChz
aG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVkZUltYWdlQWx0
VGV4dEZvckNsaXBib2FyZCA/IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2Fy
ZCgpIDogZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRUZXh0KCkpOworICAgIG1fZGF0YU9iamVjdC0+
c2V0TWFya3VwKGNyZWF0ZU1hcmt1cChzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVy
Y2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOwogCiAgICAgaWYgKG1fZ3RrQ2xp
cGJvYXJkKQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBl
cigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkLCBjYW5TbWFydENvcHlP
ckRlbGV0ZSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3RlIDogUGFzdGVib2Fy
ZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7CkBAIC0xODcsMzEgKzE4NywyOCBAQCB2
b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVCiAgICAgICAgIFBhc3RlYm9h
cmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVu
dHMobV9ndGtDbGlwYm9hcmQpOwogfQogCi1zdGF0aWMgVVJMIGdldFVSTEZvckltYWdlTm9kZShO
b2RlKiBub2RlKQorc3RhdGljIFVSTCBnZXRVUkxGb3JJbWFnZUVsZW1lbnQoRWxlbWVudCYgZWxl
bWVudCkKIHsKICAgICAvLyBGSVhNRTogTGF0ZXIgdGhpcyBjb2RlIHNob3VsZCBiZSBzaGFyZWQg
d2l0aCBDaHJvbWl1bSBzb21laG93LiBDaGFuY2VzIGFyZSBhbGwgcGxhdGZvcm1zIHdhbnQgaXQu
CiAgICAgQXRvbWljU3RyaW5nIHVybFN0cmluZzsKLSAgICBpZiAoaXNIVE1MSW1hZ2VFbGVtZW50
KG5vZGUpIHx8IGlzSFRNTElucHV0RWxlbWVudChub2RlKSkKLSAgICAgICAgdXJsU3RyaW5nID0g
dG9FbGVtZW50KG5vZGUpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKTsKKyAgICBp
ZiAoaXNIVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpIHx8IGlzSFRNTElucHV0RWxlbWVudChlbGVt
ZW50KSkKKyAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
OjpzcmNBdHRyKTsKICNpZiBFTkFCTEUoU1ZHKQotICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OmltYWdlVGFnKSkKLSAgICAgICAgdXJsU3RyaW5nID0gdG9FbGVtZW50KG5v
ZGUpLT5nZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQorICAgICAgICB1cmxTdHJpbmcg
PSBlbGVtZW50LmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiAjZW5kaWYKLSAg
ICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpIHx8IGlzSFRN
TE9iamVjdEVsZW1lbnQobm9kZSkpIHsKLSAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxl
bWVudChub2RlKTsKLSAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC0+aW1hZ2VTb3VyY2VVUkwo
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHVybFN0cmluZy5pc0VtcHR5KCkgPyBVUkwoKSA6IG5vZGUt
PmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2Vz
KHVybFN0cmluZykpOworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
OmVtYmVkVGFnKSB8fCBpc0hUTUxPYmplY3RFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICB1cmxT
dHJpbmcgPSBlbGVtZW50LmltYWdlU291cmNlVVJMKCk7CisKKyAgICByZXR1cm4gdXJsU3RyaW5n
LmlzRW1wdHkoKSA/IFVSTCgpIDogZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHN0cmlw
TGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKIH0KIAotdm9pZCBQYXN0
ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYg
dGl0bGUpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0KLSAg
ICBpZiAoIShub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkp
CisgICAgaWYgKCEoZWxlbWVudC5yZW5kZXJlcigpICYmIGVsZW1lbnQucmVuZGVyZXIoKS0+aXNJ
bWFnZSgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0g
dG9SZW5kZXJJbWFnZShub2RlLT5yZW5kZXJlcigpKTsKKyAgICBSZW5kZXJJbWFnZSogcmVuZGVy
ZXIgPSB0b1JlbmRlckltYWdlKGVsZW1lbnQucmVuZGVyZXIoKSk7CiAgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gcmVuZGVyZXItPmNhY2hlZEltYWdlKCk7CiAgICAgaWYgKCFjYWNoZWRJ
bWFnZSB8fCBjYWNoZWRJbWFnZS0+ZXJyb3JPY2N1cnJlZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0yMjAsMTEgKzIxNywxMSBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9k
ZSwgCiAKICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CiAKLSAgICBVUkwgdXJsID0gZ2V0
VVJMRm9ySW1hZ2VOb2RlKG5vZGUpOworICAgIFVSTCB1cmwgPSBnZXRVUkxGb3JJbWFnZUVsZW1l
bnQoZWxlbWVudCk7CiAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZGF0YU9i
amVjdC0+c2V0VVJMKHVybCwgdGl0bGUpOwogCi0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFy
a3VwKGNyZWF0ZU1hcmt1cCgqdG9FbGVtZW50KG5vZGUpLCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2
ZUFsbFVSTHMpKTsKKyAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3Vw
KGVsZW1lbnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwogICAgIH0KIAogICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1
ZigpKTsKQEAgLTMwMiw4ICsyOTksNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OnNldERyYWdJbWFnZShE
cmFnSW1hZ2VSCiB9CiAjZW5kaWYKIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0
ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4g
Y29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK1Bh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChG
cmFtZSYgZnJhbWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBj
aG9zZVBsYWluVGV4dCkKIHsKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCiAgICAgICAgIFBhc3Rl
Ym9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmdldENsaXBib2FyZENvbnRl
bnRzKG1fZ3RrQ2xpcGJvYXJkKTsKQEAgLTMxMSw4ICszMDcsOCBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIAog
ICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc01hcmt1cCgpKSB7Ci0gICAgICAgIGlmIChmcmFtZS0+
ZG9jdW1lbnQoKSkgewotICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS0+ZG9jdW1lbnQoKSwgbV9kYXRh
T2JqZWN0LT5tYXJrdXAoKSwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVn
aW5Db250ZW50KTsKKyAgICAgICAgaWYgKGZyYW1lLmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbV9kYXRhT2JqZWN0LT5tYXJrdXAoKSwgZW1wdHlTdHJp
bmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKICAgICAgICAgICAgIGlm
IChmcmFnbWVudCkKICAgICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwog
ICAgICAgICB9CkBAIC0zMjMsNyArMzE5LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBQYXN0ZWJvYXJkOgogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CiAgICAg
ICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBtX2Rh
dGFPYmplY3QtPnRleHQoKSk7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dCwgbV9kYXRhT2JqZWN0LT50ZXh0
KCkpOwogICAgICAgICBpZiAoZnJhZ21lbnQpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQu
cmVsZWFzZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFn
RGF0YU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJh
Z0RhdGFNYWMubW0JKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9EcmFnRGF0YU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg5LDEwICsxODksMTAgQEAg
U3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSogZnJhbWUsIEZpbAogICAgIHJldHVybiBTdHJp
bmcoKTsgICAgICAgIAogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRh
Ojphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UsIGJvb2wg
YWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSBjb25zdAorUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFJhbmdl
JiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpIGNvbnN0
CiB7CiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKG1fcGFzdGVib2FyZE5hbWUpOwotICAgIHJl
dHVybiBmcmFtZS0+ZWRpdG9yKCkud2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQs
ICpyYW5nZSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKKyAgICByZXR1cm4gZnJh
bWUtPmVkaXRvcigpLndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkLCByYW5nZSwg
YWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnRGF0YVdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2lu
LmNwcAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ry
YWdEYXRhV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgRHJh
Z0RhdGE6OmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQKICAgICAgICAgfHwgY29udGFpbnNDb2xv
cigpOwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdt
ZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wmKSBjb25zdAor
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSog
ZnJhbWUsIFJhbmdlJiwgYm9vbCwgYm9vbCYpIGNvbnN0CiB7ICAgICAKICAgICAvKgogICAgICAq
IE9yZGVyIGlzIHJpY2hlc3QgZm9ybWF0IGZpcnN0LiBPbiBPU1ggdGhpcyBpczoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAJKHJldmlzaW9u
IDE1NzA0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIyLDkgKzQyMiw4IEBAIHZvaWQgUGFzdGVib2FyZDo6c2V0
RHJhZ0ltYWdlKERyYWdJbWFnZVIKIH0KICNlbmRpZgogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRl
UmFuZ2VUb0RhdGFPYmplY3QoUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIEZyYW1lKiBmcmFtZSkKK3Zv
aWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSYgc2VsZWN0ZWRSYW5n
ZSwgRnJhbWUmIGZyYW1lKQogewotICAgIEFTU0VSVChzZWxlY3RlZFJhbmdlKTsKICAgICBpZiAo
IW1fd3JpdGFibGVEYXRhT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTQzMiwxMyArNDMx
LDEzIEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdCgKICAgICBtZWRp
dW0udHltZWQgPSBUWU1FRF9IR0xPQkFMOwogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAg
bWFya3VwVG9DRkhUTUwoY3JlYXRlTWFya3VwKCpzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlKSwKLSAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS51cmwoKS5zdHJpbmcoKSwgZGF0YSk7CisgICAgbWFya3VwVG9DRkhUTUwoY3Jl
YXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpLAorICAg
ICAgICBzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkudXJsKCkuc3Ry
aW5nKCksIGRhdGEpOwogICAgIG1lZGl1bS5oR2xvYmFsID0gY3JlYXRlR2xvYmFsRGF0YShkYXRh
KTsKICAgICBpZiAobWVkaXVtLmhHbG9iYWwgJiYgRkFJTEVEKG1fd3JpdGFibGVEYXRhT2JqZWN0
LT5TZXREYXRhKGh0bWxGb3JtYXQoKSwgJm1lZGl1bSwgVFJVRSkpKQogICAgICAgICA6Okdsb2Jh
bEZyZWUobWVkaXVtLmhHbG9iYWwpOwogCi0gICAgU3RyaW5nIHN0ciA9IGZyYW1lLT5lZGl0b3Io
KS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKTsKKyAgICBTdHJpbmcgc3RyID0gZnJhbWUuZWRp
dG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCk7CiAgICAgcmVwbGFjZU5ld2xpbmVzV2l0
aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2Uoc3Ry
KTsKICAgICBtZWRpdW0uaEdsb2JhbCA9IGNyZWF0ZUdsb2JhbERhdGEoc3RyKTsKQEAgLTQ0Niwx
OSArNDQ1LDE5IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdCgKICAg
ICAgICAgOjpHbG9iYWxGcmVlKG1lZGl1bS5oR2xvYmFsKTsKIAogICAgIG1lZGl1bS5oR2xvYmFs
ID0gMDsKLSAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCkpCisg
ICAgaWYgKGZyYW1lLmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCkpCiAgICAgICAgIG1f
d3JpdGFibGVEYXRhT2JqZWN0LT5TZXREYXRhKHNtYXJ0UGFzdGVGb3JtYXQoKSwgJm1lZGl1bSwg
VFJVRSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVj
dGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSwgU2hvdWxk
U2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVk
VGV4dEZvckNsaXBib2FyZCkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2Um
IHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiBmcmFtZSwg
U2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkIHNob3VsZFNlcmlhbGl6ZVNl
bGVjdGVkVGV4dEZvckNsaXBib2FyZCkKIHsKICAgICBjbGVhcigpOwogCiAgICAgLy8gUHV0IENG
X0hUTUwgZm9ybWF0IG9uIHRoZSBwYXN0ZWJvYXJkIAogICAgIGlmICg6Ok9wZW5DbGlwYm9hcmQo
bV9vd25lcikpIHsKICAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7Ci0gICAgICAgIG1hcmt1cFRv
Q0ZIVE1MKGNyZWF0ZU1hcmt1cCgqc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSksCi0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1
bWVudCgpLnVybCgpLnN0cmluZygpLCBkYXRhKTsKKyAgICAgICAgbWFya3VwVG9DRkhUTUwoY3Jl
YXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpLAorICAg
ICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLnVybCgp
LnN0cmluZygpLCBkYXRhKTsKICAgICAgICAgSEdMT0JBTCBjYkRhdGEgPSBjcmVhdGVHbG9iYWxE
YXRhKGRhdGEpOwogICAgICAgICBpZiAoITo6U2V0Q2xpcGJvYXJkRGF0YShIVE1MQ2xpcGJvYXJk
Rm9ybWF0LCBjYkRhdGEpKQogICAgICAgICAgICAgOjpHbG9iYWxGcmVlKGNiRGF0YSk7CkBAIC00
NjYsNyArNDY1LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogcwog
ICAgIH0KICAgICAKICAgICAvLyBQdXQgcGxhaW4gc3RyaW5nIG9uIHRoZSBwYXN0ZWJvYXJkLiBD
Rl9VTklDT0RFVEVYVCBjb3ZlcnMgQ0ZfVEVYVCBhcyB3ZWxsCi0gICAgU3RyaW5nIHN0ciA9IHNo
b3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRU
ZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2Fy
ZCgpIDogZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpOworICAgIFN0cmluZyBzdHIgPSBz
aG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVkZUltYWdlQWx0
VGV4dEZvckNsaXBib2FyZCA/IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2Fy
ZCgpIDogZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRUZXh0KCk7CiAgICAgcmVwbGFjZU5ld2xpbmVz
V2l0aFdpbmRvd3NTdHlsZU5ld2xpbmVzKHN0cik7CiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2Uo
c3RyKTsKICAgICBpZiAoOjpPcGVuQ2xpcGJvYXJkKG1fb3duZXIpKSB7CkBAIC03MjUsMTQgKzcy
NCwxMiBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRVCiAgICAgd3Jp
dGVVUkxUb0RhdGFPYmplY3QocGFzdGVib2FyZFVSTC51cmwsIHBhc3RlYm9hcmRVUkwudGl0bGUp
OwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgVVJM
JiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKQogewotICAgIEFTU0VSVChub2RlKTsK
LQotICAgIGlmICghKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFn
ZSgpKSkKKyAgICBpZiAoIShlbGVtZW50LnJlbmRlcmVyKCkgJiYgZWxlbWVudC5yZW5kZXJlcigp
LT5pc0ltYWdlKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJJbWFnZSogcmVuZGVy
ZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOworICAgIFJlbmRlckltYWdlKiBy
ZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudC5yZW5kZXJlcigpKTsKICAgICBDYWNoZWRJ
bWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAoIWNh
Y2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTc5OCw3ICs3OTUsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZFBs
YWluVGV4CiAgICAgfQogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9h
cmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250
ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK1Bhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSYg
ZnJhbWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBs
YWluVGV4dCkKIHsKICAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogICAgIApAQCAtODExLDcg
KzgwOCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICAg
ICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2Fy
ZCgpOwogCi0gICAgICAgICAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gZnJhZ21lbnRGcm9tQ0ZIVE1MKGZyYW1lLT5kb2N1bWVudCgpLCBjZmh0bWwpOworICAgICAg
ICAgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGZyYWdtZW50RnJv
bUNGSFRNTChmcmFtZS5kb2N1bWVudCgpLCBjZmh0bWwpOwogICAgICAgICAgICAgaWYgKGZyYWdt
ZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKICAgICAgICAgfSBlbHNlIApA
QCAtODI3LDcgKzgyNCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2Fy
ZDoKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAg
R2xvYmFsVW5sb2NrKGNiRGF0YSk7CiAgICAgICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgp
OwotICAgICAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwgc3RyKTsKKyAgICAgICAgICAgICAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KGNvbnRleHQsIHN0cik7CiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICAgICAgfSBl
bHNlIApAQCAtODQ0LDcgKzg0MSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFz
dGVib2FyZDoKICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKGJ1ZmZlcik7CiAgICAgICAgICAg
ICAgICAgR2xvYmFsVW5sb2NrKGNiRGF0YSk7CiAgICAgICAgICAgICAgICAgOjpDbG9zZUNsaXBi
b2FyZCgpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dC5nZXQoKSwgc3RyKTsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNvbnRleHQsIHN0cik7CiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50KQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgICAgICAg
ICAgfSBlbHNlCkBAIC04NjEsMTEgKzg1OCwxMCBAQCB2b2lkIFBhc3RlYm9hcmQ6OnNldEV4dGVy
bmFsRGF0YU9iamVjdChJCiAgICAgbV9kYXRhT2JqZWN0ID0gZGF0YU9iamVjdDsKIH0KIAotc3Rh
dGljIENhY2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQorc3RhdGlj
IENhY2hlZEltYWdlKiBnZXRDYWNoZWRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8v
IEF0dGVtcHQgdG8gcHVsbCBDYWNoZWRJbWFnZSBmcm9tIGVsZW1lbnQKLSAgICBBU1NFUlQoZWxl
bWVudCk7Ci0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7
CisgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKICAgICBp
ZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNJbWFnZSgpKSAKICAgICAgICAgcmV0dXJuIDA7
CiAKQEAgLTEwMDEsMTggKzk5NywxOCBAQCBzdGF0aWMgSEdMT0JBTCBjcmVhdGVHbG9iYWxIRHJv
cENvbnRlbnQoCiAgICAgcmV0dXJuIG1lbU9iajsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZUltYWdlVG9EYXRhT2JqZWN0KEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsKQordm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlVG9EYXRhT2JqZWN0KEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFVSTCYgdXJsKQogewogICAgIC8vIFNob3ZlIGltYWdlIGRhdGEgaW50byBhIERhdGFPYmpl
Y3QgZm9yIHVzZSBhcyBhIGZpbGUKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRD
YWNoZWRJbWFnZShlbGVtZW50KTsKLSAgICBpZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFn
ZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKSB8fCAhY2FjaGVkSW1hZ2Ut
PmlzTG9hZGVkKCkpCisgICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVkSW1hZ2UtPmltYWdl
Rm9yUmVuZGVyZXIoZWxlbWVudC5yZW5kZXJlcigpKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFNoYXJlZEJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBj
YWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50LT5yZW5kZXJlcigpKS0+ZGF0YSgp
OworICAgIFNoYXJlZEJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JS
ZW5kZXJlcihlbGVtZW50LnJlbmRlcmVyKCkpLT5kYXRhKCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
ciB8fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSEdMT0JB
TCBpbWFnZUZpbGVEZXNjcmlwdG9yID0gY3JlYXRlR2xvYmFsSW1hZ2VGaWxlRGVzY3JpcHRvcih1
cmwuc3RyaW5nKCksIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmFsdEF0dHIpLCBj
YWNoZWRJbWFnZSk7CisgICAgSEdMT0JBTCBpbWFnZUZpbGVEZXNjcmlwdG9yID0gY3JlYXRlR2xv
YmFsSW1hZ2VGaWxlRGVzY3JpcHRvcih1cmwuc3RyaW5nKCksIGVsZW1lbnQuZ2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6YWx0QXR0ciksIGNhY2hlZEltYWdlKTsKICAgICBpZiAoIWltYWdlRmlsZURl
c2NyaXB0b3IpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3
MDQ2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsNDMgQEAKKzIwMTMtMTAtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAg
ICAgICBDVFRFOiBVc2UgcmVmZXJlbmNlcyBpbiBhbmQgYXJvdW5kIERyYWdDb250cm9sbGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rp
b24pOgorICAgICAgICAoZHJhZ0V4aXRlZENhbGxiYWNrKToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdCYXNlRHJhZ0Ryb3ApOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToK
KyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRW50ZXJlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3
IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IGRyYWdnaW5nRXhpdGVkOl0p
OgorICAgICAgICAoLVtXS1ZpZXcgcGVyZm9ybURyYWdPcGVyYXRpb246XSk6CisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6ZHJhZ0VudGVyZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRyYWdVcGRh
dGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmFnRXhpdGVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRHJhZyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6
d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJE
cmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkRyYWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJE
cmFnQ2xpZW50OjpzdGFydERyYWcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGll
bnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgIChXZWJLaXQ6OmNhY2hlZEltYWdlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6CisKIDIwMTMtMTAtMDUgIEFuZGVy
cyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IHRo
ZSBHVEsrIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk0LDQwICsxMTk0LDQwIEBAIHZvaWQg
V2ViUGFnZVByb3h5Ojpjb21taXRQYWdlVHJhbnNpdGlvblYKICNlbmRpZgogCiAjaWYgRU5BQkxF
KERSQUdfU1VQUE9SVCkKLXZvaWQgV2ViUGFnZVByb3h5OjpkcmFnRW50ZXJlZChEcmFnRGF0YSog
ZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lKQordm9pZCBXZWJQYWdlUHJv
eHk6OmRyYWdFbnRlcmVkKERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUpCiB7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNp
b25IYW5kbGU7CiAgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZUVtcHR5QXJyYXk7CiAgICAgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERy
YWdDb250cm9sbGVyQWN0aW9uRW50ZXJlZCwgZHJhZ0RhdGEsIGRyYWdTdG9yYWdlTmFtZSwgc2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZUVtcHR5QXJyYXkpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEqIGRyYWdEYXRhLCBj
b25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmFnVXBk
YXRlZChEcmFnRGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lKQog
ewogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwog
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25IYW5kbGVF
bXB0eUFycmF5OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxl
ckFjdGlvblVwZGF0ZWQsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5hbWUsIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5KTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmRyYWdFeGl0ZWQoRHJhZ0RhdGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcm
IGRyYWdTdG9yYWdlTmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmFnRXhpdGVkKERyYWdEYXRh
JiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCiB7CiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGU7CiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVuc2lvbkhhbmRsZUVtcHR5QXJyYXk7CiAg
ICAgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uRXhpdGVk
LCBkcmFnRGF0YSwgZHJhZ1N0b3JhZ2VOYW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlRW1wdHlBcnJheSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VO
YW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiBzYW5kYm94RXh0ZW5zaW9u
c0ZvclVwbG9hZCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRHJhZyhEcmFnRGF0YSYgZHJh
Z0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUmIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIGNvbnN0IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZUFycmF5JiBzYW5kYm94RXh0ZW5zaW9uc0ZvclVwbG9hZCkKIHsKICAgICBwZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZywg
ZHJhZ0RhdGEsIGRyYWdTdG9yYWdlTmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJv
eEV4dGVuc2lvbnNGb3JVcGxvYWQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uIGFjdGlvbiwgRHJhZ0RhdGEq
IGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpCit2b2lkIFdl
YlBhZ2VQcm94eTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0
aW9uIGFjdGlvbiwgRHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdl
TmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVuc2lv
bnNGb3JVcGxvYWQpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKICNp
ZiBQTEFURk9STShHVEspCi0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQ
ZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCAqZHJhZ0RhdGEpLCBtX3BhZ2VJRCk7
CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YSksIG1fcGFnZUlEKTsKICNlbHNlCi0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rp
b24oYWN0aW9uLCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEtPmdsb2JhbFBv
c2l0aW9uKCksIGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgZHJhZ1N0
b3JhZ2VOYW1lLCBkcmFnRGF0YS0+ZmxhZ3MoKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2Fu
ZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpLCBtX3BhZ2VJRCk7CisgICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCBk
cmFnRGF0YS5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpLCBkcmFn
RGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgZHJhZ1N0b3JhZ2VOYW1lLCBkcmFn
RGF0YS5mbGFncygpLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uc0Zv
clVwbG9hZCksIG1fcGFnZUlEKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3NCwxMCArNTc0
LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpICAgIAogICAgIC8vIERy
YWcgYW5kIGRyb3Agc3VwcG9ydC4KLSAgICB2b2lkIGRyYWdFbnRlcmVkKFdlYkNvcmU6OkRyYWdE
YXRhKiwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUgPSBTdHJpbmcoKSk7Ci0gICAgdm9p
ZCBkcmFnVXBkYXRlZChXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3Jh
Z2VOYW1lID0gU3RyaW5nKCkpOwotICAgIHZvaWQgZHJhZ0V4aXRlZChXZWJDb3JlOjpEcmFnRGF0
YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOwotICAgIHZvaWQg
cGVyZm9ybURyYWcoV2ViQ29yZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdl
TmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlQXJyYXkmKTsKKyAgICB2b2lkIGRyYWdFbnRlcmVkKFdlYkNvcmU6OkRyYWdE
YXRhJiwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUgPSBTdHJpbmcoKSk7CisgICAgdm9p
ZCBkcmFnVXBkYXRlZChXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3Jh
Z2VOYW1lID0gU3RyaW5nKCkpOworICAgIHZvaWQgZHJhZ0V4aXRlZChXZWJDb3JlOjpEcmFnRGF0
YSYsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOworICAgIHZvaWQg
cGVyZm9ybURyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdl
TmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlQXJyYXkmKTsKIAogICAgIHZvaWQgZGlkUGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKFdlYkNvcmU6OkRyYWdTZXNzaW9uKTsKICAgICB2b2lkIGRyYWdFbmRlZChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKTsKQEAgLTEwMTUsNyArMTAxNSw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNsZWFyTG9hZERlcGVuZGVudENhbGxiYWNrcygpOwog
Ci0gICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rp
b24sIFdlYkNvcmU6OkRyYWdEYXRhKiwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246Okhh
bmRsZUFycmF5Jik7CisgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJiwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAKICAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZURp
c2NhcmRhYmxlU3RhdGUoKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAkocmV2aXNpb24gMTU3MDQ2KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MjMsNyArNzIzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnRGF0YVJlYwogCiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdCwg
cG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlv
biksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0
aW9ucyhjb250ZXh0KSkpOwogICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPnJlc2V0
RHJhZ09wZXJhdGlvbigpOwotICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdF
bnRlcmVkKCZkcmFnRGF0YSk7CisgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJh
Z0VudGVyZWQoZHJhZ0RhdGEpOwogICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uID0gd2ViVmll
d0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ1Nlc3Npb24oKS5vcGVyYXRpb247CiAgICAgZ2Rr
X2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24o
b3BlcmF0aW9uKSwgdGltZSk7CiB9CkBAIC03NjcsMTMgKzc2NywxMyBAQCBzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90CiAgICAgICAgIHJldHVybiBUUlVFOwogCiAgICAg
RHJhZ0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdCwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2lu
dFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVy
YXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSkpOwotICAgIHdlYlZp
ZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7CisgICAgd2Vi
Vmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEpOwogICAgIERy
YWdPcGVyYXRpb24gb3BlcmF0aW9uID0gd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJh
Z1Nlc3Npb24oKS5vcGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdP
cGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiAgICAgcmV0
dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYWdFeGl0ZWRDYWxsYmFjayhHdGtXaWRnZXQq
IHdpZGdldCwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBib29sIGRyb3BIYXBwZW5lZCkKK3N0YXRpYyB2
b2lkIGRyYWdFeGl0ZWRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgRHJhZ0RhdGEmIGRyYWdE
YXRhLCBib29sIGRyb3BIYXBwZW5lZCkKIHsKICAgICAvLyBEb24ndCBjYWxsIGRyYWdFeGl0ZWQg
aWYgd2UgaGF2ZSBqdXN0IHJlY2VpdmVkIGEgZHJhZy1kcm9wIHNpZ25hbC4gVGhpcwogICAgIC8v
IGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGRyb3Agb250byB0aGUgdmlldy4K
QEAgLTgwMSw3ICs4MDEsNyBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFn
RHJvCiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdCwgcG9zaXRpb24sIGNvbnZlcnRX
aWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksIGdka0RyYWdBY3Rpb25U
b0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSkpOwog
ICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CiAgICAgU2FuZGJveEV4dGVuc2lv
bjo6SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZDsKLSAgICB3ZWJWaWV3QmFz
ZS0+cHJpdi0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEsIFN0cmluZygpLCBoYW5k
bGUsIHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5w
YWdlUHJveHktPnBlcmZvcm1EcmFnKGRyYWdEYXRhLCBTdHJpbmcoKSwgaGFuZGxlLCBzYW5kYm94
RXh0ZW5zaW9uRm9yVXBsb2FkKTsKICAgICBndGtfZHJhZ19maW5pc2goY29udGV4dCwgVFJVRSwg
RkFMU0UsIHRpbWUpOwogICAgIHJldHVybiBUUlVFOwogfQpJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzczLDcgKzE3NzMsNyBAQCAtIChOU0RyYWdPcGVyYXRpb24pZHJhZ2dpbmdFbnRlcmVkOihpZCA8
CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3Rh
dGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJh
dGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKIAogICAg
IF9kYXRhLT5fcGFnZS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7Ci0gICAgX2RhdGEtPl9wYWdlLT5k
cmFnRW50ZXJlZCgmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0g
bmFtZV0pOworICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0VudGVyZWQoZHJhZ0RhdGEsIFtbZHJhZ2dp
bmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOwogICAgIHJldHVybiBOU0RyYWdPcGVy
YXRpb25Db3B5OwogfQogCkBAIC0xNzgyLDcgKzE3ODIsNyBAQCAtIChOU0RyYWdPcGVyYXRpb24p
ZHJhZ2dpbmdVcGRhdGVkOihpZCA8CiAgICAgSW50UG9pbnQgY2xpZW50KFtzZWxmIGNvbnZlcnRQ
b2ludDpbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dIGZyb21WaWV3Om5pbF0pOwogICAg
IEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRp
b25dLCBbc2VsZiB3aW5kb3ddKSk7CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZv
LCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5m
byBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpk
cmFnZ2luZ0luZm9dKTsKLSAgICBfZGF0YS0+X3BhZ2UtPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSwg
W1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgX2RhdGEtPl9w
YWdlLT5kcmFnVXBkYXRlZChkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJv
YXJkXSBuYW1lXSk7CiAgICAgCiAgICAgV2ViQ29yZTo6RHJhZ1Nlc3Npb24gZHJhZ1Nlc3Npb24g
PSBfZGF0YS0+X3BhZ2UtPmRyYWdTZXNzaW9uKCk7CiAgICAgTlNJbnRlZ2VyIG51bWJlck9mVmFs
aWRJdGVtc0ZvckRyb3AgPSBkcmFnU2Vzc2lvbi5udW1iZXJPZkl0ZW1zVG9CZUFjY2VwdGVkOwpA
QCAtMTgwMyw3ICsxODAzLDcgQEAgLSAodm9pZClkcmFnZ2luZ0V4aXRlZDooaWQgPE5TRHJhZ2dp
bmdJbgogICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5m
byBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsKICAgICBJbnRQb2ludCBnbG9iYWwo
Z2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93
XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWws
IHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VP
cGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0g
ICAgX2RhdGEtPl9wYWdlLT5kcmFnRXhpdGVkKCZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CisgICAgX2RhdGEtPl9wYWdlLT5kcmFnRXhpdGVkKGRy
YWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKICAgICBf
ZGF0YS0+X3BhZ2UtPnJlc2V0RHJhZ09wZXJhdGlvbigpOwogfQogCkBAIC0xODY3LDcgKzE4Njcs
NyBAQCAtIChCT09MKXBlcmZvcm1EcmFnT3BlcmF0aW9uOihpZCA8TlNEcmFnCiAgICAgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZDsKICAgICBj
cmVhdGVTYW5kYm94RXh0ZW5zaW9uc0ZvckZpbGVVcGxvYWQoW2RyYWdnaW5nSW5mbyBkcmFnZ2lu
Z1Bhc3RlYm9hcmRdLCBzYW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkKTsKIAotICAgIF9kYXRhLT5f
cGFnZS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3Rl
Ym9hcmRdIG5hbWVdLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uRm9y
VXBsb2FkKTsKKyAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFnKGRyYWdEYXRhLCBbW2RyYWdn
aW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxl
LCBzYW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkKTsKIAogICAgIHJldHVybiBZRVM7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRHJhZ0NsaWVudC5jcHAJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIERyYWdEYXRhKikKK3ZvaWQg
V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uIGFjdGlvbiwgRHJhZ0RhdGEmKQogewogICAgIGlmIChhY3Rpb24gPT0gRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTG9hZCkKICAgICAgICAgbV9wYWdlLT53aWxsUGVyZm9ybUxvYWRE
cmFnRGVzdGluYXRpb25BY3Rpb24oKTsKQEAgLTQyLDIyICs0MiwyMiBAQCB2b2lkIFdlYkRyYWdD
bGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpCiAgICAgICAgIG1fcGFnZS0+bWF5UGVyZm9ybVVw
bG9hZERyYWdEZXN0aW5hdGlvbkFjdGlvbigpOyAvLyBVcGxvYWQgY2FuIGhhcHBlbiBmcm9tIGEg
ZHJvcCBldmVudCBoYW5kbGVyLCBzbyB3ZSBzaG91bGQgcHJlcGFyZSBlYXJseS4KIH0KIAotdm9p
ZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFj
dGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqKQordm9pZCBXZWJEcmFnQ2xpZW50Ojp3
aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9p
bnQmLCBDbGlwYm9hcmQmKQogewogfQogCi1EcmFnRGVzdGluYXRpb25BY3Rpb24gV2ViRHJhZ0Ns
aWVudDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEqKQorRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IFdlYkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhJikKIHsKICAgICByZXR1
cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uQW55OwogfQogCi1EcmFnU291cmNlQWN0aW9uIFdlYkRy
YWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIC8q
d2luZG93UG9pbnQqLykKK0RyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJj
ZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYpCiB7CiAgICAgcmV0dXJuIERyYWdT
b3VyY2VBY3Rpb25Bbnk7CiB9CiAKICNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oR1RL
KQotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQ
b2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKQordm9pZCBX
ZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNv
bnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sKQogewogfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkRyYWdDbGllbnQuaAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDE1ICs0MiwxNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZpcnR1
YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVz
dGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0
aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCopIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1h
c2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlv
bkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0ZvckRy
YWcoV2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRy
YWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgd2luZG93UG9pbnQpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBk
cmFnSW1hZ2VPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBldmVudFBvcywgV2ViQ29y
ZTo6Q2xpcGJvYXJkKiwgV2ViQ29yZTo6RnJhbWUqLCBib29sIGxpbmtEcmFnID0gZmFsc2UpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVm
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBib2FyZCYsIFdlYkNvcmU6OkZyYW1l
JiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKSBPVkVSUklERTsKIAogI2lmIFBMQVRGT1JNKE1BQykK
LSAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUsIERPTUVsZW1lbnQqLCBOU1VSTCosIE5TU3RyaW5nKiwgV2ViQ29yZTo6
RnJhbWUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIFdlYkNvcmU6OkVsZW1lbnQmLCBjb25z
dCBXZWJDb3JlOjpVUkwmLCBjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpGcmFtZSopIE9WRVJSSURF
OwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKSBP
VkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCShyZXZpc2lv
biAxNTcwNDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlCiAgICAgcmV0dXJuIGJpdG1h
cC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFn
ZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50
UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqLCBib29s
KQordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwg
Y29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9z
aXRpb24sIENsaXBib2FyZCYgY2xpcGJvYXJkLCBGcmFtZSYsIGJvb2wpCiB7CiAgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gY29udmVydENhaXJvU3VyZmFjZVRvU2hhcmVhYmxl
Qml0bWFwKGRyYWdJbWFnZSk7CiAgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwpA
QCAtNjUsOCArNjUsOCBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VS
CiAgICAgaWYgKGJpdG1hcCAmJiAhYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBjbGlw
Ym9hcmQtPnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEo
ZGF0YU9iamVjdC5nZXQoKSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBjbGlwYm9h
cmQtPnNvdXJjZU9wZXJhdGlvbigpKTsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9i
amVjdCA9IGNsaXBib2FyZC5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOworICAgIERyYWdEYXRh
IGRyYWdEYXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlv
biwgY2xpcGJvYXJkLnNvdXJjZU9wZXJhdGlvbigpKTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U3RhcnREcmFnKGRyYWdEYXRhLCBoYW5kbGUpKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0Ns
aWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tCShyZXZpc2lvbiAxNTcwNDYpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03NiwyMiArNzYsMjIgQEAgc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZQogICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOwog
fQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhSZXRhaW5QdHI8TlNJbWFnZT4gaW1h
Z2UsIGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBG
cmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJh
ZyhSZXRhaW5QdHI8TlNJbWFnZT4gaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCwgY29uc3Qg
SW50UG9pbnQmLCBDbGlwYm9hcmQmLCBGcmFtZSYgZnJhbWUsIGJvb2wgbGlua0RyYWcpCiB7CiAg
ICAgSW50U2l6ZSBiaXRtYXBTaXplKFtpbWFnZS5nZXQoKSBzaXplXSk7Ci0gICAgYml0bWFwU2l6
ZS5zY2FsZShmcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICBiaXRtYXBT
aXplLnNjYWxlKGZyYW1lLnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gY29udmVydEltYWdlVG9CaXRtYXAoaW1hZ2UuZ2V0
KCksIGJpdG1hcFNpemUpOwogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKICAg
ICBpZiAoIWJpdG1hcCB8fCAhYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFNlZW1zIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgbmFt
ZWQgU3RhcnREcmFnLCBub3QgU2V0RHJhZ0ltYWdlLgotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTZXREcmFnSW1hZ2UoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyhwb2ludCksIGhhbmRsZSwgbGlua0RyYWcpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2V0RHJhZ0ltYWdlKGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyhwb2ludCksIGhhbmRsZSwgbGlua0RyYWcpKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OkNh
Y2hlZEltYWdlKiBjYWNoZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIFdlYkNvcmU6
OkNhY2hlZEltYWdlKiBjYWNoZWRJbWFnZShFbGVtZW50JiBlbGVtZW50KQogewotICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFyZW5kZXJlci0+aXNSZW5kZXJJbWFnZSgpKQpAQCAt
MTAyLDI5ICsxMDIsMjcgQEAgc3RhdGljIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBjYWNoZWRJbWFn
ZQogICAgIHJldHVybiBpbWFnZTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgRE9NRWxlbWVudCAq
ZWxlbWVudCwgTlNVUkwgKlVSTCwgTlNTdHJpbmcgKnRpdGxlLCBXZWJDb3JlOjpGcmFtZSopCit2
b2lkIFdlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBsYWJlbCwgRnJhbWUqKQogewotICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBBU1NF
UlQocGFzdGVib2FyZE5hbWUgPT0gU3RyaW5nKE5TRHJhZ1Bib2FyZCkpOwogCi0gICAgRWxlbWVu
dCogY29yZUVsZW1lbnQgPSBjb3JlKGVsZW1lbnQpOworICAgIFdlYkNvcmU6OkNhY2hlZEltYWdl
KiBpbWFnZSA9IGNhY2hlZEltYWdlKGVsZW1lbnQpOwogCi0gICAgV2ViQ29yZTo6Q2FjaGVkSW1h
Z2UqIGltYWdlID0gY2FjaGVkSW1hZ2UoY29yZUVsZW1lbnQpOwotCi0gICAgTlNTdHJpbmcgKmV4
dGVuc2lvbiA9IEAiIjsKKyAgICBTdHJpbmcgZXh0ZW5zaW9uOwogICAgIGlmIChpbWFnZSkgewog
ICAgICAgICBleHRlbnNpb24gPSBpbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24oKTsK
LSAgICAgICAgaWYgKCFbZXh0ZW5zaW9uIGxlbmd0aF0pCisgICAgICAgIGlmIChleHRlbnNpb24u
aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghW3RpdGxl
IGxlbmd0aF0pIHsKLSAgICAgICAgdGl0bGUgPSBbW1VSTCBwYXRoXSBsYXN0UGF0aENvbXBvbmVu
dF07Ci0gICAgICAgIGlmICghW3RpdGxlIGxlbmd0aF0pCi0gICAgICAgICAgICB0aXRsZSA9IFtV
UkwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ107CisgICAgU3RyaW5nIHRpdGxlID0gbGFiZWw7Cisg
ICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkgeworICAgICAgICB0aXRsZSA9IHVybC5sYXN0UGF0aENv
bXBvbmVudCgpOworICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKQorICAgICAgICAgICAgdGl0
bGUgPSBbKE5TVVJMICopdXJsIF93ZWJfdXNlclZpc2libGVTdHJpbmddOwogICAgIH0KIAotICAg
IFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gTGVnYWN5V2ViQXJjaGl2ZTo6Y3Jl
YXRlKGNvcmVFbGVtZW50KTsKKyAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9
IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZSgmZWxlbWVudCk7CiAKICAgICBOU1VSTFJlc3BvbnNl
ICpyZXNwb25zZSA9IGltYWdlLT5yZXNwb25zZSgpLm5zVVJMUmVzcG9uc2UoKTsKICAgICAKQEAg
LTE0Niw3ICsxNDQsNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJ
CiAgICAgICAgIG1lbWNweShzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSwgYnVmZmVyLT5kYXRh
KCksIGFyY2hpdmVTaXplKTsKICAgICAgICAgc2hhcmVkTWVtb3J5QnVmZmVyLT5jcmVhdGVIYW5k
bGUoYXJjaGl2ZUhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25seSk7ICAgICAgICAgICAgCiAg
ICAgfQotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRQcm9taXNl
ZERhdGEocGFzdGVib2FyZE5hbWUsIGltYWdlSGFuZGxlLCBpbWFnZVNpemUsIFN0cmluZyhbcmVz
cG9uc2Ugc3VnZ2VzdGVkRmlsZW5hbWVdKSwgU3RyaW5nKGV4dGVuc2lvbiksIFN0cmluZyh0aXRs
ZSksIFN0cmluZyhbW3Jlc3BvbnNlIFVSTF0gYWJzb2x1dGVTdHJpbmddKSwgU3RyaW5nKFtVUkwg
X3dlYl91c2VyVmlzaWJsZVN0cmluZ10pLCBhcmNoaXZlSGFuZGxlLCBhcmNoaXZlU2l6ZSkpOwor
ICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRQcm9taXNlZERhdGEo
cGFzdGVib2FyZE5hbWUsIGltYWdlSGFuZGxlLCBpbWFnZVNpemUsIFN0cmluZyhbcmVzcG9uc2Ug
c3VnZ2VzdGVkRmlsZW5hbWVdKSwgZXh0ZW5zaW9uLCB0aXRsZSwgU3RyaW5nKFtbcmVzcG9uc2Ug
VVJMXSBhYnNvbHV0ZVN0cmluZ10pLCBTdHJpbmcoWyhOU1VSTCAqKXVybCBfd2ViX3VzZXJWaXNp
YmxlU3RyaW5nXSksIGFyY2hpdmVIYW5kbGUsIGFyY2hpdmVTaXplKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTQwLDE5ICsyNTQw
LDE5IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW8KIAogICAgIHN3
aXRjaCAoYWN0aW9uKSB7CiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQ6Ci0g
ICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9s
bGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEp
KSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRW50ZXJlZChkcmFn
RGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERyYWdDb250cm9sbGVyQWN0aW9u
VXBkYXRlZDoKLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVk
KCZkcmFnRGF0YSkpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQ
ZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdV
cGRhdGVkKGRyYWdEYXRhKSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRHJhZ0NvbnRy
b2xsZXJBY3Rpb25FeGl0ZWQ6Ci0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFn
RXhpdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFn
RXhpdGVkKGRyYWdEYXRhKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERyYWdDb250cm9s
bGVyQWN0aW9uUGVyZm9ybURyYWc6IHsKLSAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxlcigp
LnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIo
KS5wZXJmb3JtRHJhZyhkcmFnRGF0YSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjU3
NSwxNSArMjU3NSwxNSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ1N0b3JhZ2VOYW1lLCBjbGllbnRQb3NpdGlvbiwg
Z2xvYmFsUG9zaXRpb24sIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KGRyYWdnaW5nU291cmNl
T3BlcmF0aW9uTWFzayksIHN0YXRpY19jYXN0PERyYWdBcHBsaWNhdGlvbkZsYWdzPihmbGFncykp
OwogICAgIHN3aXRjaCAoYWN0aW9uKSB7CiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvbkVu
dGVyZWQ6Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRW50ZXJlZCgm
ZHJhZ0RhdGEpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVy
Zm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRW50
ZXJlZChkcmFnRGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERyYWdDb250cm9s
bGVyQWN0aW9uVXBkYXRlZDoKLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLmRy
YWdVcGRhdGVkKCZkcmFnRGF0YSkpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24obV9wYWdlLT5kcmFnQ29udHJvbGxl
cigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKSkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvbkV4aXRlZDoKLSAgICAgICAgbV9wYWdlLT5kcmFn
Q29udHJvbGxlcigpLmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgbV9wYWdlLT5kcmFn
Q29udHJvbGxlcigpLmRyYWdFeGl0ZWQoZHJhZ0RhdGEpOwogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvblBlcmZvcm1EcmFnOiB7CkBAIC0yNTk1
LDcgKzI1OTUsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvCiAg
ICAgICAgICAgICAgICAgbV9wZW5kaW5nRHJvcEV4dGVuc2lvbnNGb3JGaWxlVXBsb2FkLmFwcGVu
ZChleHRlbnNpb24pOwogICAgICAgICB9CiAKLSAgICAgICAgbV9wYWdlLT5kcmFnQ29udHJvbGxl
cigpLnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS5wZXJmb3JtRHJhZyhkcmFnRGF0YSk7CiAKICAgICAgICAgLy8gSWYgd2Ugc3RhcnRlZCBs
b2FkaW5nIGEgbG9jYWwgZmlsZSwgdGhlIHNhbmRib3ggZXh0ZW5zaW9uIHRyYWNrZXIgd291bGQg
aGF2ZSBhZG9wdGVkIHRoaXMKICAgICAgICAgLy8gcGVuZGluZyBkcm9wIHNhbmRib3ggZXh0ZW5z
aW9uLiBJZiBub3QsIHdlJ2xsIHBsYXkgaXQgc2FmZSBhbmQgY2xlYXIgaXQuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0xMC0wNiAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENUVEU6IFVzZSByZWZlcmVuY2VzIGluIGFu
ZCBhcm91bmQgRHJhZ0NvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMjQyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6YWN0aW9uTWFz
a0ZvckRyYWcpOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6c3RhcnREcmFnKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50RWZsLmg6CisKIDIwMTMtMTAtMDQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGcmFtZVBv
bGljeUZ1bmN0aW9uIHNob3VsZCBiZSBhbiBzdGQ6OmZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50RWZsLmNwcAkocmV2aXNp
b24gMTU3MDQ2KQorKysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVu
dEVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDE3ICszNSwxNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIERyYWdDbGllbnRFZmw6
OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwg
RHJhZ0RhdGEqKQordm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlv
bkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhJikKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIERyYWdDbGllbnRFZmw6OndpbGxQZXJmb3JtRHJhZ1NvdXJj
ZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopCit2
b2lkIERyYWdDbGllbnRFZmw6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNl
QWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIERyYWdDbGllbnRFZmw6OmFjdGlvbk1h
c2tGb3JEcmFnKERyYWdEYXRhKikKK0RyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50RWZs
OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpCiB7CiAgICAgcmV0dXJuIERyYWdEZXN0aW5h
dGlvbkFjdGlvbkFueTsKIH0KQEAgLTU1LDcgKzU1LDcgQEAgRHJhZ1NvdXJjZUFjdGlvbiBEcmFn
Q2xpZW50RWZsOjpkcmFnU291cgogICAgIHJldHVybiBEcmFnU291cmNlQWN0aW9uQW55OwogfQog
Ci12b2lkIERyYWdDbGllbnRFZmw6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBv
aW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wpCit2b2lkIERy
YWdDbGllbnRFZmw6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29u
c3QgSW50UG9pbnQmLCBDbGlwYm9hcmQmLCBGcmFtZSYsIGJvb2wpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRFZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9EcmFnQ2xpZW50RWZsLmgJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvZWZs
L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRFZmwuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTgg
KzM2LDE4IEBACiAjaW5jbHVkZSAiRHJhZ0NsaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CisKIGNsYXNzIERyYWdDbGllbnRFZmwgOiBwdWJsaWMgV2ViQ29yZTo6RHJhZ0NsaWVudCB7CiBw
dWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
KFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdT
b3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJk
Kik7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFz
a0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRy
b2xsZXJEZXN0cm95ZWQoKTsKIAorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRy
YWdEYXRhJik7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihX
ZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNv
cmU6OkNsaXBib2FyZCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJik7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KTsKLQotICAgIHZpcnR1YWwgdm9pZCBz
dGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
ZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNv
cmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOworICAgIHZpcnR1
YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQ
b3MsIFdlYkNvcmU6OkNsaXBib2FyZCYsIFdlYkNvcmU6OkZyYW1lJiwgYm9vbCBsaW5rRHJhZyA9
IGZhbHNlKTsKIH07CisKIH0KIAogI2VuZGlmIC8vIERyYWdDbGllbnRFZmxfaApJbmRleDogU291
cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTMtMTAtMDYgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBDVFRFOiBVc2UgcmVmZXJlbmNlcyBpbiBh
bmQgYXJvdW5kIERyYWdDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMjI0MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFj
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKToK
KyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZp
ZXcuY3BwOgorICAgICAgICAoZHJhZ0V4aXRlZENhbGxiYWNrKToKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19kcmFnX21vdGlvbik6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRh
X3JlY2VpdmVkKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmFnX2Ryb3ApOgorCiAyMDEz
LTEwLTA0ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAg
ICBbR1RLXSBVc2VyTWVkaWFDbGllbnRHdGsgbmVlZHMgQVBJIHVwZGF0ZQpJbmRleDogU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAJKHJl
dmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNiArNTUsMTYgQEAgRHJhZ0NsaWVu
dDo6fkRyYWdDbGllbnQoKQogewogfQogCi12b2lkIERyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKQordm9p
ZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIERyYWdEYXRhJikKIHsKIH0KIAotdm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVy
Zm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0
YXJ0UG9zLCBDbGlwYm9hcmQqKQordm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3Vy
Y2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmIHN0YXJ0UG9zLCBDbGlw
Ym9hcmQmKQogewogICAgIG1fc3RhcnRQb3MgPSBzdGFydFBvczsKIH0KIAotRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uIERyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKK0RyYWdE
ZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uQW55OwpAQCAtNzYsMTQgKzc2LDE0IEBAIERyYWdTb3VyY2VBY3Rpb24gRHJhZ0NsaWVudDo6
ZHJhZ1NvdXJjZUEKICAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbkFueTsKIH0KIAotdm9pZCBE
cmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYg
ZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCogY2xp
cGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit2b2lkIERyYWdDbGllbnQ6OnN0
YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmln
aW4sIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1l
JiBmcmFtZSwgYm9vbCBsaW5rRHJhZykKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
d2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcoa2l0KGZyYW1lKSk7Ci0gICAgUmVmUHRyPERh
dGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5kYXRhT2Jq
ZWN0KCk7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0
X3dlYl92aWV3KGtpdCgmZnJhbWUpKTsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9i
amVjdCA9IGNsaXBib2FyZC5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwogICAgIEdSZWZQdHI8
R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0TGlzdCA9IGFkb3B0R1JlZihQYXN0ZWJvYXJkSGVscGVyOjpk
ZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2Jq
ZWN0LmdldCgpKSk7CiAgICAgR093blB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRf
Y3VycmVudF9ldmVudCgpKTsKIAotICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2Ry
YWdfYmVnaW4oR1RLX1dJREdFVChtX3dlYlZpZXcpLCB0YXJnZXRMaXN0LmdldCgpLCBkcmFnT3Bl
cmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpKSwgMSwg
Y3VycmVudEV2ZW50LmdldCgpKTsKKyAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0a19k
cmFnX2JlZ2luKEdUS19XSURHRVQobV93ZWJWaWV3KSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09w
ZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoY2xpcGJvYXJkLnNvdXJjZU9wZXJhdGlvbigpKSwgMSwg
Y3VycmVudEV2ZW50LmdldCgpKTsKICAgICB3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEhlbHBl
ci5zdGFydGVkRHJhZyhjb250ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKIAogICAgIC8vIEEgZHJh
ZyBzdGFydGluZyBzaG91bGQgcHJldmVudCBhIGRvdWJsZS1jbGljayBmcm9tIGhhcHBlbmluZy4g
VGhpcyBtaWdodApJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0Ns
aWVudEd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0RyYWdDbGllbnRHdGsuaAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwyNiAr
NDAsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotICAgIGNsYXNzIERyYWdDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
RHJhZ0NsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBEcmFnQ2xpZW50KFdlYktpdFdlYlZp
ZXcqKTsKLSAgICAgICAgfkRyYWdDbGllbnQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgd2ls
bFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZv
cm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkKik7Ci0gICAgICAgIHZpcnR1YWwgV2Vi
Q29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRy
YWdEYXRhKik7Ci0KLSAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRy
YWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRv
d1BvaW50KTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJ
bWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFnSW1hZ2VPcmln
aW4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBldmVudFBvcywgV2ViQ29yZTo6Q2xpcGJvYXJk
KiwgV2ViQ29yZTo6RnJhbWUqLCBib29sIGxpbmtEcmFnID0gZmFsc2UpOwotCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwotICAgICAgICBXZWJDb3JlOjpJbnRQb2lu
dCBtX3N0YXJ0UG9zOwotICAgICAgICBXZWJDb3JlOjpEcmFnSWNvbiBtX2RyYWdJY29uOwotICAg
IH07CitjbGFzcyBEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgeworcHVi
bGljOgorICAgIERyYWdDbGllbnQoV2ViS2l0V2ViVmlldyopOworICAgIH5EcmFnQ2xpZW50KCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKworICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFn
RGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpOworICAgIHZpcnR1
YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNv
cmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRy
YWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRv
d1BvaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJl
ZiBkcmFnSW1hZ2UsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBldmVudFBvcywgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2Vi
Q29yZTo6RnJhbWUmLCBib29sIGxpbmtEcmFnID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIFdl
YktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N0YXJ0UG9z
OworICAgIFdlYkNvcmU6OkRyYWdJY29uIG1fZHJhZ0ljb247Cit9OwogfQogCiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9u
IDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2RyYWdfZGF0YV9nZQogICAgIFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5k
cmFnQW5kRHJvcEhlbHBlci5oYW5kbGVHZXREcmFnRGF0YShjb250ZXh0LCBzZWxlY3Rpb25EYXRh
LCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgZHJhZ0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCog
d2lkZ2V0LCBEcmFnRGF0YSogZHJhZ0RhdGEsIGJvb2wgZHJvcEhhcHBlbmVkKQorc3RhdGljIHZv
aWQgZHJhZ0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSYgZHJhZ0Rh
dGEsIGJvb2wgZHJvcEhhcHBlbmVkKQogewogICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4aXRlZCBp
ZiB3ZSBoYXZlIGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCiAgICAgLy8g
aGFwcGVucyBpbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2aWV3LgpA
QCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmFn
X21vdAogICAgICAgICByZXR1cm4gVFJVRTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFP
YmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwg
cG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRf
Z2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNv
cmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCkuZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKS5vcGVy
YXRpb247CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFn
Q29udHJvbGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiAgICAgZ2RrX2Ry
YWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3Bl
cmF0aW9uKSwgdGltZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CkBAIC0xNTY2LDcgKzE1NjYsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX3JlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0
V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9u
VG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsK
LSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdDb250cm9s
bGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgRHJhZ09wZXJhdGlv
biBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFbnRlcmVk
KGRyYWdEYXRhKS5vcGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdP
cGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiB9CiAKQEAg
LTE1NzksNyArMTU3OSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19k
cm8KIAogICAgIEludFBvaW50IHBvc2l0aW9uKHgsIHkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRh
KGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdp
ZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2Nv
bnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29u
dHJvbGxlcigpLnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgY29yZSh3ZWJWaWV3KS0+ZHJh
Z0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZyhkcmFnRGF0YSk7CiAgICAgZ3RrX2RyYWdfZmluaXNo
KGNvbnRleHQsIFRSVUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTEwLTA2ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMg
aW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6Cisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbToKKyAgICAgICAgKFdlYkRy
YWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6Ondp
bGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6
OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojpz
dGFydERyYWcpOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFt
ZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFj
ZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOmZvclR5cGU6aW5Db250ZXh0
OnN1YnJlc291cmNlczpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAg
ICgtW1dlYlZpZXcgZHJhZ2dpbmdFbnRlcmVkOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdn
aW5nVXBkYXRlZDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ0V4aXRlZDpdKToKKyAg
ICAgICAgKC1bV2ViVmlldyBwZXJmb3JtRHJhZ09wZXJhdGlvbjpdKToKKwogMjAxMy0xMC0wNSAg
U2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIENUVEU6IFRocmVhZCByZWZl
cmVuY2VzIHRocm91Z2ggbWFya3VwLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkRyYWdDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTMgKzMyLDEzIEBACiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdlYkNv
cmU6OkRyYWdDbGllbnQgewogcHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyopOwot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3Jl
OjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFn
U291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2Fy
ZCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VB
Y3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9u
TWFza0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNv
cmU6OkRyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgd2luZG93UG9pbnQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZHJhZ1BvcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpD
bGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wgbGlua0RyYWcpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSwgRE9NRWxlbWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBXZWJDb3JlOjpGcmFt
ZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0lt
YWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1BvcywgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYs
IGJvb2wgbGlua0RyYWcpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3Jp
dGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViQ29yZTo6RWxlbWVu
dCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZyYW1lKikg
T1ZFUlJJREU7CiBwcml2YXRlOgogICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKIH07CkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0J
KHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCiAKKyNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2lt
cG9ydCAiV2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9ucy5oIgogI2ltcG9y
dCAiV2ViRnJhbWUuaCIKQEAgLTY2LDE0ICs2NywxNCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmdl
dFRvcEhUTUxWaWV3KEZyYW1lCiAgICAgcmV0dXJuIChXZWJIVE1MVmlldyopW1traXQoJmZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiB9CiAKLVdl
YkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9y
RHJhZyhXZWJDb3JlOjpEcmFnRGF0YSogZHJhZ0RhdGEpCitXZWJDb3JlOjpEcmFnRGVzdGluYXRp
b25BY3Rpb24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0Rh
dGEmIGRyYWdEYXRhKQogewotICAgIHJldHVybiAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKVtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBk
cmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLT5wbGF0Zm9y
bURhdGEoKV07CisgICAgcmV0dXJuIChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24pW1tt
X3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IGRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCld
OwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdE
YXRhKiBkcmFnRGF0YSkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbiwgV2ViQ29y
ZTo6RHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9y
d2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bjooV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWFjdGlvbiBmb3JEcmFnZ2luZ0luZm86ZHJhZ0Rh
dGEtPnBsYXRmb3JtRGF0YSgpXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246KFdl
YkRyYWdEZXN0aW5hdGlvbkFjdGlvbilhY3Rpb24gZm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLnBs
YXRmb3JtRGF0YSgpXTsKIH0KIAogCkBAIC04MywyNyArODQsMjMgQEAgV2ViQ29yZTo6RHJhZ1Nv
dXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OgogICAgIHJldHVybiAoRHJhZ1NvdXJjZUFjdGlvbilb
W21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgZHJhZ1Nv
dXJjZUFjdGlvbk1hc2tGb3JQb2ludDp2aWV3UG9pbnRdOwogfQogCi12b2lkIFdlYkRyYWdDbGll
bnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9u
IGFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1vdXNlRG93blBvaW50LCBXZWJDb3Jl
OjpDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgbW91c2VEb3duUG9pbnQsIFdlYkNvcmU6OkNsaXBib2FyZCYgY2xp
cGJvYXJkKQogewotICAgIEFTU0VSVChjbGlwYm9hcmQpOwotICAgIFtbbV93ZWJWaWV3IF9VSURl
bGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdTb3VyY2VB
Y3Rpb246KFdlYkRyYWdTb3VyY2VBY3Rpb24pYWN0aW9uIGZyb21Qb2ludDptb3VzZURvd25Qb2lu
dCB3aXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpjbGlwYm9h
cmQtPnBhc3RlYm9hcmQoKS5uYW1lKCldXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZv
cndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uOihX
ZWJEcmFnU291cmNlQWN0aW9uKWFjdGlvbiBmcm9tUG9pbnQ6bW91c2VEb3duUG9pbnQgd2l0aFBh
c3RlYm9hcmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJvYXJkLnBhc3Rl
Ym9hcmQoKS5uYW1lKCldXTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJh
Z0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGF0LCBjb25zdCBJbnRQb2ludCYg
ZXZlbnRQb3MsIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0Ry
YWcpCit2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdl
LCBjb25zdCBJbnRQb2ludCYgYXQsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJk
JiBjbGlwYm9hcmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBsaW5rRHJhZykKIHsKLSAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNsaXBib2FyZCk7Ci0gICAgUmV0YWlu
UHRyPFdlYkhUTUxWaWV3PiBodG1sVmlldyA9IChXZWJIVE1MVmlldyopW1traXQoZnJhbWUpIGZy
YW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IGh0bWxW
aWV3ID0gKFdlYkhUTUxWaWV3KilbW2tpdCgmZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3
XTsKICAgICBpZiAoIVtodG1sVmlldy5nZXQoKSBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBj
bGFzc11dKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTlNFdmVudCAqZXZlbnQgPSBsaW5r
RHJhZyA/IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3
LmdldCgpIF9tb3VzZURvd25FdmVudF07Ci0gICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0g
Z2V0VG9wSFRNTFZpZXcoZnJhbWUpOworICAgIE5TRXZlbnQgKmV2ZW50ID0gbGlua0RyYWcgPyBm
cmFtZS5ldmVudEhhbmRsZXIoKS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgpIF9t
b3VzZURvd25FdmVudF07CisgICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRN
TFZpZXcoJmZyYW1lKTsKICAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHRvcFZpZXdQcm90ZWN0
b3IgPSB0b3BIVE1MVmlldzsKICAgICAKICAgICBbdG9wSFRNTFZpZXcgX3N0b3BBdXRvc2Nyb2xs
VGltZXJdOwotICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFz
dGVib2FyZFdpdGhOYW1lOmNsaXBib2FyZC0+cGFzdGVib2FyZCgpLm5hbWUoKV07CisgICAgTlNQ
YXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6
Y2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1lKCldOwogCiAgICAgTlNJbWFnZSAqZHJhZ05TSW1h
Z2UgPSBkcmFnSW1hZ2UuZ2V0KCk7CiAgICAgV2ViSFRNTFZpZXcgKnNvdXJjZUhUTUxWaWV3ID0g
aHRtbFZpZXcuZ2V0KCk7CkBAIC0xMjMsMTQgKzEyMCwxMyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6
OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiB9CiAK
LXZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3Ry
aW5nKiB0aXRsZSwgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKSAKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6
ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBXZWJD
b3JlOjpGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKHBhc3RlYm9hcmROYW1lKTsKLSAgICBB
U1NFUlQoZWxlbWVudCk7Ci0gICAgV2ViSFRNTFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3
KGZyYW1lKTsgICAgICAKLSAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW2VsZW1lbnQgd2ViQXJj
aGl2ZV07CisgICAgV2ViSFRNTFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsK
KyAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW2tpdCgmZWxlbWVudCkgd2ViQXJjaGl2ZV07CiAg
ICAgCi0gICAgW1tOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1l
XSBfd2ViX2RlY2xhcmVBbmRXcml0ZURyYWdJbWFnZUZvckVsZW1lbnQ6ZWxlbWVudCBVUkw6VVJM
IHRpdGxlOnRpdGxlIGFyY2hpdmU6YXJjaGl2ZSBzb3VyY2U6c291cmNlXTsKKyAgICBbW05TUGFz
dGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6cGFzdGVib2FyZE5hbWVdIF93ZWJfZGVjbGFyZUFu
ZFdyaXRlRHJhZ0ltYWdlRm9yRWxlbWVudDpraXQoJmVsZW1lbnQpIFVSTDp1cmwgdGl0bGU6dGl0
bGUgYXJjaGl2ZTphcmNoaXZlIHNvdXJjZTpzb3VyY2VdOwogfQogCiB2b2lkIFdlYkRyYWdDbGll
bnQ6OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5OCw4ICs5OTgsMTAgQEAgLSAo
dm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRAogfQogCiAtICh2b2lkKV9yZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDoo
Qk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCi17
ICAgCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSBraXQoY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCB0ZXh0KS5nZXQoKSk7Cit7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgCisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkuZ2V0KCkpIDogbmlsOwogICAgIFtzZWxm
IF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50
OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZ
RVNdOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0J
KHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNjUsOCArMjA2NSwxMSBAQCAtIChET01Eb2N1bWVu
dEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lCiAgICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGls
ZDphbmNob3JdOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQotICAgIGlmIChwYm9h
cmRUeXBlID09IE5TU3RyaW5nUGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVG
cmFnbWVudEZyb21UZXh0KGNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBl
Ok5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGlu
Z10pLmdldCgpKTsKKyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0cmluZ1Bib2FyZFR5cGUpIHsK
KyAgICAgICAgaWYgKCFjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAg
cmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3Rl
Ym9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5n
V2l0aENhbm9uaWNhbE1hcHBpbmddKS5nZXQoKSk7CisgICAgfQogICAgIHJldHVybiBuaWw7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE1NzA0
NikKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDMzMiw3ICs0MzMyLDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJl
ZDooaWQgPAogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRp
b25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRy
YWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0
aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250
cm9sbGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgcmV0dXJuIGNv
cmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpLm9wZXJhdGlv
bjsKIH0KIAogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPE5TRHJhZ2dp
bmdJbmZvPilkcmFnZ2luZ0luZm8KQEAgLTQzNDQsNyArNDM0NCw3IEBAIC0gKE5TRHJhZ09wZXJh
dGlvbilkcmFnZ2luZ1VwZGF0ZWQ6KGlkIDwKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5n
SW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50
KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKICAgICBE
cmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2Fz
dDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
a10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwotICAgIHJldHVybiBw
YWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKCZkcmFnRGF0YSkub3BlcmF0aW9uOwor
ICAgIHJldHVybiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5v
cGVyYXRpb247CiB9CiAKIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5m
bz4pZHJhZ2dpbmdJbmZvCkBAIC00MzU2LDcgKzQzNTYsNyBAQCAtICh2b2lkKWRyYWdnaW5nRXhp
dGVkOihpZCA8TlNEcmFnZ2luZ0luCiAgICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8g
ZHJhZ2dpbmdMb2NhdGlvbl0pOwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJh
Z2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CiAgICAgRHJhZ0Rh
dGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJh
Z09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwg
W3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKLSAgICBwYWdlLT5kcmFnQ29u
dHJvbGxlcigpLmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICBwYWdlLT5kcmFnQ29udHJvbGxl
cigpLmRyYWdFeGl0ZWQoZHJhZ0RhdGEpOwogfQogCiAtIChCT09MKXByZXBhcmVGb3JEcmFnT3Bl
cmF0aW9uOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwpAQCAtNDM2OSw3ICs0MzY5
LDcgQEAgLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogICAgIEludFBv
aW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2lu
dCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3Nl
bGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50
LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJ
bmZvXSk7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkucGVyZm9ybURy
YWcoJmRyYWdEYXRhKTsKKyAgICByZXR1cm4gY29yZShzZWxmKS0+ZHJhZ0NvbnRyb2xsZXIoKS5w
ZXJmb3JtRHJhZyhkcmFnRGF0YSk7CiB9CiAKIC0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50
ICopcG9pbnQgZHJhZ1R5cGVzOihOU1NldCAqKXR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNTcwNDYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0xMC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIENUVEU6IFVzZSByZWZlcmVuY2VzIGluIGFuZCBhcm91bmQgRHJh
Z0NvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyMjQyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJEcmFn
Q2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyk6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3
aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6c3Rh
cnREcmFnKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisKIDIw
MTMtMTAtMDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGcmFtZVBvbGljeUZ1bmN0aW9uIHNob3VsZCBiZSBhbiBzdGQ6OmZ1bmN0aW9uCkluZGV4OiBT
b3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNw
cAkocmV2aXNpb24gMTU3MDQ2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViRHJhZ0NsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDI1ICs2NSwyNSBAQCBXZWJE
cmFnQ2xpZW50OjpXZWJEcmFnQ2xpZW50KFdlYlZpZXcqIHdlCiAgICAgQVNTRVJUKHdlYlZpZXcp
OwogfQogCi1EcmFnRGVzdGluYXRpb25BY3Rpb24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0Zv
ckRyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQorRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdD
bGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICBDT01Q
dHI8SVdlYlVJRGVsZWdhdGU+IGRlbGVnYXRlUmVmID0gMDsKICAgICAvL0RlZmF1bHQgYmVoYXZp
b3VyIChlZy4gbm8gZGVsZWdhdGUsIG9yIGNhbGxiYWNrIG5vdCBpbXBsZW1lbnRlZCkgaXMgdG8g
YWxsb3cKICAgICAvL2FueSBhY3Rpb24KICAgICBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24gbWFz
ayA9IFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2Vi
Vmlldy0+dWlEZWxlZ2F0ZSgmZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPmRy
YWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0
YS0+cGxhdGZvcm1EYXRhKCksICZtYXNrKTsKKyAgICAgICAgZGVsZWdhdGVSZWYtPmRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0YS5wbGF0
Zm9ybURhdGEoKSwgJm1hc2spOwogCiAgICAgcmV0dXJuIChEcmFnRGVzdGluYXRpb25BY3Rpb24p
bWFzazsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlv
bkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEp
Cit2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERy
YWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICAv
L0RlZmF1bHQgZGVsZWdhdGUgZm9yIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGhh
cyBubyBzaWRlIGVmZmVjdHMKICAgICAvL3NvIHdlIGp1c3QgY2FsbCB0aGUgZGVsZWdhdGUsIGFu
ZCBkb24ndCB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgaW1wbGVtZW50ZWQKICAgICBDT01QdHI8
SVdlYlVJRGVsZWdhdGU+IGRlbGVnYXRlUmVmID0gMDsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2Vi
Vmlldy0+dWlEZWxlZ2F0ZSgmZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPndp
bGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKG1fd2ViVmlldywgKFdlYkRyYWdEZXN0aW5h
dGlvbkFjdGlvbilhY3Rpb24sIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgIGRl
bGVnYXRlUmVmLT53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihtX3dlYlZpZXcsIChX
ZWJEcmFnRGVzdGluYXRpb25BY3Rpb24pYWN0aW9uLCBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7
CiB9CiAKIERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1h
c2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCkBAIC05NiwyNyArOTYsMjcg
QEAgRHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cgogICAgIHJldHVybiAo
RHJhZ1NvdXJjZUFjdGlvbilhY3Rpb247CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBJbnRQ
b2ludCYgaW50UG9pbnQsIENsaXBib2FyZCogY2xpcGJvYXJkKQordm9pZCBXZWJEcmFnQ2xpZW50
Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24sIGNv
bnN0IEludFBvaW50JiBpbnRQb2ludCwgQ2xpcGJvYXJkJiBjbGlwYm9hcmQpCiB7CiAgICAgQ09N
UHRyPElXZWJVSURlbGVnYXRlPiB1aURlbGVnYXRlOwogICAgIGlmICghU1VDQ0VFREVEKG1fd2Vi
Vmlldy0+dWlEZWxlZ2F0ZSgmdWlEZWxlZ2F0ZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQ
T0lOVCBwb2ludCA9IGludFBvaW50OwotICAgIENPTVB0cjxJRGF0YU9iamVjdD4gZGF0YU9iamVj
dCA9IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBDT01QdHI8SURh
dGFPYmplY3Q+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3Qo
KTsKIAogICAgIENPTVB0cjxJRGF0YU9iamVjdD4gbmV3RGF0YU9iamVjdDsKICAgICBIUkVTVUxU
IHJlc3VsdCA9IHVpRGVsZWdhdGUtPndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihtX3dlYlZp
ZXcsIHN0YXRpY19jYXN0PFdlYkRyYWdTb3VyY2VBY3Rpb24+KGFjdGlvbiksICZwb2ludCwgZGF0
YU9iamVjdC5nZXQoKSwgJm5ld0RhdGFPYmplY3QpOwogICAgIGlmIChyZXN1bHQgPT0gU19PSyAm
JiBuZXdEYXRhT2JqZWN0ICE9IGRhdGFPYmplY3QpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVi
b2FyZCY+KGNsaXBib2FyZC0+cGFzdGVib2FyZCgpKS5zZXRFeHRlcm5hbERhdGFPYmplY3QobmV3
RGF0YU9iamVjdC5nZXQoKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVib2FyZCY+KGNsaXBi
b2FyZC5wYXN0ZWJvYXJkKCkpLnNldEV4dGVybmFsRGF0YU9iamVjdChuZXdEYXRhT2JqZWN0Lmdl
dCgpKTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGlt
YWdlLCBjb25zdCBJbnRQb2ludCYgaW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnUG9p
bnQsIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgaXNMaW5rKQordm9p
ZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQ
b2ludCYgaW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnUG9pbnQsIENsaXBib2FyZCYg
Y2xpcGJvYXJkLCBGcmFtZSYgZnJhbWUsIGJvb2wgaXNMaW5rKQogewogICAgIC8vRklYTUU6IEFs
bG93IFVJRGVsZWdhdGUgdG8gb3ZlcnJpZGUgYmVoYXZpb3VyIDxyZGFyOi8vcHJvYmxlbS81MDE1
OTUzPgogCiAgICAgLy9XZSBsaWJlcmFsbHkgcHJvdGVjdCBldmVyeXRoaW5nLCB0byBwcm90ZWN0
IGFnYWluc3QgYSBsb2FkIG9jY3VycmluZyBtaWQtZHJhZwotICAgIFJlZlB0cjxGcmFtZT4gZnJh
bWVQcm90ZWN0b3IgPSBmcmFtZTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lUHJvdGVjdG9yID0g
JmZyYW1lOwogICAgIENPTVB0cjxJRHJhZ1NvdXJjZUhlbHBlcj4gaGVscGVyOwogICAgIENPTVB0
cjxJRGF0YU9iamVjdD4gZGF0YU9iamVjdDsKICAgICBDT01QdHI8V2ViVmlldz4gdmlld1Byb3Rl
Y3RvciA9IG1fd2ViVmlldzsKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6
OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSCiAgICAgaWYgKEZBSUxFRChXZWJEcm9wU291cmNlOjpjcmVh
dGVJbnN0YW5jZShtX3dlYlZpZXcsICZzb3VyY2UpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZGF0YU9iamVjdCA9IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBk
YXRhT2JqZWN0ID0gY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CiAgICAgaWYg
KHNvdXJjZSAmJiAoaW1hZ2UgfHwgZGF0YU9iamVjdCkpIHsKICAgICAgICAgaWYgKGltYWdlKSB7
CiAgICAgICAgICAgICBpZihTVUNDRUVERUQoQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9EcmFnRHJv
cEhlbHBlciwgMCwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9p
ZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUgogICAgICAgICAgICAgZWxzZSBp
ZiAoZWZmZWN0ICYgRFJPUEVGRkVDVF9NT1ZFKQogICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9
IERyYWdPcGVyYXRpb25Nb3ZlOwogICAgICAgICB9Ci0gICAgICAgIGZyYW1lLT5ldmVudEhhbmRs
ZXIoKS5kcmFnU291cmNlRW5kZWRBdChnZW5lcmF0ZU1vdXNlRXZlbnQobV93ZWJWaWV3LCBmYWxz
ZSksIG9wZXJhdGlvbik7CisgICAgICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRyYWdTb3VyY2VF
bmRlZEF0KGdlbmVyYXRlTW91c2VFdmVudChtX3dlYlZpZXcsIGZhbHNlKSwgb3BlcmF0aW9uKTsK
ICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRy
YWdDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJEcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzA0NikKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIg
KzMzLDE0IEBAIGNsYXNzIFdlYlZpZXc7CiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdl
YkNvcmU6OkRyYWdDbGllbnQgewogcHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyop
OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3Jt
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2Vi
Q29yZTo6RHJhZ0RhdGEqKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95
ZWQoKTsKKworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpE
cmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0
aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
V2ViQ29yZTo6Q2xpcGJvYXJkKik7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3Jl
OjpEcmFnSW1hZ2VSZWYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wpOwor
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3Jl
OjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVh
bCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0
aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpOworICAg
IHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJv
YXJkJiwgV2ViQ29yZTo6RnJhbWUmLCBib29sKTsKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3KiBt
X3dlYlZpZXc7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213604</attachid>
            <date>2013-10-07 11:08:37 -0700</date>
            <delta_ts>2013-10-07 12:22:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122427-20131007110836.patch</filename>
            <type>text/plain</type>
            <size>136238</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTA2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4g
YW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgdG8gaW5kaWNhdGUgbm9uLW51bGxuZXNz
IG9mIERyYWdDb250cm9sbGVyIHJlbGF0ZWQKKyAgICAgICAgb2JqZWN0cy4KKwogMjAxMy0xMC0w
NyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ29u
ZGl0aW9uYWwgc3VwcG9ydCBpbiBiaW5kaW5ncyBjb2RlIGdlbmVyYXRvciBmb3Igb3ZlcmxvYWRl
ZCBmdW5jdGlvbnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNTcwNDkpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcg
Kzc0Miw3IEBAIF9fWk43V2ViQ29yZTIyU2NyaXB0RXhlY3V0aW9uQ29udGV4dDI2Y2EKIF9fWk43
V2ViQ29yZTIyU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjM0ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVu
dHNUb0ZyYW1lc0VSTlNfOVBhZ2VHcm91cEVSS04zV1RGNlZlY3RvcklOUzNfNlJlZlB0cklOU181
RnJhbWVFRUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFUktOUzNfNlN0cmluZ0VTRV9TRV9T
RV9QTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9fWk43V2ViQ29yZTIyVVJMV2l0aFVzZXJUeXBlZFN0
cmluZ0VQOE5TU3RyaW5nUDVOU1VSTAogX19aTjdXZWJDb3JlMjJjb3VudGVyVmFsdWVGb3JFbGVt
ZW50RVBOU183RWxlbWVudEUKLV9fWk43V2ViQ29yZTIyY3JlYXRlRnJhZ21lbnRGcm9tVGV4dEVQ
TlNfNVJhbmdlRVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMjJjcmVhdGVGcmFnbWVudEZy
b21UZXh0RVJOU181UmFuZ2VFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyMmV4dGVybmFs
UmVwcmVzZW50YXRpb25FUE5TXzVGcmFtZUVqCiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVz
ZW50YXRpb25FUE5TXzdFbGVtZW50RWoKIF9fWk43V2ViQ29yZTIyc3lzdGVtTWFya2V0aW5nVmVy
c2lvbkV2CkBAIC0yNDU2LDE1ICsyNDU2LDE1IEBAIF9fWk5LN1dlYkNvcmUxMlNoYXJlZEJ1ZmZl
cjM2bWVtb3J5TWFwcGUKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiBfX1pON1dlYkNvcmUx
MkV2ZW50SGFuZGxlcjE3ZHJhZ1NvdXJjZUVuZGVkQXRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVu
dEVOU18xM0RyYWdPcGVyYXRpb25FCi1fX1pOSzdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2V2ZW50
TWF5U3RhcnREcmFnRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFCi1fX1pON1dlYkNvcmUxNERy
YWdDb250cm9sbGVyMTBkcmFnRXhpdGVkRVBOU184RHJhZ0RhdGFFCi1fX1pON1dlYkNvcmUxNERy
YWdDb250cm9sbGVyMTFkcmFnRW50ZXJlZEVQTlNfOERyYWdEYXRhRQotX19aTjdXZWJDb3JlMTRE
cmFnQ29udHJvbGxlcjExZHJhZ1VwZGF0ZWRFUE5TXzhEcmFnRGF0YUUKLV9fWk43V2ViQ29yZTE0
RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFnRVBOU184RHJhZ0RhdGFFCitfX1pON1dlYkNvcmUx
NERyYWdDb250cm9sbGVyMTBkcmFnRXhpdGVkRVJOU184RHJhZ0RhdGFFCitfX1pON1dlYkNvcmUx
NERyYWdDb250cm9sbGVyMTFkcmFnRW50ZXJlZEVSTlNfOERyYWdEYXRhRQorX19aTjdXZWJDb3Jl
MTREcmFnQ29udHJvbGxlcjExZHJhZ1VwZGF0ZWRFUk5TXzhEcmFnRGF0YUUKK19fWk43V2ViQ29y
ZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFnRVJOU184RHJhZ0RhdGFFCiBfX1pON1dlYkNv
cmUxNERyYWdDb250cm9sbGVyMTRwbGFjZURyYWdDYXJldEVSS05TXzhJbnRQb2ludEUKIF9fWk43
V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXI5ZHJhZ0VuZGVkRXYKIF9fWk43V2ViQ29yZThEcmFnRGF0
YUMxRVAxMW9iamNfb2JqZWN0UktOU184SW50UG9pbnRFUzVfTlNfMTNEcmFnT3BlcmF0aW9uRU5T
XzIwRHJhZ0FwcGxpY2F0aW9uRmxhZ3NFCiBfX1pON1dlYkNvcmU4RHJhZ0RhdGFDMUVSS04zV1RG
NlN0cmluZ0VSS05TXzhJbnRQb2ludEVTN19OU18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBw
bGljYXRpb25GbGFnc0UKK19fWk5LN1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE3ZXZlbnRNYXlTdGFy
dERyYWdFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKEVO
Q1JZUFRFRF9NRURJQV9WMikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9N
SFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhU
TUwubW0JKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMv
RE9NSFRNTC5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCAtIChET01Eb2N1bWVu
dEZyYWdtZW50ICopY3JlYXRlRG9jdW1lbnRGCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3Jl
YXRlRG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKICAgICAvLyBG
SVhNRTogU2luY2UgdGhpcyBpcyBub3QgYSBjb250ZXh0dWFsIGZyYWdtZW50LCBpdCB3b24ndCBo
YW5kbGUgd2hpdGVzcGFjZSBwcm9wZXJseS4KLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoY29yZShzZWxmKS0+Y3JlYXRlUmFuZ2UoKS5nZXQoKSwgdGV4dCkuZ2V0KCkpOwor
ICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqY29yZShzZWxmKS0+Y3JlYXRl
UmFuZ2UoKS5nZXQoKSwgdGV4dCkuZ2V0KCkpOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MCw4ICs0NDAsMTEgQEAgU3RyaW5n
IEVkaXRvcjo6cGxhaW5UZXh0RnJvbVBhc3RlYm9hcmQoYwogdm9pZCBFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCkK
IHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGlmICgh
cmFuZ2UpCisgICAgICAgIHJldHVybjsKKwogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRG
cmFnbWVudCgmbV9mcmFtZSwgcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7
CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9j
dW1lbnRGcmFnbWVudChtX2ZyYW1lLCAqcmFuZ2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWlu
VGV4dCk7CiAgICAgaWYgKGZyYWdtZW50ICYmIHNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50
LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdt
ZW50KGZyYWdtZW50LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCks
IGNob3NlUGxhaW5UZXh0KTsKIH0KQEAgLTQ5Myw3ICs0OTYsMTEgQEAgdm9pZCBFZGl0b3I6OnJl
cGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbgogCiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9v
bCBzbWFydFJlcGxhY2UpCiB7Ci0gICAgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgdGV4dCksIHNlbGVjdFJl
cGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIHRydWUpOyAKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpLCBzZWxlY3RSZXBsYWNlbWVudCwgc21hcnRSZXBsYWNlLCB0cnVlKTsKIH0K
IAogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3RlZFJhbmdlKCkKQEAgLTEwNjEsNyAr
MTA2OCw3IEBAIHZvaWQgRWRpdG9yOjpjdXQoKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNl
CiAgICAgICAgICAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1h
dGNoIE1hYyBhbmQgZGVsZXRlIHRoaXMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oc2VsZWN0aW9uLmdldCgpLCBjYW5TbWFy
dENvcHlPckRlbGV0ZSgpLCAmbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2Fy
ZCk7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3Jp
dGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CiAjZW5kaWYKICAgICAgICAgfQogICAg
ICAgICBkaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwpAQCAtMTA4NywxNCArMTA5NCwx
NCBAQCB2b2lkIEVkaXRvcjo6Y29weSgpCiAjaWYgKFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JN
KElPUykpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAgICAgIHdyaXRlSW1hZ2VUb1Bhc3RlYm9h
cmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLCAqaW1hZ2VFbGVtZW50LCBk
b2N1bWVudCgpLnVybCgpLCBkb2N1bWVudCgpLnRpdGxlKCkpOwogI2Vsc2UKLSAgICAgICAgICAg
IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZUltYWdlKGltYWdlRWxl
bWVudCwgZG9jdW1lbnQoKS51cmwoKSwgZG9jdW1lbnQoKS50aXRsZSgpKTsKKyAgICAgICAgICAg
IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZUltYWdlKCppbWFnZUVs
ZW1lbnQsIGRvY3VtZW50KCkudXJsKCksIGRvY3VtZW50KCkudGl0bGUoKSk7CiAjZW5kaWYKICAg
ICAgICAgfSBlbHNlIHsKICNpZiAoUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKSkgfHwg
UExBVEZPUk0oRUZMKQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBh
c3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAv
LyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNoIE1hYyBhbmQgZGVs
ZXRlIHRoaXMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUo
KS0+d3JpdGVTZWxlY3Rpb24oc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjYW5TbWFydENvcHlPckRl
bGV0ZSgpLCAmbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CisgICAg
ICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rp
b24oKnNlbGVjdGVkUmFuZ2UoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5j
bHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0K
QEAgLTExOTYsNyArMTIwMyw3IEBAIHZvaWQgRWRpdG9yOjpjb3B5SW1hZ2UoY29uc3QgSGl0VGVz
dFJlc3UKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEVGTCkKICAgICB3cml0ZUltYWdl
VG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKSwgKmVsZW1l
bnQsIHVybCwgcmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKSk7CiAjZWxzZQotICAgIFBhc3RlYm9h
cmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZUltYWdlKGVsZW1lbnQsIHVybCwgcmVz
dWx0LmFsdERpc3BsYXlTdHJpbmcoKSk7CisgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKCktPndyaXRlSW1hZ2UoKmVsZW1lbnQsIHVybCwgcmVzdWx0LmFsdERpc3BsYXlTdHJp
bmcoKSk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODcsNyArMTg3LDExIEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50
RnJhZ21lbnQKICAgICBpZiAodGV4dCAhPSBldnQtPnRleHQoKSB8fCAhZWRpdGFibGVSb290LT5y
ZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVz
dFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudChob2xkZXIuZ2V0KCkpOwogCi0gICAgICAgIG1fZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBldnQtPnRleHQoKSk7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dCgqcmFuZ2UsIGV2dC0+dGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJz
dENoaWxkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24g
MTU3MDQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTgsNyArOTgsMTAgQEAgdm9pZCBTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KAogICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5z
aG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dChtX3JhbmdlVG9CZUNvcnJlY3RlZC5nZXQoKSwgbV9jb3JyZWN0aW9u
KTsKKyAgICBpZiAoIW1fcmFuZ2VUb0JlQ29ycmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KCptX3JhbmdlVG9CZUNvcnJlY3RlZCwgbV9jb3JyZWN0aW9uKTsKICAgICBpZiAoIWZyYWdt
ZW50KQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJ
KHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzUyLDEyICs3NTIsOSBAQCBzdGF0aWMgYm9vbCBjb250ZXh0UHJl
c2VydmVzTmV3bGluZShjb25zCiAgICAgcmV0dXJuIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+cHJlc2VydmVOZXdsaW5lKCk7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0
ZXh0KQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0
KFJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgaWYgKCFjb250ZXh0
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNvbnRleHQt
Pm93bmVyRG9jdW1lbnQoKTsKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVy
RG9jdW1lbnQoKTsKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1
bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CiAgICAgCiAgICAgaWYgKHRleHQuaXNFbXB0
eSgpKQpAQCAtNzY3LDcgKzc2NCw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3Jl
YXRlRnJhZ20KICAgICBzdHJpbmcucmVwbGFjZSgiXHJcbiIsICJcbiIpOwogICAgIHN0cmluZy5y
ZXBsYWNlKCdccicsICdcbicpOwogCi0gICAgaWYgKGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKCpj
b250ZXh0KSkgeworICAgIGlmIChjb250ZXh0UHJlc2VydmVzTmV3bGluZShjb250ZXh0KSkgewog
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3Ry
aW5nKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgICAgIGlmIChzdHJpbmcuZW5kc1dpdGgo
J1xuJykpIHsKICAgICAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlQnJl
YWtFbGVtZW50KGRvY3VtZW50KTsKQEAgLTc4NCwxNCArNzgxLDE0IEBAIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICB9CiAKICAgICAvLyBCcmVhayBzdHJpbmcg
aW50byBwYXJhZ3JhcGhzLiBFeHRyYSBsaW5lIGJyZWFrcyB0dXJuIGludG8gZW1wdHkgcGFyYWdy
YXBocy4KLSAgICBOb2RlKiBibG9ja05vZGUgPSBlbmNsb3NpbmdCbG9jayhjb250ZXh0LT5maXJz
dE5vZGUoKSk7CisgICAgTm9kZSogYmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2soY29udGV4dC5m
aXJzdE5vZGUoKSk7CiAgICAgRWxlbWVudCogYmxvY2sgPSB0b0VsZW1lbnQoYmxvY2tOb2RlKTsK
ICAgICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9ja05vZGUKICAgICAgICAg
JiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdO
YW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZShodG1sVGFnKQotICAg
ICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjb250ZXh0LT5zdGFydFBv
c2l0aW9uKCkpOwotICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250
cm9sKGNvbnRleHQtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAgICYmIGJsb2NrICE9IGVkaXRh
YmxlUm9vdEZvclBvc2l0aW9uKGNvbnRleHQuc3RhcnRQb3NpdGlvbigpKTsKKyAgICBib29sIHVz
ZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChjb250ZXh0LnN0YXJ0UG9zaXRp
b24oKSk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0OwogICAgIHN0cmluZy5zcGxpdCgnXG4n
LCB0cnVlLCBsaXN0KTsgLy8gdHJ1ZSBnZXRzIHVzIGVtcHR5IHN0cmluZ3MgaW4gdGhlIGxpc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAkocmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBA
QCBlbnVtIEVDaGlsZHJlbk9ubHkgeyBJbmNsdWRlTm9kZSwgQ2hpbGRyCiBlbnVtIEVBYnNvbHV0
ZVVSTHMgeyBEb05vdFJlc29sdmVVUkxzLCBSZXNvbHZlQWxsVVJMcywgUmVzb2x2ZU5vbkxvY2Fs
VVJMcyB9OwogZW51bSBFRnJhZ21lbnRTZXJpYWxpemF0aW9uIHsgSFRNTEZyYWdtZW50U2VyaWFs
aXphdGlvbiwgWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uIH07CiAKLVBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50Jiwg
Y29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVu
dFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiBQYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRWxl
bWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ksIEV4Y2VwdGlvbkNvZGUmKTsKIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRw
dXREb2MpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2
aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyArNTY0LDcgQEAgYm9vbCBFZGl0b3I6OldlYkNvbnRl
bnRSZWFkZXI6OnJlYWRQbGFpbgogICAgIGlmICghYWxsb3dQbGFpblRleHQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgmY29u
dGV4dCwgW3RleHQgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pOworICAg
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBbdGV4dCBwcmVjb21w
b3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSk7CiAgICAgaWYgKCFmcmFnbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1
dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlw
ZS5jcHAJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMywxMCArNDMzLDEwIEBAIHZvaWQgRmlsZUlu
cHV0VHlwZTo6dXBkYXRlUmVuZGVyaW5nKFBhc3MKICAgICAgICAgZWxlbWVudCgpLnJlbmRlcmVy
KCktPnJlcGFpbnQoKTsKIH0KIAotYm9vbCBGaWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZp
bGVzKGNvbnN0IERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRmlsZUlucHV0VHlwZTo6cmVjZWl2
ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgVmVjdG9yPFN0
cmluZz4gcGF0aHM7Ci0gICAgZHJhZ0RhdGEtPmFzRmlsZW5hbWVzKHBhdGhzKTsKKyAgICBkcmFn
RGF0YS5hc0ZpbGVuYW1lcyhwYXRocyk7CiAgICAgaWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAko
cmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgY2FuU2V0VmFsdWUoY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29s
IGdldFR5cGVTcGVjaWZpY1ZhbHVlKFN0cmluZyYpIE9WRVJSSURFOyAvLyBDaGVja2VkIGZpcnN0
LCBiZWZvcmUgaW50ZXJuYWwgc3RvcmFnZSBvciB0aGUgdmFsdWUgYXR0cmlidXRlLgogICAgIHZp
cnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4
dEZpZWxkRXZlbnRCZWhhdmlvcikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHJlY2VpdmVE
cm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYpIE9WRVJSSURFOwogICAgIHZpcnR1
YWwgSWNvbiogaWNvbigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVV
cGxvYWQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3Vi
dHJlZSgpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU3LDcgKzEzNTcsNyBAQCB2b2lkIEhU
TUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVzKFBhc3NSZWZQCiAgICAgbV9pbnB1dFR5cGUtPnNldEZp
bGVzKGZpbGVzKTsKIH0KIAotYm9vbCBIVE1MSW5wdXRFbGVtZW50OjpyZWNlaXZlRHJvcHBlZEZp
bGVzKGNvbnN0IERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6cmVj
ZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgcmV0dXJu
IG1faW5wdXRUeXBlLT5yZWNlaXZlRHJvcHBlZEZpbGVzKGRyYWdEYXRhKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiAxNTcwNDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQzLDcgKzI0Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEZpbGVzKFBhc3NSZWZQdHI8Rmls
ZUxpc3Q+KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gRHJhZ0RhdGEgaGFz
IG1vcmUgdGhhbiBvbmUgZHJvcHBlZCBmaWxlcy4KLSAgICBib29sIHJlY2VpdmVEcm9wcGVkRmls
ZXMoY29uc3QgRHJhZ0RhdGEqKTsKKyAgICBib29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3Qg
RHJhZ0RhdGEmKTsKIAogICAgIEljb24qIGljb24oKSBjb25zdDsKICAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgaW5wdXQgYWN0aXZlIGR1cmluZyBhCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNSw3ICs3
MDUsNyBAQCBTdHJpbmcgSW5wdXRUeXBlOjpzYW5pdGl6ZVZhbHVlKGNvbnN0IFN0CiAgICAgcmV0
dXJuIHByb3Bvc2VkVmFsdWU7CiB9CiAKLWJvb2wgSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZp
bGVzKGNvbnN0IERyYWdEYXRhKikKK2Jvb2wgSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVz
KGNvbnN0IERyYWdEYXRhJikKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NzA0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
OSw3ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGaWxlTGlzdCogZmlsZXMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0RmlsZXMoUGFzc1JlZlB0cjxGaWxlTGlzdD4pOwogICAgIC8vIFNo
b3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gRHJhZ0RhdGEgaGFzIG1vcmUgdGhhbiBvbmUg
ZHJvcHBlZCBmaWxlcy4KLSAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25z
dCBEcmFnRGF0YSopOworICAgIHZpcnR1YWwgYm9vbCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0
IERyYWdEYXRhJik7CiAgICAgdmlydHVhbCBJY29uKiBpY29uKCkgY29uc3Q7CiAgICAgLy8gU2hv
dWxkIHJldHVybiB0cnVlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHJlbmRlcmVyIGZvciBhIHR5cGUg
Y2FuIGRpc3BsYXkgYSBzdWdnZXN0ZWQgdmFsdWUuCiAgICAgdmlydHVhbCBib29sIGNhblNldFN1
Z2dlc3RlZFZhbHVlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShy
ZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzMywxMSArNTMzLDExIEBAIGNsYXNzIEVtcHR5RHJhZ0NsaWVu
dCA6IHB1YmxpYyBEcmFnQ2xpZW4KIHB1YmxpYzoKICAgICBFbXB0eURyYWdDbGllbnQoKSB7IH0K
ICAgICB2aXJ0dWFsIH5FbXB0eURyYWdDbGllbnQoKSB7fQotICAgIHZpcnR1YWwgdm9pZCB3aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdE
YXRhKikgT1ZFUlJJREUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJj
ZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopIE9W
RVJSSURFIHsgfQotICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKERyYWdEYXRhKikgT1ZFUlJJREUgeyByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
Tm9uZTsgfQorICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhJikgT1ZFUlJJREUgeyB9CisgICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBj
b25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhJikgT1ZFUlJJREUg
eyByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZTsgfQogICAgIHZpcnR1YWwgRHJhZ1Nv
dXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50Jikg
T1ZFUlJJREUgeyByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbk5vbmU7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2lu
dCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9p
bnQmLCBDbGlwYm9hcmQmLCBGcmFtZSYsIGJvb2wpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpIE9WRVJSSURFIHsgfQogfTsKICNlbmRpZiAv
LyBFTkFCTEUoRFJBR19TVVBQT1JUKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ2xpZW50LmgJKHJl
dmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NsaWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw0NCArMzEsMzYgQEAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNp
bmNsdWRlICJJbnRQb2ludC5oIgogCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBET01F
bGVtZW50OwotT0JKQ19DTEFTUyBOU1VSTDsKLU9CSkNfQ0xBU1MgTlNTdHJpbmc7Ci0jZW5kaWYK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIENsaXBib2FyZDsKLSAgICBj
bGFzcyBEcmFnRGF0YTsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBJbWFnZTsKLSAgICBj
bGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xhc3MgQ2xpcGJvYXJkOworY2xhc3MgRHJhZ0RhdGE7
CitjbGFzcyBFbGVtZW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBJbWFnZTsKKworY2xhc3MgRHJh
Z0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJv
eWVkKCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25z
dCBJbnRQb2ludCYsIENsaXBib2FyZCYpID0gMDsKKyAgICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlv
bkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIERy
YWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2lu
dCYgcm9vdFZpZXdQb2ludCkgPSAwOwogICAgIAotICAgIGNsYXNzIERyYWdDbGllbnQgewotICAg
IHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKSA9IDA7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwg
Y29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikgPSAwOwotCi0gICAg
ICAgIHZpcnR1YWwgRHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50
KGNvbnN0IEludFBvaW50JiByb290Vmlld1BvaW50KSA9IDA7Ci0gICAgICAgIAotICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBv
aW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJk
KiwgRnJhbWUqLCBib29sIGxpbmtEcmFnID0gZmFsc2UpID0gMDsKLSAgICAgICAgCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9y
aWdpbiwgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQmLCBGcmFtZSYsIGJvb2wg
bGlua0RyYWcgPSBmYWxzZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmFnRW5kZWQoKSB7IH0K
IAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgLy8gTWFjLXNwZWNpZmljIGhlbHBlciBmdW5j
dGlvbiB0byBhbGxvdyBhY2Nlc3MgdG8gd2ViIGFyY2hpdmVzIGFuZCBOU1Bhc3RlYm9hcmQgZXh0
cmFzIGluIFdlYktpdC4KLSAgICAgICAgLy8gVGhpcyBpcyBub3QgYWJzdHJhY3QgYXMgdGhhdCB3
b3VsZCByZXF1aXJlIGFub3RoZXIgI2lmIFBMQVRGT1JNKE1BQykgZm9yIHRoZSBTVkdJbWFnZSBj
bGllbnQgZW1wdHkgaW1wbGVudGF0aW9uLgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFu
ZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYsIERPTUVsZW1lbnQqLCBOU1VSTCAqLCBOU1N0
cmluZyAqLCBGcmFtZSopIHsgfQorICAgIC8vIE1hYy1zcGVjaWZpYyBoZWxwZXIgZnVuY3Rpb24g
dG8gYWxsb3cgYWNjZXNzIHRvIHdlYiBhcmNoaXZlcyBhbmQgTlNQYXN0ZWJvYXJkIGV4dHJhcyBp
biBXZWJLaXQuCisgICAgLy8gVGhpcyBpcyBub3QgYWJzdHJhY3QgYXMgdGhhdCB3b3VsZCByZXF1
aXJlIGFub3RoZXIgI2lmIFBMQVRGT1JNKE1BQykgZm9yIHRoZSBTVkdJbWFnZSBjbGllbnQgZW1w
dHkgaW1wbGVudGF0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1h
Z2UoY29uc3QgU3RyaW5nJiwgRWxlbWVudCYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYsIEZy
YW1lKikgeyB9CiAjZW5kaWYKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmFnRW5k
ZWQoKSB7IH0KIAotICAgICAgICB2aXJ0dWFsIH5EcmFnQ2xpZW50KCkgeyB9Ci0gICAgfTsKKyAg
ICB2aXJ0dWFsIH5EcmFnQ2xpZW50KCkgeyB9Cit9OwogICAgIAotfQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gIURyYWdDbGllbnRfaAorI2VuZGlmIC8vIERyYWdDbGllbnRf
aAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTU3MDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDE3ICs4MywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3JlYXRlTW91c2VFdmVudChEcmFnRGF0YSogZHJhZ0Rh
dGEpCitzdGF0aWMgUGxhdGZvcm1Nb3VzZUV2ZW50IGNyZWF0ZU1vdXNlRXZlbnQoRHJhZ0RhdGEm
IGRyYWdEYXRhKQogewogICAgIGJvb2wgc2hpZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtl
eTsKICAgICBzaGlmdEtleSA9IGN0cmxLZXkgPSBhbHRLZXkgPSBtZXRhS2V5ID0gZmFsc2U7Ci0g
ICAgaW50IGtleVN0YXRlID0gZHJhZ0RhdGEtPm1vZGlmaWVyS2V5U3RhdGUoKTsKKyAgICBpbnQg
a2V5U3RhdGUgPSBkcmFnRGF0YS5tb2RpZmllcktleVN0YXRlKCk7CiAgICAgc2hpZnRLZXkgPSBz
dGF0aWNfY2FzdDxib29sPihrZXlTdGF0ZSAmIFBsYXRmb3JtRXZlbnQ6OlNoaWZ0S2V5KTsKICAg
ICBjdHJsS2V5ID0gc3RhdGljX2Nhc3Q8Ym9vbD4oa2V5U3RhdGUgJiBQbGF0Zm9ybUV2ZW50OjpD
dHJsS2V5KTsKICAgICBhbHRLZXkgPSBzdGF0aWNfY2FzdDxib29sPihrZXlTdGF0ZSAmIFBsYXRm
b3JtRXZlbnQ6OkFsdEtleSk7CiAgICAgbWV0YUtleSA9IHN0YXRpY19jYXN0PGJvb2w+KGtleVN0
YXRlICYgUGxhdGZvcm1FdmVudDo6TWV0YUtleSk7CiAKLSAgICByZXR1cm4gUGxhdGZvcm1Nb3Vz
ZUV2ZW50KGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0YS0+Z2xvYmFsUG9zaXRp
b24oKSwKKyAgICByZXR1cm4gUGxhdGZvcm1Nb3VzZUV2ZW50KGRyYWdEYXRhLmNsaWVudFBvc2l0
aW9uKCksIGRyYWdEYXRhLmdsb2JhbFBvc2l0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50OjpNb3VzZU1vdmVkLCAwLCBzaGlmdEtl
eSwgY3RybEtleSwgYWx0S2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUtl
eSwgY3VycmVudFRpbWUoKSk7CiB9CkBAIC0xMTcsMjYgKzExNywyNSBAQCBEcmFnQ29udHJvbGxl
cjo6fkRyYWdDb250cm9sbGVyKCkKICAgICBtX2NsaWVudC5kcmFnQ29udHJvbGxlckRlc3Ryb3ll
ZCgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZy
YWdtZW50RnJvbURyYWdEYXRhKERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lLCBQYXNz
UmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBs
YWluVGV4dCkKK3N0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJh
Z21lbnRGcm9tRHJhZ0RhdGEoRHJhZ0RhdGEmIGRyYWdEYXRhLCBGcmFtZSogZnJhbWUsIFJhbmdl
JiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsK
LSAgICBBU1NFUlQoZHJhZ0RhdGEpOwogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAKLSAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0LT5vd25lckRvY3VtZW50KCk7Ci0gICAgaWYg
KGRyYWdEYXRhLT5jb250YWluc0NvbXBhdGlibGVDb250ZW50KCkpIHsKLSAgICAgICAgaWYgKFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkcmFnRGF0YS0+YXNGcmFnbWVu
dChmcmFtZSwgY29udGV4dC5nZXQoKSwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KSkK
KyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKKyAgICBp
ZiAoZHJhZ0RhdGEuY29udGFpbnNDb21wYXRpYmxlQ29udGVudCgpKSB7CisgICAgICAgIGlmIChQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZHJhZ0RhdGEuYXNGcmFnbWVu
dChmcmFtZSwgY29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KSkKICAgICAg
ICAgICAgIHJldHVybiBmcmFnbWVudDsKIAotICAgICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5z
VVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5hbWVzKSkgeworICAgICAgICBp
ZiAoZHJhZ0RhdGEuY29udGFpbnNVUkwoZnJhbWUsIERyYWdEYXRhOjpEb05vdENvbnZlcnRGaWxl
bmFtZXMpKSB7CiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7Ci0gICAgICAgICAgICBTdHJpbmcg
dXJsID0gZHJhZ0RhdGEtPmFzVVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5h
bWVzLCAmdGl0bGUpOworICAgICAgICAgICAgU3RyaW5nIHVybCA9IGRyYWdEYXRhLmFzVVJMKGZy
YW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5hbWVzLCAmdGl0bGUpOwogICAgICAgICAg
ICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNo
b3JFbGVtZW50PiBhbmNob3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsK
ICAgICAgICAgICAgICAgICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBp
ZiAodGl0bGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0aGUgcGxh
aW4gdGV4dCBmaXJzdCBiZWNhdXNlIHRoZSB1cmwgbWlnaHQgYmUgbm9ybWFsaXplZCBvciBlc2Nh
cGVkLgotICAgICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zUGxhaW5UZXh0
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IGRyYWdEYXRhLT5hc1BsYWluVGV4
dChmcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS5jb250YWluc1BsYWlu
VGV4dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBkcmFnRGF0YS5hc1BsYWlu
VGV4dChmcmFtZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHVybDsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNDgsMTUgKzE0NywxNSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBk
b2N1CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGFsbG93UGxhaW5U
ZXh0ICYmIGRyYWdEYXRhLT5jb250YWluc1BsYWluVGV4dCgpKSB7CisgICAgaWYgKGFsbG93UGxh
aW5UZXh0ICYmIGRyYWdEYXRhLmNvbnRhaW5zUGxhaW5UZXh0KCkpIHsKICAgICAgICAgY2hvc2VQ
bGFpblRleHQgPSB0cnVlOwotICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChj
b250ZXh0LmdldCgpLCBkcmFnRGF0YS0+YXNQbGFpblRleHQoZnJhbWUpKS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dCwgZHJhZ0RhdGEuYXNQbGFp
blRleHQoZnJhbWUpKS5nZXQoKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBE
cmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBEcmFn
RGF0YSogZHJhZ0RhdGEpCitib29sIERyYWdDb250cm9sbGVyOjpkcmFnSXNNb3ZlKEZyYW1lU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICByZXR1cm4gbV9k
b2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHNlbGVjdGlvbi5pc0NvbnRl
bnRFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIWlzQ29weUtleURvd24oZHJh
Z0RhdGEpOwogfQpAQCAtMTc2LDE5ICsxNzUsMTcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZHJh
Z0VuZGVkKCkKICAgICBtX2NsaWVudC5kcmFnRW5kZWQoKTsKIH0KIAotRHJhZ1Nlc3Npb24gRHJh
Z0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdTZXNzaW9u
IERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJlZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAg
cmV0dXJuIGRyYWdFbnRlcmVkT3JVcGRhdGVkKGRyYWdEYXRhKTsKIH0KIAotdm9pZCBEcmFnQ29u
dHJvbGxlcjo6ZHJhZ0V4aXRlZChEcmFnRGF0YSogZHJhZ0RhdGEpCit2b2lkIERyYWdDb250cm9s
bGVyOjpkcmFnRXhpdGVkKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0Rh
dGEpOwotCiAgICAgaWYgKFJlZlB0cjxGcmFtZVZpZXc+IHYgPSBtX3BhZ2UubWFpbkZyYW1lKCku
dmlldygpKSB7CiAgICAgICAgIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kgPSAoIW1fZG9j
dW1lbnRVbmRlck1vdXNlIHx8IG1fZG9jdW1lbnRVbmRlck1vdXNlLT5zZWN1cml0eU9yaWdpbigp
LT5pc0xvY2FsKCkpID8gQ2xpcGJvYXJkUmVhZGFibGUgOiBDbGlwYm9hcmRUeXBlc1JlYWRhYmxl
OwotICAgICAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBDbGlwYm9hcmQ6OmNyZWF0
ZUZvckRyYWdBbmREcm9wKHBvbGljeSwgKmRyYWdEYXRhKTsKLSAgICAgICAgY2xpcGJvYXJkLT5z
ZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygp
KTsKKyAgICAgICAgUmVmUHRyPENsaXBib2FyZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpjcmVh
dGVGb3JEcmFnQW5kRHJvcChwb2xpY3ksIGRyYWdEYXRhKTsKKyAgICAgICAgY2xpcGJvYXJkLT5z
ZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkp
OwogICAgICAgICBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0Fu
ZERyb3AoY3JlYXRlTW91c2VFdmVudChkcmFnRGF0YSksIGNsaXBib2FyZC5nZXQoKSk7CiAgICAg
ICAgIGNsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5KENsaXBib2FyZE51bWIpOyAgICAvLyBpbnZh
bGlkYXRlIGNsaXBib2FyZCBoZXJlIGZvciBzZWN1cml0eQogICAgIH0KQEAgLTE5OCwyMyArMTk1
LDIyIEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRyYWdFeGl0ZWQoRHJhZ0RhdGEKICAgICBtX2Zp
bGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlID0gMDsKIH0KIAotRHJhZ1Nlc3Npb24gRHJhZ0NvbnRy
b2xsZXI6OmRyYWdVcGRhdGVkKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdTZXNzaW9uIERyYWdD
b250cm9sbGVyOjpkcmFnVXBkYXRlZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgcmV0dXJu
IGRyYWdFbnRlcmVkT3JVcGRhdGVkKGRyYWdEYXRhKTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxl
cjo6cGVyZm9ybURyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6
cGVyZm9ybURyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFnRGF0YSk7
Ci0gICAgbV9kb2N1bWVudFVuZGVyTW91c2UgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRB
dFBvaW50KGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKTsKKyAgICBtX2RvY3VtZW50VW5kZXJN
b3VzZSA9IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudEF0UG9pbnQoZHJhZ0RhdGEuY2xpZW50
UG9zaXRpb24oKSk7CiAgICAgaWYgKChtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiAmIERyYWdEZXN0
aW5hdGlvbkFjdGlvbkRIVE1MKSAmJiBtX2RvY3VtZW50SXNIYW5kbGluZ0RyYWcpIHsKICAgICAg
ICAgbV9jbGllbnQud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uREhUTUwsIGRyYWdEYXRhKTsKICAgICAgICAgUmVmPE1haW5GcmFtZT4gbWFpbkZy
YW1lKG1fcGFnZS5tYWluRnJhbWUoKSk7CiAgICAgICAgIGJvb2wgcHJldmVudGVkRGVmYXVsdCA9
IGZhbHNlOwogICAgICAgICBpZiAobWFpbkZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgICAgIC8v
IFNlbmRpbmcgYW4gZXZlbnQgY2FuIHJlc3VsdCBpbiB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHZp
ZXcgYW5kIHBhcnQuCi0gICAgICAgICAgICBSZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBD
bGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKENsaXBib2FyZFJlYWRhYmxlLCAqZHJhZ0Rh
dGEpOwotICAgICAgICAgICAgY2xpcGJvYXJkLT5zZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEt
PmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsKKyAgICAgICAgICAgIFJlZlB0cjxDbGlw
Ym9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoQ2xpcGJv
YXJkUmVhZGFibGUsIGRyYWdEYXRhKTsKKyAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0U291cmNl
T3BlcmF0aW9uKGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsKICAgICAg
ICAgICAgIHByZXZlbnRlZERlZmF1bHQgPSBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLnBlcmZv
cm1EcmFnQW5kRHJvcChjcmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKSwgY2xpcGJvYXJkLmdldCgp
KTsKICAgICAgICAgICAgIGNsaXBib2FyZC0+c2V0QWNjZXNzUG9saWN5KENsaXBib2FyZE51bWIp
OyAvLyBJbnZhbGlkYXRlIGNsaXBib2FyZCBoZXJlIGZvciBzZWN1cml0eQogICAgICAgICB9CkBA
IC0yMzUsNyArMjMxLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWcoRHJhZ0Rh
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdE
ZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25Mb2FkLCBkcmFnRGF0YSk7Ci0g
ICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWQoRnJhbWVMb2FkUmVxdWVzdCgmbV9w
YWdlLm1haW5GcmFtZSgpLCBSZXNvdXJjZVJlcXVlc3QoZHJhZ0RhdGEtPmFzVVJMKCZtX3BhZ2Uu
bWFpbkZyYW1lKCkpKSkpOworICAgIG1fcGFnZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKEZy
YW1lTG9hZFJlcXVlc3QoJm1fcGFnZS5tYWluRnJhbWUoKSwgUmVzb3VyY2VSZXF1ZXN0KGRyYWdE
YXRhLmFzVVJMKCZtX3BhZ2UubWFpbkZyYW1lKCkpKSkpOwogICAgIHJldHVybiB0cnVlOwogfQog
CkBAIC0yNTAsMTAgKzI0Niw5IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbnRv
RG9jdW0KICAgICBtX2RvY3VtZW50VW5kZXJNb3VzZSA9IG5ld0RvY3VtZW50OwogfQogCi1EcmFn
U2Vzc2lvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ0VudGVyZWRPclVwZGF0ZWQoRHJhZ0RhdGEqIGRy
YWdEYXRhKQorRHJhZ1Nlc3Npb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVk
KERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotICAgIG1vdXNl
TW92ZWRJbnRvRG9jdW1lbnQobV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQb2ludChkcmFn
RGF0YS0+Y2xpZW50UG9zaXRpb24oKSkpOworICAgIG1vdXNlTW92ZWRJbnRvRG9jdW1lbnQobV9w
YWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQb2ludChkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigp
KSk7CiAKICAgICBtX2RyYWdEZXN0aW5hdGlvbkFjdGlvbiA9IG1fY2xpZW50LmFjdGlvbk1hc2tG
b3JEcmFnKGRyYWdEYXRhKTsKICAgICBpZiAobV9kcmFnRGVzdGluYXRpb25BY3Rpb24gPT0gRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSkgewpAQCAtMzAxLDEwICsyOTYsOCBAQCBzdGF0aWMgRWxl
bWVudCogZWxlbWVudFVuZGVyTW91c2UoRG9jdW1lCiAgICAgcmV0dXJuIHRvRWxlbWVudChuKTsK
IH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKERyYWdEYXRhKiBkcmFn
RGF0YSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2ssIERyYWdTZXNzaW9uJiBkcmFn
U2Vzc2lvbikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OnRyeURvY3VtZW50RHJhZyhEcmFnRGF0YSYg
ZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrLCBEcmFnU2Vzc2lvbiYg
ZHJhZ1Nlc3Npb24pCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKLQogICAgIGlmICghbV9kb2N1
bWVudFVuZGVyTW91c2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzM1LDEyICszMjgs
MTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6dHJ5RG9jdW1lbnREcmFnKERyYQogICAgIH0KIAog
ICAgIGlmICgoYWN0aW9uTWFzayAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYmIGNhblBy
b2Nlc3NEcmFnKGRyYWdEYXRhKSkgewotICAgICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zQ29s
b3IoKSkgeworICAgICAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNDb2xvcigpKSB7CiAgICAgICAg
ICAgICBkcmFnU2Vzc2lvbi5vcGVyYXRpb24gPSBEcmFnT3BlcmF0aW9uR2VuZXJpYzsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgSW50UG9pbnQgcG9pbnQg
PSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkp
OworICAgICAgICBJbnRQb2ludCBwb2ludCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhk
cmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRVbmRlck1vdXNlKG1fZG9jdW1lbnRVbmRlck1vdXNlLmdldCgpLCBwb2ludCk7CiAgICAg
ICAgIGlmICghZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MCw3ICsz
NTMsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjp0cnlEb2N1bWVudERyYWcoRHJhCiAgICAgICAg
IGRyYWdTZXNzaW9uLm1vdXNlSXNPdmVyRmlsZUlucHV0ID0gbV9maWxlSW5wdXRFbGVtZW50VW5k
ZXJNb3VzZTsKICAgICAgICAgZHJhZ1Nlc3Npb24ubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZCA9
IDA7CiAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZGaWxlcyA9IGRyYWdEYXRhLT5udW1iZXJP
ZkZpbGVzKCk7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mRmlsZXMgPSBkcmFnRGF0YS5udW1i
ZXJPZkZpbGVzKCk7CiAgICAgICAgIGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKSB7
CiAgICAgICAgICAgICBpZiAobV9maWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZS0+aXNEaXNhYmxl
ZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAgICAgICAgZHJhZ1Nlc3Npb24ubnVtYmVyT2ZJdGVt
c1RvQmVBY2NlcHRlZCA9IDA7CkBAIC0zOTcsMTAgKzM5MCw5IEBAIERyYWdTb3VyY2VBY3Rpb24g
RHJhZ0NvbnRyb2xsZXI6OmRlbGVnYXQKICAgICByZXR1cm4gbV9kcmFnU291cmNlQWN0aW9uOwog
fQogCi1EcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKERyYWdE
YXRhKiBkcmFnRGF0YSkKK0RyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZv
ckxvYWQoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIEFTU0VSVChkcmFnRGF0YSk7Ci0gICAg
RG9jdW1lbnQqIGRvYyA9IG1fcGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudEF0UG9pbnQoZHJhZ0Rh
dGEtPmNsaWVudFBvc2l0aW9uKCkpOworICAgIERvY3VtZW50KiBkb2MgPSBtX3BhZ2UubWFpbkZy
YW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpOwogCiAgICAg
Ym9vbCBwbHVnaW5Eb2N1bWVudEFjY2VwdHNEcmFncyA9IGZhbHNlOwogCkBAIC00MjgsMTggKzQy
MCwxNiBAQCBzdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtCiAgICAgcmV0
dXJuICFmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLmlz
Q29udGVudEVkaXRhYmxlKCk7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNoVGV4
dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVyRnJhbWUsIERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jv
b2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVy
RnJhbWUsIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICBBU1NFUlQobV9wYWdlLmRyYWdDYXJl
dENvbnRyb2xsZXIoKS5oYXNDYXJldCgpKTsKLSAgICBTdHJpbmcgdGV4dCA9IG1fcGFnZS5kcmFn
Q2FyZXRDb250cm9sbGVyKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSA/ICIiIDogZHJhZ0Rh
dGEtPmFzUGxhaW5UZXh0KGlubmVyRnJhbWUpOworICAgIFN0cmluZyB0ZXh0ID0gbV9wYWdlLmRy
YWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpID8gZW1wdHlTdHJp
bmcoKSA6IGRyYWdEYXRhLmFzUGxhaW5UZXh0KGlubmVyRnJhbWUpOwogICAgIE5vZGUqIHRhcmdl
dCA9IGlubmVyRnJhbWUtPmVkaXRvcigpLmZpbmRFdmVudFRhcmdldEZyb20obV9wYWdlLmRyYWdD
YXJldENvbnRyb2xsZXIoKS5jYXJldFBvc2l0aW9uKCkpOwogICAgIHJldHVybiB0YXJnZXQtPmRp
c3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVhdGVGb3JEcm9wKGlubmVyRnJhbWUtPmRvY3VtZW50
KCktPmRvbVdpbmRvdygpLCB0ZXh0KSwgSUdOT1JFX0VYQ0VQVElPTik7CiB9CiAKLWJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQorYm9vbCBE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0g
ICAgQVNTRVJUKGRyYWdEYXRhKTsKLQogICAgIFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBmaWxl
SW5wdXQgPSBtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlOwogICAgIGlmIChtX2ZpbGVJbnB1
dEVsZW1lbnRVbmRlck1vdXNlKSB7CiAgICAgICAgIG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91
c2UtPnNldENhblJlY2VpdmVEcm9wcGVkRmlsZXMoZmFsc2UpOwpAQCAtNDQ5LDcgKzQzOSw3IEBA
IGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICBpZiAoIW1fZG9j
dW1lbnRVbmRlck1vdXNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRQb2ludCBw
b2ludCA9IG1fZG9jdW1lbnRVbmRlck1vdXNlLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZHJh
Z0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOworICAgIEludFBvaW50IHBvaW50ID0gbV9kb2N1bWVu
dFVuZGVyTW91c2UtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFnRGF0YS5jbGllbnRQb3Np
dGlvbigpKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudFVuZGVyTW91c2UobV9kb2N1
bWVudFVuZGVyTW91c2UuZ2V0KCksIHBvaW50KTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTQ1OSw4ICs0NDksOCBAQCBib29sIERyYWdDb250cm9sbGVyOjpj
b25jbHVkZUVkaXREcmFnKERyCiAgICAgaWYgKG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCku
aGFzQ2FyZXQoKSAmJiAhZGlzcGF0Y2hUZXh0SW5wdXRFdmVudEZvcihpbm5lckZyYW1lLmdldCgp
LCBkcmFnRGF0YSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKGRyYWdEYXRhLT5j
b250YWluc0NvbG9yKCkpIHsKLSAgICAgICAgQ29sb3IgY29sb3IgPSBkcmFnRGF0YS0+YXNDb2xv
cigpOworICAgIGlmIChkcmFnRGF0YS5jb250YWluc0NvbG9yKCkpIHsKKyAgICAgICAgQ29sb3Ig
Y29sb3IgPSBkcmFnRGF0YS5hc0NvbG9yKCk7CiAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGlubmVy
UmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwpAQCAt
NDczLDcgKzQ2Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGRyYWdEYXRhLT5jb250YWlu
c0ZpbGVzKCkgJiYgZmlsZUlucHV0KSB7CisgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMo
KSAmJiBmaWxlSW5wdXQpIHsKICAgICAgICAgLy8gZmlsZUlucHV0IHNob3VsZCBiZSB0aGUgZWxl
bWVudCB3ZSBoaXQgdGVzdGVkIGZvciwgdW5sZXNzIGl0IHdhcyBtYWRlCiAgICAgICAgIC8vIGRp
c3BsYXk6bm9uZSBpbiBhIGRyb3AgZXZlbnQgaGFuZGxlci4KICAgICAgICAgQVNTRVJUKGZpbGVJ
bnB1dCA9PSBlbGVtZW50IHx8ICFmaWxlSW5wdXQtPnJlbmRlcmVyKCkpOwpAQCAtNDk3LDExICs0
ODcsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgIC8v
IG1hbnVhbGx5IGNvbnRyb2xsaW5nIGRyYWcgYmVoYXZpb3VyCiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQ2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJl
c291cmNlTG9hZGVyID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpOwogICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3Vw
cHJlc3NvcihjYWNoZWRSZXNvdXJjZUxvYWRlcik7CiAgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJG
cmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRhKSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7Ci0gICAg
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRG
cm9tRHJhZ0RhdGEoZHJhZ0RhdGEsIGlubmVyRnJhbWUuZ2V0KCksIHJhbmdlLCB0cnVlLCBjaG9z
ZVBsYWluVGV4dCk7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsIGlubmVyRnJhbWUuZ2V0KCks
ICpyYW5nZSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOwogICAgICAgICBpZiAoIWZyYWdtZW50IHx8
ICFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFu
Z2UsIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KQEAgLTUxMSwxMiArNTAyLDEyIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgICAgIC8vIE5TVGV4dFZpZXcgYmVoYXZpb3Ig
aXMgdG8gYWx3YXlzIHNtYXJ0IGRlbGV0ZSBvbiBtb3ZpbmcgYSBzZWxlY3Rpb24sCiAgICAgICAg
ICAgICAvLyBidXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYgdGhlIHNlbGVjdGlvbiBncmFudWxh
cml0eSBpcyB3b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAgICAgYm9vbCBzbWFydERlbGV0ZSA9
IGlubmVyRnJhbWUtPmVkaXRvcigpLnNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwotICAgICAg
ICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0RGVsZXRlICYmIGlubmVyRnJhbWUtPnNlbGVj
dGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5ICYmIGRyYWdEYXRhLT5jYW5T
bWFydFJlcGxhY2UoKTsKKyAgICAgICAgICAgIGJvb2wgc21hcnRJbnNlcnQgPSBzbWFydERlbGV0
ZSAmJiBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxh
cml0eSAmJiBkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKTsKICAgICAgICAgICAgIGFwcGx5Q29t
bWFuZChNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGZyYWdtZW50LCBkcmFnQ2FyZXQuYmFz
ZSgpLCBzbWFydEluc2VydCwgc21hcnREZWxldGUpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFn
Q2FyZXQsIHJhbmdlLCBwb2ludCkpIHsKICAgICAgICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpTZWxlY3RSZXBsYWNlbWVudCB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVz
dGluZzsKLSAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEtPmNhblNtYXJ0UmVwbGFjZSgpKQor
ICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKSkKICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBs
YWNlOwogICAgICAgICAgICAgICAgIGlmIChjaG9zZVBsYWluVGV4dCkKICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZTsKQEAg
LTUyNCwxNCArNTE1LDE0IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
RHIKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmlu
ZyB0ZXh0ID0gZHJhZ0RhdGEtPmFzUGxhaW5UZXh0KGlubmVyRnJhbWUuZ2V0KCkpOworICAgICAg
ICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KGlubmVyRnJhbWUuZ2V0KCkpOwog
ICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3Vs
ZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQp
KSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAogICAgICAgICBtX2Ns
aWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rp
b25FZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChp
bm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpCi0gICAgICAgICAgICBh
cHBseUNvbW1hbmQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1bWVudFVu
ZGVyTW91c2UsIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFuZ2UuZ2V0KCksIHRleHQpLCAgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5l
c3RpbmcpKTsKKyAgICAgICAgICAgIGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpLCAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50
IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6UHJldmVudE5lc3RpbmcpKTsKICAgICB9CiAKICAgICBpZiAocm9vdEVkaXRhYmxl
RWxlbWVudCkgewpAQCAtNTQyLDE0ICs1MzMsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29u
Y2x1ZGVFZGl0RHJhZyhEcgogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIERyYWdDb250cm9s
bGVyOjpjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIERyYWdDb250cm9s
bGVyOjpjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNTRVJUKGRy
YWdEYXRhKTsKLQotICAgIGlmICghZHJhZ0RhdGEtPmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQo
KSkKKyAgICBpZiAoIWRyYWdEYXRhLmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50UG9pbnQgcG9pbnQgPSBtX3BhZ2UubWFpbkZyYW1l
KCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRzKGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKTsK
KyAgICBJbnRQb2ludCBwb2ludCA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1Rv
Q29udGVudHMoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSk7CiAgICAgSGl0VGVzdFJlc3VsdCBy
ZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHBvaW50KTsKICAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUo
KS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU5LDcgKzU0
OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNhblByb2Nlc3NEcmFnKERyYWcKICAgICBpZiAo
IXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0ZpbGVzKCkgJiYgYXNGaWxlSW5wdXQocmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpKSkKKyAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNGaWxlcygpICYm
IGFzRmlsZUlucHV0KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgaWYgKHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+aXNQbHVnaW5F
bGVtZW50KCkpIHsKQEAgLTU5NCw5ICs1ODMsOCBAQCBzdGF0aWMgRHJhZ09wZXJhdGlvbiBkZWZh
dWx0T3BlcmF0aW9uRm9yCiAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25HZW5lcmljOwogfQogCi1i
b29sIERyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhLCBEcmFn
T3BlcmF0aW9uJiBvcGVyYXRpb24pCitib29sIERyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWco
RHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmFnT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB7Ci0gICAgQVNT
RVJUKGRyYWdEYXRhKTsKICAgICBBU1NFUlQobV9kb2N1bWVudFVuZGVyTW91c2UpOwogICAgIFJl
ZjxNYWluRnJhbWU+IG1haW5GcmFtZShtX3BhZ2UubWFpbkZyYW1lKCkpOwogICAgIFJlZlB0cjxG
cmFtZVZpZXc+IHZpZXdQcm90ZWN0b3IgPSBtYWluRnJhbWUtPnZpZXcoKTsKQEAgLTYwNCw4ICs1
OTIsOCBAQCBib29sIERyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWcoRHJhZ0RhCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kgPSBtX2Rv
Y3VtZW50VW5kZXJNb3VzZS0+c2VjdXJpdHlPcmlnaW4oKS0+aXNMb2NhbCgpID8gQ2xpcGJvYXJk
UmVhZGFibGUgOiBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlOwotICAgIFJlZlB0cjxDbGlwYm9hcmQ+
IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AocG9saWN5LCAqZHJh
Z0RhdGEpOwotICAgIERyYWdPcGVyYXRpb24gc3JjT3BNYXNrID0gZHJhZ0RhdGEtPmRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzaygpOworICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9
IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AocG9saWN5LCBkcmFnRGF0YSk7CisgICAg
RHJhZ09wZXJhdGlvbiBzcmNPcE1hc2sgPSBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlv
bk1hc2soKTsKICAgICBjbGlwYm9hcmQtPnNldFNvdXJjZU9wZXJhdGlvbihzcmNPcE1hc2spOwog
CiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50ID0gY3JlYXRlTW91c2VFdmVudChkcmFnRGF0
YSk7CkBAIC02NjQsMTkgKzY1MiwxNyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dh
YmxlRWxlbWVuCiAgICAgcmV0dXJuIChzdGF0ZS50eXBlICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVj
dGlvbikgPyBzdGFydEVsZW1lbnQgOiAwOwogfQogCi1zdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENh
Y2hlZEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hl
ZEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIFJl
bmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8
fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVuZGVySW1h
Z2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShyZW5kZXJlcik7CiAgICAgcmV0dXJuIGltYWdlLT5j
YWNoZWRJbWFnZSgpOwogfQogCi1zdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQqIGVsZW1l
bnQpCitzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGdldENhY2hlZElt
YWdlKGVsZW1lbnQpOwogICAgIC8vIERvbid0IHVzZSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5k
ZXJlcigpIGhlcmUgYXMgdGhhdCBtYXkgcmV0dXJuIEJpdG1hcEltYWdlcyBmb3IgY2FjaGVkIFNW
RyBJbWFnZXMuCiAgICAgLy8gVXNlcnMgb2YgZ2V0SW1hZ2UoKSB3YW50IGFjY2VzcyB0byB0aGUg
U1ZHSW1hZ2UsIGluIG9yZGVyIHRvIGZpZ3VyZSBvdXQgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbnMs
CkBAIC02ODUsMTEgKzY3MSwxMSBAQCBzdGF0aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQqIGVs
ZW1lbnQpCiAgICAgICAgIGNhY2hlZEltYWdlLT5pbWFnZSgpIDogMDsKIH0KIAotc3RhdGljIHZv
aWQgc2VsZWN0RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIHZvaWQgc2VsZWN0RWxl
bWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVt
ZW50LT5kb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGUoZWxl
bWVudCk7Ci0gICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50LmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsK
KyAgICByYW5nZS0+c2VsZWN0Tm9kZSgmZWxlbWVudCk7CisgICAgZWxlbWVudC5kb2N1bWVudCgp
LmZyYW1lKCktPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdl
LmdldCgpLCBET1dOU1RSRUFNKSk7CiB9CiAKIHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yREhU
TUxEcmFnKGNvbnN0IEludFBvaW50JiBtb3VzZURyYWdnZWRQb2ludCwgY29uc3QgSW50UG9pbnQm
IGRyYWdPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQsIGJvb2wgaXNMaW5r
SW1hZ2UpCkBAIC03MDgsOSArNjk0LDkgQEAgc3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JESFRN
TERyYWcoY29ucwogICAgIHJldHVybiBJbnRQb2ludChkcmFnT3JpZ2luLngoKSAtIGRyYWdJbWFn
ZU9mZnNldC54KCksIGRyYWdPcmlnaW4ueSgpICsgeU9mZnNldCk7CiB9CiAKLXN0YXRpYyBJbnRQ
b2ludCBkcmFnTG9jRm9yU2VsZWN0aW9uRHJhZyhGcmFtZSogc3JjKQorc3RhdGljIEludFBvaW50
IGRyYWdMb2NGb3JTZWxlY3Rpb25EcmFnKEZyYW1lJiBzcmMpCiB7Ci0gICAgSW50UmVjdCBkcmFn
Z2luZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNyYy0+c2VsZWN0aW9uKCkuYm91bmRzKCkpOwor
ICAgIEludFJlY3QgZHJhZ2dpbmdSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzcmMuc2VsZWN0aW9u
KCkuYm91bmRzKCkpOwogICAgIGludCB4cG9zID0gZHJhZ2dpbmdSZWN0Lm1heFgoKTsKICAgICB4
cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhwb3MgPyBkcmFnZ2luZ1JlY3QueCgpIDogeHBvczsK
ICAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVjdC5tYXhZKCk7CkBAIC03MjMsMTQgKzcwOSwxMiBA
QCBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0ZvclNlbGVjdGlvbkRyYWcoCiAgICAgcmV0dXJuIElu
dFBvaW50KHhwb3MsIHlwb3MpOwogfQogCi1ib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWco
RnJhbWUqIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJhdGlvbiBzcmNPcCwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBkcmFnRXZlbnQsIGNvbnN0IEludFBvaW50JiBkcmFn
T3JpZ2luKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0
IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbikKIHsKLSAgICBB
U1NFUlQoc3JjKTsKLQotICAgIGlmICghc3JjLT52aWV3KCkgfHwgIXNyYy0+Y29udGVudFJlbmRl
cmVyKCkpCisgICAgaWYgKCFzcmMudmlldygpIHx8ICFzcmMuY29udGVudFJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9
IHNyYy0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoZHJhZ09yaWdpbiwgSGl0
VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisgICAgSGl0
VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0gc3JjLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1
bHRBdFBvaW50KGRyYWdPcmlnaW4sIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RS
ZXF1ZXN0OjpBY3RpdmUpOwogICAgIGlmICghc3RhdGUuc291cmNlLT5jb250YWlucyhoaXRUZXN0
UmVzdWx0LmlubmVyTm9kZSgpKSkKICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIG5vZGUgYmVpbmcg
ZHJhZ2dlZCBpc24ndCB1bmRlciB0aGUgZHJhZyBvcmlnaW4gYW55bW9yZS4uLiBtYXliZSBpdCB3
YXMKICAgICAgICAgLy8gaGlkZGVuIG9yIG1vdmVkIG91dCBmcm9tIHVuZGVyIHRoZSBjdXJzb3Iu
IFJlZ2FyZGxlc3MsIHdlIGRvbid0IHdhbnQgdG8gc3RhcnQgYSBkcmFnIG9uCkBAIC03MzksNyAr
NzIzLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogICAgIFVS
TCBsaW5rVVJMID0gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICBVUkwgaW1h
Z2VVUkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKTsKIAotICAgIEludFBvaW50
IG1vdXNlRHJhZ2dlZFBvaW50ID0gc3JjLT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZHJhZ0V2
ZW50LnBvc2l0aW9uKCkpOworICAgIEludFBvaW50IG1vdXNlRHJhZ2dlZFBvaW50ID0gc3JjLnZp
ZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFnRXZlbnQucG9zaXRpb24oKSk7CiAKICAgICBtX2Ry
YWdnaW5nSW1hZ2VVUkwgPSBVUkwoKTsKICAgICBtX3NvdXJjZURyYWdPcGVyYXRpb24gPSBzcmNP
cDsKQEAgLTc0OCw5ICs3MzIsMTEgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZy
YW1lKiBzcgogICAgIEludFBvaW50IGRyYWdMb2MoMCwgMCk7CiAgICAgSW50UG9pbnQgZHJhZ0lt
YWdlT2Zmc2V0KDAsIDApOwogCi0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBzdGF0ZS5jbGlw
Ym9hcmQuZ2V0KCk7CisgICAgQVNTRVJUKHN0YXRlLmNsaXBib2FyZCk7CisKKyAgICBDbGlwYm9h
cmQmIGNsaXBib2FyZCA9ICpzdGF0ZS5jbGlwYm9hcmQ7CiAgICAgaWYgKHN0YXRlLnR5cGUgPT0g
RHJhZ1NvdXJjZUFjdGlvbkRIVE1MKQotICAgICAgICBkcmFnSW1hZ2UgPSBjbGlwYm9hcmQtPmNy
ZWF0ZURyYWdJbWFnZShkcmFnSW1hZ2VPZmZzZXQpOworICAgICAgICBkcmFnSW1hZ2UgPSBjbGlw
Ym9hcmQuY3JlYXRlRHJhZ0ltYWdlKGRyYWdJbWFnZU9mZnNldCk7CiAgICAgaWYgKHN0YXRlLnR5
cGUgPT0gRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbiB8fCAhaW1hZ2VVUkwuaXNFbXB0eSgpIHx8
ICFsaW5rVVJMLmlzRW1wdHkoKSkKICAgICAgICAgLy8gU2VsZWN0aW9uLCBpbWFnZSwgYW5kIGxp
bmsgZHJhZ3MgcmVjZWl2ZSBhIGRlZmF1bHQgc2V0IG9mIGFsbG93ZWQgZHJhZyBvcGVyYXRpb25z
IHRoYXQKICAgICAgICAgLy8gZm9sbG93cyBmcm9tOgpAQCAtNzY2LDQ1ICs3NTIsNDYgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogCiAgICAgYm9vbCBzdGFydGVk
RHJhZyA9IHRydWU7IC8vIG9wdGltaXNtIC0gd2UgYWxtb3N0IGFsd2F5cyBtYW5hZ2UgdG8gc3Rh
cnQgdGhlIGRyYWcKIAotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0ZS5zb3VyY2UuZ2V0KCk7
CisgICAgQVNTRVJUKHN0YXRlLnNvdXJjZSk7CisgICAgRWxlbWVudCYgZWxlbWVudCA9ICpzdGF0
ZS5zb3VyY2U7CiAKICAgICBJbWFnZSogaW1hZ2UgPSBnZXRJbWFnZShlbGVtZW50KTsKICAgICBp
ZiAoc3RhdGUudHlwZSA9PSBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKSB7Ci0gICAgICAgIGlm
ICghY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgpKSB7CisgICAgICAgIGlmICghY2xp
cGJvYXJkLnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGVudGlyZSBibG9jayBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBjb2RlIGluIEVkaXRv
cjo6Y29weSwgYW5kIHRoZSBjb2RlIHNob3VsZCBiZSBzaGFyZWQuCiAKLSAgICAgICAgICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBzcmMtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc3Jj
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2Vs
ZWN0aW9uUmFuZ2UpOwogCi0gICAgICAgICAgICBzcmMtPmVkaXRvcigpLndpbGxXcml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBzcmMu
ZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvblJhbmdlLmdl
dCgpKTsKIAotICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMtPnNl
bGVjdGlvbigpLnN0YXJ0KCkpKQotICAgICAgICAgICAgICAgIGNsaXBib2FyZC0+cGFzdGVib2Fy
ZCgpLndyaXRlUGxhaW5UZXh0KHNyYy0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJk
KCksIFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CisgICAgICAgICAgICBpZiAoZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICAgICAg
ICAgICAgICBjbGlwYm9hcmQucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0KHNyYy5lZGl0b3Io
KS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSwgUGFzdGVib2FyZDo6Q2Fubm90U21hcnRSZXBs
YWNlKTsKICAgICAgICAgICAgIGVsc2UgewogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
RUZMKQotICAgICAgICAgICAgICAgIHNyYy0+ZWRpdG9yKCkud3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkpOworICAgICAgICAgICAgICAgIHNyYy5lZGl0
b3IoKS53cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjbGlwYm9hcmQucGFzdGVib2FyZCgpKTsK
ICNlbHNlCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgYWxsIG90aGVyIHBsYXRm
b3JtcyB0byBtYXRjaCBNYWMgYW5kIGRlbGV0ZSB0aGlzLgotICAgICAgICAgICAgICAgIGNsaXBi
b2FyZC0+cGFzdGVib2FyZCgpLndyaXRlU2VsZWN0aW9uKHNlbGVjdGlvblJhbmdlLmdldCgpLCBz
cmMtPmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCksIHNyYywgSW5jbHVkZUltYWdlQWx0
VGV4dEZvckNsaXBib2FyZCk7CisgICAgICAgICAgICAgICAgY2xpcGJvYXJkLnBhc3RlYm9hcmQo
KS53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2UsIHNyYy5lZGl0b3IoKS5jYW5TbWFydENv
cHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNyYy0+ZWRpdG9yKCkuZGlkV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKKyAgICAgICAgICAgIHNyYy5lZGl0b3IoKS5kaWRXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogICAgICAgICB9CiAgICAgICAgIG1fY2xpZW50Lndp
bGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uLCBkcmFn
T3JpZ2luLCBjbGlwYm9hcmQpOwogICAgICAgICBpZiAoIWRyYWdJbWFnZSkgewotICAgICAgICAg
ICAgZHJhZ0ltYWdlID0gZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKHNyYy0+ZHJhZ0ltYWdl
Rm9yU2VsZWN0aW9uKCksIERyYWdJbWFnZUFscGhhKTsKKyAgICAgICAgICAgIGRyYWdJbWFnZSA9
IGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihzcmMuZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCks
IERyYWdJbWFnZUFscGhhKTsKICAgICAgICAgICAgIGRyYWdMb2MgPSBkcmFnTG9jRm9yU2VsZWN0
aW9uRHJhZyhzcmMpOwogICAgICAgICAgICAgbV9kcmFnT2Zmc2V0ID0gSW50UG9pbnQoZHJhZ09y
aWdpbi54KCkgLSBkcmFnTG9jLngoKSwgZHJhZ09yaWdpbi55KCkgLSBkcmFnTG9jLnkoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgZG9TeXN0ZW1EcmFnKGRyYWdJbWFnZSwgZHJhZ0xvYywgZHJhZ09y
aWdpbiwgY2xpcGJvYXJkLCBzcmMsIGZhbHNlKTsKLSAgICB9IGVsc2UgaWYgKCFpbWFnZVVSTC5p
c0VtcHR5KCkgJiYgZWxlbWVudCAmJiBpbWFnZSAmJiAhaW1hZ2UtPmlzTnVsbCgpICYmIChtX2Ry
YWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uSW1hZ2UpKSB7CisgICAgfSBlbHNlIGlm
ICghaW1hZ2VVUkwuaXNFbXB0eSgpICYmIGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkgJiYgKG1f
ZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3VyY2VBY3Rpb25JbWFnZSkpIHsKICAgICAgICAgLy8g
V2Ugc2hvdWxkbid0IGJlIHN0YXJ0aW5nIGEgZHJhZyBmb3IgYW4gaW1hZ2UgdGhhdCBjYW4ndCBw
cm92aWRlIGFuIGV4dGVuc2lvbi4KICAgICAgICAgLy8gVGhpcyBpcyBhbiBlYXJseSBkZXRlY3Rp
b24gZm9yIHByb2JsZW1zIGVuY291bnRlcmVkIGxhdGVyIHVwb24gZHJvcC4KICAgICAgICAgQVNT
RVJUKCFpbWFnZS0+ZmlsZW5hbWVFeHRlbnNpb24oKS5pc0VtcHR5KCkpOwotICAgICAgICBpZiAo
IWNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmhhc0RhdGEoKSkgeworICAgICAgICBpZiAoIWNsaXBi
b2FyZC5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgpKSB7CiAgICAgICAgICAgICBtX2RyYWdnaW5nSW1h
Z2VVUkwgPSBpbWFnZVVSTDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKQorICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSkKICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50KGVsZW1lbnQpOwogICAgICAg
ICAgICAgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNsaXBib2FyZCwgZWxlbWVudCwgIWxpbmtV
UkwuaXNFbXB0eSgpID8gbGlua1VSTCA6IGltYWdlVVJMLCBoaXRUZXN0UmVzdWx0LmFsdERpc3Bs
YXlTdHJpbmcoKSk7CiAgICAgICAgIH0KQEAgLTgxMywzMSArODAwLDMxIEBAIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKIAogICAgICAgICBpZiAoIWRyYWdJbWFnZSkg
ewogICAgICAgICAgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBoaXRUZXN0UmVzdWx0LmltYWdlUmVj
dCgpOwotICAgICAgICAgICAgaW1hZ2VSZWN0LnNldExvY2F0aW9uKG1fcGFnZS5tYWluRnJhbWUo
KS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhzcmMtPnZpZXcoKS0+Y29udGVudHNUb1Jvb3RW
aWV3KGltYWdlUmVjdC5sb2NhdGlvbigpKSkpOworICAgICAgICAgICAgaW1hZ2VSZWN0LnNldExv
Y2F0aW9uKG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhzcmMu
dmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoaW1hZ2VSZWN0LmxvY2F0aW9uKCkpKSk7CiAgICAg
ICAgICAgICBkb0ltYWdlRHJhZyhlbGVtZW50LCBkcmFnT3JpZ2luLCBoaXRUZXN0UmVzdWx0Lmlt
YWdlUmVjdCgpLCBjbGlwYm9hcmQsIHNyYywgbV9kcmFnT2Zmc2V0KTsKLSAgICAgICAgfSBlbHNl
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBESFRNTCBkZWZpbmVkIGRyYWcgaW1h
Z2UKICAgICAgICAgICAgIGRvU3lzdGVtRHJhZyhkcmFnSW1hZ2UsIGRyYWdMb2MsIGRyYWdPcmln
aW4sIGNsaXBib2FyZCwgc3JjLCBmYWxzZSk7Ci0KKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
IWxpbmtVUkwuaXNFbXB0eSgpICYmIChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0
aW9uTGluaykpIHsKLSAgICAgICAgaWYgKCFjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5oYXNEYXRh
KCkpCisgICAgICAgIGlmICghY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpCiAgICAg
ICAgICAgICAvLyBTaW1wbGlmeSB3aGl0ZXNwYWNlIHNvIHRoZSB0aXRsZSBwdXQgb24gdGhlIGNs
aXBib2FyZCByZXNlbWJsZXMgd2hhdCB0aGUgdXNlciBzZWVzCiAgICAgICAgICAgICAvLyBvbiB0
aGUgd2ViIHBhZ2UuIFRoaXMgaW5jbHVkZXMgcmVwbGFjaW5nIG5ld2xpbmVzIHdpdGggc3BhY2Vz
LgotICAgICAgICAgICAgc3JjLT5lZGl0b3IoKS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRlc3RSZXN1
bHQudGV4dENvbnRlbnQoKS5zaW1wbGlmeVdoaXRlU3BhY2UoKSwgY2xpcGJvYXJkLT5wYXN0ZWJv
YXJkKCkpOworICAgICAgICAgICAgc3JjLmVkaXRvcigpLmNvcHlVUkwobGlua1VSTCwgaGl0VGVz
dFJlc3VsdC50ZXh0Q29udGVudCgpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpLCBjbGlwYm9hcmQucGFz
dGVib2FyZCgpKTsKIAotICAgICAgICBpZiAoc3JjLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYg
c3JjLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChzcmMu
c2VsZWN0aW9uKCkuaXNDYXJldCgpICYmIHNyYy5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJs
ZSgpKSB7CiAgICAgICAgICAgICAvLyBhIHVzZXIgY2FuIGluaXRpYXRlIGEgZHJhZyBvbiBhIGxp
bmsgd2l0aG91dCBoYXZpbmcgYW55IHRleHQKICAgICAgICAgICAgIC8vIHNlbGVjdGVkLiAgSW4g
dGhpcyBjYXNlLCB3ZSBzaG91bGQgZXhwYW5kIHRoZSBzZWxlY3Rpb24gdG8KICAgICAgICAgICAg
IC8vIHRoZSBlbmNsb3NpbmcgYW5jaG9yIGVsZW1lbnQKLSAgICAgICAgICAgIFBvc2l0aW9uIHBv
cyA9IHNyYy0+c2VsZWN0aW9uKCkuYmFzZSgpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zID0g
c3JjLnNlbGVjdGlvbigpLmJhc2UoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbmNsb3Np
bmdBbmNob3JFbGVtZW50KHBvcyk7CiAgICAgICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAg
ICAgICBzcmMtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uOjpzZWxl
Y3Rpb25Gcm9tQ29udGVudHNPZk5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHNyYy5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRl
bnRzT2ZOb2RlKG5vZGUpKTsKICAgICAgICAgfQogCiAgICAgICAgIG1fY2xpZW50LndpbGxQZXJm
b3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uTGluaywgZHJhZ09yaWdpbiwgY2xp
cGJvYXJkKTsKICAgICAgICAgaWYgKCFkcmFnSW1hZ2UpIHsKLSAgICAgICAgICAgIGRyYWdJbWFn
ZSA9IGNyZWF0ZURyYWdJbWFnZUZvckxpbmsobGlua1VSTCwgaGl0VGVzdFJlc3VsdC50ZXh0Q29u
dGVudCgpLCBzcmMtPnNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgICAg
ICBkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKGxpbmtVUkwsIGhpdFRlc3RSZXN1
bHQudGV4dENvbnRlbnQoKSwgc3JjLnNldHRpbmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAg
ICAgICAgICAgICBJbnRTaXplIHNpemUgPSBkcmFnSW1hZ2VTaXplKGRyYWdJbWFnZSk7CiAgICAg
ICAgICAgICBtX2RyYWdPZmZzZXQgPSBJbnRQb2ludCgtc2l6ZS53aWR0aCgpIC8gMiwgLUxpbmtE
cmFnQm9yZGVySW5zZXQpOwogICAgICAgICAgICAgZHJhZ0xvYyA9IEludFBvaW50KG1vdXNlRHJh
Z2dlZFBvaW50LngoKSArIG1fZHJhZ09mZnNldC54KCksIG1vdXNlRHJhZ2dlZFBvaW50LnkoKSAr
IG1fZHJhZ09mZnNldC55KCkpOwpAQCAtODYxLDcgKzg0OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKICAgICByZXR1cm4gc3RhcnRlZERyYWc7CiB9CiAKLXZv
aWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IElu
dFBvaW50JiBkcmFnT3JpZ2luLCBjb25zdCBJbnRSZWN0JiByZWN0LCBDbGlwYm9hcmQqIGNsaXBi
b2FyZCwgRnJhbWUqIGZyYW1lLCBJbnRQb2ludCYgZHJhZ0ltYWdlT2Zmc2V0KQordm9pZCBEcmFn
Q29udHJvbGxlcjo6ZG9JbWFnZURyYWcoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgSW50UG9pbnQm
IGRyYWdPcmlnaW4sIGNvbnN0IEludFJlY3QmIHJlY3QsIENsaXBib2FyZCYgY2xpcGJvYXJkLCBG
cmFtZSYgZnJhbWUsIEludFBvaW50JiBkcmFnSW1hZ2VPZmZzZXQpCiB7CiAgICAgSW50UG9pbnQg
bW91c2VEb3duUG9pbnQgPSBkcmFnT3JpZ2luOwogICAgIERyYWdJbWFnZVJlZiBkcmFnSW1hZ2Ug
PSAwOwpAQCAtODY5LDcgKzg1Niw3IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFn
KEVsZW1lbnQKIAogICAgIEltYWdlKiBpbWFnZSA9IGdldEltYWdlKGVsZW1lbnQpOwogICAgIGlm
IChpbWFnZSAmJiBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpICogaW1hZ2UtPnNpemUoKS53aWR0aCgp
IDw9IE1heE9yaWdpbmFsSW1hZ2VBcmVhCi0gICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVE
cmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UsIGVsZW1lbnQtPnJlbmRlcmVyKCkgPyBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24oZWxlbWVudC0+cmVuZGVyZXIoKS0+c2hvdWxkUmVzcGVjdEltYWdl
T3JpZW50YXRpb24oKSkgOiBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oKSkpKSB7CisgICAg
ICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UsIGVsZW1l
bnQucmVuZGVyZXIoKSA/IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbihlbGVtZW50LnJlbmRl
cmVyKCktPnNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkpIDogSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uKCkpKSkgewogICAgICAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZSA9IHJlY3Qu
c2l6ZSgpOwogICAgICAgICBvcmlnaW4gPSByZWN0LmxvY2F0aW9uKCk7CiAKQEAgLTkwMywxNSAr
ODkwLDE1IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQKICAgICBk
ZWxldGVEcmFnSW1hZ2UoZHJhZ0ltYWdlKTsKIH0KIAotdm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9T
eXN0ZW1EcmFnKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdMb2MsIGNv
bnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFt
ZSwgYm9vbCBmb3JMaW5rKQordm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFnKERyYWdJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdMb2MsIGNvbnN0IEludFBvaW50JiBl
dmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBmb3JMaW5r
KQogewogICAgIG1fZGlkSW5pdGlhdGVEcmFnID0gdHJ1ZTsKLSAgICBtX2RyYWdJbml0aWF0b3Ig
PSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBtX2RyYWdJbml0aWF0b3IgPSBmcmFtZS5kb2N1bWVu
dCgpOwogICAgIC8vIFByb3RlY3QgdGhpcyBmcmFtZSBhbmQgdmlldywgYXMgYSBsb2FkIG1heSBv
Y2N1ciBtaWQgZHJhZyBhbmQgYXR0ZW1wdCB0byB1bmxvYWQgdGhpcyBmcmFtZQogICAgIFJlZjxN
YWluRnJhbWU+IGZyYW1lUHJvdGVjdG9yKG1fcGFnZS5tYWluRnJhbWUoKSk7CiAgICAgUmVmUHRy
PEZyYW1lVmlldz4gdmlld1Byb3RlY3RvciA9IGZyYW1lUHJvdGVjdG9yLT52aWV3KCk7Ci0gICAg
bV9jbGllbnQuc3RhcnREcmFnKGltYWdlLCB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29udGVu
dHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGRyYWdMb2MpKSwKLSAgICAgICAg
dmlld1Byb3RlY3Rvci0+cm9vdFZpZXdUb0NvbnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
VG9Sb290VmlldyhldmVudFBvcykpLCBjbGlwYm9hcmQsICZmcmFtZVByb3RlY3Rvci5nZXQoKSwg
Zm9yTGluayk7CisgICAgbV9jbGllbnQuc3RhcnREcmFnKGltYWdlLCB2aWV3UHJvdGVjdG9yLT5y
b290Vmlld1RvQ29udGVudHMoZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZHJhZ0xv
YykpLAorICAgICAgICB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUudmll
dygpLT5jb250ZW50c1RvUm9vdFZpZXcoZXZlbnRQb3MpKSwgY2xpcGJvYXJkLCBmcmFtZVByb3Rl
Y3Rvci5nZXQoKSwgZm9yTGluayk7CiAgICAgLy8gRHJhZ0NsaWVudDo6c3RhcnREcmFnIGNhbiBj
YXVzZSBvdXIgUGFnZSB0byBkaXNwZWFyLCBkZWFsbG9jYXRpbmcgfHRoaXN8LgogICAgIGlmICgh
ZnJhbWVQcm90ZWN0b3ItPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAkocmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMTAg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIERyYWdDbGllbnQmIGNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKLSAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVy
ZWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgdm9pZCBkcmFnRXhpdGVkKERyYWdEYXRhKik7Ci0gICAg
ICAgIERyYWdTZXNzaW9uIGRyYWdVcGRhdGVkKERyYWdEYXRhKik7Ci0gICAgICAgIGJvb2wgcGVy
Zm9ybURyYWcoRHJhZ0RhdGEqKTsKKyAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVyZWQoRHJh
Z0RhdGEmKTsKKyAgICAgICAgdm9pZCBkcmFnRXhpdGVkKERyYWdEYXRhJik7CisgICAgICAgIERy
YWdTZXNzaW9uIGRyYWdVcGRhdGVkKERyYWdEYXRhJik7CisgICAgICAgIGJvb2wgcGVyZm9ybURy
YWcoRHJhZ0RhdGEmKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUg
cG9zc2libGUgdG8gcmVtb3ZlIGEgbnVtYmVyIG9mIHRoZXNlIGFjY2Vzc29ycyBvbmNlIGFsbAog
ICAgICAgICAvLyBkcmFnIGxvZ2ljIGlzIGluIFdlYkNvcmUuCkBAIC04Miw3ICs4Miw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcGxhY2VEcmFnQ2FyZXQo
Y29uc3QgSW50UG9pbnQmKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgc3RhcnREcmFnKEZyYW1l
KiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYsIERyYWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbik7Cisg
ICAgICAgIGJvb2wgc3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYsIERyYWdP
cGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25z
dCBJbnRQb2ludCYgZHJhZ09yaWdpbik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBJbnRTaXplJiBt
YXhEcmFnSW1hZ2VTaXplKCk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IExp
bmtEcmFnQm9yZGVySW5zZXQ7CkBAIC05MiwyNCArOTIsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXQgRHJhZ0ltYWdlQWxwaGE7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBib29sIGRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqLCBEcmFn
RGF0YSopOwotICAgICAgICBib29sIGNhblByb2Nlc3NEcmFnKERyYWdEYXRhKik7Ci0gICAgICAg
IGJvb2wgY29uY2x1ZGVFZGl0RHJhZyhEcmFnRGF0YSopOwotICAgICAgICBEcmFnU2Vzc2lvbiBk
cmFnRW50ZXJlZE9yVXBkYXRlZChEcmFnRGF0YSopOwotICAgICAgICBEcmFnT3BlcmF0aW9uIG9w
ZXJhdGlvbkZvckxvYWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgYm9vbCB0cnlEb2N1bWVudERyYWco
RHJhZ0RhdGEqLCBEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdTZXNzaW9uJik7Ci0gICAgICAg
IGJvb2wgdHJ5REhUTUxEcmFnKERyYWdEYXRhKiwgRHJhZ09wZXJhdGlvbiYpOwotICAgICAgICBE
cmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqKTsKKyAgICAgICAgYm9vbCBkaXNw
YXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1lKiwgRHJhZ0RhdGEmKTsKKyAgICAgICAgYm9vbCBj
YW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSYpOworICAgICAgICBib29sIGNvbmNsdWRlRWRpdERyYWco
RHJhZ0RhdGEmKTsKKyAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVyZWRPclVwZGF0ZWQoRHJh
Z0RhdGEmKTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb25Gb3JMb2FkKERyYWdEYXRh
Jik7CisgICAgICAgIGJvb2wgdHJ5RG9jdW1lbnREcmFnKERyYWdEYXRhJiwgRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uLCBEcmFnU2Vzc2lvbiYpOworICAgICAgICBib29sIHRyeURIVE1MRHJhZyhEcmFn
RGF0YSYsIERyYWdPcGVyYXRpb24mKTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnT3BlcmF0
aW9uKERyYWdEYXRhJik7CiAgICAgICAgIHZvaWQgY2FuY2VsRHJhZygpOwotICAgICAgICBib29s
IGRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mLCBEcmFnRGF0YSopOwotICAgICAgICBib29sIGlz
Q29weUtleURvd24oRHJhZ0RhdGEqKTsKKyAgICAgICAgYm9vbCBkcmFnSXNNb3ZlKEZyYW1lU2Vs
ZWN0aW9uJiwgRHJhZ0RhdGEmKTsKKyAgICAgICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdEYXRh
Jik7CiAKICAgICAgICAgdm9pZCBtb3VzZU1vdmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CiAK
LSAgICAgICAgdm9pZCBkb0ltYWdlRHJhZyhFbGVtZW50KiwgY29uc3QgSW50UG9pbnQmLCBjb25z
dCBJbnRSZWN0JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBJbnRQb2ludCYpOwotICAgICAgICB2b2lk
IGRvU3lzdGVtRHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9p
bnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJvb2wgZm9yTGluayk7CisgICAgICAgIHZvaWQgZG9J
bWFnZURyYWcoRWxlbWVudCYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYsIENsaXBi
b2FyZCYsIEZyYW1lJiwgSW50UG9pbnQmKTsKKyAgICAgICAgdm9pZCBkb1N5c3RlbURyYWcoRHJh
Z0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwg
RnJhbWUmLCBib29sIGZvckxpbmspOwogICAgICAgICB2b2lkIGNsZWFudXBBZnRlclN5c3RlbURy
YWcoKTsKLSAgICAgICAgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkKiwg
RWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYgbGFiZWwpOworICAgICAgICB2b2lk
IGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQmLCBFbGVtZW50JiwgY29uc3QgVVJM
JiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAKICAgICAgICAgUGFnZSYgbV9wYWdlOwogICAgICAg
ICBEcmFnQ2xpZW50JiBtX2NsaWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY2OCw3ICszNjY4LDcgQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmhhbmRsZURyYWcoY29uc3QgTW91cwogICAgIAogICAgIGlmIChtX21vdXNlRG93bk1h
eVN0YXJ0RHJhZykgewogICAgICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7Ci0gICAg
ICAgIG1fZGlkU3RhcnREcmFnID0gcGFnZSAmJiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLnN0YXJ0
RHJhZygmbV9mcmFtZSwgZHJhZ1N0YXRlKCksIHNyY09wLCBldmVudC5ldmVudCgpLCBtX21vdXNl
RG93blBvcyk7CisgICAgICAgIG1fZGlkU3RhcnREcmFnID0gcGFnZSAmJiBwYWdlLT5kcmFnQ29u
dHJvbGxlcigpLnN0YXJ0RHJhZyhtX2ZyYW1lLCBkcmFnU3RhdGUoKSwgc3JjT3AsIGV2ZW50LmV2
ZW50KCksIG1fbW91c2VEb3duUG9zKTsKICAgICAgICAgLy8gSW4gV2ViS2l0MiB3ZSBjb3VsZCBy
ZS1lbnRlciB0aGlzIGNvZGUgYW5kIHN0YXJ0IGFub3RoZXIgZHJhZy4KICAgICAgICAgLy8gT24g
T1MgWCB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHRoZSBvd25lcnNoaXAgb2YgdGhlIHBhc3Rl
Ym9hcmQgYW5kIHRoZSBwcm9taXNlZCB0eXBlcy4KICAgICAgICAgaWYgKG1fZGlkU3RhcnREcmFn
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwu
Y3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29u
dHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0MywxNCBAQCBjb25zdCBp
bnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250
cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjpp
c0NvcHlLZXlEb3duKERyYWdEYXRhKikKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURv
d24oRHJhZ0RhdGEmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotRHJhZ09wZXJhdGlvbiBE
cmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnT3Bl
cmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0YSkK
IHsKLSAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKDApKQorICAgIGlmIChkcmFnRGF0YS5j
b250YWluc1VSTCgwKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5OwogCiAgICAg
cmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIERyYWdDb250
cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6
OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqLCBFbGVtZW50KiwgY29uc3QgVVJM
JiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURy
YWdJbWFnZShDbGlwYm9hcmQmLCBFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikK
IHsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVy
R3RrLmNwcAkocmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJh
Z0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxNSArNDUsMTUgQEAgY29u
c3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFn
Q29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxl
cjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlL
ZXlEb3duKERyYWdEYXRhJikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLURyYWdPcGVyYXRp
b24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJhZ0RhdGEqIGRyYWdEYXRhKQorRHJh
Z09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiB7Ci0gICAgLy9GSVhNRTogVGhpcyBsb2dpYyBpcyBpbmNvbXBsZXRlCi0gICAgIGlmIChk
cmFnRGF0YS0+Y29udGFpbnNVUkwoMCkpCisgICAgLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgaW5j
b21wbGV0ZQorICAgIGlmIChkcmFnRGF0YS5jb250YWluc1VSTCgwKSkKICAgICAgICAgcmV0dXJu
IERyYWdPcGVyYXRpb25Db3B5OwogCiAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwpAQCAt
NjksOSArNjksOSBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7
CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlw
Ym9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdDb250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFn
SW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIGNsaXBib2FyZC0+cGFzdGVib2FyZCgp
LndyaXRlSW1hZ2UoZWxlbWVudCwgdXJsLCBsYWJlbCk7CisgICAgY2xpcGJvYXJkLnBhc3RlYm9h
cmQoKS53cml0ZUltYWdlKGVsZW1lbnQsIHVybCwgbGFiZWwpOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTU3
MDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRHJhZ0NvbnRyb2xsZXJNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQog
CiAjaW1wb3J0ICJDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgog
I2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2ltcG9ydCAiRHJhZ0RhdGEuaCIKICNpbXBvcnQgIkVs
ZW1lbnQuaCIKQEAgLTQ4LDE5ICs0NywxNyBAQCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRy
YWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBo
YSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRh
KiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEm
IGRyYWdEYXRhKQogewotICAgIHJldHVybiBkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNh
dGlvbklzQ29weUtleURvd247CisgICAgcmV0dXJuIGRyYWdEYXRhLmZsYWdzKCkgJiBEcmFnQXBw
bGljYXRpb25Jc0NvcHlLZXlEb3duOwogfQogICAgIAotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJv
bGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnT3BlcmF0aW9uIERy
YWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBB
U1NFUlQoZHJhZ0RhdGEpOwotCi0gICAgaWYgKChkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBs
aWNhdGlvbklzTW9kYWwpIHx8ICFkcmFnRGF0YS0+Y29udGFpbnNVUkwoJm1fcGFnZS5tYWluRnJh
bWUoKSkpCisgICAgaWYgKChkcmFnRGF0YS5mbGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2Rh
bCkgfHwgIWRyYWdEYXRhLmNvbnRhaW5zVVJMKCZtX3BhZ2UubWFpbkZyYW1lKCkpKQogICAgICAg
ICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CiAKLSAgICBpZiAoIW1fZG9jdW1lbnRVbmRlck1v
dXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygpICYgKERyYWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVk
U2hlZXQgfCBEcmFnQXBwbGljYXRpb25Jc1NvdXJjZSkpKSkKKyAgICBpZiAoIW1fZG9jdW1lbnRV
bmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLmZsYWdzKCkgJiAoRHJhZ0FwcGxpY2F0aW9uSGFzQXR0
YWNoZWRTaGVldCB8IERyYWdBcHBsaWNhdGlvbklzU291cmNlKSkpKQogICAgICAgICByZXR1cm4g
RHJhZ09wZXJhdGlvbkNvcHk7CiAKICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CkBAIC04
NSw5ICs4Miw5IEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6OmNsZWFudXBBZnRlclN5c3RlbUQKICAg
ICAgICAgZHJhZ0VuZGVkKCk7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRX
cml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogZWxlbWVudCwgY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdDb250cm9sbGVyOjpk
ZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIG1fY2xp
ZW50LmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5uYW1l
KCksIGtpdChlbGVtZW50KSwgdXJsLCBsYWJlbCwgZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgp
KTsKKyAgICBtX2NsaWVudC5kZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY2xpcGJvYXJkLnBhc3Rl
Ym9hcmQoKS5uYW1lKCksIGVsZW1lbnQsIHVybCwgbGFiZWwsIGVsZW1lbnQuZG9jdW1lbnQoKS5m
cmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMTU3MDQ5KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwxNyArNDQsMTYgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFn
SWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEg
PSAwLjc1ZjsKIAotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihE
cmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3Bl
cmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICAvL0ZJWE1FOiB0byBtYXRjaCB0aGUg
bWFjb3MgYmVoYXZpb3VyIHdlIHNob3VsZCByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmUKICAgICAv
L2lmIHdlIGFyZSBhIG1vZGFsIHdpbmRvdywgd2UgYXJlIHRoZSBkcmFnIHNvdXJjZSwgb3IgdGhl
IHdpbmRvdyBpcyBhbiBhdHRhY2hlZCBzaGVldAogICAgIC8vSWYgdGhpcyBjYW4gYmUgZGV0ZXJt
aW5lZCBmcm9tIHdpdGhpbiBXZWJDb3JlIG9wZXJhdGlvbkZvckRyYWcgY2FuIGJlIHB1bGxlZCBp
bnRvIAogICAgIC8vV2ViQ29yZSBpdHNlbGYKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotICAgIHJl
dHVybiBkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFnID8gRHJh
Z09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKKyAgICByZXR1cm4gZHJhZ0RhdGEu
Y29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkg
OiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5
RG93bihEcmFnRGF0YSopCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdE
YXRhJikKIHsKICAgICByZXR1cm4gOjpHZXRBc3luY0tleVN0YXRlKFZLX0NPTlRST0wpOwogfQpA
QCAtNzAsOSArNjksOSBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1E
CiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShD
bGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdDb250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVE
cmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQogewotICAgIFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKTsKKyAgICBQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJk
ID0gY2xpcGJvYXJkLnBhc3RlYm9hcmQoKTsKIAogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkg
bmVlZCB0aGlzIGNoZWNrPwogICAgIGlmICghcGFzdGVib2FyZC53cml0YWJsZURhdGFPYmplY3Qo
KSkKQEAgLTgxLDcgKzgwLDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZGVjbGFyZUFuZFdyaXRl
RHJhZwogICAgIC8vIE9yZGVyIGlzIGltcG9ydGFudCBoZXJlIGZvciBFeHBsb3JlcidzIHNha2UK
ICAgICBwYXN0ZWJvYXJkLndyaXRlVVJMVG9Xcml0YWJsZURhdGFPYmplY3QodXJsLCBsYWJlbCk7
CiAgICAgcGFzdGVib2FyZC53cml0ZUltYWdlVG9EYXRhT2JqZWN0KGVsZW1lbnQsIHVybCk7Ci0g
ICAgcGFzdGVib2FyZC53cml0ZU1hcmt1cChjcmVhdGVNYXJrdXAoKmVsZW1lbnQsIEluY2x1ZGVO
b2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAgIHBhc3RlYm9hcmQud3JpdGVNYXJrdXAoY3Jl
YXRlTWFya3VwKGVsZW1lbnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgJKHJldmlzaW9uIDE1NzA0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNCw4ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGFzUGxhaW5UZXh0KEZyYW1lKikg
Y29uc3Q7CiAgICAgdm9pZCBhc0ZpbGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OwogICAg
IENvbG9yIGFzQ29sb3IoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGFzRnJhZ21lbnQoRnJhbWUqLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93UGxhaW5UZXh0LCBi
b29sJiBjaG9zZVBsYWluVGV4dCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBhc0ZyYWdtZW50KEZyYW1lKiwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRl
eHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSBjb25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFj
ZSgpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNDb2xvcigpIGNvbnN0OwogICAgIGJvb2wgY29u
dGFpbnNGaWxlcygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQu
aAkocmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2Fy
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsMjEgKzE2NCwxNSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+
LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJWE1FOiBM
YXllcmluZyB2aW9sYXRpb24uCi0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZP
Uk0oV0lOKQotICAgIHZvaWQgd3JpdGVJbWFnZShOb2RlKiwgY29uc3QgVVJMJiwgY29uc3QgU3Ry
aW5nJiB0aXRsZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCi0gICAgdm9pZCB3cml0
ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiwgU2hv
dWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID0gRGVmYXVsdFNlbGVjdGVkVGV4
dFR5cGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgorICAgIFBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudChGcmFtZSYsIFJhbmdlJiwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlv
bGF0aW9uLgorICAgIHZvaWQgd3JpdGVJbWFnZShFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3Qg
U3RyaW5nJiB0aXRsZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCisgICAgdm9pZCB3
cml0ZVNlbGVjdGlvbihSYW5nZSYsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiwg
U2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID0gRGVmYXVsdFNlbGVjdGVk
VGV4dFR5cGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShHVEspCiAgICAgc3RhdGljIFBhc3NPd25QdHI8UGFzdGVib2FyZD4gY3JlYXRlKFBh
c3NSZWZQdHI8RGF0YU9iamVjdEd0az4pOwogICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9h
cmQ+IGNyZWF0ZShHdGtDbGlwYm9hcmQqKTsKICAgICBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+
IGRhdGFPYmplY3QoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oR1RLKQogICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZUZvckdsb2JhbFNlbGVjdGlvbigpOwog
I2VuZGlmCiAKQEAgLTE5OSw3ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFeHRlcm5h
bERhdGFPYmplY3QoSURhdGFPYmplY3QqKTsKICAgICB2b2lkIHdyaXRlVVJMVG9Xcml0YWJsZURh
dGFPYmplY3QoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7CiAgICAgQ09NUHRyPFdDRGF0YU9i
amVjdD4gd3JpdGFibGVEYXRhT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV93cml0YWJsZURhdGFP
YmplY3Q7IH0KLSAgICB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoRWxlbWVudCosIGNvbnN0
IFVSTCYpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgorICAgIHZvaWQgd3JpdGVJbWFn
ZVRvRGF0YU9iamVjdChFbGVtZW50JiwgY29uc3QgVVJMJik7IC8vIEZJWE1FOiBMYXllcmluZyB2
aW9sYXRpb24uCiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTIxNiw3ICsyMTAsNyBAQCBwcml2YXRl
OgogICAgIGV4cGxpY2l0IFBhc3RlYm9hcmQoY29uc3QgRHJhZ0RhdGFNYXAmKTsKIAogICAgIHZv
aWQgZmluaXNoQ3JlYXRpbmdQYXN0ZWJvYXJkKCk7Ci0gICAgdm9pZCB3cml0ZVJhbmdlVG9EYXRh
T2JqZWN0KFJhbmdlKiwgRnJhbWUqKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KKyAg
ICB2b2lkIHdyaXRlUmFuZ2VUb0RhdGFPYmplY3QoUmFuZ2UmLCBGcmFtZSYpOyAvLyBGSVhNRTog
TGF5ZXJpbmcgdmlvbGF0aW9uLgogICAgIHZvaWQgd3JpdGVVUkxUb0RhdGFPYmplY3QoY29uc3Qg
VVJMJiwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCB3cml0ZVBsYWluVGV4dFRvRGF0YU9iamVj
dChjb25zdCBTdHJpbmcmLCBTbWFydFJlcGxhY2VPcHRpb24pOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJhZ0RhdGFFZmwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9EcmFnRGF0YUVmbC5jcHAJKHJldmlzaW9uIDE1NzA0
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9EcmFnRGF0YUVmbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSos
IEZpbGVuYW1lQwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+
LCBib29sLCBib29sJikgY29uc3QKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0Rh
dGE6OmFzRnJhZ21lbnQoRnJhbWUqLCBSYW5nZSYsIGJvb2wsIGJvb2wmKSBjb25zdAogewogICAg
IHJldHVybiAwOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRh
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0Rh
dGFHdGsuY3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRHJhZ0RhdGFHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFN0cmlu
ZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqLCBGaWxlbmFtZUMKIH0KIAogCi1QYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1Jl
ZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wmKSBjb25zdAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChGcmFtZSogZnJhbWUsIFJhbmdlJiwgYm9vbCwgYm9v
bCYpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtRHJhZ0RhdGEtPmhhc01hcmt1cCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAkocmV2aXNpb24gMTU3MDQ5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCB2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVy
OjpoYW5kbGVEcmFnTGVhCiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoY29udGV4dC0+ZGF0YU9iamVj
dC5nZXQoKSwgcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFdpZGdldFBv
aW50VG9TY3JlZW5Qb2ludChtX3dpZGdldCwgcG9zaXRpb24pLAogICAgICAgICAgICAgICAgICAg
ICAgIERyYWdPcGVyYXRpb25Ob25lKTsKLSAgICBjb250ZXh0LT5leGl0ZWRDYWxsYmFjayhtX3dp
ZGdldCwgJmRyYWdEYXRhLCBjb250ZXh0LT5kcm9wSGFwcGVuZWQpOworICAgIGNvbnRleHQtPmV4
aXRlZENhbGxiYWNrKG1fd2lkZ2V0LCBkcmFnRGF0YSwgY29udGV4dC0+ZHJvcEhhcHBlbmVkKTsK
IAogICAgIG1fZHJvcHBpbmdDb250ZXh0cy5yZW1vdmUoaXRlcmF0b3IpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgJ
KHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFn
QW5kRHJvcEhlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHN0cnVjdCBEcm9wcGluZ0NvbnRleHQ7CiBjbGFzcyBEcmFnRGF0YTsKIAot
dHlwZWRlZiB2b2lkICgqRHJhZ0V4aXRlZENhbGxiYWNrKShHdGtXaWRnZXQqLCBEcmFnRGF0YSos
IGJvb2wgZHJvcEhhcHBlbmVkKTsKK3R5cGVkZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFjayko
R3RrV2lkZ2V0KiwgRHJhZ0RhdGEmLCBib29sIGRyb3BIYXBwZW5lZCk7CiAKIGNsYXNzIEd0a0Ry
YWdBbmREcm9wSGVscGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHdGtEcmFnQW5kRHJv
cEhlbHBlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvUGFzdGVib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NywxMSArMTU3LDExIEBA
IGJvb2wgUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVk
UmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiBmcmFtZSwgU2hvdWxkU2Vy
aWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4
dEZvckNsaXBib2FyZCkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UmIHNl
bGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiBmcmFtZSwgU2hv
dWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCkKIHsKICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0g
ICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNs
aXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUtPmVkaXRv
cigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpIDogZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVk
VGV4dCgpKTsKLSAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoKnNlbGVj
dGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9j
YWxVUkxzKSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8g
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCkgOiBmcmFtZS5lZGl0b3Io
KS5zZWxlY3RlZFRleHQoKSk7CisgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFy
a3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNv
bHZlTm9uTG9jYWxVUkxzKSk7CiAKICAgICBpZiAobV9ndGtDbGlwYm9hcmQpCiAgICAgICAgIFBh
c3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJk
Q29udGVudHMobV9ndGtDbGlwYm9hcmQsIGNhblNtYXJ0Q29weU9yRGVsZXRlID8gUGFzdGVib2Fy
ZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUgOiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1
ZGVTbWFydFBhc3RlKTsKQEAgLTE4NywzMSArMTg3LDI4IEBAIHZvaWQgUGFzdGVib2FyZDo6d3Jp
dGUoY29uc3QgUGFzdGVib2FyZFUKICAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBh
c3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlwYm9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7
CiB9CiAKLXN0YXRpYyBVUkwgZ2V0VVJMRm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMg
VVJMIGdldFVSTEZvckltYWdlRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEZJ
WE1FOiBMYXRlciB0aGlzIGNvZGUgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIENocm9taXVtIHNvbWVo
b3cuIENoYW5jZXMgYXJlIGFsbCBwbGF0Zm9ybXMgd2FudCBpdC4KICAgICBBdG9taWNTdHJpbmcg
dXJsU3RyaW5nOwotICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQobm9kZSkgfHwgaXNIVE1MSW5w
dXRFbGVtZW50KG5vZGUpKQotICAgICAgICB1cmxTdHJpbmcgPSB0b0VsZW1lbnQobm9kZSktPmdl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpOworICAgIGlmIChpc0hUTUxJbWFnZUVsZW1l
bnQoZWxlbWVudCkgfHwgaXNIVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICB1cmxT
dHJpbmcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpOwogI2lmIEVO
QUJMRShTVkcpCi0gICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VU
YWcpKQotICAgICAgICB1cmxTdHJpbmcgPSB0b0VsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShY
TGlua05hbWVzOjpocmVmQXR0cik7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKFNW
R05hbWVzOjppbWFnZVRhZykpCisgICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmli
dXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKICNlbmRpZgotICAgIGVsc2UgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykgfHwgaXNIVE1MT2JqZWN0RWxlbWVudChub2Rl
KSkgewotICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAgICAg
ICB1cmxTdHJpbmcgPSBlbGVtZW50LT5pbWFnZVNvdXJjZVVSTCgpOwotICAgIH0KLSAgICByZXR1
cm4gdXJsU3RyaW5nLmlzRW1wdHkoKSA/IFVSTCgpIDogbm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0
ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3RyaW5nKSk7CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpIHx8IGlzSFRN
TE9iamVjdEVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQuaW1h
Z2VTb3VyY2VVUkwoKTsKKworICAgIHJldHVybiB1cmxTdHJpbmcuaXNFbXB0eSgpID8gVVJMKCkg
OiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdI
VE1MU3BhY2VzKHVybFN0cmluZykpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2Uo
Tm9kZSogbm9kZSwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwmLCBjb25zdCBTdHJp
bmcmIHRpdGxlKQogewotICAgIEFTU0VSVChub2RlKTsKLQotICAgIGlmICghKG5vZGUtPnJlbmRl
cmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNJbWFnZSgpKSkKKyAgICBpZiAoIShlbGVtZW50
LnJlbmRlcmVyKCkgJiYgZWxlbWVudC5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBSZW5kZXJJbWFnZSogcmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUt
PnJlbmRlcmVyKCkpOworICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uo
ZWxlbWVudC5yZW5kZXJlcigpKTsKICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5k
ZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAgICBpZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdl
LT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMCwxMSArMjE3LDExIEBA
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCAKIAogICAgIG1fZGF0YU9i
amVjdC0+Y2xlYXJBbGwoKTsKIAotICAgIFVSTCB1cmwgPSBnZXRVUkxGb3JJbWFnZU5vZGUobm9k
ZSk7CisgICAgVVJMIHVybCA9IGdldFVSTEZvckltYWdlRWxlbWVudChlbGVtZW50KTsKICAgICBp
ZiAoIXVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0
aXRsZSk7CiAKLSAgICAgICAgbV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKCp0
b0VsZW1lbnQobm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAgICAg
ICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoZWxlbWVudCwgSW5jbHVkZU5v
ZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7CiAgICAgfQogCiAgICAgR1JlZlB0cjxHZGtQaXhidWY+
IHBpeGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwpAQCAtMzAyLDggKzI5
OSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6c2V0RHJhZ0ltYWdlKERyYWdJbWFnZVIKIH0KICNlbmRp
ZgogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJh
Z21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxs
b3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQorUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lJiBmcmFtZSwgUmFuZ2Um
IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewog
ICAgIGlmIChtX2d0a0NsaXBib2FyZCkKICAgICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVs
dFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQp
OwpAQCAtMzExLDggKzMwNyw4IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVi
b2FyZDoKICAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogCiAgICAgaWYgKG1fZGF0YU9iamVj
dC0+aGFzTWFya3VwKCkpIHsKLSAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoKmZyYW1lLT5kb2N1bWVudCgpLCBtX2RhdGFPYmplY3QtPm1hcmt1cCgpLCBl
bXB0eVN0cmluZygpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOworICAgICAg
ICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkgeworICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVu
dCgpLCBtX2RhdGFPYmplY3QtPm1hcmt1cCgpLCBlbXB0eVN0cmluZygpLCBEaXNhbGxvd1Njcmlw
dGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAgICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAg
ICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgICAgIH0KQEAgLTMyMyw3
ICszMTksNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAKICAg
ICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0KCkpIHsKICAgICAgICAgY2hvc2VQbGFpblRleHQg
PSB0cnVlOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIG1fZGF0YU9iamVjdC0+dGV4dCgpKTsK
KyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dChjb250ZXh0LCBtX2RhdGFPYmplY3QtPnRleHQoKSk7CiAgICAgICAgIGlmIChm
cmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnRGF0YU1hYy5tbQkocmV2aXNp
b24gMTU3MDQ5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTAgKzE4OSwxMCBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFz
VVJMKEZyYW1lKiBmcmFtZSwgRmlsCiAgICAgcmV0dXJuIFN0cmluZygpOyAgICAgICAgCiB9CiAK
LVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUq
IGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9v
bCYgY2hvc2VQbGFpblRleHQpIGNvbnN0CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERy
YWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGFsbG93
UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkgY29uc3QKIHsKICAgICBQYXN0ZWJvYXJk
IHBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3Io
KS53ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCwgKnJhbmdlLCBhbGxvd1BsYWlu
VGV4dCwgY2hvc2VQbGFpblRleHQpOworICAgIHJldHVybiBmcmFtZS0+ZWRpdG9yKCkud2ViQ29u
dGVudEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hv
c2VQbGFpblRleHQpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdEYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCShyZXZpc2lvbiAxNTcw
NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21w
YXRpYmxlQ29udGVudAogICAgICAgICB8fCBjb250YWluc0NvbG9yKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQ
YXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNvbnN0CitQYXNzUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUmFuZ2UmLCBib29s
LCBib29sJikgY29uc3QKIHsgICAgIAogICAgIC8qCiAgICAgICogT3JkZXIgaXMgcmljaGVzdCBm
b3JtYXQgZmlyc3QuIE9uIE9TWCB0aGlzIGlzOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MjIsOSArNDIyLDggQEAgdm9pZCBQYXN0ZWJvYXJkOjpzZXREcmFnSW1hZ2UoRHJhZ0ltYWdl
UgogfQogI2VuZGlmCiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdChS
YW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUqIGZyYW1lKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlJiBzZWxlY3RlZFJhbmdlLCBGcmFtZSYgZnJhbWUpCiB7
Ci0gICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2UpOwogICAgIGlmICghbV93cml0YWJsZURhdGFPYmpl
Y3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDMyLDEzICs0MzEsMTMgQEAgdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KAogICAgIG1lZGl1bS50eW1lZCA9IFRZTUVEX0hH
TE9CQUw7CiAKICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAgICBtYXJrdXBUb0NGSFRNTChjcmVh
dGVNYXJrdXAoKnNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpLAotICAg
ICAgICBzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLnVybCgpLnN0
cmluZygpLCBkYXRhKTsKKyAgICBtYXJrdXBUb0NGSFRNTChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRS
YW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSksCisgICAgICAgIHNlbGVjdGVkUmFuZ2Uu
c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS51cmwoKS5zdHJpbmcoKSwgZGF0YSk7CiAgICAg
bWVkaXVtLmhHbG9iYWwgPSBjcmVhdGVHbG9iYWxEYXRhKGRhdGEpOwogICAgIGlmIChtZWRpdW0u
aEdsb2JhbCAmJiBGQUlMRUQobV93cml0YWJsZURhdGFPYmplY3QtPlNldERhdGEoaHRtbEZvcm1h
dCgpLCAmbWVkaXVtLCBUUlVFKSkpCiAgICAgICAgIDo6R2xvYmFsRnJlZShtZWRpdW0uaEdsb2Jh
bCk7CiAKLSAgICBTdHJpbmcgc3RyID0gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNs
aXBib2FyZCgpOworICAgIFN0cmluZyBzdHIgPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHRG
b3JDbGlwYm9hcmQoKTsKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGlu
ZXMoc3RyKTsKICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwogICAgIG1lZGl1bS5oR2xv
YmFsID0gY3JlYXRlR2xvYmFsRGF0YShzdHIpOwpAQCAtNDQ2LDE5ICs0NDUsMTkgQEAgdm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KAogICAgICAgICA6Okdsb2JhbEZyZWUo
bWVkaXVtLmhHbG9iYWwpOwogCiAgICAgbWVkaXVtLmhHbG9iYWwgPSAwOwotICAgIGlmIChmcmFt
ZS0+ZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSkKKyAgICBpZiAoZnJhbWUuZWRpdG9y
KCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSkKICAgICAgICAgbV93cml0YWJsZURhdGFPYmplY3Qt
PlNldERhdGEoc21hcnRQYXN0ZUZvcm1hdCgpLCAmbWVkaXVtLCBUUlVFKTsKIH0KIAotdm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5T
bWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRl
eHRGb3JDbGlwYm9hcmQgc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQor
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgYm9v
bCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUmIGZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxl
Y3RlZFRleHRGb3JDbGlwYm9hcmQgc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJv
YXJkKQogewogICAgIGNsZWFyKCk7CiAKICAgICAvLyBQdXQgQ0ZfSFRNTCBmb3JtYXQgb24gdGhl
IHBhc3RlYm9hcmQgCiAgICAgaWYgKDo6T3BlbkNsaXBib2FyZChtX293bmVyKSkgewogICAgICAg
ICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAgICAgICAgbWFya3VwVG9DRkhUTUwoY3JlYXRlTWFya3Vw
KCpzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKSwKLSAgICAgICAgICAg
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkudXJsKCkuc3RyaW5n
KCksIGRhdGEpOworICAgICAgICBtYXJrdXBUb0NGSFRNTChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRS
YW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSksCisgICAgICAgICAgICBzZWxlY3RlZFJh
bmdlLnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCksIGRhdGEpOwog
ICAgICAgICBIR0xPQkFMIGNiRGF0YSA9IGNyZWF0ZUdsb2JhbERhdGEoZGF0YSk7CiAgICAgICAg
IGlmICghOjpTZXRDbGlwYm9hcmREYXRhKEhUTUxDbGlwYm9hcmRGb3JtYXQsIGNiRGF0YSkpCiAg
ICAgICAgICAgICA6Okdsb2JhbEZyZWUoY2JEYXRhKTsKQEAgLTQ2Niw3ICs0NjUsNyBAQCB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzCiAgICAgfQogICAgIAogICAgIC8v
IFB1dCBwbGFpbiBzdHJpbmcgb24gdGhlIHBhc3RlYm9hcmQuIENGX1VOSUNPREVURVhUIGNvdmVy
cyBDRl9URVhUIGFzIHdlbGwKLSAgICBTdHJpbmcgc3RyID0gc2hvdWxkU2VyaWFsaXplU2VsZWN0
ZWRUZXh0Rm9yQ2xpcGJvYXJkID09IEluY2x1ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQgPyBm
cmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCkgOiBmcmFtZS0+ZWRpdG9y
KCkuc2VsZWN0ZWRUZXh0KCk7CisgICAgU3RyaW5nIHN0ciA9IHNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8g
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCkgOiBmcmFtZS5lZGl0b3Io
KS5zZWxlY3RlZFRleHQoKTsKICAgICByZXBsYWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3
bGluZXMoc3RyKTsKICAgICByZXBsYWNlTkJTUFdpdGhTcGFjZShzdHIpOwogICAgIGlmICg6Ok9w
ZW5DbGlwYm9hcmQobV9vd25lcikpIHsKQEAgLTcyNSwxNCArNzI0LDEyIEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFUKICAgICB3cml0ZVVSTFRvRGF0YU9iamVjdChw
YXN0ZWJvYXJkVVJMLnVybCwgcGFzdGVib2FyZFVSTC50aXRsZSk7CiB9CiAKLXZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKQor
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYs
IGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgQVNTRVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+
cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc0ltYWdlKCkpKQorICAgIGlmICghKGVs
ZW1lbnQucmVuZGVyZXIoKSAmJiBlbGVtZW50LnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlbmRlckltYWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uo
bm9kZS0+cmVuZGVyZXIoKSk7CisgICAgUmVuZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJ
bWFnZShlbGVtZW50LnJlbmRlcmVyKCkpOwogICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwogICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVk
SW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNzk4LDcgKzc5NSw3
IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkUGxhaW5UZXgKICAgICB9CiB9CiAK
LVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVu
dChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFp
blRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIGNvbnRl
eHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIGNo
b3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAgICAgCkBAIC04MTEsOSArODA4LDkgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICAgICAgR2xvYmFsVW5sb2Nr
KGNiRGF0YSk7CiAgICAgICAgICAgICA6OkNsb3NlQ2xpcGJvYXJkKCk7CiAKLSAgICAgICAgICAg
IFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFnbWVudEZyb21DRkhU
TUwoZnJhbWUtPmRvY3VtZW50KCksIGNmaHRtbCk7CisgICAgICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFnbWVudEZyb21DRkhUTUwoZnJhbWUuZG9jdW1lbnQo
KSwgY2ZodG1sKTsKICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZnJhZ21lbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2Uo
KTsKICAgICAgICAgfSBlbHNlIAogICAgICAgICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwogICAg
IH0KQEAgLTgyNyw3ICs4MjQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3Rl
Ym9hcmQ6CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cihidWZmZXIpOwogICAgICAgICAgICAg
ICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgICAgIDo6Q2xvc2VDbGlwYm9h
cmQoKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIHN0cik7CisgICAgICAgICAg
ICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjb250ZXh0LCBzdHIpOwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgICAg
IH0gZWxzZSAKQEAgLTg0NCw3ICs4NDEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IFBhc3RlYm9hcmQ6CiAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cihidWZmZXIpOwogICAgICAg
ICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwogICAgICAgICAgICAgICAgIDo6Q2xvc2VD
bGlwYm9hcmQoKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQuZ2V0KCksIHN0cik7CisgICAg
ICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChjb250ZXh0LCBzdHIpOwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVu
dCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAg
ICAgICAgIH0gZWxzZQpAQCAtODYxLDExICs4NTgsMTAgQEAgdm9pZCBQYXN0ZWJvYXJkOjpzZXRF
eHRlcm5hbERhdGFPYmplY3QoSQogICAgIG1fZGF0YU9iamVjdCA9IGRhdGFPYmplY3Q7CiB9CiAK
LXN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3N0
YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVkSW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICAvLyBBdHRlbXB0IHRvIHB1bGwgQ2FjaGVkSW1hZ2UgZnJvbSBlbGVtZW50Ci0gICAgQVNTRVJU
KGVsZW1lbnQpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJl
cigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkgCiAgICAgICAgIHJldHVy
biAwOwogCkBAIC0xMDAxLDE4ICs5OTcsMTggQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFs
SERyb3BDb250ZW50KAogICAgIHJldHVybiBtZW1PYmo7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6
d3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCkK
K3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBVUkwmIHVybCkKIHsKICAgICAvLyBTaG92ZSBpbWFnZSBkYXRhIGludG8gYSBEYXRh
T2JqZWN0IGZvciB1c2UgYXMgYSBmaWxlCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0g
Z2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVk
SW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSkgfHwgIWNhY2hlZElt
YWdlLT5pc0xvYWRlZCgpKQorICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5p
bWFnZUZvclJlbmRlcmVyKGVsZW1lbnQucmVuZGVyZXIoKSkgfHwgIWNhY2hlZEltYWdlLT5pc0xv
YWRlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVy
ID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSktPmRh
dGEoKTsKKyAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FjaGVkSW1hZ2UtPmltYWdl
Rm9yUmVuZGVyZXIoZWxlbWVudC5yZW5kZXJlcigpKS0+ZGF0YSgpOwogICAgIGlmICghaW1hZ2VC
dWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhH
TE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0
b3IodXJsLnN0cmluZygpLCBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRy
KSwgY2FjaGVkSW1hZ2UpOworICAgIEhHTE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9IGNyZWF0
ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IodXJsLnN0cmluZygpLCBlbGVtZW50LmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6OmFsdEF0dHIpLCBjYWNoZWRJbWFnZSk7CiAgICAgaWYgKCFpbWFnZUZp
bGVEZXNjcmlwdG9yKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQzIEBACisyMDEzLTEwLTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJW
aWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFn
TW90aW9uKToKKyAgICAgICAgKGRyYWdFeGl0ZWRDYWxsYmFjayk6CisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZURyYWdEcm9wKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcu
bW06CisgICAgICAgICgtW1dLVmlldyBkcmFnZ2luZ0VudGVyZWQ6XSk6CisgICAgICAgICgtW1dL
VmlldyBkcmFnZ2luZ1VwZGF0ZWQ6XSk6CisgICAgICAgICgtW1dLVmlldyBkcmFnZ2luZ0V4aXRl
ZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IHBlcmZvcm1EcmFnT3BlcmF0aW9uOl0pOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OmRyYWdFbnRlcmVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmFn
VXBkYXRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWcpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGll
bnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcpOgorICAgICAgICAoV2ViS2l0
OjpXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFn
Q2xpZW50OjpzdGFydERyYWcpOgorICAgICAgICAoV2ViS2l0OjpjYWNoZWRJbWFnZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorCiAyMDEzLTEwLTA1ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZp
eCB0aGUgR1RLKyBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5NCw0MCArMTE5NCw0MCBAQCB2
b2lkIFdlYlBhZ2VQcm94eTo6Y29tbWl0UGFnZVRyYW5zaXRpb25WCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCi12b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0VudGVyZWQoRHJhZ0Rh
dGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkcmFnRW50ZXJlZChEcmFnRGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lKQogewogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hF
eHRlbnNpb25IYW5kbGVFbXB0eUFycmF5OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihEcmFnQ29udHJvbGxlckFjdGlvbkVudGVyZWQsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5hbWUs
IHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5
KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmRyYWdVcGRhdGVkKERyYWdEYXRhKiBkcmFnRGF0
YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJh
Z1VwZGF0ZWQoRHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFt
ZSkKIHsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRs
ZTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uSGFu
ZGxlRW1wdHlBcnJheTsKICAgICBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRy
b2xsZXJBY3Rpb25VcGRhdGVkLCBkcmFnRGF0YSwgZHJhZ1N0b3JhZ2VOYW1lLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlRW1wdHlBcnJheSk7CiB9CiAKLXZv
aWQgV2ViUGFnZVByb3h5OjpkcmFnRXhpdGVkKERyYWdEYXRhKiBkcmFnRGF0YSwgY29uc3QgU3Ry
aW5nJiBkcmFnU3RvcmFnZU5hbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRlZChEcmFn
RGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lKQogewogICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5
OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkV4
aXRlZCwgZHJhZ0RhdGEsIGRyYWdTdG9yYWdlTmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwg
c2FuZGJveEV4dGVuc2lvbkhhbmRsZUVtcHR5QXJyYXkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94
eTo6cGVyZm9ybURyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9y
YWdlTmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVu
c2lvbnNGb3JVcGxvYWQpCit2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWcoRHJhZ0RhdGEm
IGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBjb25zdCBTYW5kYm94RXh0
ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpCiB7CiAgICAg
cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uUGVyZm9ybURy
YWcsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5hbWUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNh
bmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWdE
YXRhKiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKQordm9p
ZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxl
ckFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lv
bkhhbmRsZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRib3hFeHRl
bnNpb25zRm9yVXBsb2FkKQogewogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
CiAjaWYgUExBVEZPUk0oR1RLKQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgKmRyYWdEYXRhKSwgbV9wYWdl
SUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEpLCBtX3BhZ2VJRCk7CiAjZWxzZQotICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLT5nbG9i
YWxQb3NpdGlvbigpLCBkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRy
YWdTdG9yYWdlTmFtZSwgZHJhZ0RhdGEtPmZsYWdzKCksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUs
IHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlv
biwgZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSwg
ZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRyYWdTdG9yYWdlTmFtZSwg
ZHJhZ0RhdGEuZmxhZ3MoKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lv
bnNGb3JVcGxvYWQpLCBtX3BhZ2VJRCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzQsMTAg
KzU3NCwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAgICAKICAgICAv
LyBEcmFnIGFuZCBkcm9wIHN1cHBvcnQuCi0gICAgdm9pZCBkcmFnRW50ZXJlZChXZWJDb3JlOjpE
cmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOwotICAg
IHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdT
dG9yYWdlTmFtZSA9IFN0cmluZygpKTsKLSAgICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29yZTo6RHJh
Z0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKLSAgICB2
b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRyYWdEYXRhKiwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5Jik7CisgICAgdm9pZCBkcmFnRW50ZXJlZChXZWJDb3JlOjpE
cmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOworICAg
IHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdT
dG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAgICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29yZTo6RHJh
Z0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAgICB2
b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRyYWdEYXRhJiwgY29uc3QgU3RyaW5nJiBkcmFnU3Rv
cmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAKICAgICB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbihXZWJDb3JlOjpEcmFnU2Vzc2lvbik7CiAgICAgdm9pZCBkcmFnRW5kZWQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbik7CkBAIC0xMDE1LDcgKzEw
MTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVhckxvYWREZXBlbmRlbnRDYWxsYmFja3Mo
KTsKIAotICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVy
QWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1l
LCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGVBcnJheSYpOworICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERy
YWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTYW5k
Ym94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOwogCiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3Rv
cmVEaXNjYXJkYWJsZVN0YXRlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAJKHJldmlzaW9uIDE1NzA0
OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDcgKzcyMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWMKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmpl
Y3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9z
aXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0
X2FjdGlvbnMoY29udGV4dCkpKTsKICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5y
ZXNldERyYWdPcGVyYXRpb24oKTsKLSAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5k
cmFnRW50ZXJlZCgmZHJhZ0RhdGEpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHkt
PmRyYWdFbnRlcmVkKGRyYWdEYXRhKTsKICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdl
YlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uOwogICAg
IGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0
aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogfQpAQCAtNzY3LDEzICs3NjcsMTMgQEAgc3RhdGljIGdi
b29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ01vdAogICAgICAgICByZXR1cm4gVFJVRTsKIAog
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0
UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFn
T3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICB3
ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAg
IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdVcGRhdGVkKGRyYWdEYXRhKTsKICAg
ICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHkt
PmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uOwogICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBk
cmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogICAg
IHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2soR3RrV2lk
Z2V0KiB3aWRnZXQsIERyYWdEYXRhKiBkcmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQpCitzdGF0
aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdEYXRhJiBk
cmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQpCiB7CiAgICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhp
dGVkIGlmIHdlIGhhdmUganVzdCByZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKICAg
ICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZp
ZXcuCkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0RybwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252
ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0
aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkp
KTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgaGFuZGxlOwogICAgIFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQ7Ci0gICAgd2ViVmll
d0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhLCBTdHJpbmcoKSwg
aGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uRm9yVXBsb2FkKTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJp
di0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZyhkcmFnRGF0YSwgU3RyaW5nKCksIGhhbmRsZSwgc2Fu
ZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQsIFRS
VUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDE1NzA0OSkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTc3Myw3ICsxNzczLDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDoo
aWQgPAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWws
IHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VP
cGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CiAK
ICAgICBfZGF0YS0+X3BhZ2UtPnJlc2V0RHJhZ09wZXJhdGlvbigpOwotICAgIF9kYXRhLT5fcGFn
ZS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9h
cmRdIG5hbWVdKTsKKyAgICBfZGF0YS0+X3BhZ2UtPmRyYWdFbnRlcmVkKGRyYWdEYXRhLCBbW2Ry
YWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKICAgICByZXR1cm4gTlNEcmFn
T3BlcmF0aW9uQ29weTsKIH0KIApAQCAtMTc4Miw3ICsxNzgyLDcgQEAgLSAoTlNEcmFnT3BlcmF0
aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAogICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252
ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsK
ICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xv
Y2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5n
SW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxh
Z3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgX2RhdGEtPl9wYWdlLT5kcmFnVXBkYXRlZCgmZHJhZ0Rh
dGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIF9kYXRh
LT5fcGFnZS0+ZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFz
dGVib2FyZF0gbmFtZV0pOwogICAgIAogICAgIFdlYkNvcmU6OkRyYWdTZXNzaW9uIGRyYWdTZXNz
aW9uID0gX2RhdGEtPl9wYWdlLT5kcmFnU2Vzc2lvbigpOwogICAgIE5TSW50ZWdlciBudW1iZXJP
ZlZhbGlkSXRlbXNGb3JEcm9wID0gZHJhZ1Nlc3Npb24ubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRl
ZDsKQEAgLTE4MDMsNyArMTgwMyw3IEBAIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0Ry
YWdnaW5nSW4KICAgICBJbnRQb2ludCBjbGllbnQoW3NlbGYgY29udmVydFBvaW50OltkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0gZnJvbVZpZXc6bmlsXSk7CiAgICAgSW50UG9pbnQgZ2xv
YmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdp
bmRvd10pKTsKICAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xv
YmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10p
OwotICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZv
IGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOworICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0V4aXRl
ZChkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CiAg
ICAgX2RhdGEtPl9wYWdlLT5yZXNldERyYWdPcGVyYXRpb24oKTsKIH0KIApAQCAtMTg2Nyw3ICsx
ODY3LDcgQEAgLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogICAgIFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQ7CiAg
ICAgY3JlYXRlU2FuZGJveEV4dGVuc2lvbnNGb3JGaWxlVXBsb2FkKFtkcmFnZ2luZ0luZm8gZHJh
Z2dpbmdQYXN0ZWJvYXJkXSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAKLSAgICBfZGF0
YS0+X3BhZ2UtPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQ
YXN0ZWJvYXJkXSBuYW1lXSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lv
bkZvclVwbG9hZCk7CisgICAgX2RhdGEtPl9wYWdlLT5wZXJmb3JtRHJhZyhkcmFnRGF0YSwgW1tk
cmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSwgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAKICAgICByZXR1cm4gWUVTOwogfQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xp
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSopCit2
b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdE
ZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJikKIHsKICAgICBpZiAoYWN0aW9uID09
IERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQpCiAgICAgICAgIG1fcGFnZS0+d2lsbFBlcmZvcm1M
b2FkRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCk7CkBAIC00MiwyMiArNDIsMjIgQEAgdm9pZCBXZWJE
cmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aQogICAgICAgICBtX3BhZ2UtPm1heVBlcmZv
cm1VcGxvYWREcmFnRGVzdGluYXRpb25BY3Rpb24oKTsgLy8gVXBsb2FkIGNhbiBoYXBwZW4gZnJv
bSBhIGRyb3AgZXZlbnQgaGFuZGxlciwgc28gd2Ugc2hvdWxkIHByZXBhcmUgZWFybHkuCiB9CiAK
LXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3Vy
Y2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKikKK3ZvaWQgV2ViRHJhZ0NsaWVu
dDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IElu
dFBvaW50JiwgQ2xpcGJvYXJkJikKIHsKIH0KIAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRy
YWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikKK0RyYWdEZXN0aW5hdGlvbkFj
dGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYpCiB7CiAgICAg
cmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKIH0KIAotRHJhZ1NvdXJjZUFjdGlvbiBX
ZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50
JiAvKndpbmRvd1BvaW50Ki8pCitEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmRyYWdT
b3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKQogewogICAgIHJldHVybiBE
cmFnU291cmNlQWN0aW9uQW55OwogfQogCiAjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JN
KEdUSykKLXZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3Qg
SW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKK3Zv
aWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYsIEZyYW1lJiwgYm9vbCkKIHsKIH0KICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFn
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxNSArNDIsMTUgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2
aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSopIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJj
ZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQqKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rp
b25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSopIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGlu
YXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9u
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3Jl
OjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9p
ZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdl
YkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNl
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFn
ZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpG
cmFtZSYsIGJvb2wgbGlua0RyYWcgPSBmYWxzZSkgT1ZFUlJJREU7CiAKICNpZiBQTEFURk9STShN
QUMpCi0gICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJp
bmcmIHBhc3RlYm9hcmROYW1lLCBET01FbGVtZW50KiwgTlNVUkwqLCBOU1N0cmluZyosIFdlYkNv
cmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURy
YWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBXZWJDb3JlOjpFbGVtZW50Jiwg
Y29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RnJhbWUqKSBPVkVS
UklERTsKICNlbmRpZgogCiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVk
KCkgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAkocmV2
aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZQogICAgIHJldHVybiBi
aXRtYXAucmVsZWFzZSgpOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFn
SW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0
IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiwg
Ym9vbCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1h
Z2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2Jh
bFBvc2l0aW9uLCBDbGlwYm9hcmQmIGNsaXBib2FyZCwgRnJhbWUmLCBib29sKQogewogICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJl
YWJsZUJpdG1hcChkcmFnSW1hZ2UpOwogICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZTsKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0lt
YWdlUgogICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0g
Y2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwotICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgY2xp
cGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRh
dGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBEcmFn
RGF0YSBkcmFnRGF0YShkYXRhT2JqZWN0LmdldCgpLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9z
aXRpb24sIGNsaXBib2FyZC5zb3VyY2VPcGVyYXRpb24oKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRy
YWdDbGllbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkocmV2aXNpb24gMTU3MDQ5KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0Ns
aWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsMjIgKzc2LDIyIEBAIHN0YXRpYyBQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmUKICAgICByZXR1cm4gYml0bWFwLnJlbGVhc2Uo
KTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoUmV0YWluUHRyPE5TSW1hZ2U+
IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJk
KiwgRnJhbWUqIGZyYW1lLCBib29sIGxpbmtEcmFnKQordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFy
dERyYWcoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNv
bnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmIGZyYW1lLCBib29sIGxpbmtEcmFnKQog
ewogICAgIEludFNpemUgYml0bWFwU2l6ZShbaW1hZ2UuZ2V0KCkgc2l6ZV0pOwotICAgIGJpdG1h
cFNpemUuc2NhbGUoZnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgYml0
bWFwU2l6ZS5zY2FsZShmcmFtZS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIFJl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRJbWFnZVRvQml0bWFwKGltYWdl
LmdldCgpLCBiaXRtYXBTaXplKTsKICAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7
CiAgICAgaWYgKCFiaXRtYXAgfHwgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBTZWVtcyB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJl
IG5hbWVkIFN0YXJ0RHJhZywgbm90IFNldERyYWdJbWFnZS4KLSAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RHJhZ0ltYWdlKGZyYW1lLT52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxpbmtEcmFnKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldERyYWdJbWFnZShmcmFtZS52aWV3KCktPmNvbnRlbnRz
VG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxpbmtEcmFnKSk7CiB9CiAKLXN0YXRpYyBXZWJDb3Jl
OjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBXZWJD
b3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICghcmVuZGVyZXItPmlzUmVuZGVySW1hZ2UoKSkK
QEAgLTEwMiwyOSArMTAyLDI3IEBAIHN0YXRpYyBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVk
SW1hZ2UKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1l
bnQgKmVsZW1lbnQsIE5TVVJMICpVUkwsIE5TU3RyaW5nICp0aXRsZSwgV2ViQ29yZTo6RnJhbWUq
KQordm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKikKIHsKLSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAg
QVNTRVJUKHBhc3RlYm9hcmROYW1lID09IFN0cmluZyhOU0RyYWdQYm9hcmQpKTsKIAotICAgIEVs
ZW1lbnQqIGNvcmVFbGVtZW50ID0gY29yZShlbGVtZW50KTsKKyAgICBXZWJDb3JlOjpDYWNoZWRJ
bWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZShlbGVtZW50KTsKIAotICAgIFdlYkNvcmU6OkNhY2hl
ZEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdlKGNvcmVFbGVtZW50KTsKLQotICAgIE5TU3RyaW5n
ICpleHRlbnNpb24gPSBAIiI7CisgICAgU3RyaW5nIGV4dGVuc2lvbjsKICAgICBpZiAoaW1hZ2Up
IHsKICAgICAgICAgZXh0ZW5zaW9uID0gaW1hZ2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9u
KCk7Ci0gICAgICAgIGlmICghW2V4dGVuc2lvbiBsZW5ndGhdKQorICAgICAgICBpZiAoZXh0ZW5z
aW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIVt0
aXRsZSBsZW5ndGhdKSB7Ci0gICAgICAgIHRpdGxlID0gW1tVUkwgcGF0aF0gbGFzdFBhdGhDb21w
b25lbnRdOwotICAgICAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKQotICAgICAgICAgICAgdGl0bGUg
PSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddOworICAgIFN0cmluZyB0aXRsZSA9IGxhYmVs
OworICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdGl0bGUgPSB1cmwubGFzdFBh
dGhDb21wb25lbnQoKTsKKyAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHRpdGxlID0gWyhOU1VSTCAqKXVybCBfd2ViX3VzZXJWaXNpYmxlU3RyaW5nXTsKICAgICB9CiAK
LSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZShjb3JlRWxlbWVudCk7CisgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hp
dmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoJmVsZW1lbnQpOwogCiAgICAgTlNVUkxSZXNw
b25zZSAqcmVzcG9uc2UgPSBpbWFnZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNlKCk7CiAgICAg
CkBAIC0xNDYsNyArMTQ0LDcgQEAgdm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVE
cmFnSQogICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
ZGF0YSgpLCBhcmNoaXZlU2l6ZSk7CiAgICAgICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRl
SGFuZGxlKGFyY2hpdmVIYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOyAgICAgICAgICAg
IAogICAgIH0KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0UHJv
bWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBTdHJpbmco
W3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIFN0cmluZyhleHRlbnNpb24pLCBTdHJpbmco
dGl0bGUpLCBTdHJpbmcoW1tyZXNwb25zZSBVUkxdIGFic29sdXRlU3RyaW5nXSksIFN0cmluZyhb
VVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmddKSwgYXJjaGl2ZUhhbmRsZSwgYXJjaGl2ZVNpemUp
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0UHJvbWlzZWRE
YXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBTdHJpbmcoW3Jlc3Bv
bnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIGV4dGVuc2lvbiwgdGl0bGUsIFN0cmluZyhbW3Jlc3Bv
bnNlIFVSTF0gYWJzb2x1dGVTdHJpbmddKSwgU3RyaW5nKFsoTlNVUkwgKil1cmwgX3dlYl91c2Vy
VmlzaWJsZVN0cmluZ10pLCBhcmNoaXZlSGFuZGxlLCBhcmNoaXZlU2l6ZSkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0MCwxOSAr
MjU0MCwxOSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvCiAKICAg
ICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVk
OgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdE
YXRhKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQo
ZHJhZ0RhdGEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFj
dGlvblVwZGF0ZWQ6Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVy
Zm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnVXBk
YXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5k
cmFnVXBkYXRlZChkcmFnRGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERyYWdD
b250cm9sbGVyQWN0aW9uRXhpdGVkOgotICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCku
ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCku
ZHJhZ0V4aXRlZChkcmFnRGF0YSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29u
dHJvbGxlckFjdGlvblBlcmZvcm1EcmFnOiB7Ci0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9s
bGVyKCkucGVyZm9ybURyYWcoZHJhZ0RhdGEpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTI1NzUsMTUgKzI1NzUsMTUgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJB
Y3RpbwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdTdG9yYWdlTmFtZSwgY2xpZW50UG9zaXRp
b24sIGdsb2JhbFBvc2l0aW9uLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihkcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2spLCBzdGF0aWNfY2FzdDxEcmFnQXBwbGljYXRpb25GbGFncz4oZmxh
Z3MpKTsKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rp
b25FbnRlcmVkOgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVy
ZWQoJmRyYWdEYXRhKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJh
Z0VudGVyZWQoZHJhZ0RhdGEpKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29u
dHJvbGxlckFjdGlvblVwZGF0ZWQ6Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIo
KS5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0YSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FeGl0ZWQ6Ci0gICAgICAgIG1fcGFnZS0+
ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7CisgICAgICAgIG1fcGFnZS0+
ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVkKGRyYWdEYXRhKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25QZXJmb3JtRHJhZzogewpAQCAt
MjU5NSw3ICsyNTk1LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rp
bwogICAgICAgICAgICAgICAgIG1fcGVuZGluZ0Ryb3BFeHRlbnNpb25zRm9yRmlsZVVwbG9hZC5h
cHBlbmQoZXh0ZW5zaW9uKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250
cm9sbGVyKCkucGVyZm9ybURyYWcoZHJhZ0RhdGEpOwogCiAgICAgICAgIC8vIElmIHdlIHN0YXJ0
ZWQgbG9hZGluZyBhIGxvY2FsIGZpbGUsIHRoZSBzYW5kYm94IGV4dGVuc2lvbiB0cmFja2VyIHdv
dWxkIGhhdmUgYWRvcHRlZCB0aGlzCiAgICAgICAgIC8vIHBlbmRpbmcgZHJvcCBzYW5kYm94IGV4
dGVuc2lvbi4gSWYgbm90LCB3ZSdsbCBwbGF5IGl0IHNhZmUgYW5kIGNsZWFyIGl0LgpJbmRleDog
U291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMTAtMDYgIFNhbSBX
ZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBDVFRFOiBVc2UgcmVmZXJlbmNlcyBp
biBhbmQgYXJvdW5kIERyYWdDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRFZmwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRp
b25BY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRFZmw6OmFjdGlv
bk1hc2tGb3JEcmFnKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDbGllbnRFZmw6OnN0YXJ0RHJh
Zyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5oOgorCiAyMDEzLTEw
LTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRnJh
bWVQb2xpY3lGdW5jdGlvbiBzaG91bGQgYmUgYW4gc3RkOjpmdW5jdGlvbgpJbmRleDogU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAJKHJl
dmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNyArMzUsMTcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBEcmFnQ2xpZW50
RWZsOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rp
b24sIERyYWdEYXRhKikKK3ZvaWQgRHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQq
KQordm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1Nv
dXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQmKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLURyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50RWZsOjphY3Rp
b25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCitEcmFnRGVzdGluYXRpb25BY3Rpb24gRHJhZ0NsaWVu
dEVmbDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEmKQogewogICAgIHJldHVybiBEcmFnRGVz
dGluYXRpb25BY3Rpb25Bbnk7CiB9CkBAIC01NSw3ICs1NSw3IEBAIERyYWdTb3VyY2VBY3Rpb24g
RHJhZ0NsaWVudEVmbDo6ZHJhZ1NvdXIKICAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbkFueTsK
IH0KIAotdm9pZCBEcmFnQ2xpZW50RWZsOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKQordm9p
ZCBEcmFnQ2xpZW50RWZsOjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9E
cmFnQ2xpZW50RWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1
cHBvcnQvRHJhZ0NsaWVudEVmbC5oCShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViS2l0
L2VmbC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50RWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDE4ICszNiwxOCBAQAogI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworCiBjbGFzcyBEcmFnQ2xpZW50RWZsIDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQg
ewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKik7
Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpE
cmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBi
b2FyZCopOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKik7CisgICAgdmlydHVhbCB2b2lkIGRyYWdD
b250cm9sbGVyRGVzdHJveWVkKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3Jl
OjpEcmFnRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rp
b24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBX
ZWJDb3JlOjpDbGlwYm9hcmQmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlv
bkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSYpOwogICAgIHZpcnR1
YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2ludCk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBX
ZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxz
ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2
ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wgbGlua0Ry
YWcgPSBmYWxzZSk7CiB9OworCiB9CiAKICNlbmRpZiAvLyBEcmFnQ2xpZW50RWZsX2gKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEzLTEwLTA2ICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMg
aW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25B
Y3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3Vy
Y2VBY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJh
Zyk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKGRyYWdFeGl0ZWRDYWxsYmFjayk6CisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb24pOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYWdf
ZGF0YV9yZWNlaXZlZCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9wKToKKwog
MjAxMy0xMC0wNCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dUS10gVXNlck1lZGlhQ2xpZW50R3RrIG5lZWRzIEFQSSB1cGRhdGUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3Bw
CShyZXZpc2lvbiAxNTcwNDkpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9E
cmFnQ2xpZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTYgKzU1LDE2IEBAIERyYWdD
bGllbnQ6On5EcmFnQ2xpZW50KCkKIHsKIH0KIAotdm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9y
bURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikK
K3ZvaWQgRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYpCiB7CiB9CiAKLXZvaWQgRHJhZ0NsaWVudDo6d2ls
bFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50
JiBzdGFydFBvcywgQ2xpcGJvYXJkKikKK3ZvaWQgRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFn
U291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiBzdGFydFBvcywg
Q2xpcGJvYXJkJikKIHsKICAgICBtX3N0YXJ0UG9zID0gc3RhcnRQb3M7CiB9CiAKLURyYWdEZXN0
aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCitE
cmFnRGVzdGluYXRpb25BY3Rpb24gRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0Rh
dGEmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIERyYWdEZXN0aW5hdGlv
bkFjdGlvbkFueTsKQEAgLTc2LDE0ICs3NiwxNCBAQCBEcmFnU291cmNlQWN0aW9uIERyYWdDbGll
bnQ6OmRyYWdTb3VyY2VBCiAgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKLXZv
aWQgRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9p
bnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgSW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQq
IGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lLCBib29sIGxpbmtEcmFnKQordm9pZCBEcmFnQ2xpZW50
OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdl
T3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCYgY2xpcGJvYXJkLCBG
cmFtZSYgZnJhbWUsIGJvb2wgbGlua0RyYWcpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KGtpdChmcmFtZSkpOwotICAgIFJlZlB0
cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0gY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuZGF0
YU9iamVjdCgpOworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1l
X2dldF93ZWJfdmlldyhraXQoJmZyYW1lKSk7CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRh
dGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKICAgICBHUmVm
UHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3QgPSBhZG9wdEdSZWYoUGFzdGVib2FyZEhlbHBl
cjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoZGF0
YU9iamVjdC5nZXQoKSkpOwogICAgIEdPd25QdHI8R2RrRXZlbnQ+IGN1cnJlbnRFdmVudChndGtf
Z2V0X2N1cnJlbnRfZXZlbnQoKSk7CiAKLSAgICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0
a19kcmFnX2JlZ2luKEdUS19XSURHRVQobV93ZWJWaWV3KSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJh
Z09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSks
IDEsIGN1cnJlbnRFdmVudC5nZXQoKSk7CisgICAgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQgPSBn
dGtfZHJhZ19iZWdpbihHVEtfV0lER0VUKG1fd2ViVmlldyksIHRhcmdldExpc3QuZ2V0KCksIGRy
YWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKGNsaXBib2FyZC5zb3VyY2VPcGVyYXRpb24oKSks
IDEsIGN1cnJlbnRFdmVudC5nZXQoKSk7CiAgICAgd2ViVmlldy0+cHJpdi0+ZHJhZ0FuZERyb3BI
ZWxwZXIuc3RhcnRlZERyYWcoY29udGV4dCwgZGF0YU9iamVjdC5nZXQoKSk7CiAKICAgICAvLyBB
IGRyYWcgc3RhcnRpbmcgc2hvdWxkIHByZXZlbnQgYSBkb3VibGUtY2xpY2sgZnJvbSBoYXBwZW5p
bmcuIFRoaXMgbWlnaHQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Ry
YWdDbGllbnRHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EcmFnQ2xpZW50R3RrLmgJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtNDAs
MjYgKzQwLDI0IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlYKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLSAgICBjbGFzcyBEcmFnQ2xpZW50IDogcHVibGljIFdlYkNv
cmU6OkRyYWdDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgRHJhZ0NsaWVudChXZWJLaXRX
ZWJWaWV3Kik7Ci0gICAgICAgIH5EcmFnQ2xpZW50KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlv
bkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQ
ZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCopOwotICAgICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3Jl
OjpEcmFnRGF0YSopOwotCi0gICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
biBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3
aW5kb3dQb2ludCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpE
cmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ0ltYWdl
T3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBi
b2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKTsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKLSAgICAgICAgV2ViQ29yZTo6SW50
UG9pbnQgbV9zdGFydFBvczsKLSAgICAgICAgV2ViQ29yZTo6RHJhZ0ljb24gbV9kcmFnSWNvbjsK
LSAgICB9OworY2xhc3MgRHJhZ0NsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpEcmFnQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBEcmFnQ2xpZW50KFdlYktpdFdlYlZpZXcqKTsKKyAgICB+RHJhZ0NsaWVu
dCgpOworCisgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhX
ZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
biBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3
aW5kb3dQb2ludCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1h
Z2VSZWYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBldmVudFBvcywgV2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6
RnJhbWUmLCBib29sIGxpbmtEcmFnID0gZmFsc2UpOworCitwcml2YXRlOgorICAgIFdlYktpdFdl
YlZpZXcqIG1fd2ViVmlldzsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N0YXJ0UG9zOworICAg
IFdlYkNvcmU6OkRyYWdJY29uIG1fZHJhZ0ljb247Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDE1NzA0
OSkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUyOSw3ICsxNTI5LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2RyYWdfZGF0YV9nZQogICAgIFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5kcmFnQW5k
RHJvcEhlbHBlci5oYW5kbGVHZXREcmFnRGF0YShjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZv
KTsKIH0KIAotc3RhdGljIHZvaWQgZHJhZ0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0
LCBEcmFnRGF0YSogZHJhZ0RhdGEsIGJvb2wgZHJvcEhhcHBlbmVkKQorc3RhdGljIHZvaWQgZHJh
Z0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSYgZHJhZ0RhdGEsIGJv
b2wgZHJvcEhhcHBlbmVkKQogewogICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBo
YXZlIGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCiAgICAgLy8gaGFwcGVu
cyBpbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2aWV3LgpAQCAtMTU1
Miw3ICsxNTUyLDcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmFnX21vdAog
ICAgICAgICByZXR1cm4gVFJVRTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3Qs
IHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRp
b24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2Fj
dGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2Vi
VmlldyktPmRyYWdDb250cm9sbGVyKCkuZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247
CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJv
bGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3Rh
dHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9u
KSwgdGltZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CkBAIC0xNTY2LDcgKzE1NjYsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX3JlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0
UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFn
T3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBE
cmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCku
ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgRHJhZ09wZXJhdGlvbiBvcGVy
YXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFbnRlcmVkKGRyYWdE
YXRhKS5vcGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRp
b25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiB9CiAKQEAgLTE1Nzks
NyArMTU3OSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm8KIAog
ICAgIEludFBvaW50IHBvc2l0aW9uKHgsIHkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFP
YmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwg
cG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRf
Z2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxl
cigpLnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisgICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRy
b2xsZXIoKS5wZXJmb3JtRHJhZyhkcmFnRGF0YSk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRl
eHQsIFRSVUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEzLTEwLTA2ICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5k
IGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5tbToKKyAgICAgICAgKFdlYkRyYWdDbGll
bnQ6OmFjdGlvbk1hc2tGb3JEcmFnKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQ
ZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50OjpzdGFydERy
YWcpOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKToK
KyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxWaWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOmZvclR5cGU6aW5Db250ZXh0OnN1YnJl
c291cmNlczpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dl
YlZpZXcgZHJhZ2dpbmdFbnRlcmVkOl0pOgorICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nVXBk
YXRlZDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBkcmFnZ2luZ0V4aXRlZDpdKToKKyAgICAgICAg
KC1bV2ViVmlldyBwZXJmb3JtRHJhZ09wZXJhdGlvbjpdKToKKwogMjAxMy0xMC0wNSAgU2FtIFdl
aW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIENUVEU6IFRocmVhZCByZWZlcmVuY2Vz
IHRocm91Z2ggbWFya3VwLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkRyYWdDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsMTMgKzMyLDEzIEBACiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRy
YWdDbGllbnQgewogcHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyopOwotICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFn
RGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNl
QWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCopIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlv
bk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24s
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0Zv
ckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJh
Z0NvbnRyb2xsZXJEZXN0cm95ZWQoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRy
YWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgd2luZG93UG9pbnQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdGFy
dERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJh
Z1BvcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9h
cmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wgbGlua0RyYWcpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSwgRE9NRWxlbWVudCosIE5TVVJMKiwgTlNTdHJpbmcqLCBXZWJDb3JlOjpGcmFtZSopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVm
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1BvcywgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wg
bGlua0RyYWcpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFn
SW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgV2ViQ29yZTo6RWxlbWVudCYsIGNv
bnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJ
REU7CiBwcml2YXRlOgogICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHJldmlz
aW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdD
bGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCiAKKyNpbXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiV2ViRE9NT3BlcmF0aW9ucy5oIgogI2ltcG9ydCAiV2Vi
RnJhbWUuaCIKQEAgLTY2LDE0ICs2NywxNCBAQCBzdGF0aWMgV2ViSFRNTFZpZXcgKmdldFRvcEhU
TUxWaWV3KEZyYW1lCiAgICAgcmV0dXJuIChXZWJIVE1MVmlldyopW1traXQoJmZyYW1lLT5wYWdl
KCktPm1haW5GcmFtZSgpKSBmcmFtZVZpZXddIGRvY3VtZW50Vmlld107CiB9CiAKLVdlYkNvcmU6
OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhX
ZWJDb3JlOjpEcmFnRGF0YSogZHJhZ0RhdGEpCitXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rp
b24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmIGRy
YWdEYXRhKQogewotICAgIHJldHVybiAoV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKVtb
bV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBkcmFnRGVz
dGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLT5wbGF0Zm9ybURhdGEo
KV07CisgICAgcmV0dXJuIChXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24pW1ttX3dlYlZp
ZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdlYlZpZXc6bV93ZWJWaWV3IGRyYWdEZXN0aW5hdGlv
bkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCldOwogfQog
Ci12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdl
YkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKiBk
cmFnRGF0YSkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25B
Y3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbiwgV2ViQ29yZTo6RHJh
Z0RhdGEmIGRyYWdEYXRhKQogewotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVy
XSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbjooV2Vi
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWFjdGlvbiBmb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEtPnBs
YXRmb3JtRGF0YSgpXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2Vi
VmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb246KFdlYkRyYWdE
ZXN0aW5hdGlvbkFjdGlvbilhY3Rpb24gZm9yRHJhZ2dpbmdJbmZvOmRyYWdEYXRhLnBsYXRmb3Jt
RGF0YSgpXTsKIH0KIAogCkBAIC04MywyNyArODQsMjMgQEAgV2ViQ29yZTo6RHJhZ1NvdXJjZUFj
dGlvbiBXZWJEcmFnQ2xpZW50OgogICAgIHJldHVybiAoRHJhZ1NvdXJjZUFjdGlvbilbW21fd2Vi
VmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgZHJhZ1NvdXJjZUFj
dGlvbk1hc2tGb3JQb2ludDp2aWV3UG9pbnRdOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6Ondp
bGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGFjdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG1vdXNlRG93blBvaW50LCBXZWJDb3JlOjpDbGlw
Ym9hcmQqIGNsaXBib2FyZCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291
cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgbW91c2VEb3duUG9pbnQsIFdlYkNvcmU6OkNsaXBib2FyZCYgY2xpcGJvYXJk
KQogewotICAgIEFTU0VSVChjbGlwYm9hcmQpOwotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRl
Rm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb246
KFdlYkRyYWdTb3VyY2VBY3Rpb24pYWN0aW9uIGZyb21Qb2ludDptb3VzZURvd25Qb2ludCB3aXRo
UGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIHBhc3RlYm9hcmRXaXRoTmFtZTpjbGlwYm9hcmQtPnBh
c3RlYm9hcmQoKS5uYW1lKCldXTsKKyAgICBbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRl
cl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uOihXZWJEcmFn
U291cmNlQWN0aW9uKWFjdGlvbiBmcm9tUG9pbnQ6bW91c2VEb3duUG9pbnQgd2l0aFBhc3RlYm9h
cmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJvYXJkLnBhc3RlYm9hcmQo
KS5uYW1lKCldXTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdl
UmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGF0LCBjb25zdCBJbnRQb2ludCYgZXZlbnRQ
b3MsIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit2
b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25z
dCBJbnRQb2ludCYgYXQsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlw
Ym9hcmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBsaW5rRHJhZykKIHsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKGNsaXBib2FyZCk7Ci0gICAgUmV0YWluUHRyPFdl
YkhUTUxWaWV3PiBodG1sVmlldyA9IChXZWJIVE1MVmlldyopW1traXQoZnJhbWUpIGZyYW1lVmll
d10gZG9jdW1lbnRWaWV3XTsKKyAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IGh0bWxWaWV3ID0g
KFdlYkhUTUxWaWV3KilbW2tpdCgmZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAg
ICBpZiAoIVtodG1sVmlldy5nZXQoKSBpc0tpbmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11d
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTlNFdmVudCAqZXZlbnQgPSBsaW5rRHJhZyA/
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgp
IF9tb3VzZURvd25FdmVudF07Ci0gICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9w
SFRNTFZpZXcoZnJhbWUpOworICAgIE5TRXZlbnQgKmV2ZW50ID0gbGlua0RyYWcgPyBmcmFtZS5l
dmVudEhhbmRsZXIoKS5jdXJyZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgpIF9tb3VzZURv
d25FdmVudF07CisgICAgV2ViSFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRNTFZpZXco
JmZyYW1lKTsKICAgICBSZXRhaW5QdHI8V2ViSFRNTFZpZXc+IHRvcFZpZXdQcm90ZWN0b3IgPSB0
b3BIVE1MVmlldzsKICAgICAKICAgICBbdG9wSFRNTFZpZXcgX3N0b3BBdXRvc2Nyb2xsVGltZXJd
OwotICAgIE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2Fy
ZFdpdGhOYW1lOmNsaXBib2FyZC0+cGFzdGVib2FyZCgpLm5hbWUoKV07CisgICAgTlNQYXN0ZWJv
YXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJv
YXJkLnBhc3RlYm9hcmQoKS5uYW1lKCldOwogCiAgICAgTlNJbWFnZSAqZHJhZ05TSW1hZ2UgPSBk
cmFnSW1hZ2UuZ2V0KCk7CiAgICAgV2ViSFRNTFZpZXcgKnNvdXJjZUhUTUxWaWV3ID0gaHRtbFZp
ZXcuZ2V0KCk7CkBAIC0xMjMsMTQgKzEyMCwxMyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0
RHJhZyhEcmFnSW1hZ2VSCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiB9CiAKLXZvaWQg
V2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUsIERPTUVsZW1lbnQqIGVsZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0
aXRsZSwgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKSAKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFy
ZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBXZWJDb3JlOjpG
cmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKHBhc3RlYm9hcmROYW1lKTsKLSAgICBBU1NFUlQo
ZWxlbWVudCk7Ci0gICAgV2ViSFRNTFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1l
KTsgICAgICAKLSAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW2VsZW1lbnQgd2ViQXJjaGl2ZV07
CisgICAgV2ViSFRNTFZpZXcgKnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsKKyAgICBX
ZWJBcmNoaXZlICphcmNoaXZlID0gW2tpdCgmZWxlbWVudCkgd2ViQXJjaGl2ZV07CiAgICAgCi0g
ICAgW1tOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXSBfd2Vi
X2RlY2xhcmVBbmRXcml0ZURyYWdJbWFnZUZvckVsZW1lbnQ6ZWxlbWVudCBVUkw6VVJMIHRpdGxl
OnRpdGxlIGFyY2hpdmU6YXJjaGl2ZSBzb3VyY2U6c291cmNlXTsKKyAgICBbW05TUGFzdGVib2Fy
ZCBwYXN0ZWJvYXJkV2l0aE5hbWU6cGFzdGVib2FyZE5hbWVdIF93ZWJfZGVjbGFyZUFuZFdyaXRl
RHJhZ0ltYWdlRm9yRWxlbWVudDpraXQoJmVsZW1lbnQpIFVSTDp1cmwgdGl0bGU6dGl0bGUgYXJj
aGl2ZTphcmNoaXZlIHNvdXJjZTpzb3VyY2VdOwogfQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRy
YWdDb250cm9sbGVyRGVzdHJveWVkKCkgCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0JKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTk5OCw4ICs5OTgsMTAgQEAgLSAodm9pZClf
cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDooRAogfQogCiAtICh2b2lkKV9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClz
ZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCi17ICAgCi0g
ICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSBraXQoY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCB0ZXh0KS5nZXQoKSk7Cit7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgCisg
ICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFn
bWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkuZ2V0KCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVj
dFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlz
aW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTIwNjUsOCArMjA2NSwxMSBAQCAtIChET01Eb2N1bWVudEZyYWdt
ZW50ICopX2RvY3VtZW50RnJhZ21lCiAgICAgICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNo
b3JdOwogICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQotICAgIGlmIChwYm9hcmRUeXBl
ID09IE5TU3RyaW5nUGJvYXJkVHlwZSkKLSAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KGNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3Ry
aW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLmdl
dCgpKTsKKyAgICBpZiAocGJvYXJkVHlwZSA9PSBOU1N0cmluZ1Bib2FyZFR5cGUpIHsKKyAgICAg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJu
IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQg
c3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2FyZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENh
bm9uaWNhbE1hcHBpbmddKS5nZXQoKSk7CisgICAgfQogICAgIHJldHVybiBuaWw7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE1NzA0OSkKKysr
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDMzMiw3ICs0MzMyLDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQg
PAogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsK
ICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xv
Y2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5n
SW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2lu
Z0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxh
Z3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVy
KCkuZHJhZ0VudGVyZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgcmV0dXJuIGNvcmUoc2Vs
ZiktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpLm9wZXJhdGlvbjsKIH0K
IAogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZv
PilkcmFnZ2luZ0luZm8KQEAgLTQzNDQsNyArNDM0NCw3IEBAIC0gKE5TRHJhZ09wZXJhdGlvbilk
cmFnZ2luZ1VwZGF0ZWQ6KGlkIDwKICAgICBJbnRQb2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBk
cmFnZ2luZ0xvY2F0aW9uXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFn
Z2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKICAgICBEcmFnRGF0
YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFn
T3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBb
c2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwotICAgIHJldHVybiBwYWdlLT5k
cmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKCZkcmFnRGF0YSkub3BlcmF0aW9uOworICAgIHJl
dHVybiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRp
b247CiB9CiAKIC0gKHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJh
Z2dpbmdJbmZvCkBAIC00MzU2LDcgKzQzNTYsNyBAQCAtICh2b2lkKWRyYWdnaW5nRXhpdGVkOihp
ZCA8TlNEcmFnZ2luZ0luCiAgICAgSW50UG9pbnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dp
bmdMb2NhdGlvbl0pOwogICAgIEludFBvaW50IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJ
bmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2VsZiB3aW5kb3ddKSk7CiAgICAgRHJhZ0RhdGEgZHJh
Z0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQsIGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJh
dGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYg
YXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0luZm9dKTsKLSAgICBwYWdlLT5kcmFnQ29udHJvbGxl
cigpLmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsKKyAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRy
YWdFeGl0ZWQoZHJhZ0RhdGEpOwogfQogCiAtIChCT09MKXByZXBhcmVGb3JEcmFnT3BlcmF0aW9u
OihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdnaW5nSW5mbwpAQCAtNDM2OSw3ICs0MzY5LDcgQEAg
LSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlvbjooaWQgPE5TRHJhZwogICAgIEludFBvaW50IGNs
aWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9i
YWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2lu
ZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9i
YWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3Vy
Y2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7
Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoJmRy
YWdEYXRhKTsKKyAgICByZXR1cm4gY29yZShzZWxmKS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJmb3Jt
RHJhZyhkcmFnRGF0YSk7CiB9CiAKIC0gKE5TVmlldyAqKV9oaXRUZXN0OihOU1BvaW50ICopcG9p
bnQgZHJhZ1R5cGVzOihOU1NldCAqKXR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lv
biAxNTcwNDkpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNyBAQAorMjAxMy0xMC0wNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIENUVEU6IFVzZSByZWZlcmVuY2VzIGluIGFuZCBhcm91bmQgRHJhZ0NvbnRy
b2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MjQyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgIChXZWJEcmFnQ2xpZW50
OjphY3Rpb25NYXNrRm9yRHJhZyk6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9y
bURyYWdEZXN0aW5hdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVy
Zm9ybURyYWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFn
KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisKIDIwMTMtMTAt
MDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGcmFt
ZVBvbGljeUZ1bmN0aW9uIHNob3VsZCBiZSBhbiBzdGQ6OmZ1bmN0aW9uCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAkocmV2
aXNpb24gMTU3MDQ5KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDI1ICs2NSwyNSBAQCBXZWJEcmFnQ2xp
ZW50OjpXZWJEcmFnQ2xpZW50KFdlYlZpZXcqIHdlCiAgICAgQVNTRVJUKHdlYlZpZXcpOwogfQog
Ci1EcmFnRGVzdGluYXRpb25BY3Rpb24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFza0ZvckRyYWco
RHJhZ0RhdGEqIGRyYWdEYXRhKQorRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdDbGllbnQ6
OmFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICBDT01QdHI8SVdl
YlVJRGVsZWdhdGU+IGRlbGVnYXRlUmVmID0gMDsKICAgICAvL0RlZmF1bHQgYmVoYXZpb3VyIChl
Zy4gbm8gZGVsZWdhdGUsIG9yIGNhbGxiYWNrIG5vdCBpbXBsZW1lbnRlZCkgaXMgdG8gYWxsb3cK
ICAgICAvL2FueSBhY3Rpb24KICAgICBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb24gbWFzayA9IFdl
YkRyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+
dWlEZWxlZ2F0ZSgmZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPmRyYWdEZXN0
aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0YS0+cGxh
dGZvcm1EYXRhKCksICZtYXNrKTsKKyAgICAgICAgZGVsZWdhdGVSZWYtPmRyYWdEZXN0aW5hdGlv
bkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm8obV93ZWJWaWV3LCBkcmFnRGF0YS5wbGF0Zm9ybURh
dGEoKSwgJm1hc2spOwogCiAgICAgcmV0dXJuIChEcmFnRGVzdGluYXRpb25BY3Rpb24pbWFzazsK
IH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEpCit2b2lk
IFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0
aW5hdGlvbkFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKICAgICAvL0RlZmF1
bHQgZGVsZWdhdGUgZm9yIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGhhcyBubyBz
aWRlIGVmZmVjdHMKICAgICAvL3NvIHdlIGp1c3QgY2FsbCB0aGUgZGVsZWdhdGUsIGFuZCBkb24n
dCB3b3JyeSBhYm91dCB3aGV0aGVyIGl0J3MgaW1wbGVtZW50ZWQKICAgICBDT01QdHI8SVdlYlVJ
RGVsZWdhdGU+IGRlbGVnYXRlUmVmID0gMDsKICAgICBpZiAoU1VDQ0VFREVEKG1fd2ViVmlldy0+
dWlEZWxlZ2F0ZSgmZGVsZWdhdGVSZWYpKSkKLSAgICAgICAgZGVsZWdhdGVSZWYtPndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKG1fd2ViVmlldywgKFdlYkRyYWdEZXN0aW5hdGlvbkFj
dGlvbilhY3Rpb24sIGRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKSk7CisgICAgICAgIGRlbGVnYXRl
UmVmLT53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihtX3dlYlZpZXcsIChXZWJEcmFn
RGVzdGluYXRpb25BY3Rpb24pYWN0aW9uLCBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CiB9CiAK
IERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQ
b2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCkBAIC05NiwyNyArOTYsMjcgQEAgRHJh
Z1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cgogICAgIHJldHVybiAoRHJhZ1Nv
dXJjZUFjdGlvbilhY3Rpb247CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24gYWN0aW9uLCBjb25zdCBJbnRQb2ludCYg
aW50UG9pbnQsIENsaXBib2FyZCogY2xpcGJvYXJkKQordm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxs
UGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiBhY3Rpb24sIGNvbnN0IElu
dFBvaW50JiBpbnRQb2ludCwgQ2xpcGJvYXJkJiBjbGlwYm9hcmQpCiB7CiAgICAgQ09NUHRyPElX
ZWJVSURlbGVnYXRlPiB1aURlbGVnYXRlOwogICAgIGlmICghU1VDQ0VFREVEKG1fd2ViVmlldy0+
dWlEZWxlZ2F0ZSgmdWlEZWxlZ2F0ZSkpKQogICAgICAgICByZXR1cm47CiAKICAgICBQT0lOVCBw
b2ludCA9IGludFBvaW50OwotICAgIENPTVB0cjxJRGF0YU9iamVjdD4gZGF0YU9iamVjdCA9IGNs
aXBib2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBDT01QdHI8SURhdGFPYmpl
Y3Q+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKIAog
ICAgIENPTVB0cjxJRGF0YU9iamVjdD4gbmV3RGF0YU9iamVjdDsKICAgICBIUkVTVUxUIHJlc3Vs
dCA9IHVpRGVsZWdhdGUtPndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihtX3dlYlZpZXcsIHN0
YXRpY19jYXN0PFdlYkRyYWdTb3VyY2VBY3Rpb24+KGFjdGlvbiksICZwb2ludCwgZGF0YU9iamVj
dC5nZXQoKSwgJm5ld0RhdGFPYmplY3QpOwogICAgIGlmIChyZXN1bHQgPT0gU19PSyAmJiBuZXdE
YXRhT2JqZWN0ICE9IGRhdGFPYmplY3QpCi0gICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVib2FyZCY+
KGNsaXBib2FyZC0+cGFzdGVib2FyZCgpKS5zZXRFeHRlcm5hbERhdGFPYmplY3QobmV3RGF0YU9i
amVjdC5nZXQoKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UGFzdGVib2FyZCY+KGNsaXBib2FyZC5w
YXN0ZWJvYXJkKCkpLnNldEV4dGVybmFsRGF0YU9iamVjdChuZXdEYXRhT2JqZWN0LmdldCgpKTsK
IH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBj
b25zdCBJbnRQb2ludCYgaW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnUG9pbnQsIENs
aXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJhbWUsIGJvb2wgaXNMaW5rKQordm9pZCBXZWJE
cmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQb2ludCYg
aW1hZ2VPcmlnaW4sIGNvbnN0IEludFBvaW50JiBkcmFnUG9pbnQsIENsaXBib2FyZCYgY2xpcGJv
YXJkLCBGcmFtZSYgZnJhbWUsIGJvb2wgaXNMaW5rKQogewogICAgIC8vRklYTUU6IEFsbG93IFVJ
RGVsZWdhdGUgdG8gb3ZlcnJpZGUgYmVoYXZpb3VyIDxyZGFyOi8vcHJvYmxlbS81MDE1OTUzPgog
CiAgICAgLy9XZSBsaWJlcmFsbHkgcHJvdGVjdCBldmVyeXRoaW5nLCB0byBwcm90ZWN0IGFnYWlu
c3QgYSBsb2FkIG9jY3VycmluZyBtaWQtZHJhZwotICAgIFJlZlB0cjxGcmFtZT4gZnJhbWVQcm90
ZWN0b3IgPSBmcmFtZTsKKyAgICBSZWZQdHI8RnJhbWU+IGZyYW1lUHJvdGVjdG9yID0gJmZyYW1l
OwogICAgIENPTVB0cjxJRHJhZ1NvdXJjZUhlbHBlcj4gaGVscGVyOwogICAgIENPTVB0cjxJRGF0
YU9iamVjdD4gZGF0YU9iamVjdDsKICAgICBDT01QdHI8V2ViVmlldz4gdmlld1Byb3RlY3RvciA9
IG1fd2ViVmlldzsKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0
RHJhZyhEcmFnSW1hZ2VSCiAgICAgaWYgKEZBSUxFRChXZWJEcm9wU291cmNlOjpjcmVhdGVJbnN0
YW5jZShtX3dlYlZpZXcsICZzb3VyY2UpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZGF0YU9i
amVjdCA9IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBkYXRhT2Jq
ZWN0ID0gY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CiAgICAgaWYgKHNvdXJj
ZSAmJiAoaW1hZ2UgfHwgZGF0YU9iamVjdCkpIHsKICAgICAgICAgaWYgKGltYWdlKSB7CiAgICAg
ICAgICAgICBpZihTVUNDRUVERUQoQ29DcmVhdGVJbnN0YW5jZShDTFNJRF9EcmFnRHJvcEhlbHBl
ciwgMCwgQ0xTQ1RYX0lOUFJPQ19TRVJWRVIsCkBAIC0xNjYsNyArMTY2LDcgQEAgdm9pZCBXZWJE
cmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUgogICAgICAgICAgICAgZWxzZSBpZiAoZWZm
ZWN0ICYgRFJPUEVGRkVDVF9NT1ZFKQogICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IERyYWdP
cGVyYXRpb25Nb3ZlOwogICAgICAgICB9Ci0gICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS5k
cmFnU291cmNlRW5kZWRBdChnZW5lcmF0ZU1vdXNlRXZlbnQobV93ZWJWaWV3LCBmYWxzZSksIG9w
ZXJhdGlvbik7CisgICAgICAgIGZyYW1lLmV2ZW50SGFuZGxlcigpLmRyYWdTb3VyY2VFbmRlZEF0
KGdlbmVyYXRlTW91c2VFdmVudChtX3dlYlZpZXcsIGZhbHNlKSwgb3BlcmF0aW9uKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJE
cmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzA0OSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTIgKzMzLDE0
IEBAIGNsYXNzIFdlYlZpZXc7CiBjbGFzcyBXZWJEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6
OkRyYWdDbGllbnQgewogcHVibGljOgogICAgIFdlYkRyYWdDbGllbnQoV2ViVmlldyopOwotICAg
IHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFn
KFdlYkNvcmU6OkRyYWdEYXRhKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6
RHJhZ0RhdGEqKTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsK
KworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291
cmNlQWN0aW9uIGRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdl
YkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29y
ZTo6Q2xpcGJvYXJkKik7Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFn
SW1hZ2VSZWYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wpOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFn
RGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhJik7CisgICAgdmlydHVhbCB2b2lk
IHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCYpOworICAgIHZpcnR1
YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkJiwg
V2ViQ29yZTo6RnJhbWUmLCBib29sKTsKKwogcHJpdmF0ZToKICAgICBXZWJWaWV3KiBtX3dlYlZp
ZXc7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213611</attachid>
            <date>2013-10-07 12:22:33 -0700</date>
            <delta_ts>2013-10-07 13:34:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122427-20131007122232.patch</filename>
            <type>text/plain</type>
            <size>138186</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEzLTEwLTA2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4g
YW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlIHJlZmVyZW5jZXMgdG8gaW5kaWNhdGUgbm9uLW51bGxuZXNz
IG9mIERyYWdDb250cm9sbGVyIHJlbGF0ZWQKKyAgICAgICAgb2JqZWN0cy4KKwogMjAxMy0xMC0w
NyAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBVUkxNZWRpYVNv
dXJjZS5pZGwgYW5kIFVSTE1lZGlhU3RyZWFtLmlkbCBhcmUgd3JvbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcgKzc0Miw3IEBAIF9fWk43V2ViQ29yZTIyU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDI2Y2EKIF9fWk43V2ViQ29yZTIyU3RvcmFnZUV2ZW50RGlzcGF0
Y2hlcjM0ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudHNUb0ZyYW1lc0VSTlNfOVBhZ2VHcm91cEVS
S04zV1RGNlZlY3RvcklOUzNfNlJlZlB0cklOU181RnJhbWVFRUVMbTBFTlMzXzE1Q3Jhc2hPbk92
ZXJmbG93RUVFUktOUzNfNlN0cmluZ0VTRV9TRV9TRV9QTlNfMTRTZWN1cml0eU9yaWdpbkUKIF9f
Wk43V2ViQ29yZTIyVVJMV2l0aFVzZXJUeXBlZFN0cmluZ0VQOE5TU3RyaW5nUDVOU1VSTAogX19a
TjdXZWJDb3JlMjJjb3VudGVyVmFsdWVGb3JFbGVtZW50RVBOU183RWxlbWVudEUKLV9fWk43V2Vi
Q29yZTIyY3JlYXRlRnJhZ21lbnRGcm9tVGV4dEVQTlNfNVJhbmdlRVJLTjNXVEY2U3RyaW5nRQor
X19aTjdXZWJDb3JlMjJjcmVhdGVGcmFnbWVudEZyb21UZXh0RVJOU181UmFuZ2VFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TXzVGcmFtZUVq
CiBfX1pON1dlYkNvcmUyMmV4dGVybmFsUmVwcmVzZW50YXRpb25FUE5TXzdFbGVtZW50RWoKIF9f
Wk43V2ViQ29yZTIyc3lzdGVtTWFya2V0aW5nVmVyc2lvbkV2CkBAIC0yNDU2LDE1ICsyNDU2LDE1
IEBAIF9fWk5LN1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjM2bWVtb3J5TWFwcGUKIAogI2lmIEVOQUJM
RShEUkFHX1NVUFBPUlQpCiBfX1pON1dlYkNvcmUxMkV2ZW50SGFuZGxlcjE3ZHJhZ1NvdXJjZUVu
ZGVkQXRFUktOU18xOFBsYXRmb3JtTW91c2VFdmVudEVOU18xM0RyYWdPcGVyYXRpb25FCi1fX1pO
SzdXZWJDb3JlMTJFdmVudEhhbmRsZXIxN2V2ZW50TWF5U3RhcnREcmFnRVJLTlNfMThQbGF0Zm9y
bU1vdXNlRXZlbnRFCi1fX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTBkcmFnRXhpdGVkRVBO
U184RHJhZ0RhdGFFCi1fX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTFkcmFnRW50ZXJlZEVQ
TlNfOERyYWdEYXRhRQotX19aTjdXZWJDb3JlMTREcmFnQ29udHJvbGxlcjExZHJhZ1VwZGF0ZWRF
UE5TXzhEcmFnRGF0YUUKLV9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1EcmFn
RVBOU184RHJhZ0RhdGFFCitfX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTBkcmFnRXhpdGVk
RVJOU184RHJhZ0RhdGFFCitfX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTFkcmFnRW50ZXJl
ZEVSTlNfOERyYWdEYXRhRQorX19aTjdXZWJDb3JlMTREcmFnQ29udHJvbGxlcjExZHJhZ1VwZGF0
ZWRFUk5TXzhEcmFnRGF0YUUKK19fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXIxMXBlcmZvcm1E
cmFnRVJOU184RHJhZ0RhdGFFCiBfX1pON1dlYkNvcmUxNERyYWdDb250cm9sbGVyMTRwbGFjZURy
YWdDYXJldEVSS05TXzhJbnRQb2ludEUKIF9fWk43V2ViQ29yZTE0RHJhZ0NvbnRyb2xsZXI5ZHJh
Z0VuZGVkRXYKIF9fWk43V2ViQ29yZThEcmFnRGF0YUMxRVAxMW9iamNfb2JqZWN0UktOU184SW50
UG9pbnRFUzVfTlNfMTNEcmFnT3BlcmF0aW9uRU5TXzIwRHJhZ0FwcGxpY2F0aW9uRmxhZ3NFCiBf
X1pON1dlYkNvcmU4RHJhZ0RhdGFDMUVSS04zV1RGNlN0cmluZ0VSS05TXzhJbnRQb2ludEVTN19O
U18xM0RyYWdPcGVyYXRpb25FTlNfMjBEcmFnQXBwbGljYXRpb25GbGFnc0UKK19fWk5LN1dlYkNv
cmUxMkV2ZW50SGFuZGxlcjE3ZXZlbnRNYXlTdGFydERyYWdFUktOU18xOFBsYXRmb3JtTW91c2VF
dmVudEUKICNlbmRpZgogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwubW0JKHJldmlzaW9uIDE1NzA1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjIsNyArNjIsNyBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRlRG9jdW1lbnRG
CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRlRG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0
OihOU1N0cmluZyAqKXRleHQKIHsKICAgICAvLyBGSVhNRTogU2luY2UgdGhpcyBpcyBub3QgYSBj
b250ZXh0dWFsIGZyYWdtZW50LCBpdCB3b24ndCBoYW5kbGUgd2hpdGVzcGFjZSBwcm9wZXJseS4K
LSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29yZShzZWxmKS0+Y3JlYXRl
UmFuZ2UoKS5nZXQoKSwgdGV4dCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dCgqY29yZShzZWxmKS0+Y3JlYXRlUmFuZ2UoKS5nZXQoKSwgdGV4dCkuZ2V0KCkp
OwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAx
NTcwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0MCw4ICs0NDAsMTEgQEAgU3RyaW5nIEVkaXRvcjo6cGxhaW5UZXh0RnJvbVBhc3Rl
Ym9hcmQoYwogdm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFz
dGVib2FyZCwgYm9vbCBhbGxvd1BsYWluVGV4dCkKIHsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKwog
ICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgmbV9mcmFtZSwgcmFuZ2UsIGFs
bG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudChtX2ZyYW1lLCAqcmFu
Z2UsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBsYWluVGV4dCk7CiAgICAgaWYgKGZyYWdtZW50ICYm
IHNob3VsZEluc2VydEZyYWdtZW50KGZyYWdtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
UGFzdGVkKSkKICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LCBjYW5TbWFydFJlcGxh
Y2VXaXRoUGFzdGVib2FyZCgqcGFzdGVib2FyZCksIGNob3NlUGxhaW5UZXh0KTsKIH0KQEAgLTQ5
Myw3ICs0OTYsMTEgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbgog
CiB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4
dCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UpCiB7Ci0gICAgcmVw
bGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KHNlbGVjdGVk
UmFuZ2UoKS5nZXQoKSwgdGV4dCksIHNlbGVjdFJlcGxhY2VtZW50LCBzbWFydFJlcGxhY2UsIHRy
dWUpOyAKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0ZWRSYW5nZSgpOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJh
Z21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpLCBzZWxlY3RSZXBsYWNl
bWVudCwgc21hcnRSZXBsYWNlLCB0cnVlKTsKIH0KIAogUGFzc1JlZlB0cjxSYW5nZT4gRWRpdG9y
OjpzZWxlY3RlZFJhbmdlKCkKQEAgLTEwNjEsNyArMTA2OCw3IEBAIHZvaWQgRWRpdG9yOjpjdXQo
KQogICAgICAgICAgICAgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogQ29u
dmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNoIE1hYyBhbmQgZGVsZXRlIHRoaXMuCi0g
ICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxl
Y3Rpb24oc2VsZWN0aW9uLmdldCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCAmbV9mcmFtZSwg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CisgICAgICAgICAgICBQYXN0ZWJvYXJk
OjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGlvbiwgY2Fu
U21hcnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBi
b2FyZCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBkaWRXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZCgpOwpAQCAtMTA4NywxNCArMTA5NCwxNCBAQCB2b2lkIEVkaXRvcjo6Y29weSgpCiAj
aWYgKFBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKElPUykpIHx8IFBMQVRGT1JNKEVGTCkKICAg
ICAgICAgICAgIHdyaXRlSW1hZ2VUb1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNv
cHlBbmRQYXN0ZSgpLCAqaW1hZ2VFbGVtZW50LCBkb2N1bWVudCgpLnVybCgpLCBkb2N1bWVudCgp
LnRpdGxlKCkpOwogI2Vsc2UKLSAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSgpLT53cml0ZUltYWdlKGltYWdlRWxlbWVudCwgZG9jdW1lbnQoKS51cmwoKSwgZG9j
dW1lbnQoKS50aXRsZSgpKTsKKyAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlB
bmRQYXN0ZSgpLT53cml0ZUltYWdlKCppbWFnZUVsZW1lbnQsIGRvY3VtZW50KCkudXJsKCksIGRv
Y3VtZW50KCkudGl0bGUoKSk7CiAjZW5kaWYKICAgICAgICAgfSBlbHNlIHsKICNpZiAoUExBVEZP
Uk0oTUFDKSAmJiAhUExBVEZPUk0oSU9TKSkgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICAgICAg
d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQ
YXN0ZSgpKTsKICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogQ29udmVydCBhbGwgb3RoZXIg
cGxhdGZvcm1zIHRvIG1hdGNoIE1hYyBhbmQgZGVsZXRlIHRoaXMuCi0gICAgICAgICAgICBQYXN0
ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oc2VsZWN0ZWRS
YW5nZSgpLmdldCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCAmbV9mcmFtZSwgSW5jbHVkZUlt
YWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CisgICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oKnNlbGVjdGVkUmFuZ2UoKSwgY2FuU21h
cnRDb3B5T3JEZWxldGUoKSwgbV9mcmFtZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2Fy
ZCk7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0KQEAgLTExOTYsNyArMTIwMyw3IEBAIHZvaWQg
RWRpdG9yOjpjb3B5SW1hZ2UoY29uc3QgSGl0VGVzdFJlc3UKICNpZiBQTEFURk9STShNQUMpIHx8
IFBMQVRGT1JNKEVGTCkKICAgICB3cml0ZUltYWdlVG9QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpj
cmVhdGVGb3JDb3B5QW5kUGFzdGUoKSwgKmVsZW1lbnQsIHVybCwgcmVzdWx0LmFsdERpc3BsYXlT
dHJpbmcoKSk7CiAjZWxzZQotICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgp
LT53cml0ZUltYWdlKGVsZW1lbnQsIHVybCwgcmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKSk7Cisg
ICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCktPndyaXRlSW1hZ2UoKmVsZW1l
bnQsIHVybCwgcmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKSk7CiAjZW5kaWYKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDExIEBAIFJl
cGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQKICAgICBpZiAodGV4dCAhPSBl
dnQtPnRleHQoKSB8fCAhZWRpdGFibGVSb290LT5yZW5kZXJlcklzUmljaGx5RWRpdGFibGUoKSkg
ewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudCho
b2xkZXIuZ2V0KCkpOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBldnQtPnRleHQoKSk7Cisg
ICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIGV2dC0+dGV4dCgpKTsK
ICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTgsNyArOTgsMTAgQEAgdm9pZCBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpkb0FwcGx5KAog
ICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obV9zZWxl
Y3Rpb25Ub0JlQ29ycmVjdGVkKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChtX3JhbmdlVG9C
ZUNvcnJlY3RlZC5nZXQoKSwgbV9jb3JyZWN0aW9uKTsKKyAgICBpZiAoIW1fcmFuZ2VUb0JlQ29y
cmVjdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCptX3JhbmdlVG9CZUNvcnJlY3RlZCwg
bV9jb3JyZWN0aW9uKTsKICAgICBpZiAoIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUyLDEyICs3
NTIsOSBAQCBzdGF0aWMgYm9vbCBjb250ZXh0UHJlc2VydmVzTmV3bGluZShjb25zCiAgICAgcmV0
dXJuIGNvbnRhaW5lci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCk7CiB9
CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChS
YW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KFJhbmdlJiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGNvbnRleHQtPm93bmVyRG9jdW1lbnQoKTsKKyAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKICAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50
KCk7CiAgICAgCiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQpAQCAtNzY3LDcgKzc2NCw3IEBAIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20KICAgICBzdHJpbmcucmVwbGFj
ZSgiXHJcbiIsICJcbiIpOwogICAgIHN0cmluZy5yZXBsYWNlKCdccicsICdcbicpOwogCi0gICAg
aWYgKGNvbnRleHRQcmVzZXJ2ZXNOZXdsaW5lKCpjb250ZXh0KSkgeworICAgIGlmIChjb250ZXh0
UHJlc2VydmVzTmV3bGluZShjb250ZXh0KSkgewogICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyaW5nKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
CiAgICAgICAgIGlmIChzdHJpbmcuZW5kc1dpdGgoJ1xuJykpIHsKICAgICAgICAgICAgIFJlZlB0
cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KTsKQEAgLTc4
NCwxNCArNzgxLDE0IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ20K
ICAgICB9CiAKICAgICAvLyBCcmVhayBzdHJpbmcgaW50byBwYXJhZ3JhcGhzLiBFeHRyYSBsaW5l
IGJyZWFrcyB0dXJuIGludG8gZW1wdHkgcGFyYWdyYXBocy4KLSAgICBOb2RlKiBibG9ja05vZGUg
PSBlbmNsb3NpbmdCbG9jayhjb250ZXh0LT5maXJzdE5vZGUoKSk7CisgICAgTm9kZSogYmxvY2tO
b2RlID0gZW5jbG9zaW5nQmxvY2soY29udGV4dC5maXJzdE5vZGUoKSk7CiAgICAgRWxlbWVudCog
YmxvY2sgPSB0b0VsZW1lbnQoYmxvY2tOb2RlKTsKICAgICBib29sIHVzZUNsb25lc09mRW5jbG9z
aW5nQmxvY2sgPSBibG9ja05vZGUKICAgICAgICAgJiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2Rl
KCkKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdOYW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFi
bG9jay0+aGFzVGFnTmFtZShodG1sVGFnKQotICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJv
b3RGb3JQb3NpdGlvbihjb250ZXh0LT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGJvb2wgdXNlTGlu
ZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNvbnRleHQtPnN0YXJ0UG9zaXRpb24o
KSk7CisgICAgICAgICYmIGJsb2NrICE9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNvbnRleHQu
c3RhcnRQb3NpdGlvbigpKTsKKyAgICBib29sIHVzZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChjb250ZXh0LnN0YXJ0UG9zaXRpb24oKSk7CiAKICAgICBWZWN0b3I8U3RyaW5n
PiBsaXN0OwogICAgIHN0cmluZy5zcGxpdCgnXG4nLCB0cnVlLCBsaXN0KTsgLy8gdHJ1ZSBnZXRz
IHVzIGVtcHR5IHN0cmluZ3MgaW4gdGhlIGxpc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
aAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNyBAQCBlbnVtIEVDaGlsZHJlbk9ubHkgeyBJbmNs
dWRlTm9kZSwgQ2hpbGRyCiBlbnVtIEVBYnNvbHV0ZVVSTHMgeyBEb05vdFJlc29sdmVVUkxzLCBS
ZXNvbHZlQWxsVVJMcywgUmVzb2x2ZU5vbkxvY2FsVVJMcyB9OwogZW51bSBFRnJhZ21lbnRTZXJp
YWxpemF0aW9uIHsgSFRNTEZyYWdtZW50U2VyaWFsaXphdGlvbiwgWE1MRnJhZ21lbnRTZXJpYWxp
emF0aW9uIH07CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKK1Bhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSYgY29udGV4dCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29u
dGVudCk7CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5u
ZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ks
IEV4Y2VwdGlvbkNvZGUmKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsNyAr
NTY0LDcgQEAgYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFkZXI6OnJlYWRQbGFpbgogICAgIGlm
ICghYWxsb3dQbGFpblRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgmY29udGV4dCwgW3RleHQgcHJlY29tcG9zZWRTdHJp
bmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pOworICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRG
cm9tVGV4dChjb250ZXh0LCBbdGV4dCBwcmVjb21wb3NlZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBw
aW5nXSk7CiAgICAgaWYgKCFmcmFnbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQzMywxMCArNDMzLDEwIEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6dXBkYXRlUmVuZGVyaW5nKFBh
c3MKICAgICAgICAgZWxlbWVudCgpLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKIH0KIAotYm9vbCBG
aWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhKiBkcmFnRGF0
YSkKK2Jvb2wgRmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcGF0aHM7Ci0gICAgZHJhZ0RhdGEt
PmFzRmlsZW5hbWVzKHBhdGhzKTsKKyAgICBkcmFnRGF0YS5hc0ZpbGVuYW1lcyhwYXRocyk7CiAg
ICAgaWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWUoY29uc3QgU3RyaW5n
JikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBib29sIGdldFR5cGVTcGVjaWZpY1ZhbHVlKFN0cmlu
ZyYpIE9WRVJSSURFOyAvLyBDaGVja2VkIGZpcnN0LCBiZWZvcmUgaW50ZXJuYWwgc3RvcmFnZSBv
ciB0aGUgdmFsdWUgYXR0cmlidXRlLgogICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShjb25zdCBT
dHJpbmcmLCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvcikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCBib29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEq
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBE
cmFnRGF0YSYpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgSWNvbiogaWNvbigpIGNvbnN0IE9WRVJS
SURFOwogICAgIHZpcnR1YWwgYm9vbCBpc0ZpbGVVcGxvYWQoKSBjb25zdCBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlU2hhZG93U3VidHJlZSgpIE9WRVJSSURFOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTcwNTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldEZpbGVzKFBh
c3NSZWZQCiAgICAgbV9pbnB1dFR5cGUtPnNldEZpbGVzKGZpbGVzKTsKIH0KIAotYm9vbCBIVE1M
SW5wdXRFbGVtZW50OjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhKiBkcmFnRGF0
YSkKK2Jvb2wgSFRNTElucHV0RWxlbWVudDo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFn
RGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5yZWNlaXZlRHJvcHBl
ZEZpbGVzKGRyYWdEYXRhKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5oCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1
dEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQzLDcgKzI0Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEZpbGVzKFBhc3NSZWZQdHI8RmlsZUxpc3Q+KTsKIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB0aGUgZ2l2ZW4gRHJhZ0RhdGEgaGFzIG1vcmUgdGhhbiBvbmUgZHJvcHBlZCBmaWxl
cy4KLSAgICBib29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEqKTsKKyAgICBi
b29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmKTsKIAogICAgIEljb24qIGlj
b24oKSBjb25zdDsKICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgZm9yIHJlbmRlcmlu
ZyB0aGUgaW5wdXQgYWN0aXZlIGR1cmluZyBhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0lu
cHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9JbnB1dFR5cGUu
Y3BwCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0lucHV0VHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwNSw3ICs3MDUsNyBAQCBTdHJpbmcgSW5wdXRUeXBlOjpz
YW5pdGl6ZVZhbHVlKGNvbnN0IFN0CiAgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWU7CiB9CiAKLWJv
b2wgSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhKikKK2Jvb2wg
SW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhJikKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0lucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SW5wdXRUeXBlLmgJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSW5w
dXRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBGaWxlTGlzdCogZmlsZXMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RmlsZXMoUGFz
c1JlZlB0cjxGaWxlTGlzdD4pOwogICAgIC8vIFNob3VsZCByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2
ZW4gRHJhZ0RhdGEgaGFzIG1vcmUgdGhhbiBvbmUgZHJvcHBlZCBmaWxlcy4KLSAgICB2aXJ0dWFs
IGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSopOworICAgIHZpcnR1YWwg
Ym9vbCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhJik7CiAgICAgdmlydHVhbCBJ
Y29uKiBpY29uKCkgY29uc3Q7CiAgICAgLy8gU2hvdWxkIHJldHVybiB0cnVlIGlmIHRoZSBjb3Jy
ZXNwb25kaW5nIHJlbmRlcmVyIGZvciBhIHR5cGUgY2FuIGRpc3BsYXkgYSBzdWdnZXN0ZWQgdmFs
dWUuCiAgICAgdmlydHVhbCBib29sIGNhblNldFN1Z2dlc3RlZFZhbHVlKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzMywxMSAr
NTMzLDExIEBAIGNsYXNzIEVtcHR5RHJhZ0NsaWVudCA6IHB1YmxpYyBEcmFnQ2xpZW4KIHB1Ymxp
YzoKICAgICBFbXB0eURyYWdDbGllbnQoKSB7IH0KICAgICB2aXJ0dWFsIH5FbXB0eURyYWdDbGll
bnQoKSB7fQotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikgT1ZFUlJJREUgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBj
b25zdCBJbnRQb2ludCYsIENsaXBib2FyZCopIE9WRVJSSURFIHsgfQotICAgIHZpcnR1YWwgRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKERyYWdEYXRhKikgT1ZFUlJJREUg
eyByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZTsgfQorICAgIHZpcnR1YWwgdm9pZCB3
aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERy
YWdEYXRhJikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1Nv
dXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYp
IE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1h
c2tGb3JEcmFnKERyYWdEYXRhJikgT1ZFUlJJREUgeyByZXR1cm4gRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uTm9uZTsgfQogICAgIHZpcnR1YWwgRHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9u
TWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JikgT1ZFUlJJREUgeyByZXR1cm4gRHJhZ1NvdXJj
ZUFjdGlvbk5vbmU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJlZiwg
Y29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9v
bCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQmLCBGcmFtZSYsIGJv
b2wpIE9WRVJSSURFIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3ll
ZCgpIE9WRVJSSURFIHsgfQogfTsKICNlbmRpZiAvLyBFTkFCTEUoRFJBR19TVVBQT1JUKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ2xpZW50LmgJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw0NCArMzEsMzYg
QEAKICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogCi0jaWYg
UExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBET01FbGVtZW50OwotT0JKQ19DTEFTUyBOU1VSTDsK
LU9CSkNfQ0xBU1MgTlNTdHJpbmc7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IAotICAgIGNsYXNzIENsaXBib2FyZDsKLSAgICBjbGFzcyBEcmFnRGF0YTsKLSAgICBjbGFzcyBG
cmFtZTsKLSAgICBjbGFzcyBJbWFnZTsKLSAgICBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xh
c3MgQ2xpcGJvYXJkOworY2xhc3MgRHJhZ0RhdGE7CitjbGFzcyBFbGVtZW50OworY2xhc3MgRnJh
bWU7CitjbGFzcyBJbWFnZTsKKworY2xhc3MgRHJhZ0NsaWVudCB7CitwdWJsaWM6CisgICAgdmly
dHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlv
biwgRHJhZ0RhdGEmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJj
ZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCYpID0g
MDsKKyAgICB2aXJ0dWFsIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhE
cmFnRGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIERyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFj
dGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcm9vdFZpZXdQb2ludCkgPSAwOwogICAg
IAotICAgIGNsYXNzIERyYWdDbGllbnQgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB2
b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlv
biwgRHJhZ0RhdGEqKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQq
KSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tG
b3JEcmFnKERyYWdEYXRhKikgPSAwOwotCi0gICAgICAgIHZpcnR1YWwgRHJhZ1NvdXJjZUFjdGlv
biBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JiByb290Vmlld1Bv
aW50KSA9IDA7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJ
bWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0
IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sIGxpbmtEcmFnID0g
ZmFsc2UpID0gMDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmFnQ29udHJvbGxl
ckRlc3Ryb3llZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKERyYWdJbWFnZVJl
ZiwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgSW50UG9pbnQmIGV2ZW50
UG9zLCBDbGlwYm9hcmQmLCBGcmFtZSYsIGJvb2wgbGlua0RyYWcgPSBmYWxzZSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkcmFnRW5kZWQoKSB7IH0KIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICAg
ICAgLy8gTWFjLXNwZWNpZmljIGhlbHBlciBmdW5jdGlvbiB0byBhbGxvdyBhY2Nlc3MgdG8gd2Vi
IGFyY2hpdmVzIGFuZCBOU1Bhc3RlYm9hcmQgZXh0cmFzIGluIFdlYktpdC4KLSAgICAgICAgLy8g
VGhpcyBpcyBub3QgYWJzdHJhY3QgYXMgdGhhdCB3b3VsZCByZXF1aXJlIGFub3RoZXIgI2lmIFBM
QVRGT1JNKE1BQykgZm9yIHRoZSBTVkdJbWFnZSBjbGllbnQgZW1wdHkgaW1wbGVudGF0aW9uLgot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmlu
ZyYsIERPTUVsZW1lbnQqLCBOU1VSTCAqLCBOU1N0cmluZyAqLCBGcmFtZSopIHsgfQorICAgIC8v
IE1hYy1zcGVjaWZpYyBoZWxwZXIgZnVuY3Rpb24gdG8gYWxsb3cgYWNjZXNzIHRvIHdlYiBhcmNo
aXZlcyBhbmQgTlNQYXN0ZWJvYXJkIGV4dHJhcyBpbiBXZWJLaXQuCisgICAgLy8gVGhpcyBpcyBu
b3QgYWJzdHJhY3QgYXMgdGhhdCB3b3VsZCByZXF1aXJlIGFub3RoZXIgI2lmIFBMQVRGT1JNKE1B
QykgZm9yIHRoZSBTVkdJbWFnZSBjbGllbnQgZW1wdHkgaW1wbGVudGF0aW9uLgorICAgIHZpcnR1
YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiwgRWxlbWVudCYs
IGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYsIEZyYW1lKikgeyB9CiAjZW5kaWYKLSAgICAgICAg
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkcmFnRW5kZWQoKSB7IH0KIAotICAgICAgICB2aXJ0dWFs
IH5EcmFnQ2xpZW50KCkgeyB9Ci0gICAgfTsKKyAgICB2aXJ0dWFsIH5EcmFnQ2xpZW50KCkgeyB9
Cit9OwogICAgIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gIURyYWdD
bGllbnRfaAorI2VuZGlmIC8vIERyYWdDbGllbnRfaAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDE3ICs4MywxNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQbGF0Zm9ybU1vdXNlRXZlbnQgY3Jl
YXRlTW91c2VFdmVudChEcmFnRGF0YSogZHJhZ0RhdGEpCitzdGF0aWMgUGxhdGZvcm1Nb3VzZUV2
ZW50IGNyZWF0ZU1vdXNlRXZlbnQoRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGJvb2wgc2hp
ZnRLZXksIGN0cmxLZXksIGFsdEtleSwgbWV0YUtleTsKICAgICBzaGlmdEtleSA9IGN0cmxLZXkg
PSBhbHRLZXkgPSBtZXRhS2V5ID0gZmFsc2U7Ci0gICAgaW50IGtleVN0YXRlID0gZHJhZ0RhdGEt
Pm1vZGlmaWVyS2V5U3RhdGUoKTsKKyAgICBpbnQga2V5U3RhdGUgPSBkcmFnRGF0YS5tb2RpZmll
cktleVN0YXRlKCk7CiAgICAgc2hpZnRLZXkgPSBzdGF0aWNfY2FzdDxib29sPihrZXlTdGF0ZSAm
IFBsYXRmb3JtRXZlbnQ6OlNoaWZ0S2V5KTsKICAgICBjdHJsS2V5ID0gc3RhdGljX2Nhc3Q8Ym9v
bD4oa2V5U3RhdGUgJiBQbGF0Zm9ybUV2ZW50OjpDdHJsS2V5KTsKICAgICBhbHRLZXkgPSBzdGF0
aWNfY2FzdDxib29sPihrZXlTdGF0ZSAmIFBsYXRmb3JtRXZlbnQ6OkFsdEtleSk7CiAgICAgbWV0
YUtleSA9IHN0YXRpY19jYXN0PGJvb2w+KGtleVN0YXRlICYgUGxhdGZvcm1FdmVudDo6TWV0YUtl
eSk7CiAKLSAgICByZXR1cm4gUGxhdGZvcm1Nb3VzZUV2ZW50KGRyYWdEYXRhLT5jbGllbnRQb3Np
dGlvbigpLCBkcmFnRGF0YS0+Z2xvYmFsUG9zaXRpb24oKSwKKyAgICByZXR1cm4gUGxhdGZvcm1N
b3VzZUV2ZW50KGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLmdsb2JhbFBvc2l0
aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWZ0QnV0dG9uLCBQbGF0Zm9y
bUV2ZW50OjpNb3VzZU1vdmVkLCAwLCBzaGlmdEtleSwgY3RybEtleSwgYWx0S2V5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWV0YUtleSwgY3VycmVudFRpbWUoKSk7CiB9CkBAIC0x
MTcsMjYgKzExNywyNSBAQCBEcmFnQ29udHJvbGxlcjo6fkRyYWdDb250cm9sbGVyKCkKICAgICBt
X2NsaWVudC5kcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKERyYWdEYXRh
KiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29s
IGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK3N0YXRpYyBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoRHJhZ0RhdGEm
IGRyYWdEYXRhLCBGcmFtZSogZnJhbWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5U
ZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwogICAg
IGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjb250
ZXh0LT5vd25lckRvY3VtZW50KCk7Ci0gICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0NvbXBhdGli
bGVDb250ZW50KCkpIHsKLSAgICAgICAgaWYgKFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBkcmFnRGF0YS0+YXNGcmFnbWVudChmcmFtZSwgY29udGV4dC5nZXQoKSwgYWxs
b3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KSkKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBj
b250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKKyAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNDb21wYXRp
YmxlQ29udGVudCgpKSB7CisgICAgICAgIGlmIChQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gZHJhZ0RhdGEuYXNGcmFnbWVudChmcmFtZSwgY29udGV4dCwgYWxsb3dQbGFp
blRleHQsIGNob3NlUGxhaW5UZXh0KSkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudDsKIAot
ICAgICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RD
b252ZXJ0RmlsZW5hbWVzKSkgeworICAgICAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNVUkwoZnJh
bWUsIERyYWdEYXRhOjpEb05vdENvbnZlcnRGaWxlbmFtZXMpKSB7CiAgICAgICAgICAgICBTdHJp
bmcgdGl0bGU7Ci0gICAgICAgICAgICBTdHJpbmcgdXJsID0gZHJhZ0RhdGEtPmFzVVJMKGZyYW1l
LCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5hbWVzLCAmdGl0bGUpOworICAgICAgICAgICAg
U3RyaW5nIHVybCA9IGRyYWdEYXRhLmFzVVJMKGZyYW1lLCBEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0
RmlsZW5hbWVzLCAmdGl0bGUpOwogICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CiAg
ICAgICAgICAgICAgICAgUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBhbmNob3IgPSBIVE1MQW5j
aG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICBhbmNob3ItPnNl
dEhyZWYodXJsKTsKICAgICAgICAgICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFRyeSB0aGUgcGxhaW4gdGV4dCBmaXJzdCBiZWNhdXNlIHRoZSB1
cmwgbWlnaHQgYmUgbm9ybWFsaXplZCBvciBlc2NhcGVkLgotICAgICAgICAgICAgICAgICAgICBp
ZiAoZHJhZ0RhdGEtPmNvbnRhaW5zUGxhaW5UZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aXRsZSA9IGRyYWdEYXRhLT5hc1BsYWluVGV4dChmcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChkcmFnRGF0YS5jb250YWluc1BsYWluVGV4dCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdGl0bGUgPSBkcmFnRGF0YS5hc1BsYWluVGV4dChmcmFtZSk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aXRs
ZSA9IHVybDsKICAgICAgICAgICAgICAgICB9CkBAIC0xNDgsMTUgKzE0NywxNSBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9Ci0gICAgaWYgKGFsbG93UGxhaW5UZXh0ICYmIGRyYWdEYXRhLT5jb250YWluc1Bs
YWluVGV4dCgpKSB7CisgICAgaWYgKGFsbG93UGxhaW5UZXh0ICYmIGRyYWdEYXRhLmNvbnRhaW5z
UGxhaW5UZXh0KCkpIHsKICAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBkcmFnRGF0YS0+YXNQ
bGFpblRleHQoZnJhbWUpKS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoY29udGV4dCwgZHJhZ0RhdGEuYXNQbGFpblRleHQoZnJhbWUpKS5nZXQoKTsKICAgICB9
CiAKICAgICByZXR1cm4gMDsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0lzTW92ZShG
cmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBEcmFnRGF0YSogZHJhZ0RhdGEpCitib29sIERyYWdD
b250cm9sbGVyOjpkcmFnSXNNb3ZlKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIERyYWdEYXRh
JiBkcmFnRGF0YSkKIHsKICAgICByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFn
SW5pdGlhdG9yICYmIHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5p
c1JhbmdlKCkgJiYgIWlzQ29weUtleURvd24oZHJhZ0RhdGEpOwogfQpAQCAtMTc2LDE5ICsxNzUs
MTcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0VuZGVkKCkKICAgICBtX2NsaWVudC5kcmFn
RW5kZWQoKTsKIH0KIAotRHJhZ1Nlc3Npb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdFbnRlcmVkKERy
YWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdTZXNzaW9uIERyYWdDb250cm9sbGVyOjpkcmFnRW50ZXJl
ZChEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgcmV0dXJuIGRyYWdFbnRlcmVkT3JVcGRhdGVk
KGRyYWdEYXRhKTsKIH0KIAotdm9pZCBEcmFnQ29udHJvbGxlcjo6ZHJhZ0V4aXRlZChEcmFnRGF0
YSogZHJhZ0RhdGEpCit2b2lkIERyYWdDb250cm9sbGVyOjpkcmFnRXhpdGVkKERyYWdEYXRhJiBk
cmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotCiAgICAgaWYgKFJlZlB0cjxGcmFt
ZVZpZXc+IHYgPSBtX3BhZ2UubWFpbkZyYW1lKCkudmlldygpKSB7CiAgICAgICAgIENsaXBib2Fy
ZEFjY2Vzc1BvbGljeSBwb2xpY3kgPSAoIW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8IG1fZG9jdW1l
bnRVbmRlck1vdXNlLT5zZWN1cml0eU9yaWdpbigpLT5pc0xvY2FsKCkpID8gQ2xpcGJvYXJkUmVh
ZGFibGUgOiBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlOwotICAgICAgICBSZWZQdHI8Q2xpcGJvYXJk
PiBjbGlwYm9hcmQgPSBDbGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKHBvbGljeSwgKmRy
YWdEYXRhKTsKLSAgICAgICAgY2xpcGJvYXJkLT5zZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEt
PmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKTsKKyAgICAgICAgUmVmUHRyPENsaXBib2Fy
ZD4gY2xpcGJvYXJkID0gQ2xpcGJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChwb2xpY3ksIGRy
YWdEYXRhKTsKKyAgICAgICAgY2xpcGJvYXJkLT5zZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEu
ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpOwogICAgICAgICBtX3BhZ2UubWFpbkZyYW1l
KCkuZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0FuZERyb3AoY3JlYXRlTW91c2VFdmVudChkcmFn
RGF0YSksIGNsaXBib2FyZC5nZXQoKSk7CiAgICAgICAgIGNsaXBib2FyZC0+c2V0QWNjZXNzUG9s
aWN5KENsaXBib2FyZE51bWIpOyAgICAvLyBpbnZhbGlkYXRlIGNsaXBib2FyZCBoZXJlIGZvciBz
ZWN1cml0eQogICAgIH0KQEAgLTE5OCwyMyArMTk1LDIyIEBAIHZvaWQgRHJhZ0NvbnRyb2xsZXI6
OmRyYWdFeGl0ZWQoRHJhZ0RhdGEKICAgICBtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlID0g
MDsKIH0KIAotRHJhZ1Nlc3Npb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdVcGRhdGVkKERyYWdEYXRh
KiBkcmFnRGF0YSkKK0RyYWdTZXNzaW9uIERyYWdDb250cm9sbGVyOjpkcmFnVXBkYXRlZChEcmFn
RGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgcmV0dXJuIGRyYWdFbnRlcmVkT3JVcGRhdGVkKGRyYWdE
YXRhKTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWcoRHJhZ0RhdGEqIGRy
YWdEYXRhKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWcoRHJhZ0RhdGEmIGRyYWdE
YXRhKQogewotICAgIEFTU0VSVChkcmFnRGF0YSk7Ci0gICAgbV9kb2N1bWVudFVuZGVyTW91c2Ug
PSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdEYXRhLT5jbGllbnRQb3Np
dGlvbigpKTsKKyAgICBtX2RvY3VtZW50VW5kZXJNb3VzZSA9IG1fcGFnZS5tYWluRnJhbWUoKS5k
b2N1bWVudEF0UG9pbnQoZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24oKSk7CiAgICAgaWYgKChtX2Ry
YWdEZXN0aW5hdGlvbkFjdGlvbiAmIERyYWdEZXN0aW5hdGlvbkFjdGlvbkRIVE1MKSAmJiBtX2Rv
Y3VtZW50SXNIYW5kbGluZ0RyYWcpIHsKICAgICAgICAgbV9jbGllbnQud2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uREhUTUwsIGRyYWdEYXRhKTsK
ICAgICAgICAgUmVmPE1haW5GcmFtZT4gbWFpbkZyYW1lKG1fcGFnZS5tYWluRnJhbWUoKSk7CiAg
ICAgICAgIGJvb2wgcHJldmVudGVkRGVmYXVsdCA9IGZhbHNlOwogICAgICAgICBpZiAobWFpbkZy
YW1lLT52aWV3KCkpIHsKICAgICAgICAgICAgIC8vIFNlbmRpbmcgYW4gZXZlbnQgY2FuIHJlc3Vs
dCBpbiB0aGUgZGVzdHJ1Y3Rpb24gb2YgdGhlIHZpZXcgYW5kIHBhcnQuCi0gICAgICAgICAgICBS
ZWZQdHI8Q2xpcGJvYXJkPiBjbGlwYm9hcmQgPSBDbGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmRE
cm9wKENsaXBib2FyZFJlYWRhYmxlLCAqZHJhZ0RhdGEpOwotICAgICAgICAgICAgY2xpcGJvYXJk
LT5zZXRTb3VyY2VPcGVyYXRpb24oZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aygpKTsKKyAgICAgICAgICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2Fy
ZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoQ2xpcGJvYXJkUmVhZGFibGUsIGRyYWdEYXRhKTsKKyAg
ICAgICAgICAgIGNsaXBib2FyZC0+c2V0U291cmNlT3BlcmF0aW9uKGRyYWdEYXRhLmRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzaygpKTsKICAgICAgICAgICAgIHByZXZlbnRlZERlZmF1bHQgPSBt
YWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLnBlcmZvcm1EcmFnQW5kRHJvcChjcmVhdGVNb3VzZUV2
ZW50KGRyYWdEYXRhKSwgY2xpcGJvYXJkLmdldCgpKTsKICAgICAgICAgICAgIGNsaXBib2FyZC0+
c2V0QWNjZXNzUG9saWN5KENsaXBib2FyZE51bWIpOyAvLyBJbnZhbGlkYXRlIGNsaXBib2FyZCBo
ZXJlIGZvciBzZWN1cml0eQogICAgICAgICB9CkBAIC0yMzUsNyArMjMxLDcgQEAgYm9vbCBEcmFn
Q29udHJvbGxlcjo6cGVyZm9ybURyYWcoRHJhZ0RhdAogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGlu
YXRpb25BY3Rpb25Mb2FkLCBkcmFnRGF0YSk7Ci0gICAgbV9wYWdlLm1haW5GcmFtZSgpLmxvYWRl
cigpLmxvYWQoRnJhbWVMb2FkUmVxdWVzdCgmbV9wYWdlLm1haW5GcmFtZSgpLCBSZXNvdXJjZVJl
cXVlc3QoZHJhZ0RhdGEtPmFzVVJMKCZtX3BhZ2UubWFpbkZyYW1lKCkpKSkpOworICAgIG1fcGFn
ZS5tYWluRnJhbWUoKS5sb2FkZXIoKS5sb2FkKEZyYW1lTG9hZFJlcXVlc3QoJm1fcGFnZS5tYWlu
RnJhbWUoKSwgUmVzb3VyY2VSZXF1ZXN0KGRyYWdEYXRhLmFzVVJMKCZtX3BhZ2UubWFpbkZyYW1l
KCkpKSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yNTAsMTAgKzI0Niw5IEBAIHZvaWQg
RHJhZ0NvbnRyb2xsZXI6Om1vdXNlTW92ZWRJbnRvRG9jdW0KICAgICBtX2RvY3VtZW50VW5kZXJN
b3VzZSA9IG5ld0RvY3VtZW50OwogfQogCi1EcmFnU2Vzc2lvbiBEcmFnQ29udHJvbGxlcjo6ZHJh
Z0VudGVyZWRPclVwZGF0ZWQoRHJhZ0RhdGEqIGRyYWdEYXRhKQorRHJhZ1Nlc3Npb24gRHJhZ0Nv
bnRyb2xsZXI6OmRyYWdFbnRlcmVkT3JVcGRhdGVkKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAg
ICBBU1NFUlQoZHJhZ0RhdGEpOwotICAgIG1vdXNlTW92ZWRJbnRvRG9jdW1lbnQobV9wYWdlLm1h
aW5GcmFtZSgpLmRvY3VtZW50QXRQb2ludChkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSkpOwor
ICAgIG1vdXNlTW92ZWRJbnRvRG9jdW1lbnQobV9wYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50QXRQ
b2ludChkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKSk7CiAKICAgICBtX2RyYWdEZXN0aW5hdGlv
bkFjdGlvbiA9IG1fY2xpZW50LmFjdGlvbk1hc2tGb3JEcmFnKGRyYWdEYXRhKTsKICAgICBpZiAo
bV9kcmFnRGVzdGluYXRpb25BY3Rpb24gPT0gRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uTm9uZSkgewpA
QCAtMzAxLDEwICsyOTYsOCBAQCBzdGF0aWMgRWxlbWVudCogZWxlbWVudFVuZGVyTW91c2UoRG9j
dW1lCiAgICAgcmV0dXJuIHRvRWxlbWVudChuKTsKIH0KIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6
dHJ5RG9jdW1lbnREcmFnKERyYWdEYXRhKiBkcmFnRGF0YSwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IGFjdGlvbk1hc2ssIERyYWdTZXNzaW9uJiBkcmFnU2Vzc2lvbikKK2Jvb2wgRHJhZ0NvbnRyb2xs
ZXI6OnRyeURvY3VtZW50RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEsIERyYWdEZXN0aW5hdGlvbkFj
dGlvbiBhY3Rpb25NYXNrLCBEcmFnU2Vzc2lvbiYgZHJhZ1Nlc3Npb24pCiB7Ci0gICAgQVNTRVJU
KGRyYWdEYXRhKTsKLQogICAgIGlmICghbV9kb2N1bWVudFVuZGVyTW91c2UpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMzM1LDEyICszMjgsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6
dHJ5RG9jdW1lbnREcmFnKERyYQogICAgIH0KIAogICAgIGlmICgoYWN0aW9uTWFzayAmIERyYWdE
ZXN0aW5hdGlvbkFjdGlvbkVkaXQpICYmIGNhblByb2Nlc3NEcmFnKGRyYWdEYXRhKSkgewotICAg
ICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zQ29sb3IoKSkgeworICAgICAgICBpZiAoZHJhZ0Rh
dGEuY29udGFpbnNDb2xvcigpKSB7CiAgICAgICAgICAgICBkcmFnU2Vzc2lvbi5vcGVyYXRpb24g
PSBEcmFnT3BlcmF0aW9uR2VuZXJpYzsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKLSAgICAgICAgSW50UG9pbnQgcG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVu
dHMoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOworICAgICAgICBJbnRQb2ludCBwb2ludCA9
IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKTsK
ICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRVbmRlck1vdXNlKG1fZG9jdW1lbnRV
bmRlck1vdXNlLmdldCgpLCBwb2ludCk7CiAgICAgICAgIGlmICghZWxlbWVudCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTM2MCw3ICszNTMsNyBAQCBib29sIERyYWdDb250cm9sbGVy
Ojp0cnlEb2N1bWVudERyYWcoRHJhCiAgICAgICAgIGRyYWdTZXNzaW9uLm1vdXNlSXNPdmVyRmls
ZUlucHV0ID0gbV9maWxlSW5wdXRFbGVtZW50VW5kZXJNb3VzZTsKICAgICAgICAgZHJhZ1Nlc3Np
b24ubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZCA9IDA7CiAKLSAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZGaWxlcyA9IGRyYWdEYXRhLT5udW1iZXJPZkZpbGVzKCk7CisgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mRmlsZXMgPSBkcmFnRGF0YS5udW1iZXJPZkZpbGVzKCk7CiAgICAgICAgIGlmICht
X2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKSB7CiAgICAgICAgICAgICBpZiAobV9maWxlSW5w
dXRFbGVtZW50VW5kZXJNb3VzZS0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkpCiAgICAgICAgICAg
ICAgICAgZHJhZ1Nlc3Npb24ubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZCA9IDA7CkBAIC0zOTcs
MTAgKzM5MCw5IEBAIERyYWdTb3VyY2VBY3Rpb24gRHJhZ0NvbnRyb2xsZXI6OmRlbGVnYXQKICAg
ICByZXR1cm4gbV9kcmFnU291cmNlQWN0aW9uOwogfQogCi1EcmFnT3BlcmF0aW9uIERyYWdDb250
cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdPcGVyYXRp
b24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQoRHJhZ0RhdGEmIGRyYWdEYXRhKQog
ewotICAgIEFTU0VSVChkcmFnRGF0YSk7Ci0gICAgRG9jdW1lbnQqIGRvYyA9IG1fcGFnZS5tYWlu
RnJhbWUoKS5kb2N1bWVudEF0UG9pbnQoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOworICAg
IERvY3VtZW50KiBkb2MgPSBtX3BhZ2UubWFpbkZyYW1lKCkuZG9jdW1lbnRBdFBvaW50KGRyYWdE
YXRhLmNsaWVudFBvc2l0aW9uKCkpOwogCiAgICAgYm9vbCBwbHVnaW5Eb2N1bWVudEFjY2VwdHNE
cmFncyA9IGZhbHNlOwogCkBAIC00MjgsMTggKzQyMCwxNiBAQCBzdGF0aWMgYm9vbCBzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChGcmFtCiAgICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCkuaXNO
b25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKLWJv
b2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVy
RnJhbWUsIERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRyb2xsZXI6OmRpc3BhdGNo
VGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVyRnJhbWUsIERyYWdEYXRhJiBkcmFnRGF0YSkK
IHsKICAgICBBU1NFUlQobV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5oYXNDYXJldCgpKTsK
LSAgICBTdHJpbmcgdGV4dCA9IG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSA/ICIiIDogZHJhZ0RhdGEtPmFzUGxhaW5UZXh0KGlubmVyRnJhbWUp
OworICAgIFN0cmluZyB0ZXh0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpID8gZW1wdHlTdHJpbmcoKSA6IGRyYWdEYXRhLmFzUGxhaW5UZXh0
KGlubmVyRnJhbWUpOwogICAgIE5vZGUqIHRhcmdldCA9IGlubmVyRnJhbWUtPmVkaXRvcigpLmZp
bmRFdmVudFRhcmdldEZyb20obV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5jYXJldFBvc2l0
aW9uKCkpOwogICAgIHJldHVybiB0YXJnZXQtPmRpc3BhdGNoRXZlbnQoVGV4dEV2ZW50OjpjcmVh
dGVGb3JEcm9wKGlubmVyRnJhbWUtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpLCB0ZXh0KSwgSUdO
T1JFX0VYQ0VQVElPTik7CiB9CiAKLWJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERy
YWcoRHJhZ0RhdGEqIGRyYWdEYXRhKQorYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0
RHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKLQogICAg
IFJlZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBmaWxlSW5wdXQgPSBtX2ZpbGVJbnB1dEVsZW1lbnRV
bmRlck1vdXNlOwogICAgIGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKSB7CiAgICAg
ICAgIG1fZmlsZUlucHV0RWxlbWVudFVuZGVyTW91c2UtPnNldENhblJlY2VpdmVEcm9wcGVkRmls
ZXMoZmFsc2UpOwpAQCAtNDQ5LDcgKzQzOSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNs
dWRlRWRpdERyYWcoRHIKICAgICBpZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBJbnRQb2ludCBwb2ludCA9IG1fZG9jdW1lbnRVbmRlck1vdXNl
LT52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCkpOwor
ICAgIEludFBvaW50IHBvaW50ID0gbV9kb2N1bWVudFVuZGVyTW91c2UtPnZpZXcoKS0+d2luZG93
VG9Db250ZW50cyhkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKTsKICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZWxlbWVudFVuZGVyTW91c2UobV9kb2N1bWVudFVuZGVyTW91c2UuZ2V0KCksIHBvaW50
KTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1OSw4ICs0
NDksOCBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKERyCiAgICAgaWYg
KG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuaGFzQ2FyZXQoKSAmJiAhZGlzcGF0Y2hUZXh0
SW5wdXRFdmVudEZvcihpbm5lckZyYW1lLmdldCgpLCBkcmFnRGF0YSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0NvbG9yKCkpIHsKLSAgICAgICAg
Q29sb3IgY29sb3IgPSBkcmFnRGF0YS0+YXNDb2xvcigpOworICAgIGlmIChkcmFnRGF0YS5jb250
YWluc0NvbG9yKCkpIHsKKyAgICAgICAgQ29sb3IgY29sb3IgPSBkcmFnRGF0YS5hc0NvbG9yKCk7
CiAgICAgICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBSZWZQdHI8UmFuZ2U+IGlubmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwpAQCAtNDczLDcgKzQ2Myw3IEBAIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0ZpbGVzKCkgJiYgZmlsZUlucHV0KSB7Cisg
ICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMoKSAmJiBmaWxlSW5wdXQpIHsKICAgICAgICAg
Ly8gZmlsZUlucHV0IHNob3VsZCBiZSB0aGUgZWxlbWVudCB3ZSBoaXQgdGVzdGVkIGZvciwgdW5s
ZXNzIGl0IHdhcyBtYWRlCiAgICAgICAgIC8vIGRpc3BsYXk6bm9uZSBpbiBhIGRyb3AgZXZlbnQg
aGFuZGxlci4KICAgICAgICAgQVNTRVJUKGZpbGVJbnB1dCA9PSBlbGVtZW50IHx8ICFmaWxlSW5w
dXQtPnJlbmRlcmVyKCkpOwpAQCAtNDk3LDExICs0ODcsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgIC8vIG1hbnVhbGx5IGNvbnRyb2xsaW5nIGRyYWcg
YmVoYXZpb3VyCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
Q2FjaGVkUmVzb3VyY2VMb2FkZXIqIGNhY2hlZFJlc291cmNlTG9hZGVyID0gcmFuZ2UtPm93bmVy
RG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIFJlc291cmNlQ2FjaGVWYWxp
ZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3NvcihjYWNoZWRSZXNvdXJjZUxvYWRl
cik7CiAgICAgaWYgKGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRh
KSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29s
IGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsIGlubmVy
RnJhbWUuZ2V0KCksIHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CisgICAgICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0Rh
dGEoZHJhZ0RhdGEsIGlubmVyRnJhbWUuZ2V0KCksICpyYW5nZSwgdHJ1ZSwgY2hvc2VQbGFpblRl
eHQpOwogICAgICAgICBpZiAoIWZyYWdtZW50IHx8ICFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91
bGRJbnNlcnRGcmFnbWVudChmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbkRyb3Bw
ZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTUxMSwxMiAr
NTAyLDEyIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAg
ICAgICAgIC8vIE5TVGV4dFZpZXcgYmVoYXZpb3IgaXMgdG8gYWx3YXlzIHNtYXJ0IGRlbGV0ZSBv
biBtb3ZpbmcgYSBzZWxlY3Rpb24sCiAgICAgICAgICAgICAvLyBidXQgb25seSB0byBzbWFydCBp
bnNlcnQgaWYgdGhlIHNlbGVjdGlvbiBncmFudWxhcml0eSBpcyB3b3JkIGdyYW51bGFyaXR5Lgog
ICAgICAgICAgICAgYm9vbCBzbWFydERlbGV0ZSA9IGlubmVyRnJhbWUtPmVkaXRvcigpLnNtYXJ0
SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwotICAgICAgICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNt
YXJ0RGVsZXRlICYmIGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29y
ZEdyYW51bGFyaXR5ICYmIGRyYWdEYXRhLT5jYW5TbWFydFJlcGxhY2UoKTsKKyAgICAgICAgICAg
IGJvb2wgc21hcnRJbnNlcnQgPSBzbWFydERlbGV0ZSAmJiBpbm5lckZyYW1lLT5zZWxlY3Rpb24o
KS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSAmJiBkcmFnRGF0YS5jYW5TbWFydFJl
cGxhY2UoKTsKICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGZyYWdtZW50LCBkcmFnQ2FyZXQuYmFzZSgpLCBzbWFydEluc2VydCwgc21hcnREZWxl
dGUpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0Ry
YWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpIHsKICAg
ICAgICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0
aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCB8IFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZzsKLSAgICAgICAgICAgICAgICBpZiAo
ZHJhZ0RhdGEtPmNhblNtYXJ0UmVwbGFjZSgpKQorICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0
YS5jYW5TbWFydFJlcGxhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlOwogICAgICAgICAgICAgICAgIGlmIChj
aG9zZVBsYWluVGV4dCkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZTsKQEAgLTUyNCwxNCArNTE1LDE0IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoRHIKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0gZWxzZSB7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gZHJhZ0RhdGEtPmFzUGxhaW5U
ZXh0KGlubmVyRnJhbWUuZ2V0KCkpOworICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFz
UGxhaW5UZXh0KGlubmVyRnJhbWUuZ2V0KCkpOwogICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkg
fHwgIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbkRyb3BwZWQpKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KIAogICAgICAgICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CiAgICAgICAg
IGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQs
IHJhbmdlLCBwb2ludCkpCi0gICAgICAgICAgICBhcHBseUNvbW1hbmQoUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQocmFuZ2UuZ2V0KCksIHRleHQpLCAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVj
dFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUgfCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcpKTsKKyAgICAgICAgICAgIGFwcGx5
Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJN
b3VzZSwgY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpLCAgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
Ok1hdGNoU3R5bGUgfCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcpKTsK
ICAgICB9CiAKICAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewpAQCAtNTQyLDE0ICs1MzMs
MTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhEcgogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIERyYWdDb250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0
YSogZHJhZ0RhdGEpCitib29sIERyYWdDb250cm9sbGVyOjpjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0
YSYgZHJhZ0RhdGEpCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKLQotICAgIGlmICghZHJhZ0Rh
dGEtPmNvbnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSkKKyAgICBpZiAoIWRyYWdEYXRhLmNvbnRh
aW5zQ29tcGF0aWJsZUNvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW50
UG9pbnQgcG9pbnQgPSBtX3BhZ2UubWFpbkZyYW1lKCkudmlldygpLT53aW5kb3dUb0NvbnRlbnRz
KGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpKTsKKyAgICBJbnRQb2ludCBwb2ludCA9IG1fcGFn
ZS5tYWluRnJhbWUoKS52aWV3KCktPndpbmRvd1RvQ29udGVudHMoZHJhZ0RhdGEuY2xpZW50UG9z
aXRpb24oKSk7CiAgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBIaXRUZXN0UmVzdWx0KHBvaW50
KTsKICAgICBpZiAoIW1fcGFnZS5tYWluRnJhbWUoKS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNTU5LDcgKzU0OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OmNhblByb2Nlc3NEcmFnKERyYWcKICAgICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGRyYWdEYXRhLT5jb250YWluc0Zp
bGVzKCkgJiYgYXNGaWxlSW5wdXQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKSkKKyAgICBp
ZiAoZHJhZ0RhdGEuY29udGFpbnNGaWxlcygpICYmIGFzRmlsZUlucHV0KHJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKHJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKS0+aXNQbHVnaW5FbGVtZW50KCkpIHsKQEAgLTU5NCw5ICs1ODMs
OCBAQCBzdGF0aWMgRHJhZ09wZXJhdGlvbiBkZWZhdWx0T3BlcmF0aW9uRm9yCiAgICAgcmV0dXJu
IERyYWdPcGVyYXRpb25HZW5lcmljOwogfQogCi1ib29sIERyYWdDb250cm9sbGVyOjp0cnlESFRN
TERyYWcoRHJhZ0RhdGEqIGRyYWdEYXRhLCBEcmFnT3BlcmF0aW9uJiBvcGVyYXRpb24pCitib29s
IERyYWdDb250cm9sbGVyOjp0cnlESFRNTERyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhLCBEcmFnT3Bl
cmF0aW9uJiBvcGVyYXRpb24pCiB7Ci0gICAgQVNTRVJUKGRyYWdEYXRhKTsKICAgICBBU1NFUlQo
bV9kb2N1bWVudFVuZGVyTW91c2UpOwogICAgIFJlZjxNYWluRnJhbWU+IG1haW5GcmFtZShtX3Bh
Z2UubWFpbkZyYW1lKCkpOwogICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZpZXdQcm90ZWN0b3IgPSBt
YWluRnJhbWUtPnZpZXcoKTsKQEAgLTYwNCw4ICs1OTIsOCBAQCBib29sIERyYWdDb250cm9sbGVy
Ojp0cnlESFRNTERyYWcoRHJhZ0RhCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIENsaXBi
b2FyZEFjY2Vzc1BvbGljeSBwb2xpY3kgPSBtX2RvY3VtZW50VW5kZXJNb3VzZS0+c2VjdXJpdHlP
cmlnaW4oKS0+aXNMb2NhbCgpID8gQ2xpcGJvYXJkUmVhZGFibGUgOiBDbGlwYm9hcmRUeXBlc1Jl
YWRhYmxlOwotICAgIFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3Jl
YXRlRm9yRHJhZ0FuZERyb3AocG9saWN5LCAqZHJhZ0RhdGEpOwotICAgIERyYWdPcGVyYXRpb24g
c3JjT3BNYXNrID0gZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpOworICAg
IFJlZlB0cjxDbGlwYm9hcmQ+IGNsaXBib2FyZCA9IENsaXBib2FyZDo6Y3JlYXRlRm9yRHJhZ0Fu
ZERyb3AocG9saWN5LCBkcmFnRGF0YSk7CisgICAgRHJhZ09wZXJhdGlvbiBzcmNPcE1hc2sgPSBk
cmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKTsKICAgICBjbGlwYm9hcmQtPnNl
dFNvdXJjZU9wZXJhdGlvbihzcmNPcE1hc2spOwogCiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2
ZW50ID0gY3JlYXRlTW91c2VFdmVudChkcmFnRGF0YSk7CkBAIC02NjQsMTkgKzY1MiwxNyBAQCBF
bGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVuCiAgICAgcmV0dXJuIChzdGF0
ZS50eXBlICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikgPyBzdGFydEVsZW1lbnQgOiAwOwog
fQogCi1zdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQqIGVsZW1lbnQp
CitzdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVt
ZW50LT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtZW50LnJl
bmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgUmVuZGVySW1hZ2UqIGltYWdlID0gdG9SZW5kZXJJbWFnZShy
ZW5kZXJlcik7CiAgICAgcmV0dXJuIGltYWdlLT5jYWNoZWRJbWFnZSgpOwogfQogCi1zdGF0aWMg
SW1hZ2UqIGdldEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgSW1hZ2UqIGdldEltYWdl
KEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIENhY2hlZElt
YWdlKiBjYWNoZWRJbWFnZSA9IGdldENhY2hlZEltYWdlKGVsZW1lbnQpOwogICAgIC8vIERvbid0
IHVzZSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcigpIGhlcmUgYXMgdGhhdCBtYXkgcmV0
dXJuIEJpdG1hcEltYWdlcyBmb3IgY2FjaGVkIFNWRyBJbWFnZXMuCiAgICAgLy8gVXNlcnMgb2Yg
Z2V0SW1hZ2UoKSB3YW50IGFjY2VzcyB0byB0aGUgU1ZHSW1hZ2UsIGluIG9yZGVyIHRvIGZpZ3Vy
ZSBvdXQgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbnMsCkBAIC02ODUsMTEgKzY3MSwxMSBAQCBzdGF0
aWMgSW1hZ2UqIGdldEltYWdlKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgICAgIGNhY2hlZEltYWdl
LT5pbWFnZSgpIDogMDsKIH0KIAotc3RhdGljIHZvaWQgc2VsZWN0RWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQorc3RhdGljIHZvaWQgc2VsZWN0RWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50LT5kb2N1bWVudCgpLmNyZWF0ZVJhbmdl
KCk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGUoZWxlbWVudCk7Ci0gICAgZWxlbWVudC0+ZG9jdW1l
bnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihy
YW5nZS5nZXQoKSwgRE9XTlNUUkVBTSkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVt
ZW50LmRvY3VtZW50KCkuY3JlYXRlUmFuZ2UoKTsKKyAgICByYW5nZS0+c2VsZWN0Tm9kZSgmZWxl
bWVudCk7CisgICAgZWxlbWVudC5kb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSk7CiB9CiAK
IHN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yREhUTUxEcmFnKGNvbnN0IEludFBvaW50JiBtb3Vz
ZURyYWdnZWRQb2ludCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0IEludFBvaW50
JiBkcmFnSW1hZ2VPZmZzZXQsIGJvb2wgaXNMaW5rSW1hZ2UpCkBAIC03MDgsOSArNjk0LDkgQEAg
c3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JESFRNTERyYWcoY29ucwogICAgIHJldHVybiBJbnRQ
b2ludChkcmFnT3JpZ2luLngoKSAtIGRyYWdJbWFnZU9mZnNldC54KCksIGRyYWdPcmlnaW4ueSgp
ICsgeU9mZnNldCk7CiB9CiAKLXN0YXRpYyBJbnRQb2ludCBkcmFnTG9jRm9yU2VsZWN0aW9uRHJh
ZyhGcmFtZSogc3JjKQorc3RhdGljIEludFBvaW50IGRyYWdMb2NGb3JTZWxlY3Rpb25EcmFnKEZy
YW1lJiBzcmMpCiB7Ci0gICAgSW50UmVjdCBkcmFnZ2luZ1JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KHNyYy0+c2VsZWN0aW9uKCkuYm91bmRzKCkpOworICAgIEludFJlY3QgZHJhZ2dpbmdSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChzcmMuc2VsZWN0aW9uKCkuYm91bmRzKCkpOwogICAgIGludCB4cG9z
ID0gZHJhZ2dpbmdSZWN0Lm1heFgoKTsKICAgICB4cG9zID0gZHJhZ2dpbmdSZWN0LngoKSA8IHhw
b3MgPyBkcmFnZ2luZ1JlY3QueCgpIDogeHBvczsKICAgICBpbnQgeXBvcyA9IGRyYWdnaW5nUmVj
dC5tYXhZKCk7CkBAIC03MjMsMTQgKzcwOSwxMiBAQCBzdGF0aWMgSW50UG9pbnQgZHJhZ0xvY0Zv
clNlbGVjdGlvbkRyYWcoCiAgICAgcmV0dXJuIEludFBvaW50KHhwb3MsIHlwb3MpOwogfQogCi1i
b29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUqIHNyYywgY29uc3QgRHJhZ1N0YXRl
JiBzdGF0ZSwgRHJhZ09wZXJhdGlvbiBzcmNPcCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBk
cmFnRXZlbnQsIGNvbnN0IEludFBvaW50JiBkcmFnT3JpZ2luKQorYm9vbCBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVy
YXRpb24gc3JjT3AsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJ
bnRQb2ludCYgZHJhZ09yaWdpbikKIHsKLSAgICBBU1NFUlQoc3JjKTsKLQotICAgIGlmICghc3Jj
LT52aWV3KCkgfHwgIXNyYy0+Y29udGVudFJlbmRlcmVyKCkpCisgICAgaWYgKCFzcmMudmlldygp
IHx8ICFzcmMuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEhpdFRlc3RSZXN1bHQgaGl0VGVzdFJlc3VsdCA9IHNyYy0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVz
dFJlc3VsdEF0UG9pbnQoZHJhZ09yaWdpbiwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0
VGVzdFJlcXVlc3Q6OkFjdGl2ZSk7CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0ID0g
c3JjLmV2ZW50SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KGRyYWdPcmlnaW4sIEhpdFRl
c3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUpOwogICAgIGlmICgh
c3RhdGUuc291cmNlLT5jb250YWlucyhoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpKSkKICAgICAg
ICAgLy8gVGhlIG9yaWdpbmFsIG5vZGUgYmVpbmcgZHJhZ2dlZCBpc24ndCB1bmRlciB0aGUgZHJh
ZyBvcmlnaW4gYW55bW9yZS4uLiBtYXliZSBpdCB3YXMKICAgICAgICAgLy8gaGlkZGVuIG9yIG1v
dmVkIG91dCBmcm9tIHVuZGVyIHRoZSBjdXJzb3IuIFJlZ2FyZGxlc3MsIHdlIGRvbid0IHdhbnQg
dG8gc3RhcnQgYSBkcmFnIG9uCkBAIC03MzksNyArNzIzLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnKEZyYW1lKiBzcgogICAgIFVSTCBsaW5rVVJMID0gaGl0VGVzdFJlc3VsdC5h
YnNvbHV0ZUxpbmtVUkwoKTsKICAgICBVUkwgaW1hZ2VVUkwgPSBoaXRUZXN0UmVzdWx0LmFic29s
dXRlSW1hZ2VVUkwoKTsKIAotICAgIEludFBvaW50IG1vdXNlRHJhZ2dlZFBvaW50ID0gc3JjLT52
aWV3KCktPndpbmRvd1RvQ29udGVudHMoZHJhZ0V2ZW50LnBvc2l0aW9uKCkpOworICAgIEludFBv
aW50IG1vdXNlRHJhZ2dlZFBvaW50ID0gc3JjLnZpZXcoKS0+d2luZG93VG9Db250ZW50cyhkcmFn
RXZlbnQucG9zaXRpb24oKSk7CiAKICAgICBtX2RyYWdnaW5nSW1hZ2VVUkwgPSBVUkwoKTsKICAg
ICBtX3NvdXJjZURyYWdPcGVyYXRpb24gPSBzcmNPcDsKQEAgLTc0OCw5ICs3MzIsMTEgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lKiBzcgogICAgIEludFBvaW50IGRyYWdM
b2MoMCwgMCk7CiAgICAgSW50UG9pbnQgZHJhZ0ltYWdlT2Zmc2V0KDAsIDApOwogCi0gICAgQ2xp
cGJvYXJkKiBjbGlwYm9hcmQgPSBzdGF0ZS5jbGlwYm9hcmQuZ2V0KCk7CisgICAgQVNTRVJUKHN0
YXRlLmNsaXBib2FyZCk7CisKKyAgICBDbGlwYm9hcmQmIGNsaXBib2FyZCA9ICpzdGF0ZS5jbGlw
Ym9hcmQ7CiAgICAgaWYgKHN0YXRlLnR5cGUgPT0gRHJhZ1NvdXJjZUFjdGlvbkRIVE1MKQotICAg
ICAgICBkcmFnSW1hZ2UgPSBjbGlwYm9hcmQtPmNyZWF0ZURyYWdJbWFnZShkcmFnSW1hZ2VPZmZz
ZXQpOworICAgICAgICBkcmFnSW1hZ2UgPSBjbGlwYm9hcmQuY3JlYXRlRHJhZ0ltYWdlKGRyYWdJ
bWFnZU9mZnNldCk7CiAgICAgaWYgKHN0YXRlLnR5cGUgPT0gRHJhZ1NvdXJjZUFjdGlvblNlbGVj
dGlvbiB8fCAhaW1hZ2VVUkwuaXNFbXB0eSgpIHx8ICFsaW5rVVJMLmlzRW1wdHkoKSkKICAgICAg
ICAgLy8gU2VsZWN0aW9uLCBpbWFnZSwgYW5kIGxpbmsgZHJhZ3MgcmVjZWl2ZSBhIGRlZmF1bHQg
c2V0IG9mIGFsbG93ZWQgZHJhZyBvcGVyYXRpb25zIHRoYXQKICAgICAgICAgLy8gZm9sbG93cyBm
cm9tOgpAQCAtNzY2LDQ1ICs3NTIsNDYgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFn
KEZyYW1lKiBzcgogCiAgICAgYm9vbCBzdGFydGVkRHJhZyA9IHRydWU7IC8vIG9wdGltaXNtIC0g
d2UgYWxtb3N0IGFsd2F5cyBtYW5hZ2UgdG8gc3RhcnQgdGhlIGRyYWcKIAotICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0ZS5zb3VyY2UuZ2V0KCk7CisgICAgQVNTRVJUKHN0YXRlLnNvdXJjZSk7
CisgICAgRWxlbWVudCYgZWxlbWVudCA9ICpzdGF0ZS5zb3VyY2U7CiAKICAgICBJbWFnZSogaW1h
Z2UgPSBnZXRJbWFnZShlbGVtZW50KTsKICAgICBpZiAoc3RhdGUudHlwZSA9PSBEcmFnU291cmNl
QWN0aW9uU2VsZWN0aW9uKSB7Ci0gICAgICAgIGlmICghY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCku
aGFzRGF0YSgpKSB7CisgICAgICAgIGlmICghY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5oYXNEYXRh
KCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBibG9jayBpcyBhbG1vc3Qg
aWRlbnRpY2FsIHRvIHRoZSBjb2RlIGluIEVkaXRvcjo6Y29weSwgYW5kIHRoZSBjb2RlIHNob3Vs
ZCBiZSBzaGFyZWQuCiAKLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2Ug
PSBzcmMtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFuZ2UpOwogCi0gICAgICAgICAg
ICBzcmMtPmVkaXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb25S
YW5nZS5nZXQoKSk7CisgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9u
VG9QYXN0ZWJvYXJkKHNlbGVjdGlvblJhbmdlLmdldCgpKTsKIAotICAgICAgICAgICAgaWYgKGVu
Y2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMtPnNlbGVjdGlvbigpLnN0YXJ0KCkpKQotICAgICAg
ICAgICAgICAgIGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0KHNyYy0+ZWRp
dG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksIFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0
UmVwbGFjZSk7CisgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5z
ZWxlY3Rpb24oKS5zdGFydCgpKSkKKyAgICAgICAgICAgICAgICBjbGlwYm9hcmQucGFzdGVib2Fy
ZCgpLndyaXRlUGxhaW5UZXh0KHNyYy5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQo
KSwgUGFzdGVib2FyZDo6Q2Fubm90U21hcnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2Ugewog
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oRUZMKQotICAgICAgICAgICAgICAgIHNyYy0+
ZWRpdG9yKCkud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY2xpcGJvYXJkLT5wYXN0ZWJvYXJk
KCkpOworICAgICAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53cml0ZVNlbGVjdGlvblRvUGFzdGVi
b2FyZChjbGlwYm9hcmQucGFzdGVib2FyZCgpKTsKICNlbHNlCiAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IENvbnZlcnQgYWxsIG90aGVyIHBsYXRmb3JtcyB0byBtYXRjaCBNYWMgYW5kIGRlbGV0
ZSB0aGlzLgotICAgICAgICAgICAgICAgIGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLndyaXRlU2Vs
ZWN0aW9uKHNlbGVjdGlvblJhbmdlLmdldCgpLCBzcmMtPmVkaXRvcigpLmNhblNtYXJ0Q29weU9y
RGVsZXRlKCksIHNyYywgSW5jbHVkZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCk7CisgICAgICAg
ICAgICAgICAgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9u
UmFuZ2UsIHNyYy5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJ
bWFnZUFsdFRleHRGb3JDbGlwYm9hcmQpOwogI2VuZGlmCiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIHNyYy0+ZWRpdG9yKCkuZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKKyAg
ICAgICAgICAgIHNyYy5lZGl0b3IoKS5kaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwog
ICAgICAgICB9CiAgICAgICAgIG1fY2xpZW50LndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihE
cmFnU291cmNlQWN0aW9uU2VsZWN0aW9uLCBkcmFnT3JpZ2luLCBjbGlwYm9hcmQpOwogICAgICAg
ICBpZiAoIWRyYWdJbWFnZSkgewotICAgICAgICAgICAgZHJhZ0ltYWdlID0gZGlzc29sdmVEcmFn
SW1hZ2VUb0ZyYWN0aW9uKHNyYy0+ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCksIERyYWdJbWFnZUFs
cGhhKTsKKyAgICAgICAgICAgIGRyYWdJbWFnZSA9IGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlv
bihzcmMuZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCksIERyYWdJbWFnZUFscGhhKTsKICAgICAgICAg
ICAgIGRyYWdMb2MgPSBkcmFnTG9jRm9yU2VsZWN0aW9uRHJhZyhzcmMpOwogICAgICAgICAgICAg
bV9kcmFnT2Zmc2V0ID0gSW50UG9pbnQoZHJhZ09yaWdpbi54KCkgLSBkcmFnTG9jLngoKSwgZHJh
Z09yaWdpbi55KCkgLSBkcmFnTG9jLnkoKSk7CiAgICAgICAgIH0KICAgICAgICAgZG9TeXN0ZW1E
cmFnKGRyYWdJbWFnZSwgZHJhZ0xvYywgZHJhZ09yaWdpbiwgY2xpcGJvYXJkLCBzcmMsIGZhbHNl
KTsKLSAgICB9IGVsc2UgaWYgKCFpbWFnZVVSTC5pc0VtcHR5KCkgJiYgZWxlbWVudCAmJiBpbWFn
ZSAmJiAhaW1hZ2UtPmlzTnVsbCgpICYmIChtX2RyYWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNl
QWN0aW9uSW1hZ2UpKSB7CisgICAgfSBlbHNlIGlmICghaW1hZ2VVUkwuaXNFbXB0eSgpICYmIGlt
YWdlICYmICFpbWFnZS0+aXNOdWxsKCkgJiYgKG1fZHJhZ1NvdXJjZUFjdGlvbiAmIERyYWdTb3Vy
Y2VBY3Rpb25JbWFnZSkpIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGJlIHN0YXJ0aW5nIGEg
ZHJhZyBmb3IgYW4gaW1hZ2UgdGhhdCBjYW4ndCBwcm92aWRlIGFuIGV4dGVuc2lvbi4KICAgICAg
ICAgLy8gVGhpcyBpcyBhbiBlYXJseSBkZXRlY3Rpb24gZm9yIHByb2JsZW1zIGVuY291bnRlcmVk
IGxhdGVyIHVwb24gZHJvcC4KICAgICAgICAgQVNTRVJUKCFpbWFnZS0+ZmlsZW5hbWVFeHRlbnNp
b24oKS5pc0VtcHR5KCkpOwotICAgICAgICBpZiAoIWNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmhh
c0RhdGEoKSkgeworICAgICAgICBpZiAoIWNsaXBib2FyZC5wYXN0ZWJvYXJkKCkuaGFzRGF0YSgp
KSB7CiAgICAgICAgICAgICBtX2RyYWdnaW5nSW1hZ2VVUkwgPSBpbWFnZVVSTDsKLSAgICAgICAg
ICAgIGlmIChlbGVtZW50LT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQorICAgICAgICAgICAg
aWYgKGVsZW1lbnQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBz
ZWxlY3RFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKGNsaXBib2FyZCwgZWxlbWVudCwgIWxpbmtVUkwuaXNFbXB0eSgpID8gbGlua1VSTCA6IGlt
YWdlVVJMLCBoaXRUZXN0UmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKSk7CiAgICAgICAgIH0KQEAg
LTgxMywzMSArODAwLDMxIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSog
c3IKIAogICAgICAgICBpZiAoIWRyYWdJbWFnZSkgewogICAgICAgICAgICAgSW50UmVjdCBpbWFn
ZVJlY3QgPSBoaXRUZXN0UmVzdWx0LmltYWdlUmVjdCgpOwotICAgICAgICAgICAgaW1hZ2VSZWN0
LnNldExvY2F0aW9uKG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50
cyhzcmMtPnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KGltYWdlUmVjdC5sb2NhdGlvbigpKSkp
OworICAgICAgICAgICAgaW1hZ2VSZWN0LnNldExvY2F0aW9uKG1fcGFnZS5tYWluRnJhbWUoKS52
aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhzcmMudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXco
aW1hZ2VSZWN0LmxvY2F0aW9uKCkpKSk7CiAgICAgICAgICAgICBkb0ltYWdlRHJhZyhlbGVtZW50
LCBkcmFnT3JpZ2luLCBoaXRUZXN0UmVzdWx0LmltYWdlUmVjdCgpLCBjbGlwYm9hcmQsIHNyYywg
bV9kcmFnT2Zmc2V0KTsKLSAgICAgICAgfSBlbHNlCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBESFRNTCBkZWZpbmVkIGRyYWcgaW1hZ2UKICAgICAgICAgICAgIGRvU3lzdGVtRHJh
ZyhkcmFnSW1hZ2UsIGRyYWdMb2MsIGRyYWdPcmlnaW4sIGNsaXBib2FyZCwgc3JjLCBmYWxzZSk7
Ci0KKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoIWxpbmtVUkwuaXNFbXB0eSgpICYmIChtX2Ry
YWdTb3VyY2VBY3Rpb24gJiBEcmFnU291cmNlQWN0aW9uTGluaykpIHsKLSAgICAgICAgaWYgKCFj
bGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpCisgICAgICAgIGlmICghY2xpcGJvYXJk
LnBhc3RlYm9hcmQoKS5oYXNEYXRhKCkpCiAgICAgICAgICAgICAvLyBTaW1wbGlmeSB3aGl0ZXNw
YWNlIHNvIHRoZSB0aXRsZSBwdXQgb24gdGhlIGNsaXBib2FyZCByZXNlbWJsZXMgd2hhdCB0aGUg
dXNlciBzZWVzCiAgICAgICAgICAgICAvLyBvbiB0aGUgd2ViIHBhZ2UuIFRoaXMgaW5jbHVkZXMg
cmVwbGFjaW5nIG5ld2xpbmVzIHdpdGggc3BhY2VzLgotICAgICAgICAgICAgc3JjLT5lZGl0b3Io
KS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKS5zaW1wbGlmeVdo
aXRlU3BhY2UoKSwgY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkpOworICAgICAgICAgICAgc3JjLmVk
aXRvcigpLmNvcHlVUkwobGlua1VSTCwgaGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpLnNpbXBs
aWZ5V2hpdGVTcGFjZSgpLCBjbGlwYm9hcmQucGFzdGVib2FyZCgpKTsKIAotICAgICAgICBpZiAo
c3JjLT5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgc3JjLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgIGlmIChzcmMuc2VsZWN0aW9uKCkuaXNDYXJldCgpICYmIHNy
Yy5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgICAgICAvLyBhIHVz
ZXIgY2FuIGluaXRpYXRlIGEgZHJhZyBvbiBhIGxpbmsgd2l0aG91dCBoYXZpbmcgYW55IHRleHQK
ICAgICAgICAgICAgIC8vIHNlbGVjdGVkLiAgSW4gdGhpcyBjYXNlLCB3ZSBzaG91bGQgZXhwYW5k
IHRoZSBzZWxlY3Rpb24gdG8KICAgICAgICAgICAgIC8vIHRoZSBlbmNsb3NpbmcgYW5jaG9yIGVs
ZW1lbnQKLSAgICAgICAgICAgIFBvc2l0aW9uIHBvcyA9IHNyYy0+c2VsZWN0aW9uKCkuYmFzZSgp
OworICAgICAgICAgICAgUG9zaXRpb24gcG9zID0gc3JjLnNlbGVjdGlvbigpLmJhc2UoKTsKICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KHBvcyk7CiAgICAg
ICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAgICAgICBzcmMtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUobm9k
ZSkpOworICAgICAgICAgICAgICAgIHNyYy5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKG5vZGUpKTsKICAgICAgICAg
fQogCiAgICAgICAgIG1fY2xpZW50LndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291
cmNlQWN0aW9uTGluaywgZHJhZ09yaWdpbiwgY2xpcGJvYXJkKTsKICAgICAgICAgaWYgKCFkcmFn
SW1hZ2UpIHsKLSAgICAgICAgICAgIGRyYWdJbWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZvckxpbmso
bGlua1VSTCwgaGl0VGVzdFJlc3VsdC50ZXh0Q29udGVudCgpLCBzcmMtPnNldHRpbmdzKCkuZm9u
dFJlbmRlcmluZ01vZGUoKSk7CisgICAgICAgICAgICBkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1h
Z2VGb3JMaW5rKGxpbmtVUkwsIGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQoKSwgc3JjLnNldHRp
bmdzKCkuZm9udFJlbmRlcmluZ01vZGUoKSk7CiAgICAgICAgICAgICBJbnRTaXplIHNpemUgPSBk
cmFnSW1hZ2VTaXplKGRyYWdJbWFnZSk7CiAgICAgICAgICAgICBtX2RyYWdPZmZzZXQgPSBJbnRQ
b2ludCgtc2l6ZS53aWR0aCgpIC8gMiwgLUxpbmtEcmFnQm9yZGVySW5zZXQpOwogICAgICAgICAg
ICAgZHJhZ0xvYyA9IEludFBvaW50KG1vdXNlRHJhZ2dlZFBvaW50LngoKSArIG1fZHJhZ09mZnNl
dC54KCksIG1vdXNlRHJhZ2dlZFBvaW50LnkoKSArIG1fZHJhZ09mZnNldC55KCkpOwpAQCAtODYx
LDcgKzg0OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSogc3IKICAg
ICByZXR1cm4gc3RhcnRlZERyYWc7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VE
cmFnKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEludFBvaW50JiBkcmFnT3JpZ2luLCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lLCBJbnRQb2lu
dCYgZHJhZ0ltYWdlT2Zmc2V0KQordm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9JbWFnZURyYWcoRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgSW50UG9pbnQmIGRyYWdPcmlnaW4sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIENsaXBib2FyZCYgY2xpcGJvYXJkLCBGcmFtZSYgZnJhbWUsIEludFBvaW50JiBkcmFn
SW1hZ2VPZmZzZXQpCiB7CiAgICAgSW50UG9pbnQgbW91c2VEb3duUG9pbnQgPSBkcmFnT3JpZ2lu
OwogICAgIERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UgPSAwOwpAQCAtODY5LDcgKzg1Niw3IEBAIHZv
aWQgRHJhZ0NvbnRyb2xsZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQKIAogICAgIEltYWdlKiBpbWFn
ZSA9IGdldEltYWdlKGVsZW1lbnQpOwogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+c2l6ZSgpLmhl
aWdodCgpICogaW1hZ2UtPnNpemUoKS53aWR0aCgpIDw9IE1heE9yaWdpbmFsSW1hZ2VBcmVhCi0g
ICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UsIGVs
ZW1lbnQtPnJlbmRlcmVyKCkgPyBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24oZWxlbWVudC0+
cmVuZGVyZXIoKS0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSkgOiBJbWFnZU9yaWVu
dGF0aW9uRGVzY3JpcHRpb24oKSkpKSB7CisgICAgICAgICYmIChkcmFnSW1hZ2UgPSBjcmVhdGVE
cmFnSW1hZ2VGcm9tSW1hZ2UoaW1hZ2UsIGVsZW1lbnQucmVuZGVyZXIoKSA/IEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbihlbGVtZW50LnJlbmRlcmVyKCktPnNob3VsZFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uKCkpIDogSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKCkpKSkgewogICAgICAg
ICBJbnRTaXplIG9yaWdpbmFsU2l6ZSA9IHJlY3Quc2l6ZSgpOwogICAgICAgICBvcmlnaW4gPSBy
ZWN0LmxvY2F0aW9uKCk7CiAKQEAgLTkwMywxNSArODkwLDE1IEBAIHZvaWQgRHJhZ0NvbnRyb2xs
ZXI6OmRvSW1hZ2VEcmFnKEVsZW1lbnQKICAgICBkZWxldGVEcmFnSW1hZ2UoZHJhZ0ltYWdlKTsK
IH0KIAotdm9pZCBEcmFnQ29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFnKERyYWdJbWFnZVJlZiBpbWFn
ZSwgY29uc3QgSW50UG9pbnQmIGRyYWdMb2MsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xp
cGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiBmcmFtZSwgYm9vbCBmb3JMaW5rKQordm9pZCBEcmFn
Q29udHJvbGxlcjo6ZG9TeXN0ZW1EcmFnKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9p
bnQmIGRyYWdMb2MsIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9h
cmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBmb3JMaW5rKQogewogICAgIG1fZGlkSW5pdGlhdGVEcmFn
ID0gdHJ1ZTsKLSAgICBtX2RyYWdJbml0aWF0b3IgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBt
X2RyYWdJbml0aWF0b3IgPSBmcmFtZS5kb2N1bWVudCgpOwogICAgIC8vIFByb3RlY3QgdGhpcyBm
cmFtZSBhbmQgdmlldywgYXMgYSBsb2FkIG1heSBvY2N1ciBtaWQgZHJhZyBhbmQgYXR0ZW1wdCB0
byB1bmxvYWQgdGhpcyBmcmFtZQogICAgIFJlZjxNYWluRnJhbWU+IGZyYW1lUHJvdGVjdG9yKG1f
cGFnZS5tYWluRnJhbWUoKSk7CiAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlld1Byb3RlY3RvciA9
IGZyYW1lUHJvdGVjdG9yLT52aWV3KCk7Ci0gICAgbV9jbGllbnQuc3RhcnREcmFnKGltYWdlLCB2
aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUtPnZpZXcoKS0+Y29udGVudHNU
b1Jvb3RWaWV3KGRyYWdMb2MpKSwKLSAgICAgICAgdmlld1Byb3RlY3Rvci0+cm9vdFZpZXdUb0Nv
bnRlbnRzKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhldmVudFBvcykpLCBjbGlw
Ym9hcmQsICZmcmFtZVByb3RlY3Rvci5nZXQoKSwgZm9yTGluayk7CisgICAgbV9jbGllbnQuc3Rh
cnREcmFnKGltYWdlLCB2aWV3UHJvdGVjdG9yLT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUudmll
dygpLT5jb250ZW50c1RvUm9vdFZpZXcoZHJhZ0xvYykpLAorICAgICAgICB2aWV3UHJvdGVjdG9y
LT5yb290Vmlld1RvQ29udGVudHMoZnJhbWUudmlldygpLT5jb250ZW50c1RvUm9vdFZpZXcoZXZl
bnRQb3MpKSwgY2xpcGJvYXJkLCBmcmFtZVByb3RlY3Rvci5nZXQoKSwgZm9yTGluayk7CiAgICAg
Ly8gRHJhZ0NsaWVudDo6c3RhcnREcmFnIGNhbiBjYXVzZSBvdXIgUGFnZSB0byBkaXNwZWFyLCBk
ZWFsbG9jYXRpbmcgfHRoaXN8LgogICAgIGlmICghZnJhbWVQcm90ZWN0b3ItPnBhZ2UoKSkKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuaAkocmV2
aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIERyYWdDbGllbnQmIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAK
LSAgICAgICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVyZWQoRHJhZ0RhdGEqKTsKLSAgICAgICAgdm9p
ZCBkcmFnRXhpdGVkKERyYWdEYXRhKik7Ci0gICAgICAgIERyYWdTZXNzaW9uIGRyYWdVcGRhdGVk
KERyYWdEYXRhKik7Ci0gICAgICAgIGJvb2wgcGVyZm9ybURyYWcoRHJhZ0RhdGEqKTsKKyAgICAg
ICAgRHJhZ1Nlc3Npb24gZHJhZ0VudGVyZWQoRHJhZ0RhdGEmKTsKKyAgICAgICAgdm9pZCBkcmFn
RXhpdGVkKERyYWdEYXRhJik7CisgICAgICAgIERyYWdTZXNzaW9uIGRyYWdVcGRhdGVkKERyYWdE
YXRhJik7CisgICAgICAgIGJvb2wgcGVyZm9ybURyYWcoRHJhZ0RhdGEmKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FOiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gcmVtb3ZlIGEgbnVtYmVy
IG9mIHRoZXNlIGFjY2Vzc29ycyBvbmNlIGFsbAogICAgICAgICAvLyBkcmFnIGxvZ2ljIGlzIGlu
IFdlYkNvcmUuCkBAIC04Miw3ICs4Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgcGxhY2VEcmFnQ2FyZXQoY29uc3QgSW50UG9pbnQmKTsKICAgICAgICAg
Ci0gICAgICAgIGJvb2wgc3RhcnREcmFnKEZyYW1lKiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYsIERy
YWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBj
b25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbik7CisgICAgICAgIGJvb2wgc3RhcnREcmFnKEZyYW1l
JiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYsIERyYWdPcGVyYXRpb24gc3JjT3AsIGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgZHJhZ0V2ZW50LCBjb25zdCBJbnRQb2ludCYgZHJhZ09yaWdpbik7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBJbnRTaXplJiBtYXhEcmFnSW1hZ2VTaXplKCk7CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgY29uc3QgaW50IExpbmtEcmFnQm9yZGVySW5zZXQ7CkBAIC05Miwy
NCArOTIsMjQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgY29uc3QgZmxv
YXQgRHJhZ0ltYWdlQWxwaGE7CiAKICAgICBwcml2YXRlOgotICAgICAgICBib29sIGRpc3BhdGNo
VGV4dElucHV0RXZlbnRGb3IoRnJhbWUqLCBEcmFnRGF0YSopOwotICAgICAgICBib29sIGNhblBy
b2Nlc3NEcmFnKERyYWdEYXRhKik7Ci0gICAgICAgIGJvb2wgY29uY2x1ZGVFZGl0RHJhZyhEcmFn
RGF0YSopOwotICAgICAgICBEcmFnU2Vzc2lvbiBkcmFnRW50ZXJlZE9yVXBkYXRlZChEcmFnRGF0
YSopOwotICAgICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbkZvckxvYWQoRHJhZ0RhdGEqKTsK
LSAgICAgICAgYm9vbCB0cnlEb2N1bWVudERyYWcoRHJhZ0RhdGEqLCBEcmFnRGVzdGluYXRpb25B
Y3Rpb24sIERyYWdTZXNzaW9uJik7Ci0gICAgICAgIGJvb2wgdHJ5REhUTUxEcmFnKERyYWdEYXRh
KiwgRHJhZ09wZXJhdGlvbiYpOwotICAgICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb24o
RHJhZ0RhdGEqKTsKKyAgICAgICAgYm9vbCBkaXNwYXRjaFRleHRJbnB1dEV2ZW50Rm9yKEZyYW1l
KiwgRHJhZ0RhdGEmKTsKKyAgICAgICAgYm9vbCBjYW5Qcm9jZXNzRHJhZyhEcmFnRGF0YSYpOwor
ICAgICAgICBib29sIGNvbmNsdWRlRWRpdERyYWcoRHJhZ0RhdGEmKTsKKyAgICAgICAgRHJhZ1Nl
c3Npb24gZHJhZ0VudGVyZWRPclVwZGF0ZWQoRHJhZ0RhdGEmKTsKKyAgICAgICAgRHJhZ09wZXJh
dGlvbiBvcGVyYXRpb25Gb3JMb2FkKERyYWdEYXRhJik7CisgICAgICAgIGJvb2wgdHJ5RG9jdW1l
bnREcmFnKERyYWdEYXRhJiwgRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnU2Vzc2lvbiYpOwor
ICAgICAgICBib29sIHRyeURIVE1MRHJhZyhEcmFnRGF0YSYsIERyYWdPcGVyYXRpb24mKTsKKyAg
ICAgICAgRHJhZ09wZXJhdGlvbiBkcmFnT3BlcmF0aW9uKERyYWdEYXRhJik7CiAgICAgICAgIHZv
aWQgY2FuY2VsRHJhZygpOwotICAgICAgICBib29sIGRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24m
LCBEcmFnRGF0YSopOwotICAgICAgICBib29sIGlzQ29weUtleURvd24oRHJhZ0RhdGEqKTsKKyAg
ICAgICAgYm9vbCBkcmFnSXNNb3ZlKEZyYW1lU2VsZWN0aW9uJiwgRHJhZ0RhdGEmKTsKKyAgICAg
ICAgYm9vbCBpc0NvcHlLZXlEb3duKERyYWdEYXRhJik7CiAKICAgICAgICAgdm9pZCBtb3VzZU1v
dmVkSW50b0RvY3VtZW50KERvY3VtZW50Kik7CiAKLSAgICAgICAgdm9pZCBkb0ltYWdlRHJhZyhF
bGVtZW50KiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JiwgQ2xpcGJvYXJkKiwgRnJh
bWUqLCBJbnRQb2ludCYpOwotICAgICAgICB2b2lkIGRvU3lzdGVtRHJhZyhEcmFnSW1hZ2VSZWYs
IGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqLCBGcmFtZSosIGJv
b2wgZm9yTGluayk7CisgICAgICAgIHZvaWQgZG9JbWFnZURyYWcoRWxlbWVudCYsIGNvbnN0IElu
dFBvaW50JiwgY29uc3QgSW50UmVjdCYsIENsaXBib2FyZCYsIEZyYW1lJiwgSW50UG9pbnQmKTsK
KyAgICAgICAgdm9pZCBkb1N5c3RlbURyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYs
IGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwgRnJhbWUmLCBib29sIGZvckxpbmspOwogICAg
ICAgICB2b2lkIGNsZWFudXBBZnRlclN5c3RlbURyYWcoKTsKLSAgICAgICAgdm9pZCBkZWNsYXJl
QW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkKiwgRWxlbWVudCosIGNvbnN0IFVSTCYsIGNvbnN0
IFN0cmluZyYgbGFiZWwpOworICAgICAgICB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShD
bGlwYm9hcmQmLCBFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCk7CiAK
ICAgICAgICAgUGFnZSYgbV9wYWdlOwogICAgICAgICBEcmFnQ2xpZW50JiBtX2NsaWVudDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzY2OCw3ICszNjY4LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURyYWcoY29uc3QgTW91
cwogICAgIAogICAgIGlmIChtX21vdXNlRG93bk1heVN0YXJ0RHJhZykgewogICAgICAgICBQYWdl
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7Ci0gICAgICAgIG1fZGlkU3RhcnREcmFnID0gcGFnZSAm
JiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLnN0YXJ0RHJhZygmbV9mcmFtZSwgZHJhZ1N0YXRlKCks
IHNyY09wLCBldmVudC5ldmVudCgpLCBtX21vdXNlRG93blBvcyk7CisgICAgICAgIG1fZGlkU3Rh
cnREcmFnID0gcGFnZSAmJiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLnN0YXJ0RHJhZyhtX2ZyYW1l
LCBkcmFnU3RhdGUoKSwgc3JjT3AsIGV2ZW50LmV2ZW50KCksIG1fbW91c2VEb3duUG9zKTsKICAg
ICAgICAgLy8gSW4gV2ViS2l0MiB3ZSBjb3VsZCByZS1lbnRlciB0aGlzIGNvZGUgYW5kIHN0YXJ0
IGFub3RoZXIgZHJhZy4KICAgICAgICAgLy8gT24gT1MgWCB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3
aXRoIHRoZSBvd25lcnNoaXAgb2YgdGhlIHBhc3RlYm9hcmQgYW5kIHRoZSBwcm9taXNlZCB0eXBl
cy4KICAgICAgICAgaWYgKG1fZGlkU3RhcnREcmFnKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9lZmwvRHJhZ0NvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiAxNTcwNTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL2VmbC9EcmFnQ29udHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDE0ICs0MywxNCBAQCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29u
Qm90dG9tCiAKIGNvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAu
NzVmOwogCi1ib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKikKK2Jv
b2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEmKQogewogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlv
bihEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFn
T3BlcmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBpZiAoZHJhZ0RhdGEtPmNvbnRh
aW5zVVJMKDApKQorICAgIGlmIChkcmFnRGF0YS5jb250YWluc1VSTCgwKSkKICAgICAgICAgcmV0
dXJuIERyYWdPcGVyYXRpb25Db3B5OwogCiAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwpA
QCAtNjcsNyArNjcsNyBAQCB2b2lkIERyYWdDb250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1E
CiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShD
bGlwYm9hcmQqLCBFbGVtZW50KiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikKK3ZvaWQgRHJh
Z0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQmLCBFbGVtZW50
JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJikKIHsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvZ3RrL0RyYWdDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMTU3MDU0KQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9ndGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSwxNSArNDUsMTUgQEAgY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFn
SWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEg
PSAwLjc1ZjsKIAotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSop
Citib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhJikKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLURyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVy
YXRpb24oRHJhZ0RhdGEqIGRyYWdEYXRhKQorRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7Ci0gICAgLy9GSVhNRTogVGhpcyBs
b2dpYyBpcyBpbmNvbXBsZXRlCi0gICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNVUkwoMCkpCisg
ICAgLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgaW5jb21wbGV0ZQorICAgIGlmIChkcmFnRGF0YS5j
b250YWluc1VSTCgwKSkKICAgICAgICAgcmV0dXJuIERyYWdPcGVyYXRpb25Db3B5OwogCiAgICAg
cmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwpAQCAtNjksOSArNjksOSBAQCB2b2lkIERyYWdDb250
cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xsZXI6
OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERyYWdD
b250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9hcmQs
IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVsKQog
ewotICAgIGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLndyaXRlSW1hZ2UoZWxlbWVudCwgdXJsLCBs
YWJlbCk7CisgICAgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS53cml0ZUltYWdlKGVsZW1lbnQsIHVy
bCwgbGFiZWwpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFnQ29u
dHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9EcmFn
Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRHJhZ0NvbnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYg
QEAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogCiAjaW1wb3J0ICJDbGlwYm9hcmQuaCIKLSNp
bXBvcnQgIkRPTUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiRHJhZ0NsaWVudC5oIgogI2lt
cG9ydCAiRHJhZ0RhdGEuaCIKICNpbXBvcnQgIkVsZW1lbnQuaCIKQEAgLTQ4LDE5ICs0NywxNyBA
QCBjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90dG9tCiAKIGNvbnN0IGZsb2F0
IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwogCi1ib29sIERyYWdDb250
cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhKiBkcmFnRGF0YSkKK2Jvb2wgRHJhZ0NvbnRy
b2xsZXI6OmlzQ29weUtleURvd24oRHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIHJldHVybiBk
cmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzQ29weUtleURvd247CisgICAgcmV0
dXJuIGRyYWdEYXRhLmZsYWdzKCkgJiBEcmFnQXBwbGljYXRpb25Jc0NvcHlLZXlEb3duOwogfQog
ICAgIAotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0
YSogZHJhZ0RhdGEpCitEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9u
KERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotCi0gICAgaWYg
KChkcmFnRGF0YS0+ZmxhZ3MoKSAmIERyYWdBcHBsaWNhdGlvbklzTW9kYWwpIHx8ICFkcmFnRGF0
YS0+Y29udGFpbnNVUkwoJm1fcGFnZS5tYWluRnJhbWUoKSkpCisgICAgaWYgKChkcmFnRGF0YS5m
bGFncygpICYgRHJhZ0FwcGxpY2F0aW9uSXNNb2RhbCkgfHwgIWRyYWdEYXRhLmNvbnRhaW5zVVJM
KCZtX3BhZ2UubWFpbkZyYW1lKCkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7
CiAKLSAgICBpZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLT5mbGFncygp
ICYgKERyYWdBcHBsaWNhdGlvbkhhc0F0dGFjaGVkU2hlZXQgfCBEcmFnQXBwbGljYXRpb25Jc1Nv
dXJjZSkpKSkKKyAgICBpZiAoIW1fZG9jdW1lbnRVbmRlck1vdXNlIHx8ICghKGRyYWdEYXRhLmZs
YWdzKCkgJiAoRHJhZ0FwcGxpY2F0aW9uSGFzQXR0YWNoZWRTaGVldCB8IERyYWdBcHBsaWNhdGlv
bklzU291cmNlKSkpKQogICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7CiAKICAgICBy
ZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7CkBAIC04NSw5ICs4Miw5IEBAIHZvaWQgRHJhZ0NvbnRy
b2xsZXI6OmNsZWFudXBBZnRlclN5c3RlbUQKICAgICAgICAgZHJhZ0VuZGVkKCk7CiB9CiAKLXZv
aWQgRHJhZ0NvbnRyb2xsZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNs
aXBib2FyZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
bGFiZWwpCit2b2lkIERyYWdDb250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xp
cGJvYXJkJiBjbGlwYm9hcmQsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGxhYmVsKQogewotICAgIG1fY2xpZW50LmRlY2xhcmVBbmRXcml0ZURyYWdJbWFn
ZShjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5uYW1lKCksIGtpdChlbGVtZW50KSwgdXJsLCBsYWJl
bCwgZWxlbWVudC0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICBtX2NsaWVudC5kZWNsYXJlQW5k
V3JpdGVEcmFnSW1hZ2UoY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1lKCksIGVsZW1lbnQsIHVy
bCwgbGFiZWwsIGVsZW1lbnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRHJhZ0NvbnRyb2xsZXJX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0RyYWdDb250cm9s
bGVyV2luLmNwcAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS93aW4v
RHJhZ0NvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNyArNDQsMTYgQEAg
Y29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbQogCiBjb25zdCBmbG9hdCBE
cmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxwaGEgPSAwLjc1ZjsKIAotRHJhZ09wZXJhdGlvbiBE
cmFnQ29udHJvbGxlcjo6ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCitEcmFnT3Bl
cmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhJiBkcmFnRGF0YSkK
IHsKICAgICAvL0ZJWE1FOiB0byBtYXRjaCB0aGUgbWFjb3MgYmVoYXZpb3VyIHdlIHNob3VsZCBy
ZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmUKICAgICAvL2lmIHdlIGFyZSBhIG1vZGFsIHdpbmRvdywg
d2UgYXJlIHRoZSBkcmFnIHNvdXJjZSwgb3IgdGhlIHdpbmRvdyBpcyBhbiBhdHRhY2hlZCBzaGVl
dAogICAgIC8vSWYgdGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIHdpdGhpbiBXZWJDb3JlIG9w
ZXJhdGlvbkZvckRyYWcgY2FuIGJlIHB1bGxlZCBpbnRvIAogICAgIC8vV2ViQ29yZSBpdHNlbGYK
LSAgICBBU1NFUlQoZHJhZ0RhdGEpOwotICAgIHJldHVybiBkcmFnRGF0YS0+Y29udGFpbnNVUkwo
MCkgJiYgIW1fZGlkSW5pdGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0
aW9uTm9uZTsKKyAgICByZXR1cm4gZHJhZ0RhdGEuY29udGFpbnNVUkwoMCkgJiYgIW1fZGlkSW5p
dGlhdGVEcmFnID8gRHJhZ09wZXJhdGlvbkNvcHkgOiBEcmFnT3BlcmF0aW9uTm9uZTsKIH0KIAot
Ym9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bihEcmFnRGF0YSopCitib29sIERyYWdD
b250cm9sbGVyOjppc0NvcHlLZXlEb3duKERyYWdEYXRhJikKIHsKICAgICByZXR1cm4gOjpHZXRB
c3luY0tleVN0YXRlKFZLX0NPTlRST0wpOwogfQpAQCAtNzAsOSArNjksOSBAQCB2b2lkIERyYWdD
b250cm9sbGVyOjpjbGVhbnVwQWZ0ZXJTeXN0ZW1ECiB7CiB9CiAKLXZvaWQgRHJhZ0NvbnRyb2xs
ZXI6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShDbGlwYm9hcmQqIGNsaXBib2FyZCwgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwpCit2b2lkIERy
YWdDb250cm9sbGVyOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoQ2xpcGJvYXJkJiBjbGlwYm9h
cmQsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGxhYmVs
KQogewotICAgIFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQo
KTsKKyAgICBQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkID0gY2xpcGJvYXJkLnBhc3RlYm9hcmQoKTsK
IAogICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0aGlzIGNoZWNrPwogICAgIGlmICgh
cGFzdGVib2FyZC53cml0YWJsZURhdGFPYmplY3QoKSkKQEAgLTgxLDcgKzgwLDcgQEAgdm9pZCBE
cmFnQ29udHJvbGxlcjo6ZGVjbGFyZUFuZFdyaXRlRHJhZwogICAgIC8vIE9yZGVyIGlzIGltcG9y
dGFudCBoZXJlIGZvciBFeHBsb3JlcidzIHNha2UKICAgICBwYXN0ZWJvYXJkLndyaXRlVVJMVG9X
cml0YWJsZURhdGFPYmplY3QodXJsLCBsYWJlbCk7CiAgICAgcGFzdGVib2FyZC53cml0ZUltYWdl
VG9EYXRhT2JqZWN0KGVsZW1lbnQsIHVybCk7Ci0gICAgcGFzdGVib2FyZC53cml0ZU1hcmt1cChj
cmVhdGVNYXJrdXAoKmVsZW1lbnQsIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwor
ICAgIHBhc3RlYm9hcmQud3JpdGVNYXJrdXAoY3JlYXRlTWFya3VwKGVsZW1lbnQsIEluY2x1ZGVO
b2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdEYXRhLmgJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RyYWdEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgU3RyaW5nIGFzUGxhaW5UZXh0KEZyYW1lKikgY29uc3Q7CiAgICAgdm9pZCBhc0ZpbGVuYW1l
cyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OwogICAgIENvbG9yIGFzQ29sb3IoKSBjb25zdDsKLSAg
ICBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGFzRnJhZ21lbnQoRnJhbWUqLCBQYXNzUmVm
UHRyPFJhbmdlPiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBhc0ZyYWdtZW50KEZyYW1lKiwgUmFu
Z2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KSBj
b25zdDsKICAgICBib29sIGNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0OwogICAgIGJvb2wgY29udGFp
bnNDb2xvcigpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNGaWxlcygpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAkocmV2aXNpb24gMTU3MDU0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQs
MjEgKzE2NCwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oV0lOKQotICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFn
bWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29s
JiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV0lOKQotICAgIHZvaWQgd3JpdGVJbWFn
ZShOb2RlKiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7IC8vIEZJWE1FOiBMYXll
cmluZyB2aW9sYXRpb24uCi0gICAgdm9pZCB3cml0ZVNlbGVjdGlvbihSYW5nZSosIGJvb2wgY2Fu
U21hcnRDb3B5T3JEZWxldGUsIEZyYW1lKiwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9y
Q2xpcGJvYXJkID0gRGVmYXVsdFNlbGVjdGVkVGV4dFR5cGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcg
dmlvbGF0aW9uLgorICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFn
bWVudChGcmFtZSYsIFJhbmdlJiwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFp
blRleHQpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgorICAgIHZvaWQgd3JpdGVJbWFn
ZShFbGVtZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7IC8vIEZJWE1FOiBM
YXllcmluZyB2aW9sYXRpb24uCisgICAgdm9pZCB3cml0ZVNlbGVjdGlvbihSYW5nZSYsIGJvb2wg
Y2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0
Rm9yQ2xpcGJvYXJkID0gRGVmYXVsdFNlbGVjdGVkVGV4dFR5cGUpOyAvLyBGSVhNRTogTGF5ZXJp
bmcgdmlvbGF0aW9uLgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCiAgICAgc3RhdGljIFBh
c3NPd25QdHI8UGFzdGVib2FyZD4gY3JlYXRlKFBhc3NSZWZQdHI8RGF0YU9iamVjdEd0az4pOwog
ICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZShHdGtDbGlwYm9hcmQqKTsK
ICAgICBQYXNzUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoKSBjb25zdDsKLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oR1RLKQogICAgIHN0YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+
IGNyZWF0ZUZvckdsb2JhbFNlbGVjdGlvbigpOwogI2VuZGlmCiAKQEAgLTE5OSw3ICsxOTMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFeHRlcm5hbERhdGFPYmplY3QoSURhdGFPYmplY3QqKTsK
ICAgICB2b2lkIHdyaXRlVVJMVG9Xcml0YWJsZURhdGFPYmplY3QoY29uc3QgVVJMJiwgY29uc3Qg
U3RyaW5nJik7CiAgICAgQ09NUHRyPFdDRGF0YU9iamVjdD4gd3JpdGFibGVEYXRhT2JqZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV93cml0YWJsZURhdGFPYmplY3Q7IH0KLSAgICB2b2lkIHdyaXRlSW1h
Z2VUb0RhdGFPYmplY3QoRWxlbWVudCosIGNvbnN0IFVSTCYpOyAvLyBGSVhNRTogTGF5ZXJpbmcg
dmlvbGF0aW9uLgorICAgIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50JiwgY29u
c3QgVVJMJik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAjZW5kaWYKIAogcHJpdmF0
ZToKQEAgLTIxNiw3ICsyMTAsNyBAQCBwcml2YXRlOgogICAgIGV4cGxpY2l0IFBhc3RlYm9hcmQo
Y29uc3QgRHJhZ0RhdGFNYXAmKTsKIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpbmdQYXN0ZWJvYXJk
KCk7Ci0gICAgdm9pZCB3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlKiwgRnJhbWUqKTsgLy8g
RklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KKyAgICB2b2lkIHdyaXRlUmFuZ2VUb0RhdGFPYmpl
Y3QoUmFuZ2UmLCBGcmFtZSYpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogICAgIHZv
aWQgd3JpdGVVUkxUb0RhdGFPYmplY3QoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCB3cml0ZVBsYWluVGV4dFRvRGF0YU9iamVjdChjb25zdCBTdHJpbmcmLCBTbWFydFJlcGxh
Y2VPcHRpb24pOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvRHJh
Z0RhdGFFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9E
cmFnRGF0YUVmbC5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9EcmFnRGF0YUVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAg
U3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQwogICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFn
bWVudChGcmFtZSosIFBhc3NSZWZQdHI8UmFuZ2U+LCBib29sLCBib29sJikgY29uc3QKK1Bhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqLCBSYW5n
ZSYsIGJvb2wsIGJvb2wmKSBjb25zdAogewogICAgIHJldHVybiAwOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdEYXRhR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwCShyZXZpc2lvbiAxNTcwNTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJhbWUqLCBG
aWxlbmFtZUMKIH0KIAogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjph
c0ZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFzc1JlZlB0cjxSYW5nZT4sIGJvb2wsIGJvb2wmKSBj
b25zdAorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChG
cmFtZSogZnJhbWUsIFJhbmdlJiwgYm9vbCwgYm9vbCYpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmhhc01hcmt1cCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0RyYWdBbmREcm9w
SGVscGVyLmNwcAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUs
NyBAQCB2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnTGVhCiAgICAgRHJhZ0Rh
dGEgZHJhZ0RhdGEoY29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sCiAgICAgICAg
ICAgICAgICAgICAgICAgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChtX3dpZGdldCwg
cG9zaXRpb24pLAogICAgICAgICAgICAgICAgICAgICAgIERyYWdPcGVyYXRpb25Ob25lKTsKLSAg
ICBjb250ZXh0LT5leGl0ZWRDYWxsYmFjayhtX3dpZGdldCwgJmRyYWdEYXRhLCBjb250ZXh0LT5k
cm9wSGFwcGVuZWQpOworICAgIGNvbnRleHQtPmV4aXRlZENhbGxiYWNrKG1fd2lkZ2V0LCBkcmFn
RGF0YSwgY29udGV4dC0+ZHJvcEhhcHBlbmVkKTsKIAogICAgIG1fZHJvcHBpbmdDb250ZXh0cy5y
ZW1vdmUoaXRlcmF0b3IpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0
a0RyYWdBbmREcm9wSGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0d0a0RyYWdBbmREcm9wSGVscGVyLmgJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw3ICsyOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBEcm9wcGlu
Z0NvbnRleHQ7CiBjbGFzcyBEcmFnRGF0YTsKIAotdHlwZWRlZiB2b2lkICgqRHJhZ0V4aXRlZENh
bGxiYWNrKShHdGtXaWRnZXQqLCBEcmFnRGF0YSosIGJvb2wgZHJvcEhhcHBlbmVkKTsKK3R5cGVk
ZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFjaykoR3RrV2lkZ2V0KiwgRHJhZ0RhdGEmLCBib29s
IGRyb3BIYXBwZW5lZCk7CiAKIGNsYXNzIEd0a0RyYWdBbmREcm9wSGVscGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHdGtEcmFnQW5kRHJvcEhlbHBlcik7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCShyZXZpc2lvbiAxNTcwNTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NywxMSArMTU3LDExIEBAIGJvb2wgUGFzdGVib2FyZDo6d3JpdGVTdHJp
bmcoY29uc3QgU3RyaW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6
d3JpdGVTZWxlY3Rpb24oUmFuZ2UqIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JE
ZWxldGUsIEZyYW1lKiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJv
YXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCkKK3ZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UmIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRD
b3B5T3JEZWxldGUsIEZyYW1lJiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9y
Q2xpcGJvYXJkIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCkKIHsKICAg
ICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7Ci0gICAgbV9kYXRhT2JqZWN0LT5zZXRUZXh0KHNo
b3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRlSW1hZ2VBbHRU
ZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2Fy
ZCgpIDogZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKLSAgICBtX2RhdGFPYmplY3Qt
PnNldE1hcmt1cChjcmVhdGVNYXJrdXAoKnNlbGVjdGVkUmFuZ2UsIDAsIEFubm90YXRlRm9ySW50
ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7CisgICAgbV9kYXRhT2JqZWN0
LT5zZXRUZXh0KHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNs
dWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRUZXh0
Rm9yQ2xpcGJvYXJkKCkgOiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKSk7CisgICAgbV9k
YXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90
YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7CiAKICAgICBp
ZiAobV9ndGtDbGlwYm9hcmQpCiAgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsIGNh
blNtYXJ0Q29weU9yRGVsZXRlID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUg
OiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKQEAgLTE4NywzMSAr
MTg3LDI4IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFUKICAgICAg
ICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+d3JpdGVDbGlw
Ym9hcmRDb250ZW50cyhtX2d0a0NsaXBib2FyZCk7CiB9CiAKLXN0YXRpYyBVUkwgZ2V0VVJMRm9y
SW1hZ2VOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMgVVJMIGdldFVSTEZvckltYWdlRWxlbWVudChF
bGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiBMYXRlciB0aGlzIGNvZGUgc2hvdWxk
IGJlIHNoYXJlZCB3aXRoIENocm9taXVtIHNvbWVob3cuIENoYW5jZXMgYXJlIGFsbCBwbGF0Zm9y
bXMgd2FudCBpdC4KICAgICBBdG9taWNTdHJpbmcgdXJsU3RyaW5nOwotICAgIGlmIChpc0hUTUxJ
bWFnZUVsZW1lbnQobm9kZSkgfHwgaXNIVE1MSW5wdXRFbGVtZW50KG5vZGUpKQotICAgICAgICB1
cmxTdHJpbmcgPSB0b0VsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0
dHIpOworICAgIGlmIChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgfHwgaXNIVE1MSW5wdXRF
bGVtZW50KGVsZW1lbnQpKQorICAgICAgICB1cmxTdHJpbmcgPSBlbGVtZW50LmdldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OnNyY0F0dHIpOwogI2lmIEVOQUJMRShTVkcpCi0gICAgZWxzZSBpZiAobm9k
ZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQotICAgICAgICB1cmxTdHJpbmcgPSB0
b0VsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykpCisgICAgICAg
IHVybFN0cmluZyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsK
ICNlbmRpZgotICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRh
ZykgfHwgaXNIVE1MT2JqZWN0RWxlbWVudChub2RlKSkgewotICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gdG9FbGVtZW50KG5vZGUpOwotICAgICAgICB1cmxTdHJpbmcgPSBlbGVtZW50LT5pbWFn
ZVNvdXJjZVVSTCgpOwotICAgIH0KLSAgICByZXR1cm4gdXJsU3RyaW5nLmlzRW1wdHkoKSA/IFVS
TCgpIDogbm9kZS0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGlu
Z0hUTUxTcGFjZXModXJsU3RyaW5nKSk7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZW1iZWRUYWcpIHx8IGlzSFRNTE9iamVjdEVsZW1lbnQoZWxlbWVudCkpCisg
ICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQuaW1hZ2VTb3VyY2VVUkwoKTsKKworICAgIHJldHVy
biB1cmxTdHJpbmcuaXNFbXB0eSgpID8gVVJMKCkgOiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxl
dGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykpOwogfQog
Ci12b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgVVJMJiwgY29u
c3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewotICAgIEFTU0VSVChu
b2RlKTsKLQotICAgIGlmICghKG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+
aXNJbWFnZSgpKSkKKyAgICBpZiAoIShlbGVtZW50LnJlbmRlcmVyKCkgJiYgZWxlbWVudC5yZW5k
ZXJlcigpLT5pc0ltYWdlKCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJJbWFnZSog
cmVuZGVyZXIgPSB0b1JlbmRlckltYWdlKG5vZGUtPnJlbmRlcmVyKCkpOworICAgIFJlbmRlcklt
YWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2UoZWxlbWVudC5yZW5kZXJlcigpKTsKICAgICBD
YWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSByZW5kZXJlci0+Y2FjaGVkSW1hZ2UoKTsKICAgICBp
ZiAoIWNhY2hlZEltYWdlIHx8IGNhY2hlZEltYWdlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTIyMCwxMSArMjE3LDExIEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFn
ZShOb2RlKiBub2RlLCAKIAogICAgIG1fZGF0YU9iamVjdC0+Y2xlYXJBbGwoKTsKIAotICAgIFVS
TCB1cmwgPSBnZXRVUkxGb3JJbWFnZU5vZGUobm9kZSk7CisgICAgVVJMIHVybCA9IGdldFVSTEZv
ckltYWdlRWxlbWVudChlbGVtZW50KTsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgbV9kYXRhT2JqZWN0LT5zZXRVUkwodXJsLCB0aXRsZSk7CiAKLSAgICAgICAgbV9kYXRhT2Jq
ZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKCp0b0VsZW1lbnQobm9kZSksIEluY2x1ZGVOb2Rl
LCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAgICAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChj
cmVhdGVNYXJrdXAoZWxlbWVudCwgSW5jbHVkZU5vZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7CiAg
ICAgfQogCiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+
Z2V0R2RrUGl4YnVmKCkpOwpAQCAtMzAyLDggKzI5OSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6c2V0
RHJhZ0ltYWdlKERyYWdJbWFnZVIKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVm
UHRyPFJhbmdlPiBjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxh
aW5UZXh0KQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVu
dEZyYWdtZW50KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRl
eHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIGlmIChtX2d0a0NsaXBib2FyZCkKICAg
ICAgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Z2V0Q2xp
cGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQpOwpAQCAtMzExLDggKzMwNyw4IEBAIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICBjaG9zZVBsYWluVGV4dCA9
IGZhbHNlOwogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpIHsKLSAgICAgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFn
bWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLT5kb2N1bWVu
dCgpLCBtX2RhdGFPYmplY3QtPm1hcmt1cCgpLCBlbXB0eVN0cmluZygpLCBEaXNhbGxvd1Njcmlw
dGluZ0FuZFBsdWdpbkNvbnRlbnQpOworICAgICAgICBpZiAoZnJhbWUuZG9jdW1lbnQoKSkgewor
ICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBtX2RhdGFPYmplY3QtPm1hcmt1cCgp
LCBlbXB0eVN0cmluZygpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAg
ICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5y
ZWxlYXNlKCk7CiAgICAgICAgIH0KQEAgLTMyMyw3ICszMTksNyBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAKICAgICBpZiAobV9kYXRhT2JqZWN0LT5oYXNUZXh0
KCkpIHsKICAgICAgICAgY2hvc2VQbGFpblRleHQgPSB0cnVlOwotICAgICAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQu
Z2V0KCksIG1fZGF0YU9iamVjdC0+dGV4dCgpKTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBtX2RhdGFP
YmplY3QtPnRleHQoKSk7CiAgICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVy
biBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0RyYWdEYXRhTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9EcmFnRGF0YU1hYy5tbQkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0RyYWdEYXRhTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTAg
KzE4OSwxMCBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiBmcmFtZSwgRmlsCiAgICAg
cmV0dXJuIFN0cmluZygpOyAgICAgICAgCiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBy
YW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpIGNvbnN0CitQ
YXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KEZyYW1lKiBm
cmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWlu
VGV4dCkgY29uc3QKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFt
ZSk7Ci0gICAgcmV0dXJuIGZyYW1lLT5lZGl0b3IoKS53ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQo
cGFzdGVib2FyZCwgKnJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOworICAg
IHJldHVybiBmcmFtZS0+ZWRpdG9yKCkud2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9h
cmQsIHJhbmdlLCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpOwogfQogICAgIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ry
YWdEYXRhV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RHJhZ0RhdGFXaW4uY3BwCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0RhdGFXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcg
QEAgYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudAogICAgICAgICB8fCBj
b250YWluc0NvbG9yKCk7CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0Rh
dGE6OmFzRnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9v
bCYpIGNvbnN0CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjphc0ZyYWdt
ZW50KEZyYW1lKiBmcmFtZSwgUmFuZ2UmLCBib29sLCBib29sJikgY29uc3QKIHsgICAgIAogICAg
IC8qCiAgICAgICogT3JkZXIgaXMgcmljaGVzdCBmb3JtYXQgZmlyc3QuIE9uIE9TWCB0aGlzIGlz
OgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3Rl
Ym9hcmRXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjIsOSArNDIyLDggQEAgdm9pZCBQYXN0
ZWJvYXJkOjpzZXREcmFnSW1hZ2UoRHJhZ0ltYWdlUgogfQogI2VuZGlmCiAKLXZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSogc2VsZWN0ZWRSYW5nZSwgRnJhbWUq
IGZyYW1lKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlJiBz
ZWxlY3RlZFJhbmdlLCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgQVNTRVJUKHNlbGVjdGVkUmFuZ2Up
OwogICAgIGlmICghbV93cml0YWJsZURhdGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NDMyLDEzICs0MzEsMTMgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0
KAogICAgIG1lZGl1bS50eW1lZCA9IFRZTUVEX0hHTE9CQUw7CiAKICAgICBWZWN0b3I8Y2hhcj4g
ZGF0YTsKLSAgICBtYXJrdXBUb0NGSFRNTChjcmVhdGVNYXJrdXAoKnNlbGVjdGVkUmFuZ2UsIDAs
IEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpLAotICAgICAgICBzZWxlY3RlZFJhbmdlLT5zdGFydENv
bnRhaW5lcigpLT5kb2N1bWVudCgpLnVybCgpLnN0cmluZygpLCBkYXRhKTsKKyAgICBtYXJrdXBU
b0NGSFRNTChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSksCisgICAgICAgIHNlbGVjdGVkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQo
KS51cmwoKS5zdHJpbmcoKSwgZGF0YSk7CiAgICAgbWVkaXVtLmhHbG9iYWwgPSBjcmVhdGVHbG9i
YWxEYXRhKGRhdGEpOwogICAgIGlmIChtZWRpdW0uaEdsb2JhbCAmJiBGQUlMRUQobV93cml0YWJs
ZURhdGFPYmplY3QtPlNldERhdGEoaHRtbEZvcm1hdCgpLCAmbWVkaXVtLCBUUlVFKSkpCiAgICAg
ICAgIDo6R2xvYmFsRnJlZShtZWRpdW0uaEdsb2JhbCk7CiAKLSAgICBTdHJpbmcgc3RyID0gZnJh
bWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpOworICAgIFN0cmluZyBzdHIg
PSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKTsKICAgICByZXBsYWNl
TmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKICAgICByZXBsYWNlTkJTUFdp
dGhTcGFjZShzdHIpOwogICAgIG1lZGl1bS5oR2xvYmFsID0gY3JlYXRlR2xvYmFsRGF0YShzdHIp
OwpAQCAtNDQ2LDE5ICs0NDUsMTkgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRh
T2JqZWN0KAogICAgICAgICA6Okdsb2JhbEZyZWUobWVkaXVtLmhHbG9iYWwpOwogCiAgICAgbWVk
aXVtLmhHbG9iYWwgPSAwOwotICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JE
ZWxldGUoKSkKKyAgICBpZiAoZnJhbWUuZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSkK
ICAgICAgICAgbV93cml0YWJsZURhdGFPYmplY3QtPlNldERhdGEoc21hcnRQYXN0ZUZvcm1hdCgp
LCAmbWVkaXVtLCBUUlVFKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihS
YW5nZSogc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUqIGZy
YW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgc2hvdWxkU2VyaWFs
aXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVj
dGlvbihSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJh
bWUmIGZyYW1lLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgc2hvdWxk
U2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKQogewogICAgIGNsZWFyKCk7CiAKICAg
ICAvLyBQdXQgQ0ZfSFRNTCBmb3JtYXQgb24gdGhlIHBhc3RlYm9hcmQgCiAgICAgaWYgKDo6T3Bl
bkNsaXBib2FyZChtX293bmVyKSkgewogICAgICAgICBWZWN0b3I8Y2hhcj4gZGF0YTsKLSAgICAg
ICAgbWFya3VwVG9DRkhUTUwoY3JlYXRlTWFya3VwKCpzZWxlY3RlZFJhbmdlLCAwLCBBbm5vdGF0
ZUZvckludGVyY2hhbmdlKSwKLSAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCktPmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCksIGRhdGEpOworICAgICAgICBtYXJrdXBU
b0NGSFRNTChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSksCisgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCktPmRvY3Vt
ZW50KCkudXJsKCkuc3RyaW5nKCksIGRhdGEpOwogICAgICAgICBIR0xPQkFMIGNiRGF0YSA9IGNy
ZWF0ZUdsb2JhbERhdGEoZGF0YSk7CiAgICAgICAgIGlmICghOjpTZXRDbGlwYm9hcmREYXRhKEhU
TUxDbGlwYm9hcmRGb3JtYXQsIGNiRGF0YSkpCiAgICAgICAgICAgICA6Okdsb2JhbEZyZWUoY2JE
YXRhKTsKQEAgLTQ2Niw3ICs0NjUsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9u
KFJhbmdlKiBzCiAgICAgfQogICAgIAogICAgIC8vIFB1dCBwbGFpbiBzdHJpbmcgb24gdGhlIHBh
c3RlYm9hcmQuIENGX1VOSUNPREVURVhUIGNvdmVycyBDRl9URVhUIGFzIHdlbGwKLSAgICBTdHJp
bmcgc3RyID0gc2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkID09IEluY2x1
ZGVJbWFnZUFsdFRleHRGb3JDbGlwYm9hcmQgPyBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0
Rm9yQ2xpcGJvYXJkKCkgOiBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0ZWRUZXh0KCk7CisgICAgU3Ry
aW5nIHN0ciA9IHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNs
dWRlSW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRUZXh0
Rm9yQ2xpcGJvYXJkKCkgOiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKTsKICAgICByZXBs
YWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMoc3RyKTsKICAgICByZXBsYWNlTkJT
UFdpdGhTcGFjZShzdHIpOwogICAgIGlmICg6Ok9wZW5DbGlwYm9hcmQobV9vd25lcikpIHsKQEAg
LTcyNSwxNCArNzI0LDEyIEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2Fy
ZFUKICAgICB3cml0ZVVSTFRvRGF0YU9iamVjdChwYXN0ZWJvYXJkVVJMLnVybCwgcGFzdGVib2Fy
ZFVSTC50aXRsZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2Rl
LCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdl
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgQVNT
RVJUKG5vZGUpOwotCi0gICAgaWYgKCEobm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJl
cigpLT5pc0ltYWdlKCkpKQorICAgIGlmICghKGVsZW1lbnQucmVuZGVyZXIoKSAmJiBlbGVtZW50
LnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcklt
YWdlKiByZW5kZXJlciA9IHRvUmVuZGVySW1hZ2Uobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgUmVu
ZGVySW1hZ2UqIHJlbmRlcmVyID0gdG9SZW5kZXJJbWFnZShlbGVtZW50LnJlbmRlcmVyKCkpOwog
ICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IHJlbmRlcmVyLT5jYWNoZWRJbWFnZSgpOwog
ICAgIGlmICghY2FjaGVkSW1hZ2UgfHwgY2FjaGVkSW1hZ2UtPmVycm9yT2NjdXJyZWQoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzk4LDcgKzc5NSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQ
YXN0ZWJvYXJkUGxhaW5UZXgKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8
UmFuZ2U+IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0
KQorUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdt
ZW50KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJv
b2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAgICAg
CkBAIC04MTEsOSArODA4LDkgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJv
YXJkOgogICAgICAgICAgICAgR2xvYmFsVW5sb2NrKGNiRGF0YSk7CiAgICAgICAgICAgICA6OkNs
b3NlQ2xpcGJvYXJkKCk7CiAKLSAgICAgICAgICAgIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBmcmFnbWVudEZyb21DRkhUTUwoZnJhbWUtPmRvY3VtZW50KCksIGNmaHRt
bCk7CisgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBmcmFn
bWVudEZyb21DRkhUTUwoZnJhbWUuZG9jdW1lbnQoKSwgY2ZodG1sKTsKICAgICAgICAgICAgIGlm
IChmcmFnbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgfSBlbHNlIAogICAgICAg
ICAgICAgOjpDbG9zZUNsaXBib2FyZCgpOwogICAgIH0KQEAgLTgyNyw3ICs4MjQsNyBAQCBQYXNz
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgICAgICAgICAgICAgU3Ry
aW5nIHN0cihidWZmZXIpOwogICAgICAgICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRhdGEpOwog
ICAgICAgICAgICAgICAgIDo6Q2xvc2VDbGlwYm9hcmQoKTsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNv
bnRleHQuZ2V0KCksIHN0cik7CisgICAgICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBzdHIpOwogICAg
ICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZy
YWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0gZWxzZSAKQEAgLTg0NCw3ICs4NDEsNyBA
QCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgICAgICAgICAg
ICAgU3RyaW5nIHN0cihidWZmZXIpOwogICAgICAgICAgICAgICAgIEdsb2JhbFVubG9jayhjYkRh
dGEpOwogICAgICAgICAgICAgICAgIDo6Q2xvc2VDbGlwYm9hcmQoKTsKLSAgICAgICAgICAgICAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KGNvbnRleHQuZ2V0KCksIHN0cik7CisgICAgICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBzdHIp
OwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtODYxLDExICs4
NTgsMTAgQEAgdm9pZCBQYXN0ZWJvYXJkOjpzZXRFeHRlcm5hbERhdGFPYmplY3QoSQogICAgIG1f
ZGF0YU9iamVjdCA9IGRhdGFPYmplY3Q7CiB9CiAKLXN0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2Fj
aGVkSW1hZ2UoRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBDYWNoZWRJbWFnZSogZ2V0Q2FjaGVk
SW1hZ2UoRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBBdHRlbXB0IHRvIHB1bGwgQ2FjaGVk
SW1hZ2UgZnJvbSBlbGVtZW50Ci0gICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBlbGVtZW50LT5yZW5kZXJlcigpOworICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlciB8fCAhcmVuZGVy
ZXItPmlzSW1hZ2UoKSkgCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMDAxLDE4ICs5OTcsMTgg
QEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSERyb3BDb250ZW50KAogICAgIHJldHVybiBt
ZW1PYmo7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFn
ZVRvRGF0YU9iamVjdChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCkKIHsKICAgICAv
LyBTaG92ZSBpbWFnZSBkYXRhIGludG8gYSBEYXRhT2JqZWN0IGZvciB1c2UgYXMgYSBmaWxlCiAg
ICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxlbWVudCk7Ci0g
ICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxl
bWVudC0+cmVuZGVyZXIoKSkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQorICAgIGlmICgh
Y2FjaGVkSW1hZ2UgfHwgIWNhY2hlZEltYWdlLT5pbWFnZUZvclJlbmRlcmVyKGVsZW1lbnQucmVu
ZGVyZXIoKSkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTaGFyZWRCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVu
ZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSktPmRhdGEoKTsKKyAgICBTaGFyZWRCdWZmZXIqIGlt
YWdlQnVmZmVyID0gY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVuZGVyZXIoZWxlbWVudC5yZW5kZXJl
cigpKS0+ZGF0YSgpOwogICAgIGlmICghaW1hZ2VCdWZmZXIgfHwgIWltYWdlQnVmZmVyLT5zaXpl
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhHTE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9
IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IodXJsLnN0cmluZygpLCBlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRyKSwgY2FjaGVkSW1hZ2UpOworICAgIEhHTE9C
QUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3Io
dXJsLnN0cmluZygpLCBlbGVtZW50LmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmFsdEF0dHIpLCBj
YWNoZWRJbWFnZSk7CiAgICAgaWYgKCFpbWFnZUZpbGVEZXNjcmlwdG9yKQogICAgICAgICByZXR1
cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTEwLTA2ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5j
ZXMgaW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZS5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQpOgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKToKKyAgICAgICAgKGRyYWdFeGl0
ZWRDYWxsYmFjayk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBkcmFn
Z2luZ0VudGVyZWQ6XSk6CisgICAgICAgICgtW1dLVmlldyBkcmFnZ2luZ1VwZGF0ZWQ6XSk6Cisg
ICAgICAgICgtW1dLVmlldyBkcmFnZ2luZ0V4aXRlZDpdKToKKyAgICAgICAgKC1bV0tWaWV3IHBl
cmZvcm1EcmFnT3BlcmF0aW9uOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRyYWdFbnRlcmVkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkcmFnVXBkYXRlZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6cGVyZm9ybURyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1E
cmFnU291cmNlQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6YWN0aW9u
TWFza0ZvckRyYWcpOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNl
QWN0aW9uTWFza0ZvclBvaW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3Rh
cnREcmFnKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGll
bnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xp
ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJEcmFnQ2xpZW50TWFj
Lm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcpOgorICAgICAg
ICAoV2ViS2l0OjpjYWNoZWRJbWFnZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6
OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24pOgorCiAyMDEzLTEwLTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBh
cHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZpeCB0aGUgR1RLKyBidWlsZC4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAxNTcwNTQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE5NCw0MCArMTE5NCw0MCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y29tbWl0UGFn
ZVRyYW5zaXRpb25WCiAjZW5kaWYKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCi12b2lkIFdl
YlBhZ2VQcm94eTo6ZHJhZ0VudGVyZWQoRHJhZ0RhdGEqIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcm
IGRyYWdTdG9yYWdlTmFtZSkKK3ZvaWQgV2ViUGFnZVByb3h5OjpkcmFnRW50ZXJlZChEcmFnRGF0
YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lKQogewogICAgIFNhbmRi
b3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlOwogICAgIFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5Owog
ICAgIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkVudGVy
ZWQsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5hbWUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNh
bmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5KTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6
OmRyYWdVcGRhdGVkKERyYWdEYXRhKiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFn
ZU5hbWUpCit2b2lkIFdlYlBhZ2VQcm94eTo6ZHJhZ1VwZGF0ZWQoRHJhZ0RhdGEmIGRyYWdEYXRh
LCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSkKIHsKICAgICBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGVBcnJheSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlRW1wdHlBcnJheTsKICAgICBwZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb25VcGRhdGVkLCBkcmFnRGF0
YSwgZHJhZ1N0b3JhZ2VOYW1lLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBzYW5kYm94RXh0ZW5z
aW9uSGFuZGxlRW1wdHlBcnJheSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpkcmFnRXhpdGVk
KERyYWdEYXRhKiBkcmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUpCit2b2lk
IFdlYlBhZ2VQcm94eTo6ZHJhZ0V4aXRlZChEcmFnRGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFN0cmlu
ZyYgZHJhZ1N0b3JhZ2VOYW1lKQogewogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5k
Ym94RXh0ZW5zaW9uSGFuZGxlOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNh
bmRib3hFeHRlbnNpb25IYW5kbGVFbXB0eUFycmF5OwogICAgIHBlcmZvcm1EcmFnQ29udHJvbGxl
ckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbkV4aXRlZCwgZHJhZ0RhdGEsIGRyYWdTdG9yYWdl
TmFtZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZUVtcHR5
QXJyYXkpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWcoRHJhZ0RhdGEqIGRy
YWdEYXRhLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlLCBjb25zdCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGVBcnJheSYgc2FuZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpCit2b2lkIFdlYlBh
Z2VQcm94eTo6cGVyZm9ybURyYWcoRHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTdHJpbmcmIGRy
YWdTdG9yYWdlTmFtZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYgc2FuZGJv
eEV4dGVuc2lvbnNGb3JVcGxvYWQpCiB7CiAgICAgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9u
KERyYWdDb250cm9sbGVyQWN0aW9uUGVyZm9ybURyYWcsIGRyYWdEYXRhLCBkcmFnU3RvcmFnZU5h
bWUsIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKTsK
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFn
Q29udHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWdEYXRhKiBkcmFnRGF0YSwgY29uc3QgU3RyaW5n
JiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSwgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIHNh
bmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKQordm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWdEYXRhJiBk
cmFnRGF0YSwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgY29uc3QgU2FuZGJveEV4dGVu
c2lvbjo6SGFuZGxlQXJyYXkmIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2FkKQogewogICAgIGlm
ICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAjaWYgUExBVEZPUk0oR1RLKQotICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKGFjdGlvbiwgKmRyYWdEYXRhKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJh
Z0RhdGEpLCBtX3BhZ2VJRCk7CiAjZWxzZQotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEtPmNs
aWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLT5nbG9iYWxQb3NpdGlvbigpLCBkcmFnRGF0YS0+ZHJh
Z2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRyYWdTdG9yYWdlTmFtZSwgZHJhZ0RhdGEtPmZs
YWdzKCksIHNhbmRib3hFeHRlbnNpb25IYW5kbGUsIHNhbmRib3hFeHRlbnNpb25zRm9yVXBsb2Fk
KSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVy
Zm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEuY2xpZW50UG9zaXRpb24o
KSwgZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVy
YXRpb25NYXNrKCksIGRyYWdTdG9yYWdlTmFtZSwgZHJhZ0RhdGEuZmxhZ3MoKSwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbnNGb3JVcGxvYWQpLCBtX3BhZ2VJRCk7CiAj
ZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAko
cmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NzQsMTAgKzU3NCwxMCBAQCBwdWJsaWM6CiAKICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKSAgICAKICAgICAvLyBEcmFnIGFuZCBkcm9wIHN1cHBvcnQuCi0g
ICAgdm9pZCBkcmFnRW50ZXJlZChXZWJDb3JlOjpEcmFnRGF0YSosIGNvbnN0IFN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOwotICAgIHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6
RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKLSAg
ICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEqLCBjb25zdCBTdHJpbmcmIGRyYWdT
dG9yYWdlTmFtZSA9IFN0cmluZygpKTsKLSAgICB2b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRy
YWdEYXRhKiwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7Cisg
ICAgdm9pZCBkcmFnRW50ZXJlZChXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJh
Z1N0b3JhZ2VOYW1lID0gU3RyaW5nKCkpOworICAgIHZvaWQgZHJhZ1VwZGF0ZWQoV2ViQ29yZTo6
RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdTdG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAg
ICB2b2lkIGRyYWdFeGl0ZWQoV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBTdHJpbmcmIGRyYWdT
dG9yYWdlTmFtZSA9IFN0cmluZygpKTsKKyAgICB2b2lkIHBlcmZvcm1EcmFnKFdlYkNvcmU6OkRy
YWdEYXRhJiwgY29uc3QgU3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAK
ICAgICB2b2lkIGRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihXZWJDb3JlOjpEcmFnU2Vz
c2lvbik7CiAgICAgdm9pZCBkcmFnRW5kZWQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGNsaWVu
dFBvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2
NF90IG9wZXJhdGlvbik7CkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBjbGVhckxvYWREZXBlbmRlbnRDYWxsYmFja3MoKTsKIAotICAgIHZvaWQgcGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSos
IGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOworICAgIHZvaWQg
cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uLCBXZWJDb3Jl
OjpEcmFnRGF0YSYsIGNvbnN0IFN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCBjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUmLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYp
OwogCiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmVEaXNjYXJkYWJsZVN0YXRlKCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIz
LDcgKzcyMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWMKIAog
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0
UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFn
T3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKICAgICB3
ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5yZXNldERyYWdPcGVyYXRpb24oKTsKLSAgICB3
ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpOworICAg
IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdFbnRlcmVkKGRyYWdEYXRhKTsKICAg
ICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHkt
PmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uOwogICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBk
cmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogfQpA
QCAtNzY3LDEzICs3NjcsMTMgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJh
Z01vdAogICAgICAgICByZXR1cm4gVFJVRTsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFP
YmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwg
cG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRf
Z2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5
LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJv
eHktPmRyYWdVcGRhdGVkKGRyYWdEYXRhKTsKICAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9
IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdTZXNzaW9uKCkub3BlcmF0aW9uOwog
ICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFn
QWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMg
dm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdEYXRhKiBkcmFn
RGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQpCitzdGF0aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2so
R3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdEYXRhJiBkcmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQp
CiB7CiAgICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhpdGVkIGlmIHdlIGhhdmUganVzdCByZWNlaXZl
ZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKICAgICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9m
IGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuCkBAIC04MDEsNyArODAxLDcgQEAgc3Rh
dGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RybwogICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50
KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFn
X2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpI
YW5kbGUgaGFuZGxlOwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IHNhbmRib3hF
eHRlbnNpb25Gb3JVcGxvYWQ7Ci0gICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVy
Zm9ybURyYWcoJmRyYWdEYXRhLCBTdHJpbmcoKSwgaGFuZGxlLCBzYW5kYm94RXh0ZW5zaW9uRm9y
VXBsb2FkKTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZyhk
cmFnRGF0YSwgU3RyaW5nKCksIGhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CiAg
ICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQsIFRSVUUsIEZBTFNFLCB0aW1lKTsKICAgICByZXR1
cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmll
dy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXcubW0JKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTc3Myw3ICsxNzczLDcgQEAgLSAoTlNE
cmFnT3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPAogICAgIERyYWdEYXRhIGRyYWdEYXRh
KGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+
KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFwcGxp
Y2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7CiAKICAgICBfZGF0YS0+X3BhZ2UtPnJlc2V0RHJh
Z09wZXJhdGlvbigpOwotICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhLCBb
W2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9hcmRdIG5hbWVdKTsKKyAgICBfZGF0YS0+X3Bh
Z2UtPmRyYWdFbnRlcmVkKGRyYWdEYXRhLCBbW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ1Bhc3RlYm9h
cmRdIG5hbWVdKTsKICAgICByZXR1cm4gTlNEcmFnT3BlcmF0aW9uQ29weTsKIH0KIApAQCAtMTc4
Miw3ICsxNzgyLDcgQEAgLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nVXBkYXRlZDooaWQgPAog
ICAgIEludFBvaW50IGNsaWVudChbc2VsZiBjb252ZXJ0UG9pbnQ6W2RyYWdnaW5nSW5mbyBkcmFn
Z2luZ0xvY2F0aW9uXSBmcm9tVmlldzpuaWxdKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFs
UG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwog
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRp
Y19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRp
b25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgX2Rh
dGEtPl9wYWdlLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5n
UGFzdGVib2FyZF0gbmFtZV0pOworICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ1VwZGF0ZWQoZHJhZ0Rh
dGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0pOwogICAgIAogICAg
IFdlYkNvcmU6OkRyYWdTZXNzaW9uIGRyYWdTZXNzaW9uID0gX2RhdGEtPl9wYWdlLT5kcmFnU2Vz
c2lvbigpOwogICAgIE5TSW50ZWdlciBudW1iZXJPZlZhbGlkSXRlbXNGb3JEcm9wID0gZHJhZ1Nl
c3Npb24ubnVtYmVyT2ZJdGVtc1RvQmVBY2NlcHRlZDsKQEAgLTE4MDMsNyArMTgwMyw3IEBAIC0g
KHZvaWQpZHJhZ2dpbmdFeGl0ZWQ6KGlkIDxOU0RyYWdnaW5nSW4KICAgICBJbnRQb2ludCBjbGll
bnQoW3NlbGYgY29udmVydFBvaW50OltkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0gZnJv
bVZpZXc6bmlsXSk7CiAgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0lu
Zm8gZHJhZ2dpbmdMb2NhdGlvbl0sIFtzZWxmIHdpbmRvd10pKTsKICAgICBEcmFnRGF0YSBkcmFn
RGF0YShkcmFnZ2luZ0luZm8sIGNsaWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0
aW9uPihbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBh
cHBsaWNhdGlvbkZsYWdzOmRyYWdnaW5nSW5mb10pOwotICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0V4
aXRlZCgmZHJhZ0RhdGEsIFtbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nUGFzdGVib2FyZF0gbmFtZV0p
OworICAgIF9kYXRhLT5fcGFnZS0+ZHJhZ0V4aXRlZChkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8g
ZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSk7CiAgICAgX2RhdGEtPl9wYWdlLT5yZXNldERyYWdP
cGVyYXRpb24oKTsKIH0KIApAQCAtMTg2Nyw3ICsxODY3LDcgQEAgLSAoQk9PTClwZXJmb3JtRHJh
Z09wZXJhdGlvbjooaWQgPE5TRHJhZwogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5
IHNhbmRib3hFeHRlbnNpb25Gb3JVcGxvYWQ7CiAgICAgY3JlYXRlU2FuZGJveEV4dGVuc2lvbnNG
b3JGaWxlVXBsb2FkKFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSwgc2FuZGJveEV4
dGVuc2lvbkZvclVwbG9hZCk7CiAKLSAgICBfZGF0YS0+X3BhZ2UtPnBlcmZvcm1EcmFnKCZkcmFn
RGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJvYXJkXSBuYW1lXSwgc2FuZGJveEV4
dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVwbG9hZCk7CisgICAgX2RhdGEtPl9w
YWdlLT5wZXJmb3JtRHJhZyhkcmFnRGF0YSwgW1tkcmFnZ2luZ0luZm8gZHJhZ2dpbmdQYXN0ZWJv
YXJkXSBuYW1lXSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSwgc2FuZGJveEV4dGVuc2lvbkZvclVw
bG9hZCk7CiAKICAgICByZXR1cm4gWUVTOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCShy
ZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkRyYWdDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotdm9pZCBXZWJE
cmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRp
b25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSopCit2b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb24sIERy
YWdEYXRhJikKIHsKICAgICBpZiAoYWN0aW9uID09IERyYWdEZXN0aW5hdGlvbkFjdGlvbkxvYWQp
CiAgICAgICAgIG1fcGFnZS0+d2lsbFBlcmZvcm1Mb2FkRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKCk7
CkBAIC00MiwyMiArNDIsMjIgQEAgdm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdE
ZXN0aQogICAgICAgICBtX3BhZ2UtPm1heVBlcmZvcm1VcGxvYWREcmFnRGVzdGluYXRpb25BY3Rp
b24oKTsgLy8gVXBsb2FkIGNhbiBoYXBwZW4gZnJvbSBhIGRyb3AgZXZlbnQgaGFuZGxlciwgc28g
d2Ugc2hvdWxkIHByZXBhcmUgZWFybHkuCiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50Jiwg
Q2xpcGJvYXJkKikKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0
aW9uKERyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJikKIHsKIH0K
IAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFn
KERyYWdEYXRhKikKK0RyYWdEZXN0aW5hdGlvbkFjdGlvbiBXZWJEcmFnQ2xpZW50OjphY3Rpb25N
YXNrRm9yRHJhZyhEcmFnRGF0YSYpCiB7CiAgICAgcmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlv
bkFueTsKIH0KIAotRHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0
aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JiAvKndpbmRvd1BvaW50Ki8pCitEcmFnU291
cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29u
c3QgSW50UG9pbnQmKQogewogICAgIHJldHVybiBEcmFnU291cmNlQWN0aW9uQW55OwogfQogCiAj
aWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKEdUSykKLXZvaWQgV2ViRHJhZ0NsaWVudDo6
c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYs
IENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFn
KERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2Fy
ZCYsIEZyYW1lJiwgYm9vbCkKIHsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHJl
dmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRHJhZ0NsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxNSArNDIsMTUgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3Jl
OjpEcmFnRGF0YSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdT
b3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFn
RGF0YSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6OkRyYWdE
YXRhJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFj
dGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IFdlYkNvcmU6OkNsaXBib2FyZCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdEYXRhJikg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGRyYWdTb3Vy
Y2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHdpbmRvd1BvaW50
KSBPVkVSUklERTsKIAotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0lt
YWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6
OkZyYW1lKiwgYm9vbCBsaW5rRHJhZyA9IGZhbHNlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBX
ZWJDb3JlOjpDbGlwYm9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wgbGlua0RyYWcgPSBmYWxz
ZSkgT1ZFUlJJREU7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCB2b2lkIGRlY2xh
cmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lLCBET01FbGVt
ZW50KiwgTlNVUkwqLCBOU1N0cmluZyosIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShjb25zdCBTdHJpbmcmIHBhc3Rl
Ym9hcmROYW1lLCBXZWJDb3JlOjpFbGVtZW50JiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3Qg
U3RyaW5nJiwgV2ViQ29yZTo6RnJhbWUqKSBPVkVSUklERTsKICNlbmRpZgogCiAgICAgdmlydHVh
bCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgT1ZFUlJJREU7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBjb252ZQogICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOwogfQogCi12b2lk
IFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJ
bnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwg
Q2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiwgYm9vbCkKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6
c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQ
b3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBDbGlwYm9hcmQmIGNsaXBi
b2FyZCwgRnJhbWUmLCBib29sKQogewogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1h
cCA9IGNvbnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJlYWJsZUJpdG1hcChkcmFnSW1hZ2UpOwogICAg
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBX
ZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUgogICAgIGlmIChiaXRtYXAgJiYgIWJp
dG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0ID0gY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuZGF0
YU9iamVjdCgpOwotICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVu
dFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7
CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVi
b2FyZCgpLmRhdGFPYmplY3QoKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkYXRhT2JqZWN0Lmdl
dCgpLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGNsaXBib2FyZC5zb3VyY2VPcGVy
YXRpb24oKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0
RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkRyYWdDbGllbnRNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0Ns
aWVudE1hYy5tbQkocmV2aXNpb24gMTU3MDU0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRHJhZ0NsaWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNzYsMjIgKzc2LDIyIEBAIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29u
dmUKICAgICByZXR1cm4gYml0bWFwLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBXZWJEcmFnQ2xpZW50
OjpzdGFydERyYWcoUmV0YWluUHRyPE5TSW1hZ2U+IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqIGZyYW1lLCBib29sIGxpbmtE
cmFnKQordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoUmV0YWluUHRyPE5TSW1hZ2U+IGlt
YWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkJiwg
RnJhbWUmIGZyYW1lLCBib29sIGxpbmtEcmFnKQogewogICAgIEludFNpemUgYml0bWFwU2l6ZShb
aW1hZ2UuZ2V0KCkgc2l6ZV0pOwotICAgIGJpdG1hcFNpemUuc2NhbGUoZnJhbWUtPnBhZ2UoKS0+
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CisgICAgYml0bWFwU2l6ZS5zY2FsZShmcmFtZS5wYWdlKCkt
PmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1h
cCA9IGNvbnZlcnRJbWFnZVRvQml0bWFwKGltYWdlLmdldCgpLCBiaXRtYXBTaXplKTsKICAgICBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CiAgICAgaWYgKCFiaXRtYXAgfHwgIWJpdG1h
cC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1F
OiBTZWVtcyB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIG5hbWVkIFN0YXJ0RHJhZywgbm90IFNldERy
YWdJbWFnZS4KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0RHJh
Z0ltYWdlKGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxp
bmtEcmFnKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldERy
YWdJbWFnZShmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocG9pbnQpLCBoYW5kbGUsIGxp
bmtEcmFnKSk7CiB9CiAKLXN0YXRpYyBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2Uo
RWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1h
Z2UoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxl
bWVudC0+cmVuZGVyZXIoKTsKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gZWxlbWVudC5y
ZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlm
ICghcmVuZGVyZXItPmlzUmVuZGVySW1hZ2UoKSkKQEAgLTEwMiwyOSArMTAyLDI3IEBAIHN0YXRp
YyBXZWJDb3JlOjpDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UKICAgICByZXR1cm4gaW1hZ2U7CiB9
CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1lbnQgKmVsZW1lbnQsIE5TVVJMICpVUkwsIE5T
U3RyaW5nICp0aXRsZSwgV2ViQ29yZTo6RnJhbWUqKQordm9pZCBXZWJEcmFnQ2xpZW50OjpkZWNs
YXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEZyYW1lKikK
IHsKLSAgICBBU1NFUlQoZWxlbWVudCk7CiAgICAgQVNTRVJUKHBhc3RlYm9hcmROYW1lID09IFN0
cmluZyhOU0RyYWdQYm9hcmQpKTsKIAotICAgIEVsZW1lbnQqIGNvcmVFbGVtZW50ID0gY29yZShl
bGVtZW50KTsKKyAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSogaW1hZ2UgPSBjYWNoZWRJbWFnZShl
bGVtZW50KTsKIAotICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlKiBpbWFnZSA9IGNhY2hlZEltYWdl
KGNvcmVFbGVtZW50KTsKLQotICAgIE5TU3RyaW5nICpleHRlbnNpb24gPSBAIiI7CisgICAgU3Ry
aW5nIGV4dGVuc2lvbjsKICAgICBpZiAoaW1hZ2UpIHsKICAgICAgICAgZXh0ZW5zaW9uID0gaW1h
Z2UtPmltYWdlKCktPmZpbGVuYW1lRXh0ZW5zaW9uKCk7Ci0gICAgICAgIGlmICghW2V4dGVuc2lv
biBsZW5ndGhdKQorICAgICAgICBpZiAoZXh0ZW5zaW9uLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIVt0aXRsZSBsZW5ndGhdKSB7Ci0gICAgICAgIHRp
dGxlID0gW1tVUkwgcGF0aF0gbGFzdFBhdGhDb21wb25lbnRdOwotICAgICAgICBpZiAoIVt0aXRs
ZSBsZW5ndGhdKQotICAgICAgICAgICAgdGl0bGUgPSBbVVJMIF93ZWJfdXNlclZpc2libGVTdHJp
bmddOworICAgIFN0cmluZyB0aXRsZSA9IGxhYmVsOworICAgIGlmICh0aXRsZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgdGl0bGUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKKyAgICAgICAgaWYg
KHRpdGxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRpdGxlID0gWyhOU1VSTCAqKXVybCBfd2Vi
X3VzZXJWaXNpYmxlU3RyaW5nXTsKICAgICB9CiAKLSAgICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2
ZT4gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShjb3JlRWxlbWVudCk7CisgICAg
UmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVh
dGUoJmVsZW1lbnQpOwogCiAgICAgTlNVUkxSZXNwb25zZSAqcmVzcG9uc2UgPSBpbWFnZS0+cmVz
cG9uc2UoKS5uc1VSTFJlc3BvbnNlKCk7CiAgICAgCkBAIC0xNDYsNyArMTQ0LDcgQEAgdm9pZCBX
ZWJEcmFnQ2xpZW50OjpkZWNsYXJlQW5kV3JpdGVEcmFnSQogICAgICAgICBtZW1jcHkoc2hhcmVk
TWVtb3J5QnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+ZGF0YSgpLCBhcmNoaXZlU2l6ZSk7CiAgICAg
ICAgIHNoYXJlZE1lbW9yeUJ1ZmZlci0+Y3JlYXRlSGFuZGxlKGFyY2hpdmVIYW5kbGUsIFNoYXJl
ZE1lbW9yeTo6UmVhZE9ubHkpOyAgICAgICAgICAgIAogICAgIH0KLSAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0UHJvbWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBp
bWFnZUhhbmRsZSwgaW1hZ2VTaXplLCBTdHJpbmcoW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1l
XSksIFN0cmluZyhleHRlbnNpb24pLCBTdHJpbmcodGl0bGUpLCBTdHJpbmcoW1tyZXNwb25zZSBV
UkxdIGFic29sdXRlU3RyaW5nXSksIFN0cmluZyhbVVJMIF93ZWJfdXNlclZpc2libGVTdHJpbmdd
KSwgYXJjaGl2ZUhhbmRsZSwgYXJjaGl2ZVNpemUpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2V0UHJvbWlzZWREYXRhKHBhc3RlYm9hcmROYW1lLCBpbWFnZUhh
bmRsZSwgaW1hZ2VTaXplLCBTdHJpbmcoW3Jlc3BvbnNlIHN1Z2dlc3RlZEZpbGVuYW1lXSksIGV4
dGVuc2lvbiwgdGl0bGUsIFN0cmluZyhbW3Jlc3BvbnNlIFVSTF0gYWJzb2x1dGVTdHJpbmddKSwg
U3RyaW5nKFsoTlNVUkwgKil1cmwgX3dlYl91c2VyVmlzaWJsZVN0cmluZ10pLCBhcmNoaXZlSGFu
ZGxlLCBhcmNoaXZlU2l6ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9u
IDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU0MCwxOSArMjU0MCwxOSBAQCB2b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvCiAKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNh
c2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVkOgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2UtPmRyYWdD
b250cm9sbGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdEYXRhKSkpOworICAgICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3BhZ2Ut
PmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpKSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQ6Ci0gICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKG1f
cGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7CisgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0YSkpKTsKICAg
ICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERyYWdDb250cm9sbGVyQWN0aW9uRXhpdGVkOgotICAg
ICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOworICAg
ICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0V4aXRlZChkcmFnRGF0YSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvblBlcmZvcm1EcmFnOiB7
Ci0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0RhdGEp
OworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoZHJhZ0RhdGEp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI1NzUsMTUgKzI1NzUsMTUgQEAgdm9pZCBX
ZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3RpbwogICAgIERyYWdEYXRhIGRyYWdEYXRh
KGRyYWdTdG9yYWdlTmFtZSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBzdGF0aWNf
Y2FzdDxEcmFnT3BlcmF0aW9uPihkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2spLCBzdGF0aWNf
Y2FzdDxEcmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpKTsKICAgICBzd2l0Y2ggKGFjdGlvbikg
ewogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJBY3Rpb25FbnRlcmVkOgotICAgICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihtX3Bh
Z2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdEYXRhKSkpOworICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoZHJhZ0RhdGEpKSk7CiAgICAg
ICAgIGJyZWFrOwogCiAgICAgY2FzZSBEcmFnQ29udHJvbGxlckFjdGlvblVwZGF0ZWQ6Ci0gICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250cm9sbGVy
QWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpKSk7
CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURyYWdDb250
cm9sbGVyQWN0aW9uKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnVXBkYXRlZChkcmFnRGF0
YSkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgRHJhZ0NvbnRyb2xsZXJB
Y3Rpb25FeGl0ZWQ6Ci0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVk
KCZkcmFnRGF0YSk7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRXhpdGVk
KGRyYWdEYXRhKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgRHJhZ0NvbnRy
b2xsZXJBY3Rpb25QZXJmb3JtRHJhZzogewpAQCAtMjU5NSw3ICsyNTk1LDcgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3RpbwogICAgICAgICAgICAgICAgIG1fcGVuZGlu
Z0Ryb3BFeHRlbnNpb25zRm9yRmlsZVVwbG9hZC5hcHBlbmQoZXh0ZW5zaW9uKTsKICAgICAgICAg
fQogCi0gICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZygmZHJhZ0Rh
dGEpOworICAgICAgICBtX3BhZ2UtPmRyYWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoZHJhZ0Rh
dGEpOwogCiAgICAgICAgIC8vIElmIHdlIHN0YXJ0ZWQgbG9hZGluZyBhIGxvY2FsIGZpbGUsIHRo
ZSBzYW5kYm94IGV4dGVuc2lvbiB0cmFja2VyIHdvdWxkIGhhdmUgYWRvcHRlZCB0aGlzCiAgICAg
ICAgIC8vIHBlbmRpbmcgZHJvcCBzYW5kYm94IGV4dGVuc2lvbi4gSWYgbm90LCB3ZSdsbCBwbGF5
IGl0IHNhZmUgYW5kIGNsZWFyIGl0LgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNpb24gMTU3
MDU0KQorKysgU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTcgQEAKKzIwMTMtMTAtMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBDVFRFOiBVc2UgcmVmZXJlbmNlcyBpbiBhbmQgYXJvdW5kIERyYWdDb250cm9sbGVy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MjcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVu
dEVmbDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhZ0NsaWVudEVmbDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYWdDbGllbnRFZmw6OmFjdGlvbk1hc2tGb3JEcmFnKToKKyAgICAgICAgKFdl
YkNvcmU6OkRyYWdDbGllbnRFZmw6OnN0YXJ0RHJhZyk6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEVmbC5oOgorCiAyMDEzLTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRnJhbWVQb2xpY3lGdW5jdGlvbiBzaG91bGQgYmUg
YW4gc3RkOjpmdW5jdGlvbgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQv
RHJhZ0NsaWVudEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9X
ZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSwxNyArMzUsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotdm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdEZXN0aW5h
dGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikKK3ZvaWQgRHJhZ0Ns
aWVudEVmbDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uLCBEcmFnRGF0YSYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBE
cmFnQ2xpZW50RWZsOjp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlv
biwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqKQordm9pZCBEcmFnQ2xpZW50RWZsOjp3aWxs
UGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQm
LCBDbGlwYm9hcmQmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLURyYWdEZXN0aW5h
dGlvbkFjdGlvbiBEcmFnQ2xpZW50RWZsOjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCitE
cmFnRGVzdGluYXRpb25BY3Rpb24gRHJhZ0NsaWVudEVmbDo6YWN0aW9uTWFza0ZvckRyYWcoRHJh
Z0RhdGEmKQogewogICAgIHJldHVybiBEcmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7CiB9CkBAIC01
NSw3ICs1NSw3IEBAIERyYWdTb3VyY2VBY3Rpb24gRHJhZ0NsaWVudEVmbDo6ZHJhZ1NvdXIKICAg
ICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlvbkFueTsKIH0KIAotdm9pZCBEcmFnQ2xpZW50RWZsOjpz
dGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jiwg
Q2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKQordm9pZCBEcmFnQ2xpZW50RWZsOjpzdGFydERyYWco
RHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJk
JiwgRnJhbWUmLCBib29sKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50RWZsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEVmbC5oCShyZXZp
c2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xp
ZW50RWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE4ICszNiwxOCBAQAogI2luY2x1ZGUgIkRy
YWdDbGllbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworCiBjbGFzcyBEcmFnQ2xpZW50RWZs
IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRp
b25BY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJm
b3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCopOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdE
YXRhKik7CisgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCk7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhX
ZWJDb3JlOjpEcmFnRGF0YSYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlv
biBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3
aW5kb3dQb2ludCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJ
bWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3Jl
OjpGcmFtZSosIGJvb2wgbGlua0RyYWcgPSBmYWxzZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJh
Z0NvbnRyb2xsZXJEZXN0cm95ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNv
cmU6OkRyYWdJbWFnZVJlZiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdJbWFnZU9yaWdp
biwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQm
LCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wgbGlua0RyYWcgPSBmYWxzZSk7CiB9OworCiB9CiAKICNl
bmRpZiAvLyBEcmFnQ2xpZW50RWZsX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1
NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIyIEBACisyMDEzLTEwLTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxl
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVu
dDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpE
cmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24pOgorICAgICAgICAoV2ViS2l0
OjpEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyk6CisgICAgICAgIChXZWJLaXQ6OkRyYWdD
bGllbnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0
ay5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKGRyYWdF
eGl0ZWRDYWxsYmFjayk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb24pOgor
ICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYWdfZGF0YV9yZWNlaXZlZCk6CisgICAgICAgICh3
ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9wKToKKwogMjAxMy0xMC0wNCAgUGhpbGlwcGUgTm9ybWFu
ZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXNlck1lZGlhQ2xpZW50
R3RrIG5lZWRzIEFQSSB1cGRhdGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0RyYWdDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3Vy
Y2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsMTYgKzU1LDE2IEBAIERyYWdDbGllbnQ6On5EcmFnQ2xpZW50KCkKIHsKIH0K
IAotdm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFn
RGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikKK3ZvaWQgRHJhZ0NsaWVudDo6d2lsbFBlcmZv
cm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBEcmFnRGF0YSYp
CiB7CiB9CiAKLXZvaWQgRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERy
YWdTb3VyY2VBY3Rpb24sIGNvbnN0IEludFBvaW50JiBzdGFydFBvcywgQ2xpcGJvYXJkKikKK3Zv
aWQgRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rp
b24sIGNvbnN0IEludFBvaW50JiBzdGFydFBvcywgQ2xpcGJvYXJkJikKIHsKICAgICBtX3N0YXJ0
UG9zID0gc3RhcnRQb3M7CiB9CiAKLURyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50Ojph
Y3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCitEcmFnRGVzdGluYXRpb25BY3Rpb24gRHJhZ0Ns
aWVudDo6YWN0aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEmKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIERyYWdEZXN0aW5hdGlvbkFjdGlvbkFueTsKQEAgLTc2LDE0ICs3Niwx
NCBAQCBEcmFnU291cmNlQWN0aW9uIERyYWdDbGllbnQ6OmRyYWdTb3VyY2VBCiAgICAgcmV0dXJu
IERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKLXZvaWQgRHJhZ0NsaWVudDo6c3RhcnREcmFnKERy
YWdJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwgY29uc3Qg
SW50UG9pbnQmIGV2ZW50UG9zLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lLCBi
b29sIGxpbmtEcmFnKQordm9pZCBEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGlt
YWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZXZl
bnRQb3MsIENsaXBib2FyZCYgY2xpcGJvYXJkLCBGcmFtZSYgZnJhbWUsIGJvb2wgbGlua0RyYWcp
CiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dl
Yl92aWV3KGtpdChmcmFtZSkpOwotICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0
ID0gY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOworICAgIFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhraXQoJmZyYW1lKSk7
CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSBjbGlwYm9hcmQucGFzdGVi
b2FyZCgpLmRhdGFPYmplY3QoKTsKICAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExp
c3QgPSBhZG9wdEdSZWYoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoZGF0YU9iamVjdC5nZXQoKSkpOwogICAgIEdPd25Q
dHI8R2RrRXZlbnQ+IGN1cnJlbnRFdmVudChndGtfZ2V0X2N1cnJlbnRfZXZlbnQoKSk7CiAKLSAg
ICBHZGtEcmFnQ29udGV4dCogY29udGV4dCA9IGd0a19kcmFnX2JlZ2luKEdUS19XSURHRVQobV93
ZWJWaWV3KSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMo
Y2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSksIDEsIGN1cnJlbnRFdmVudC5nZXQoKSk7Cisg
ICAgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQgPSBndGtfZHJhZ19iZWdpbihHVEtfV0lER0VUKG1f
d2ViVmlldyksIHRhcmdldExpc3QuZ2V0KCksIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25z
KGNsaXBib2FyZC5zb3VyY2VPcGVyYXRpb24oKSksIDEsIGN1cnJlbnRFdmVudC5nZXQoKSk7CiAg
ICAgd2ViVmlldy0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuc3RhcnRlZERyYWcoY29udGV4dCwg
ZGF0YU9iamVjdC5nZXQoKSk7CiAKICAgICAvLyBBIGRyYWcgc3RhcnRpbmcgc2hvdWxkIHByZXZl
bnQgYSBkb3VibGUtY2xpY2sgZnJvbSBoYXBwZW5pbmcuIFRoaXMgbWlnaHQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmgJKHJldmlz
aW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGll
bnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjYgKzQwLDI0IEBAIHR5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJWaWV3IFdlYktpdFdlYlYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLSAgICBj
bGFzcyBEcmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgRHJhZ0NsaWVudChXZWJLaXRXZWJWaWV3Kik7Ci0gICAgICAgIH5EcmFnQ2xp
ZW50KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEq
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihXZWJD
b3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6
OkNsaXBib2FyZCopOwotICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFj
dGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSopOwotCi0gICAgICAgIHZp
cnR1YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2ludCk7Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgZXZlbnRQb3MsIFdlYkNvcmU6OkNsaXBib2FyZCosIFdlYkNvcmU6OkZyYW1lKiwgYm9v
bCBsaW5rRHJhZyA9IGZhbHNlKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xs
ZXJEZXN0cm95ZWQoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdlYktpdFdlYlZpZXcqIG1f
d2ViVmlldzsKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zdGFydFBvczsKLSAgICAgICAg
V2ViQ29yZTo6RHJhZ0ljb24gbV9kcmFnSWNvbjsKLSAgICB9OworY2xhc3MgRHJhZ0NsaWVudCA6
IHB1YmxpYyBXZWJDb3JlOjpEcmFnQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBEcmFnQ2xpZW50KFdl
YktpdFdlYlZpZXcqKTsKKyAgICB+RHJhZ0NsaWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGRy
YWdDb250cm9sbGVyRGVzdHJveWVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1E
cmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJD
b3JlOjpEcmFnRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VB
Y3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCBXZWJDb3JlOjpDbGlwYm9hcmQmKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5h
dGlvbkFjdGlvbiBhY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHZp
cnR1YWwgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBv
aW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiB3aW5kb3dQb2ludCk7CisgICAgdmlydHVhbCB2
b2lkIHN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnSW1hZ2VSZWYsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiBkcmFnSW1hZ2VPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBldmVudFBvcywg
V2ViQ29yZTo6Q2xpcGJvYXJkJiwgV2ViQ29yZTo6RnJhbWUmLCBib29sIGxpbmtEcmFnID0gZmFs
c2UpOworCitwcml2YXRlOgorICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBXZWJD
b3JlOjpJbnRQb2ludCBtX3N0YXJ0UG9zOworICAgIFdlYkNvcmU6OkRyYWdJY29uIG1fZHJhZ0lj
b247Cit9OwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyOSw3ICsxNTI5LDcg
QEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdfZGF0YV9nZQogICAgIFdFQktJVF9X
RUJfVklFVyh3aWRnZXQpLT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5kbGVHZXREcmFnRGF0
YShjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZvKTsKIH0KIAotc3RhdGljIHZvaWQgZHJhZ0V4
aXRlZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSogZHJhZ0RhdGEsIGJvb2wg
ZHJvcEhhcHBlbmVkKQorc3RhdGljIHZvaWQgZHJhZ0V4aXRlZENhbGxiYWNrKEd0a1dpZGdldCog
d2lkZ2V0LCBEcmFnRGF0YSYgZHJhZ0RhdGEsIGJvb2wgZHJvcEhhcHBlbmVkKQogewogICAgIC8v
IERvbid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBoYXZlIGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRy
b3Agc2lnbmFsLiBUaGlzCiAgICAgLy8gaGFwcGVucyBpbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3Nm
dWwgZHJvcCBvbnRvIHRoZSB2aWV3LgpAQCAtMTU1Miw3ICsxNTUyLDcgQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdF93ZWJfdmlld19kcmFnX21vdAogICAgICAgICByZXR1cm4gVFJVRTsKIAogICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9p
bnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3Bl
cmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFn
T3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCkuZHJh
Z1VwZGF0ZWQoJmRyYWdEYXRhKS5vcGVyYXRpb247CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRp
b24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVkKGRyYWdEYXRh
KS5vcGVyYXRpb247CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25U
b1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiAgICAgcmV0dXJuIFRSVUU7
CiB9CkBAIC0xNTY2LDcgKzE1NjYsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJh
Z19kYXRhX3JlCiAgICAgICAgIHJldHVybjsKIAogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFP
YmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwg
cG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRf
Z2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNv
cmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdEYXRhKS5vcGVy
YXRpb247CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFn
Q29udHJvbGxlcigpLmRyYWdFbnRlcmVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiAgICAgZ2RrX2Ry
YWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3Bl
cmF0aW9uKSwgdGltZSk7CiB9CiAKQEAgLTE1NzksNyArMTU3OSw3IEBAIHN0YXRpYyBnYm9vbGVh
biB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm8KIAogICAgIEludFBvaW50IHBvc2l0aW9uKHgsIHkp
OwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QsIHBvc2l0aW9uLCBjb252ZXJ0V2lk
Z2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9E
cmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAg
ICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7
CisgICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZyhkcmFnRGF0
YSk7CiAgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRleHQsIFRSVUUsIEZBTFNFLCB0aW1lKTsKICAg
ICByZXR1cm4gVFJVRTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzA1NCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI3IEBACisyMDEzLTEwLTA2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgQ1RURTogVXNlIHJlZmVyZW5jZXMgaW4gYW5kIGFyb3VuZCBEcmFnQ29udHJvbGxlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDI3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJEcmFnQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0Ns
aWVudC5tbToKKyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OmFjdGlvbk1hc2tGb3JEcmFnKToKKyAg
ICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKToK
KyAgICAgICAgKFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbik6Cisg
ICAgICAgIChXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcpOgorICAgICAgICAoV2ViRHJhZ0NsaWVu
dDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVj
dFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0
ZWJvYXJkOmZvclR5cGU6aW5Db250ZXh0OnN1YnJlc291cmNlczpdKToKKyAgICAgICAgKiBXZWJW
aWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dlYlZpZXcgZHJhZ2dpbmdFbnRlcmVkOl0pOgor
ICAgICAgICAoLVtXZWJWaWV3IGRyYWdnaW5nVXBkYXRlZDpdKToKKyAgICAgICAgKC1bV2ViVmll
dyBkcmFnZ2luZ0V4aXRlZDpdKToKKyAgICAgICAgKC1bV2ViVmlldyBwZXJmb3JtRHJhZ09wZXJh
dGlvbjpdKToKKwogMjAxMy0xMC0wNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIENUVEU6IFRocmVhZCByZWZlcmVuY2VzIHRocm91Z2ggbWFya3VwLmgKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHJl
dmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRy
YWdDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDEzIEBACiBjbGFzcyBXZWJE
cmFnQ2xpZW50IDogcHVibGljIFdlYkNvcmU6OkRyYWdDbGllbnQgewogcHVibGljOgogICAgIFdl
YkRyYWdDbGllbnQoV2ViVmlldyopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdE
ZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24sIFdlYkNvcmU6
OkRyYWdEYXRhKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1Nv
dXJjZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIFdlYkNvcmU6OkNsaXBib2FyZCopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbk1hc2tGb3JEcmFnKFdlYkNvcmU6OkRyYWdE
YXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiwgV2ViQ29yZTo6RHJhZ0Rh
dGEmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnU291cmNlQWN0
aW9uKFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
V2ViQ29yZTo6Q2xpcGJvYXJkJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFn
RGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdTb3VyY2VBY3Rpb24gZHJhZ1NvdXJjZUFj
dGlvbk1hc2tGb3JQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgd2luZG93UG9pbnQpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVm
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1BvcywgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlwYm9hcmQqLCBXZWJDb3JlOjpGcmFtZSosIGJvb2wg
bGlua0RyYWcpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFn
SW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSwgRE9NRWxlbWVudCosIE5TVVJMKiwg
TlNTdHJpbmcqLCBXZWJDb3JlOjpGcmFtZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
dGFydERyYWcoV2ViQ29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
ZHJhZ1BvcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGV2ZW50UG9zLCBXZWJDb3JlOjpDbGlw
Ym9hcmQmLCBXZWJDb3JlOjpGcmFtZSYsIGJvb2wgbGlua0RyYWcpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSwgV2ViQ29yZTo6RWxlbWVudCYsIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0
cmluZyYsIFdlYkNvcmU6OkZyYW1lKikgT1ZFUlJJREU7CiBwcml2YXRlOgogICAgIFdlYlZpZXcq
IG1fd2ViVmlldzsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJEcmFnQ2xpZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAKKyNpbXBvcnQgIkRP
TUVsZW1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiV2Vi
RE9NT3BlcmF0aW9ucy5oIgogI2ltcG9ydCAiV2ViRnJhbWUuaCIKQEAgLTY2LDE0ICs2NywxNCBA
QCBzdGF0aWMgV2ViSFRNTFZpZXcgKmdldFRvcEhUTUxWaWV3KEZyYW1lCiAgICAgcmV0dXJuIChX
ZWJIVE1MVmlldyopW1traXQoJmZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpKSBmcmFtZVZpZXdd
IGRvY3VtZW50Vmlld107CiB9CiAKLVdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBXZWJE
cmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSogZHJhZ0RhdGEp
CitXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gV2ViRHJhZ0NsaWVudDo6YWN0aW9uTWFz
a0ZvckRyYWcoV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIHJldHVybiAoV2Vi
Q29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKVtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2Fy
ZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyBkcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dp
bmdJbmZvOmRyYWdEYXRhLT5wbGF0Zm9ybURhdGEoKV07CisgICAgcmV0dXJuIChXZWJDb3JlOjpE
cmFnRGVzdGluYXRpb25BY3Rpb24pW1ttX3dlYlZpZXcgX1VJRGVsZWdhdGVGb3J3YXJkZXJdIHdl
YlZpZXc6bV93ZWJWaWV3IGRyYWdEZXN0aW5hdGlvbkFjdGlvbk1hc2tGb3JEcmFnZ2luZ0luZm86
ZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCldOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlv
biBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKiBkcmFnRGF0YSkKK3ZvaWQgV2ViRHJhZ0NsaWVu
dDo6d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2ViQ29yZTo6RHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uIGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhKQogewotICAgIFtb
bV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmlldyB3aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbjooV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWFjdGlv
biBmb3JEcmFnZ2luZ0luZm86ZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgpXTsKKyAgICBbW21fd2Vi
VmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBlcmZvcm1E
cmFnRGVzdGluYXRpb25BY3Rpb246KFdlYkRyYWdEZXN0aW5hdGlvbkFjdGlvbilhY3Rpb24gZm9y
RHJhZ2dpbmdJbmZvOmRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpXTsKIH0KIAogCkBAIC04MywyNyAr
ODQsMjMgQEAgV2ViQ29yZTo6RHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OgogICAgIHJl
dHVybiAoRHJhZ1NvdXJjZUFjdGlvbilbW21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0g
d2ViVmlldzptX3dlYlZpZXcgZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludDp2aWV3UG9pbnRd
OwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihX
ZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uIGFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IG1vdXNlRG93blBvaW50LCBXZWJDb3JlOjpDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3ZvaWQgV2Vi
RHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKFdlYkNvcmU6OkRyYWdTb3Vy
Y2VBY3Rpb24gYWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbW91c2VEb3duUG9pbnQs
IFdlYkNvcmU6OkNsaXBib2FyZCYgY2xpcGJvYXJkKQogewotICAgIEFTU0VSVChjbGlwYm9hcmQp
OwotICAgIFtbbV93ZWJWaWV3IF9VSURlbGVnYXRlRm9yd2FyZGVyXSB3ZWJWaWV3Om1fd2ViVmll
dyB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb246KFdlYkRyYWdTb3VyY2VBY3Rpb24pYWN0aW9u
IGZyb21Qb2ludDptb3VzZURvd25Qb2ludCB3aXRoUGFzdGVib2FyZDpbTlNQYXN0ZWJvYXJkIHBh
c3RlYm9hcmRXaXRoTmFtZTpjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5uYW1lKCldXTsKKyAgICBb
W21fd2ViVmlldyBfVUlEZWxlZ2F0ZUZvcndhcmRlcl0gd2ViVmlldzptX3dlYlZpZXcgd2lsbFBl
cmZvcm1EcmFnU291cmNlQWN0aW9uOihXZWJEcmFnU291cmNlQWN0aW9uKWFjdGlvbiBmcm9tUG9p
bnQ6bW91c2VEb3duUG9pbnQgd2l0aFBhc3RlYm9hcmQ6W05TUGFzdGVib2FyZCBwYXN0ZWJvYXJk
V2l0aE5hbWU6Y2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1lKCldXTsKIH0KIAotdm9pZCBXZWJE
cmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9p
bnQmIGF0LCBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCogY2xpcGJvYXJkLCBG
cmFtZSogZnJhbWUsIGJvb2wgbGlua0RyYWcpCit2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJh
ZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgYXQsIGNvbnN0IEludFBv
aW50JiBldmVudFBvcywgQ2xpcGJvYXJkJiBjbGlwYm9hcmQsIEZyYW1lJiBmcmFtZSwgYm9vbCBs
aW5rRHJhZykKIHsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJU
KGNsaXBib2FyZCk7Ci0gICAgUmV0YWluUHRyPFdlYkhUTUxWaWV3PiBodG1sVmlldyA9IChXZWJI
VE1MVmlldyopW1traXQoZnJhbWUpIGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKKyAgICBSZXRh
aW5QdHI8V2ViSFRNTFZpZXc+IGh0bWxWaWV3ID0gKFdlYkhUTUxWaWV3KilbW2tpdCgmZnJhbWUp
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKICAgICBpZiAoIVtodG1sVmlldy5nZXQoKSBpc0tp
bmRPZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgTlNFdmVudCAqZXZlbnQgPSBsaW5rRHJhZyA/IGZyYW1lLT5ldmVudEhhbmRsZXIoKS5jdXJy
ZW50TlNFdmVudCgpIDogW2h0bWxWaWV3LmdldCgpIF9tb3VzZURvd25FdmVudF07Ci0gICAgV2Vi
SFRNTFZpZXcqIHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRNTFZpZXcoZnJhbWUpOworICAgIE5TRXZl
bnQgKmV2ZW50ID0gbGlua0RyYWcgPyBmcmFtZS5ldmVudEhhbmRsZXIoKS5jdXJyZW50TlNFdmVu
dCgpIDogW2h0bWxWaWV3LmdldCgpIF9tb3VzZURvd25FdmVudF07CisgICAgV2ViSFRNTFZpZXcq
IHRvcEhUTUxWaWV3ID0gZ2V0VG9wSFRNTFZpZXcoJmZyYW1lKTsKICAgICBSZXRhaW5QdHI8V2Vi
SFRNTFZpZXc+IHRvcFZpZXdQcm90ZWN0b3IgPSB0b3BIVE1MVmlldzsKICAgICAKICAgICBbdG9w
SFRNTFZpZXcgX3N0b3BBdXRvc2Nyb2xsVGltZXJdOwotICAgIE5TUGFzdGVib2FyZCAqcGFzdGVi
b2FyZCA9IFtOU1Bhc3RlYm9hcmQgcGFzdGVib2FyZFdpdGhOYW1lOmNsaXBib2FyZC0+cGFzdGVi
b2FyZCgpLm5hbWUoKV07CisgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVi
b2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6Y2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5uYW1lKCldOwog
CiAgICAgTlNJbWFnZSAqZHJhZ05TSW1hZ2UgPSBkcmFnSW1hZ2UuZ2V0KCk7CiAgICAgV2ViSFRN
TFZpZXcgKnNvdXJjZUhUTUxWaWV3ID0gaHRtbFZpZXcuZ2V0KCk7CkBAIC0xMjMsMTQgKzEyMCwx
MyBAQCB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSCiAjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdy
aXRlRHJhZ0ltYWdlKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUsIERPTUVsZW1lbnQqIGVs
ZW1lbnQsIE5TVVJMKiBVUkwsIE5TU3RyaW5nKiB0aXRsZSwgV2ViQ29yZTo6RnJhbWUqIGZyYW1l
KSAKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHRpdGxlLCBXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJU
KHBhc3RlYm9hcmROYW1lKTsKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgV2ViSFRNTFZpZXcg
KnNvdXJjZSA9IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsgICAgICAKLSAgICBXZWJBcmNoaXZlICph
cmNoaXZlID0gW2VsZW1lbnQgd2ViQXJjaGl2ZV07CisgICAgV2ViSFRNTFZpZXcgKnNvdXJjZSA9
IGdldFRvcEhUTUxWaWV3KGZyYW1lKTsKKyAgICBXZWJBcmNoaXZlICphcmNoaXZlID0gW2tpdCgm
ZWxlbWVudCkgd2ViQXJjaGl2ZV07CiAgICAgCi0gICAgW1tOU1Bhc3RlYm9hcmQgcGFzdGVib2Fy
ZFdpdGhOYW1lOnBhc3RlYm9hcmROYW1lXSBfd2ViX2RlY2xhcmVBbmRXcml0ZURyYWdJbWFnZUZv
ckVsZW1lbnQ6ZWxlbWVudCBVUkw6VVJMIHRpdGxlOnRpdGxlIGFyY2hpdmU6YXJjaGl2ZSBzb3Vy
Y2U6c291cmNlXTsKKyAgICBbW05TUGFzdGVib2FyZCBwYXN0ZWJvYXJkV2l0aE5hbWU6cGFzdGVi
b2FyZE5hbWVdIF93ZWJfZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlRm9yRWxlbWVudDpraXQoJmVs
ZW1lbnQpIFVSTDp1cmwgdGl0bGU6dGl0bGUgYXJjaGl2ZTphcmNoaXZlIHNvdXJjZTpzb3VyY2Vd
OwogfQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OmRyYWdDb250cm9sbGVyRGVzdHJveWVkKCkgCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE1NzA1NCkK
KysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkK
QEAgLTk5OCw4ICs5OTgsMTAgQEAgLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVu
dDooRAogfQogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxh
Y2U6KEJPT0wpc21hcnRSZXBsYWNlCi17ICAgCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQgPSBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0ZXh0KS5nZXQoKSk7Cit7Cisg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgCisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJh
Z21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCku
Z2V0KCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZy
YWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpz
bWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwNjUsOCAr
MjA2NSwxMSBAQCAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lCiAgICAg
ICAgIFtmcmFnbWVudCBhcHBlbmRDaGlsZDphbmNob3JdOwogICAgICAgICByZXR1cm4gZnJhZ21l
bnQ7CiAgICAgfQotICAgIGlmIChwYm9hcmRUeXBlID09IE5TU3RyaW5nUGJvYXJkVHlwZSkKLSAg
ICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvcmUoY29udGV4dCksIFtb
cGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOk5TU3RyaW5nUGJvYXJkVHlwZV0gcHJlY29tcG9zZWRT
dHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ10pLmdldCgpKTsKKyAgICBpZiAocGJvYXJkVHlwZSA9
PSBOU1N0cmluZ1Bib2FyZFR5cGUpIHsKKyAgICAgICAgaWYgKCFjb250ZXh0KQorICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpOU1N0cmluZ1Bib2Fy
ZFR5cGVdIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKS5nZXQoKSk7Cisg
ICAgfQogICAgIHJldHVybiBuaWw7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0JKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMzMiw3ICs0MzMyLDcgQEAgLSAoTlNEcmFn
T3BlcmF0aW9uKWRyYWdnaW5nRW50ZXJlZDooaWQgPAogICAgIEludFBvaW50IGNsaWVudChbZHJh
Z2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFs
UG9pbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwog
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRp
Y19jYXN0PERyYWdPcGVyYXRpb24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRp
b25NYXNrXSksIFtzZWxmIGFwcGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgcmV0
dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoJmRyYWdEYXRhKS5v
cGVyYXRpb247CisgICAgcmV0dXJuIGNvcmUoc2VsZiktPmRyYWdDb250cm9sbGVyKCkuZHJhZ0Vu
dGVyZWQoZHJhZ0RhdGEpLm9wZXJhdGlvbjsKIH0KIAogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdn
aW5nVXBkYXRlZDooaWQgPE5TRHJhZ2dpbmdJbmZvPilkcmFnZ2luZ0luZm8KQEAgLTQzNDQsNyAr
NDM0NCw3IEBAIC0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ1VwZGF0ZWQ6KGlkIDwKICAgICBJ
bnRQb2ludCBjbGllbnQoW2RyYWdnaW5nSW5mbyBkcmFnZ2luZ0xvY2F0aW9uXSk7CiAgICAgSW50
UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0s
IFtzZWxmIHdpbmRvd10pKTsKICAgICBEcmFnRGF0YSBkcmFnRGF0YShkcmFnZ2luZ0luZm8sIGNs
aWVudCwgZ2xvYmFsLCBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9uPihbZHJhZ2dpbmdJbmZvIGRy
YWdnaW5nU291cmNlT3BlcmF0aW9uTWFza10pLCBbc2VsZiBhcHBsaWNhdGlvbkZsYWdzOmRyYWdn
aW5nSW5mb10pOwotICAgIHJldHVybiBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdVcGRhdGVk
KCZkcmFnRGF0YSkub3BlcmF0aW9uOworICAgIHJldHVybiBwYWdlLT5kcmFnQ29udHJvbGxlcigp
LmRyYWdVcGRhdGVkKGRyYWdEYXRhKS5vcGVyYXRpb247CiB9CiAKIC0gKHZvaWQpZHJhZ2dpbmdF
eGl0ZWQ6KGlkIDxOU0RyYWdnaW5nSW5mbz4pZHJhZ2dpbmdJbmZvCkBAIC00MzU2LDcgKzQzNTYs
NyBAQCAtICh2b2lkKWRyYWdnaW5nRXhpdGVkOihpZCA8TlNEcmFnZ2luZ0luCiAgICAgSW50UG9p
bnQgY2xpZW50KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdMb2NhdGlvbl0pOwogICAgIEludFBvaW50
IGdsb2JhbChnbG9iYWxQb2ludChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5nTG9jYXRpb25dLCBbc2Vs
ZiB3aW5kb3ddKSk7CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJhZ2dpbmdJbmZvLCBjbGllbnQs
IGdsb2JhbCwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oW2RyYWdnaW5nSW5mbyBkcmFnZ2lu
Z1NvdXJjZU9wZXJhdGlvbk1hc2tdKSwgW3NlbGYgYXBwbGljYXRpb25GbGFnczpkcmFnZ2luZ0lu
Zm9dKTsKLSAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFeGl0ZWQoJmRyYWdEYXRhKTsK
KyAgICBwYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdFeGl0ZWQoZHJhZ0RhdGEpOwogfQogCiAt
IChCT09MKXByZXBhcmVGb3JEcmFnT3BlcmF0aW9uOihpZCA8TlNEcmFnZ2luZ0luZm8+KWRyYWdn
aW5nSW5mbwpAQCAtNDM2OSw3ICs0MzY5LDcgQEAgLSAoQk9PTClwZXJmb3JtRHJhZ09wZXJhdGlv
bjooaWQgPE5TRHJhZwogICAgIEludFBvaW50IGNsaWVudChbZHJhZ2dpbmdJbmZvIGRyYWdnaW5n
TG9jYXRpb25dKTsKICAgICBJbnRQb2ludCBnbG9iYWwoZ2xvYmFsUG9pbnQoW2RyYWdnaW5nSW5m
byBkcmFnZ2luZ0xvY2F0aW9uXSwgW3NlbGYgd2luZG93XSkpOwogICAgIERyYWdEYXRhIGRyYWdE
YXRhKGRyYWdnaW5nSW5mbywgY2xpZW50LCBnbG9iYWwsIHN0YXRpY19jYXN0PERyYWdPcGVyYXRp
b24+KFtkcmFnZ2luZ0luZm8gZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrXSksIFtzZWxmIGFw
cGxpY2F0aW9uRmxhZ3M6ZHJhZ2dpbmdJbmZvXSk7Ci0gICAgcmV0dXJuIGNvcmUoc2VsZiktPmRy
YWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoJmRyYWdEYXRhKTsKKyAgICByZXR1cm4gY29yZShz
ZWxmKS0+ZHJhZ0NvbnRyb2xsZXIoKS5wZXJmb3JtRHJhZyhkcmFnRGF0YSk7CiB9CiAKIC0gKE5T
VmlldyAqKV9oaXRUZXN0OihOU1BvaW50ICopcG9pbnQgZHJhZ1R5cGVzOihOU1NldCAqKXR5cGVz
CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViS2l0
L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0xMC0w
NiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENUVEU6IFVzZSByZWZl
cmVuY2VzIGluIGFuZCBhcm91bmQgRHJhZ0NvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMjQyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVu
dC5jcHA6CisgICAgICAgIChXZWJEcmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyk6CisgICAg
ICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbik6Cisg
ICAgICAgIChXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24pOgorICAg
ICAgICAoV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJEcmFnQ2xpZW50Lmg6CisKIDIwMTMtMTAtMDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGcmFtZVBvbGljeUZ1bmN0aW9uIHNob3VsZCBiZSBh
biBzdGQ6OmZ1bmN0aW9uCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkocmV2aXNpb24gMTU3MDU0
KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUy
NTUsNyArNTI1NSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6RHJhZ0UK
ICAgICA6OlNjcmVlblRvQ2xpZW50KG1fdmlld1dpbmRvdywgKExQUE9JTlQpJmxvY2FscHQpOwog
ICAgIERyYWdEYXRhIGRhdGEocERhdGFPYmplY3QsIEludFBvaW50KGxvY2FscHQueCwgbG9jYWxw
dC55KSwgCiAgICAgICAgIEludFBvaW50KHB0LngsIHB0LnkpLCBrZXlTdGF0ZVRvRHJhZ09wZXJh
dGlvbihncmZLZXlTdGF0ZSkpOwotICAgICpwZHdFZmZlY3QgPSBkcmFnT3BlcmF0aW9uVG9EcmFn
Q3Vyc29yKG1fcGFnZS0+ZHJhZ0NvbnRyb2xsZXIoKS5kcmFnRW50ZXJlZCgmZGF0YSkub3BlcmF0
aW9uKTsKKyAgICAqcGR3RWZmZWN0ID0gZHJhZ09wZXJhdGlvblRvRHJhZ0N1cnNvcihtX3BhZ2Ut
PmRyYWdDb250cm9sbGVyKCkuZHJhZ0VudGVyZWQoZGF0YSkub3BlcmF0aW9uKTsKIAogICAgIG1f
bGFzdERyb3BFZmZlY3QgPSAqcGR3RWZmZWN0OwogICAgIG1fZHJhZ0RhdGEgPSBwRGF0YU9iamVj
dDsKQEAgLTUyNzQsNyArNTI3NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmll
dzo6RHJhZ08KICAgICAgICAgOjpTY3JlZW5Ub0NsaWVudChtX3ZpZXdXaW5kb3csIChMUFBPSU5U
KSZsb2NhbHB0KTsKICAgICAgICAgRHJhZ0RhdGEgZGF0YShtX2RyYWdEYXRhLmdldCgpLCBJbnRQ
b2ludChsb2NhbHB0LngsIGxvY2FscHQueSksIAogICAgICAgICAgICAgSW50UG9pbnQocHQueCwg
cHQueSksIGtleVN0YXRlVG9EcmFnT3BlcmF0aW9uKGdyZktleVN0YXRlKSk7Ci0gICAgICAgICpw
ZHdFZmZlY3QgPSBkcmFnT3BlcmF0aW9uVG9EcmFnQ3Vyc29yKG1fcGFnZS0+ZHJhZ0NvbnRyb2xs
ZXIoKS5kcmFnVXBkYXRlZCgmZGF0YSkub3BlcmF0aW9uKTsKKyAgICAgICAgKnBkd0VmZmVjdCA9
IGRyYWdPcGVyYXRpb25Ub0RyYWdDdXJzb3IobV9wYWdlLT5kcmFnQ29udHJvbGxlcigpLmRyYWdV
cGRhdGVkKGRhdGEpLm9wZXJhdGlvbik7CiAgICAgfSBlbHNlCiAgICAgICAgICpwZHdFZmZlY3Qg
PSBEUk9QRUZGRUNUX05PTkU7CiAKQEAgLTUyOTAsNyArNTI5MCw3IEBAIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgV2ViVmlldzo6RHJhZ0wKICAgICBpZiAobV9kcmFnRGF0YSkgewogICAgICAg
ICBEcmFnRGF0YSBkYXRhKG1fZHJhZ0RhdGEuZ2V0KCksIEludFBvaW50KCksIEludFBvaW50KCks
IAogICAgICAgICAgICAgRHJhZ09wZXJhdGlvbk5vbmUpOwotICAgICAgICBtX3BhZ2UtPmRyYWdD
b250cm9sbGVyKCkuZHJhZ0V4aXRlZCgmZGF0YSk7CisgICAgICAgIG1fcGFnZS0+ZHJhZ0NvbnRy
b2xsZXIoKS5kcmFnRXhpdGVkKGRhdGEpOwogICAgICAgICBtX2RyYWdEYXRhID0gMDsKICAgICB9
CiAgICAgcmV0dXJuIFNfT0s7CkBAIC01MzA4LDcgKzUzMDgsNyBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYlZpZXc6OkRyb3AoCiAgICAgOjpTY3JlZW5Ub0NsaWVudChtX3ZpZXdXaW5k
b3csIChMUFBPSU5UKSZsb2NhbHB0KTsKICAgICBEcmFnRGF0YSBkYXRhKHBEYXRhT2JqZWN0LCBJ
bnRQb2ludChsb2NhbHB0LngsIGxvY2FscHQueSksIAogICAgICAgICBJbnRQb2ludChwdC54LCBw
dC55KSwga2V5U3RhdGVUb0RyYWdPcGVyYXRpb24oZ3JmS2V5U3RhdGUpKTsKLSAgICBtX3BhZ2Ut
PmRyYWdDb250cm9sbGVyKCkucGVyZm9ybURyYWcoJmRhdGEpOworICAgIG1fcGFnZS0+ZHJhZ0Nv
bnRyb2xsZXIoKS5wZXJmb3JtRHJhZyhkYXRhKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApJbmRl
eDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVu
dC5jcHAJKHJldmlzaW9uIDE1NzA1NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYkRyYWdDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwyNSArNjUsMjUgQEAg
V2ViRHJhZ0NsaWVudDo6V2ViRHJhZ0NsaWVudChXZWJWaWV3KiB3ZQogICAgIEFTU0VSVCh3ZWJW
aWV3KTsKIH0KIAotRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmFjdGlvbk1h
c2tGb3JEcmFnKERyYWdEYXRhKiBkcmFnRGF0YSkKK0RyYWdEZXN0aW5hdGlvbkFjdGlvbiBXZWJE
cmFnQ2xpZW50OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAg
Q09NUHRyPElXZWJVSURlbGVnYXRlPiBkZWxlZ2F0ZVJlZiA9IDA7CiAgICAgLy9EZWZhdWx0IGJl
aGF2aW91ciAoZWcuIG5vIGRlbGVnYXRlLCBvciBjYWxsYmFjayBub3QgaW1wbGVtZW50ZWQpIGlz
IHRvIGFsbG93CiAgICAgLy9hbnkgYWN0aW9uCiAgICAgV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9u
IG1hc2sgPSBXZWJEcmFnRGVzdGluYXRpb25BY3Rpb25Bbnk7CiAgICAgaWYgKFNVQ0NFRURFRCht
X3dlYlZpZXctPnVpRGVsZWdhdGUoJmRlbGVnYXRlUmVmKSkpCi0gICAgICAgIGRlbGVnYXRlUmVm
LT5kcmFnRGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvKG1fd2ViVmlldywgZHJh
Z0RhdGEtPnBsYXRmb3JtRGF0YSgpLCAmbWFzayk7CisgICAgICAgIGRlbGVnYXRlUmVmLT5kcmFn
RGVzdGluYXRpb25BY3Rpb25NYXNrRm9yRHJhZ2dpbmdJbmZvKG1fd2ViVmlldywgZHJhZ0RhdGEu
cGxhdGZvcm1EYXRhKCksICZtYXNrKTsKIAogICAgIHJldHVybiAoRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKW1hc2s7CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6d2lsbFBlcmZvcm1EcmFnRGVzdGlu
YXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uIGFjdGlvbiwgRHJhZ0RhdGEqIGRyYWdE
YXRhKQordm9pZCBXZWJEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAg
ICAgLy9EZWZhdWx0IGRlbGVnYXRlIGZvciB3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
biBoYXMgbm8gc2lkZSBlZmZlY3RzCiAgICAgLy9zbyB3ZSBqdXN0IGNhbGwgdGhlIGRlbGVnYXRl
LCBhbmQgZG9uJ3Qgd29ycnkgYWJvdXQgd2hldGhlciBpdCdzIGltcGxlbWVudGVkCiAgICAgQ09N
UHRyPElXZWJVSURlbGVnYXRlPiBkZWxlZ2F0ZVJlZiA9IDA7CiAgICAgaWYgKFNVQ0NFRURFRCht
X3dlYlZpZXctPnVpRGVsZWdhdGUoJmRlbGVnYXRlUmVmKSkpCi0gICAgICAgIGRlbGVnYXRlUmVm
LT53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihtX3dlYlZpZXcsIChXZWJEcmFnRGVz
dGluYXRpb25BY3Rpb24pYWN0aW9uLCBkcmFnRGF0YS0+cGxhdGZvcm1EYXRhKCkpOworICAgICAg
ICBkZWxlZ2F0ZVJlZi0+d2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24obV93ZWJWaWV3
LCAoV2ViRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKWFjdGlvbiwgZHJhZ0RhdGEucGxhdGZvcm1EYXRh
KCkpOwogfQogCiBEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rp
b25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQpAQCAtOTYsMjcgKzk2
LDI3IEBAIERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXIKICAgICByZXR1
cm4gKERyYWdTb3VyY2VBY3Rpb24pYWN0aW9uOwogfQogCi12b2lkIFdlYkRyYWdDbGllbnQ6Ondp
bGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uIGFjdGlvbiwgY29uc3Qg
SW50UG9pbnQmIGludFBvaW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCkKK3ZvaWQgV2ViRHJhZ0Ns
aWVudDo6d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb24gYWN0aW9u
LCBjb25zdCBJbnRQb2ludCYgaW50UG9pbnQsIENsaXBib2FyZCYgY2xpcGJvYXJkKQogewogICAg
IENPTVB0cjxJV2ViVUlEZWxlZ2F0ZT4gdWlEZWxlZ2F0ZTsKICAgICBpZiAoIVNVQ0NFRURFRCht
X3dlYlZpZXctPnVpRGVsZWdhdGUoJnVpRGVsZWdhdGUpKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUE9JTlQgcG9pbnQgPSBpbnRQb2ludDsKLSAgICBDT01QdHI8SURhdGFPYmplY3Q+IGRhdGFP
YmplY3QgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7CisgICAgQ09NUHRy
PElEYXRhT2JqZWN0PiBkYXRhT2JqZWN0ID0gY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS5kYXRhT2Jq
ZWN0KCk7CiAKICAgICBDT01QdHI8SURhdGFPYmplY3Q+IG5ld0RhdGFPYmplY3Q7CiAgICAgSFJF
U1VMVCByZXN1bHQgPSB1aURlbGVnYXRlLT53aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24obV93
ZWJWaWV3LCBzdGF0aWNfY2FzdDxXZWJEcmFnU291cmNlQWN0aW9uPihhY3Rpb24pLCAmcG9pbnQs
IGRhdGFPYmplY3QuZ2V0KCksICZuZXdEYXRhT2JqZWN0KTsKICAgICBpZiAocmVzdWx0ID09IFNf
T0sgJiYgbmV3RGF0YU9iamVjdCAhPSBkYXRhT2JqZWN0KQotICAgICAgICBjb25zdF9jYXN0PFBh
c3RlYm9hcmQmPihjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKSkuc2V0RXh0ZXJuYWxEYXRhT2JqZWN0
KG5ld0RhdGFPYmplY3QuZ2V0KCkpOworICAgICAgICBjb25zdF9jYXN0PFBhc3RlYm9hcmQmPihj
bGlwYm9hcmQucGFzdGVib2FyZCgpKS5zZXRFeHRlcm5hbERhdGFPYmplY3QobmV3RGF0YU9iamVj
dC5nZXQoKSk7CiB9CiAKLXZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJl
ZiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIGltYWdlT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZHJh
Z1BvaW50LCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lLCBib29sIGlzTGluaykK
K3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBpbWFnZSwgY29uc3Qg
SW50UG9pbnQmIGltYWdlT3JpZ2luLCBjb25zdCBJbnRQb2ludCYgZHJhZ1BvaW50LCBDbGlwYm9h
cmQmIGNsaXBib2FyZCwgRnJhbWUmIGZyYW1lLCBib29sIGlzTGluaykKIHsKICAgICAvL0ZJWE1F
OiBBbGxvdyBVSURlbGVnYXRlIHRvIG92ZXJyaWRlIGJlaGF2aW91ciA8cmRhcjovL3Byb2JsZW0v
NTAxNTk1Mz4KIAogICAgIC8vV2UgbGliZXJhbGx5IHByb3RlY3QgZXZlcnl0aGluZywgdG8gcHJv
dGVjdCBhZ2FpbnN0IGEgbG9hZCBvY2N1cnJpbmcgbWlkLWRyYWcKLSAgICBSZWZQdHI8RnJhbWU+
IGZyYW1lUHJvdGVjdG9yID0gZnJhbWU7CisgICAgUmVmUHRyPEZyYW1lPiBmcmFtZVByb3RlY3Rv
ciA9ICZmcmFtZTsKICAgICBDT01QdHI8SURyYWdTb3VyY2VIZWxwZXI+IGhlbHBlcjsKICAgICBD
T01QdHI8SURhdGFPYmplY3Q+IGRhdGFPYmplY3Q7CiAgICAgQ09NUHRyPFdlYlZpZXc+IHZpZXdQ
cm90ZWN0b3IgPSBtX3dlYlZpZXc7CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBXZWJEcmFnQ2xp
ZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUgogICAgIGlmIChGQUlMRUQoV2ViRHJvcFNvdXJjZTo6
Y3JlYXRlSW5zdGFuY2UobV93ZWJWaWV3LCAmc291cmNlKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGRhdGFPYmplY3QgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5kYXRhT2JqZWN0KCk7Cisg
ICAgZGF0YU9iamVjdCA9IGNsaXBib2FyZC5wYXN0ZWJvYXJkKCkuZGF0YU9iamVjdCgpOwogICAg
IGlmIChzb3VyY2UgJiYgKGltYWdlIHx8IGRhdGFPYmplY3QpKSB7CiAgICAgICAgIGlmIChpbWFn
ZSkgewogICAgICAgICAgICAgaWYoU1VDQ0VFREVEKENvQ3JlYXRlSW5zdGFuY2UoQ0xTSURfRHJh
Z0Ryb3BIZWxwZXIsIDAsIENMU0NUWF9JTlBST0NfU0VSVkVSLApAQCAtMTY2LDcgKzE2Niw3IEBA
IHZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVIKICAgICAgICAgICAgIGVs
c2UgaWYgKGVmZmVjdCAmIERST1BFRkZFQ1RfTU9WRSkKICAgICAgICAgICAgICAgICBvcGVyYXRp
b24gPSBEcmFnT3BlcmF0aW9uTW92ZTsKICAgICAgICAgfQotICAgICAgICBmcmFtZS0+ZXZlbnRI
YW5kbGVyKCkuZHJhZ1NvdXJjZUVuZGVkQXQoZ2VuZXJhdGVNb3VzZUV2ZW50KG1fd2ViVmlldywg
ZmFsc2UpLCBvcGVyYXRpb24pOworICAgICAgICBmcmFtZS5ldmVudEhhbmRsZXIoKS5kcmFnU291
cmNlRW5kZWRBdChnZW5lcmF0ZU1vdXNlRXZlbnQobV93ZWJWaWV3LCBmYWxzZSksIG9wZXJhdGlv
bik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJEcmFnQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1
cHBvcnQvV2ViRHJhZ0NsaWVudC5oCShyZXZpc2lvbiAxNTcwNTQpCisrKyBTb3VyY2UvV2ViS2l0
L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEyICszMywxNCBAQCBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViRHJhZ0NsaWVudCA6IHB1Ymxp
YyBXZWJDb3JlOjpEcmFnQ2xpZW50IHsKIHB1YmxpYzoKICAgICBXZWJEcmFnQ2xpZW50KFdlYlZp
ZXcqKTsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBhY3Rpb25N
YXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSopOwotICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVy
Zm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24s
IFdlYkNvcmU6OkRyYWdEYXRhKik7CiAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVz
dHJveWVkKCk7CisKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkRyYWdEZXN0aW5hdGlvbkFjdGlvbiBh
Y3Rpb25NYXNrRm9yRHJhZyhXZWJDb3JlOjpEcmFnRGF0YSYpOwogICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IFdl
YkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJhZ1NvdXJj
ZUFjdGlvbihXZWJDb3JlOjpEcmFnU291cmNlQWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIFdlYkNvcmU6OkNsaXBib2FyZCopOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoV2Vi
Q29yZTo6RHJhZ0ltYWdlUmVmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgV2ViQ29yZTo6Q2xpcGJvYXJkKiwgV2ViQ29yZTo6RnJhbWUqLCBib29s
KTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oV2Vi
Q29yZTo6RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSYpOworICAgIHZp
cnR1YWwgdm9pZCB3aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oV2ViQ29yZTo6RHJhZ1NvdXJj
ZUFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBXZWJDb3JlOjpDbGlwYm9hcmQmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKFdlYkNvcmU6OkRyYWdJbWFnZVJlZiwgY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFdlYkNvcmU6OkNs
aXBib2FyZCYsIFdlYkNvcmU6OkZyYW1lJiwgYm9vbCk7CisKIHByaXZhdGU6CiAgICAgV2ViVmll
dyogbV93ZWJWaWV3OwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>