<?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>108149</bug_id>
          
          <creation_ts>2013-01-28 22:26:00 -0800</creation_ts>
          <short_desc>Coordinated Graphics : Move CoordinatedGraphics related files to WebCore</short_desc>
          <delta_ts>2013-02-04 15:26:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>108164</dependson>
    
    <dependson>108259</dependson>
          <blocked>102994</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Jae Hyun Park">jaepark</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abecsi</cc>
    
    <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>d.nomiyama</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbriance</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>levin+threading</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>ostap73</cc>
    
    <cc>rakuco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>818536</commentid>
    <comment_count>0</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-28 22:26:00 -0800</bug_when>
    <thetext>Coordinated Graphics code should reside in WebCore in order for Threaded Coordinated Graphics code to reuse it.
Except for IPC related Code, all of the Coordinated Graphics code need to be moved from WebKit2 to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818557</commentid>
    <comment_count>1</comment_count>
      <attachid>185162</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-28 22:44:43 -0800</bug_when>
    <thetext>Created attachment 185162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818565</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-28 22:49:56 -0800</bug_when>
    <thetext>Attachment 185162 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Target.pri&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/AreaAllocator.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBackingStore.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedBackingStore.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedImageBacking.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedLayerInfo.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedSurface.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedTile.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedTile.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/LayerTreeRenderer.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/LayerTreeRenderer.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/SurfaceUpdateInfo.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.cpp&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/UpdateAtlas.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/WebCustomFilterOperation.h&apos;, u&apos;Source/WebCore/platform/graphics/texmap/coordinated/WebCustomFilterProgram.h&apos;, u&apos;Source/WebKit2/CMakeLists.txt&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.cpp&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedGraphicsArgumentCoders.h&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedLayerInfo.h&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/CoordinatedSurface.h&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/SurfaceUpdateInfo.h&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/WebCoordinatedSurface.cpp&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/WebCoordinatedSurface.h&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/WebCustomFilterOperation.h&apos;, u&apos;Source/WebKit2/Shared/CoordinatedGraphics/WebCustomFilterProgram.h&apos;, u&apos;Source/WebKit2/Target.pri&apos;, u&apos;Source/WebKit2/UIProcess/API/efl/EwkView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/efl/EwkView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/qt/qquickwebpage.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/qt/raw/qrawwebview.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/qt/raw/qrawwebview_p.h&apos;, u&apos;Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.cpp&apos;, u&apos;Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedBackingStore.h&apos;, u&apos;Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.cpp&apos;, u&apos;Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.h&apos;, u&apos;Source/WebKit2/UIProcess/CoordinatedGraphics/CoordinatedLayerTreeHostProxy.messages.in&apos;, u&apos;Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.cpp&apos;, u&apos;Source/WebKit2/UIProcess/CoordinatedGraphics/LayerTreeRenderer.h&apos;, u&apos;Source/WebKit2/UIProcess/efl/PageClientBase.cpp&apos;, u&apos;Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp&apos;, u&apos;Source/WebKit2/UIProcess/qt/QtWebPageSGNode.cpp&apos;, u&apos;Source/WebKit2/UIProcess/qt/QtWebPageSGNode.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/AreaAllocator.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedGraphicsLayer.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedImageBacking.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedLayerTreeHost.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/CoordinatedTile.h&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.cpp&apos;, u&apos;Source/WebKit2/WebProcess/WebPage/CoordinatedGraphics/UpdateAtlas.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:411:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 39 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>818599</commentid>
    <comment_count>3</comment_count>
      <attachid>185162</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-28 23:30:36 -0800</bug_when>
    <thetext>Comment on attachment 185162
Patch

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

Apart from some rename suggestions, this seems to be going in the right direction for me.
The next step would be to remove most of the stuff from CoordinatedGraphicsArgumentCoders.

Anders, Simon, your feedback is of course welcome.

&gt; Source/WebCore/ChangeLog:24
&gt; +        3. WebCustomFilterProgram and WebCustomFilterOperation is moved to WebCore in

They should be renamed CoordinatedCustom*, the Web prefix is only for WebKit/WebKit2.

&gt; Source/WebCore/ChangeLog:239
&gt; +        (WebCore::LayerTreeRenderer::dispatchOnMainThread):

I think LayerTreeRenderer should be renamed TextureMapperScene.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818602</commentid>
    <comment_count>4</comment_count>
      <attachid>185162</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-28 23:32:54 -0800</bug_when>
    <thetext>Comment on attachment 185162
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        1. Removing CoordinatedLayerTreeHost dependency from LayerTreeRenderer. This
&gt; +        patch introduces LayerTreeRendererClient, which is implemented in
&gt; +        CoordinatedLayerTreeHost. LayerTreeRenderer uses this client, instead of using
&gt; +        CoordinatedLayerTreeHost directly.

Maybe we should do this first, with a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818608</commentid>
    <comment_count>5</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-28 23:37:20 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 185162 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185162&amp;action=review
&gt; 
&gt; Apart from some rename suggestions, this seems to be going in the right direction for me.
&gt; The next step would be to remove most of the stuff from CoordinatedGraphicsArgumentCoders.
&gt; 
&gt; Anders, Simon, your feedback is of course welcome.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:24
&gt; &gt; +        3. WebCustomFilterProgram and WebCustomFilterOperation is moved to WebCore in
&gt; 
&gt; They should be renamed CoordinatedCustom*, the Web prefix is only for WebKit/WebKit2.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:239
&gt; &gt; +        (WebCore::LayerTreeRenderer::dispatchOnMainThread):
&gt; 
&gt; I think LayerTreeRenderer should be renamed TextureMapperScene.

(In reply to comment #4)
&gt; (From update of attachment 185162 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185162&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:17
&gt; &gt; +        1. Removing CoordinatedLayerTreeHost dependency from LayerTreeRenderer. This
&gt; &gt; +        patch introduces LayerTreeRendererClient, which is implemented in
&gt; &gt; +        CoordinatedLayerTreeHost. LayerTreeRenderer uses this client, instead of using
&gt; &gt; +        CoordinatedLayerTreeHost directly.
&gt; 
&gt; Maybe we should do this first, with a separate patch.

Thanks for the review! 
In the separate patch that introduces LayerTreeRendererClient, should I just rename LayerTreeRenderer to TextureMapperScene?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818897</commentid>
    <comment_count>6</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-29 06:31:42 -0800</bug_when>
    <thetext>&gt; In the separate patch that introduces LayerTreeRendererClient, should I just rename LayerTreeRenderer to TextureMapperScene?
Let&apos;s do the rename as part of moving to WebCore. For now we should introduce the client without renames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819176</commentid>
    <comment_count>7</comment_count>
      <attachid>185162</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2013-01-29 12:09:13 -0800</bug_when>
    <thetext>Comment on attachment 185162
Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        2. Create CoordinatedSurface using function pointer. Since CoordinatedSurface
&gt; +        reside in WebCore now, it doesn&apos;t know WebCoordinatedSurface. So we pass
&gt; +        CoordinatedSurface::Factory instead of using CoordinatedSurface::create
&gt; +        method.

I think this could be done in a separate patch as well. This patch ideally will only move the files and fix whatever needs to be fixed to get it compiling again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819381</commentid>
    <comment_count>8</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-29 15:16:33 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; In the separate patch that introduces LayerTreeRendererClient, should I just rename LayerTreeRenderer to TextureMapperScene?
&gt; Let&apos;s do the rename as part of moving to WebCore. For now we should introduce the client without renames.

Ok. Created a patch in https://bugs.webkit.org/show_bug.cgi?id=108164</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819385</commentid>
    <comment_count>9</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-29 15:18:10 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 185162 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185162&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:22
&gt; &gt; +        2. Create CoordinatedSurface using function pointer. Since CoordinatedSurface
&gt; &gt; +        reside in WebCore now, it doesn&apos;t know WebCoordinatedSurface. So we pass
&gt; &gt; +        CoordinatedSurface::Factory instead of using CoordinatedSurface::create
&gt; &gt; +        method.
&gt; 
&gt; I think this could be done in a separate patch as well. This patch ideally will only move the files and fix whatever needs to be fixed to get it compiling again.

Thanks for the review! 

I&apos;ll create another patch for using function pointer to create CoordinatedSurface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821154</commentid>
    <comment_count>10</comment_count>
      <attachid>185693</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-30 23:58:20 -0800</bug_when>
    <thetext>Created attachment 185693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821247</commentid>
    <comment_count>11</comment_count>
      <attachid>185714</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-31 01:32:34 -0800</bug_when>
    <thetext>Created attachment 185714
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821271</commentid>
    <comment_count>12</comment_count>
      <attachid>185722</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-31 02:14:52 -0800</bug_when>
    <thetext>Created attachment 185722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821415</commentid>
    <comment_count>13</comment_count>
      <attachid>185722</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-31 05:15:34 -0800</bug_when>
    <thetext>Comment on attachment 185722
Patch

Looks good to me! Let&apos;s see if the WK2 owners are ok with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822032</commentid>
    <comment_count>14</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-31 15:24:37 -0800</bug_when>
    <thetext>WK2 parts look good to me. You should remove all the function declarations from the file renames in the ChangeLog though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822270</commentid>
    <comment_count>15</comment_count>
      <attachid>185922</attachid>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-01-31 20:37:21 -0800</bug_when>
    <thetext>Created attachment 185922
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822340</commentid>
    <comment_count>16</comment_count>
      <attachid>185922</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-31 22:38:45 -0800</bug_when>
    <thetext>Comment on attachment 185922
Patch

Let&apos;s go!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822354</commentid>
    <comment_count>17</comment_count>
      <attachid>185922</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-31 22:58:43 -0800</bug_when>
    <thetext>Comment on attachment 185922
Patch

Rejecting attachment 185922 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 185922, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
  return self.open(self.click(*args, **kwds))
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_mechanize.py&quot;, line 203, in open
    return self._mech_open(url, data, timeout=timeout)
  File &quot;/mnt/git/webkit-commit-queue/Tools/Scripts/webkitpy/thirdparty/autoinstalled/mechanize/_mechanize.py&quot;, line 255, in _mech_open
    raise response
webkitpy.thirdparty.autoinstalled.mechanize._response.httperror_seek_wrapper: HTTP Error 500: Internal Server Error

Full output: http://queues.webkit.org/results/16302414</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822368</commentid>
    <comment_count>18</comment_count>
      <attachid>185922</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-01-31 23:14:34 -0800</bug_when>
    <thetext>Comment on attachment 185922
Patch

Trying again with cq. If this fails I&apos;ll lent manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822383</commentid>
    <comment_count>19</comment_count>
      <attachid>185922</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-31 23:34:02 -0800</bug_when>
    <thetext>Comment on attachment 185922
Patch

Clearing flags on attachment: 185922

Committed r141543: &lt;http://trac.webkit.org/changeset/141543&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822384</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-31 23:34:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824432</commentid>
    <comment_count>21</comment_count>
    <who name="Julien Brianceau">jbriance</who>
    <bug_when>2013-02-04 09:20:59 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=185922) [details]
&gt; Patch
Hello,

Unfortunately, this patch breaks our buildbot: http://build.webkit.org/builders/Qt%20Linux%20SH4%20Release/builds/19109

I&apos;ll take a look this week if I find time to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824483</commentid>
    <comment_count>22</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-02-04 09:57:34 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #15)
&gt; &gt; Created an attachment (id=185922) [details] [details]
&gt; &gt; Patch
&gt; Hello,
&gt; 
&gt; Unfortunately, this patch breaks our buildbot: http://build.webkit.org/builders/Qt%20Linux%20SH4%20Release/builds/19109
&gt; 
&gt; I&apos;ll take a look this week if I find time to do so.

Seems like some GL includes are not protected with the right #ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824724</commentid>
    <comment_count>23</comment_count>
    <who name="Julien Brianceau">jbriance</who>
    <bug_when>2013-02-04 13:54:34 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; 
&gt; Seems like some GL includes are not protected with the right #ifdefs.

I think the issue is in Target.pri file. Shouldn&apos;t new files be into conditionnal use?(3D_GRAPHICS) block instead ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824780</commentid>
    <comment_count>24</comment_count>
    <who name="Julien Brianceau">jbriance</who>
    <bug_when>2013-02-04 14:44:17 -0800</bug_when>
    <thetext>I&apos;ve created a new bug for this: https://bugs.webkit.org/show_bug.cgi?id=108862</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824826</commentid>
    <comment_count>25</comment_count>
    <who name="Jae Hyun Park">jaepark</who>
    <bug_when>2013-02-04 15:26:56 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; I&apos;ve created a new bug for this: https://bugs.webkit.org/show_bug.cgi?id=108862

I&apos;m sorry for breaking the build, and thanks for providing a fix!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185162</attachid>
            <date>2013-01-28 22:44:43 -0800</date>
            <delta_ts>2013-01-30 23:58:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108149-20130128224159.patch</filename>
            <type>text/plain</type>
            <size>359776</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGMyNGQ4OGM0OGE2Yzdm
Zjc3MzFmY2Q3MzVjMDgxYWU0NTA2NzczOS4uNTE1NjM4ZjNiZjc5MmNkN2Q3OTkzMGJlZmU1NTBk
ZjFiZGM3MzJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0MCBAQAorMjAxMy0wMS0yOCAgSmFl
IEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzIDogTW92ZSBDb29yZGluYXRlZEdyYXBoaWNzIHJlbGF0ZWQgZmlsZXMgdG8g
V2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA4MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBtb3ZlcyBDb29yZGluYXRlZCBHcmFwaGljcyByZWxhdGVkIGNvZGUgdG8gV2Vi
Q29yZS4gVG8gaW1wbGVtZW50CisgICAgICAgIFRocmVhZGVkIENvb3JkaW5hdGVkIEdyYXBoaWNz
LCBtb3N0IG9mIENvb3JkaWFudGVkIEdyYXBoaWNzIGNvZGUgc2hvdWxkIGJlCisgICAgICAgIHNo
YXJlZC4gVGhlcmVmb3JlLCBpdCBzaG91bGQgcmVzaWRlIGluIFdlYkNvcmUgaW5zdGVhZCBvZiBX
ZWJLaXQyLgorCisgICAgICAgIFdoZW4gbW92aW5nIHRvIFdlYkNvcmUsIHRoZXJlIGFyZSB0aHJl
ZSBwYXJ0cyB0aGF0IG5lZWQgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgMS4gUmVtb3ZpbmcgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0IGRlcGVuZGVuY3kgZnJvbSBMYXllclRyZWVSZW5kZXJlci4g
VGhpcworICAgICAgICBwYXRjaCBpbnRyb2R1Y2VzIExheWVyVHJlZVJlbmRlcmVyQ2xpZW50LCB3
aGljaCBpcyBpbXBsZW1lbnRlZCBpbgorICAgICAgICBDb29yZGluYXRlZExheWVyVHJlZUhvc3Qu
IExheWVyVHJlZVJlbmRlcmVyIHVzZXMgdGhpcyBjbGllbnQsIGluc3RlYWQgb2YgdXNpbmcKKyAg
ICAgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0IGRpcmVjdGx5LgorCisgICAgICAgIDIuIENy
ZWF0ZSBDb29yZGluYXRlZFN1cmZhY2UgdXNpbmcgZnVuY3Rpb24gcG9pbnRlci4gU2luY2UgQ29v
cmRpbmF0ZWRTdXJmYWNlCisgICAgICAgIHJlc2lkZSBpbiBXZWJDb3JlIG5vdywgaXQgZG9lc24n
dCBrbm93IFdlYkNvb3JkaW5hdGVkU3VyZmFjZS4gU28gd2UgcGFzcworICAgICAgICBDb29yZGlu
YXRlZFN1cmZhY2U6OkZhY3RvcnkgaW5zdGVhZCBvZiB1c2luZyBDb29yZGluYXRlZFN1cmZhY2U6
OmNyZWF0ZQorICAgICAgICBtZXRob2QuCisKKyAgICAgICAgMy4gV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbSBhbmQgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIGlzIG1vdmVkIHRvIFdlYkNvcmUgaW4K
KyAgICAgICAgb3JkZXIgZm9yIExheWVyVHJlZVJlbmRlcmVyIHRvIHVzZSB0aGVtLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQXJlYUFsbG9jYXRvci5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFyZWFBbGxvY2F0b3I6OkFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJl
YUFsbG9jYXRvcjo6fkFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9j
YXRvcjo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAo
V2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXJl
YUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxB
cmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW5lcmFsQXJlYUFsbG9jYXRvcjo6fkdlbmVyYWxBcmVhQWxsb2NhdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmZpdHNX
aXRoaW4pOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZUZyb21O
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RG
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3Iu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28pOgorICAgICAgICAoQXJlYUFsbG9jYXRvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpBcmVhQWxsb2NhdG9yOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkFyZWFBbGxvY2F0b3I6Om1pbmltdW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFy
ZWFBbGxvY2F0b3I6OnNldE1pbmltdW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFy
ZWFBbGxvY2F0b3I6Om1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcmVhQWxsb2NhdG9yOjpz
ZXRNYXJnaW4pOgorICAgICAgICAoR2VuZXJhbEFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoTm9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlOjpzd2FwQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnNob3VsZFNob3dU
aWxlRGVidWdWaXN1YWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJh
Y2tpbmdTdG9yZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6
c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpp
bmNyZW1lbnRSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlOjpyZXBhaW50Q291bnQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9Db29yZGluYXRlZExheWVySUQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpkaWRDaGFuZ2VMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5n
ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp+Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmFkZENoaWxkQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2
ZXMzRCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1h
c2tzVG9Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXREcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05l
ZWRzRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBv
c2l0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0UmVwbGljYXRlZEJ5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2luZyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNMYXllclN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGVzdHJveUNh
bnZhc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW1hZ2VCYWNraW5nVmlz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbGVh
c2VJbWFnZUJhY2tpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVDb250ZW50UmVjdFRy
YWplY3RvcnlWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c1NjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZWZmZWN0aXZlQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdT
dG9yZVBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wVG9Db250ZW50c1Jl
Y3RJZlJlY3RJc0luZmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5D
b250ZW50VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnVwZGF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb29yZGluYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3Rt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVu
ZGluZ1Zpc2libGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZWdyYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUG9zaXRpb25S
ZWxhdGl2ZVRvQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmNvbXB1dGVQaXhlbEFsaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2ZUJhY2tpbmdTdG9y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNlbGZPckFu
Y2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNm
b3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFu
aW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBh
dXNlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cmVtb3ZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQp
OgorICAgICAgICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y292ZXJSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjptYXJrRGlydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRl
VmlzaWJpbGl0eUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChDb29yZGluYXRvcik6Cisg
ICAgICAgIChIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjppZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkTGF5ZXJJbmZvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVySW5mby5oLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbzo6Q29vcmRpbmF0
ZWRMYXllckluZm8pOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllckluZm8pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2Uu
aDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkU3VyZmFjZS5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29y
ZGluYXRlZFN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjp+
Q29vcmRpbmF0ZWRTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFj
ZTo6c3VwcG9ydHNBbHBoYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUu
Y3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRp
bGU6OkNvb3JkaW5hdGVkVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6
On5Db29yZGluYXRlZFRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjpp
c0RpcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZTo6aW52YWxpZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjppc1JlYWR5VG9QYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkVGlsZTo6cmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkVGlsZUJhY2tlbmQ6OkNvb3JkaW5hdGVkVGlsZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpwYWludENoZWNrZXJQYXR0ZXJuKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ29vcmRpbmF0ZWRUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZTo6Y29vcmRpbmF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OnJlY3QpOgorICAgICAgICAoQ29v
cmRpbmF0ZWRUaWxlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZUNs
aWVudDo6fkNvb3JkaW5hdGVkVGlsZUNsaWVudCk6CisgICAgICAgIChDb29yZGluYXRlZFRpbGVC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0xheWVy
VHJlZVJlbmRlcmVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OmRpc3BhdGNoT25NYWlu
VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kZWRTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OkxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjp+TGF5ZXJUcmVlUmVuZGVyZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjphbmltYXRpb25GcmFtZVJlYWR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjpyZXF1ZXN0QW5pbWF0aW9uRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGlj
c0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRl
bnRzU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6dXBk
YXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OmFkanVz
dFBvc2l0aW9uRm9yRml4ZWRMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVu
ZGVyZXI6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VHJlZVJlbmRlcmVyOjpjcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVl
UmVuZGVyZXI6OnN5bmNDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVy
ZXI6OmRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6
OnNldExheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6
OnNldExheWVyRmlsdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6
aW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OmdldExheWVyQnlJRElmRXhpc3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVMYXllcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUxheWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRyZWVSZW5kZXJlcjo6Z2V0QmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
VHJlZVJlbmRlcmVyOjpwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjpyZXNldEJhY2tpbmdT
dG9yZVNpemVUb0xheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlSW1hZ2VCYWNr
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJbWFnZUJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNsZWFySW1hZ2VC
YWNraW5nQ29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnJl
bW92ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6
YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVS
ZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVy
YXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVy
Q2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4
dEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjplbnN1cmVSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNSZW1vdGVD
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUdMUmVz
b3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tp
bmdTdG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVy
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6c2V0QW5p
bWF0aW9uc0xvY2tlZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6ZGV0
YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyOjphcHBlbmRVcGRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcjo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvTGF5ZXJUcmVlUmVu
ZGVyZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKExheWVyVHJlZVJlbmRlcmVyQ2xpZW50KToKKyAgICAgICAgKExheWVyVHJlZVJlbmRlcmVy
KToKKyAgICAgICAgKFRpbGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVu
ZGVyZXI6OlRpbGVVcGRhdGU6OlRpbGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJU
cmVlUmVuZGVyZXI6OnNldERyYXdzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clRyZWVSZW5kZXJlcjo6bGF5ZXJCeUlEKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVHJlZVJl
bmRlcmVyOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXI6
Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUcmVlUmVu
ZGVyZXI6Om5vdGlmeUZsdXNoUmVxdWlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUluZm8u
aC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3VyZmFjZVVwZGF0ZUluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm86OlN1cmZhY2VVcGRhdGVJbmZvKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVB
dGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxh
czo6ZGlkU3dhcEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJlZ2lu
UGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5o
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChVcGRhdGVBdGxhc0NsaWVudCk6CisgICAg
ICAgIChVcGRhdGVBdGxhcyk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6c3VwcG9ydHNBbHBoYSk6CisgICAgICAg
IChXZWJDb3JlOjpVcGRhdGVBdGxhczo6YWRkVGltZUluYWN0aXZlKToKKyAgICAgICAgKFdlYkNv
cmU6OlVwZGF0ZUF0bGFzOjppc0luYWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0
bGFzOjppc0luVXNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24u
aC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6cHJvZ3JhbUlEKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6V2ViQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oLgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJDdXN0b21GaWx0ZXJQcm9ncmFtOjpXZWJDdXN0b21GaWx0ZXJQcm9ncmFt
KToKKwogMjAxMy0wMS0yOCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
IAogICAgICAgICBwb3NpdGlvbjpmaXhlZCB0aGF0IGRvZXNuJ3QgcmVuZGVyIGFueSBjb250ZW50
IHNob3VsZCBub3QgZm9yY2UgY29tcG9zaXRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzOTMzZjlmMDk5MTUw
NGNiNDNhNjkxNzBmNGQxYzg0OTMxZGI5M2Q1Li41YmQyNGZmMzMzNjJmNWJkNmQ2NDhlNzliMTUy
YWFkMzdiOGQ3OThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODIgQEAKIDIwMTMtMDEtMjggIEph
ZSBIeXVuIFBhcmsgIDxqYWUucGFya0Bjb21wYW55MTAwLm5ldD4KIAorICAgICAgICBDb29yZGlu
YXRlZCBHcmFwaGljcyA6IE1vdmUgQ29vcmRpbmF0ZWRHcmFwaGljcyByZWxhdGVkIGZpbGVzIHRv
IFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODE0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggbW92ZXMgQ29vcmRpbmF0ZWQgR3JhcGhpY3MgcmVsYXRlZCBjb2RlIHRvIFdl
YkNvcmUuIFRvIGltcGxlbWVudAorICAgICAgICBUaHJlYWRlZCBDb29yZGluYXRlZCBHcmFwaGlj
cywgbW9zdCBvZiBDb29yZGlhbnRlZCBHcmFwaGljcyBjb2RlIHNob3VsZCBiZQorICAgICAgICBz
aGFyZWQuIFRoZXJlZm9yZSwgaXQgc2hvdWxkIHJlc2lkZSBpbiBXZWJDb3JlIGluc3RlYWQgb2Yg
V2ViS2l0Mi4KKworICAgICAgICBXaGVuIG1vdmluZyB0byBXZWJDb3JlLCB0aGVyZSBhcmUgdGhy
ZWUgcGFydHMgdGhhdCBuZWVkIHJlZmFjdG9yaW5nLgorCisgICAgICAgIDEuIFJlbW92aW5nIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBkZXBlbmRlbmN5IGZyb20gTGF5ZXJUcmVlUmVuZGVyZXIu
IFRoaXMKKyAgICAgICAgcGF0Y2ggaW50cm9kdWNlcyBMYXllclRyZWVSZW5kZXJlckNsaWVudCwg
d2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4KKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LiBMYXllclRyZWVSZW5kZXJlciB1c2VzIHRoaXMgY2xpZW50LCBpbnN0ZWFkIG9mIHVzaW5nCisg
ICAgICAgIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCBkaXJlY3RseS4KKworICAgICAgICAyLiBD
cmVhdGUgQ29vcmRpbmF0ZWRTdXJmYWNlIHVzaW5nIGZ1bmN0aW9uIHBvaW50ZXIuIFNpbmNlIENv
b3JkaW5hdGVkU3VyZmFjZQorICAgICAgICByZXNpZGUgaW4gV2ViQ29yZSBub3csIGl0IGRvZXNu
J3Qga25vdyBXZWJDb29yZGluYXRlZFN1cmZhY2UuIFNvIHdlIHBhc3MKKyAgICAgICAgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpGYWN0b3J5IGluc3RlYWQgb2YgdXNpbmcgQ29vcmRpbmF0ZWRTdXJmYWNl
OjpjcmVhdGUKKyAgICAgICAgbWV0aG9kLgorCisgICAgICAgIDMuIFdlYkN1c3RvbUZpbHRlclBy
b2dyYW0gYW5kIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiBpcyBtb3ZlZCB0byBXZWJDb3JlIGlu
CisgICAgICAgIG9yZGVyIGZvciBMYXllclRyZWVSZW5kZXJlciB0byB1c2UgdGhlbS4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgICogU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJz
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwOgorICAgICAgICAqIFNoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oOgorICAgICAgICAoSGFuZGxlKToK
KyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgIChRUXVpY2tX
ZWJQYWdlOjp1cGRhdGVQYWludE5vZGUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcmF3
L3FyYXd3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFSYXdXZWJWaWV3OjpsYXllclRyZWVSZW5kZXJl
cik6CisgICAgICAgIChRUmF3V2ViVmlldzo6cGFpbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxlRm9yTGF5ZXIp
OgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBkYXRl
VGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViS2l0OjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpsYXllclRyZWVSZW5kZXJlcik6CisgICAgICAgICogVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMu
aW46CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6Q29udGVudHNTR05vZGU6OmxheWVyVHJlZVJlbmRlcmVyKToKKyAgICAgICAgKENvbnRlbnRz
U0dOb2RlKToKKyAgICAgICAgKFdlYktpdDo6UXRXZWJQYWdlU0dOb2RlOjpzZXRSZW5kZXJlcik6
CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoUXRXZWJQYWdlU0dOb2RlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVDb29yZGluYXRlZFN1cmZhY2UpOgorICAgICAg
ICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpj
cmVhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojp1
cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Ojpi
ZWdpbkNvbnRlbnRVcGRhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChDb29yZGluYXRlZExheWVyVHJlZUhvc3QpOgorCisyMDEzLTAxLTI4ICBK
YWUgSHl1biBQYXJrICA8amFlLnBhcmtAY29tcGFueTEwMC5uZXQ+CisKICAgICAgICAgW1F0XSBC
dWlsZCBmaXgKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODE0MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGNlY2E0ZmMyYmY4NjBjMDcyNTI2OWRh
YjBkMjNjYmNhMjFmNjI5OTcuLjA0OGExNTcyNTdjZWIyOGNmZGE0YzE3ZjU4NTUwYWQyODljY2Q0
ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC01NSw2ICs1NSw4IEBAIHNldChXZWJDb3JlX0lO
Q0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enoiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6
L25nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZSIKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwIgorICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAiCkBAIC0xOTg3LDYgKzE5ODksMTMgQEAgc2V0KFdlYkNvcmVf
U09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nwb3RMaWdodFNvdXJjZS5jcHAKIAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tp
bmdTdG9yZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9MYXllclRyZWVSZW5kZXJlci5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CmluZGV4IDRiOWNkZmFjYmJhOTMyZmZlYmNmNDM0NTJmMmViZWVjMGQ4ZmU0MzMuLmJlM2ZlOWM5
OTIwOWNhYjc5YWRhMWM3MTM4ZTE4ZDc2OTdhMTJlYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjIzNyw2
ICsyMjM3LDE4IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L0dyYXBoaWNzU3VyZmFjZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HcmFw
aGljc1N1cmZhY2VUb2tlbi5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0FyZWFBbGxvY2F0b3IuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZExheWVySW5mby5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0xheWVyVHJlZVJlbmRlcmVyLmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oIFwKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCBcCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5o
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaCBcCkBAIC0yODczLDYgKzI4ODUsMTMgQEAgU09VUkNFUyArPSBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvUGF0aFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
UGF0dGVyblF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNw
cCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0
b3IuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmUuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5j
cHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9MYXllclRyZWVS
ZW5kZXJlci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9V
cGRhdGVBdGxhcy5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZjU0MTg1Yjk4ZThhNzA4YTZkNmYxYWIyMDQ1ZDJiMTIzNDgzNjAx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsMzM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkFyZWFBbGxv
Y2F0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBcmVhQWxsb2NhdG9yOjpBcmVhQWxs
b2NhdG9yKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAgICAsIG1f
bWluQWxsb2MoMSwgMSkKKyAgICAsIG1fbWFyZ2luKDAsIDApCit7Cit9CisKK0FyZWFBbGxvY2F0
b3I6On5BcmVhQWxsb2NhdG9yKCkKK3sKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpleHBhbmQo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgPSBtX3NpemUuZXhwYW5kZWRUbyhz
aXplKTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpleHBhbmRCeShjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIG1fc2l6ZSArPSBzaXplOworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OnJl
bGVhc2UoY29uc3QgSW50UmVjdCYpCit7Cit9CisKK2ludCBBcmVhQWxsb2NhdG9yOjpvdmVyaGVh
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgQXJlYUFsbG9jYXRvcjo6
cm91bmRBbGxvY2F0aW9uKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaW50IHdp
ZHRoID0gc2l6ZS53aWR0aCgpICsgbV9tYXJnaW4ud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0g
c2l6ZS5oZWlnaHQoKSArIG1fbWFyZ2luLmhlaWdodCgpOworICAgIGludCBleHRyYSA9IHdpZHRo
ICUgbV9taW5BbGxvYy53aWR0aCgpOworICAgIGlmIChleHRyYSkKKyAgICAgICAgd2lkdGggKz0g
bV9taW5BbGxvYy53aWR0aCgpIC0gZXh0cmE7CisgICAgZXh0cmEgPSBoZWlnaHQgJSBtX21pbkFs
bG9jLmhlaWdodCgpOworICAgIGlmIChleHRyYSkKKyAgICAgICAgaGVpZ2h0ICs9IG1fbWluQWxs
b2MuaGVpZ2h0KCkgLSBleHRyYTsKKworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
OworfQorCitHZW5lcmFsQXJlYUFsbG9jYXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKKyAgICA6IEFyZWFBbGxvY2F0b3IobmV4dFBvd2VyT2ZUd28oc2l6ZSkp
Cit7CisgICAgbV9yb290ID0gbmV3IE5vZGUoKTsKKyAgICBtX3Jvb3QtPnJlY3QgPSBJbnRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIG1fcm9vdC0+bGFy
Z2VzdEZyZWUgPSBtX3NpemU7CisgICAgbV9yb290LT5wYXJlbnQgPSAwOworICAgIG1fcm9vdC0+
bGVmdCA9IDA7CisgICAgbV9yb290LT5yaWdodCA9IDA7CisgICAgbV9ub2RlQ291bnQgPSAxOwor
ICAgIHNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoOCwgOCkpOworfQorCitHZW5lcmFsQXJl
YUFsbG9jYXRvcjo6fkdlbmVyYWxBcmVhQWxsb2NhdG9yKCkKK3sKKyAgICBmcmVlTm9kZShtX3Jv
b3QpOworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9kZShOb2RlKiBub2Rl
KQoreworICAgIGlmIChub2RlKSB7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOworICAg
ICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7CisgICAgfQorICAgIGRlbGV0ZSBub2RlOworfQor
Cit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBBcmVhQWxsb2NhdG9yOjpleHBhbmQobmV4dFBvd2VyT2ZUd28oc2l6ZSkpOworCisg
ICAgaWYgKG1fcm9vdC0+cmVjdC5zaXplKCkgPT0gbV9zaXplKQorICAgICAgICByZXR1cm47IC8v
IE5vIGNoYW5nZS4KKworICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9vdC0+bGFyZ2VzdEZy
ZWUud2lkdGgoKSA+IDApIHsKKyAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBvY2N1cnJl
ZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KKyAgICAgICAgbV9yb290LT5yZWN0ID0g
SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAg
bV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCByb290IHRvIGV4cGFuZCB0
aGUgdHJlZS4KKyAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OworICAgIFNwbGl0IHNwbGl0Owor
ICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIHNwbGl0
ID0gU3BsaXRPblg7CisgICAgZWxzZQorICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworCisgICAg
d2hpbGUgKG1fcm9vdC0+cmVjdC5zaXplKCkgIT0gbV9zaXplKSB7CisgICAgICAgIGlmIChtX3Jv
b3QtPnJlY3Qud2lkdGgoKSA9PSBtX3NpemUud2lkdGgoKSkKKyAgICAgICAgICAgIHNwbGl0ID0g
U3BsaXRPblk7CisgICAgICAgIGVsc2UgaWYgKG1fcm9vdC0+cmVjdC5oZWlnaHQoKSA9PSBtX3Np
emUuaGVpZ2h0KCkpCisgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAgICBOb2Rl
KiBwYXJlbnQgPSBuZXcgTm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IG5ldyBOb2RlKCk7
CisgICAgICAgIG1fbm9kZUNvdW50ICs9IDI7CisgICAgICAgIG1fcm9vdC0+cGFyZW50ID0gcGFy
ZW50OworICAgICAgICBwYXJlbnQtPnBhcmVudCA9IDA7CisgICAgICAgIHBhcmVudC0+bGVmdCA9
IG1fcm9vdDsKKyAgICAgICAgcGFyZW50LT5yaWdodCA9IHJpZ2h0OworICAgICAgICBwYXJlbnQt
Pmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKKyAgICAgICAgcmlnaHQtPnBhcmVu
dCA9IHBhcmVudDsKKyAgICAgICAgcmlnaHQtPmxlZnQgPSAwOworICAgICAgICByaWdodC0+cmln
aHQgPSAwOworICAgICAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Quc2l6ZSgp
OworICAgICAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAgICAgICAgICAgIHBhcmVudC0+
cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAg
ICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSAqIDIsIG1fcm9vdC0+cmVjdC5oZWlnaHQo
KSk7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSAr
IG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAgICAgICAg
IG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcGFyZW50LT5yZWN0ID0gSW50UmVjdChtX3Jvb3QtPnJlY3Qu
eCgpLCBtX3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0
aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgKiAyKTsKKyAgICAgICAgICAgIHJpZ2h0LT5yZWN0
ID0gSW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpICsgbV9yb290LT5y
ZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9v
dC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3BsaXQgPSAoc3BsaXQgPT0g
U3BsaXRPblggPyBTcGxpdE9uWSA6IFNwbGl0T25YKTsKKyAgICAgICAgbV9yb290ID0gcGFyZW50
OworICAgIH0KKyAgICB1cGRhdGVMYXJnZXN0RnJlZShvbGRSb290KTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGZpdHNXaXRoaW4oY29uc3QgSW50U2l6ZSYgc2l6ZTEsIGNvbnN0IEludFNpemUm
IHNpemUyKQoreworICAgIHJldHVybiBzaXplMS53aWR0aCgpIDw9IHNpemUyLndpZHRoKCkgJiYg
c2l6ZTEuaGVpZ2h0KCkgPD0gc2l6ZTIuaGVpZ2h0KCk7Cit9CisKK0ludFJlY3QgR2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgSW50U2l6
ZSByb3VuZGVkID0gcm91bmRBbGxvY2F0aW9uKHNpemUpOworICAgIHJvdW5kZWQgPSBuZXh0UG93
ZXJPZlR3byhyb3VuZGVkKTsKKyAgICBpZiAocm91bmRlZC53aWR0aCgpIDw9IDAgfHwgcm91bmRl
ZC53aWR0aCgpID4gbV9zaXplLndpZHRoKCkKKyAgICAgICAgfHwgcm91bmRlZC5oZWlnaHQoKSA8
PSAwIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5vZGUocm91
bmRlZCwgbV9yb290KTsKKyAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgIHJldHVybiBJ
bnRSZWN0KHBvaW50LCBzaXplKTsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJbnRQb2lu
dCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGVGcm9tTm9kZShjb25zdCBJbnRTaXplJiBz
aXplLCBOb2RlKiBub2RlKQoreworICAgIC8vIEZpbmQgdGhlIGJlc3Qgbm9kZSB0byBpbnNlcnQg
aW50bywgd2hpY2ggc2hvdWxkIGJlCisgICAgLy8gYSBub2RlIHdpdGggdGhlIGxlYXN0IGFtb3Vu
dCBvZiB1bnVzZWQgc3BhY2UgdGhhdCBpcworICAgIC8vIGJpZyBlbm91Z2ggdG8gY29udGFpbiB0
aGUgcmVxdWVzdGVkIHNpemUuCisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgLy8gR28gZG93
biBhIGxldmVsIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGxlZnQgb3IgcmlnaHQKKyAgICAgICAgLy8g
c3ViLXRyZWUgY29udGFpbnMgdGhlIGJlc3QgY2hhbmNlIG9mIGFsbG9jYXRpb24uCisgICAgICAg
IE5vZGUqIGxlZnQgPSBub2RlLT5sZWZ0OworICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPnJp
Z2h0OworICAgICAgICBpZiAobGVmdCAmJiBmaXRzV2l0aGluKHNpemUsIGxlZnQtPmxhcmdlc3RG
cmVlKSkgeworICAgICAgICAgICAgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQt
Pmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5sYXJnZXN0RnJlZS53
aWR0aCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkKKyAgICAgICAgICAgICAgICAgICAg
fHwgbGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkgPCByaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhcmdlc3RGcmVlIHZhbHVlcyBtYXkg
YmUgYSBsaXR0bGUgb3ZlcnNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB0cnkgdGhl
IGxlZnQgc3ViLXRyZWUgYW5kIHRoZW4gdGhlIHJpZ2h0IHN1Yi10cmVlLgorICAgICAgICAgICAg
ICAgICAgICBJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5vZGUoc2l6ZSwgbGVmdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
RnJvbU5vZGUoc2l6ZSwgcmlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBub2RlID0gcmlnaHQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBub2Rl
ID0gbGVmdDsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJp
Z2h0LT5sYXJnZXN0RnJlZSkpCisgICAgICAgICAgICBub2RlID0gcmlnaHQ7CisgICAgICAgIGVs
c2UgaWYgKGxlZnQgfHwgcmlnaHQpIHsKKyAgICAgICAgICAgIC8vIE5laXRoZXIgc3ViLW5vZGUg
aGFzIGVub3VnaCBzcGFjZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgICAgICAgICAgcmV0dXJuIElu
dFBvaW50KC0xLCAtMSk7CisgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihzaXplLCBub2Rl
LT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgIC8vIERvIHdlIG5lZWQgdG8gc3BsaXQgdGhp
cyBub2RlIGludG8gc21hbGxlciBwaWVjZXM/CisgICAgICAgICAgICBTcGxpdCBzcGxpdDsKKyAg
ICAgICAgICAgIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5o
ZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBT
cGxpdCBpbiBlaXRoZXIgZGlyZWN0aW9uOiBjaG9vc2UgdGhlIGludmVyc2Ugb2YKKyAgICAgICAg
ICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUncyBzcGxpdCBkaXJlY3Rpb24gdG8gdHJ5IHRvIGJh
bGFuY2UKKyAgICAgICAgICAgICAgICAvLyBvdXQgdGhlIHdhc3RlZCBzcGFjZSBhcyBmdXJ0aGVy
IHN1YmRpdmlzaW9ucyBoYXBwZW4uCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudAor
ICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3QueCgpID09IG5v
ZGUtPnBhcmVudC0+cmlnaHQtPnJlY3QueCgpKQorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9
IFNwbGl0T25YOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnBhcmVudCkKKyAgICAg
ICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChub2RlLT5yZWN0LndpZHRoKCkgPj0gbm9kZS0+cmVjdC5oZWlnaHQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGZp
dHNXaXRoaW4oSW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpKSwgbm9kZS0+
bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3BsaXQgYWxvbmcgdGhlIFggZGly
ZWN0aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKGZpdHNXaXRoaW4oSW50U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkg
KiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3BsaXQgYWxv
bmcgdGhlIFkgZGlyZWN0aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIENhbm5vdCBzcGxpdCBmdXJ0
aGVyIC0gYWxsb2NhdGUgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgIG5vZGUtPmxhcmdlc3RG
cmVlID0gSW50U2l6ZSgwLCAwKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVMYXJnZXN0RnJlZShu
b2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+cmVjdC5sb2NhdGlvbigpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgbm9kZSwgdGhlbiBnbyBhcm91
bmQgYWdhaW4gdXNpbmcgdGhlIGxlZnQgc3ViLXRyZWUuCisgICAgICAgICAgICBub2RlID0gc3Bs
aXROb2RlKG5vZGUsIHNwbGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIENh
bm5vdCBwb3NzaWJseSBmaXQgaW50byB0aGlzIG5vZGUuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gSW50UG9pbnQoLTEsIC0xKTsKK30KKworR2VuZXJh
bEFyZWFBbGxvY2F0b3I6Ok5vZGUqIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUKKyAg
ICAoTm9kZSogbm9kZSwgU3BsaXQgc3BsaXQpCit7CisgICAgTm9kZSogbGVmdCA9IG5ldyBOb2Rl
KCk7CisgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOworICAgIG1fbm9kZUNvdW50ICs9IDI7
CisgICAgbGVmdC0+cGFyZW50ID0gbm9kZTsKKyAgICBsZWZ0LT5sZWZ0ID0gMDsKKyAgICBsZWZ0
LT5yaWdodCA9IDA7CisgICAgcmlnaHQtPnBhcmVudCA9IG5vZGU7CisgICAgcmlnaHQtPmxlZnQg
PSAwOworICAgIHJpZ2h0LT5yaWdodCA9IDA7CisgICAgbm9kZS0+bGVmdCA9IGxlZnQ7CisgICAg
bm9kZS0+cmlnaHQgPSByaWdodDsKKworICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgeworICAg
ICAgICBsZWZ0LT5yZWN0ID0gSW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCks
CisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgp
KTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KGxlZnQtPnJlY3QubWF4WCgpLCBub2Rl
LT5yZWN0LnkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJl
Y3QuaGVpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnQtPnJlY3QgPSBJbnRSZWN0
KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qu
d2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOworICAgICAgICByaWdodC0+cmVjdCA9
IEludFJlY3Qobm9kZS0+cmVjdC54KCksIGxlZnQtPnJlY3QubWF4WSgpLAorICAgICAgICAgICAg
bm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7CisgICAgfQorCisg
ICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5yZWN0LnNpemUoKTsKKyAgICByaWdodC0+bGFy
Z2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7CisgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBy
aWdodC0+bGFyZ2VzdEZyZWU7CisgICAgcmV0dXJuIGxlZnQ7Cit9CisKK3ZvaWQgR2VuZXJhbEFy
ZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqIG5vZGUpCit7CisgICAgd2hpbGUg
KChub2RlID0gbm9kZS0+cGFyZW50KSkgeworICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IElu
dFNpemUoCisgICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53aWR0
aCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKSksCisgICAgICAgICAgICBzdGQ6
Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSwgbm9kZS0+cmlnaHQtPmxhcmdl
c3RGcmVlLmhlaWdodCgpKQorICAgICAgICAgICAgKTsKKyAgICB9Cit9CisKK3ZvaWQgR2VuZXJh
bEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBM
b2NhdGUgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4KKyAgICBO
b2RlKiBub2RlID0gbV9yb290OworICAgIEludFBvaW50IHBvaW50ID0gcmVjdC5sb2NhdGlvbigp
OworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIGlmIChub2RlLT5sZWZ0ICYmIG5vZGUtPmxl
ZnQtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7
CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT5yZWN0LmNvbnRh
aW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2ludCBpcyBjb21wbGV0ZWx5IG91
dHNpZGUgdGhlIHRyZWUuCisgICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVuIHdvcmsgdXB3YXJkcyB0aHJv
dWdoIHRoZSB0cmVlCisgICAgLy8gcmVjb21iaW5pbmcgYW5kIGRlbGV0aW5nIG5vZGVzIHVudGls
IHdlIHJlYWNoIGEgc2libGluZworICAgIC8vIHRoYXQgaXMgc3RpbGwgYWxsb2NhdGVkLgorICAg
IG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7CisgICAgd2hpbGUgKG5vZGUt
PnBhcmVudCkgeworICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0ID09IG5vZGUpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5w
YXJlbnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQtPmxhcmdlc3RG
cmVlICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKyAgICAgICAg
ZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsKKyAg
ICAgICAgbV9ub2RlQ291bnQgLT0gMjsKKyAgICAgICAgbm9kZS0+bGVmdCA9IDA7CisgICAgICAg
IG5vZGUtPnJpZ2h0ID0gMDsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0
LnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHRoZSByZXN0IG9mIG91ciBhbmNlc3RvcnMg
aGF2ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBmcmVlIHNpemUiLgorICAgIHVwZGF0ZUxhcmdlc3RG
cmVlKG5vZGUpOworfQorCitpbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9BcmVhQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxODBjYWUy
Mzc3NTBmNmZhMzQzYjBiYzdmMmE5MzA5MzkwOGQzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9j
YXRvci5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKgorICovCisKKyNpZm5kZWYgQXJlYUFsbG9jYXRvcl9oCisjZGVmaW5lIEFyZWFBbGxvY2F0
b3JfaAorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiSW50U2l6ZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJlcikK
K3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9y
IGFuIGludGVnZXIuCisgICAgLS1udW1iZXI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAxOwor
ICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7Cisg
ICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7Cisg
ICAgbnVtYmVyKys7CisgICAgcmV0dXJuIG51bWJlcjsKK30KKworaW5saW5lIEludFNpemUgbmV4
dFBvd2VyT2ZUd28oY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50U2l6ZShu
ZXh0UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhlaWdodCgp
KSk7Cit9CisKK2NsYXNzIEFyZWFBbGxvY2F0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IEFy
ZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgfkFyZWFBbGxvY2F0b3Io
KTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAg
SW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0K
KyAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9uKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9t
aW5BbGxvYyA9IHNpemU7IH0KKworICAgIEludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9tYXJnaW47IH0KKyAgICB2b2lkIHNldE1hcmdpbihjb25zdCBJbnRTaXplICZtYXJnaW4pIHsg
bV9tYXJnaW4gPSBtYXJnaW47IH0KKworICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgSW50
U2l6ZSYpOworICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYpOworCisgICAgdmlydHVh
bCBJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IEludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHJlbGVhc2UoY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBj
b25zdDsKKworcHJvdGVjdGVkOgorICAgIEludFNpemUgbV9zaXplOworICAgIEludFNpemUgbV9t
aW5BbGxvYzsKKyAgICBJbnRTaXplIG1fbWFyZ2luOworCisgICAgSW50U2l6ZSByb3VuZEFsbG9j
YXRpb24oY29uc3QgSW50U2l6ZSYpIGNvbnN0OworfTsKKworY2xhc3MgR2VuZXJhbEFyZWFBbGxv
Y2F0b3IgOiBwdWJsaWMgQXJlYUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgfkdlbmVyYWxB
cmVhQWxsb2NhdG9yKCk7CisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBJbnRTaXplJik7CisgICAg
SW50UmVjdCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCByZWxlYXNlKGNvbnN0
IEludFJlY3QmKTsKKyAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBl
bnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07CisKKyAgICBzdHJ1Y3QgTm9kZSB7Cisg
ICAgICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgSW50U2l6ZSBsYXJnZXN0RnJlZTsKKyAgICAg
ICAgTm9kZSogcGFyZW50OworICAgICAgICBOb2RlKiBsZWZ0OworICAgICAgICBOb2RlKiByaWdo
dDsKKyAgICB9OworCisgICAgTm9kZSogbV9yb290OworICAgIGludCBtX25vZGVDb3VudDsKKwor
ICAgIHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUqKTsKKyAgICBJbnRQb2ludCBhbGxvY2F0ZUZy
b21Ob2RlKGNvbnN0IEludFNpemUmLCBOb2RlKik7CisgICAgTm9kZSogc3BsaXROb2RlKE5vZGUq
LCBTcGxpdCk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSopOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorCisjZW5kaWYgLy8gQXJlYUFsbG9jYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Njc0
ODhmZWNiZTU1ODc4NWFlNzM0MGNjYjUwNTgyODcxNTQ4N2UzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
b29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGU6OnN3YXBCdWZmZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCit7Cisg
ICAgaWYgKCFtX3N1cmZhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVjdCB0aWxl
UmVjdChtX3RpbGVSZWN0KTsKKyAgICB0aWxlUmVjdC5zY2FsZSgxLiAvIG1fc2NhbGUpOworICAg
IGJvb2wgc2hvdWxkUmVzZXQgPSBmYWxzZTsKKyAgICBpZiAodGlsZVJlY3QgIT0gcmVjdCgpKSB7
CisgICAgICAgIHNldFJlY3QodGlsZVJlY3QpOworICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7
CisgICAgfQorICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gdGhpcy0+dGV4dHVy
ZSgpOworICAgIGlmICghdGV4dHVyZSkgeworICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZU1hcHBl
ci0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBzZXRUZXh0dXJlKHRleHR1cmUuZ2V0KCkpOwor
ICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7CisgICAgfQorCisgICAgQVNTRVJUKHRleHR1cmVN
YXBwZXItPm1heFRleHR1cmVTaXplKCkud2lkdGgoKSA+PSBtX3RpbGVSZWN0LnNpemUoKS53aWR0
aCgpICYmIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkuaGVpZ2h0KCkgPj0gbV90aWxl
UmVjdC5zaXplKCkuaGVpZ2h0KCkpOworICAgIGlmIChzaG91bGRSZXNldCkKKyAgICAgICAgdGV4
dHVyZS0+cmVzZXQobV90aWxlUmVjdC5zaXplKCksIG1fc3VyZmFjZS0+c3VwcG9ydHNBbHBoYSgp
KTsKKworICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJlLCBtX3NvdXJjZVJlY3Qs
IG1fc3VyZmFjZU9mZnNldCk7CisgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
U3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc291cmNl
UmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgbV90aWxlUmVjdCA9IHRpbGVSZWN0OworICAgIG1fc3Vy
ZmFjZU9mZnNldCA9IG9mZnNldDsKKyAgICBtX3N1cmZhY2UgPSBidWZmZXI7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUodWludDMyX3QgaWQsIGZsb2F0IHNj
YWxlKQoreworICAgIG1fdGlsZXMuYWRkKGlkLCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUo
c2NhbGUpKTsKKyAgICBtX3NjYWxlID0gc2NhbGU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU6OnJlbW92ZVRpbGUodWludDMyX3QgaWQpCit7CisgICAgQVNTRVJUKG1fdGlsZXMu
Y29udGFpbnMoaWQpKTsKKyAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGlkKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlQWxsVGlsZXMoKQoreworICAgIEhhc2hNYXA8
dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGl0LT5rZXkpOworfQorCit2b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKHVpbnQzMl90IGlkLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+IGJhY2tCdWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7Cisg
ICAgSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVuZCgp
KTsKKyAgICBpdC0+dmFsdWUuaW5jcmVtZW50UmVwYWludENvdW50KCk7CisgICAgaXQtPnZhbHVl
LnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7
Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnRleHR1cmUoKSBjb25zdAoreworICAgIEhhc2hNYXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAg
Zm9yIChIYXNoTWFwPHVpbnQzMl90LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnZhbHVlLnRleHR1cmUoKTsK
KyAgICAgICAgaWYgKHRleHR1cmUpCisgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9
CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigpOworfQorCit2b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sK
KyAgICBtX3NpemUgPSBzaXplOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRTaG93VGlsZURlYnVn
VmlzdWFscygpCit7CisjaWYgUExBVEZPUk0oUVQpCisgICAgcmV0dXJuIChxZ2V0ZW52KCJRVF9X
RUJLSVRfU0hPV19DT01QT1NJVElOR19ERUJVR19WSVNVQUxTIikgPT0gIjEiKTsKKyNlbGlmIFVT
RShDQUlSTykKKyAgICByZXR1cm4gKFN0cmluZyhnZXRlbnYoIldFQktJVF9TSE9XX0NPTVBPU0lU
SU5HX0RFQlVHX1ZJU1VBTFMiKSkgPT0gIjEiKTsKKyNlbmRpZgorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUaWxlc1RvVGV4dHVyZU1h
cHBlcihWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiYgdGlsZXMsIFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0
IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2ssIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IFRleHR1cmVNYXBwZXJUaWxlKiB0aWxlID0gdGlsZXNbaV07CisgICAgICAgIHRpbGUtPnBhaW50
KHRleHR1cmVNYXBwZXIsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywgY2FsY3VsYXRlRXhwb3Nl
ZFRpbGVFZGdlcyhyZWN0LCB0aWxlLT5yZWN0KCkpKTsKKyAgICAgICAgc3RhdGljIGJvb2wgc2hv
dWxkRGVidWcgPSBzaG91bGRTaG93VGlsZURlYnVnVmlzdWFscygpOworICAgICAgICBpZiAoIXNo
b3VsZERlYnVnKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGV4dHVyZU1hcHBl
ci0+ZHJhd0JvcmRlcihDb2xvcigweEZGLCAwLCAwKSwgMiwgdGlsZS0+cmVjdCgpLCB0cmFuc2Zv
cm0pOworICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3UmVwYWludENvdW50ZXIoc3RhdGljX2Nh
c3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKj4odGlsZSktPnJlcGFpbnRDb3VudCgpLCA4
LCB0aWxlLT5yZWN0KCkubG9jYXRpb24oKSwgdHJhbnNmb3JtKTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVy
ZSogbWFzaykKK3sKKyAgICBpZiAobV90aWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBBU1NFUlQoIW1fc2l6ZS5pc1plcm8oKSk7CisKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBl
clRpbGUqPiB0aWxlc1RvUGFpbnQ7CisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gcHJl
dmlvdXNUaWxlc1RvUGFpbnQ7CisKKyAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgZXZlcnkgdGlt
ZSB3ZSBwYWludCwgaW4gY2FzZSB0aGUgb3BhY2l0eSBoYXMgY2hhbmdlZC4KKyAgICBIYXNoTWFw
PHVpbnQzMl90LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRvciBlbmQgPSBt
X3RpbGVzLmVuZCgpOworICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKKyAgICBmb3IgKEhhc2hN
YXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOworICAgICAgICBpZiAoIXRpbGUudGV4
dHVyZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHRpbGUuc2NhbGUo
KSA9PSBtX3NjYWxlKSB7CisgICAgICAgICAgICB0aWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsK
KyAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRlKHRpbGUucmVjdCgpKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91
cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gsIG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlr
ZSBhIGJ1Zy4KKyAgICAgICAgLy8gV2Ugc2hvdyB0aGUgcHJldmlvdXMtc2NhbGUgdGlsZSBhbnl3
YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0aCBhbnkgY3VycmVudC1zY2FsZSB0aWxlLgor
ICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYgY292ZXJlZFJlY3QuaW50ZXJzZWN0cyh0aWxl
LnJlY3QoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBwcmV2aW91c1RpbGVz
VG9QYWludC5hcHBlbmQoJnRpbGUpOworICAgIH0KKworICAgIEZsb2F0UmVjdCByZWN0T25Db250
ZW50cyhGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07CisgICAgLy8gdGFyZ2V0UmVjdCBpcyBv
biB0aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0sIHNvIHdlIG11c3QgY29tcGFyZSB0d28g
cmVjdHMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIC8vIFNlZSBUaWxl
ZEJhY2tpbmdTdG9yZS4KKyAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0T25Db250ZW50cywgdGFyZ2V0UmVjdCkpOworCisg
ICAgcGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcihwcmV2aW91c1RpbGVzVG9QYWludCwgdGV4dHVy
ZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3RPbkNvbnRlbnRz
KTsKKyAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHRpbGVzVG9QYWludCwgdGV4dHVyZU1h
cHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3RPbkNvbnRlbnRzKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMo
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBIYXNoU2V0PHVpbnQzMl90Pjo6
aXRlcmF0b3IgdGlsZXNUb1JlbW92ZUVuZCA9IG1fdGlsZXNUb1JlbW92ZS5lbmQoKTsKKyAgICBm
b3IgKEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciBpdCA9IG1fdGlsZXNUb1JlbW92ZS5iZWdp
bigpOyBpdCAhPSB0aWxlc1RvUmVtb3ZlRW5kOyArK2l0KQorICAgICAgICBtX3RpbGVzLnJlbW92
ZSgqaXQpOworICAgIG1fdGlsZXNUb1JlbW92ZS5jbGVhcigpOworCisgICAgSGFzaE1hcDx1aW50
MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgdGlsZXNFbmQgPSBt
X3RpbGVzLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRpbGVz
RW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tp
bmdTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyNTY5YzNkZTlhYmExYWJkY2VmMTdjMGI1MjI4MDYyMDI0
OGYyZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaApAQCAtMCwwICsx
LDg2IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCisjZGVmaW5lIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKKworY2xhc3MgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmVUaWxlIDogcHVibGljIFRleHR1cmVNYXBwZXJUaWxlIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAx
KQorICAgICAgICA6IFRleHR1cmVNYXBwZXJUaWxlKEZsb2F0UmVjdCgpKQorICAgICAgICAsIG1f
c2NhbGUoc2NhbGUpCisgICAgICAgICwgbV9yZXBhaW50Q291bnQoMCkKKyAgICB7CisgICAgfQor
CisgICAgaW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQorICAg
IGlubGluZSB2b2lkIGluY3JlbWVudFJlcGFpbnRDb3VudCgpIHsgKyttX3JlcGFpbnRDb3VudDsg
fQorICAgIGlubGluZSBpbnQgcmVwYWludENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50
Q291bnQ7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKFRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lk
IHNldEJhY2tCdWZmZXIoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYpOworCitwcml2YXRl
OgorICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAgICBJbnRSZWN0
IG1fc291cmNlUmVjdDsKKyAgICBJbnRSZWN0IG1fdGlsZVJlY3Q7CisgICAgSW50UG9pbnQgbV9z
dXJmYWNlT2Zmc2V0OworICAgIGZsb2F0IG1fc2NhbGU7CisgICAgaW50IG1fcmVwYWludENvdW50
OworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90
IHRpbGVJRCwgZmxvYXQpOworICAgIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpOwor
ICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3Qg
dGlsZUlELCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYsIFBhc3NSZWZQdHI8Q29vcmRp
bmF0ZWRTdXJmYWNlPiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlKTsgfQorICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMo
VGV4dHVyZU1hcHBlciopOworICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgp
IGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsK
KworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSgpCisgICAgICAgIDogbV9z
Y2FsZSgxLikKKyAgICB7IH0KKyAgICB2b2lkIHBhaW50VGlsZXNUb1RleHR1cmVNYXBwZXIoVmVj
dG9yPFRleHR1cmVNYXBwZXJUaWxlKj4mLCBUZXh0dXJlTWFwcGVyKiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCwgQml0bWFwVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYpOwor
CisgICAgSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPiBtX3Rp
bGVzOworICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1fdGlsZXNUb1JlbW92ZTsKKyAgICBGbG9hdFNp
emUgbV9zaXplOworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiNThkYjA4OWZhZmY3
YTYyNTFmMzA1MWVjOTVhOGQzMjRlMzc2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcApAQCAtMCwwICsxLDEwMDkgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgQ29weXJpZ2h0IChD
KSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRl
ZFRpbGUuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlIDx3dGYvVGVt
cG9yYXJ5Q2hhbmdlLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCB0b0Nvb3Jk
aW5hdGVkTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIg
PyB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAwOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpCit7CisgICAg
bV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAg
ICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUFuaW1hdGlvbnMoKQoreworICAgIG1fc2hvdWxk
U3luY0FuaW1hdGlvbnMgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50
KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpkaWRDaGFuZ2VDaGlsZHJlbigpCit7CisgICAgbV9zaG91bGRTeW5jQ2hpbGRy
ZW4gPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZs
dXNoUmVxdWlyZWQodGhpcyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVycygpCit7CisgICAgbV9zaG91
bGRTeW5jRmlsdGVycyA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQo
KS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCkKK3sKKyAgICBtX3Nob3Vs
ZFN5bmNJbWFnZUJhY2tpbmcgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xp
ZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpCit7CisgICAgbV9zaG91
bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihjaGlsZHJlbigpW2ldKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBpZiAo
cmVwbGljYUxheWVyKCkpCisgICAgICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxp
Y2FMYXllcigpKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUdlb21ldHJ5KCkKK3sKKyAgICBkaWRDaGFu
Z2VMYXllclN0YXRlKCk7CisgICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwor
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisjaWZu
ZGVmIE5ERUJVRworICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fc2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUo
dHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0NoaWxkcmVuKHRydWUpCisgICAgLCBtX3Nob3VsZFN5
bmNGaWx0ZXJzKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcodHJ1ZSkKKyAg
ICAsIG1fc2hvdWxkU3luY0FuaW1hdGlvbnModHJ1ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0
KGZhbHNlKQorICAgICwgbV9jYW52YXNOZWVkc0Rpc3BsYXkoZmFsc2UpCisgICAgLCBtX2NhbnZh
c05lZWRzQ3JlYXRlKGZhbHNlKQorICAgICwgbV9jYW52YXNOZWVkc0Rlc3Ryb3koZmFsc2UpCisg
ICAgLCBtX3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudChmYWxzZSkKKyAgICAsIG1fcGVu
ZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudChmYWxzZSkKKyAgICAsIG1fY29vcmRpbmF0b3IoMCkK
KyAgICAsIG1fY29udGVudHNTY2FsZSgxKQorICAgICwgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQ
dHIoMCkKKyAgICAsIG1fY2FudmFzUGxhdGZvcm1MYXllcigwKQorICAgICwgbV9hbmltYXRpb25T
dGFydGVkVGltZXIodGhpcywgJkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3Rh
cnRlZFRpbWVyRmlyZWQpCit7CisgICAgc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCBuZXh0TGF5
ZXJJRCA9IDE7CisgICAgbV9pZCA9IG5leHRMYXllcklEKys7Cit9CisKK0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6fkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpCit7CisgICAgaWYgKG1fY29v
cmRpbmF0b3IpIHsKKyAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgICAgIG1fY29v
cmRpbmF0b3ItPmRldGFjaExheWVyKHRoaXMpOworICAgIH0KKyAgICBBU1NFUlQoIW1fY29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcgJiYgIW1fbWFpbkJhY2tpbmdTdG9yZSk7CisgICAgd2lsbEJlRGVz
dHJveWVkKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJl
bihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKK3sKKyAgICBib29sIG9r
ID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworICAgIGlmICghb2spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIp
OworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkK
K3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKKyAg
ICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2li
bGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5n
KTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXll
ciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBz
aWJsaW5nKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCitib29sIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFw
aGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVw
bGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7CisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKK3sK
KyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAgICAgICAgcGFyZW50TGF5ZXItPmRpZENo
YW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxv
YXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBwKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKKyAgICBkaWRDaGFuZ2VHZW9t
ZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9p
bnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQoreworICAgIGlmIChhbmNob3JQb2ludCgpID09IHAp
CisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHAp
OworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+
c2l6ZSgpID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dFNpemUoc2l6ZSk7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1hc2tMYXllcigp
LT5zZXRTaXplKHNpemUpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHQpCit7CisgICAgaWYgKHRyYW5zZm9ybSgpID09IHQpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBkaWRDaGFuZ2VHZW9t
ZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5U
cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKGNoaWxk
cmVuVHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
cjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgYikK
K3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQorICAgICAgICByZXR1cm47CisKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhi
b29sIGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQorICAgICAgICByZXR1cm47
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsKKyAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RHJhd3ND
b250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0gYikKKyAgICAgICAg
cmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsKKworICAgIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRzQXJlVmlzaWJs
ZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c1Zpc2libGUoYik7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXIoKS0+
c2V0Q29udGVudHNWaXNpYmxlKGIpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBi
KQoreworICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNl
dFN1cHBvcnRzQWxwaGEoIWIpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVl
KGIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpCit7CisgICAgaWYgKGJh
Y2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0
IG9wYWNpdHkpCit7CisgICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOworICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChjb250ZW50
c1JlY3QoKSA9PSByKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRD
b250ZW50c1JlY3Qocik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQoreworICAg
IGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpCisgICAgICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5
ID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVz
aFJlcXVpcmVkKHRoaXMpOworCisgICAgYWRkUmVwYWludFJlY3QoY29udGVudHNSZWN0KCkpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyhQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQoreworI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorICAgIGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2Fu
dmFzVG9rZW4uaXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAgICAg
ICAgICAgbV9jYW52YXNOZWVkc0Rlc3Ryb3kgPSB0cnVlOworICAgICAgICBlbHNlIGlmICgobV9j
YW52YXNTaXplICE9IHBsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCkpIHx8IChtX2Nh
bnZhc1Rva2VuICE9IHBsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCkpKSB7Cisg
ICAgICAgICAgICAvLyBtX2NhbnZhc1Rva2VuIGNhbiBiZSBkaWZmZXJlbnQgdG8gcGxhdGZvcm1M
YXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSwgZXZlbiBpZiBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXIgZXF1YWxzIHBsYXRmb3JtTGF5ZXIuCisgICAgICAgICAgICBtX2NhbnZhc05lZWRzRGVzdHJv
eSA9IHRydWU7CisgICAgICAgICAgICBtX2NhbnZhc05lZWRzQ3JlYXRlID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwbGF0Zm9ybUxheWVyKQorICAgICAgICAg
ICAgbV9jYW52YXNOZWVkc0NyZWF0ZSA9IHRydWU7CisgICAgfQorCisgICAgbV9jYW52YXNQbGF0
Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKyAgICAvLyBtX2NhbnZhc1Rva2VuIGlzIHVwZGF0
ZWQgb25seSBoZXJlLiBJbiBkZXRhaWwsIHdoZW4gR3JhcGhpY3NDb250ZXh0M0QgaXMgY2hhbmdl
ZCBvciByZXNoYXBlZCwgbV9jYW52YXNUb2tlbiBpcyBjaGFuZ2VkIGFuZCBzZXRDb250ZW50c1Rv
Q2FudmFzKCkgaXMgYWx3YXlzIGNhbGxlZC4KKyAgICBtX2NhbnZhc1NpemUgPSBtX2NhbnZhc1Bs
YXRmb3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCkg
OiBJbnRTaXplKCk7CisgICAgbV9jYW52YXNUb2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllciA/
IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSA6IEdyYXBoaWNz
U3VyZmFjZVRva2VuKCk7CisgICAgQVNTRVJUKCEoIW1fY2FudmFzVG9rZW4uaXNWYWxpZCgpICYm
IG1fY2FudmFzUGxhdGZvcm1MYXllcikpOworICAgIGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIp
CisgICAgICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkp
CisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0ocGxhdGZvcm1MYXllcik7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmIG5ld0ZpbHRlcnMpCit7CisgICAgaWYgKGZpbHRlcnMoKSA9
PSBuZXdGaWx0ZXJzKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkaWRDaGFuZ2VGaWx0ZXJz
KCk7CisgICAgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMobmV3RmlsdGVycyk7Cit9
CisjZW5kaWYKKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9T
b2xpZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAobV9sYXllckluZm8uc29s
aWRDb2xvciA9PSBjb2xvcikKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJJbmZvLnNvbGlk
Q29sb3IgPSBjb2xvcjsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqIGltYWdlKQor
eworICAgIE5hdGl2ZUltYWdlUHRyIG5ld05hdGl2ZUltYWdlUHRyID0gaW1hZ2UgPyBpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSA6IDA7CisgICAgaWYgKG5ld05hdGl2ZUltYWdl
UHRyKSB7CisgICAgICAgIC8vIFRoaXMgY29kZSBtYWtlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHBv
aW50ZXIgZXF1YWxpdHkgb24gYSBOYXRpdmVJbWFnZVB0ciBpcyBhIHZhbGlkIHdheSB0byB0ZWxs
IGlmIHRoZSBpbWFnZSBpcyBjaGFuZ2VkLgorICAgICAgICAvLyBUaGlzIGFzc3VtcHRpb24gaXMg
dHJ1ZSBpbiBRdCwgR1RLIGFuZCBFRkwuCisgICAgICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0ciA9
PSBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IGltYWdlOworICAgICAgICBtX2NvbXBvc2l0ZWROYXRp
dmVJbWFnZVB0ciA9IG5ld05hdGl2ZUltYWdlUHRyOworICAgIH0gZWxzZSB7CisgICAgICAgIG1f
Y29tcG9zaXRlZEltYWdlID0gMDsKKyAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIg
PSAwOworICAgIH0KKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShpbWFn
ZSk7CisgICAgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRNYXNrTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAg
aWYgKGxheWVyID09IG1hc2tMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRNYXNrTGF5ZXIobGF5ZXIpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgbGF5ZXItPnNldFNpemUoc2l6ZSgpKTsKKyAgICBsYXllci0+c2V0Q29u
dGVudHNWaXNpYmxlKGNvbnRlbnRzQXJlVmlzaWJsZSgpKTsKKyAgICBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIqIGNvb3JkaW5hdGVkTGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihs
YXllcik7CisgICAgY29vcmRpbmF0ZWRMYXllci0+ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoSW1hZ2UqIGltYWdlKSBjb25zdAorewor
ICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5pc0JpdG1hcEltYWdlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGVudW0geyBrTWF4RGltZW5zdGlvbkZvckRpcmVjdENvbXBvc2l0aW5n
ID0gMjAwMCB9OworICAgIGlmIChpbWFnZS0+d2lkdGgoKSA+IGtNYXhEaW1lbnN0aW9uRm9yRGly
ZWN0Q29tcG9zaXRpbmcgfHwgaW1hZ2UtPmhlaWdodCgpID4ga01heERpbWVuc3Rpb25Gb3JEaXJl
Y3RDb21wb3NpdGluZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXll
cihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0gcmVwbGljYUxheWVy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRC
eUxheWVyKGxheWVyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXkoKQoreworICAgIHNldE5lZWRz
RGlzcGxheUluUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKG1fbWFpbkJhY2tpbmdTdG9yZSkKKyAgICAgICAg
bV9tYWluQmFja2luZ1N0b3JlLT5pbnZhbGlkYXRlKEludFJlY3QocmVjdCkpOworCisgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOworCisgICAgYWRkUmVwYWludFJlY3QocmVjdCk7Cit9CisKK0Nv
b3JkaW5hdGVkTGF5ZXJJRCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmlkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pZDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmZs
dXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFt
X2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpIHsKKyAgICAgICAgaWYgKGNs
aWVudCgpKQorICAgICAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKiBtYXNrID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobWFza0xheWVyKCkpKQorICAg
ICAgICBtYXNrLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAg
ICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiByZXBsaWNhID0gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpKQorICAgICAgICByZXBsaWNhLT5mbHVzaENvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5j
Rml4ZWRMYXllcnMoKTsKKworICAgIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsr
aSkKKyAgICAgICAgY2hpbGRyZW4oKVtpXS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKHJlY3QpOwor
fQorCitDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqPihsYXllcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jQ2hpbGRyZW4oKQoreworICAgIGlmICghbV9zaG91bGRTeW5jQ2hpbGRyZW4p
CisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IGZhbHNlOworICAg
IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IGNoaWxkSURzOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hpbGRJRHMuYXBwZW5k
KHRvQ29vcmRpbmF0ZWRMYXllcklEKGNoaWxkcmVuKClbaV0pKTsKKworICAgIG1fY29vcmRpbmF0
b3ItPnN5bmNMYXllckNoaWxkcmVuKG1faWQsIGNoaWxkSURzKTsKK30KKworI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jRmlsdGVycygp
Cit7CisgICAgaWYgKCFtX3Nob3VsZFN5bmNGaWx0ZXJzKQorICAgICAgICByZXR1cm47CisgICAg
bV9zaG91bGRTeW5jRmlsdGVycyA9IGZhbHNlOworICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXll
ckZpbHRlcnMobV9pZCwgZmlsdGVycygpKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0ltYWdlQmFja2luZygpCit7CisgICAgaWYgKCFtX3Nob3VsZFN5
bmNJbWFnZUJhY2tpbmcpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNJbWFnZUJh
Y2tpbmcgPSBmYWxzZTsKKworICAgIGlmIChtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cikgewor
ICAgICAgICBBU1NFUlQoIXNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSk7CisgICAgICAgIEFTU0VS
VChtX2NvbXBvc2l0ZWRJbWFnZSk7CisKKyAgICAgICAgYm9vbCBpbWFnZUluc3RhbmNlUmVwbGFj
ZWQgPSBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nICYmIChtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLT5pZCgpICE9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKSk7CisgICAgICAgIGlmIChpbWFnZUlu
c3RhbmNlUmVwbGFjZWQpCisgICAgICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQo
KTsKKworICAgICAgICBpZiAoIW1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpIHsKKyAgICAgICAg
ICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgPSBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFn
ZUJhY2tpbmdJZk5lZWRlZChtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSk7CisgICAgICAgICAgICBt
X2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5hZGRIb3N0KHRoaXMpOworICAgICAgICAgICAgbV9s
YXllckluZm8uaW1hZ2VJRCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCk7CisgICAg
ICAgIH0KKworICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5tYXJrRGlydHkoKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CisKKyAg
ICAvLyBzeW5jSW1hZ2VCYWNraW5nKCkgY2hhbmdlZCBtX2xheWVySW5mby5pbWFnZUlELgorICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNMYXllclN0YXRlKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUp
CisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gZmFsc2U7Cisg
ICAgbV9sYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0ID0gZml4ZWRUb1ZpZXdwb3J0KCk7CisKKyAg
ICBtX2xheWVySW5mby5iYWNrZmFjZVZpc2libGUgPSBiYWNrZmFjZVZpc2liaWxpdHkoKTsKKyAg
ICBtX2xheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSA9IGNoaWxkcmVuVHJhbnNmb3JtKCk7Cisg
ICAgbV9sYXllckluZm8uY29udGVudHNPcGFxdWUgPSBjb250ZW50c09wYXF1ZSgpOworICAgIG1f
bGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCA9IGNvbnRlbnRzUmVjdCgpOworICAgIG1fbGF5ZXJJbmZv
LmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudCgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRz
VmlzaWJsZSA9IGNvbnRlbnRzQXJlVmlzaWJsZSgpOworICAgIG1fbGF5ZXJJbmZvLm1hc2sgPSB0
b0Nvb3JkaW5hdGVkTGF5ZXJJRChtYXNrTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8ubWFza3NU
b0JvdW5kcyA9IG1hc2tzVG9Cb3VuZHMoKTsKKyAgICBtX2xheWVySW5mby5vcGFjaXR5ID0gb3Bh
Y2l0eSgpOworICAgIG1fbGF5ZXJJbmZvLnByZXNlcnZlczNEID0gcHJlc2VydmVzM0QoKTsKKyAg
ICBtX2xheWVySW5mby5yZXBsaWNhID0gdG9Db29yZGluYXRlZExheWVySUQocmVwbGljYUxheWVy
KCkpOworICAgIG1fbGF5ZXJJbmZvLnRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworCisgICAgbV9s
YXllckluZm8uYW5jaG9yUG9pbnQgPSBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7CisgICAgbV9sYXll
ckluZm8ucG9zID0gbV9hZGp1c3RlZFBvc2l0aW9uOworICAgIG1fbGF5ZXJJbmZvLnNpemUgPSBt
X2FkanVzdGVkU2l6ZTsKKworICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQs
IG1fbGF5ZXJJbmZvKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNB
bmltYXRpb25zKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0FuaW1hdGlvbnMpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSBmYWxzZTsKKworICAgIG1f
Y29vcmRpbmF0b3ItPnNldExheWVyQW5pbWF0aW9ucyhtX2lkLCBtX2FuaW1hdGlvbnMpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcygpCit7CisgICAgZGVz
dHJveUNhbnZhc0lmTmVlZGVkKCk7CisgICAgY3JlYXRlQ2FudmFzSWZOZWVkZWQoKTsKKworICAg
IGlmICghbV9jYW52YXNOZWVkc0Rpc3BsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VS
VChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IG1fY29vcmRpbmF0b3ItPnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsK
KyNlbmRpZgorICAgIG1fY2FudmFzTmVlZHNEaXNwbGF5ID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQoKQoreworICAgIGlm
ICghbV9jYW52YXNOZWVkc0Rlc3Ryb3kpCisgICAgICAgIHJldHVybjsKKworI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQorICAgIG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9pZCk7Cisj
ZW5kaWYKKyAgICBtX2NhbnZhc05lZWRzRGVzdHJveSA9IGZhbHNlOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQoreworICAgIGlmICgh
bV9jYW52YXNOZWVkc0NyZWF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY2Fu
dmFzUGxhdGZvcm1MYXllcik7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgbV9jb29y
ZGluYXRvci0+Y3JlYXRlQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7CisjZW5k
aWYKKyAgICBtX2NhbnZhc05lZWRzQ3JlYXRlID0gZmFsc2U7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkK
K3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsK
KworICAgIC8vIFNldHMgdGhlIHZhbHVlcy4KKyAgICBjb21wdXRlUGl4ZWxBbGlnbm1lbnQobV9h
ZGp1c3RlZFBvc2l0aW9uLCBtX2FkanVzdGVkU2l6ZSwgbV9hZGp1c3RlZEFuY2hvclBvaW50LCBt
X3BpeGVsQWxpZ25tZW50T2Zmc2V0KTsKKworICAgIHN5bmNJbWFnZUJhY2tpbmcoKTsKKyAgICBz
eW5jTGF5ZXJTdGF0ZSgpOworICAgIHN5bmNBbmltYXRpb25zKCk7CisgICAgY29tcHV0ZVRyYW5z
Zm9ybWVkVmlzaWJsZVJlY3QoKTsKKyAgICBzeW5jQ2hpbGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCisgICAgc3luY0ZpbHRlcnMoKTsKKyNlbmRpZgorICAgIHVwZGF0ZUNvbnRlbnRC
dWZmZXJzKCk7CisgICAgc3luY0NhbnZhcygpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6aW1hZ2VCYWNraW5nVmlzaWJsZSgpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcpOworICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0
KCkuaW50ZXJzZWN0cyhjb250ZW50c1JlY3QoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKQoreworICAgIGlmICghbV9j
b29yZGluYXRlZEltYWdlQmFja2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1f
Y29vcmRpbmF0b3IpOworICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPnJlbW92ZUhvc3Qo
dGhpcyk7CisgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy5jbGVhcigpOworICAgIG1fbGF5
ZXJJbmZvLmltYWdlSUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdp
bigpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIo
Ym9vbCBpc1Jvb3QpCit7CisgICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7Cisg
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBv
aW50JiB0cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFRyYWplY3RvcnlW
ZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7CisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1l
bnQoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzU2Nh
bGUoZmxvYXQgc2NhbGUpCit7CisgICAgbV9jb250ZW50c1NjYWxlID0gc2NhbGU7CisgICAgaWYg
KHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgbV9wZW5kaW5nQ29udGVudHNTY2Fs
ZUFkanVzdG1lbnQgPSB0cnVlOworfQorCitmbG9hdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQoreworICAgIHJldHVybiBzZWxmT3JBbmNlc3Rvckhh
dmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkgPyAxIDogbV9jb250ZW50c1NjYWxlOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSgpCit7CisgICAg
QVNTRVJUKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSk7CisgICAgaWYgKCFtX21haW5CYWNraW5n
U3RvcmUgfHwgbV9tYWluQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZl
Q29udGVudHNTY2FsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBCZXR3ZWVuIGNyZWF0
aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcgdGhlIGNvbnRlbnQsCisgICAg
Ly8gd2UgZG8gbm90IHdhbnQgdG8gZHJvcCB0aGUgcHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQg
cmVzdWx0IGluCisgICAgLy8gYnJpZWZseSBzZWVpbmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRp
bGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZQorICAgIC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVt
LgorICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFz
ZSgpOworCisgICAgLy8gTm8gcmVhc29uIHRvIHNhdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3Rv
cmUgZm9yIG5vbi12aXNpYmxlIGFyZWFzLgorICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJl
bW92ZUFsbE5vblZpc2libGVUaWxlcygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Y3JlYXRlQmFja2luZ1N0b3JlKCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBh
ZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFja2Vu
ZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0Fs
cGhhKCFjb250ZW50c09wYXF1ZSgpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRl
bnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0
LCByZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiAvKiB1cGRhdGVkUmVjdHMgKi8p
Cit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9y
ZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKQoreworICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1
c3RtZW50KCk7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1
c2hSZXF1aXJlZCh0aGlzKTsKK30KKworSW50UmVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkKK3sKKyAgICByZXR1cm4gSW50UmVjdCgw
LCAwLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKTsKK30KKworc3RhdGljIHZvaWQg
Y2xhbXBUb0NvbnRlbnRzUmVjdElmUmVjdElzSW5maW5pdGUoRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBJbnRSZWN0JiBjb250ZW50c1JlY3QpCit7CisgICAgaWYgKHJlY3Qud2lkdGgoKSA+PSBMYXlv
dXRVbml0OjpuZWFybHlNYXgoKSB8fCByZWN0LndpZHRoKCkgPD0gTGF5b3V0VW5pdDo6bmVhcmx5
TWluKCkpIHsKKyAgICAgICAgcmVjdC5zZXRYKGNvbnRlbnRzUmVjdC54KCkpOworICAgICAgICBy
ZWN0LnNldFdpZHRoKGNvbnRlbnRzUmVjdC53aWR0aCgpKTsKKyAgICB9CisKKyAgICBpZiAocmVj
dC5oZWlnaHQoKSA+PSBMYXlvdXRVbml0OjpuZWFybHlNYXgoKSB8fCByZWN0LmhlaWdodCgpIDw9
IExheW91dFVuaXQ6Om5lYXJseU1pbigpKSB7CisgICAgICAgIHJlY3Quc2V0WShjb250ZW50c1Jl
Y3QueSgpKTsKKyAgICAgICAgcmVjdC5zZXRIZWlnaHQoY29udGVudHNSZWN0LmhlaWdodCgpKTsK
KyAgICB9Cit9CisKK0ludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tp
bmdTdG9yZVZpc2libGVSZWN0KCkKK3sKKyAgICAvLyBOb24taW52ZXJ0aWJsZSBsYXllcnMgYXJl
IG5vdCB2aXNpYmxlLgorICAgIGlmICghbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmlzSW52
ZXJ0aWJsZSgpKQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgLy8gUmV0dXJuIGEg
cHJvamVjdGlvbiBvZiB0aGUgdmlzaWJsZSByZWN0IChzdXJmYWNlIGNvb3JkaW5hdGVzKSBvbnRv
IHRoZSBsYXllcidzIHBsYW5lIChsYXllciBjb29yZGluYXRlcykuCisgICAgLy8gVGhlIHJlc3Vs
dGluZyBxdWFkIG1pZ2h0IGJlIHNxdWV3ZWQgYW5kIHRoZSB2aXNpYmxlIHJlY3QgaXMgdGhlIGJv
dW5kaW5nIGJveCBvZiB0aGlzIHF1YWQsCisgICAgLy8gc28gaXQgbWlnaHQgc3ByZWFkIGZ1cnRo
ZXIgdGhhbiB0aGUgcmVhbCB2aXNpYmxlIGFyZWEgKGFuZCB0aGVuIGV2ZW4gbW9yZSBhbXBsaWZp
ZWQgYnkgdGhlIGNvdmVyIHJlY3QgbXVsdGlwbGllcikuCisgICAgQVNTRVJUKG1fY2FjaGVkSW52
ZXJzZVRyYW5zZm9ybSA9PSBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpKTsK
KyAgICBGbG9hdFJlY3QgcmVjdCA9IG1fY2FjaGVkSW52ZXJzZVRyYW5zZm9ybS5jbGFtcGVkQm91
bmRzT2ZQcm9qZWN0ZWRRdWFkKEZsb2F0UXVhZChtX2Nvb3JkaW5hdG9yLT52aXNpYmxlQ29udGVu
dHNSZWN0KCkpKTsKKyAgICBjbGFtcFRvQ29udGVudHNSZWN0SWZSZWN0SXNJbmZpbml0ZShyZWN0
LCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsKKyAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChyZWN0KTsKK30KKworQ29sb3IgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxl
ZEJhY2tpbmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnRl
bnRzT3BhcXVlKCkgPyBDb2xvcjo6d2hpdGUgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Cit9CisKK1Bh
c3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmJlZ2lu
Q29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiBzaXplLCB1aW50MzJfdCYgYXRsYXMsIEludFBv
aW50JiBvZmZzZXQpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOworICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOworICAgIHJldHVybiBtX2Nv
b3JkaW5hdG9yLT5iZWdpbkNvbnRlbnRVcGRhdGUoc2l6ZSwgY29udGVudHNPcGFxdWUoKSA/IENv
b3JkaW5hdGVkU3VyZmFjZTo6Tm9GbGFncyA6IENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNB
bHBoYSwgYXRsYXMsIG9mZnNldCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVw
ZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQoreworICAgIEFTU0VSVChtX2Nvb3Jk
aW5hdG9yKTsKKyAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdl
cygpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRl
SW5mbywgdGlsZVJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBk
YXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRv
cik7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7
CisgICAgbV9jb29yZGluYXRvci0+dXBkYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8s
IHRpbGVSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZVRp
bGUodWludDMyX3QgdGlsZUlEKQoreworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKKyAgICBB
U1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIHx8IG1faXNQdXJn
aW5nKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVUaWxlKGlkKCksIHRpbGVJRCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVDb250ZW50QnVmZmVycygpCit7
CisgICAgaWYgKCFzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpIHsKKyAgICAgICAgbV9tYWluQmFj
a2luZ1N0b3JlLmNsZWFyKCk7CisgICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BlbmRpbmdDb250ZW50c1Nj
YWxlQWRqdXN0bWVudCkgeworICAgICAgICBhZGp1c3RDb250ZW50c1NjYWxlKCk7CisgICAgICAg
IG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50ID0gZmFsc2U7CisgICAgfQorCisgICAg
Ly8gVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3ZSAocmUpY3JlYXRlIHRoZSBtYWluIHRpbGVkIGJh
Y2tpbmcgc3RvcmUsIG9uY2Ugd2UKKyAgICAvLyBoYXZlIGEgcmVtb3RlIGNsaWVudCBhbmQgd2Ug
YXJlIHJlYWR5IHRvIHNlbmQgb3VyIGRhdGEgdG8gdGhlIFVJIHByb2Nlc3MuCisgICAgaWYgKCFt
X21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOworCisgICAg
aWYgKG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCkgeworICAgICAgICBtX3BlbmRpbmdW
aXNpYmxlUmVjdEFkanVzdG1lbnQgPSBmYWxzZTsKKyAgICAgICAgbV9tYWluQmFja2luZ1N0b3Jl
LT5jb3ZlcldpdGhUaWxlc0lmTmVlZGVkKCk7CisgICAgfQorCisgICAgbV9tYWluQmFja2luZ1N0
b3JlLT51cGRhdGVUaWxlQnVmZmVycygpOworCisgICAgLy8gVGhlIHByZXZpb3VzIGJhY2tpbmcg
c3RvcmUgaXMga2VwdCBhcm91bmQgdG8gYXZvaWQgZmxpY2tlcmluZyBiZXR3ZWVuCisgICAgLy8g
cmVtb3ZpbmcgdGhlIGV4aXN0aW5nIHRpbGVzIGFuZCBwYWludGluZyB0aGUgbmV3IG9uZXMuIFRo
ZSBmaXJzdCB0aW1lCisgICAgLy8gdGhlIHZpc2libGVSZWN0IGlzIGZ1bGwgcGFpbnRlZCB3ZSBy
ZW1vdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUuCisgICAgaWYgKG1fbWFpbkJhY2tpbmdT
dG9yZS0+dmlzaWJsZUFyZWFJc0NvdmVyZWQoKSkKKyAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdT
dG9yZS5jbGVhcigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cHVyZ2VC
YWNraW5nU3RvcmVzKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgVGVtcG9yYXJ5Q2hhbmdlPGJv
b2w+IHVwZGF0ZU1vZGVQcm90ZWN0b3IobV9pc1B1cmdpbmcsIHRydWUpOworI2VuZGlmCisgICAg
bV9tYWluQmFja2luZ1N0b3JlLmNsZWFyKCk7CisgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5j
bGVhcigpOworCisgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CisKKyAgICBkaWRD
aGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNvb3JkaW5hdG9y
KQoreworICAgIG1fY29vcmRpbmF0b3IgPSBjb29yZGluYXRvcjsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCkKK3sKKyAg
ICBpZiAoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQorICAgICAgICBtX3BlbmRpbmdWaXNpYmxl
UmVjdEFkanVzdG1lbnQgPSB0cnVlOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKK3sKKyAgICBpZiAob3BhY2l0eSgpIDwgMC4w
MSAmJiAhbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5n
ZXMoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghbV9zaG91
bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3lu
Y0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZyAmJiAhbV9zaG91bGRTeW5jQW5p
bWF0aW9ucyAmJiAhbV9jYW52YXNOZWVkc0Rpc3BsYXkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkuaW50ZXJzZWN0cyh0
aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsKK30KKworc3RhdGljIGlubGluZSBib29s
IGlzSW50ZWdyYWwoZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
dmFsdWUpID09IHZhbHVlOworfQorCitGbG9hdFBvaW50IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKQoreworICAgIEZsb2F0UG9pbnQgb2Zm
c2V0OworICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3VyckxheWVyID0gdGhpczsgY3Vy
ckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpKQorICAgICAgICBvZmZzZXQg
Kz0gY3VyckxheWVyLT5wb3NpdGlvbigpOworCisgICAgcmV0dXJuIG9mZnNldDsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQaXhlbEFsaWdubWVudChGbG9hdFBv
aW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiBzaXplLCBGbG9hdFBvaW50M0QmIGFuY2hvclBvaW50
LCBGbG9hdFNpemUmIGFsaWdubWVudE9mZnNldCkKK3sKKyAgICBpZiAoaXNJbnRlZ3JhbChlZmZl
Y3RpdmVDb250ZW50c1NjYWxlKCkpKSB7CisgICAgICAgIHBvc2l0aW9uID0gbV9wb3NpdGlvbjsK
KyAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKKyAgICAgICAgYW5jaG9yUG9pbnQgPSBtX2FuY2hvclBv
aW50OworICAgICAgICBhbGlnbm1lbnRPZmZzZXQgPSBGbG9hdFNpemUoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEZsb2F0UG9pbnQgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSA9IGNv
bXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCk7CisKKyAgICBGbG9hdFJlY3QgYmFzZVJlbGF0
aXZlQm91bmRzKHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIG1fc2l6ZSk7CisgICAgRmxvYXRSZWN0
IHNjYWxlZEJvdW5kcyA9IGJhc2VSZWxhdGl2ZUJvdW5kczsKKworICAgIC8vIFNjYWxlIGJ5IHRo
ZSBlZmZlY3RpdmUgc2NhbGUgZmFjdG9yIHRvIGNvbXB1dGUgdGhlIHNjcmVlbi1yZWxhdGl2ZSBi
b3VuZHMuCisgICAgc2NhbGVkQm91bmRzLnNjYWxlKGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7
CisKKyAgICAvLyBSb3VuZCB0byBpbnRlZ2VyIGJvdW5kYXJpZXMuCisgICAgLy8gTk9URTogV2hl
biB1c2luZyBlbmNsb3NpbmdJbnRSZWN0IChhcyBtYWMpIGl0IHdpbGwgaGF2ZSBkaWZmZXJlbnQg
c2l6ZXMgZGVwZW5kaW5nIG9uIHBvc2l0aW9uLgorICAgIEZsb2F0UmVjdCBhbGlnbmVkQm91bmRz
ID0gcm91bmRlZEludFJlY3Qoc2NhbGVkQm91bmRzKTsKKworICAgIC8vIENvbnZlcnQgYmFjayB0
byBsYXllciBjb29yZGluYXRlcy4KKyAgICBhbGlnbmVkQm91bmRzLnNjYWxlKDEgLyBlZmZlY3Rp
dmVDb250ZW50c1NjYWxlKCkpOworCisgICAgLy8gQ29udmVydCBiYWNrIHRvIGxheWVyIGNvb3Jk
aW5hdGVzLgorICAgIGFsaWdubWVudE9mZnNldCA9IGJhc2VSZWxhdGl2ZUJvdW5kcy5sb2NhdGlv
bigpIC0gYWxpZ25lZEJvdW5kcy5sb2NhdGlvbigpOworCisgICAgcG9zaXRpb24gPSBtX3Bvc2l0
aW9uIC0gYWxpZ25tZW50T2Zmc2V0OworICAgIHNpemUgPSBhbGlnbmVkQm91bmRzLnNpemUoKTsK
KworICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNvbXB1dGUgYSBuZXcgYW5jaG9yIHBvaW50IHdoaWNo
IGNvbXBlbnNhdGVzIGZvciByb3VuZGluZy4KKyAgICBmbG9hdCBhbmNob3JQb2ludFggPSBtX2Fu
Y2hvclBvaW50LngoKTsKKyAgICBmbG9hdCBhbmNob3JQb2ludFkgPSBtX2FuY2hvclBvaW50Lnko
KTsKKworICAgIGlmIChhbGlnbmVkQm91bmRzLndpZHRoKCkpCisgICAgICAgIGFuY2hvclBvaW50
WCA9IChiYXNlUmVsYXRpdmVCb3VuZHMud2lkdGgoKSAqIGFuY2hvclBvaW50WCArIGFsaWdubWVu
dE9mZnNldC53aWR0aCgpKSAvIGFsaWduZWRCb3VuZHMud2lkdGgoKTsKKworICAgIGlmIChhbGln
bmVkQm91bmRzLmhlaWdodCgpKQorICAgICAgICBhbmNob3JQb2ludFkgPSAoYmFzZVJlbGF0aXZl
Qm91bmRzLmhlaWdodCgpICogYW5jaG9yUG9pbnRZICsgYWxpZ25tZW50T2Zmc2V0LmhlaWdodCgp
KSAvIGFsaWduZWRCb3VuZHMuaGVpZ2h0KCk7CisKKyAgICBhbmNob3JQb2ludCA9IEZsb2F0UG9p
bnQzRChhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WSwgbV9hbmNob3JQb2ludC56KCkgKiBlZmZl
Y3RpdmVDb250ZW50c1NjYWxlKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQoreworICAgIC8vIFdoZW4gd2UgaGF2
ZSBhIHRyYW5zZm9ybSBhbmltYXRpb24sIHdlIG5lZWQgdG8gdXBkYXRlIHZpc2libGUgcmVjdCBl
dmVyeSBmcmFtZSB0byBhZGp1c3QgdGhlIHZpc2libGUgcmVjdCBvZiBhIGJhY2tpbmcgc3RvcmUu
CisgICAgYm9vbCBoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24gPSBzZWxmT3JBbmNlc3Rvckhh
c0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpOworICAgIGlmICghbV9zaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCAmJiAhaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY3VycmVudFRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOworICAgIGlmIChoYXNB
Y3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCisgICAgICAgIGNsaWVudCgpLT5nZXRDdXJyZW50VHJh
bnNmb3JtKHRoaXMsIGN1cnJlbnRUcmFuc2Zvcm0pOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0
TG9jYWxUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7CisKKyAgICBtX2xheWVyVHJhbnNmb3Jt
LnNldEFuY2hvclBvaW50KG1fYWRqdXN0ZWRBbmNob3JQb2ludCk7CisgICAgbV9sYXllclRyYW5z
Zm9ybS5zZXRQb3NpdGlvbihtX2FkanVzdGVkUG9zaXRpb24pOworICAgIG1fbGF5ZXJUcmFuc2Zv
cm0uc2V0U2l6ZShtX2FkanVzdGVkU2l6ZSk7CisKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldEZs
YXR0ZW5pbmcoIXByZXNlcnZlczNEKCkpOworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRy
ZW5UcmFuc2Zvcm0oY2hpbGRyZW5UcmFuc2Zvcm0oKSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5j
b21iaW5lVHJhbnNmb3JtcyhwYXJlbnQoKSA/IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBh
cmVudCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZvckNoaWxkcmVuKCkgOiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpKTsKKworICAgIG1fY2FjaGVkSW52ZXJzZVRyYW5zZm9ybSA9IG1fbGF5
ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCk7CisKKyAgICAvLyBUaGUgY29tYmluZWQg
dHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0Lgor
ICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVWaXNpYmxlKCkgJiYgIW1fc2l6ZS5p
c0VtcHR5KCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNl
c3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKG1fYW5p
bWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghcGFyZW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcihwYXJlbnQoKSktPnNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9u
KCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNlc3Rvckhh
dmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKK3sKKyAgICBpZiAobV9hbmltYXRpb25zLmhhc0FjdGl2
ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCku
aXNBZmZpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIXBhcmVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIocGFyZW50KCkpLT5zZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7
Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleWZyYW1lc05hbWUsIGRvdWJsZSBk
ZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0KQoreworICAgIEFTU0VSVCgha2V5ZnJhbWVzTmFtZS5p
c0VtcHR5KCkpOworCisgICAgaWYgKCFhbmltIHx8IGFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlv
bigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyIHx8ICh2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBB
bmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9
IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ym9vbCBsaXN0c01hdGNoID0gZmFsc2U7CisgICAgYm9vbCBpZ25vcmVkSGFzQmlnUm90YXRpb247
CisKKyAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSkKKyAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0
aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlvbikgPj0gMDsKKworICAgIG1fbGFz
dEFuaW1hdGlvblN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGRlbGF5QXNOZWdhdGl2
ZVRpbWVPZmZzZXQ7CisgICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9u
KGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgbV9sYXN0QW5pbWF0aW9u
U3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7CisgICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3Rh
cnRPbmVTaG90KDApOworICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhdXNlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUpCit7CisgICAgbV9hbmltYXRp
b25zLnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWUpOworICAgIGRpZENoYW5nZUFuaW1hdGlvbnMo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCit7CisgICAgbV9hbmltYXRpb25zLnJlbW92ZShh
bmltYXRpb25OYW1lKTsKKyAgICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKK3sK
KyAgICBtX2FuaW1hdGlvbnMuc3VzcGVuZCh0aW1lKTsKKyAgICBkaWRDaGFuZ2VBbmltYXRpb25z
KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXN1bWVBbmltYXRpb25z
KCkKK3sKKyAgICBtX2FuaW1hdGlvbnMucmVzdW1lKCk7CisgICAgZGlkQ2hhbmdlQW5pbWF0aW9u
cygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRl
ZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiopCit7CisgICAgY2xp
ZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgbV9sYXN0QW5pbWF0aW9uU3RhcnRU
aW1lKTsKK30KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmZhMzkxNDk1MmUyZGQ0NWYyZjUzN2MyYmMxNTkw
ZGUyNzlmMTY2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApAQCAt
MCwwICsxLDI1MiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKwor
I2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAorI2RlZmluZSBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXJfaAorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKKyNp
bmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGls
ZS5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllclRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5o
IgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisjaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyNpbmNsdWRlICJH
cmFwaGljc1N1cmZhY2VUb2tlbi5oIgorI2VuZGlmCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI7CitjbGFzcyBHcmFwaGljc0xh
eWVyQW5pbWF0aW9uczsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpIGNvbnN0
ID0gMDsKKworICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCkgPSAwOworCisgICAg
dmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFj
a2luZ0lmTmVlZGVkKEltYWdlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJTdGF0
ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JikgPSAwOworI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSA9IDA7CisjZW5kaWYKKyNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhD
b29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSA9IDA7CisjZW5kaWYKKworICAgIHZp
cnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hM
YXllcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5
bmNGaXhlZExheWVycygpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYsIENvb3JkaW5hdGVkU3VyZmFj
ZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYpID0gMDsKK307CisKK2NsYXNz
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCisgICAgLCBw
dWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZElt
YWdlQmFja2luZzo6SG9zdAorICAgICwgcHVibGljIENvb3JkaW5hdGVkVGlsZUNsaWVudCB7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5
ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoKTsKKwor
ICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgorICAgIHZpcnR1
YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBH
cmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQmVsb3co
R3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFByZXNl
cnZlczNEKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRz
KGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29sKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKEltYWdlKikgY29u
c3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZv
cm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrTGF5ZXIoR3JhcGhp
Y3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRSZXBsaWNhdGVkQnlMYXll
cihHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlz
cGxheSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRz
TmVlZHNEaXNwbGF5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRp
bmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpIE9WRVJSSURFOworI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJikgT1ZFUlJJREU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1h
dGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCkgT1ZFUlJJREU7CisKKyAgICBGbG9hdFBv
aW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCk7CisgICAgdm9pZCBjb21wdXRlUGl4
ZWxBbGlnbm1lbnQoRmxvYXRQb2ludCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYsIEZsb2F0UG9pbnQz
RCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KTsKKworICAgIHZvaWQg
c2V0Q29udGVudHNTY2FsZShmbG9hdCk7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RU
cmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIHZvaWQgc2V0Um9vdExh
eWVyKGJvb2wpOworCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIGlkKCkgY29uc3Q7CisKKyAgICB2
b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQpIHsgbV9maXhlZFRvVmlld3BvcnQg
PSBpc0ZpeGVkOyB9CisKKyAgICBJbnRSZWN0IGNvdmVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFpbkJhY2tpbmdTdG9yZSA/IG1fbWFpbkJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX21h
aW5CYWNraW5nU3RvcmUtPmNvdmVyUmVjdCgpKSA6IEludFJlY3QoKTsgfQorCisgICAgLy8gVGls
ZWRCYWNraW5nU3RvcmVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQ
YWludEJlZ2luKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3Jl
UGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgcGFpbnRlZEFyZWEpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdT
dG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEludFJl
Y3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVS
UklERTsKKworICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUodWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVu
dFVwZGF0ZShjb25zdCBJbnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgT1ZF
UlJJREU7CisKKyAgICB2b2lkIHNldENvb3JkaW5hdG9yKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCopOworCisgICAgdm9pZCBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwor
ICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgYm9vbCBoYXNQZW5kaW5nVmlzaWJs
ZUNoYW5nZXMoKTsKKworcHJpdmF0ZToKKyAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0
IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9CisKKyAgICB2b2lkIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKKyAgICB2b2lkIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIGRpZENo
YW5nZUdlb21ldHJ5KCk7CisgICAgdm9pZCBkaWRDaGFuZ2VDaGlsZHJlbigpOworI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKKyAgICB2b2lkIGRpZENoYW5nZUZpbHRlcnMoKTsKKyNlbmRpZgorICAg
IHZvaWQgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7CisKKyAgICB2b2lkIHN5bmNMYXllclN0YXRl
KCk7CisgICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOworICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc3luY0ZpbHRlcnMoKTsKKyNlbmRp
ZgorICAgIHZvaWQgc3luY0ltYWdlQmFja2luZygpOworICAgIHZvaWQgc3luY0NhbnZhcygpOwor
ICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKKyAgICB2b2lkIHVwZGF0
ZUNvbnRlbnRCdWZmZXJzKCk7CisKKyAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOworICAg
IHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CisKKyAgICAvLyBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6SG9zdAorICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNpYmxl
KCkgT1ZFUlJJREU7CisKKyAgICB2b2lkIGRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpOworICAgIHZv
aWQgY3JlYXRlQ2FudmFzSWZOZWVkZWQoKTsKKworICAgIGJvb2wgc2hvdWxkSGF2ZUJhY2tpbmdT
dG9yZSgpIGNvbnN0OworICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1B
bmltYXRpb24oKSBjb25zdDsKKyAgICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRy
YW5zZm9ybXMoKTsKKyAgICB2b2lkIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKKworICAgIHZvaWQg
c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50
c1NjYWxlKCk7CisKKyAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2lk
OworICAgIENvb3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIEdyYXBoaWNzTGF5
ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2NhY2hlZEludmVyc2VUcmFuc2Zvcm07CisgICAgRmxvYXRTaXplIG1fcGl4ZWxBbGlnbm1lbnRP
ZmZzZXQ7CisgICAgRmxvYXRTaXplIG1fYWRqdXN0ZWRTaXplOworICAgIEZsb2F0UG9pbnQgbV9h
ZGp1c3RlZFBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQzRCBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBtX2lzUHVyZ2luZzsKKyNlbmRpZgorICAgIGJv
b2wgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdDogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0xh
eWVyU3RhdGU6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKKyAgICBib29s
IG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tp
bmc6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNBbmltYXRpb25zOiAxOworICAgIGJvb2wgbV9m
aXhlZFRvVmlld3BvcnQgOiAxOworICAgIGJvb2wgbV9jYW52YXNOZWVkc0Rpc3BsYXkgOiAxOwor
ICAgIGJvb2wgbV9jYW52YXNOZWVkc0NyZWF0ZSA6IDE7CisgICAgYm9vbCBtX2NhbnZhc05lZWRz
RGVzdHJveSA6IDE7CisgICAgYm9vbCBtX3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCA6
IDE7CisgICAgYm9vbCBtX3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQgOiAxOworCisgICAg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBtX2Nvb3JkaW5hdG9yOworICAgIE93blB0
cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3JlOworICAgIE93blB0cjxUaWxl
ZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsKKyAgICBmbG9hdCBtX2NvbnRl
bnRzU2NhbGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdlOworICAgIE5h
dGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOworICAgIFJlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gbV9jb29yZGluYXRlZEltYWdlQmFja2luZzsKKworICAgIFBs
YXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKKyAgICBJbnRTaXplIG1fY2FudmFzU2l6ZTsKKyAgICBHcmFwaGljc1N1cmZhY2VUb2tl
biBtX2NhbnZhc1Rva2VuOworI2VuZGlmCisgICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyBtX2FuaW1hdGlvbnM7CisgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZTsKK307
CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllciopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4ZjBhNTJiOWY2N2I0ZWE1NjI1ZDE2NWQ2M2FmM2ExNTIy
MmQxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCkBAIC0wLDAg
KzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFj
a2luZy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSogaW1hZ2UpCit7CisgICAgLy8g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcga2VlcHMgYSBSZWZQdHI8SW1hZ2U+IG1lbWJlciwgc28g
dGhlIHNhbWUgSW1hZ2UgcG9pbnRlciBjYW4gbm90IHJlZmVyIHR3byBkaWZmZXJlbnQgaW5zdGFu
Y2VzIHVudGlsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHJlbGVhc2VzIHRoZSBtZW1iZXIuCisg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4oaW1h
Z2UpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3JkaW5hdG9yKiBjbGllbnQsIENvb3JkaW5hdGVkU3Vy
ZmFjZTo6RmFjdG9yeSBjb29yZGluYXRlZFN1cmZhY2VGYWN0b3J5LCBQYXNzUmVmUHRyPEltYWdl
PiBpbWFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nKGNsaWVudCwgY29vcmRpbmF0ZWRTdXJmYWNlRmFjdG9yeSwgaW1hZ2UpKTsKK30KKworQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9y
KiBjbGllbnQsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSBjb29yZGluYXRlZFN1cmZhY2VG
YWN0b3J5LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKKyAgICA6IG1fY29vcmRpbmF0b3IoY2xp
ZW50KQorICAgICwgbV9jb29yZGluYXRlZFN1cmZhY2VGYWN0b3J5KGNvb3JkaW5hdGVkU3VyZmFj
ZUZhY3RvcnkpCisgICAgLCBtX2ltYWdlKGltYWdlKQorICAgICwgbV9pZChnZXRDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKG1faW1hZ2UuZ2V0KCkpKQorICAgICwgbV9jbGVhckNvbnRlbnRzVGlt
ZXIodGhpcywgJkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNvbnRlbnRzVGltZXJGaXJl
ZCkKKyAgICAsIG1faXNEaXJ0eShmYWxzZSkKKyAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQorewor
ICAgIC8vIEZJWE1FOiBXZSB3b3VsZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVj
dGx5IGludG8gYSBHcmFwaGljc1N1cmZhY2UuCisgICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8x
MDE0MjYKKworICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZyhpZCgpKTsKK30K
KworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6On5Db29yZGluYXRlZEltYWdlQmFja2luZygpCit7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmFkZEhvc3QoSG9zdCogaG9zdCkK
K3sKKyAgICBBU1NFUlQoIW1faG9zdHMuY29udGFpbnMoaG9zdCkpOworICAgIG1faG9zdHMuYXBw
ZW5kKGhvc3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0
KEhvc3QqIGhvc3QpCit7CisgICAgc2l6ZV90IHBvc2l0aW9uID0gbV9ob3N0cy5maW5kKGhvc3Qp
OworICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7CisgICAgbV9ob3N0cy5yZW1vdmUo
cG9zaXRpb24pOworCisgICAgaWYgKG1faG9zdHMuaXNFbXB0eSgpKQorICAgICAgICBtX2Nvb3Jk
aW5hdG9yLT5yZW1vdmVJbWFnZUJhY2tpbmcoaWQoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc6Om1hcmtEaXJ0eSgpCit7CisgICAgbV9pc0RpcnR5ID0gdHJ1ZTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlKCkKK3sKKyAgICByZWxlYXNlU3Vy
ZmFjZUlmTmVlZGVkKCk7CisKKyAgICBib29sIGNoYW5nZWRUb1Zpc2libGU7CisgICAgdXBkYXRl
VmlzaWJpbGl0eUlmTmVlZGVkKGNoYW5nZWRUb1Zpc2libGUpOworICAgIGlmICghbV9pc1Zpc2li
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY2hhbmdlZFRvVmlzaWJsZSkgeworICAg
ICAgICBpZiAoIW1faXNEaXJ0eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
bV9uYXRpdmVJbWFnZVB0ciA9PSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgp
KSB7CisgICAgICAgICAgICBtX2lzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIG1fc3VyZmFjZSA9IG1fY29vcmRpbmF0ZWRTdXJmYWNl
RmFjdG9yeShtX2ltYWdlLT5zaXplKCksIG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkg
PyBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEgOiBDb29yZGluYXRlZFN1cmZhY2U6
Ok5vRmxhZ3MpOworICAgIGlmICghbV9zdXJmYWNlKSB7CisgICAgICAgIG1faXNEaXJ0eSA9IGZh
bHNlOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW50UmVjdCByZWN0KEludFBvaW50
Ojp6ZXJvKCksIG1faW1hZ2UtPnNpemUoKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
Y29udGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOworICAgIGNv
bnRleHQtPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZWN0
LCByZWN0KTsKKworICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOworCisgICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywg
dHJ5IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KKyAgICBib29sIHN1Y2Nlc3MgPSBtX2Nvb3Jk
aW5hdG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKKyAgICBtX2lzRGly
dHkgPSAhc3VjY2VzczsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFz
ZVN1cmZhY2VJZk5lZWRlZCgpCit7CisgICAgLy8gV2UgbXVzdCBrZWVwIG1fc3VyZmFjZSB1bnRp
bCBVSSBQcm9jZXNzIHJlYWRzIG1fc3VyZmFjZS4KKyAgICAvLyBJZiBtX3N1cmZhY2UgZXhpc3Rz
LCBpdCB3YXMgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgdXBkYXRlLgorICAgIG1fc3VyZmFjZS5j
bGVhcigpOworfQorCitzdGF0aWMgY29uc3QgZG91YmxlIGNsZWFyQ29udGVudHNUaW1lckludGVy
dmFsID0gMzsKKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0
eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpCit7CisgICAgYm9vbCBwcmV2aW91c0lz
VmlzaWJsZSA9IG1faXNWaXNpYmxlOworCisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1faG9zdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1faG9zdHNbaV0tPmltYWdlQmFja2luZ1Zpc2libGUoKSkgeworICAgICAgICAgICAgbV9pc1Zp
c2libGUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGNoYW5nZWRUb0ludmlzaWJsZSA9IHByZXZpb3VzSXNWaXNpYmxlICYmICFtX2lzVmlz
aWJsZTsKKyAgICBpZiAoY2hhbmdlZFRvSW52aXNpYmxlKSB7CisgICAgICAgIEFTU0VSVCghbV9j
bGVhckNvbnRlbnRzVGltZXIuaXNBY3RpdmUoKSk7CisgICAgICAgIG1fY2xlYXJDb250ZW50c1Rp
bWVyLnN0YXJ0T25lU2hvdChjbGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCk7CisgICAgfQorCisg
ICAgY2hhbmdlZFRvVmlzaWJsZSA9ICFwcmV2aW91c0lzVmlzaWJsZSAmJiBtX2lzVmlzaWJsZTsK
KworICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX2NsZWFyQ29udGVudHNUaW1lci5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIG1fY2xlYXJDb250ZW50c1RpbWVyLnN0b3AoKTsKKyAgICAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byB1cGRhdGUgdGhlIHRleHR1cmUgaWYgd2UgZGlkbid0IHJlbW92ZSB0aGUg
dGV4dHVyZS4KKyAgICAgICAgY2hhbmdlZFRvVmlzaWJsZSA9IGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGlt
ZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKK3sKKyAgICBtX2Nvb3JkaW5hdG9yLT5jbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKGlkKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA4ZDRiYzg3NDdiMDdlMmRhZGQ2NWExZTIyMDM0ZWZiMDg1
MTk4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCkBAIC0wLDAgKzEs
OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAorCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRl
ICJUaW1lci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IHsKK3B1
YmxpYzoKKyAgICBjbGFzcyBDb29yZGluYXRvciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0g
MDsKKyAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5n
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKKyAgICB9OworCisgICAgY2xhc3MgSG9z
dCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJs
ZSgpID0gMDsKKyAgICB9OworCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRvciosIENvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9y
eSwgUGFzc1JlZlB0cjxJbWFnZT4pOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nKCk7CisKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKEltYWdlKik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgYWRkSG9zdChIb3N0Kik7
CisgICAgdm9pZCByZW1vdmVIb3N0KEhvc3QqKTsKKworICAgIC8vIFdoZW4gYSBuZXcgaW1hZ2Ug
aXMgdXBkYXRlZCBvciBhbiBhbmltYXRlZCBnaWYgaXMgcHJvZ3Jlc3NlZCwgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyIGNhbGxzIG1hcmtEaXJ0eSgpLgorICAgIHZvaWQgbWFya0RpcnR5KCk7CisK
KyAgICAvLyBDcmVhdGUsIHJlbW92ZSBvciB1cGRhdGUgaXRzIGJhY2tpbmcuCisgICAgdm9pZCB1
cGRhdGUoKTsKKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGlu
YXRvciosIENvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSwgUGFzc1JlZlB0cjxJbWFnZT4pOwor
CisgICAgdm9pZCByZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCk7CisgICAgdm9pZCB1cGRhdGVWaXNp
YmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSk7CisgICAgdm9pZCBjbGVhckNv
bnRlbnRzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4qKTsKKworICAg
IENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5hdG9yOworICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6RmFj
dG9yeSBtX2Nvb3JkaW5hdGVkU3VyZmFjZUZhY3Rvcnk7CisgICAgUmVmUHRyPEltYWdlPiBtX2lt
YWdlOworICAgIE5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2VQdHI7CisgICAgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCBtX2lkOworICAgIFZlY3RvcjxIb3N0Kj4gbV9ob3N0czsKKworICAg
IFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKworICAgIFRpbWVyPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiBtX2NsZWFyQ29udGVudHNUaW1lcjsKKworICAgIGJvb2wgbV9p
c0RpcnR5OworICAgIGJvb2wgbV9pc1Zpc2libGU7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBD
b29yZGluYXRlZEltYWdlQmFja2luZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZExheWVySW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3NzBkN2Y1NDZjNDE4MDcyZjQ4ZjFkMDhh
YjY0NTE2NTUyZjEwYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaApAQCAt
MCwwICsxLDgwIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBDb29yZGluYXRlZExheWVySW5mb19oCisjZGVmaW5lIENvb3JkaW5hdGVkTGF5ZXJJbmZv
X2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiB1aW50MzJfdCBDb29yZGluYXRlZExheWVySUQ7Citl
bnVtIHsgSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCA9IDAgfTsKKwordHlwZWRlZiB1aW50NjRf
dCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOworZW51bSB7IEludmFsaWRDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEID0gMCB9OworCisvLyBOT1RFOiBDb29yZGluYXRlZExheWVySW5mbyBzaG91
bGQgb25seSB1c2UgUE9EIHR5cGVzLCBhcyB0byBtYWtlIHNlcmlhbGl6YXRpb24gZmFzdGVyLgor
c3RydWN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvIHsKKyAgICBDb29yZGluYXRlZExheWVySW5mbygp
CisgICAgICAgIDogcmVwbGljYShJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKQorICAgICAgICAs
IG1hc2soSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKKyAgICAgICAgLCBpbWFnZUlEKEludmFs
aWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKQorICAgICAgICAsIG9wYWNpdHkoMCkKKyAgICAg
ICAgLCBmbGFncygwKSB7IH0KKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCByZXBsaWNhOworICAg
IENvb3JkaW5hdGVkTGF5ZXJJRCBtYXNrOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRDsKKworICAgIEZsb2F0UG9pbnQgcG9zOworICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQ
b2ludDsKKyAgICBGbG9hdFNpemUgc2l6ZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAg
SW50UmVjdCBjb250ZW50c1JlY3Q7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBDb2xvciBzb2xp
ZENvbG9yOworCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgYm9v
bCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7
CisgICAgICAgICAgICBib29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBib29s
IGJhY2tmYWNlVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAx
OworICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7CisgICAgICAgICAgICBib29sIGlz
Um9vdExheWVyOiAxOworICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOworICAg
ICAgICB9OworICAgICAgICB1bnNpZ25lZCBmbGFnczsKKyAgICB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
ZW5kaWYgLy8gQ29vcmRpbmF0ZWRMYXllckluZm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1MDhhZDY0Mjg3ZjA3MjE1NmE0NjU5
YzIxZmU1ZmQ2YzZhNmE3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmgKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkg
MTAwLCBJbmMuCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRT
dXJmYWNlX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRTdXJmYWNlX2gKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBCaXRtYXBU
ZXh0dXJlOworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBDb29yZGluYXRlZFN1cmZh
Y2UgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRTdXJmYWNlPiB7Citw
dWJsaWM6CisgICAgZW51bSBGbGFnIHsKKyAgICAgICAgTm9GbGFncyA9IDAsCisgICAgICAgIFN1
cHBvcnRzQWxwaGEgPSAxIDw8IDAsCisgICAgfTsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIEZsYWdz
OworCisgICAgdHlwZWRlZiBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gKCpGYWN0b3J5
KShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOworCisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRTdXJm
YWNlKCkgeyB9CisKKyAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmbGFn
cygpICYgU3VwcG9ydHNBbHBoYTsgfQorICAgIHZpcnR1YWwgSW50U2l6ZSBzaXplKCkgY29uc3Qg
PSAwOworCisgICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGNhbiBiZSB1c2Vk
IHRvIHBhaW50IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAgdmlydHVhbCBQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IEludFJlY3QmKSA9
IDA7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmlydHVhbCB2b2lkIGNvcHlUb1Rl
eHR1cmUoUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBj
b25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KSA9IDA7CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgRmxhZ3MgZmxhZ3MoKSBjb25zdCA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYg
Ly8gQ29vcmRpbmF0ZWRTdXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkVGlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY5ZDM0ZTYwNWIwZTJiMjUyNjhiYWE2NmM0ODA1ZGJl
ZmEyMDkzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuY3BwCkBAIC0wLDAgKzEsMTQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1aW50
MzJfdCBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQgPSAwOworCitDb29yZGluYXRlZFRpbGU6OkNv
b3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5n
U3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0
ZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGls
ZWRCYWNraW5nU3RvcmUpCisgICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCisgICAg
LCBtX3JlY3QodGlsZWRCYWNraW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29v
cmRpbmF0ZSkpCisgICAgLCBtX0lEKEludmFsaWRDb29yZGluYXRlZFRpbGVJRCkKKyAgICAsIG1f
ZGlydHlSZWN0KG1fcmVjdCkKK3sKK30KKworQ29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRU
aWxlKCkKK3sKKyAgICBpZiAobV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCisgICAg
ICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlKG1fSUQpOworfQorCitib29sIENvb3JkaW5hdGVkVGls
ZTo6aXNEaXJ0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGly
dHlSZWN0LCBtX3JlY3QpOworICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9kaXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Cit9CisK
K1ZlY3RvcjxJbnRSZWN0PiBDb29yZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQorewor
ICAgIGlmICghaXNEaXJ0eSgpKQorICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CisK
KyAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOworICAgIE93blB0cjxHcmFwaGljc0Nv
bnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9k
aXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9m
ZnNldCk7CisgICAgaWYgKCFncmFwaGljc0NvbnRleHQpCisgICAgICAgIHJldHVybiBWZWN0b3I8
SW50UmVjdD4oKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3Qu
eCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5n
U3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVu
dCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxl
ZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2RpcnR5UmVjdCkpOworCisgICAgdXBkYXRl
SW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0
Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKKyAgICB1cGRhdGVJbmZvLnNjYWxlRmFj
dG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOworICAgIGdyYXBoaWNz
Q29udGV4dC5yZWxlYXNlKCk7CisKKyAgICBzdGF0aWMgdWludDMyX3QgaWQgPSAxOworICAgIGlm
IChtX0lEID09IEludmFsaWRDb29yZGluYXRlZFRpbGVJRCkgeworICAgICAgICBtX0lEID0gaWQr
KzsKKyAgICAgICAgLy8gV2UgbWF5IGdldCBhbiBpbnZhbGlkIElEIGR1ZSB0byB3cmFwLWFyb3Vu
ZCBvbiBvdmVyZmxvdy4KKyAgICAgICAgaWYgKG1fSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkVGls
ZUlEKQorICAgICAgICAgICAgbV9JRCA9IGlkKys7CisgICAgICAgIG1fY2xpZW50LT5jcmVhdGVU
aWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xp
ZW50LT51cGRhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7CisKKyAgICBWZWN0b3I8
SW50UmVjdD4gdXBkYXRlZFJlY3RzOworICAgIHVwZGF0ZWRSZWN0cy5hcHBlbmQobV9kaXJ0eVJl
Y3QpOworICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOworICAgIHJldHVybiB1cGRhdGVkUmVj
dHM7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQor
eworICAgIC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4KK30KKworYm9v
bCBDb29yZGluYXRlZFRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQ7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRU
aWxlOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDb29yZGluYXRlZFRpbGU6OnJlc2l6ZShjb25z
dCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIG1fcmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0
aW9uKCksIG5ld1NpemUpOworICAgIG1fZGlydHlSZWN0ID0gbV9yZWN0OworfQorCitDb29yZGlu
YXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNs
aWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQorCitQYXNzUmVmUHRy
PFRpbGU+IENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoVGlsZWRCYWNraW5nU3Rv
cmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRp
bmF0ZSkKK3sKKyAgICByZXR1cm4gQ29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRp
bGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRU
aWxlQmFja2VuZDo6cGFpbnRDaGVja2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iZTk5YmZkYWZlZjQ5MWRhZDNhMzZmZmM1YjIzZjQ0NDdkYmVl
NDVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRUaWxlX2gKKyNkZWZp
bmUgQ29vcmRpbmF0ZWRUaWxlX2gKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlRpbGUuaCIKKyNpbmNsdWRlICJUaWxlZEJh
Y2tpbmdTdG9yZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVk
VGlsZUNsaWVudDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87
CitjbGFzcyBUaWxlZEJhY2tpbmdTdG9yZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRUaWxlIDogcHVi
bGljIFRpbGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0ZShD
b29yZGluYXRlZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFj
a2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkgeyByZXR1cm4gYWRv
cHRSZWYobmV3IENvb3JkaW5hdGVkVGlsZShjbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxl
Q29vcmRpbmF0ZSkpOyB9CisgICAgfkNvb3JkaW5hdGVkVGlsZSgpOworCisgICAgYm9vbCBpc0Rp
cnR5KCkgY29uc3Q7CisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmKTsKKyAgICBW
ZWN0b3I8SW50UmVjdD4gdXBkYXRlQmFja0J1ZmZlcigpOworICAgIHZvaWQgc3dhcEJhY2tCdWZm
ZXJUb0Zyb250KCk7CisgICAgYm9vbCBpc1JlYWR5VG9QYWludCgpIGNvbnN0OworICAgIHZvaWQg
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOworCisgICAgY29uc3QgQ29v
cmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQorICAg
IGNvbnN0IEludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lk
IHJlc2l6ZShjb25zdCBJbnRTaXplJik7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRUaWxl
KENvb3JkaW5hdGVkVGlsZUNsaWVudCosIFRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgQ29vcmRp
bmF0ZSYpOworCisgICAgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBUaWxl
ZEJhY2tpbmdTdG9yZSogbV90aWxlZEJhY2tpbmdTdG9yZTsKKyAgICBDb29yZGluYXRlIG1fY29v
cmRpbmF0ZTsKKyAgICBJbnRSZWN0IG1fcmVjdDsKKworICAgIHVpbnQzMl90IG1fSUQ7CisgICAg
SW50UmVjdCBtX2RpcnR5UmVjdDsKKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9sb2NhbEJ1
ZmZlcjsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+Q29vcmRpbmF0ZWRUaWxlQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0
IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IElu
dFNpemUmLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSA9IDA7Cit9OworCitjbGFzcyBD
b29yZGluYXRlZFRpbGVCYWNrZW5kIDogcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZCB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5k
PiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDb29yZGluYXRlZFRpbGVCYWNrZW5kKGNsaWVudCkpOyB9CisgICAgUGFzc1JlZlB0cjxU
aWxlPiBjcmVhdGVUaWxlKFRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgVGlsZTo6Q29vcmRpbmF0
ZSYpOworICAgIHZvaWQgcGFpbnRDaGVja2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDb29yZGluYXRlZFRpbGVC
YWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCopOworICAgIENvb3JkaW5hdGVkVGlsZUNsaWVu
dCogbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkVGlsZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0xheWVyVHJlZVJlbmRlcmVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iYjQ0ZWVjNjUyMmVjMmEwOTlkNzBjZmQyNWRhNzhhMTZjMjg4NTRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0xheWVyVHJlZVJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDcyNSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAi
TGF5ZXJUcmVlUmVuZGVyZXIuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXll
ci5oIgorI2luY2x1ZGUgPE9wZW5HTFNoaW1zLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
I2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mby5oIgorI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRpc3BhdGNoT25NYWluVGhyZWFkKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGlmIChpc01haW5UaHJlYWQo
KSkKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoZnVuY3Rpb24pOworfQorCitzdGF0aWMgRmxvYXRQb2ludCBib3VuZGVkU2Nyb2xsUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdmlz
aWJsZUNvbnRlbnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplKQoreworICAgIGZs
b2F0IHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLngoKSwgMC4wZik7
CisgICAgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25YLCBjb250ZW50
U2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRoKCkpOworCisgICAgZmxvYXQg
c2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueSgpLCAwLjBmKTsKKyAg
ICBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblksIGNvbnRlbnRTaXpl
LmhlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gRmxv
YXRQb2ludChzY3JvbGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9uWSk7Cit9CisKK3N0YXRpYyBi
b29sIGxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKiBsYXllcikKK3sK
KyAgICByZXR1cm4gbGF5ZXItPmRyYXdzQ29udGVudCgpICYmIGxheWVyLT5jb250ZW50c0FyZVZp
c2libGUoKSAmJiAhbGF5ZXItPnNpemUoKS5pc0VtcHR5KCk7Cit9CisKK0xheWVyVHJlZVJlbmRl
cmVyOjpMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVSZW5kZXJlckNsaWVudCogY2xpZW50KQor
ICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKKyAgICAsIG1f
cm9vdExheWVySUQoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKKyAgICAsIG1fYW5pbWF0aW9u
c0xvY2tlZChmYWxzZSkKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAg
LCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKGZhbHNlKQorI2VuZGlmCisgICAgLCBtX2JhY2tn
cm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX3NldERyYXdzQmFja2dyb3VuZChmYWxz
ZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCitMYXllclRyZWVSZW5kZXJl
cjo6fkxheWVyVHJlZVJlbmRlcmVyKCkKK3sKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCwgVGV4dHVyZU1hcHBl
cjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKSB7
CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJl
TWFwcGVyOjpPcGVuR0xNb2RlKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdM
Kj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nKHRydWUpOworICAgIH0KKworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJh
dGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKKyAgICBzeW5jUmVtb3Rl
Q29udGVudCgpOworCisgICAgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOworICAgIEdy
YXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKKyAgICBpZiAoIWN1
cnJlbnRSb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJyZW50Um9vdExheWVyKTsKKworICAg
IGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgaWYgKCFtX2FuaW1hdGlvbnNMb2NrZWQp
CisgICAgICAgIGxheWVyLT5hcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseSgpOworICAgIG1fdGV4
dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZsYWdzKTsKKyAgICBtX3RleHR1cmVNYXBw
ZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjbGlwUmVjdCk7CisKKyAgICBp
ZiAobV9zZXREcmF3c0JhY2tncm91bmQpIHsKKyAgICAgICAgUkdCQTMyIHJnYmEgPSBtYWtlUkdC
QTMyRnJvbUZsb2F0cyhtX2JhY2tncm91bmRDb2xvci5yZWQoKSwKKyAgICAgICAgICAgIG1fYmFj
a2dyb3VuZENvbG9yLmdyZWVuKCksIG1fYmFja2dyb3VuZENvbG9yLmJsdWUoKSwKKyAgICAgICAg
ICAgIG1fYmFja2dyb3VuZENvbG9yLmFscGhhKCkgKiBvcGFjaXR5KTsKKyAgICAgICAgbV90ZXh0
dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgQ29sb3IocmdiYSkpOworICAgIH0KKworICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFj
aXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRy
aXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAg
ICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7CisgICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
KyAgICB9CisKKyAgICBsYXllci0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZENs
aXAoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisKKyAgICBpZiAobGF5
ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCisgICAgICAgIGRp
c3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9y
dCwgdGhpcykpOworCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGlm
IChtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKSB7CisgICAgICAgIG1fYW5pbWF0aW9uRnJhbWVS
ZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OmFuaW1hdGlvbkZyYW1lUmVhZHksIHRoaXMpKTsKKyAgICB9CisjZW5k
aWYKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKK3ZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YW5pbWF0aW9u
RnJhbWVSZWFkeSgpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoKQoreworICAgIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQgPSB0cnVlOworfQor
I2VuZGlmCisKKyNpZiBQTEFURk9STShRVCkKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50
VG9HcmFwaGljc0NvbnRleHQoUVBhaW50ZXIqIHBhaW50ZXIpCisjZWxpZiBVU0UoQ0FJUk8pCit2
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpY3NDb250ZXh0KGNhaXJvX3QqIHBh
aW50ZXIpCisjZW5kaWYKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90
ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7CisgICAgQVNTRVJUKG1fdGV4
dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJl
TW9kZSk7CisgICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIq
IGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOworCisgICAgaWYgKCFs
YXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dChwYWludGVyKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgm
Z3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsK
KworICAgIGlmIChtX3NldERyYXdzQmFja2dyb3VuZCkKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVy
LT5kcmF3U29saWRDb2xvcihncmFwaGljc0NvbnRleHQuY2xpcEJvdW5kcygpLCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBtX2JhY2tncm91bmRDb2xvcik7CisKKyAgICBsYXllci0+cGFpbnQoKTsK
KyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CisgICAgbV90ZXh0dXJlTWFwcGVy
LT5zZXRHcmFwaGljc0NvbnRleHQoMCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX2Nv
bnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV92
aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
dXBkYXRlVmlld3BvcnQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpCit7Cisg
ICAgaWYgKG1fZml4ZWRMYXllcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGaXhlZCBsYXllciBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQgYnkgdGhlIHdlYiBwcm9jZXNzIHdo
ZW4gd2UgdXBkYXRlIHRoZSB2aXNpYmxlIGNvbnRlbnRzIHJlY3QgLyBzY3JvbGwgcG9zaXRpb24u
CisgICAgLy8gSWYgd2Ugd2FudCB0aG9zZSBsYXllcnMgdG8gZm9sbG93IGFjY3VyYXRlbHkgdGhl
IHZpZXdwb3J0IHdoZW4gd2UgbW92ZSBiZXR3ZWVuIHRoZSB3ZWIgcHJvY2VzcyB1cGRhdGVzLCB3
ZSBoYXZlIHRvIG9mZnNldAorICAgIC8vIHRoZW0gYnkgdGhlIGRlbHRhIGJldHdlZW4gdGhlIGN1
cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmlld3BvcnQgdXNlZCBmb3Ig
dGhlIGxhc3QgbGF5b3V0LgorICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBib3VuZGVk
U2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworICAgIEZsb2F0UG9pbnQgcmVuZGVyZWRT
Y3JvbGxQb3NpdGlvbiA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihtX3JlbmRlcmVkQ29udGVudHNT
Y3JvbGxQb3NpdGlvbiwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7Cisg
ICAgRmxvYXRTaXplIGRlbHRhID0gc2Nyb2xsUG9zaXRpb24gLSByZW5kZXJlZFNjcm9sbFBvc2l0
aW9uOworCisgICAgTGF5ZXJSYXdQdHJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZml4ZWRMYXllcnMu
ZW5kKCk7CisgICAgZm9yIChMYXllclJhd1B0ck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZpeGVkTGF5
ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5
ZXIoaXQtPnZhbHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKK30K
Kwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Nj
cm9sbFBvc2l0aW9uID0gcG9zaXRpb247Cit9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
K3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IEludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkK
K3sKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyQnlJRChpZCk7CisgICAgQVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNv
bnRhaW5zKGlkKSk7CisKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6
Y3JlYXRlKCkpOworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNr
aW5nU3RvcmUpOworCisgICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uo
c3VyZmFjZSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3Rv
cmUuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCit7CisgICAgQVNTRVJUKG1f
dGV4dHVyZU1hcHBlcik7CisgICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFp
bnMoaWQpKTsKKworICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
dXJmYWNlQmFja2luZ1N0b3Jlcy5maW5kKGlkKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1
cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKworICAg
IGNhbnZhc0JhY2tpbmdTdG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChmcm9udEJ1ZmZlcik7Cit9
CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQoreworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOworICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5jb250YWlucyhpZCkpOworCisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUo
aWQpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Cit9CisjZW5kaWYKKwordm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZElEcykKK3sKKyAgICBH
cmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisgICAgVmVjdG9yPEdyYXBoaWNz
TGF5ZXIqPiBjaGlsZHJlbjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJRHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBjaGls
ZElEc1tpXTsKKyAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJ
RCk7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgfQorICAgIGxheWVyLT5z
ZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQoreworICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBp
bmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhmaWx0ZXJzKTsKKyNlbmRpZgorICAgIGxh
eWVyLT5zZXRGaWx0ZXJzKGZpbHRlcnMpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjppbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQ
cm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdAoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBGaWx0
ZXJPcGVyYXRpb24qIG9wZXJhdGlvbiA9IGZpbHRlcnMub3BlcmF0aW9ucygpLmF0KGkpLmdldCgp
OworICAgICAgICBpZiAob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgIT0gRmlsdGVyT3Bl
cmF0aW9uOjpDVVNUT00pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBXZWJDdXN0
b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFdlYkN1c3Rv
bUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7CisgICAgICAgIEFTU0VSVCghY3VzdG9tT3Bl
cmF0aW9uLT5wcm9ncmFtKCkpOworICAgICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOjpjb25z
dF9pdGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5maW5kKGN1c3RvbU9wZXJh
dGlvbi0+cHJvZ3JhbUlEKCkpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX2N1c3RvbUZpbHRl
clByb2dyYW1zLmVuZCgpKTsKKyAgICAgICAgY3VzdG9tT3BlcmF0aW9uLT5zZXRQcm9ncmFtKGl0
ZXItPnZhbHVlLmdldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFt
SW5mbyYgcHJvZ3JhbUluZm8pCit7CisgICAgQVNTRVJUKCFtX2N1c3RvbUZpbHRlclByb2dyYW1z
LmNvbnRhaW5zKGlkKSk7CisgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5zZXQoaWQsIFdlYkN1
c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShwcm9ncmFtSW5mby52ZXJ0ZXhTaGFkZXJTdHJpbmco
KSwgcHJvZ3JhbUluZm8uZnJhZ21lbnRTaGFkZXJTdHJpbmcoKSwgcHJvZ3JhbUluZm8ucHJvZ3Jh
bVR5cGUoKSwgcHJvZ3JhbUluZm8ubWl4U2V0dGluZ3MoKSwgcHJvZ3JhbUluZm8ubWVzaFR5cGUo
KSkpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9n
cmFtKGludCBpZCkKK3sKKyAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXRlciAhPSBt
X2N1c3RvbUZpbHRlclByb2dyYW1zLmVuZCgpKTsKKyAgICBpZiAobV90ZXh0dXJlTWFwcGVyKQor
ICAgICAgICBtX3RleHR1cmVNYXBwZXItPnJlbW92ZUNhY2hlZEN1c3RvbUZpbHRlclByb2dyYW0o
aXRlci0+dmFsdWUuZ2V0KCkpOworICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGl0
ZXIpOworfQorI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKKwordm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3Jk
aW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCit7CisgICAgQVNTRVJUKG1fcm9vdExheWVySUQg
IT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIg
PSBsYXllckJ5SUQoaWQpOworCisgICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVyKGdldExh
eWVyQnlJRElmRXhpc3RzKGxheWVySW5mby5yZXBsaWNhKSk7CisgICAgbGF5ZXItPnNldE1hc2tM
YXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ubWFzaykpOworCisgICAgbGF5ZXIt
PnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7CisgICAgbGF5ZXItPnNldFBv
c2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5mby5zaXpl
KTsKKworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAg
bGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5zZm9ybSk7
CisgICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2ZhY2VWaXNp
YmxlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRlbnRzT3Bh
cXVlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50c1JlY3Qp
OworICAgIGxheWVyLT5zZXRDb250ZW50c1RvU29saWRDb2xvcihsYXllckluZm8uc29saWRDb2xv
cik7CisgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250ZW50KTsK
KyAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVySW5mby5jb250ZW50c1Zpc2libGUp
OworICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRGaXhlZFRvVmll
d3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7CisKKyAgICBpZiAobGF5ZXJJbmZvLmZp
eGVkVG9WaWV3cG9ydCkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQoaWQsIGxheWVyKTsKKyAg
ICBlbHNlCisgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKKworICAgIGFzc2lnbklt
YWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUlEKTsKKyAgICBwcmVwYXJl
Q29udGVudEJhY2tpbmdTdG9yZShsYXllcik7CisKKyAgICAvLyBOZXZlciBtYWtlIHRoZSByb290
IGxheWVyIGNsaXAuCisgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZvLmlzUm9v
dExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7CisgICAgbGF5ZXItPnNl
dE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOworICAgIGxheWVyLT5zZXRQcmVzZXJ2ZXMzRChs
YXllckluZm8ucHJlc2VydmVzM0QpOworfQorCitHcmFwaGljc0xheWVyKiBMYXllclRyZWVSZW5k
ZXJlcjo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAg
IHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkgPyBsYXllckJ5SUQoaWQp
IDogMDsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXJzKGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCit7CisgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IGlkcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgIGNyZWF0ZUxheWVyKGlk
c1tpbmRleF0pOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVMYXllcihDb29y
ZGluYXRlZExheWVySUQgaWQpCit7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG5ld0xheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAqLywgdGhpcyk7CisgICAgdG9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihuZXdMYXllci5nZXQoKSktPnNldEhhc093bkJhY2tp
bmdTdG9yZShmYWxzZSk7CisgICAgbV9sYXllcnMuYWRkKGlkLCBuZXdMYXllci5yZWxlYXNlKCkp
OworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcnMoY29uc3QgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQoreworICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBsYXllcklEcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgIGRlbGV0ZUxh
eWVyKGxheWVySURzW2luZGV4XSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0
ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQoreworICAgIE93blB0cjxHcmFwaGlj
c0xheWVyPiBsYXllciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJRCk7CisgICAgQVNTRVJUKGxheWVy
KTsKKworICAgIG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLnJlbW92ZSh0b1RleHR1cmVNYXBw
ZXJMYXllcihsYXllci5nZXQoKSkpOworICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySUQp
OworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
cmVtb3ZlKGxheWVySUQpOworI2VuZGlmCit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dFJvb3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQoreworICAgIEFTU0VSVChs
YXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOworICAgIEFTU0VSVChtX3Jvb3RM
YXllcklEID09IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOworCisgICAgbV9yb290TGF5ZXJJ
RCA9IGxheWVySUQ7CisKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXll
cklEKTsKKyAgICBBU1NFUlQobV9yb290TGF5ZXItPmNoaWxkcmVuKCkuaXNFbXB0eSgpKTsKKyAg
ICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOworfQorCitDb29yZGluYXRlZEJhY2tpbmdT
dG9yZSogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKiBn
cmFwaGljc0xheWVyKQoreworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1
cmVNYXBwZXJMYXllcihncmFwaGljc0xheWVyKTsKKyAgICBBU1NFUlQobGF5ZXIpOworICAgIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBzdGF0aWNfY2FzdDxDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZSo+KGxheWVyLT5iYWNraW5nU3RvcmUoKS5nZXQoKSk7CisKKyAgICBC
YWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMu
ZmluZChsYXllcik7CisgICAgaWYgKGl0ICE9IG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLmVu
ZCgpKQorICAgICAgICBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgcmV0dXJu
IGJhY2tpbmdTdG9yZTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHJlcGFyZUNvbnRl
bnRCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBpZiAo
IWxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShncmFwaGljc0xheWVyKSkgeworICAgICAgICBy
ZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChncmFwaGljc0xheWVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGdyYXBoaWNzTGF5ZXIp
OworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRl
ZChHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQoreworICAgIFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFwaGljc0xheWVyKTsKKyAgICBBU1NF
UlQobGF5ZXIpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBkb2VzIG5vdCBhbHJlYWR5
IGhhdmUgYSBiYWNraW5nIHN0b3JlIChjb21taXR0ZWQgb3IgcGVuZGluZykuCisgICAgQmFja2lu
Z1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLmZpbmQo
bGF5ZXIpOworICAgIGlmIChpdCAhPSBtX3BlbmRpbmdTeW5jQmFja2luZ1N0b3Jlcy5lbmQoKSkg
eworICAgICAgICBpZiAoIWl0LT52YWx1ZSkgeworICAgICAgICAgICAgLy8gVGhlcmUgaXMgYSBw
ZW5kaW5nIHJlbW92YWwsIGNhbmNlbCBpdC4KKyAgICAgICAgICAgIG1fcGVuZGluZ1N5bmNCYWNr
aW5nU3RvcmVzLnJlbW92ZShpdCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gVGhlcmUgaXMgYWxy
ZWFkeSBhIHBlbmRpbmcgYWRkaXRpb24uCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGxheWVyLT5iYWNraW5nU3RvcmUoKSkKKyAgICAgICAgcmV0dXJuOyAvLyBUaGUgbGF5ZXIgYWxy
ZWFkeSBoYXMgYSBiYWNraW5nIHN0b3JlIChhbmQgbm8gcGVuZGluZyByZW1vdmFsKS4KKworICAg
IFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7CisKKyAgICBiYWNraW5nU3RvcmUtPnNldFNpemUoZ3Jh
cGhpY3NMYXllci0+c2l6ZSgpKTsKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1N5bmNCYWNraW5nU3Rv
cmVzLmNvbnRhaW5zKGxheWVyKSk7CisgICAgbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMuYWRk
KGxheWVyLCBiYWNraW5nU3RvcmUpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1v
dmVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQorewor
ICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFw
aGljc0xheWVyKTsKKyAgICBBU1NFUlQobGF5ZXIpOworCisgICAgLy8gQ2hlY2sgaWYgdGhlIGxh
eW91dCBhbHJlYWR5IGhhcyBhIGJhY2tpbmcgc3RvcmUgKGNvbW1pdHRlZCBvciBwZW5kaW5nKS4K
KyAgICBCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nU3luY0JhY2tpbmdT
dG9yZXMuZmluZChsYXllcik7CisgICAgaWYgKGl0ICE9IG1fcGVuZGluZ1N5bmNCYWNraW5nU3Rv
cmVzLmVuZCgpKSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUpIHsKKyAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIGEgcGVuZGluZyBhZGRpdGlvbiwgY2FuY2VsIGl0LgorICAgICAgICAgICAgbV9wZW5k
aW5nU3luY0JhY2tpbmdTdG9yZXMucmVtb3ZlKGl0KTsKKyAgICAgICAgfQorICAgICAgICAvLyBU
aGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyByZW1vdmFsLgorICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKCFsYXllci0+YmFja2luZ1N0b3JlKCkpCisgICAgICAgIHJldHVybjsgLy8g
VGhlIGxheWVyIGhhcyBubyBiYWNraW5nIHN0b3JlIChhbmQgbm8gcGVuZGluZyBhZGRpdGlvbiku
CisKKyAgICBBU1NFUlQoIW1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxheWVy
KSk7CisgICAgbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMuYWRkKGxheWVyLCAwKTsKK30KKwor
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZSogYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGdyYXBoaWNzTGF5ZXIpOworICAg
IEFTU0VSVChiYWNraW5nU3RvcmUpOworICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShncmFwaGlj
c0xheWVyLT5zaXplKCkpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVUaWxl
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxl
KQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAg
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBnZXRCYWNraW5nU3RvcmUo
bGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOworICAgIGJhY2tpbmdTdG9yZS0+Y3Jl
YXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKKyAgICByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVy
U2l6ZShsYXllcik7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3sKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZSogYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxheWVyKTsKKyAgICBpZiAo
IWJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYmFja2luZ1N0b3JlLT5yZW1v
dmVUaWxlKHRpbGVJRCk7CisgICAgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5
ZXIpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0
b3JlKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRh
dGUpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Cisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBnZXRCYWNr
aW5nU3RvcmUobGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOworICAgIGJhY2tpbmdT
dG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGlsZVJl
Y3QsIHVwZGF0ZS5zdXJmYWNlLCB1cGRhdGUub2Zmc2V0KTsKKyAgICByZXNldEJhY2tpbmdTdG9y
ZVNpemVUb0xheWVyU2l6ZShsYXllcik7CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdC
dWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQorewor
ICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBSZWZQ
dHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgYmFj
a2luZ1N0b3JlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQoreworICAgIEFTU0VSVChtX2ltYWdlQmFj
a2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3Ig
aXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKworICAgIC8vIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
IHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgorICAgIGJhY2tpbmdTdG9yZS0+Y3Jl
YXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsKKyAgICBJbnRSZWN0IHJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+c2l6ZSgpKTsKKyAgICAvLyBTZWUgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKCkKKyAgICBBU1NFUlQo
MjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBiYWNr
aW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkpOworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRl
VGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBzdXJmYWNlLCByZWN0LmxvY2F0aW9uKCkpOwor
CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUp
OworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRz
KENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBBU1NFUlQobV9pbWFn
ZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CisgICAgYmFja2lu
Z1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sK
KyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKworICAgIC8v
IFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVycyBhIGRhbmdsaW5nIHBvaW50
ZXIuCisgICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBwZW5kKG1faW1hZ2VCYWNraW5ncy50
YWtlKGltYWdlSUQpKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VC
YWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlEKQoreworICAgIGlmIChpbWFnZUlEID09IEludmFsaWRDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKSB7CisgICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9
IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAgIEFTU0VSVChpdCAhPSBtX2ltYWdl
QmFja2luZ3MuZW5kKCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVl
LmdldCgpKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFn
ZUJhY2tpbmdzSWZOZWVkZWQoKQoreworICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFy
KCk7Cit9CisKK3ZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3Rv
cmVPcGVyYXRpb25zKCkKK3sKKyAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+
ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPmNvbW1pdFRpbGVPcGVyYXRpb25z
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGlu
Z0J1ZmZlcnMuY2xlYXIoKTsKKworICAgIHsKKyAgICAgICAgQmFja2luZ1N0b3JlTWFwOjppdGVy
YXRvciBlbmQgPSBtX3BlbmRpbmdTeW5jQmFja2luZ1N0b3Jlcy5lbmQoKTsKKyAgICAgICAgQmFj
a2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLmJl
Z2luKCk7CisgICAgICAgIGZvciAoO2l0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGl0LT5r
ZXktPnNldEJhY2tpbmdTdG9yZShpdC0+dmFsdWUpOworCisgICAgICAgIG1fcGVuZGluZ1N5bmNC
YWNraW5nU3RvcmVzLmNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpmbHVzaExheWVyQ2hhbmdlcygpCit7CisgICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9z
aXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247CisKKyAgICAv
LyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVuIHJlbmRlcmVkLCB3ZSBjYW4gc2FmZWx5IHVu
bG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUgbmV4dCBsYXlvdXQuCisgICAgc2V0QW5pbWF0
aW9uc0xvY2tlZChmYWxzZSk7CisKKyAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlKEZsb2F0UmVjdCgpKTsKKyAgICBjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9u
cygpOworICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CisKKyAgICAv
LyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZvciB0aGUgc2NyZWVuLCB0
ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25lLgorICAgIGRpc3BhdGNo
T25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRo
aXMpKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKK3sK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5yZW5kZXJOZXh0RnJhbWUoKTsK
K30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKK3sKKyAgICBp
ZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcm9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAqLywgdGhpcyk7CisgICAgbV9yb290TGF5
ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHpl
cm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KKyAgICBtX3Jvb3RMYXllci0+
c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKworICAgIEFTU0VSVChtX3RleHR1cmVNYXBw
ZXIpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworfQorCit2b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpzeW5jUmVtb3RlQ29udGVudCgpCit7CisgICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdl
cyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFuIGFjdGl2
ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXllcigpOworCisgICAgVmVjdG9yPEZ1bmN0
aW9uPHZvaWQoKT4gPiByZW5kZXJRdWV1ZTsKKyAgICBib29sIGNhbGxlZE9uTWFpblRocmVhZCA9
IFdURjo6aXNNYWluVGhyZWFkKCk7CisgICAgaWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCisgICAg
ICAgIG1fcmVuZGVyUXVldWVNdXRleC5sb2NrKCk7CisgICAgcmVuZGVyUXVldWUuc3dhcChtX3Jl
bmRlclF1ZXVlKTsKKyAgICBpZiAoIWNhbGxlZE9uTWFpblRocmVhZCkKKyAgICAgICAgbV9yZW5k
ZXJRdWV1ZU11dGV4LnVubG9jaygpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5k
ZXJRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVuZGVyUXVldWVbaV0oKTsKK30KKwordm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygpCit7CisgICAgVGV4dHVyZU1h
cHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKKwor
ICAgIGlmIChsYXllcikKKyAgICAgICAgbGF5ZXItPmNsZWFyQmFja2luZ1N0b3Jlc1JlY3Vyc2l2
ZSgpOworCisgICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOworI2VuZGlmCisKKyAg
ICBtX3Jvb3RMYXllci5jbGVhcigpOworICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlkQ29vcmRp
bmF0ZWRMYXllcklEOworICAgIG1fbGF5ZXJzLmNsZWFyKCk7CisgICAgbV9maXhlZExheWVycy5j
bGVhcigpOworICAgIG1fdGV4dHVyZU1hcHBlci5jbGVhcigpOworICAgIG1fcGVuZGluZ1N5bmNC
YWNraW5nU3RvcmVzLmNsZWFyKCk7CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZm
ZXJzLmNsZWFyKCk7CisKKyAgICBzZXRBY3RpdmUoZmFsc2UpOworICAgIGRpc3BhdGNoT25NYWlu
VGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMsIHRoaXMp
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5wdXJnZUJhY2tpbmdTdG9yZXMo
KTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlv
bnMpCit7CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyID0gdG9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlcihsYXllckJ5SUQoaWQpKTsKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5z
aXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVz
ID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAgIGlm
IChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVyKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwga2V5
ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRpb25W
YWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25WYWx1
ZSo+KGtleWZyYW1lcy5hdChpKSk7CisgICAgICAgICAgICBpbmplY3RDYWNoZWRDdXN0b21GaWx0
ZXJQcm9ncmFtcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorI2Vu
ZGlmCisgICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoYW5pbWF0aW9ucyk7Cit9CisKK3ZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCit7CisgICAg
bV9hbmltYXRpb25zTG9ja2VkID0gbG9ja2VkOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpkZXRhY2goKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9jbGllbnQg
PSAwOworfQorCit2b2lkIExheWVyVHJlZVJlbmRlcmVyOjphcHBlbmRVcGRhdGUoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgaWYgKCFtX2lzQWN0aXZlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0ZXgpOworICAgIG1fcmVuZGVyUXVldWUuYXBwZW5kKGZ1
bmN0aW9uKTsKK30KKwordm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0QWN0aXZlKGJvb2wgYWN0
aXZlKQoreworICAgIGlmIChtX2lzQWN0aXZlID09IGFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSGF2ZSB0byBjbGVhciByZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KKyAgICAv
LyBJZiB0aGVyZSBhcmUgc29tZSB1cGRhdGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9uIHRo
ZW4gdGhvc2UgdXBkYXRlcyBhcmUgZnJvbSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBub2Rl
CisgICAgLy8gYW5kIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3Rh
bmNlLgorICAgIG1fcmVuZGVyUXVldWUuY2xlYXIoKTsKKyAgICBtX2lzQWN0aXZlID0gYWN0aXZl
OworICAgIGlmIChtX2lzQWN0aXZlKQorICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Cit9CisKK3ZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
Cit7CisgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0xh
eWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvTGF5ZXJUcmVlUmVuZGVyZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjE0MmJkZjQ5
ZjFmODYyZmZmYjZjMTM1ZjU5NWIwYzZiMTNkNWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0xheWVyVHJlZVJl
bmRlcmVyLmgKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYg
TGF5ZXJUcmVlUmVuZGVyZXJfaAorI2RlZmluZSBMYXllclRyZWVSZW5kZXJlcl9oCisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8u
aCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NM
YXllckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2lu
Z1N0b3JlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1p
dGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7CitjbGFzcyBDb29yZGluYXRlZExheWVy
SW5mbzsKK2NsYXNzIEN1c3RvbUZpbHRlclByb2dyYW07CitjbGFzcyBDdXN0b21GaWx0ZXJQcm9n
cmFtSW5mbzsKK2NsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKKworY2xhc3MgTGF5ZXJUcmVlUmVu
ZGVyZXJDbGllbnQgeworcHVibGljOgorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uRnJhbWVSZWFkeSgpID0gMDsKKyNlbmRpZgor
ICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHJlbmRlck5leHRGcmFtZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3Bv
cnQoKSA9IDA7Cit9OworCitjbGFzcyBMYXllclRyZWVSZW5kZXJlciA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxMYXllclRyZWVSZW5kZXJlcj4sIHB1YmxpYyBHcmFwaGljc0xheWVyQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7CisgICAgICAgIEludFJlY3Qg
c291cmNlUmVjdDsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICAgICAgUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZTsKKyAgICAgICAgSW50UG9pbnQgb2Zmc2V0OworICAg
ICAgICBUaWxlVXBkYXRlKGNvbnN0IEludFJlY3QmIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgdGls
ZSwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG5ld1N1cmZhY2UsIGNvbnN0IEludFBv
aW50JiBuZXdPZmZzZXQpCisgICAgICAgICAgICA6IHNvdXJjZVJlY3Qoc291cmNlKQorICAgICAg
ICAgICAgLCB0aWxlUmVjdCh0aWxlKQorICAgICAgICAgICAgLCBzdXJmYWNlKG5ld1N1cmZhY2Up
CisgICAgICAgICAgICAsIG9mZnNldChuZXdPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgIH07CisgICAgZXhwbGljaXQgTGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlUmVuZGVyZXJD
bGllbnQqKTsKKyAgICB2aXJ0dWFsIH5MYXllclRyZWVSZW5kZXJlcigpOworICAgIHZvaWQgcGFp
bnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwg
Y29uc3QgRmxvYXRSZWN0JiwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDApOworI2lmIFBM
QVRGT1JNKFFUKQorICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciopOwor
I2VsaWYgVVNFKENBSVJPKQorICAgIHZvaWQgcGFpbnRUb0dyYXBoaWNzQ29udGV4dChjYWlyb190
Kik7CisjZW5kaWYKKyAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmKTsK
KyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAg
dm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbik7
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+
KTsKKyAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9u
dEJ1ZmZlcik7CisgICAgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Cisj
ZW5kaWYKKworICAgIHZvaWQgZGV0YWNoKCk7CisgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3Qg
RnVuY3Rpb248dm9pZCgpPiYpOworCisgICAgLy8gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxv
Y2sgdGhlIG1haW4gdGhyZWFkIHRvIHVzZSBiZWxvdyB0d28gbWV0aG9kcywgYmVjYXVzZSB0d28g
bWV0aG9kcyBhY2Nlc3MgbWVtYmVycyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYW5hZ2VzLiBTZWUg
bV9jbGllbnQuCisgICAgLy8gQ3VycmVudGx5LCBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5v
ZGUoKSBsb2NrcyB0aGUgbWFpbiB0aHJlYWQgYmVmb3JlIGNhbGxpbmcgYm90aCBtZXRob2RzLgor
ICAgIHZvaWQgcHVyZ2VHTFJlc291cmNlcygpOworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwor
CisgICAgdm9pZCBjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
KTsKKyAgICB2b2lkIGRlbGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYpOworICAgIHZvaWQgc2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2
b2lkIHNldExheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7CisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQorICAgIHZvaWQgc2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYpOworI2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAg
IHZvaWQgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKKyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVU
aWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBmbG9hdCBzY2FsZSk7Cisg
ICAgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsK
KyAgICB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAg
dm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAg
dm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKKyAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCBzZXRMYXllckFuaW1h
dGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
OworICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKKyAgICB2b2lkIHNldEJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJv
b2wgZW5hYmxlKSB7IG1fc2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CisKKyNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJh
bWUoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChD
b29yZGluYXRlZExheWVySUQgaWQpCisgICAgeworICAgICAgICBBU1NFUlQobV9sYXllcnMuY29u
dGFpbnMoaWQpKTsKKyAgICAgICAgQVNTRVJUKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVy
SUQpOworICAgICAgICByZXR1cm4gbV9sYXllcnMuZ2V0KGlkKTsKKyAgICB9CisgICAgR3JhcGhp
Y3NMYXllciogZ2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICBH
cmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQor
CisgICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgYWRqdXN0UG9zaXRpb25G
b3JGaXhlZExheWVycygpOworCisgICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGlj
c0xheWVyQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqLCBkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlG
bHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3Jh
cGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERSB7IH0KKwor
ICAgIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwor
ICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05f
RlJBTUUpCisgICAgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCk7CisjZW5kaWYKKyAgICB2b2lk
IHJlbmRlck5leHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAg
ICB2b2lkIGNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBkZWxldGVM
YXllcihDb29yZGluYXRlZExheWVySUQpOworCisgICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdU
b0xheWVyKEdyYXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2
b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CisgICAgdm9pZCBlbnN1
cmVSb290TGF5ZXIoKTsKKyAgICB2b2lkIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRp
b25zKCk7CisKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSogZ2V0QmFja2luZ1N0b3JlKEdy
YXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHByZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKEdyYXBo
aWNzTGF5ZXIqKTsKKyAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNz
TGF5ZXIqKTsKKyAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5
ZXIqKTsKKyAgICB2b2lkIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNz
TGF5ZXIqKTsKKworICAgIEZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBGbG9hdFJlY3Qg
bV92aXNpYmxlQ29udGVudHNSZWN0OworCisgICAgLy8gUmVuZGVyIHF1ZXVlIGNhbiBiZSBhY2Nl
c3NlZCBvbnkgZnJvbSBtYWluIHRocmVhZCBvciB1cGRhdGVQYWludE5vZGUgY2FsbCBzdGFjayEK
KyAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fcmVuZGVyUXVldWU7CisgICAgTXV0ZXgg
bV9yZW5kZXJRdWV1ZU11dGV4OworCisgICAgT3duUHRyPFRleHR1cmVNYXBwZXI+IG1fdGV4dHVy
ZU1hcHBlcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
LCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gSW1hZ2VCYWNraW5nTWFwOworICAg
IEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPFJlZlB0cjxDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxUZXh0dXJlTWFwcGVyTGF5ZXIqLCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU+ID4gQmFja2luZ1N0b3JlTWFwOworICAgIEJhY2tpbmdTdG9yZU1hcCBtX3BlbmRp
bmdTeW5jQmFja2luZ1N0b3JlczsKKworICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsKKworI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVy
SUQsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gPiBTdXJmYWNlQmFj
a2luZ1N0b3JlTWFwOworICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXAgbV9zdXJmYWNlQmFja2lu
Z1N0b3JlczsKKyNlbmRpZgorCisgICAgLy8gQmVsb3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2Vk
IGJ5IG9ubHkgdGhlIG1haW4gdGhyZWFkLiBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0
aGUgbWFpbiB0aHJlYWQgdG8gYWNjZXNzIGJvdGggbWVtYmVycy4KKyAgICBMYXllclRyZWVSZW5k
ZXJlckNsaWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX2lzQWN0aXZlOworCisgICAgT3duUHRy
PEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3Jk
aW5hdGVkTGF5ZXJJRCwgT3duUHRyPEdyYXBoaWNzTGF5ZXI+ID4gTGF5ZXJNYXA7CisgICAgTGF5
ZXJNYXAgbV9sYXllcnM7CisgICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwg
R3JhcGhpY3NMYXllcio+IExheWVyUmF3UHRyTWFwOworICAgIExheWVyUmF3UHRyTWFwIG1fZml4
ZWRMYXllcnM7CisgICAgQ29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExheWVySUQ7CisgICAgRmxv
YXRQb2ludCBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKKyAgICBGbG9hdFBvaW50
IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKKyAgICBib29sIG1fYW5p
bWF0aW9uc0xvY2tlZDsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAg
Ym9vbCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkOworI2VuZGlmCisgICAgQ29sb3IgbV9iYWNr
Z3JvdW5kQ29sb3I7CisgICAgYm9vbCBtX3NldERyYXdzQmFja2dyb3VuZDsKKworI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8Q3VzdG9tRmls
dGVyUHJvZ3JhbT4gPiBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOworICAgIEN1c3RvbUZpbHRlclBy
b2dyYW1NYXAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
ZW5kaWYgLy8gTGF5ZXJUcmVlUmVuZGVyZXJfaAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5m
by5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L1N1cmZhY2VVcGRhdGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmFiMzg0YTExZWFhNWVhMjU0MDgxM2M3
MDI1ZTVmYzhjMTdkMzkxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFN1cmZhY2VVcGRhdGVJbmZvX2gKKyNkZWZpbmUgU3VyZmFjZVVwZGF0ZUluZm9faAorCisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFN1cmZhY2VVcGRhdGVJbmZvIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBk
YXRlSW5mbyk7CisKK3B1YmxpYzoKKyAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQorCisgICAg
Ly8gVGhlIHJlY3QgdG8gYmUgdXBkYXRlZC4KKyAgICBJbnRSZWN0IHVwZGF0ZVJlY3Q7CisKKyAg
ICAvLyBUaGUgcGFnZSBzY2FsZSBmYWN0b3IgdXNlZCB0byByZW5kZXIgdGhpcyB1cGRhdGUuCisg
ICAgZmxvYXQgc2NhbGVGYWN0b3I7CisKKyAgICAvLyBUaGUgaWQgb2YgdGhlIHVwZGF0ZSBhdGxh
cyBpbmNsdWRpbmcgdGhlIHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBkYXRlcy4K
KyAgICB1aW50MzJfdCBhdGxhc0lEOworCisgICAgLy8gVGhlIG9mZnNldCBpbiB0aGUgYml0bWFw
IHdoZXJlIHRoZSByZW5kZXJlZCBjb250ZW50cyBhcmUuCisgICAgSW50UG9pbnQgc3VyZmFjZU9m
ZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIFN1cmZhY2VVcGRhdGVJbmZvX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxMDA0ZTg5YWNmZTc0
NGNmYjM3MTg2OWQyZGUyZjA0MDgyOThmYzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3Bw
CkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBDb21w
YW55IDEwMCwgSW5jLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xpZW50LCBDb29y
ZGluYXRlZFN1cmZhY2U6OkZhY3RvcnkgY29vcmRpYW50ZWRTdXJmYWNlRmFjdG9yeSwgaW50IGRp
bWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBmbGFncykKKyAgICA6IG1fY2xpZW50
KGNsaWVudCkKKyAgICAsIG1faW5hY3Rpdml0eUluU2Vjb25kcygwKQoreworICAgIHN0YXRpYyB1
aW50MzJfdCBuZXh0SUQgPSAwOworICAgIG1fSUQgPSArK25leHRJRDsKKyAgICBJbnRTaXplIHNp
emUgPSBuZXh0UG93ZXJPZlR3byhJbnRTaXplKGRpbWVuc2lvbiwgZGltZW5zaW9uKSk7CisgICAg
bV9zdXJmYWNlID0gY29vcmRpYW50ZWRTdXJmYWNlRmFjdG9yeShzaXplLCBmbGFncyk7CisKKyAg
ICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCBVcGRh
dGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHkuCisgICAgaWYgKCFt
X2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkKKyAgICAgICAgbV9z
dXJmYWNlLmNsZWFyKCk7Cit9CisKK1VwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMoKQoreworICAg
IGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVVcGRhdGVBdGxhcyhtX0lE
KTsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCit7CisgICAg
aWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsKKyAgICAgICAgbV9hcmVhQWxsb2NhdG9yID0gYWRvcHRQ
dHIobmV3IEdlbmVyYWxBcmVhQWxsb2NhdG9yKHNpemUoKSkpOworICAgICAgICBtX2FyZWFBbGxv
Y2F0b3ItPnNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMyKSk7CisgICAgfQorfQor
Cit2b2lkIFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycygpCit7CisgICAgbV9hcmVhQWxsb2Nh
dG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBVcGRhdGVBdGxh
czo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90JiBhdGxhc0lELCBjb25z
dCBJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1faW5hY3Rpdml0eUlu
U2Vjb25kcyA9IDA7CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAgIEludFJlY3QgcmVj
dCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CisKKyAgICAvLyBObyBhdmFpbGFi
bGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCisgICAgaWYgKHJlY3QuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7CisKKyAg
ICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PigpOworCisgICAgYXRsYXNJRCA9IG1fSUQ7CisKKyAgICAvLyBGSVhNRTogVXNlIHRyaS1z
dGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KKyAgICBvZmZzZXQgPSByZWN0
LmxvY2F0aW9uKCk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0
ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisKKyAgICBpZiAoc3Vw
cG9ydHNBbHBoYSgpKSB7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmZpbGxSZWN0
KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc2l6ZSksIENvbG9yOjp0cmFuc3BhcmVudCwgQ29s
b3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIH0KKworICAgIHJldHVybiBncmFw
aGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5k
aWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRl
QXRsYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZDBhNjExZWZjYmY5NzU1ZDJkMTM3ZGNiNThiODM3ZmY1Njk2
MTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisKKyBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgVXBkYXRlQXRsYXNfaAorI2RlZmluZSBVcGRhdGVBdGxh
c19oCisKKyNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRT
dXJmYWNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7Citj
bGFzcyBJbnRQb2ludDsKKworY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgeworcHVibGljOgorICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBk
YXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOworfTsKKworY2xhc3MgVXBkYXRlQXRsYXMg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKK3B1YmxpYzoKKyAgICBV
cGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIENvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9y
eSwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CisgICAgflVwZGF0
ZUF0bGFzKCk7CisKKyAgICBpbmxpbmUgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9z
dXJmYWNlLT5zaXplKCk7IH0KKworICAgIC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIgb2YgdGhl
cmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KKyAgICBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90JiBhdGxhc0lELCBjb25z
dCBJbnRTaXplJiwgSW50UG9pbnQmIG9mZnNldCk7CisgICAgdm9pZCBkaWRTd2FwQnVmZmVycygp
OworICAgIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c3Vw
cG9ydHNBbHBoYSgpOyB9CisKKyAgICB2b2lkIGFkZFRpbWVJbmFjdGl2ZShkb3VibGUgc2Vjb25k
cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNJblVzZSgpKTsKKyAgICAgICAgbV9pbmFjdGl2
aXR5SW5TZWNvbmRzICs9IHNlY29uZHM7CisgICAgfQorICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNv
bnN0CisgICAgeworICAgICAgICBjb25zdCBkb3VibGUgaW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNl
ID0gMzsKKyAgICAgICAgcmV0dXJuIG1faW5hY3Rpdml0eUluU2Vjb25kcyA+IGluYWN0aXZlU2Vj
b25kc1RvbGVyYW5jZTsKKyAgICB9CisgICAgYm9vbCBpc0luVXNlKCkgY29uc3QgeyByZXR1cm4g
bV9hcmVhQWxsb2NhdG9yOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZExheW91dElmTmVl
ZGVkKCk7CisKK3ByaXZhdGU6CisgICAgVXBkYXRlQXRsYXNDbGllbnQqIG1fY2xpZW50OworICAg
IE93blB0cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9yOworICAgIFJlZlB0
cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAgICBkb3VibGUgbV9pbmFjdGl2aXR5
SW5TZWNvbmRzOworICAgIHVpbnQzMl90IG1fSUQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8vIFVwZGF0
ZUF0bGFzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9XZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9XZWJDdXN0b21GaWx0ZXJP
cGVyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmYyNzdhNzBlNmVhZWFlNzNiZmUzMjA4MThjNzY0ZTA0
MDUwNTUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisg
KiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDdXN0b21G
aWx0ZXJPcGVyYXRpb25faAorI2RlZmluZSBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb25faAorCisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorI2luY2x1ZGUgIkN1c3RvbUZpbHRlck9wZXJhdGlvbi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFRoaXMgY2xhc3MgaXMgb25seSBhZGRpbmcg
dGhlIHByb2dyYW1JZCBvbiB0b3Agb2YgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLiBUaGUgYXJndW1l
bnQgZGVjb2RlciBoYXMgbm8KKy8vIGNvbnRleHQsIHNvIHdlIGNhbm5vdCBzZWFyY2ggaW4gb3Vy
IGNhY2hlZCBDdXN0b21GaWx0ZXJQcm9ncmFtcyB3aGlsZSBkZWNvZGluZy4gSW4gdGhhdCBjYXNl
CisvLyBpdCB3aWxsIGp1c3Qgc3RvcmUgdGhlIHByb2dyYW1JZCBhbmQgbm8gQ3VzdG9tRmlsdGVy
UHJvZ3JhbSBpbnN0YW5jZS4gVGhlIHJlY2VpdmVyIGlzIHN1cHBvc2VkIHRvCisvLyBpdGVyYXRl
IG9uIHRoaXMgc3RydWN0dXJlIGFuZCBpbmplY3QgdGhlIHJpZ2h0IEN1c3RvbUZpbHRlclByb2dy
YW1zLgorCitjbGFzcyBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgQ3VzdG9tRmls
dGVyT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDdXN0b21G
aWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHBy
b2dyYW0sIGludCBwcm9ncmFtSUQsIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNv
cnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywg
Q3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbihwcm9ncmFtLCBwcm9ncmFtSUQsIHNv
cnRlZFBhcmFtZXRlcnMsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpKTsKKyAgICB9
CisKKyAgICBpbnQgcHJvZ3JhbUlEKCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmFtSUQ7IH0KKwor
cHJpdmF0ZToKKyAgICBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24oUGFzc1JlZlB0cjxDdXN0b21G
aWx0ZXJQcm9ncmFtPiBwcm9ncmFtLCBpbnQgcHJvZ3JhbUlELCBjb25zdCBDdXN0b21GaWx0ZXJQ
YXJhbWV0ZXJMaXN0JiBzb3J0ZWRQYXJhbWV0ZXJzLCB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWdu
ZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQorICAgICAgICA6
IEN1c3RvbUZpbHRlck9wZXJhdGlvbihwcm9ncmFtLCBzb3J0ZWRQYXJhbWV0ZXJzLCBtZXNoUm93
cywgbWVzaENvbHVtbnMsIG1lc2hUeXBlKQorICAgICAgICAsIG1fcHJvZ3JhbUlEKHByb2dyYW1J
RCkKKyAgICB7CisgICAgfQorCisgICAgaW50IG1fcHJvZ3JhbUlEOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQorCisjZW5kaWYg
Ly8gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9XZWJDdXN0b21GaWx0ZXJQcm9ncmFt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjllNDdlZTE3YTkyMDJiZjc2ZDcz
MTNjOWRlNjVlYTRkNjQzYzM5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvV2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAx
MDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJDdXN0
b21GaWx0ZXJQcm9ncmFtX2gKKyNkZWZpbmUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNs
dWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9n
cmFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbSA6IHB1YmxpYyBDdXN0b21GaWx0ZXJQcm9ncmFtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtPiBjcmVhdGUoU3RyaW5nIHZlcnRleFNo
YWRlclN0cmluZywgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcsIEN1c3RvbUZpbHRlclBy
b2dyYW1UeXBlIHByb2dyYW1UeXBlLCBDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4
U2V0dGluZ3MsIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0
cmluZywgbV9mcmFnbWVudFNoYWRlclN0cmluZywgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBt
ZXNoVHlwZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IE9W
RVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEN1c3RvbUZpbHRlclByb2dyYW0mIG8pIGNvbnN0IE9WRVJSSURFCisgICAgeworICAgICAg
ICAvLyBXZSBkb24ndCB1c2UgdGhlICE9IG9wZXJhdG9yIGJlY2F1c2UgdGhhdCB3b3VsZCByZWN1
cnNpdmVseSBjYWxsIHRoaXMgbWV0aG9kLgorICAgICAgICBpZiAoIUN1c3RvbUZpbHRlclByb2dy
YW06Om9wZXJhdG9yPT0obykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
Ly8gVGhlIGZvbGxvd2luZyBjYXN0IGlzIHVnbHksIGJ1dCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFt
IGlzIHRoZSBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgQ3VzdG9tRmlsdGVyUHJvZ3JhbSBvbiBV
SSBQcm9jZXNzLgorICAgICAgICBjb25zdCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKiBvdGhlciA9
IHN0YXRpY19jYXN0PGNvbnN0IFdlYkN1c3RvbUZpbHRlclByb2dyYW0qPigmbyk7CisgICAgICAg
IHJldHVybiBtX3ZlcnRleFNoYWRlclN0cmluZyA9PSBvdGhlci0+dmVydGV4U2hhZGVyU3RyaW5n
KCkgJiYgbV9mcmFnbWVudFNoYWRlclN0cmluZyA9PSBvdGhlci0+ZnJhZ21lbnRTaGFkZXJTdHJp
bmcoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFN0cmluZyB2ZXJ0ZXhTaGFk
ZXJTdHJpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRleFNoYWRlclN0cmluZzsg
fQorICAgIHZpcnR1YWwgU3RyaW5nIGZyYWdtZW50U2hhZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV9mcmFnbWVudFNoYWRlclN0cmluZzsgfQorCisgICAgdmlydHVhbCB2b2lk
IHdpbGxIYXZlQ2xpZW50cygpIE9WRVJSSURFIHsgbm90aWZ5Q2xpZW50cygpOyB9CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlbW92ZUxhc3RDbGllbnQoKSBPVkVSUklERSB7IH0KKworcHJpdmF0ZToK
KyAgICBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0
cmluZyBmcmFnbWVudFNoYWRlclN0cmluZywgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3Jh
bVR5cGUsIEN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5ncywgQ3VzdG9t
RmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCisgICAgICAgIDogQ3VzdG9tRmlsdGVyUHJvZ3JhbShw
cm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKQorICAgICAgICAsIG1fdmVydGV4U2hh
ZGVyU3RyaW5nKHZlcnRleFNoYWRlclN0cmluZykKKyAgICAgICAgLCBtX2ZyYWdtZW50U2hhZGVy
U3RyaW5nKGZyYWdtZW50U2hhZGVyU3RyaW5nKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcg
bV92ZXJ0ZXhTaGFkZXJTdHJpbmc7CisgICAgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmc7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpICYmIEVOQUJMRShDU1NfU0hBREVSUykKKworI2VuZGlmIC8vIFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAppbmRleCBlZDkxN2Y4OTdjMDhjZGJm
Y2MwN2MxNTVkM2M0ZGNkYzJhZGUwM2I1Li5kMmI5OWEyNGY3NGFhNDcyZTUzNWIwNjM3YzAxZDVj
OTBhYjU4MjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dApAQCAtMzUxLDkgKzM1MSw3IEBAIHNldChX
ZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViQ3JlZGVudGlh
bC5jcHAKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmNw
cAogCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUuY3BwCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkuY3BwCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
TGF5ZXJUcmVlUmVuZGVyZXIuY3BwCiAKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApA
QCAtNTA0LDEyICs1MDIsNyBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJV
bmRvU3RlcC5jcHAKIAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0FyZWFBbGxvY2F0b3IuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAotICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvVXBkYXRlQXRsYXMuY3BwCiApCiAKIHNldChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNw
cAppbmRleCA5ZTg4OGU1ODY2NTUzZTlhNTc4YmM5MDM3YWJmYWE4MzNiMTVjZGFiLi41ZmQ3OGFm
MWM3OTQ0NDUyN2QwMGUyNGNmNzQ2ZWQwN2YwNjZjMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDExICsyOSwx
MCBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogCiAj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5
VHJhbnNmb3JtT3BlcmF0aW9uLmg+CkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9Sb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0
aW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0
aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24uaD4KQEAgLTU0LDggKzU0LDYgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJT
KQotI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYkN1
c3RvbUZpbHRlclByb2dyYW0uaCIKICNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJv
eHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJDb25zdGFudHMuaD4KQEAgLTY2LDYgKzY0LDgg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9XZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1dl
YkN1c3RvbUZpbHRlclByb2dyYW0uaD4KICNlbmRpZgogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCkBAIC03Myw3ICs3Myw5IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKyNlbmRp
ZgogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVy
cy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKaW5kZXggMGI1ZTE0Y2MxNzk5NmU2NWQ5NDZhZmRi
OTJhMTRhOGJmMmViZmNmYy4uMmFlZmM2NTc0ZmYzZWE0MTExM2ZjMWU0MmMwMTkxOGY0MjQxYmY2
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29k
ZXJzLmgKQEAgLTMyLDExICszMiwxMyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwogY2xhc3MgRmxv
YXRQb2ludDNEOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbjsKIGNsYXNzIEdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBjbGFzcyBUcmFu
c2Zvcm1PcGVyYXRpb25zOworc3RydWN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvOwogc3RydWN0IExl
bmd0aDsKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKQEAgLTUyLDExICs1NCw2IEBAIHN0cnVj
dCBHcmFwaGljc1N1cmZhY2VUb2tlbjsKICNlbmRpZgogfQogCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LXN0cnVjdCBDb29yZGluYXRlZExheWVySW5mbzsKLWNsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOwot
fQotCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6RmxvYXRQb2ludDNEPiB7CkBAIC0xMTAsMTQgKzEwNywxNCBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuPiB7
CiB9OwogI2VuZGlmCiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpD
b29yZGluYXRlZExheWVySW5mbz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVu
Y29kZXImLCBjb25zdCBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0gICAgc3RhdGlj
IGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllcklu
Zm8mKTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllckluZm8+IHsKKyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwg
Y29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsK
IH07CiAKLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViS2l0OjpTdXJmYWNlVXBk
YXRlSW5mbz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25z
dCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciosIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKK3RlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8+IHsKKyAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViQ29yZTo6U3VyZmFj
ZVVwZGF0ZUluZm8mKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIENvcmVJ
UEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVySW5mby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBmOWEwMDFkZmY0Mzc4MzcwMzhhNGVlYWI1ZmY1NmUzYjk1MzMwNTZkLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw4MCArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0g
Ki8KLQotI2lmbmRlZiBDb29yZGluYXRlZExheWVySW5mb19oCi0jZGVmaW5lIENvb3JkaW5hdGVk
TGF5ZXJJbmZvX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUg
IkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi10eXBlZGVmIHVpbnQzMl90IENvb3JkaW5hdGVkTGF5
ZXJJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEID0gMCB9OwotCi10eXBlZGVm
IHVpbnQ2NF90IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7Ci1lbnVtIHsgSW52YWxpZENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgPSAwIH07Ci0KLS8vIE5PVEU6IENvb3JkaW5hdGVkTGF5ZXJJ
bmZvIHNob3VsZCBvbmx5IHVzZSBQT0QgdHlwZXMsIGFzIHRvIG1ha2Ugc2VyaWFsaXphdGlvbiBm
YXN0ZXIuCi1zdHJ1Y3QgQ29vcmRpbmF0ZWRMYXllckluZm8gewotICAgIENvb3JkaW5hdGVkTGF5
ZXJJbmZvKCkKLSAgICAgICAgOiByZXBsaWNhKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0g
ICAgICAgICwgbWFzayhJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKQotICAgICAgICAsIGltYWdl
SUQoSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpCi0gICAgICAgICwgb3BhY2l0eSgw
KQotICAgICAgICAsIGZsYWdzKDApIHsgfQotCi0gICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGxp
Y2E7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIG1hc2s7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBpbWFnZUlEOwotCi0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBwb3M7Ci0gICAgV2Vi
Q29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBz
aXplOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKLSAgICBXZWJD
b3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBvcGFjaXR5OwotICAgIFdlYkNv
cmU6OkNvbG9yIHNvbGlkQ29sb3I7Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsKLSAgICAgICAgICAgIGJvb2wgZHJh
d3NDb250ZW50IDogMTsKLSAgICAgICAgICAgIGJvb2wgY29udGVudHNWaXNpYmxlIDogMTsKLSAg
ICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDogMTsKLSAgICAgICAgICAgIGJvb2wgbWFz
a3NUb0JvdW5kcyA6IDE7Ci0gICAgICAgICAgICBib29sIHByZXNlcnZlczNEIDogMTsKLSAgICAg
ICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7Ci0gICAgICAgICAgICBib29sIGZpeGVkVG9WaWV3
cG9ydCA6IDE7Ci0gICAgICAgIH07Ci0gICAgICAgIHVuc2lnbmVkIGZsYWdzOwotICAgIH07Ci19
OwotCi19Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAv
LyBDb29yZGluYXRlZExheWVySW5mb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGYzMTg4Yzk1MTJjODgyMjMzYTkyYjdmYzY0NGI0
MGVkNjk2M2RmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3Vy
ZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29w
eXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRTdXJmYWNlX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRTdXJm
YWNlX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBCaXRtYXBUZXh0dXJlOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0Owot
fQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRTdXJmYWNlIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvb3JkaW5hdGVkU3VyZmFjZT4gewotcHVibGljOgot
ICAgIGVudW0gRmxhZyB7Ci0gICAgICAgIE5vRmxhZ3MgPSAwLAotICAgICAgICBTdXBwb3J0c0Fs
cGhhID0gMSA8PCAwLAotICAgIH07Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBGbGFnczsKLQotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBGbGFncyk7Ci0KLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZFN1cmZhY2Uo
KSB7IH0KLQotICAgIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkg
JiBTdXBwb3J0c0FscGhhOyB9Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBj
b25zdCA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgYSBncmFwaGljcyBjb250ZXh0IHRoYXQgY2FuIGJl
IHVzZWQgdG8gcGFpbnQgaW50byB0aGUgYmFja2luZyBzdG9yZS4KLSAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVHcmFwaGljc0NvbnRleHQoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLQotI2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAg
ICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4dHVyZShQYXNzUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmU+LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBzb3VyY2VPZmZzZXQpID0gMDsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCBGbGFncyBmbGFncygpIGNvbnN0ID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jZW5kaWYKLSNlbmRpZiAvLyBDb29yZGluYXRlZFN1cmZhY2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUlu
Zm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VV
cGRhdGVJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3Mjg5ZmNkZjBmZmI5
ZmVlMDZlMDQ0MTk4NDgzMTcwZjgzMmZiMjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvU3VyZmFjZVVwZGF0ZUluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8q
Ci0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFN1cmZhY2VVcGRh
dGVJbmZvX2gKLSNkZWZpbmUgU3VyZmFjZVVwZGF0ZUluZm9faAotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBTdXJmYWNl
VXBkYXRlSW5mbyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3VyZmFjZVVwZGF0ZUluZm8p
OwotCi1wdWJsaWM6Ci0gICAgU3VyZmFjZVVwZGF0ZUluZm8oKSB7IH0KLQotICAgIC8vIFRoZSBy
ZWN0IHRvIGJlIHVwZGF0ZWQuCi0gICAgV2ViQ29yZTo6SW50UmVjdCB1cGRhdGVSZWN0OwotCi0g
ICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIHVzZWQgdG8gcmVuZGVyIHRoaXMgdXBkYXRlLgot
ICAgIGZsb2F0IHNjYWxlRmFjdG9yOwotCi0gICAgLy8gVGhlIGlkIG9mIHRoZSB1cGRhdGUgYXRs
YXMgaW5jbHVkaW5nIHRoZSBzaGFyZWFibGUgYml0bWFwIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZXMu
Ci0gICAgdWludDMyX3QgYXRsYXNJRDsKLQotICAgIC8vIFRoZSBvZmZzZXQgaW4gdGhlIGJpdG1h
cCB3aGVyZSB0aGUgcmVuZGVyZWQgY29udGVudHMgYXJlLgotICAgIFdlYkNvcmU6OkludFBvaW50
IHN1cmZhY2VPZmZzZXQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIFN1cmZhY2VVcGRhdGVJbmZv
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwCmluZGV4IDY4ZjU4ZTg2ODBi
NGNhZmNkZDMwZWU1NmEyOGVmM2E4MzYzNzk4NGEuLmI1YTM4NDU4OWVlOTIwMDY0MDY3ODZiMTBi
NDkyNmUxNjE2NDA2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcApA
QCAtNjgsMTEgKzY4LDYgQEAgYm9vbCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZTo6ZGVj
b2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGEKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IENvb3JkaW5hdGVkU3VyZmFj
ZTo6Y3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIENvb3JkaW5hdGVkU3VyZmFj
ZTo6RmxhZ3MgZmxhZ3MpCi17Ci0gICAgcmV0dXJuIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3Jl
YXRlKHNpemUsIGZsYWdzKTsKLX0KLQogUGFzc1JlZlB0cjxXZWJDb29yZGluYXRlZFN1cmZhY2U+
IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIENvb3Jk
aW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCiB7CiAgICAgUmVmUHRyPFdlYkNvb3JkaW5hdGVk
U3VyZmFjZT4gc3VyZmFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgKaW5kZXgg
YjgyOGFhZDgxNzQ1NDJlZGQzN2IxOGUzN2YyNmNkYzk0YWI4MDlmMC4uMTRhN2MwMDc4NTQ5MDc0
ZDAzNTc5YmQ0OWVmZGQyOGJlNGE1ZmQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlLmgKQEAgLTIyLDggKzIyLDggQEAKICNkZWZpbmUgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlX2gK
IAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZFN1
cmZhY2UuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Nvb3JkaW5hdGVkU3VyZmFjZS5oPgogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiAjaW5j
bHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFdlYkNvb3JkaW5hdGVkU3Vy
ZmFjZSA6IHB1YmxpYyBDb29yZGluYXRlZFN1cmZhY2UgeworY2xhc3MgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlIDogcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZSB7CiBwdWJsaWM6CiAg
ICAgY2xhc3MgSGFuZGxlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGFuZGxlKTsK
QEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgICAgICBXZWJDb3JlOjpHcmFwaGljc1N1cmZh
Y2VUb2tlbiBtX2dyYXBoaWNzU3VyZmFjZVRva2VuOwogI2VuZGlmCiAgICAgICAgIFdlYkNvcmU6
OkludFNpemUgbV9zaXplOwotICAgICAgICBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIG1fZmxh
Z3M7CisgICAgICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgbV9mbGFnczsK
ICAgICB9OwogCiAgICAgLy8gQ3JlYXRlIGEgbmV3IFdlYkNvb3JkaW5hdGVkU3VyZmFjZSwgYW5k
IGFsbG9jYXRlIGVpdGhlciBhIEdyYXBoaWNzU3VyZmFjZSBvciBhIFNoYXJlYWJsZUJpdG1hcCBh
cyBiYWNraW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJmMjc3YTcwZTZlYWVhZTczYmZlMzIwODE4Yzc2NGUw
NDA1MDU1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJP
cGVyYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQot
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb25faAotI2RlZmlu
ZSBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb25faAotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQot
I2luY2x1ZGUgIkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLS8vIFRoaXMgY2xhc3MgaXMgb25seSBhZGRpbmcgdGhlIHByb2dyYW1JZCBvbiB0b3Agb2Yg
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uLiBUaGUgYXJndW1lbnQgZGVjb2RlciBoYXMgbm8KLS8vIGNv
bnRleHQsIHNvIHdlIGNhbm5vdCBzZWFyY2ggaW4gb3VyIGNhY2hlZCBDdXN0b21GaWx0ZXJQcm9n
cmFtcyB3aGlsZSBkZWNvZGluZy4gSW4gdGhhdCBjYXNlCi0vLyBpdCB3aWxsIGp1c3Qgc3RvcmUg
dGhlIHByb2dyYW1JZCBhbmQgbm8gQ3VzdG9tRmlsdGVyUHJvZ3JhbSBpbnN0YW5jZS4gVGhlIHJl
Y2VpdmVyIGlzIHN1cHBvc2VkIHRvCi0vLyBpdGVyYXRlIG9uIHRoaXMgc3RydWN0dXJlIGFuZCBp
bmplY3QgdGhlIHJpZ2h0IEN1c3RvbUZpbHRlclByb2dyYW1zLgotCi1jbGFzcyBXZWJDdXN0b21G
aWx0ZXJPcGVyYXRpb24gOiBwdWJsaWMgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGludCBwcm9ncmFtSUQsIGNv
bnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVk
IG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVz
aFR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkN1c3RvbUZpbHRl
ck9wZXJhdGlvbihwcm9ncmFtLCBwcm9ncmFtSUQsIHNvcnRlZFBhcmFtZXRlcnMsIG1lc2hSb3dz
LCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpKTsKLSAgICB9Ci0KLSAgICBpbnQgcHJvZ3JhbUlEKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9ncmFtSUQ7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJDdXN0b21G
aWx0ZXJPcGVyYXRpb24oUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFtLCBp
bnQgcHJvZ3JhbUlELCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBzb3J0ZWRQYXJh
bWV0ZXJzLCB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZp
bHRlck1lc2hUeXBlIG1lc2hUeXBlKQotICAgICAgICA6IEN1c3RvbUZpbHRlck9wZXJhdGlvbihw
cm9ncmFtLCBzb3J0ZWRQYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBl
KQotICAgICAgICAsIG1fcHJvZ3JhbUlEKHByb2dyYW1JRCkKLSAgICB7Ci0gICAgfQotCi0gICAg
aW50IG1fcHJvZ3JhbUlEOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKENTU19TSEFERVJTKQotCi0jZW5kaWYgLy8gQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYWFhYWRkNmZlZDc5Y2M0OGIzY2U1OTQ4ZTA2Zjc0NmYzNzc3NWNmZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJQcm9ncmFtLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENv
bXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCi0jZGVmaW5lIFdlYkN1c3RvbUZpbHRlclByb2dyYW1f
aAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBFTkFCTEUoQ1NTX1NIQURFUlMp
Ci0jaW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJDb25zdGFudHMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0N1c3RvbUZpbHRlclByb2dyYW0uaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIFdlYkN1c3RvbUZpbHRlclByb2dyYW0gOiBwdWJsaWMgV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UHJvZ3JhbSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbT4gY3JlYXRlKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0cmluZyBtX2ZyYWdt
ZW50U2hhZGVyU3RyaW5nLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSBwcm9ncmFt
VHlwZSwgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdz
LCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJT
dHJpbmcsIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcsIHByb2dyYW1UeXBlLCBtaXhTZXR0aW5ncywg
bWVzaFR5cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtJiBvKSBjb25zdCBPVkVSUklERQotICAgIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSAhPSBvcGVyYXRvciBiZWNhdXNlIHRoYXQgd291bGQgcmVj
dXJzaXZlbHkgY2FsbCB0aGlzIG1ldGhvZC4KLSAgICAgICAgaWYgKCFDdXN0b21GaWx0ZXJQcm9n
cmFtOjpvcGVyYXRvcj09KG8pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgY2FzdCBpcyB1Z2x5LCBidXQgV2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bSBpcyB0aGUgc2luZ2xlIGltcGxlbWVudGF0aW9uIG9mIEN1c3RvbUZpbHRlclByb2dyYW0gb24g
VUkgUHJvY2Vzcy4KLSAgICAgICAgY29uc3QgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbSogb3RoZXIg
PSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKj4oJm8pOwotICAgICAg
ICByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTdHJpbmcgPT0gb3RoZXItPnZlcnRleFNoYWRlclN0cmlu
ZygpICYmIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcgPT0gb3RoZXItPmZyYWdtZW50U2hhZGVyU3Ry
aW5nKCk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBTdHJpbmcgdmVydGV4U2hh
ZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7
IH0KLSAgICB2aXJ0dWFsIFN0cmluZyBmcmFnbWVudFNoYWRlclN0cmluZygpIGNvbnN0IE9WRVJS
SURFIHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmc7IH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB3aWxsSGF2ZUNsaWVudHMoKSBPVkVSUklERSB7IG5vdGlmeUNsaWVudHMoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZW1vdmVMYXN0Q2xpZW50KCkgT1ZFUlJJREUgeyB9Ci0KLXByaXZhdGU6
Ci0gICAgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbShTdHJpbmcgdmVydGV4U2hhZGVyU3RyaW5nLCBT
dHJpbmcgZnJhZ21lbnRTaGFkZXJTdHJpbmcsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1U
eXBlIHByb2dyYW1UeXBlLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3Mg
bWl4U2V0dGluZ3MsIFdlYkNvcmU6OkN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQotICAg
ICAgICA6IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW0ocHJvZ3JhbVR5cGUsIG1peFNldHRp
bmdzLCBtZXNoVHlwZSkKLSAgICAgICAgLCBtX3ZlcnRleFNoYWRlclN0cmluZyh2ZXJ0ZXhTaGFk
ZXJTdHJpbmcpCi0gICAgICAgICwgbV9mcmFnbWVudFNoYWRlclN0cmluZyhmcmFnbWVudFNoYWRl
clN0cmluZykKLSAgICB7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1fdmVydGV4U2hhZGVyU3RyaW5n
OwotICAgIFN0cmluZyBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIEVOQUJM
RShDU1NfU0hBREVSUykKLQotI2VuZGlmIC8vIFdlYkN1c3RvbUZpbHRlclByb2dyYW1faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJLaXQyL1Rhcmdl
dC5wcmkKaW5kZXggODMyOTRkNDQxY2ViYWJmNWRmMjY1OTYwMGU1ZWJkOWU2OTdkYzk1NC4uYmVk
Y2EzYWVlNTQyMDljZmIxNmQxYTk3NDk5YTQxZTExZjVlNzgyOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCkBAIC0x
MzksMTEgKzEzOSw3IEBAIEhFQURFUlMgKz0gXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5o
IFwKICAgICBTaGFyZWQvV2ViVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmggXAogICAgIFNoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIFwK
LSAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVySW5mby5oIFwK
LSAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaCBcCi0g
ICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUluZm8uaCBcCiAgICAg
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmggXAotICAg
IFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAg
ICAgU2hhcmVkL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5Nb2R1bGUuaCBcCiAgICAg
U2hhcmVkL1BsdWdpbnMvTlBSZW1vdGVPYmplY3RNYXAuaCBcCiAgICAgU2hhcmVkL1BsdWdpbnMv
TlBJZGVudGlmaWVyRGF0YS5oIFwKQEAgLTIxNiw5ICsyMTIsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmggXAogICAgIFVJ
UHJvY2Vzcy9CYWNraW5nU3RvcmUuaCBcCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fkcy9Eb3dubG9h
ZFByb3h5LmggXAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmggXAogICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggXAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggXAogICAgIFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0Nv
bnRyb2xsZXIuaCBcCiAgICAgVUlQcm9jZXNzL0RyYXdpbmdBcmVhUHJveHkuaCBcCiAgICAgVUlQ
cm9jZXNzL0RyYXdpbmdBcmVhUHJveHlJbXBsLmggXApAQCAtMzc0LDEyICszNjgsNyBAQCBIRUFE
RVJTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmggXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmggXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmggXAotICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdC5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZFRpbGUuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1Rh
cEhpZ2hsaWdodENvbnRyb2xsZXIuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VPdmVy
bGF5LmggXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5oIFwKQEAgLTU4
MCw5ICs1NjksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24v
V2ViUHJvdGVjdGlvblNwYWNlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAg
XAogICAgIFVJUHJvY2Vzcy9xdC9CYWNraW5nU3RvcmVRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
Y3BwIFwKLSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5jcHAgXAogICAgIFVJUHJvY2Vzcy9EZWZhdWx0VW5kb0NvbnRyb2xsZXIuY3BwIFwKICAgICBV
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvRG93
bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwIFwKQEAgLTc2NCwxMiArNzUxLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0VuY29kZXJBZGFwdGVyLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIFwKLSAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdl
QmFja2luZy5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAotICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdl
T3ZlcmxheS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcAppbmRleCA3ZjIzOGY4ZmM4ODhmOTYwNTZlYzk1ZWJmZTJmMWZjNThlODcwMTYyLi43NzJi
NmFjYmYyYWYxZjhjYTlmMWE4YjBiMjI3MTE5YzNkMzJlOTAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1
ZGUgIkZpbmRDbGllbnRFZmwuaCIKICNpbmNsdWRlICJGb3JtQ2xpZW50RWZsLmgiCiAjaW5jbHVk
ZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIu
aCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnREZWZh
dWx0SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRMZWdhY3lJbXBsLmgiCkBAIC02Myw2ICs2
Miw3IEBACiAjaW5jbHVkZSA8RWRqZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRp
ZXNFZmwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
TGF5ZXJUcmVlUmVuZGVyZXIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLSW1hZ2VDYWlyby5oPgog
CiAjaWYgRU5BQkxFKFZJQlJBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuaAppbmRleCBhMjEzZjk3ZDVlYmI0MTk2MzE2YTllYWNlMTI4YjlhMjI5ZWQ1MDBk
Li5jMWQxMjNlZTRlZmQ0M2FkMzFmYjhlNTY4MDk0NTAzN2FjNmQxNTM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC02OCwxMCArNjgsNiBAQCBjbGFz
cyBXZWJQb3B1cE1lbnVQcm94eUVmbDsKICNpZiBFTkFCTEUoVklCUkFUSU9OKQogY2xhc3MgVmli
cmF0aW9uQ2xpZW50RWZsOwogI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKLSNlbmRpZgogfQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC03OSw2ICs3NSw5IEBAIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIENvbG9y
OwogY2xhc3MgQ3Vyc29yOwogY2xhc3MgSW50U2l6ZTsKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCitjbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKKyNlbmRpZgogfQogCiBjbGFzcyBFd2tD
b250ZXh0OwpAQCAtMjE5LDcgKzIxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwbGF5VGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxFd2tWaWV3PiopOwogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRl
cmVyKCk7CisgICAgV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVy
KCk7CiAjZW5kaWYKIAogICAgIHZvaWQgaW5mb3JtSWNvbkNoYW5nZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKaW5kZXggZmEwMTNh
ZjUzNzY4MGE0MmIzOTM5ZjdjMjhlZjcwOGE2ZWZkYTBjZC4uZGZjNThjNDA1Zjg1MzBlMDk2NjAw
N2E0Y2NhMjY4OGQ5NjI2OTgzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAicXF1
aWNrd2VicGFnZV9wLmgiCiAKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdl
RXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlU0dOb2RlLmgiCiAjaW5jbHVkZSAi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTMxLDYgKzMwLDcgQEAKICNpbmNsdWRlICJxcXVp
Y2t3ZWJ2aWV3X3AuaCIKICNpbmNsdWRlICJxd2Via2l0dGVzdF9wLmgiCiAjaW5jbHVkZSA8UVF1
aWNrV2luZG93PgorI2luY2x1ZGUgPFdlYkNvcmUvTGF5ZXJUcmVlUmVuZGVyZXIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtODgsNyArODgsNyBAQCBRU0dOb2RlKiBRUXVpY2tX
ZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9kZSwgVXBkYXRlUGFpbnROb2Rl
RGF0YSopCiAgICAgaWYgKCFkLT53ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCiAgICAgICAg
IHJldHVybiBvbGROb2RlOwogCi0gICAgTGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gZC0+
Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAg
ICBXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBkLT5jb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eSgpLT5sYXllclRyZWVSZW5kZXJlcigpOwogCiAgICAgUXRXZWJQYWdl
U0dOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8UXRXZWJQYWdlU0dOb2RlKj4ob2xkTm9kZSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3
LmNwcAppbmRleCAyZGQ0NWQwZWZmZTllMGYzZmZiYWQzNjQ5ZDMwZTk1NzZmYmY5ZGMzLi43ZWFh
Y2E1ZGQyNDY5MTQ1YTcyZTA4NjI5ZmVkODRjOGVjZWFkODg3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwCkBAIC0yMyw3ICsy
Myw2IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKICNpbmNs
dWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgotI2luY2x1
ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgogI2lu
Y2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAicXJhd3dlYnZpZXdfcF9wLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9MYXllclRyZWVSZW5kZXJlci5oPgogI2luY2x1ZGUgPFdlYktpdDIv
cXJhd3dlYnZpZXdfcC5oPgogCiB2b2lkIFFSYXdXZWJWaWV3UHJpdmF0ZTo6ZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMzYz
LDcgKzM2Myw3IEBAIFdLUGFnZVJlZiBRUmF3V2ViVmlldzo6cGFnZVJlZigpCiAgICAgcmV0dXJu
IHRvQVBJKGQtPm1fd2ViUGFnZVByb3h5LmdldCgpKTsKIH0KIAotV2ViS2l0OjpMYXllclRyZWVS
ZW5kZXJlciogUVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QKK1dlYkNvcmU6
OkxheWVyVHJlZVJlbmRlcmVyKiBRUmF3V2ViVmlldzo6bGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25z
dAogewogICAgIFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT5tX3dl
YlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKICAgICBpZiAoIWRyYXdpbmdBcmVhKQpAQCAtMzc2
LDcgKzM3Niw3IEBAIFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXIqIFFSYXdXZWJWaWV3OjpsYXll
clRyZWVSZW5kZXJlcigpIGNvbnN0CiAKIHZvaWQgUVJhd1dlYlZpZXc6OnBhaW50KGNvbnN0IFFN
YXRyaXg0eDQmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgdW5zaWduZWQgcGFpbnRGbGFncykK
IHsKLSAgICBXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxheWVyVHJlZVJl
bmRlcmVyKCk7CisgICAgV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXIqIHJlbmRlcmVyID0gbGF5
ZXJUcmVlUmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2
aWV3X3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3
X3AuaAppbmRleCAwMTU4MTVhZDhjNzBhOWRlMDVkODFiYTZhNjMwMjEwYjcyMmNmN2Y0Li5iZjRk
YmYyZWE4NGUzYjgyNzgxYmVkMDFhYjk0ODNlMDZmZWMyZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlld19wLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdfcC5oCkBAIC00Nyw3ICs0
Nyw3IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogY2xhc3MgUVJhd1dlYlZpZXdQcml2YXRlOwogCi1u
YW1lc3BhY2UgV2ViS2l0IHsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExheWVyVHJlZVJl
bmRlcmVyOwogfQogCkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZFRv
dWNoRXZlbnQoUVRvdWNoRXZlbnQqKTsKIAogcHJpdmF0ZToKLSAgICBXZWJLaXQ6OkxheWVyVHJl
ZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0OworICAgIFdlYkNvcmU6OkxheWVy
VHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0OwogCiAgICAgUVJhd1dlYlZp
ZXdQcml2YXRlKiBkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0
b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE3YmIxMDg2ZWU3YTg2N2Iy
ZDNmZDY4MGM1YTM3ZGIwNWI4YjdkOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAs
MCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIgotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0j
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwot
Ci1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6
OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIpCi17Ci0g
ICAgaWYgKCFtX3N1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZsb2F0UmVjdCB0aWxl
UmVjdChtX3RpbGVSZWN0KTsKLSAgICB0aWxlUmVjdC5zY2FsZSgxLiAvIG1fc2NhbGUpOwotICAg
IGJvb2wgc2hvdWxkUmVzZXQgPSBmYWxzZTsKLSAgICBpZiAodGlsZVJlY3QgIT0gcmVjdCgpKSB7
Ci0gICAgICAgIHNldFJlY3QodGlsZVJlY3QpOwotICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7
Ci0gICAgfQotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gdGhpcy0+dGV4dHVy
ZSgpOwotICAgIGlmICghdGV4dHVyZSkgewotICAgICAgICB0ZXh0dXJlID0gdGV4dHVyZU1hcHBl
ci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBzZXRUZXh0dXJlKHRleHR1cmUuZ2V0KCkpOwot
ICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUKHRleHR1cmVN
YXBwZXItPm1heFRleHR1cmVTaXplKCkud2lkdGgoKSA+PSBtX3RpbGVSZWN0LnNpemUoKS53aWR0
aCgpICYmIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkuaGVpZ2h0KCkgPj0gbV90aWxl
UmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotICAgIGlmIChzaG91bGRSZXNldCkKLSAgICAgICAgdGV4
dHVyZS0+cmVzZXQobV90aWxlUmVjdC5zaXplKCksIG1fc3VyZmFjZS0+c3VwcG9ydHNBbHBoYSgp
KTsKLQotICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJlLCBtX3NvdXJjZVJlY3Qs
IG1fc3VyZmFjZU9mZnNldCk7Ci0gICAgbV9zdXJmYWNlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
U3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIG1fc291cmNl
UmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgbV90aWxlUmVjdCA9IHRpbGVSZWN0OwotICAgIG1fc3Vy
ZmFjZU9mZnNldCA9IG9mZnNldDsKLSAgICBtX3N1cmZhY2UgPSBidWZmZXI7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUodWludDMyX3QgaWQsIGZsb2F0IHNj
YWxlKQotewotICAgIG1fdGlsZXMuYWRkKGlkLCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUo
c2NhbGUpKTsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU6OnJlbW92ZVRpbGUodWludDMyX3QgaWQpCi17Ci0gICAgQVNTRVJUKG1fdGlsZXMu
Y29udGFpbnMoaWQpKTsKLSAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGlkKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlQWxsVGlsZXMoKQotewotICAgIEhhc2hNYXA8
dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPHVpbnQzMl90LCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGU+OjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGl0LT5rZXkpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1cGRhdGVUaWxlKHVpbnQzMl90IGlkLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+IGJhY2tCdWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17Ci0g
ICAgSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVuZCgp
KTsKLSAgICBpdC0+dmFsdWUuaW5jcmVtZW50UmVwYWludENvdW50KCk7Ci0gICAgaXQtPnZhbHVl
LnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7
Ci19Ci0KLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnRleHR1cmUoKSBjb25zdAotewotICAgIEhhc2hNYXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZT46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Ci0gICAg
Zm9yIChIYXNoTWFwPHVpbnQzMl90LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnZhbHVlLnRleHR1cmUoKTsK
LSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYg
c2l6ZSkKLXsKLSAgICBtX3NpemUgPSBzaXplOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRTaG93
VGlsZURlYnVnVmlzdWFscygpCi17Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgcmV0dXJuIChxZ2V0
ZW52KCJRVF9XRUJLSVRfU0hPV19DT01QT1NJVElOR19ERUJVR19WSVNVQUxTIikgPT0gIjEiKTsK
LSNlbGlmIFVTRShDQUlSTykKLSAgICByZXR1cm4gKFN0cmluZyhnZXRlbnYoIldFQktJVF9TSE9X
X0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKSkgPT0gIjEiKTsKLSNlbmRpZgotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUaWxlc1Rv
VGV4dHVyZU1hcHBlcihWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiYgdGlsZXMsIFRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2ssIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIFRleHR1cmVNYXBwZXJUaWxlKiB0aWxlID0gdGlsZXNbaV07Ci0gICAgICAgIHRp
bGUtPnBhaW50KHRleHR1cmVNYXBwZXIsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywgY2FsY3Vs
YXRlRXhwb3NlZFRpbGVFZGdlcyhyZWN0LCB0aWxlLT5yZWN0KCkpKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgc2hvdWxkRGVidWcgPSBzaG91bGRTaG93VGlsZURlYnVnVmlzdWFscygpOwotICAgICAg
ICBpZiAoIXNob3VsZERlYnVnKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgdGV4
dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihDb2xvcigweEZGLCAwLCAwKSwgMiwgdGlsZS0+cmVjdCgp
LCB0cmFuc2Zvcm0pOwotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3UmVwYWludENvdW50ZXIo
c3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKj4odGlsZSktPnJlcGFpbnRD
b3VudCgpLCA4LCB0aWxlLT5yZWN0KCkubG9jYXRpb24oKSwgdHJhbnNmb3JtKTsKLSAgICB9Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0
bWFwVGV4dHVyZSogbWFzaykKLXsKLSAgICBpZiAobV90aWxlcy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBBU1NFUlQoIW1fc2l6ZS5pc1plcm8oKSk7Ci0KLSAgICBWZWN0b3I8VGV4
dHVyZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFpbnQ7Ci0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJU
aWxlKj4gcHJldmlvdXNUaWxlc1RvUGFpbnQ7Ci0KLSAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMg
ZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2FzZSB0aGUgb3BhY2l0eSBoYXMgY2hhbmdlZC4KLSAg
ICBIYXNoTWFwPHVpbnQzMl90LCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+OjppdGVyYXRv
ciBlbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIEZsb2F0UmVjdCBjb3ZlcmVkUmVjdDsKLSAgICBm
b3IgKEhhc2hNYXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT46Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOwotICAgICAgICBpZiAo
IXRpbGUudGV4dHVyZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHRp
bGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7Ci0gICAgICAgICAgICB0aWxlc1RvUGFpbnQuYXBwZW5k
KCZ0aWxlKTsKLSAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRlKHRpbGUucmVjdCgpKTsKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25seSBzaG93IHRo
ZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gsIG90aGVyd2lzZSBlZmZlY3Qg
bG9va3MgbGlrZSBhIGJ1Zy4KLSAgICAgICAgLy8gV2Ugc2hvdyB0aGUgcHJldmlvdXMtc2NhbGUg
dGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0aCBhbnkgY3VycmVudC1zY2Fs
ZSB0aWxlLgotICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYgY292ZXJlZFJlY3QuaW50ZXJz
ZWN0cyh0aWxlLnJlY3QoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBwcmV2
aW91c1RpbGVzVG9QYWludC5hcHBlbmQoJnRpbGUpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBy
ZWN0T25Db250ZW50cyhGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7Ci0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07Ci0gICAgLy8gdGFyZ2V0
UmVjdCBpcyBvbiB0aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0sIHNvIHdlIG11c3QgY29t
cGFyZSB0d28gcmVjdHMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIC8v
IFNlZSBUaWxlZEJhY2tpbmdTdG9yZS4KLSAgICBhZGp1c3RlZFRyYW5zZm9ybS5tdWx0aXBseShU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6cmVjdFRvUmVjdChyZWN0T25Db250ZW50cywgdGFyZ2V0UmVj
dCkpOwotCi0gICAgcGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcihwcmV2aW91c1RpbGVzVG9QYWlu
dCwgdGV4dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3RP
bkNvbnRlbnRzKTsKLSAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHRpbGVzVG9QYWludCwg
dGV4dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3RPbkNv
bnRlbnRzKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9w
ZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKLXsKLSAgICBIYXNoU2V0PHVp
bnQzMl90Pjo6aXRlcmF0b3IgdGlsZXNUb1JlbW92ZUVuZCA9IG1fdGlsZXNUb1JlbW92ZS5lbmQo
KTsKLSAgICBmb3IgKEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciBpdCA9IG1fdGlsZXNUb1Jl
bW92ZS5iZWdpbigpOyBpdCAhPSB0aWxlc1RvUmVtb3ZlRW5kOyArK2l0KQotICAgICAgICBtX3Rp
bGVzLnJlbW92ZSgqaXQpOwotICAgIG1fdGlsZXNUb1JlbW92ZS5jbGVhcigpOwotCi0gICAgSGFz
aE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgdGls
ZXNFbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVUaWxlPjo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0
ICE9IHRpbGVzRW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVy
ZU1hcHBlcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggYWU1YWY4ZDRmYTJmYzllYmQyMTE5NzI3ZmNhZGQ4NTk2MjMzMGY5OS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgotICovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAotI2RlZmluZSBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZV9oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0K
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsK
LQotY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlIDogcHVibGljIFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJUaWxlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQotICAgICAgICA6IFRleHR1cmVNYXBwZXJUaWxl
KFdlYkNvcmU6OkZsb2F0UmVjdCgpKQotICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCi0gICAgICAg
ICwgbV9yZXBhaW50Q291bnQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGZsb2F0IHNj
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIGlubGluZSB2b2lkIGluY3JlbWVu
dFJlcGFpbnRDb3VudCgpIHsgKyttX3JlcGFpbnRDb3VudDsgfQotICAgIGlubGluZSBpbnQgcmVw
YWludENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9yZXBhaW50Q291bnQ7IH0KLSAgICB2b2lkIHN3
YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIHNldEJhY2tCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFj
ZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsKLSAgICBXZWJDb3JlOjpJbnRS
ZWN0IG1fdGlsZVJlY3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zdXJmYWNlT2Zmc2V0Owot
ICAgIGZsb2F0IG1fc2NhbGU7Ci0gICAgaW50IG1fcmVwYWludENvdW50OwotfTsKLQotY2xhc3Mg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZSB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJ
RCwgZmxvYXQpOwotICAgIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpOwotICAgIHZv
aWQgcmVtb3ZlQWxsVGlsZXMoKTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKTsgfQotICAgIHZvaWQg
Y29tbWl0VGlsZU9wZXJhdGlvbnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciopOwotICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnRUb1RleHR1cmVNYXBwZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciosIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQs
IFdlYkNvcmU6OkJpdG1hcFRleHR1cmUqKTsKLQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZSgpCi0gICAgICAgIDogbV9zY2FsZSgxLikKLSAgICB7IH0KLSAgICB2b2lkIHBh
aW50VGlsZXNUb1RleHR1cmVNYXBwZXIoVmVjdG9yPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxl
Kj4mLCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSosIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOwotCi0gICAgSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmVUaWxlPiBtX3RpbGVzOwotICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1fdGlsZXNUb1JlbW92
ZTsKLSAgICBXZWJDb3JlOjpGbG9hdFNpemUgbV9zaXplOwotICAgIGZsb2F0IG1fc2NhbGU7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLSNlbmRpZgotCi0jZW5kaWYgLy8gQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwCmluZGV4IDg3ZmIxNzE5MDQ0MzFlNDVjNzBlYzQ0ZjM2NGE2NTI0
NjE3Y2RiZTkuLjMzOTA2OGU4MjMzZGE5YjBmZjA3M2EyNzRjMjgxMzFkNGY4NzA5OWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAK
QEAgLTIyLDEzICsyMiwxMyBAQAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICNpbmNs
dWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogCi0jaW5jbHVkZSAiQ29vcmRp
bmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNz
YWdlcy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc1Byb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZExheWVySW5m
by5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCkBAIC02NSwxMyArNjUsMTMgQEAgdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlzcGF0Y2hVcGRhdGUoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYgZnVuY3QKICAgICBtX3JlbmRlcmVyLT5hcHBlbmRVcGRhdGUoZnVuY3Rp
b24pOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVUaWxl
Rm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8pCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpj
cmVhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQogewogICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpjcmVhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUlu
Zm8uc2NhbGVGYWN0b3IpKTsKICAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlE
LCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViS2l0OjpT
dXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7CiAgICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBt
X3N1cmZhY2VzLmZpbmQodXBkYXRlSW5mby5hdGxhc0lEKTsKICAgICBBU1NFUlQoaXQgIT0gbV9z
dXJmYWNlcy5lbmQoKSk7CkBAIC0xMzIsMTMgKzEzMiwxMyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKIHsKICAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlQ3VzdG9tRmls
dGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKIH0KLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25z
dCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCit2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGlu
dCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQogewogICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVDdXN0b21GaWx0
ZXJQcm9ncmFtLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgcHJvZ3JhbUluZm8pKTsKIH0KICNlbmRp
ZgogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGNvdmVyZWRSZWN0KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlk
UmVuZGVyRnJhbWUoY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRSZWN0JiBj
b3ZlcmVkUmVjdCkKIHsKICAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6Zmx1c2hMYXllckNoYW5nZXMsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKICAgICB1cGRhdGVWaWV3
cG9ydCgpOwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnB1cmdlQmFja2luZ1N0b3JlcygpCiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdl
KCktPnByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQ
dXJnZUJhY2tpbmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgp
KTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKK3ZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7
CiAgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEJhY2tncm91
bmRDb2xvciwgbV9yZW5kZXJlci5nZXQoKSwgY29sb3IpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IDk0ZmE0NzZmMDkyYjRk
ZmRjOGYzYTM0YTE4ZjFkZjFjMzFkZjM5ODIuLjcxODM2YWI3YjkwODY3ZDFmYzAyMzJiOTcyOGZl
N2I3M2Q2OTViMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkuaApAQCAtMjQsMTAgKzI0LDggQEAKIAogI2luY2x1ZGUgIkJhY2tpbmdTdG9y
ZS5oIgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgotI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgi
CiAjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KQEAg
LTM1LDgyICszMyw4OSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NTdXJmYWNlVG9rZW4u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFNp
emUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xheWVyVHJlZVJlbmRlcmVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgogI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotCituYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKLWNsYXNzIExheWVyVHJlZVJlbmRlcmVyOwor
Y2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFz
cyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSB7CitjbGFzcyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlckNsaWVudCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkp
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxpY2l0IENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKLSAgICB+Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5
ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJik7
Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZpcnR1YWwgfkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVy
U3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySW5mbyYpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRD4mKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRDb21w
b3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZp
bHRlck9wZXJhdGlvbnMmKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKFdl
YkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9u
cyYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIHZvaWQgY3JlYXRlQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dy
YW1JbmZvJik7CiAgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CiAj
ZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29y
ZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25z
dCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0
aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5n
TGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7CisgICAg
dm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKICAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQgcGFnZVNjYWxlRmFjdG9yLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKICAgICB2b2lkIGRpZFJlbmRlckZy
YW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYgY292ZXJlZFJlY3QpOwotICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5
ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOworICAgIHZvaWQgY3JlYXRl
VGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUlu
Zm8mKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCByZW1vdmVUaWxlRm9yTGF5ZXIo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwogICAgIHZvaWQg
Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRT
dXJmYWNlOjpIYW5kbGUmKTsKICAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQpOwotICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpOwotICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7Ci0gICAgdm9pZCBj
bGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAg
IHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAg
IHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7CisgICAg
dm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2Fn
ZUlELCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQo
KTsKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xs
UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pOwogI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQotICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZVRva2VuJik7Ci0gICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgZnJvbnRCdWZmZXIpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQpOworICAgIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRv
a2VuJik7CisgICAgdm9pZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgZnJvbnRCdWZmZXIpOworICAgIHZvaWQgZGVzdHJveUNhbnZhcyhXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQpOwogI2VuZGlmCi0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMo
KTsKLSAgICBMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJl
dHVybiBtX3JlbmRlcmVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
OworICAgIFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExheWVyQW5pbWF0
aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJik7CiAgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwog
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHJlcXVlc3RBbmlt
YXRpb25GcmFtZSgpOwotICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVSZWFkeSgpOwogI2VuZGlmCiAg
ICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIAogICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAKKyAgICAvLyBMYXllclRyZWVSZW5k
ZXJlckNsaWVudCBNZXRob2RzCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgT1ZFUlJJREU7CisjZW5kaWYK
KyAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVWaWV3cG9ydCgpIE9WRVJSSURFOworCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkaXNwYXRj
aFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CiAKICAgICBEcmF3aW5nQXJlYVByb3h5
KiBtX2RyYXdpbmdBcmVhUHJveHk7Ci0gICAgUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiBtX3Jl
bmRlcmVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJlcj4gbV9yZW5kZXJl
cjsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9sYXN0U2VudFZpc2libGVSZWN0OwogICAgIGZs
b2F0IG1fbGFzdFNlbnRTY2FsZTsKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fbGFzdFNlbnRU
cmFqZWN0b3J5VmVjdG9yOwotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCAvKiBhdGxhc0lE
ICovLCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+IFN1cmZhY2VNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPHVpbnQzMl90IC8qIGF0bGFzSUQgKi8sIFJlZlB0cjxXZWJDb3JlOjpDb29yZGlu
YXRlZFN1cmZhY2U+ID4gU3VyZmFjZU1hcDsKICAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZXM7CiB9
OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmCisjZW5kaWYgLy8gVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogCiAjZW5kaWYgLy8gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgppbmRleCBjNWU1MmRjOGI4MGE0NTgyZjhhYWVkN2Iw
ZGUyNTE0MDEwYzc5MGQxLi44NmM2MTMzMzkzNmNlNTAyMDQwOGJlNjIwMTA2MzQyMTZlM2QwYjRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTksNyArMTksNyBAQAogCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQogbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkgTGVnYWN5UmVjZWl2ZXIgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJf
dCBpZCwgV2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCisgICAgU2V0Q29t
cG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SW5mbyBsYXllckluZm8pCiAgICAgU2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQzMl90
IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
ICAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6Rmls
dGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQpAQCAtMzEsOCArMzEsOCBAQCBtZXNzYWdlcyAtPiBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCiAgICAgQ3JlYXRlQ29tcG9zaXRpbmdMYXllcnMo
VmVjdG9yPHVpbnQzMl90PiBpZHMpCiAgICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoVmVjdG9y
PHVpbnQzMl90PiBpZHMpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpTdXJm
YWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50MzJf
dCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdl
YktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBDcmVhdGVUaWxlRm9yTGF5
ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRp
bGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVwZGF0
ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6
OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8p
CiAgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCkKICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBXZWJLaXQ6OldlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKICAgICBSZW1vdmVVcGRhdGVBdGxhcyh1
aW50MzJfdCBhdGxhc0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmE0MDZkMDRkYWViYjc2Yzc2MDljM2YwNzViZGIx
ZTljYzQ0YTkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJl
bmRlcmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDcyNiArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLQotICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRl
ICJMYXllclRyZWVSZW5kZXJlci5oIgotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUlELmgi
Ci0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNr
aW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVJbmZvLmgiCi0jaW5jbHVkZSA8T3Bl
bkdMU2hpbXMuaD4KLSNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCi0jaW5j
bHVkZSAiV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi11c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlzcGF0Y2hPbk1haW5U
aHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCi17Ci0gICAgaWYgKGlzTWFp
blRocmVhZCgpKQotICAgICAgICBmdW5jdGlvbigpOwotICAgIGVsc2UKLSAgICAgICAgY2FsbE9u
TWFpblRocmVhZChmdW5jdGlvbik7Ci19Ci0KLXN0YXRpYyBGbG9hdFBvaW50IGJvdW5kZWRTY3Jv
bGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudFNpemUpCi17
Ci0gICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueCgp
LCAwLjBmKTsKLSAgICBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblgs
IGNvbnRlbnRTaXplLndpZHRoKCkgLSB2aXNpYmxlQ29udGVudFJlY3Qud2lkdGgoKSk7Ci0KLSAg
ICBmbG9hdCBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi55KCksIDAu
MGYpOwotICAgIHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWSwgY29u
dGVudFNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJlY3QuaGVpZ2h0KCkpOwotICAgIHJl
dHVybiBGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uWCwgc2Nyb2xsUG9zaXRpb25ZKTsKLX0KLQot
c3RhdGljIGJvb2wgbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQotewotICAgIHJldHVybiBsYXllci0+ZHJhd3NDb250ZW50KCkgJiYgbGF5ZXItPmNvbnRl
bnRzQXJlVmlzaWJsZSgpICYmICFsYXllci0+c2l6ZSgpLmlzRW1wdHkoKTsKLX0KLQotTGF5ZXJU
cmVlUmVuZGVyZXI6OkxheWVyVHJlZVJlbmRlcmVyKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKLSAgICA6IG1fY29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkoY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCi0gICAgLCBt
X2lzQWN0aXZlKGZhbHNlKQotICAgICwgbV9yb290TGF5ZXJJRChJbnZhbGlkQ29vcmRpbmF0ZWRM
YXllcklEKQotICAgICwgbV9hbmltYXRpb25zTG9ja2VkKGZhbHNlKQotI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICAsIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQoZmFs
c2UpCi0jZW5kaWYKLSAgICAsIG1fYmFja2dyb3VuZENvbG9yKENvbG9yOjp3aGl0ZSkKLSAgICAs
IG1fc2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNlKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci19Ci0KLUxheWVyVHJlZVJlbmRlcmVyOjp+TGF5ZXJUcmVlUmVuZGVyZXIoKQotewotfQot
Ci12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJl
Y3QmIGNsaXBSZWN0LCBUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3MpCi17Ci0g
ICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpIHsKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOwotICAgICAgICBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpLT5zZXRF
bmFibGVFZGdlRGlzdGFuY2VBbnRpYWxpYXNpbmcodHJ1ZSk7Ci0gICAgfQotCi0gICAgQVNTRVJU
KG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9w
ZW5HTE1vZGUpOwotICAgIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0KLSAgICBhZGp1c3RQb3NpdGlv
bkZvckZpeGVkTGF5ZXJzKCk7Ci0gICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9
IHJvb3RMYXllcigpOwotICAgIGlmICghY3VycmVudFJvb3RMYXllcikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVy
KGN1cnJlbnRSb290TGF5ZXIpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbGF5ZXItPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLSAg
ICBpZiAoIW1fYW5pbWF0aW9uc0xvY2tlZCkKLSAgICAgICAgbGF5ZXItPmFwcGx5QW5pbWF0aW9u
c1JlY3Vyc2l2ZWx5KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKFBhaW50
RmxhZ3MpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIGNsaXBSZWN0KTsKLQotICAgIGlmIChtX3NldERyYXdzQmFja2dyb3VuZCkgewotICAg
ICAgICBSR0JBMzIgcmdiYSA9IG1ha2VSR0JBMzJGcm9tRmxvYXRzKG1fYmFja2dyb3VuZENvbG9y
LnJlZCgpLAotICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSwgbV9iYWNrZ3Jv
dW5kQ29sb3IuYmx1ZSgpLAotICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSAq
IG9wYWNpdHkpOwotICAgICAgICBtX3RleHR1cmVNYXBwZXItPmRyYXdTb2xpZENvbG9yKGNsaXBS
ZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBDb2xvcihyZ2JhKSk7Ci0gICAgfQotCi0gICAg
aWYgKGN1cnJlbnRSb290TGF5ZXItPm9wYWNpdHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJlbnRSb290
TGF5ZXItPnRyYW5zZm9ybSgpICE9IG1hdHJpeCkgewotICAgICAgICBjdXJyZW50Um9vdExheWVy
LT5zZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFu
c2Zvcm0obWF0cml4KTsKLSAgICAgICAgY3VycmVudFJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotICAgIH0KLQotICAgIGxheWVyLT5wYWludCgpOwot
ICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kQ2xpcCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5k
UGFpbnRpbmcoKTsKLQotICAgIGlmIChsYXllci0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmlu
Z0FuaW1hdGlvbnMoKSkKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJU
cmVlUmVuZGVyZXI6OnVwZGF0ZVZpZXdwb3J0LCB0aGlzKSk7Ci0KLSNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCi0gICAgaWYgKG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQpIHsK
LSAgICAgICAgbV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZCA9IGZhbHNlOwotICAgICAgICBkaXNw
YXRjaE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6YW5pbWF0aW9uRnJhbWVS
ZWFkeSwgdGhpcykpOwotICAgIH0KLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YW5pbWF0aW9uRnJhbWVSZWFk
eSgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9jb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS0+YW5pbWF0aW9uRnJhbWVSZWFkeSgpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQotewotICAgIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0
ZWQgPSB0cnVlOwotfQotI2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9H
cmFwaGljc0NvbnRleHQoQmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBwYWlu
dGVyKQotewotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBw
ZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVy
LT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKLSAg
ICBzeW5jUmVtb3RlQ29udGVudCgpOwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0
b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50
ZXIpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0Nv
bnRleHQpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwotCi0gICAgaWYg
KG1fc2V0RHJhd3NCYWNrZ3JvdW5kKQotICAgICAgICBtX3RleHR1cmVNYXBwZXItPmRyYXdTb2xp
ZENvbG9yKGdyYXBoaWNzQ29udGV4dC5jbGlwQm91bmRzKCksIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIG1fYmFja2dyb3VuZENvbG9yKTsKLQotICAgIGxheWVyLT5wYWludCgpOwotICAgIG1fdGV4
dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBo
aWNzQ29udGV4dCgwKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNT
aXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIG1fY29u
dGVudHNTaXplID0gY29udGVudHNTaXplOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3Zp
c2libGVDb250ZW50c1JlY3QgPSByZWN0OwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1
cGRhdGVWaWV3cG9ydCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAo
bV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkKLSAgICAgICAgbV9jb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS0+dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpCi17Ci0gICAgaWYgKG1fZml4
ZWRMYXllcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXhlZCBsYXll
ciBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQgYnkgdGhlIHdlYiBwcm9jZXNzIHdoZW4gd2UgdXBkYXRl
IHRoZSB2aXNpYmxlIGNvbnRlbnRzIHJlY3QgLyBzY3JvbGwgcG9zaXRpb24uCi0gICAgLy8gSWYg
d2Ugd2FudCB0aG9zZSBsYXllcnMgdG8gZm9sbG93IGFjY3VyYXRlbHkgdGhlIHZpZXdwb3J0IHdo
ZW4gd2UgbW92ZSBiZXR3ZWVuIHRoZSB3ZWIgcHJvY2VzcyB1cGRhdGVzLCB3ZSBoYXZlIHRvIG9m
ZnNldAotICAgIC8vIHRoZW0gYnkgdGhlIGRlbHRhIGJldHdlZW4gdGhlIGN1cnJlbnQgcG9zaXRp
b24gYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmlld3BvcnQgdXNlZCBmb3IgdGhlIGxhc3QgbGF5
b3V0LgotICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRp
b24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIG1fdmlzaWJsZUNvbnRlbnRzUmVj
dCwgbV9jb250ZW50c1NpemUpOwotICAgIEZsb2F0UG9pbnQgcmVuZGVyZWRTY3JvbGxQb3NpdGlv
biA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlv
biwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7Ci0gICAgRmxvYXRTaXpl
IGRlbHRhID0gc2Nyb2xsUG9zaXRpb24gLSByZW5kZXJlZFNjcm9sbFBvc2l0aW9uOwotCi0gICAg
TGF5ZXJSYXdQdHJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7Ci0gICAg
Zm9yIChMYXllclJhd1B0ck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnZhbHVl
KS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKLX0KLQotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCi17Ci0gICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9u
ID0gcG9zaXRpb247Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKLXsK
LSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IGxheWVyQnlJRChpZCk7Ci0gICAgQVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRh
aW5zKGlkKSk7Ci0KLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+
IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3Jl
YXRlKCkpOwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5n
U3RvcmUpOwotCi0gICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uoc3Vy
ZmFjZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUu
Z2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi17Ci0gICAgQVNTRVJUKG1fdGV4
dHVyZU1hcHBlcik7Ci0gICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMo
aWQpKTsKLQotICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJm
YWNlQmFja2luZ1N0b3Jlcy5maW5kKGlkKTsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZh
Y2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLQotICAgIGNh
bnZhc0JhY2tpbmdTdG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChmcm9udEJ1ZmZlcik7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkKQotewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIEdyYXBoaWNzTGF5ZXIq
IGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0b3Jl
cy5jb250YWlucyhpZCkpOwotCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUoaWQp
OwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQs
IGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZElEcykKLXsKLSAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0gICAgVmVjdG9yPEdyYXBoaWNzTGF5
ZXIqPiBjaGlsZHJlbjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRJRHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQgPSBjaGlsZElE
c1tpXTsKLSAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQoY2hpbGRJRCk7
Ci0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7Ci0gICAgfQotICAgIGxheWVyLT5zZXRD
aGlsZHJlbihjaGlsZHJlbik7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyID0gbGF5ZXJCeUlEKGlkKTsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBpbmpl
Y3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhmaWx0ZXJzKTsKLSNlbmRpZgotICAgIGxheWVy
LT5zZXRGaWx0ZXJzKGZpbHRlcnMpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjppbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9n
cmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdAotewotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBGaWx0ZXJP
cGVyYXRpb24qIG9wZXJhdGlvbiA9IGZpbHRlcnMub3BlcmF0aW9ucygpLmF0KGkpLmdldCgpOwot
ICAgICAgICBpZiAob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgIT0gRmlsdGVyT3BlcmF0
aW9uOjpDVVNUT00pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBXZWJDdXN0b21G
aWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFdlYkN1c3RvbUZp
bHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7Ci0gICAgICAgIEFTU0VSVCghY3VzdG9tT3BlcmF0
aW9uLT5wcm9ncmFtKCkpOwotICAgICAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5maW5kKGN1c3RvbU9wZXJhdGlv
bi0+cHJvZ3JhbUlEKCkpOwotICAgICAgICBBU1NFUlQoaXRlciAhPSBtX2N1c3RvbUZpbHRlclBy
b2dyYW1zLmVuZCgpKTsKLSAgICAgICAgY3VzdG9tT3BlcmF0aW9uLT5zZXRQcm9ncmFtKGl0ZXIt
PnZhbHVlLmdldCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCi17Ci0gICAgQVNTRVJUKCFtX2N1c3RvbUZpbHRlclBy
b2dyYW1zLmNvbnRhaW5zKGlkKSk7Ci0gICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5zZXQoaWQs
IFdlYkN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZShwcm9ncmFtSW5mby52ZXJ0ZXhTaGFkZXJT
dHJpbmcoKSwgcHJvZ3JhbUluZm8uZnJhZ21lbnRTaGFkZXJTdHJpbmcoKSwgcHJvZ3JhbUluZm8u
cHJvZ3JhbVR5cGUoKSwgcHJvZ3JhbUluZm8ubWl4U2V0dGluZ3MoKSwgcHJvZ3JhbUluZm8ubWVz
aFR5cGUoKSkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0
ZXJQcm9ncmFtKGludCBpZCkKLXsKLSAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5maW5kKGlkKTsKLSAgICBBU1NFUlQoaXRl
ciAhPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmVuZCgpKTsKLSAgICBpZiAobV90ZXh0dXJlTWFw
cGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXItPnJlbW92ZUNhY2hlZEN1c3RvbUZpbHRlclBy
b2dyYW0oaXRlci0+dmFsdWUuZ2V0KCkpOwotICAgIG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMucmVt
b3ZlKGl0ZXIpOwotfQotI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKLQotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCi17Ci0gICAgQVNTRVJUKG1fcm9vdExh
eWVySUQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgR3JhcGhpY3NMYXllciog
bGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotCi0gICAgbGF5ZXItPnNldFJlcGxpY2F0ZWRCeUxheWVy
KGdldExheWVyQnlJRElmRXhpc3RzKGxheWVySW5mby5yZXBsaWNhKSk7Ci0gICAgbGF5ZXItPnNl
dE1hc2tMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ubWFzaykpOwotCi0gICAg
bGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQb2ludCk7Ci0gICAgbGF5ZXIt
PnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOwotICAgIGxheWVyLT5zZXRTaXplKGxheWVySW5m
by5zaXplKTsKLQotICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5ZXJJbmZvLnRyYW5zZm9ybSk7
Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVySW5mby5jaGlsZHJlblRyYW5z
Zm9ybSk7Ci0gICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0eShsYXllckluZm8uYmFja2Zh
Y2VWaXNpYmxlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNPcGFxdWUobGF5ZXJJbmZvLmNvbnRl
bnRzT3BhcXVlKTsKLSAgICBsYXllci0+c2V0Q29udGVudHNSZWN0KGxheWVySW5mby5jb250ZW50
c1JlY3QpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvU29saWRDb2xvcihsYXllckluZm8uc29s
aWRDb2xvcik7Ci0gICAgbGF5ZXItPnNldERyYXdzQ29udGVudChsYXllckluZm8uZHJhd3NDb250
ZW50KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxheWVySW5mby5jb250ZW50c1Zp
c2libGUpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRGaXhl
ZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7Ci0KLSAgICBpZiAobGF5ZXJJ
bmZvLmZpeGVkVG9WaWV3cG9ydCkKLSAgICAgICAgbV9maXhlZExheWVycy5hZGQoaWQsIGxheWVy
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKLQotICAgIGFz
c2lnbkltYWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUlEKTsKLSAgICBw
cmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7Ci0KLSAgICAvLyBOZXZlciBtYWtlIHRo
ZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJbmZv
LmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7Ci0gICAgbGF5
ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVyLT5zZXRQcmVzZXJ2
ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOwotfQotCi1HcmFwaGljc0xheWVyKiBMYXllclRy
ZWVSZW5kZXJlcjo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQot
ewotICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkgPyBsYXllckJ5
SUQoaWQpIDogMDsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXJzKGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IGlkcy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIGNyZWF0ZUxh
eWVyKGlkc1tpbmRleF0pOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVMYXll
cihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI+IG5ld0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAqLywg
dGhpcyk7Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihuZXdMYXllci5nZXQoKSkt
PnNldEhhc093bkJhY2tpbmdTdG9yZShmYWxzZSk7Ci0gICAgbV9sYXllcnMuYWRkKGlkLCBuZXdM
YXllci5yZWxlYXNlKCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXll
cnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQotewotICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBsYXllcklEcy5zaXplKCk7ICsraW5kZXgpCi0g
ICAgICAgIGRlbGV0ZUxheWVyKGxheWVySURzW2luZGV4XSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQotewotICAg
IE93blB0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJRCk7Ci0g
ICAgQVNTRVJUKGxheWVyKTsKLQotICAgIG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLnJlbW92
ZSh0b1RleHR1cmVNYXBwZXJMYXllcihsYXllci5nZXQoKSkpOwotICAgIG1fZml4ZWRMYXllcnMu
cmVtb3ZlKGxheWVySUQpOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fc3VyZmFj
ZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVySUQpOwotI2VuZGlmCi19Ci0KLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQot
ewotICAgIEFTU0VSVChsYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOwotICAg
IEFTU0VSVChtX3Jvb3RMYXllcklEID09IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOwotCi0g
ICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7Ci0KLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9
IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXItPmNoaWxkcmVuKCku
aXNFbXB0eSgpKTsKLSAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwotfQotCi1Db29y
ZGluYXRlZEJhY2tpbmdTdG9yZSogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldEJhY2tpbmdTdG9yZShH
cmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIFRleHR1cmVNYXBwZXJMYXllciog
bGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFwaGljc0xheWVyKTsKLSAgICBBU1NFUlQo
bGF5ZXIpOwotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBzdGF0
aWNfY2FzdDxDb29yZGluYXRlZEJhY2tpbmdTdG9yZSo+KGxheWVyLT5iYWNraW5nU3RvcmUoKS5n
ZXQoKSk7Ci0KLSAgICBCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nU3lu
Y0JhY2tpbmdTdG9yZXMuZmluZChsYXllcik7Ci0gICAgaWYgKGl0ICE9IG1fcGVuZGluZ1N5bmNC
YWNraW5nU3RvcmVzLmVuZCgpKQotICAgICAgICBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWUuZ2V0
KCk7Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6cHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
cikKLXsKLSAgICBpZiAoIWxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShncmFwaGljc0xheWVy
KSkgewotICAgICAgICByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChncmFwaGljc0xheWVyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVk
KGdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIFRl
eHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihncmFwaGljc0xh
eWVyKTsKLSAgICBBU1NFUlQobGF5ZXIpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBsYXllciBk
b2VzIG5vdCBhbHJlYWR5IGhhdmUgYSBiYWNraW5nIHN0b3JlIChjb21taXR0ZWQgb3IgcGVuZGlu
ZykuCi0gICAgQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1N5bmNCYWNr
aW5nU3RvcmVzLmZpbmQobGF5ZXIpOwotICAgIGlmIChpdCAhPSBtX3BlbmRpbmdTeW5jQmFja2lu
Z1N0b3Jlcy5lbmQoKSkgewotICAgICAgICBpZiAoIWl0LT52YWx1ZSkgewotICAgICAgICAgICAg
Ly8gVGhlcmUgaXMgYSBwZW5kaW5nIHJlbW92YWwsIGNhbmNlbCBpdC4KLSAgICAgICAgICAgIG1f
cGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLnJlbW92ZShpdCk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ly8gVGhlcmUgaXMgYWxyZWFkeSBhIHBlbmRpbmcgYWRkaXRpb24uCi0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGxheWVyLT5iYWNraW5nU3RvcmUoKSkKLSAgICAgICAgcmV0dXJuOyAv
LyBUaGUgbGF5ZXIgYWxyZWFkeSBoYXMgYSBiYWNraW5nIHN0b3JlIChhbmQgbm8gcGVuZGluZyBy
ZW1vdmFsKS4KLQotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0
b3JlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7Ci0KLSAgICBiYWNraW5nU3Rv
cmUtPnNldFNpemUoZ3JhcGhpY3NMYXllci0+c2l6ZSgpKTsKLSAgICBBU1NFUlQoIW1fcGVuZGlu
Z1N5bmNCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGxheWVyKSk7Ci0gICAgbV9wZW5kaW5nU3luY0Jh
Y2tpbmdTdG9yZXMuYWRkKGxheWVyLCBiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyKQotewotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVN
YXBwZXJMYXllcihncmFwaGljc0xheWVyKTsKLSAgICBBU1NFUlQobGF5ZXIpOwotCi0gICAgLy8g
Q2hlY2sgaWYgdGhlIGxheW91dCBhbHJlYWR5IGhhcyBhIGJhY2tpbmcgc3RvcmUgKGNvbW1pdHRl
ZCBvciBwZW5kaW5nKS4KLSAgICBCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5k
aW5nU3luY0JhY2tpbmdTdG9yZXMuZmluZChsYXllcik7Ci0gICAgaWYgKGl0ICE9IG1fcGVuZGlu
Z1N5bmNCYWNraW5nU3RvcmVzLmVuZCgpKSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUpIHsKLSAg
ICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcGVuZGluZyBhZGRpdGlvbiwgY2FuY2VsIGl0LgotICAg
ICAgICAgICAgbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMucmVtb3ZlKGl0KTsKLSAgICAgICAg
fQotICAgICAgICAvLyBUaGVyZSBpcyBhbHJlYWR5IGEgcGVuZGluZyByZW1vdmFsLgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFsYXllci0+YmFja2luZ1N0b3JlKCkpCi0gICAg
ICAgIHJldHVybjsgLy8gVGhlIGxheWVyIGhhcyBubyBiYWNraW5nIHN0b3JlIChhbmQgbm8gcGVu
ZGluZyBhZGRpdGlvbikuCi0KLSAgICBBU1NFUlQoIW1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVz
LmNvbnRhaW5zKGxheWVyKSk7Ci0gICAgbV9wZW5kaW5nU3luY0JhY2tpbmdTdG9yZXMuYWRkKGxh
eWVyLCAwKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVzZXRCYWNraW5nU3RvcmVT
aXplVG9MYXllclNpemUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGdyYXBo
aWNzTGF5ZXIpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwotICAgIGJhY2tpbmdTdG9yZS0+
c2V0U2l6ZShncmFwaGljc0xheWVyLT5zaXplKCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRl
cmVyOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGZsb2F0IHNjYWxlKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlE
KGxheWVySUQpOwotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUgPSBn
ZXRCYWNraW5nU3RvcmUobGF5ZXIpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwotICAgIGJh
Y2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKLSAgICByZXNldEJhY2tpbmdT
dG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkK
LXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlID0gZ2V0QmFja2luZ1N0b3JlKGxh
eWVyKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYmFj
a2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7Ci0gICAgcmVzZXRCYWNraW5nU3RvcmVTaXpl
VG9MYXllclNpemUobGF5ZXIpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVy
cy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRl
VGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBU
aWxlVXBkYXRlJiB1cGRhdGUpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5
SUQobGF5ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBnZXRCYWNraW5nU3RvcmUobGF5ZXIpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmUp
OwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0
LCB1cGRhdGUudGlsZVJlY3QsIHVwZGF0ZS5zdXJmYWNlLCB1cGRhdGUub2Zmc2V0KTsKLSAgICBy
ZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Ci0gICAgbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEKQotewotICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdl
SUQpKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShD
b29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1faW1hZ2VCYWNraW5ncy5h
ZGQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQotewotICAgIEFT
U0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIEltYWdlQmFja2lu
Z01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAgICBS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsK
LQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlIHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgotICAgIGJh
Y2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsKLSAgICBJ
bnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+c2l6ZSgpKTsKLSAgICAvLyBT
ZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdl
KCkKLSAgICBBU1NFUlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkpOwotICAgIGJhY2tp
bmdTdG9yZS0+dXBkYXRlVGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBzdXJmYWNlLCByZWN0
LmxvY2F0aW9uKCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFk
ZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAg
ICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBJbWFnZUJh
Y2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0g
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFs
dWU7Ci0gICAgYmFja2luZ1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOwotICAgIG1fYmFja2luZ1N0
b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCkKLXsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdl
SUQpKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVycyBh
IGRhbmdsaW5nIHBvaW50ZXIuCi0gICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBwZW5kKG1f
aW1hZ2VCYWNraW5ncy50YWtlKGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChpbWFnZUlEID09IEludmFs
aWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50
c1RvTWVkaWEoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSW1hZ2VCYWNraW5nTWFw
OjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIEFTU0VS
VChpdCAhPSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1Rv
TWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVt
b3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQotewotICAgIG1fcmVsZWFzZWRJbWFn
ZUJhY2tpbmdzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFBl
bmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKLXsKLSAgICBIYXNoU2V0PFJlZlB0cjxDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNvbW1p
dFRpbGVPcGVyYXRpb25zKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2JhY2tpbmdT
dG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLQotICAgIHsKLSAgICAgICAgQmFja2lu
Z1N0b3JlTWFwOjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdTeW5jQmFja2luZ1N0b3Jlcy5lbmQo
KTsKLSAgICAgICAgQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1N5bmNC
YWNraW5nU3RvcmVzLmJlZ2luKCk7Ci0gICAgICAgIGZvciAoO2l0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgIGl0LT5rZXktPnNldEJhY2tpbmdTdG9yZShpdC0+dmFsdWUpOwotCi0gICAgICAg
IG1fcGVuZGluZ1N5bmNCYWNraW5nU3RvcmVzLmNsZWFyKCk7Ci0gICAgfQotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcygpCi17Ci0gICAgbV9yZW5kZXJlZENv
bnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9z
aXRpb247Ci0KLSAgICAvLyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVuIHJlbmRlcmVkLCB3
ZSBjYW4gc2FmZWx5IHVubG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUgbmV4dCBsYXlvdXQu
Ci0gICAgc2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSk7Ci0KLSAgICBtX3Jvb3RMYXllci0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKLSAgICBjb21taXRQZW5kaW5nQmFja2lu
Z1N0b3JlT3BlcmF0aW9ucygpOwotICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVl
ZGVkKCk7Ci0KLSAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZv
ciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25l
LgotICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW5k
ZXJOZXh0RnJhbWUsIHRoaXMpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVy
TmV4dEZyYW1lKCkKLXsKLSAgICBpZiAobV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSkK
LSAgICAgICAgbV9jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+cmVuZGVyTmV4dEZyYW1l
KCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXllcigpCi17Ci0g
ICAgaWYgKG1fcm9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZhY3RvcnkgKi8sIHRoaXMpOwotICAgIG1fcm9v
dExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJh
d3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQ
b2ludDNEKDAsIDAsIDApKTsKLQotICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2
ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290TGF5
ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7Ci0KLSAgICBBU1NFUlQobV90ZXh0dXJl
TWFwcGVyKTsKLSAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNl
dFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6c3luY1JlbW90ZUNvbnRlbnQoKQotewotICAgIC8vIFdlIGVucXVldWUgbWVz
c2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBh
Y3RpdmUgR0wgY29udGV4dC4KLSAgICBlbnN1cmVSb290TGF5ZXIoKTsKLQotICAgIFZlY3RvcjxG
dW5jdGlvbjx2b2lkKCk+ID4gcmVuZGVyUXVldWU7Ci0gICAgYm9vbCBjYWxsZWRPbk1haW5UaHJl
YWQgPSBXVEY6OmlzTWFpblRocmVhZCgpOwotICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFkKQot
ICAgICAgICBtX3JlbmRlclF1ZXVlTXV0ZXgubG9jaygpOwotICAgIHJlbmRlclF1ZXVlLnN3YXAo
bV9yZW5kZXJRdWV1ZSk7Ci0gICAgaWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCi0gICAgICAgIG1f
cmVuZGVyUXVldWVNdXRleC51bmxvY2soKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbmRlclF1ZXVlW2ldKCk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAgIFRleHR1
cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7
Ci0KLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIGxheWVyLT5jbGVhckJhY2tpbmdTdG9yZXNSZWN1
cnNpdmUoKTsKLQotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwotI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY2xlYXIoKTsKLSNlbmRpZgot
Ci0gICAgbV9yb290TGF5ZXIuY2xlYXIoKTsKLSAgICBtX3Jvb3RMYXllcklEID0gSW52YWxpZENv
b3JkaW5hdGVkTGF5ZXJJRDsKLSAgICBtX2xheWVycy5jbGVhcigpOwotICAgIG1fZml4ZWRMYXll
cnMuY2xlYXIoKTsKLSAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKLSAgICBtX3BlbmRpbmdT
eW5jQmFja2luZ1N0b3Jlcy5jbGVhcigpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5n
QnVmZmVycy5jbGVhcigpOwotCi0gICAgc2V0QWN0aXZlKGZhbHNlKTsKLSAgICBkaXNwYXRjaE9u
TWFpblRocmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzLCB0
aGlzKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3Jlcygp
Ci17Ci0gICAgaWYgKG1fY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCi0gICAgICAgIG1f
Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPnB1cmdlQmFja2luZ1N0b3JlcygpOwotfQot
Ci12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsK
LSAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKGxheWVyQnlJRChpZCkpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmlt
YXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtleWZy
YW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMu
c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBm
aWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5
ZnJhbWVzLmF0KGkpKTsKLSAgICAgICAgICAgIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dy
YW1zKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAg
ICBsYXllci0+c2V0QW5pbWF0aW9ucyhhbmltYXRpb25zKTsKLX0KLQotdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLXsKLSAgICBtX2FuaW1h
dGlvbnNMb2NrZWQgPSBsb2NrZWQ7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFj
aCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5ID0gMDsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXBwZW5k
VXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGlmICghbV9p
c0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBNdXRleExvY2tlciBsb2NrZXIobV9yZW5kZXJRdWV1ZU11dGV4KTsKLSAgICBtX3JlbmRl
clF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dEFjdGl2ZShib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAobV9pc0FjdGl2ZSA9PSBhY3RpdmUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIEhhdmUgdG8gY2xlYXIgcmVuZGVyIHF1ZXVlIGluIGJv
dGggY2FzZXMuCi0gICAgLy8gSWYgdGhlcmUgYXJlIHNvbWUgdXBkYXRlcyBpbiBxdWV1ZSBkdXJp
bmcgYWN0aXZhdGlvbiB0aGVuIHRob3NlIHVwZGF0ZXMgYXJlIGZyb20gcHJldmlvdXMgaW5zdGFu
Y2Ugb2YgcGFpbnQgbm9kZQotICAgIC8vIGFuZCBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgbmV3
bHkgY3JlYXRlZCBpbnN0YW5jZS4KLSAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7Ci0gICAgbV9p
c0FjdGl2ZSA9IGFjdGl2ZTsKLSAgICBpZiAobV9pc0FjdGl2ZSkKLSAgICAgICAgZGlzcGF0Y2hP
bk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSwgdGhp
cykpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29u
c3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIG1fYmFja2dyb3VuZENvbG9yID0gY29s
b3I7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGMxZDU4ZjQ5OWZlOTFjMTc0YjM2ZjM0MjA5NmQ4YTkzZGNjZDI0
ZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0j
aWZuZGVmIExheWVyVHJlZVJlbmRlcmVyX2gKLSNkZWZpbmUgTGF5ZXJUcmVlUmVuZGVyZXJfaAot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5o
IgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0
ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NT
dXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ3VzdG9tRmls
dGVyUHJvZ3JhbTsKLWNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvOwotY2xhc3MgVGV4dHVy
ZU1hcHBlckxheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU7Ci1jbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTsKLWNs
YXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZvOwotCi1jbGFzcyBMYXllclRyZWVSZW5kZXJlciA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxMYXllclRyZWVSZW5kZXJlcj4sIHB1YmxpYyBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgVGlsZVVwZGF0
ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3Qgc291cmNlUmVjdDsKLSAgICAgICAgV2ViQ29y
ZTo6SW50UmVjdCB0aWxlUmVjdDsKLSAgICAgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4g
c3VyZmFjZTsKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0OwotICAgICAgICBUaWxl
VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNvdXJjZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYgdGlsZSwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG5ld1N1cmZhY2UsIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBuZXdPZmZzZXQpCi0gICAgICAgICAgICA6IHNvdXJjZVJl
Y3Qoc291cmNlKQotICAgICAgICAgICAgLCB0aWxlUmVjdCh0aWxlKQotICAgICAgICAgICAgLCBz
dXJmYWNlKG5ld1N1cmZhY2UpCi0gICAgICAgICAgICAsIG9mZnNldChuZXdPZmZzZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlUmVuZGVyZXIo
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVS
ZW5kZXJlcigpOwotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDApOwotICAgIHZvaWQgcGFp
bnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsK
LSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBwb3NpdGlvbik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBj
cmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+KTsKLSAgICB2b2lkIHN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBk
ZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLQotICAgIHZvaWQgZGV0
YWNoKCk7Ci0gICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwot
Ci0gICAgLy8gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRv
IHVzZSBiZWxvdyB0d28gbWV0aG9kcywgYmVjYXVzZSB0d28gbWV0aG9kcyBhY2Nlc3MgbWVtYmVy
cyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYW5hZ2VzLiBTZWUgbV9jb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS4KLSAgICAvLyBDdXJyZW50bHksIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50
Tm9kZSgpIGxvY2tzIHRoZSBtYWluIHRocmVhZCBiZWZvcmUgY2FsbGluZyBib3RoIG1ldGhvZHMu
Ci0gICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7
Ci0KLSAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVy
SUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwotICAg
IHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCi0gICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNyZWF0
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQp
OwotI2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwotICAgIHZv
aWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwot
ICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKTsKLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9pZCBzZXRBbmlt
YXRpb25zTG9ja2VkKGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJik7Ci0gICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBlbmFibGUp
IHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KLQotI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwotI2Vu
ZGlmCi0KLXByaXZhdGU6Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xheWVycy5jb250
YWlucyhpZCkpOwotICAgICAgICBBU1NFUlQoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJ
RCk7Ci0gICAgICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOwotICAgIH0KLSAgICBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKiBnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQp
OwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9v
dExheWVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgdm9p
ZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7Ci0KLSAgICAvLyBSZWltcGxlbWVudGF0
aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQuCi0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRv
dWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRz
KGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpIE9WRVJSSURFIHsgfQotCi0gICAgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZChjb25z
dCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwotI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1lUmVh
ZHkoKTsKLSNlbmRpZgotICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdm9pZCBwdXJn
ZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIHZvaWQgY3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklEKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0KLSAgICB2
b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgcmVtb3ZlUmVsZWFzZWRJbWFnZUJh
Y2tpbmdzSWZOZWVkZWQoKTsKLSAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwotICAgIHZvaWQg
Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKLQotICAgIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlKiBnZXRCYWNraW5nU3RvcmUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwot
ICAgIHZvaWQgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOwotICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopOwotICAgIHZvaWQgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNp
emUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotCi0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1f
Y29udGVudHNTaXplOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0KLSAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4g
dGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQotICAgIFZlY3RvcjxGdW5jdGlv
bjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKLSAgICBNdXRleCBtX3JlbmRlclF1ZXVlTXV0ZXg7
Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwot
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNr
aW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiA+IG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzOwotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllciosIFJlZlB0cjxDb29yZGluYXRlZEJhY2tp
bmdTdG9yZT4gPiBCYWNraW5nU3RvcmVNYXA7Ci0gICAgQmFja2luZ1N0b3JlTWFwIG1fcGVuZGlu
Z1N5bmNCYWNraW5nU3RvcmVzOwotCi0gICAgSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzOwotCi0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJ
RCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiA+IFN1
cmZhY2VCYWNraW5nU3RvcmVNYXA7Ci0gICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcCBtX3N1cmZh
Y2VCYWNraW5nU3RvcmVzOwotI2VuZGlmCi0KLSAgICAvLyBCZWxvdyB0d28gbWVtYmVycyBhcmUg
YWNjZXNzZWQgYnkgb25seSB0aGUgbWFpbiB0aHJlYWQuIFRoZSBwYWludGluZyB0aHJlYWQgbXVz
dCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byBhY2Nlc3MgYm90aCBtZW1iZXJzLgotICAgIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBtX2Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OwotICAgIGJvb2wgbV9pc0FjdGl2ZTsKLQotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xh
eWVyPiBtX3Jvb3RMYXllcjsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVy
SUQsIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiA+IExheWVyTWFwOwotICAgIExheWVy
TWFwIG1fbGF5ZXJzOwotICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVySUQsIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqPiBMYXllclJhd1B0ck1hcDsKLSAgICBMYXllclJhd1B0ck1h
cCBtX2ZpeGVkTGF5ZXJzOwotICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwot
ICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247
Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xs
UG9zaXRpb247Ci0gICAgYm9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7Ci0jaWYgRU5BQkxFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIGJvb2wgbV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZDsK
LSNlbmRpZgotICAgIFdlYkNvcmU6OkNvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotICAgIGJvb2wg
bV9zZXREcmF3c0JhY2tncm91bmQ7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW0+ID4g
Q3VzdG9tRmlsdGVyUHJvZ3JhbU1hcDsKLSAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwIG1fY3Vz
dG9tRmlsdGVyUHJvZ3JhbXM7Ci0jZW5kaWYKLX07Ci0KLX07Ci0KLSNlbmRpZiAvLyBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBMYXllclRyZWVSZW5kZXJlcl9oCi0KLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAppbmRl
eCAyZWZkYmQwZTEzOWViMDA4ODVmOTFhZWY5YjI4YzkwM2JmZGMxYzNkLi41MTE1NGJjODM3Yzlm
YWMzNDk1YmI0MzZkNjRhOWE1OWUzYTBjZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUg
IkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUg
IklucHV0TWV0aG9kQ29udGV4dEVmbC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgi
CiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudEVmbC5jcHAKaW5kZXggZjExZDA4ZGQwOTljODNiMGVjOGI3YzVhZWQwOWVkNjRhZGNjZTE2
Yy4uOWFhM2M4YzE4OTA3ODUzYjdmZDFlMWRkZjJiYTZmNWFiYTllMDZmMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmwuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKLSNpbmNs
dWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvTGF5ZXJUcmVlUmVuZGVyZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKaW5kZXgg
ZjUzNmM0MjE3NjVmMmI2NjY2YzYzMGQzMWJhMzM0MjhhOTU2OTcyOS4uYThlMjc0NWVhNDVlYzdi
NWE4MTgyZWU0MDg5NGFlOGQ5MjUyMzczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKQEAgLTIxLDExICsyMSwxMSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVNHTm9kZS5oIgogCi0jaW5jbHVkZSAiTGF5
ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlIDxRdEd1aS9RUG9seWdvbkY+CiAjaW5jbHVkZSA8
UXRRdWljay9RUXVpY2tJdGVtPgogI2luY2x1ZGUgPFF0UXVpY2svUVF1aWNrV2luZG93PgogI2lu
Y2x1ZGUgPFF0UXVpY2svUVNHU2ltcGxlUmVjdE5vZGU+CisjaW5jbHVkZSA8V2ViQ29yZS9MYXll
clRyZWVSZW5kZXJlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXgu
aD4KICNpbmNsdWRlIDxwcml2YXRlL3FzZ3JlbmRlcm5vZGVfcC5oPgogCkBAIC03Nyw3ICs3Nyw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHBhcmVudDsKICAgICB9CiAKLSAgICBMYXllclRy
ZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVy
LmdldCgpOyB9CisgICAgV2ViQ29yZTo6TGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRl
cmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQogCiBwcml2YXRlOgogICAg
IFFSZWN0RiBjbGlwUmVjdCgpIGNvbnN0CkBAIC0xMjYsNyArMTI2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHJlc3VsdFJlY3Q7CiAgICAgfQogCi0gICAgUmVmUHRyPExheWVyVHJlZVJl
bmRlcmVyPiBtX3JlbmRlcmVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllclRyZWVSZW5kZXJl
cj4gbV9yZW5kZXJlcjsKIH07CiAKIFF0V2ViUGFnZVNHTm9kZTo6UXRXZWJQYWdlU0dOb2RlKCkK
QEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIFF0V2ViUGFnZVNHTm9kZTo6c2V0U2NhbGUoZmxvYXQg
c2NhbGUpCiAgICAgc2V0TWF0cml4KG1hdHJpeCk7CiB9CiAKLXZvaWQgUXRXZWJQYWdlU0dOb2Rl
OjpzZXRSZW5kZXJlcihQYXNzUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiByZW5kZXJlcikKK3Zv
aWQgUXRXZWJQYWdlU0dOb2RlOjpzZXRSZW5kZXJlcihQYXNzUmVmUHRyPFdlYkNvcmU6OkxheWVy
VHJlZVJlbmRlcmVyPiByZW5kZXJlcikKIHsKICAgICBpZiAobV9jb250ZW50c05vZGUgJiYgbV9j
b250ZW50c05vZGUtPmxheWVyVHJlZVJlbmRlcmVyKCkgPT0gcmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VT
R05vZGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaApp
bmRleCAxYmNjMjhlNDM5OTAyZjU5ZmRjODQ5ZDQwNzY4NmUxNTAzODE4OGIyLi5hMWU3NzQzNjBi
YjQ2Y2FmZTU0NzUzNDg0MjU0YTBjYWY2NmE3YjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oCkBAIC0yOSwxNyArMjksMjAgQEAgY2xhc3MgUVF1
aWNrSXRlbTsKIGNsYXNzIFFTR1NpbXBsZVJlY3ROb2RlOwogUVRfRU5EX05BTUVTUEFDRQogCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKK30KKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIENvbnRlbnRzU0dOb2RlOwotY2xhc3MgTGF5ZXJUcmVlUmVu
ZGVyZXI7CiAKIGNsYXNzIFF0V2ViUGFnZVNHTm9kZSA6IHB1YmxpYyBRU0dUcmFuc2Zvcm1Ob2Rl
IHsKICAgICBwdWJsaWM6CiAgICAgICAgIFF0V2ViUGFnZVNHTm9kZSgpOwogICAgICAgICB2b2lk
IHNldEJhY2tncm91bmQoY29uc3QgUVJlY3RGJiwgY29uc3QgUUNvbG9yJik7CiAgICAgICAgIHZv
aWQgc2V0U2NhbGUoZmxvYXQpOwotICAgICAgICB2b2lkIHNldFJlbmRlcmVyKFBhc3NSZWZQdHI8
TGF5ZXJUcmVlUmVuZGVyZXI+KTsKKyAgICAgICAgdm9pZCBzZXRSZW5kZXJlcihQYXNzUmVmUHRy
PFdlYkNvcmU6OkxheWVyVHJlZVJlbmRlcmVyPik7CiAgICAgICAgIHFyZWFsIGRldmljZVBpeGVs
UmF0aW8oKSBjb25zdCB7IHJldHVybiBtX2RldmljZVBpeGVsUmF0aW87IH0KICAgICAgICAgdm9p
ZCBzZXREZXZpY2VQaXhlbFJhdGlvKHFyZWFsIGRldmljZVBpeGVsUmF0aW8pIHsgbV9kZXZpY2VQ
aXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbzsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9y
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0FyZWFBbGxvY2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYmVm
Y2RhYzg1MjAxMmNmZTkzYzg3YTVhOTMyMWE4MWQ3NTM1ODQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMzM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotCi0jaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
QXJlYUFsbG9jYXRvcjo6QXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXpl
KQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX21pbkFsbG9jKDEsIDEpCi0gICAgLCBtX21h
cmdpbigwLCAwKQotewotfQotCi1BcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcigpCi17Ci19
Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNp
emUpCi17Ci0gICAgbV9zaXplID0gbV9zaXplLmV4cGFuZGVkVG8oc2l6ZSk7Ci19Ci0KLXZvaWQg
QXJlYUFsbG9jYXRvcjo6ZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBtX3NpemUgKz0gc2l6ZTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKQotewotfQotCi1pbnQgQXJlYUFsbG9jYXRvcjo6b3Zlcmhl
YWQoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1XZWJDb3JlOjpJbnRTaXplIEFyZWFB
bGxvY2F0b3I6OnJvdW5kQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKSBj
b25zdAotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7
Ci0gICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKLSAg
ICBpbnQgZXh0cmEgPSB3aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKLSAgICBpZiAoZXh0cmEp
Ci0gICAgICAgIHdpZHRoICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOwotICAgIGV4dHJh
ID0gaGVpZ2h0ICUgbV9taW5BbGxvYy5oZWlnaHQoKTsKLSAgICBpZiAoZXh0cmEpCi0gICAgICAg
IGhlaWdodCArPSBtX21pbkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7Ci0KLSAgICByZXR1cm4gV2Vi
Q29yZTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotR2VuZXJhbEFyZWFBbGxvY2F0b3I6
OkdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi0gICAg
OiBBcmVhQWxsb2NhdG9yKFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHNpemUpKQotewotICAgIG1f
cm9vdCA9IG5ldyBOb2RlKCk7Ci0gICAgbV9yb290LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdCgw
LCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBtX3Jvb3QtPmxhcmdl
c3RGcmVlID0gbV9zaXplOwotICAgIG1fcm9vdC0+cGFyZW50ID0gMDsKLSAgICBtX3Jvb3QtPmxl
ZnQgPSAwOwotICAgIG1fcm9vdC0+cmlnaHQgPSAwOwotICAgIG1fbm9kZUNvdW50ID0gMTsKLSAg
ICBzZXRNaW5pbXVtQWxsb2NhdGlvbihXZWJDb3JlOjpJbnRTaXplKDgsIDgpKTsKLX0KLQotR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCi17Ci0gICAgZnJlZU5v
ZGUobV9yb290KTsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9k
ZSogbm9kZSkKLXsKLSAgICBpZiAobm9kZSkgewotICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0
KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAgIH0KLSAgICBkZWxldGUgbm9k
ZTsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUpCi17Ci0gICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKFdlYkNvcmU6Om5l
eHRQb3dlck9mVHdvKHNpemUpKTsKLQotICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1f
c2l6ZSkKLSAgICAgICAgcmV0dXJuOyAvLyBObyBjaGFuZ2UuCi0KLSAgICBpZiAoIW1fcm9vdC0+
bGVmdCAmJiBtX3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7Ci0gICAgICAgIC8vIE5v
IGFsbG9jYXRpb25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUu
Ci0gICAgICAgIG1fcm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBt
X3NpemU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBZGQgZXh0cmEgbm9kZXMg
YWJvdmUgdGhlIGN1cnJlbnQgcm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCi0gICAgTm9kZSogb2xk
Um9vdCA9IG1fcm9vdDsKLSAgICBTcGxpdCBzcGxpdDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkg
Pj0gbV9zaXplLmhlaWdodCgpKQotICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgIGVsc2UK
LSAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLQotICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6
ZSgpICE9IG1fc2l6ZSkgewotICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9z
aXplLndpZHRoKCkpCi0gICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICBlbHNl
IGlmIChtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQotICAgICAgICAg
ICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsK
LSAgICAgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOwotICAgICAgICBtX25vZGVDb3VudCAr
PSAyOwotICAgICAgICBtX3Jvb3QtPnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgcGFyZW50LT5w
YXJlbnQgPSAwOwotICAgICAgICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7Ci0gICAgICAgIHBhcmVu
dC0+cmlnaHQgPSByaWdodDsKLSAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+
cmVjdC5zaXplKCk7Ci0gICAgICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHJp
Z2h0LT5sZWZ0ID0gMDsKLSAgICAgICAgcmlnaHQtPnJpZ2h0ID0gMDsKLSAgICAgICAgcmlnaHQt
Pmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKLSAgICAgICAgaWYgKHNwbGl0ID09
IFNwbGl0T25YKSB7Ci0gICAgICAgICAgICBwYXJlbnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0
KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAgbV9y
b290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBtX3Jv
b3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jv
b3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5y
ZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qu
d2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpICogMik7Ci0gICAgICAgICAgICByaWdodC0+
cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0Lnko
KSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53
aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHNwbGl0
ID0gKHNwbGl0ID09IFNwbGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7Ci0gICAgICAgIG1f
cm9vdCA9IHBhcmVudDsKLSAgICB9Ci0gICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUxLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplMikKLXsKLSAgICByZXR1cm4gc2l6
ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhl
aWdodCgpOwotfQotCi1XZWJDb3JlOjpJbnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxv
Y2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIFdlYkNvcmU6OkludFNp
emUgcm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKLSAgICByb3VuZGVkID0gV2ViQ29y
ZTo6bmV4dFBvd2VyT2ZUd28ocm91bmRlZCk7Ci0gICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAw
IHx8IHJvdW5kZWQud2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCi0gICAgICAgIHx8IHJvdW5kZWQu
aGVpZ2h0KCkgPD0gMCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQotICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdCgpOwotCi0gICAgV2ViQ29yZTo6SW50UG9pbnQg
cG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJvdW5kZWQsIG1fcm9vdCk7Ci0gICAgaWYgKHBvaW50
LngoKSA+PSAwKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50UmVjdChwb2ludCwgc2l6ZSk7
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QoKTsKLX0KLQotV2ViQ29yZTo6SW50UG9pbnQg
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZSwgTm9kZSogbm9kZSkKLXsKLSAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8g
aW5zZXJ0IGludG8sIHdoaWNoIHNob3VsZCBiZQotICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFz
dCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIHRoYXQgaXMKLSAgICAvLyBiaWcgZW5vdWdoIHRvIGNv
bnRhaW4gdGhlIHJlcXVlc3RlZCBzaXplLgotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIC8v
IEdvIGRvd24gYSBsZXZlbCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0Ci0gICAg
ICAgIC8vIHN1Yi10cmVlIGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgot
ICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+bGVmdDsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBu
b2RlLT5yaWdodDsKLSAgICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5s
YXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUs
IHJpZ2h0LT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2Vz
dEZyZWUud2lkdGgoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCi0gICAgICAgICAgICAg
ICAgICAgIHx8IGxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVl
LmhlaWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1
ZXMgbWF5IGJlIGEgbGl0dGxlIG92ZXJzaXplZCwKLSAgICAgICAgICAgICAgICAgICAgLy8gc28g
dHJ5IHRoZSBsZWZ0IHN1Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KLSAgICAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2Rl
KHNpemUsIGxlZnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnQ7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIHJpZ2h0KTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OwotICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgbm9kZSA9IGxlZnQ7Ci0gICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0
c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKQotICAgICAgICAgICAgbm9kZSA9IHJp
Z2h0OwotICAgICAgICBlbHNlIGlmIChsZWZ0IHx8IHJpZ2h0KSB7Ci0gICAgICAgICAgICAvLyBO
ZWl0aGVyIHN1Yi1ub2RlIGhhcyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KLSAgICAg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwotICAgICAgICB9IGVsc2Ug
aWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAv
LyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPwotICAg
ICAgICAgICAgU3BsaXQgc3BsaXQ7Ci0gICAgICAgICAgICBpZiAoZml0c1dpdGhpbihXZWJDb3Jl
OjpJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFy
Z2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlv
bjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCi0gICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBu
b2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRyeSB0byBiYWxhbmNlCi0gICAgICAgICAgICAgICAg
Ly8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMgZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LngoKSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0
LngoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0g
U3BsaXRPblk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49
IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRP
blg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNw
bGl0T25ZOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNp
emUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkg
ewotICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KLSAgICAg
ICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRz
V2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiks
IG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRo
ZSBZIGRpcmVjdGlvbi4KLSAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhlciAt
IGFsbG9jYXRlIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9
IFdlYkNvcmU6OkludFNpemUoMCwgMCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZy
ZWUobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28g
YXJvdW5kIGFnYWluIHVzaW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgotICAgICAgICAgICAgbm9kZSA9
IHNwbGl0Tm9kZShub2RlLCBzcGxpdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAv
LyBDYW5ub3QgcG9zc2libHkgZml0IGludG8gdGhpcyBub2RlLgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkludFBvaW50KC0xLCAtMSk7
Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6
c3BsaXROb2RlCi0gICAgKE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQotewotICAgIE5vZGUqIGxl
ZnQgPSBuZXcgTm9kZSgpOwotICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKLSAgICBtX25v
ZGVDb3VudCArPSAyOwotICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7Ci0gICAgbGVmdC0+bGVmdCA9
IDA7Ci0gICAgbGVmdC0+cmlnaHQgPSAwOwotICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOwotICAg
IHJpZ2h0LT5sZWZ0ID0gMDsKLSAgICByaWdodC0+cmlnaHQgPSAwOwotICAgIG5vZGUtPmxlZnQg
PSBsZWZ0OwotICAgIG5vZGUtPnJpZ2h0ID0gcmlnaHQ7Ci0KLSAgICBpZiAoc3BsaXQgPT0gU3Bs
aXRPblgpIHsKLSAgICAgICAgbGVmdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVj
dC54KCksIG5vZGUtPnJlY3QueSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8g
Miwgbm9kZS0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6
SW50UmVjdChsZWZ0LT5yZWN0Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCi0gICAgICAgICAgICBu
b2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBsZWZ0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwg
bm9kZS0+cmVjdC55KCksCi0gICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUtPnJl
Y3QuaGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0
KG5vZGUtPnJlY3QueCgpLCBsZWZ0LT5yZWN0Lm1heFkoKSwKLSAgICAgICAgICAgIG5vZGUtPnJl
Y3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIH0KLQotICAgIGxlZnQt
Pmxhcmdlc3RGcmVlID0gbGVmdC0+cmVjdC5zaXplKCk7Ci0gICAgcmlnaHQtPmxhcmdlc3RGcmVl
ID0gcmlnaHQtPnJlY3Quc2l6ZSgpOwotICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gcmlnaHQtPmxh
cmdlc3RGcmVlOwotICAgIHJldHVybiBsZWZ0OwotfQotCi12b2lkIEdlbmVyYWxBcmVhQWxsb2Nh
dG9yOjp1cGRhdGVMYXJnZXN0RnJlZShOb2RlKiBub2RlKQotewotICAgIHdoaWxlICgobm9kZSA9
IG5vZGUtPnBhcmVudCkpIHsKLSAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJ
bnRTaXplKAotICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUud2lk
dGgoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkpLAotICAgICAgICAgICAgc3Rk
OjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5sYXJn
ZXN0RnJlZS5oZWlnaHQoKSkKLSAgICAgICAgICAgICk7Ci0gICAgfQotfQotCi12b2lkIEdlbmVy
YWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCi17
Ci0gICAgLy8gTG9jYXRlIHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRlZCByZWdp
b24uCi0gICAgTm9kZSogbm9kZSA9IG1fcm9vdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dCA9IHJlY3QubG9jYXRpb24oKTsKLSAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBpZiAobm9k
ZS0+bGVmdCAmJiBub2RlLT5sZWZ0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAg
IG5vZGUgPSBub2RlLT5sZWZ0OwotICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2Rl
LT5yaWdodC0+cmVjdC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+
cmlnaHQ7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybjsgLy8gUG9p
bnQgaXMgY29tcGxldGVseSBvdXRzaWRlIHRoZSB0cmVlLgotICAgIH0KLSAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJlZSBhbmQgdGhl
biB3b3JrIHVwd2FyZHMgdGhyb3VnaCB0aGUgdHJlZQotICAgIC8vIHJlY29tYmluaW5nIGFuZCBk
ZWxldGluZyBub2RlcyB1bnRpbCB3ZSByZWFjaCBhIHNpYmxpbmcKLSAgICAvLyB0aGF0IGlzIHN0
aWxsIGFsbG9jYXRlZC4KLSAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgp
OwotICAgIHdoaWxlIChub2RlLT5wYXJlbnQpIHsKLSAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+
bGVmdCA9PSBub2RlKSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodC0+bGFy
Z2VzdEZyZWUgIT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+cGFy
ZW50LT5sZWZ0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3Quc2l6ZSgp
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBub2Rl
LT5wYXJlbnQ7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOwotICAgICAgICBmcmVlTm9k
ZShub2RlLT5yaWdodCk7Ci0gICAgICAgIG1fbm9kZUNvdW50IC09IDI7Ci0gICAgICAgIG5vZGUt
PmxlZnQgPSAwOwotICAgICAgICBub2RlLT5yaWdodCA9IDA7Ci0gICAgICAgIG5vZGUtPmxhcmdl
c3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7Ci0gICAgfQotCi0gICAgLy8gTWFrZSB0aGUgcmVz
dCBvZiBvdXIgYW5jZXN0b3JzIGhhdmUgdGhlIGNvcnJlY3QgImxhcmdlc3QgZnJlZSBzaXplIi4K
LSAgICB1cGRhdGVMYXJnZXN0RnJlZShub2RlKTsKLX0KLQotaW50IEdlbmVyYWxBcmVhQWxsb2Nh
dG9yOjpvdmVyaGVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbm9kZUNvdW50ICogc2l6ZW9m
KE5vZGUpOwotfQotCi19IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjU2YmI4YWUxMDA2ODhhMzQ2NjI2ZTRkMzMzM2M2
MGI5ZTg5Mzg3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Fy
ZWFBbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgQXJlYUFsbG9jYXRvcl9o
Ci0jZGVmaW5lIEFyZWFBbGxvY2F0b3JfaAotCi0jaW5jbHVkZSA8SW50UG9pbnQuaD4KLSNpbmNs
dWRlIDxJbnRSZWN0Lmg+Ci0jaW5jbHVkZSA8SW50U2l6ZS5oPgotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1pbmxpbmUgaW50IG5leHRQb3dl
ck9mVHdvKGludCBudW1iZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0
IG5leHRQb3dlck9mVHdvIGZvciBhbiBpbnRlZ2VyLgotICAgIC0tbnVtYmVyOwotICAgIG51bWJl
ciB8PSBudW1iZXIgPj4gMTsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDI7Ci0gICAgbnVtYmVy
IHw9IG51bWJlciA+PiA0OwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gODsKLSAgICBudW1iZXIg
fD0gbnVtYmVyID4+IDE2OwotICAgIG51bWJlcisrOwotICAgIHJldHVybiBudW1iZXI7Ci19Ci0K
LWlubGluZSBJbnRTaXplIG5leHRQb3dlck9mVHdvKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0g
ICAgcmV0dXJuIEludFNpemUobmV4dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwgbmV4dFBvd2Vy
T2ZUd28oc2l6ZS5oZWlnaHQoKSkpOwotfQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQXJlYUFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgZXhw
bGljaXQgQXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVh
bCB+QXJlYUFsbG9jYXRvcigpOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIG1pbmltdW1BbGxvY2F0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9taW5BbGxvYzsgfQotICAgIHZvaWQgc2V0TWluaW11bUFs
bG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgeyBtX21pbkFsbG9jID0gc2l6
ZTsgfQotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21h
cmdpbjsgfQotICAgIHZvaWQgc2V0TWFyZ2luKGNvbnN0IFdlYkNvcmU6OkludFNpemUgJm1hcmdp
bikgeyBtX21hcmdpbiA9IG1hcmdpbjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGV4cGFuZChjb25z
dCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCBleHBhbmRCeShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJlY3QgYWxsb2NhdGUoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGludCBvdmVyaGVhZCgpIGNvbnN0Owot
Ci1wcm90ZWN0ZWQ6Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7Ci0gICAgV2ViQ29yZTo6
SW50U2l6ZSBtX21pbkFsbG9jOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9tYXJnaW47Ci0KLSAg
ICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JikgY29uc3Q7Ci19OwotCi1jbGFzcyBHZW5lcmFsQXJlYUFsbG9jYXRvciA6IHB1YmxpYyBBcmVh
QWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHZW5lcmFsQXJlYUFsbG9jYXRvcihj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCB+R2VuZXJhbEFyZWFBbGxvY2F0
b3IoKTsKLQotICAgIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICBX
ZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2
b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIGludCBvdmVyaGVhZCgp
IGNvbnN0OwotCi1wcml2YXRlOgotICAgIGVudW0gU3BsaXQgeyBTcGxpdE9uWCwgU3BsaXRPblkg
fTsKLQotICAgIHN0cnVjdCBOb2RlIHsKLSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0Owot
ICAgICAgICBXZWJDb3JlOjpJbnRTaXplIGxhcmdlc3RGcmVlOwotICAgICAgICBOb2RlKiBwYXJl
bnQ7Ci0gICAgICAgIE5vZGUqIGxlZnQ7Ci0gICAgICAgIE5vZGUqIHJpZ2h0OwotICAgIH07Ci0K
LSAgICBOb2RlKiBtX3Jvb3Q7Ci0gICAgaW50IG1fbm9kZUNvdW50OwotCi0gICAgc3RhdGljIHZv
aWQgZnJlZU5vZGUoTm9kZSopOwotICAgIFdlYkNvcmU6OkludFBvaW50IGFsbG9jYXRlRnJvbU5v
ZGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIE5vZGUqKTsKLSAgICBOb2RlKiBzcGxpdE5vZGUo
Tm9kZSosIFNwbGl0KTsKLSAgICBzdGF0aWMgdm9pZCB1cGRhdGVMYXJnZXN0RnJlZShOb2RlKik7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLQotI2VuZGlmIC8vIEFyZWFBbGxvY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMjY2MmVmMDkxOGIzYWE5MjE0MGE0ODQ1MmE1NTU4
MmY1N2JkMzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMTQgKzAsMCBA
QAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLSBDb3B5
cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0K
LSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKLQotI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIK
LSNpbmNsdWRlICJGbG9hdFF1YWQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJXZWJQYWdlLmgiCi0jaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpZm5kZWYgTkRFQlVHCi0jaW5j
bHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLXN0YXRpYyBDb29yZGluYXRlZExheWVySUQgdG9Db29yZGluYXRlZExheWVySUQoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIGxheWVyID8gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIobGF5ZXIpLT5pZCgpIDogMDsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUoKQotewotICAgIG1fc2hvdWxkU3luY0xheWVy
U3RhdGUgPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlm
eUZsdXNoUmVxdWlyZWQodGhpcyk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpkaWRDaGFuZ2VBbmltYXRpb25zKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25zID0g
dHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJl
cXVpcmVkKHRoaXMpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hh
bmdlQ2hpbGRyZW4oKQotewotICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gdHJ1ZTsKLSAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMp
OwotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRpZENoYW5nZUZpbHRlcnMoKQotewotICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSB0
cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVx
dWlyZWQodGhpcyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUltYWdlQmFja2luZygpCi17Ci0gICAgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5n
ID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVz
aFJlcXVpcmVkKHRoaXMpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKQotewotICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3QgPSB0cnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7
ICsraSkKLSAgICAgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSkt
PnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci0gICAgaWYgKHJlcGxpY2FMYXllcigpKQot
ICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSktPnNldFNo
b3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSgpCi17Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwot
ICAgIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7Ci19Ci0KLUNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNs
aWVudCkKLSAgICA6IEdyYXBoaWNzTGF5ZXIoY2xpZW50KQotI2lmbmRlZiBOREVCVUcKLSAgICAs
IG1faXNQdXJnaW5nKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX3Nob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNMYXllclN0YXRlKHRydWUpCi0gICAgLCBtX3No
b3VsZFN5bmNDaGlsZHJlbih0cnVlKQotICAgICwgbV9zaG91bGRTeW5jRmlsdGVycyh0cnVlKQot
ICAgICwgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNB
bmltYXRpb25zKHRydWUpCi0gICAgLCBtX2ZpeGVkVG9WaWV3cG9ydChmYWxzZSkKLSAgICAsIG1f
Y2FudmFzTmVlZHNEaXNwbGF5KGZhbHNlKQotICAgICwgbV9jYW52YXNOZWVkc0NyZWF0ZShmYWxz
ZSkKLSAgICAsIG1fY2FudmFzTmVlZHNEZXN0cm95KGZhbHNlKQotICAgICwgbV9wZW5kaW5nQ29u
dGVudHNTY2FsZUFkanVzdG1lbnQoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdWaXNpYmxlUmVjdEFk
anVzdG1lbnQoZmFsc2UpCi0gICAgLCBtX2Nvb3JkaW5hdG9yKDApCi0gICAgLCBtX2NvbnRlbnRz
U2NhbGUoMSkKLSAgICAsIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKDApCi0gICAgLCBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIoMCkKLSAgICAsIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyKHRoaXMs
ICZDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKQot
ewotICAgIHN0YXRpYyBDb29yZGluYXRlZExheWVySUQgbmV4dExheWVySUQgPSAxOwotICAgIG1f
aWQgPSBuZXh0TGF5ZXJJRCsrOwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIoKQotewotICAgIGlmIChtX2Nvb3JkaW5hdG9yKSB7Ci0gICAg
ICAgIHB1cmdlQmFja2luZ1N0b3JlcygpOwotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5kZXRhY2hM
YXllcih0aGlzKTsKLSAgICB9Ci0gICAgQVNTRVJUKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
ICYmICFtX21haW5CYWNraW5nU3RvcmUpOwotICAgIHdpbGxCZURlc3Ryb3llZCgpOwotfQotCi1i
b29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdy
YXBoaWNzTGF5ZXIqPiYgY2hpbGRyZW4pCi17Ci0gICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6
OnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkKGxheWVyKTsKLSAgICBkaWRDaGFuZ2VD
aGlsZHJlbigpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRB
dEluZGV4KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBpbnQgaW5kZXgpCi17Ci0gICAgR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBdEluZGV4KGxheWVyLCBpbmRleCk7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRy
ZW4oKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUo
R3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCi17Ci0gICAgR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShsYXllciwgc2libGluZyk7Ci0gICAgZGlkQ2hhbmdl
Q2hpbGRyZW4oKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QmVsb3coR3JhcGhpY3NMYXllciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXIqIHNpYmxpbmcpCi17Ci0g
ICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhsYXllciwgc2libGluZyk7Ci0gICAgZGlk
Q2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJl
cGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiBvbGRDaGlsZCwgR3JhcGhpY3NMYXllciogbmV3Q2hp
bGQpCi17Ci0gICAgYm9vbCBvayA9IEdyYXBoaWNzTGF5ZXI6OnJlcGxhY2VDaGlsZChvbGRDaGls
ZCwgbmV3Q2hpbGQpOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBk
aWRDaGFuZ2VDaGlsZHJlbigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpCi17Ci0gICAgaWYgKENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogcGFyZW50TGF5ZXIgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cihwYXJlbnQoKSkpCi0gICAgICAgIHBhcmVudExheWVyLT5kaWRDaGFuZ2VDaGlsZHJlbigpOwot
ICAgIEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHApCi17Ci0g
ICAgaWYgKHBvc2l0aW9uKCkgPT0gcCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0UG9zaXRpb24ocCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KGNvbnN0IEZsb2F0UG9p
bnQzRCYgcCkKLXsKLSAgICBpZiAoYW5jaG9yUG9pbnQoKSA9PSBwKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChwKTsKLSAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgaWYgKHRoaXMtPnNpemUoKSA9PSBzaXplKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRTaXplKHNpemUpOwotCi0g
ICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0U2l6ZShzaXplKTsK
LSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQotewotICAg
IGlmICh0cmFuc2Zvcm0oKSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRUcmFuc2Zvcm0odCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0KQotewotICAgIGlmIChjaGlsZHJlblRyYW5zZm9ybSgpID09
IHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuVHJh
bnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChib29sIGIpCi17Ci0gICAgaWYgKHByZXNl
cnZlczNEKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0
UHJlc2VydmVzM0QoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYm9vbCBiKQotewotICAgIGlm
IChtYXNrc1RvQm91bmRzKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5
ZXI6OnNldE1hc2tzVG9Cb3VuZHMoYik7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChib29sIGIpCi17
Ci0gICAgaWYgKGRyYXdzQ29udGVudCgpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFw
aGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYik7Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRl
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2li
bGUoYm9vbCBiKQotewotICAgIGlmIChjb250ZW50c0FyZVZpc2libGUoKSA9PSBiKQotICAgICAg
ICByZXR1cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKGIpOwotICAg
IGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnNldENvbnRlbnRzVmlzaWJs
ZShiKTsKLQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGJvb2wgYikKLXsKLSAgICBpZiAoY29u
dGVudHNPcGFxdWUoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fbWFpbkJhY2tp
bmdTdG9yZSkKLSAgICAgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFi
KTsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShiKTsKLSAgICBkaWRDaGFu
Z2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRC
YWNrZmFjZVZpc2liaWxpdHkoYm9vbCBiKQotewotICAgIGlmIChiYWNrZmFjZVZpc2liaWxpdHko
KSA9PSBiKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRCYWNrZmFj
ZVZpc2liaWxpdHkoYik7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KQotewotICAg
IGlmICh0aGlzLT5vcGFjaXR5KCkgPT0gb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Jl
Y3QoY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBpZiAoY29udGVudHNSZWN0KCkgPT0gcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KHIpOwot
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzTmVlZHNEaXNwbGF5KCkKLXsKLSAgICBpZiAobV9jYW52YXNQbGF0
Zm9ybUxheWVyKQotICAgICAgICBtX2NhbnZhc05lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgaWYg
KGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsK
LQotICAgIGFkZFJlcGFpbnRSZWN0KGNvbnRlbnRzUmVjdCgpKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9DYW52YXMoUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcikKLXsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBpZiAobV9jYW52
YXNQbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgIEFTU0VSVChtX2NhbnZhc1Rva2VuLmlzVmFsaWQo
KSk7Ci0gICAgICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIG1fY2FudmFzTmVl
ZHNEZXN0cm95ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoKG1fY2FudmFzU2l6ZSAhPSBwbGF0
Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpKSB8fCAobV9jYW52YXNUb2tlbiAhPSBwbGF0
Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpKSkgewotICAgICAgICAgICAgLy8gbV9j
YW52YXNUb2tlbiBjYW4gYmUgZGlmZmVyZW50IHRvIHBsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3Vy
ZmFjZVRva2VuKCksIGV2ZW4gaWYgbV9jYW52YXNQbGF0Zm9ybUxheWVyIGVxdWFscyBwbGF0Zm9y
bUxheWVyLgotICAgICAgICAgICAgbV9jYW52YXNOZWVkc0Rlc3Ryb3kgPSB0cnVlOwotICAgICAg
ICAgICAgbV9jYW52YXNOZWVkc0NyZWF0ZSA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAocGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIG1fY2FudmFzTmVlZHND
cmVhdGUgPSB0cnVlOwotICAgIH0KLQotICAgIG1fY2FudmFzUGxhdGZvcm1MYXllciA9IHBsYXRm
b3JtTGF5ZXI7Ci0gICAgLy8gbV9jYW52YXNUb2tlbiBpcyB1cGRhdGVkIG9ubHkgaGVyZS4gSW4g
ZGV0YWlsLCB3aGVuIEdyYXBoaWNzQ29udGV4dDNEIGlzIGNoYW5nZWQgb3IgcmVzaGFwZWQsIG1f
Y2FudmFzVG9rZW4gaXMgY2hhbmdlZCBhbmQgc2V0Q29udGVudHNUb0NhbnZhcygpIGlzIGFsd2F5
cyBjYWxsZWQuCi0gICAgbV9jYW52YXNTaXplID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyID8gbV9j
YW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpIDogSW50U2l6ZSgpOwotICAg
IG1fY2FudmFzVG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3Jt
TGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCkgOiBHcmFwaGljc1N1cmZhY2VUb2tlbigpOwot
ICAgIEFTU0VSVCghKCFtX2NhbnZhc1Rva2VuLmlzVmFsaWQoKSAmJiBtX2NhbnZhc1BsYXRmb3Jt
TGF5ZXIpKTsKLSAgICBpZiAobV9jYW52YXNQbGF0Zm9ybUxheWVyKQotICAgICAgICBtX2NhbnZh
c05lZWRzRGlzcGxheSA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQo
KS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBs
YXRmb3JtTGF5ZXIpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1ib29s
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBuZXdGaWx0ZXJzKQotewotICAgIGlmIChmaWx0ZXJzKCkgPT0gbmV3RmlsdGVycykKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGlkQ2hhbmdlRmlsdGVycygpOwotICAgIHJldHVybiBH
cmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpOwotfQotI2VuZGlmCi0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgaWYgKG1fbGF5ZXJJbmZvLnNvbGlkQ29sb3IgPT0gY29sb3Ip
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2xheWVySW5mby5zb2xpZENvbG9yID0gY29sb3I7Ci0g
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKLXsKLSAgICBOYXRpdmVJbWFn
ZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkgOiAwOwotICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0cikgewotICAgICAgICAv
LyBUaGlzIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBwb2ludGVyIGVxdWFsaXR5IG9u
IGEgTmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMg
Y2hhbmdlZC4KLSAgICAgICAgLy8gVGhpcyBhc3N1bXB0aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBh
bmQgRUZMLgotICAgICAgICBpZiAobmV3TmF0aXZlSW1hZ2VQdHIgPT0gbV9jb21wb3NpdGVkTmF0
aXZlSW1hZ2VQdHIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9jb21wb3NpdGVk
SW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSBuZXdO
YXRpdmVJbWFnZVB0cjsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9
IDA7Ci0gICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gMDsKLSAgICB9Ci0KLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOwotICAgIGRpZENoYW5n
ZUltYWdlQmFja2luZygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIGlmIChsYXllciA9PSBtYXNr
TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xh
eWVyKGxheWVyKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxh
eWVyLT5zZXRTaXplKHNpemUoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShjb250
ZW50c0FyZVZpc2libGUoKSk7Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb29yZGlu
YXRlZExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpOwotICAgIGNvb3Jk
aW5hdGVkTGF5ZXItPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3Rs
eUNvbXBvc2l0ZUltYWdlKEltYWdlKiBpbWFnZSkgY29uc3QKLXsKLSAgICBpZiAoIWltYWdlIHx8
ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBl
bnVtIHsga01heERpbWVuc3Rpb25Gb3JEaXJlY3RDb21wb3NpdGluZyA9IDIwMDAgfTsKLSAgICBp
ZiAoaW1hZ2UtPndpZHRoKCkgPiBrTWF4RGltZW5zdGlvbkZvckRpcmVjdENvbXBvc2l0aW5nIHx8
IGltYWdlLT5oZWlnaHQoKSA+IGtNYXhEaW1lbnN0aW9uRm9yRGlyZWN0Q29tcG9zaXRpbmcpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciog
bGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09IHJlcGxpY2FMYXllcigpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7Ci0g
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS0+aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKLQotICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKLQotICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOwotfQotCi1Db29yZGluYXRlZExheWVySUQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faWQ7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3Rh
dGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9jb29yZGluYXRvci0+aXNG
bHVzaGluZ0xheWVyQ2hhbmdlcygpKSB7Ci0gICAgICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAg
ICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFzayA9IHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKG1hc2tMYXllcigpKSkKLSAgICAgICAgbWFzay0+Zmx1c2hD
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgaWYgKENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxp
Y2FMYXllcigpKSkKLSAgICAgICAgcmVwbGljYS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhp
c0xheWVyT25seSgpOwotCi0gICAgbV9jb29yZGluYXRvci0+c3luY0ZpeGVkTGF5ZXJzKCk7Ci0K
LSAgICBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxk
cmVuKClbaV0tPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKLX0KLQotQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Kj4obGF5ZXIpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxk
cmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICBWZWN0b3I8Q29vcmRpbmF0
ZWRMYXllcklEPiBjaGlsZElEczsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
KCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkSURzLmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5
ZXJJRChjaGlsZHJlbigpW2ldKSk7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJDaGls
ZHJlbihtX2lkLCBjaGlsZElEcyk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQotewotICAgIGlmICghbV9z
aG91bGRTeW5jRmlsdGVycykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0ZpbHRl
cnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJGaWx0ZXJzKG1faWQsIGZp
bHRlcnMoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5
bmNJbWFnZUJhY2tpbmcoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nID0gZmFsc2U7Ci0K
LSAgICBpZiAobV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpIHsKLSAgICAgICAgQVNTRVJUKCFz
aG91bGRIYXZlQmFja2luZ1N0b3JlKCkpOwotICAgICAgICBBU1NFUlQobV9jb21wb3NpdGVkSW1h
Z2UpOwotCi0gICAgICAgIGJvb2wgaW1hZ2VJbnN0YW5jZVJlcGxhY2VkID0gbV9jb29yZGluYXRl
ZEltYWdlQmFja2luZyAmJiAobV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+aWQoKSAhPSBDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChtX2NvbXBv
c2l0ZWRJbWFnZS5nZXQoKSkpOwotICAgICAgICBpZiAoaW1hZ2VJbnN0YW5jZVJlcGxhY2VkKQot
ICAgICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7Ci0KLSAgICAgICAgaWYg
KCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKSB7Ci0gICAgICAgICAgICBtX2Nvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nID0gbV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQo
bV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwotICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdl
QmFja2luZy0+YWRkSG9zdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQg
PSBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5pZCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
bV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+bWFya0RpcnR5KCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwotCi0gICAgLy8gc3luY0ltYWdlQmFj
a2luZygpIGNoYW5nZWQgbV9sYXllckluZm8uaW1hZ2VJRC4KLSAgICBkaWRDaGFuZ2VMYXllclN0
YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0
ZSgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZhbHNlOwotICAgIG1fbGF5ZXJJbmZvLmZp
eGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgpOwotCi0gICAgbV9sYXllckluZm8uYmFj
a2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAgbV9sYXllckluZm8uY2hp
bGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwotICAgIG1fbGF5ZXJJbmZvLmNv
bnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50
c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBk
cmF3c0NvbnRlbnQoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1Zpc2libGUgPSBjb250ZW50
c0FyZVZpc2libGUoKTsKLSAgICBtX2xheWVySW5mby5tYXNrID0gdG9Db29yZGluYXRlZExheWVy
SUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1Rv
Qm91bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKLSAgICBtX2xh
eWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7Ci0gICAgbV9sYXllckluZm8ucmVw
bGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxpY2FMYXllcigpKTsKLSAgICBtX2xheWVy
SW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLQotICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBv
aW50ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50OwotICAgIG1fbGF5ZXJJbmZvLnBvcyA9IG1fYWRq
dXN0ZWRQb3NpdGlvbjsKLSAgICBtX2xheWVySW5mby5zaXplID0gbV9hZGp1c3RlZFNpemU7Ci0K
LSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCi17Ci0g
ICAgaWYgKCFtX3Nob3VsZFN5bmNBbmltYXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRM
YXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQotewotICAgIGRlc3Ryb3lDYW52YXNJZk5lZWRl
ZCgpOwotICAgIGNyZWF0ZUNhbnZhc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIW1fY2FudmFzTmVl
ZHNEaXNwbGF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jYW52YXNQbGF0Zm9y
bUxheWVyKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX2Nvb3JkaW5hdG9yLT5z
eW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7Ci0jZW5kaWYKLSAgICBtX2Nh
bnZhc05lZWRzRGlzcGxheSA9IGZhbHNlOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6ZGVzdHJveUNhbnZhc0lmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fY2FudmFzTmVlZHNE
ZXN0cm95KQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICBtX2Nvb3JkaW5hdG9yLT5kZXN0cm95Q2FudmFzKG1faWQpOwotI2VuZGlmCi0gICAgbV9jYW52
YXNOZWVkc0Rlc3Ryb3kgPSBmYWxzZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fY2FudmFzTmVlZHNDcmVh
dGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIp
OwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNh
bnZhcyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwotI2VuZGlmCi0gICAgbV9jYW52YXNO
ZWVkc0NyZWF0ZSA9IGZhbHNlOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCi17Ci0gICAgQVNTRVJUKG1f
Y29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0KLSAgICAvLyBTZXRzIHRo
ZSB2YWx1ZXMuCi0gICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KG1fYWRqdXN0ZWRQb3NpdGlvbiwg
bV9hZGp1c3RlZFNpemUsIG1fYWRqdXN0ZWRBbmNob3JQb2ludCwgbV9waXhlbEFsaWdubWVudE9m
ZnNldCk7Ci0KLSAgICBzeW5jSW1hZ2VCYWNraW5nKCk7Ci0gICAgc3luY0xheWVyU3RhdGUoKTsK
LSAgICBzeW5jQW5pbWF0aW9ucygpOwotICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0
KCk7Ci0gICAgc3luY0NoaWxkcmVuKCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHN5
bmNGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOwotICAgIHN5
bmNDYW52YXMoKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmltYWdlQmFj
a2luZ1Zpc2libGUoKQotewotICAgIEFTU0VSVChtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKTsK
LSAgICByZXR1cm4gdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpLmludGVyc2VjdHMoY29u
dGVudHNSZWN0KCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVsZWFz
ZUltYWdlQmFja2luZ0lmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fY29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKLSAg
ICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5yZW1vdmVIb3N0KHRoaXMpOwotICAgIG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuY2xlYXIoKTsKLSAgICBtX2xheWVySW5mby5pbWFnZUlEID0g
SW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKQotewotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Um9vdExheWVyKGJvb2wgaXNSb290KQotewot
ICAgIG1fbGF5ZXJJbmZvLmlzUm9vdExheWVyID0gaXNSb290OwotICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFZpc2libGVD
b250ZW50UmVjdFRyYWplY3RvcnlWZWN0b3IoY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZl
Y3RvcikKLXsKLSAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRUcmFqZWN0b3J5VmVjdG9yKHRyYWplY3RvcnlW
ZWN0b3IpOwotICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHNjYWxlKQot
ewotICAgIG1fY29udGVudHNTY2FsZSA9IHNjYWxlOwotICAgIGlmIChzaG91bGRIYXZlQmFja2lu
Z1N0b3JlKCkpCi0gICAgICAgIG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50ID0gdHJ1
ZTsKLX0KLQotZmxvYXQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjplZmZlY3RpdmVDb250ZW50
c1NjYWxlKCkKLXsKLSAgICByZXR1cm4gc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNm
b3JtcygpID8gMSA6IG1fY29udGVudHNTY2FsZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUoKQotewotICAgIEFTU0VSVChzaG91bGRIYXZl
QmFja2luZ1N0b3JlKCkpOwotICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlIHx8IG1fbWFpbkJh
Y2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpID09IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQmV0d2VlbiBjcmVhdGluZyB0aGUgbmV3IGJhY2tp
bmcgc3RvcmUgYW5kIHBhaW50aW5nIHRoZSBjb250ZW50LAotICAgIC8vIHdlIGRvIG5vdCB3YW50
IHRvIGRyb3AgdGhlIHByZXZpb3VzIG9uZSBhcyB0aGF0IG1pZ2h0IHJlc3VsdCBpbgotICAgIC8v
IGJyaWVmbHkgc2VlaW5nIGZsaWNrZXJpbmcgYXMgdGhlIG9sZCB0aWxlcyBtYXkgYmUgZHJvcHBl
ZCBiZWZvcmUKLSAgICAvLyBzb21ldGhpbmcgcmVwbGFjZXMgdGhlbS4KLSAgICBtX3ByZXZpb3Vz
QmFja2luZ1N0b3JlID0gbV9tYWluQmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKLQotICAgIC8vIE5v
IHJlYXNvbiB0byBzYXZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGZvciBub24tdmlzaWJs
ZSBhcmVhcy4KLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLT5yZW1vdmVBbGxOb25WaXNpYmxl
VGlsZXMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUJhY2tp
bmdTdG9yZSgpCi17Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlID0gYWRvcHRQdHIobmV3IFRpbGVk
QmFja2luZ1N0b3JlKHRoaXMsIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZSh0aGlzKSkp
OwotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghY29udGVudHNPcGFx
dWUoKSk7Ci0gICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRDb250ZW50c1NjYWxlKGVmZmVjdGl2
ZUNvbnRlbnRzU2NhbGUoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0
aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cygqY29udGV4dCwgcmVjdCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNv
bnN0IFZlY3RvcjxJbnRSZWN0PiYgLyogdXBkYXRlZFJlY3RzICovKQotewotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNy
ZWF0aW9uKCkKLXsKLSAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7
Ci19Ci0KLUludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9y
ZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRo
KCksIHNpemUoKS5oZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsYW1wVG9Db250ZW50c1Jl
Y3RJZlJlY3RJc0luZmluaXRlKEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVu
dHNSZWN0KQotewotICAgIGlmIChyZWN0LndpZHRoKCkgPj0gTGF5b3V0VW5pdDo6bmVhcmx5TWF4
KCkgfHwgcmVjdC53aWR0aCgpIDw9IExheW91dFVuaXQ6Om5lYXJseU1pbigpKSB7Ci0gICAgICAg
IHJlY3Quc2V0WChjb250ZW50c1JlY3QueCgpKTsKLSAgICAgICAgcmVjdC5zZXRXaWR0aChjb250
ZW50c1JlY3Qud2lkdGgoKSk7Ci0gICAgfQotCi0gICAgaWYgKHJlY3QuaGVpZ2h0KCkgPj0gTGF5
b3V0VW5pdDo6bmVhcmx5TWF4KCkgfHwgcmVjdC5oZWlnaHQoKSA8PSBMYXlvdXRVbml0OjpuZWFy
bHlNaW4oKSkgewotICAgICAgICByZWN0LnNldFkoY29udGVudHNSZWN0LnkoKSk7Ci0gICAgICAg
IHJlY3Quc2V0SGVpZ2h0KGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotfQotCi1JbnRS
ZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVj
dCgpCi17Ci0gICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KLSAg
ICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhl
IHZpc2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFu
ZSAobGF5ZXIgY29vcmRpbmF0ZXMpLgotICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBi
ZSBzcXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhp
cyBxdWFkLAotICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwg
dmlzaWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciBy
ZWN0IG11bHRpcGxpZXIpLgotICAgIEFTU0VSVChtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0gPT0g
bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKSk7Ci0gICAgRmxvYXRSZWN0IHJl
Y3QgPSBtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0uY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVh
ZChGbG9hdFF1YWQobV9jb29yZGluYXRvci0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpKSk7Ci0gICAg
Y2xhbXBUb0NvbnRlbnRzUmVjdElmUmVjdElzSW5maW5pdGUocmVjdCwgdGlsZWRCYWNraW5nU3Rv
cmVDb250ZW50c1JlY3QoKSk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci19
Ci0KLUNvbG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgpID8gQ29s
b3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzLCBJbnRQb2ludCYgb2Zmc2V0KQotewot
ICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNG
bHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICByZXR1cm4gbV9jb29yZGluYXRvci0+YmVnaW5D
b250ZW50VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyBDb29yZGluYXRlZFN1cmZhY2U6
Ok5vRmxhZ3MgOiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEsIGF0bGFzLCBvZmZz
ZXQpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSh1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7
Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0g
ICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRp
bGVSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUo
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwotICAg
IEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1f
Y29vcmRpbmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVj
dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQz
Ml90IHRpbGVJRCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgQVNTRVJUKG1f
Y29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0g
ICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQotewotICAgIGlm
ICghc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKSB7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS5jbGVhcigpOwotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVz
dG1lbnQpIHsKLSAgICAgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotICAgICAgICBtX3BlbmRp
bmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoaXMg
aXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBiYWNraW5nIHN0
b3JlLCBvbmNlIHdlCi0gICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdlIGFyZSByZWFk
eSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgotICAgIGlmICghbV9tYWluQmFj
a2luZ1N0b3JlKQotICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgIGlmIChtX3Bl
bmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQpIHsKLSAgICAgICAgbV9wZW5kaW5nVmlzaWJsZVJl
Y3RBZGp1c3RtZW50ID0gZmFsc2U7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJX
aXRoVGlsZXNJZk5lZWRlZCgpOwotICAgIH0KLQotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBk
YXRlVGlsZUJ1ZmZlcnMoKTsKLQotICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGlz
IGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgotICAgIC8vIHJlbW92aW5n
IHRoZSBleGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmlyc3Qg
dGltZQotICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3ZlIHRo
ZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlLgotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUtPnZp
c2libGVBcmVhSXNDb3ZlcmVkKCkpCi0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xl
YXIoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFja2luZ1N0
b3JlcygpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiB1cGRh
dGVNb2RlUHJvdGVjdG9yKG1faXNQdXJnaW5nLCB0cnVlKTsKLSNlbmRpZgotICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsK
LQotICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwotCi0gICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29vcmRp
bmF0b3IoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNvb3JkaW5hdG9y
KQotewotICAgIG1fY29vcmRpbmF0b3IgPSBjb29yZGluYXRvcjsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCkKLXsKLSAg
ICBpZiAoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX3BlbmRpbmdWaXNpYmxl
UmVjdEFkanVzdG1lbnQgPSB0cnVlOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKLXsKLSAgICBpZiAob3BhY2l0eSgpIDwgMC4w
MSAmJiAhbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5n
ZXMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghbV9zaG91
bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3lu
Y0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZyAmJiAhbV9zaG91bGRTeW5jQW5p
bWF0aW9ucyAmJiAhbV9jYW52YXNOZWVkc0Rpc3BsYXkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkuaW50ZXJzZWN0cyh0
aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IGlzSW50ZWdyYWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
dmFsdWUpID09IHZhbHVlOwotfQotCi1GbG9hdFBvaW50IENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKQotewotICAgIEZsb2F0UG9pbnQgb2Zm
c2V0OwotICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3VyckxheWVyID0gdGhpczsgY3Vy
ckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpKQotICAgICAgICBvZmZzZXQg
Kz0gY3VyckxheWVyLT5wb3NpdGlvbigpOwotCi0gICAgcmV0dXJuIG9mZnNldDsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQaXhlbEFsaWdubWVudChGbG9hdFBv
aW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiBzaXplLCBGbG9hdFBvaW50M0QmIGFuY2hvclBvaW50
LCBGbG9hdFNpemUmIGFsaWdubWVudE9mZnNldCkKLXsKLSAgICBpZiAoaXNJbnRlZ3JhbChlZmZl
Y3RpdmVDb250ZW50c1NjYWxlKCkpKSB7Ci0gICAgICAgIHBvc2l0aW9uID0gbV9wb3NpdGlvbjsK
LSAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKLSAgICAgICAgYW5jaG9yUG9pbnQgPSBtX2FuY2hvclBv
aW50OwotICAgICAgICBhbGlnbm1lbnRPZmZzZXQgPSBGbG9hdFNpemUoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSA9IGNv
bXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCk7Ci0KLSAgICBGbG9hdFJlY3QgYmFzZVJlbGF0
aXZlQm91bmRzKHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIG1fc2l6ZSk7Ci0gICAgRmxvYXRSZWN0
IHNjYWxlZEJvdW5kcyA9IGJhc2VSZWxhdGl2ZUJvdW5kczsKLQotICAgIC8vIFNjYWxlIGJ5IHRo
ZSBlZmZlY3RpdmUgc2NhbGUgZmFjdG9yIHRvIGNvbXB1dGUgdGhlIHNjcmVlbi1yZWxhdGl2ZSBi
b3VuZHMuCi0gICAgc2NhbGVkQm91bmRzLnNjYWxlKGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7
Ci0KLSAgICAvLyBSb3VuZCB0byBpbnRlZ2VyIGJvdW5kYXJpZXMuCi0gICAgLy8gTk9URTogV2hl
biB1c2luZyBlbmNsb3NpbmdJbnRSZWN0IChhcyBtYWMpIGl0IHdpbGwgaGF2ZSBkaWZmZXJlbnQg
c2l6ZXMgZGVwZW5kaW5nIG9uIHBvc2l0aW9uLgotICAgIEZsb2F0UmVjdCBhbGlnbmVkQm91bmRz
ID0gcm91bmRlZEludFJlY3Qoc2NhbGVkQm91bmRzKTsKLQotICAgIC8vIENvbnZlcnQgYmFjayB0
byBsYXllciBjb29yZGluYXRlcy4KLSAgICBhbGlnbmVkQm91bmRzLnNjYWxlKDEgLyBlZmZlY3Rp
dmVDb250ZW50c1NjYWxlKCkpOwotCi0gICAgLy8gQ29udmVydCBiYWNrIHRvIGxheWVyIGNvb3Jk
aW5hdGVzLgotICAgIGFsaWdubWVudE9mZnNldCA9IGJhc2VSZWxhdGl2ZUJvdW5kcy5sb2NhdGlv
bigpIC0gYWxpZ25lZEJvdW5kcy5sb2NhdGlvbigpOwotCi0gICAgcG9zaXRpb24gPSBtX3Bvc2l0
aW9uIC0gYWxpZ25tZW50T2Zmc2V0OwotICAgIHNpemUgPSBhbGlnbmVkQm91bmRzLnNpemUoKTsK
LQotICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNvbXB1dGUgYSBuZXcgYW5jaG9yIHBvaW50IHdoaWNo
IGNvbXBlbnNhdGVzIGZvciByb3VuZGluZy4KLSAgICBmbG9hdCBhbmNob3JQb2ludFggPSBtX2Fu
Y2hvclBvaW50LngoKTsKLSAgICBmbG9hdCBhbmNob3JQb2ludFkgPSBtX2FuY2hvclBvaW50Lnko
KTsKLQotICAgIGlmIChhbGlnbmVkQm91bmRzLndpZHRoKCkpCi0gICAgICAgIGFuY2hvclBvaW50
WCA9IChiYXNlUmVsYXRpdmVCb3VuZHMud2lkdGgoKSAqIGFuY2hvclBvaW50WCArIGFsaWdubWVu
dE9mZnNldC53aWR0aCgpKSAvIGFsaWduZWRCb3VuZHMud2lkdGgoKTsKLQotICAgIGlmIChhbGln
bmVkQm91bmRzLmhlaWdodCgpKQotICAgICAgICBhbmNob3JQb2ludFkgPSAoYmFzZVJlbGF0aXZl
Qm91bmRzLmhlaWdodCgpICogYW5jaG9yUG9pbnRZICsgYWxpZ25tZW50T2Zmc2V0LmhlaWdodCgp
KSAvIGFsaWduZWRCb3VuZHMuaGVpZ2h0KCk7Ci0KLSAgICBhbmNob3JQb2ludCA9IEZsb2F0UG9p
bnQzRChhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WSwgbV9hbmNob3JQb2ludC56KCkgKiBlZmZl
Y3RpdmVDb250ZW50c1NjYWxlKCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQotewotICAgIC8vIFdoZW4gd2UgaGF2
ZSBhIHRyYW5zZm9ybSBhbmltYXRpb24sIHdlIG5lZWQgdG8gdXBkYXRlIHZpc2libGUgcmVjdCBl
dmVyeSBmcmFtZSB0byBhZGp1c3QgdGhlIHZpc2libGUgcmVjdCBvZiBhIGJhY2tpbmcgc3RvcmUu
Ci0gICAgYm9vbCBoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24gPSBzZWxmT3JBbmNlc3Rvckhh
c0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpOwotICAgIGlmICghbV9zaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCAmJiAhaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7Ci0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggY3VycmVudFRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOwotICAgIGlmIChoYXNB
Y3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgIGNsaWVudCgpLT5nZXRDdXJyZW50VHJh
bnNmb3JtKHRoaXMsIGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0
TG9jYWxUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBtX2xheWVyVHJhbnNmb3Jt
LnNldEFuY2hvclBvaW50KG1fYWRqdXN0ZWRBbmNob3JQb2ludCk7Ci0gICAgbV9sYXllclRyYW5z
Zm9ybS5zZXRQb3NpdGlvbihtX2FkanVzdGVkUG9zaXRpb24pOwotICAgIG1fbGF5ZXJUcmFuc2Zv
cm0uc2V0U2l6ZShtX2FkanVzdGVkU2l6ZSk7Ci0KLSAgICBtX2xheWVyVHJhbnNmb3JtLnNldEZs
YXR0ZW5pbmcoIXByZXNlcnZlczNEKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRy
ZW5UcmFuc2Zvcm0oY2hpbGRyZW5UcmFuc2Zvcm0oKSk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5j
b21iaW5lVHJhbnNmb3JtcyhwYXJlbnQoKSA/IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBh
cmVudCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZvckNoaWxkcmVuKCkgOiBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpKTsKLQotICAgIG1fY2FjaGVkSW52ZXJzZVRyYW5zZm9ybSA9IG1fbGF5
ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCk7Ci0KLSAgICAvLyBUaGUgY29tYmluZWQg
dHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0Lgot
ICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVWaXNpYmxlKCkgJiYgIW1fc2l6ZS5p
c0VtcHR5KCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNl
c3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fYW5p
bWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghcGFyZW50KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcihwYXJlbnQoKSktPnNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9u
KCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZWxmT3JBbmNlc3Rvckhh
dmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKLXsKLSAgICBpZiAobV9hbmltYXRpb25zLmhhc0FjdGl2
ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCku
aXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIXBhcmVudCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIocGFyZW50KCkpLT5zZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7
Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRpb24oY29uc3Qg
S2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYgYm94U2l6ZSwgY29u
c3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleWZyYW1lc05hbWUsIGRvdWJsZSBk
ZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0KQotewotICAgIEFTU0VSVCgha2V5ZnJhbWVzTmFtZS5p
c0VtcHR5KCkpOwotCi0gICAgaWYgKCFhbmltIHx8IGFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlv
bigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyIHx8ICh2YWx1ZUxpc3QucHJvcGVydHkoKSAhPSBB
bmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9
IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ym9vbCBsaXN0c01hdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBpZ25vcmVkSGFzQmlnUm90YXRpb247
Ci0KLSAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSkKLSAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJhbnNmb3JtT3BlcmF0
aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlvbikgPj0gMDsKLQotICAgIG1fbGFz
dEFuaW1hdGlvblN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGRlbGF5QXNOZWdhdGl2
ZVRpbWVPZmZzZXQ7Ci0gICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xheWVyQW5pbWF0aW9u
KGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgbV9sYXN0QW5pbWF0aW9u
U3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7Ci0gICAgbV9hbmltYXRpb25TdGFydGVkVGltZXIuc3Rh
cnRPbmVTaG90KDApOwotICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhdXNlQW5pbWF0aW9uKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUpCi17Ci0gICAgbV9hbmltYXRp
b25zLnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWUpOwotICAgIGRpZENoYW5nZUFuaW1hdGlvbnMo
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCi17Ci0gICAgbV9hbmltYXRpb25zLnJlbW92ZShh
bmltYXRpb25OYW1lKTsKLSAgICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkKLXsK
LSAgICBtX2FuaW1hdGlvbnMuc3VzcGVuZCh0aW1lKTsKLSAgICBkaWRDaGFuZ2VBbmltYXRpb25z
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXN1bWVBbmltYXRpb25z
KCkKLXsKLSAgICBtX2FuaW1hdGlvbnMucmVzdW1lKCk7Ci0gICAgZGlkQ2hhbmdlQW5pbWF0aW9u
cygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRl
ZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiopCi17Ci0gICAgY2xp
ZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgbV9sYXN0QW5pbWF0aW9uU3RhcnRU
aW1lKTsKLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NmM0MzU4NWM3MGM4ZTAzMDY1ZTRkY2FhMjdlNGYwZGEyZmEzNjk0Ni4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCi0jZGVm
aW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCi0KLSNpbmNsdWRlICJDb29yZGluYXRlZElt
YWdlQmFja2luZy5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCi0jaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIK
LSNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIK
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKLSNp
bmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYlByb2Nl
c3MuaCIKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzU3VyZmFjZVRva2VuLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxXZWJDb3JlL1J1bkxvb3AuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCB7Ci1wdWJsaWM6
Ci0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCA9IDA7Ci0K
LSAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGls
ZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpID0g
MDsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBD
b29yZGluYXRlZExheWVySW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hp
bGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2b2lkIHN5bmNM
YXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJikgPSAwOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdmly
dHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRm
b3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRs
YXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7Ci19OwotfQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xh
eWVyCi0gICAgLCBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKLSAgICAsIHB1YmxpYyBX
ZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpIb3N0Ci0gICAgLCBwdWJsaWMgV2ViS2l0
OjpDb29yZGluYXRlZFRpbGVDbGllbnQgewotcHVibGljOgotICAgIGV4cGxpY2l0IENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKCk7Ci0KLSAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9t
IEdyYXBoaWNzTGF5ZXIuaC4KLSAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZChHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJ
bmRleChHcmFwaGljc0xheWVyKiwgaW50KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVy
KikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVy
KiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9t
UGFyZW50KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29u
c3QgRmxvYXRQb2ludDNEJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29u
c3QgRmxvYXRTaXplJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1Zpc2libGUoYm9vbCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzT3BhcXVlKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFj
ZVZpc2liaWxpdHkoYm9vbCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3Qg
SW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29s
b3IoY29uc3QgQ29sb3ImKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGlyZWN0
bHlDb21wb3NpdGVJbWFnZShJbWFnZSopIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKSBPVkVSUklERTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCBi
b29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIE9WRVJSSURFOwotI2VuZGlm
Ci0gICAgdmlydHVhbCBib29sIGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYs
IGNvbnN0IEludFNpemUmLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmLCBkb3VibGUp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcm
LCBkb3VibGUpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29u
c3QgU3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25z
KGRvdWJsZSB0aW1lKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lQW5pbWF0aW9u
cygpIE9WRVJSSURFOwotCi0gICAgRmxvYXRQb2ludCBjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSgpOwotICAgIHZvaWQgY29tcHV0ZVBpeGVsQWxpZ25tZW50KEZsb2F0UG9pbnQmIHBvc2l0
aW9uLCBGbG9hdFNpemUmLCBGbG9hdFBvaW50M0QmIGFuY2hvclBvaW50LCBGbG9hdFNpemUmIGFs
aWdubWVudE9mZnNldCk7Ci0KLSAgICB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpOwotICAg
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBv
aW50Jik7Ci0KLSAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsKLQotICAgIFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllcklEIGlkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9y
dChib29sIGlzRml4ZWQpIHsgbV9maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9Ci0KLSAgICBJ
bnRSZWN0IGNvdmVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkJhY2tpbmdTdG9yZSA/IG1f
bWFpbkJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX21haW5CYWNraW5nU3RvcmUtPmNvdmVy
UmVjdCgpKSA6IEludFJlY3QoKTsgfQotCi0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQK
LSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tp
bmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3Jl
YXRpb24oKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVD
b250ZW50c1JlY3QoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5n
U3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNr
aW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIC8vIENvb3Jk
aW5hdGVkVGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRh
dGUoY29uc3QgSW50U2l6ZSYsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURF
OwotCi0gICAgdm9pZCBzZXRDb29yZGluYXRvcihXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudCopOwotCi0gICAgdm9pZCBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgp
OwotICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgYm9vbCBoYXNQZW5kaW5nVmlz
aWJsZUNoYW5nZXMoKTsKLQotcHJpdmF0ZToKLSAgICBib29sIGZpeGVkVG9WaWV3cG9ydCgpIGNv
bnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9Ci0KLSAgICB2b2lkIGRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKLSAgICB2b2lkIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIGRp
ZENoYW5nZUdlb21ldHJ5KCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDaGlsZHJlbigpOwotI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRpZENoYW5nZUZpbHRlcnMoKTsKLSNlbmRpZgot
ICAgIHZvaWQgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7Ci0KLSAgICB2b2lkIHN5bmNMYXllclN0
YXRlKCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwotICAgIHZvaWQgc3luY0NoaWxkcmVu
KCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc3luY0ZpbHRlcnMoKTsKLSNl
bmRpZgotICAgIHZvaWQgc3luY0ltYWdlQmFja2luZygpOwotICAgIHZvaWQgc3luY0NhbnZhcygp
OwotICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICB2b2lkIHVw
ZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwot
ICAgIHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6SG9zdAotICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNp
YmxlKCkgT1ZFUlJJREU7Ci0KLSAgICB2b2lkIGRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpOwotICAg
IHZvaWQgY3JlYXRlQ2FudmFzSWZOZWVkZWQoKTsKLQotICAgIGJvb2wgc2hvdWxkSGF2ZUJhY2tp
bmdTdG9yZSgpIGNvbnN0OwotICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zv
cm1BbmltYXRpb24oKSBjb25zdDsKLSAgICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmlu
ZVRyYW5zZm9ybXMoKTsKLSAgICB2b2lkIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLQotICAgIHZv
aWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKLSAgICBmbG9hdCBlZmZlY3RpdmVDb250
ZW50c1NjYWxlKCk7Ci0KLSAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVy
PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4qKTsKLQotICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllcklEIG1faWQ7Ci0gICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyBtX2xheWVySW5m
bzsKLSAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtOwotICAgIEZsb2F0U2l6
ZSBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0OwotICAgIEZsb2F0U2l6ZSBtX2FkanVzdGVkU2l6ZTsK
LSAgICBGbG9hdFBvaW50IG1fYWRqdXN0ZWRQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9h
ZGp1c3RlZEFuY2hvclBvaW50OwotCi0jaWZuZGVmIE5ERUJVRwotICAgIGJvb2wgbV9pc1B1cmdp
bmc7Ci0jZW5kaWYKLSAgICBib29sIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Q6IDE7Ci0gICAg
Ym9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRlOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hp
bGRyZW46IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNGaWx0ZXJzOiAxOwotICAgIGJvb2wgbV9z
aG91bGRTeW5jSW1hZ2VCYWNraW5nOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jQW5pbWF0aW9u
czogMTsKLSAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKLSAgICBib29sIG1fY2FudmFz
TmVlZHNEaXNwbGF5IDogMTsKLSAgICBib29sIG1fY2FudmFzTmVlZHNDcmVhdGUgOiAxOwotICAg
IGJvb2wgbV9jYW52YXNOZWVkc0Rlc3Ryb3kgOiAxOwotICAgIGJvb2wgbV9wZW5kaW5nQ29udGVu
dHNTY2FsZUFkanVzdG1lbnQgOiAxOwotICAgIGJvb2wgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1
c3RtZW50IDogMTsKLQotICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
KiBtX2Nvb3JkaW5hdG9yOwotICAgIE93blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFj
a2luZ1N0b3JlOwotICAgIE93blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tp
bmdTdG9yZTsKLSAgICBmbG9hdCBtX2NvbnRlbnRzU2NhbGU7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+
IG1fY29tcG9zaXRlZEltYWdlOwotICAgIE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2
ZUltYWdlUHRyOwotICAgIFJlZlB0cjxXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBt
X2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOwotCi0gICAgUGxhdGZvcm1MYXllciogbV9jYW52YXNQ
bGF0Zm9ybUxheWVyOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIEludFNpemUgbV9j
YW52YXNTaXplOwotICAgIEdyYXBoaWNzU3VyZmFjZVRva2VuIG1fY2FudmFzVG9rZW47Ci0jZW5k
aWYKLSAgICBUaW1lcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+IG1fYW5pbWF0aW9uU3RhcnRl
ZFRpbWVyOwotICAgIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKLSAgICBk
b3VibGUgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lOwotfTsKLQotQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7Ci0KLX0K
LSNlbmRpZgotCi0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX0gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA0MzE0OTMyNWNhNWE3NmRjOTViNDc1MmNk
NmVkMmZmOWI2YTZmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNjUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoSW1h
Z2UqIGltYWdlKQotewotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGtlZXBzIGEgUmVm
UHRyPEltYWdlPiBtZW1iZXIsIHNvIHRoZSBzYW1lIEltYWdlIHBvaW50ZXIgY2FuIG5vdCByZWZl
ciB0d28gZGlmZmVyZW50IGluc3RhbmNlcyB1bnRpbCBDb29yZGluYXRlZEltYWdlQmFja2luZyBy
ZWxlYXNlcyB0aGUgbWVtYmVyLgotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQ+KGltYWdlKTsKLX0KLQotUGFzc1JlZlB0cjxDb29yZGluYXRlZElt
YWdlQmFja2luZz4gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRvciog
Y2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKGNsaWVudCwgaW1hZ2UpKTsKLX0KLQotQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiBj
bGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQotICAgIDogbV9jb29yZGluYXRvcihjbGll
bnQpCi0gICAgLCBtX2ltYWdlKGltYWdlKQotICAgICwgbV9pZChnZXRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKG1faW1hZ2UuZ2V0KCkpKQotICAgICwgbV9jbGVhckNvbnRlbnRzVGltZXIodGhp
cywgJkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZCkKLSAg
ICAsIG1faXNEaXJ0eShmYWxzZSkKLSAgICAsIG1faXNWaXNpYmxlKGZhbHNlKQotewotICAgIC8v
IEZJWE1FOiBXZSB3b3VsZCBuZWVkIHRvIGRlY29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGlu
dG8gYSBHcmFwaGljc1N1cmZhY2UuCi0gICAgLy8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYK
LQotICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZyhpZCgpKTsKLX0KLQotQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6On5Db29yZGluYXRlZEltYWdlQmFja2luZygpCi17Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmFkZEhvc3QoSG9zdCogaG9zdCkKLXsKLSAg
ICBBU1NFUlQoIW1faG9zdHMuY29udGFpbnMoaG9zdCkpOwotICAgIG1faG9zdHMuYXBwZW5kKGhv
c3QpOwotfQotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KEhvc3Qq
IGhvc3QpCi17Ci0gICAgc2l6ZV90IHBvc2l0aW9uID0gbV9ob3N0cy5maW5kKGhvc3QpOwotICAg
IEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3VuZCk7Ci0gICAgbV9ob3N0cy5yZW1vdmUocG9zaXRp
b24pOwotCi0gICAgaWYgKG1faG9zdHMuaXNFbXB0eSgpKQotICAgICAgICBtX2Nvb3JkaW5hdG9y
LT5yZW1vdmVJbWFnZUJhY2tpbmcoaWQoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6Om1hcmtEaXJ0eSgpCi17Ci0gICAgbV9pc0RpcnR5ID0gdHJ1ZTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlKCkKLXsKLSAgICByZWxlYXNlU3VyZmFjZUlm
TmVlZGVkKCk7Ci0KLSAgICBib29sIGNoYW5nZWRUb1Zpc2libGU7Ci0gICAgdXBkYXRlVmlzaWJp
bGl0eUlmTmVlZGVkKGNoYW5nZWRUb1Zpc2libGUpOwotICAgIGlmICghbV9pc1Zpc2libGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmICghY2hhbmdlZFRvVmlzaWJsZSkgewotICAgICAgICBp
ZiAoIW1faXNEaXJ0eSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobV9uYXRp
dmVJbWFnZVB0ciA9PSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSB7Ci0g
ICAgICAgICAgICBtX2lzRGlydHkgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fc3VyZmFjZSA9IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRl
KG1faW1hZ2UtPnNpemUoKSwgbV9pbWFnZS0+Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IENvb3Jk
aW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBoYSA6IENvb3JkaW5hdGVkU3VyZmFjZTo6Tm9GbGFn
cyk7Ci0gICAgaWYgKCFtX3N1cmZhY2UpIHsKLSAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgbV9pbWFnZS0+c2l6ZSgpKTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0
ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7Ci0gICAgY29udGV4dC0+
ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QsIHJlY3Qp
OwotCi0gICAgbV9uYXRpdmVJbWFnZVB0ciA9IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKCk7Ci0KLSAgICAvLyBJZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZhaWxzLCB0cnkgYWdh
aW4gaW4gdGhlIG5leHQgdXBkYXRlLgotICAgIGJvb2wgc3VjY2VzcyA9IG1fY29vcmRpbmF0b3It
PnVwZGF0ZUltYWdlQmFja2luZyhpZCgpLCBtX3N1cmZhY2UpOwotICAgIG1faXNEaXJ0eSA9ICFz
dWNjZXNzOwotfQotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFj
ZUlmTmVlZGVkKCkKLXsKLSAgICAvLyBXZSBtdXN0IGtlZXAgbV9zdXJmYWNlIHVudGlsIFVJIFBy
b2Nlc3MgcmVhZHMgbV9zdXJmYWNlLgotICAgIC8vIElmIG1fc3VyZmFjZSBleGlzdHMsIGl0IHdh
cyBjcmVhdGVkIGluIHRoZSBwcmV2aW91cyB1cGRhdGUuCi0gICAgbV9zdXJmYWNlLmNsZWFyKCk7
Ci19Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgY2xlYXJDb250ZW50c1RpbWVySW50ZXJ2YWwgPSAz
OwotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGVWaXNpYmlsaXR5SWZOZWVk
ZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSkKLXsKLSAgICBib29sIHByZXZpb3VzSXNWaXNpYmxl
ID0gbV9pc1Zpc2libGU7Ci0KLSAgICBtX2lzVmlzaWJsZSA9IGZhbHNlOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9ob3N0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9ob3N0
c1tpXS0+aW1hZ2VCYWNraW5nVmlzaWJsZSgpKSB7Ci0gICAgICAgICAgICBtX2lzVmlzaWJsZSA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wg
Y2hhbmdlZFRvSW52aXNpYmxlID0gcHJldmlvdXNJc1Zpc2libGUgJiYgIW1faXNWaXNpYmxlOwot
ICAgIGlmIChjaGFuZ2VkVG9JbnZpc2libGUpIHsKLSAgICAgICAgQVNTRVJUKCFtX2NsZWFyQ29u
dGVudHNUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICAgICAgbV9jbGVhckNvbnRlbnRzVGltZXIuc3Rh
cnRPbmVTaG90KGNsZWFyQ29udGVudHNUaW1lckludGVydmFsKTsKLSAgICB9Ci0KLSAgICBjaGFu
Z2VkVG9WaXNpYmxlID0gIXByZXZpb3VzSXNWaXNpYmxlICYmIG1faXNWaXNpYmxlOwotCi0gICAg
aWYgKG1faXNWaXNpYmxlICYmIG1fY2xlYXJDb250ZW50c1RpbWVyLmlzQWN0aXZlKCkpIHsKLSAg
ICAgICAgbV9jbGVhckNvbnRlbnRzVGltZXIuc3RvcCgpOwotICAgICAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHVwZGF0ZSB0aGUgdGV4dHVyZSBpZiB3ZSBkaWRuJ3QgcmVtb3ZlIHRoZSB0ZXh0dXJl
LgotICAgICAgICBjaGFuZ2VkVG9WaXNpYmxlID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZChXZWJDb3JlOjpU
aW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4qKQotewotICAgIG1fY29vcmRpbmF0b3ItPmNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaWQoKSk7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZGIyYTAyZWI4MmRmMjdkOTEwZjVhOWNjYjBhNzBj
ZTc0MzRmNDEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuaAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKLSNk
ZWZpbmUgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCi0jaW5jbHVkZSAiQ29v
cmRpbmF0ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L1RpbWVyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBDb29yZGluYXRlZEltYWdlQmFj
a2luZyA6IHB1YmxpYyBSZWZDb3VudGVkPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiB7Ci1wdWJs
aWM6Ci0gICAgY2xhc3MgQ29vcmRpbmF0b3IgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVh
bCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgfTsKLQotICAgIGNsYXNzIEhvc3Qg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUo
KSA9IDA7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nPiBjcmVhdGUoQ29vcmRpbmF0b3IqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7
Ci0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKTsKLQotICAgIHN0YXRpYyBD
b29yZGluYXRlZEltYWdlQmFja2luZ0lEIGdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoV2Vi
Q29yZTo6SW1hZ2UqKTsKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQotCi0gICAgdm9pZCBhZGRIb3N0KEhvc3QqKTsKLSAgICB2b2lkIHJl
bW92ZUhvc3QoSG9zdCopOwotCi0gICAgLy8gV2hlbiBhIG5ldyBpbWFnZSBpcyB1cGRhdGVkIG9y
IGFuIGFuaW1hdGVkIGdpZiBpcyBwcm9ncmVzc2VkLCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIg
Y2FsbHMgbWFya0RpcnR5KCkuCi0gICAgdm9pZCBtYXJrRGlydHkoKTsKLQotICAgIC8vIENyZWF0
ZSwgcmVtb3ZlIG9yIHVwZGF0ZSBpdHMgYmFja2luZy4KLSAgICB2b2lkIHVwZGF0ZSgpOwotCi1w
cml2YXRlOgotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJbWFnZT4pOwotCi0gICAgdm9pZCByZWxlYXNlU3VyZmFjZUlmTmVlZGVk
KCk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlz
aWJsZSk7Ci0gICAgdm9pZCBjbGVhckNvbnRlbnRzVGltZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxD
b29yZGluYXRlZEltYWdlQmFja2luZz4qKTsKLQotICAgIENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5h
dG9yOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gbV9pbWFnZTsKLSAgICBXZWJDb3JlOjpO
YXRpdmVJbWFnZVB0ciBtX25hdGl2ZUltYWdlUHRyOwotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgbV9pZDsKLSAgICBWZWN0b3I8SG9zdCo+IG1faG9zdHM7Ci0KLSAgICBSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7Ci0KLSAgICBXZWJDb3JlOjpUaW1lcjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4gbV9jbGVhckNvbnRlbnRzVGltZXI7Ci0KLSAgICBib29sIG1faXNE
aXJ0eTsKLSAgICBib29sIG1faXNWaXNpYmxlOwotCi19OwotCi19Ci0jZW5kaWYKLQotI2VuZGlm
IC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCmluZGV4IDBmYzFhZjJmZDRm
NDc0MThmNTYzNzM4YzJmNWM2NjhkN2RkOWY4YTkuLmJmMTVhNWFlMDkzMmVlZjZkOWM4MWFmMjRl
MmQzZGRjY2U3NTE2YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcApAQCAtMzEsMTIgKzMxLDEwIEBACiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmgiCiAKICNpbmNsdWRlICJDb29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaCIKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiTWVzc2FnZUlELmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8u
aCIKICNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNsdWRlICJXZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC01MCw2ICs0OCw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJMYXllckNvbXBvc2l0b3IuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlclZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaD4KICNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdl
Lmg+CiAKQEAgLTU5OCw3ICs1OTcsNyBAQCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUltYWdlQmFja2luZwogICAgIElt
YWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlE
KTsKICAgICBSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGltYWdlQmFja2luZzsKICAg
ICBpZiAoaXQgPT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKSB7Ci0gICAgICAgIGltYWdlQmFja2lu
ZyA9IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUodGhpcywgaW1hZ2UpOworICAgICAg
ICBpbWFnZUJhY2tpbmcgPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKHRoaXMsICZj
cmVhdGVDb29yZGluYXRlZFN1cmZhY2UsIGltYWdlKTsKICAgICAgICAgbV9pbWFnZUJhY2tpbmdz
LmFkZChpbWFnZUlELCBpbWFnZUJhY2tpbmcpOwogICAgIH0gZWxzZQogICAgICAgICBpbWFnZUJh
Y2tpbmcgPSBpdC0+dmFsdWU7CkBAIC02ODMsMTggKzY4MiwyMyBAQCBQYXNzT3duUHRyPEdyYXBo
aWNzTGF5ZXI+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlR3JhcGhpY3NMYXllcihH
cmFwaGljcwogICAgIHJldHVybiBhZG9wdFB0cihsYXllcik7CiB9CiAKK1Bhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvb3JkaW5h
dGVkU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdz
IGZsYWdzKQoreworICAgIHJldHVybiBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXpl
LCBmbGFncyk7Cit9CisKIGJvb2wgTGF5ZXJUcmVlSG9zdDo6c3VwcG9ydHNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3Q6OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHRpbGVSZWN0KQogewogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsK
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpDcmVhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRl
SW5mbykpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3Qp
Cit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGlsZShDb29yZGluYXRlZExh
eWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCiB7
CiAgICAgbV9zaG91bGRTeW5jRnJhbWUgPSB0cnVlOwogICAgIG1fd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OlVwZGF0ZVRpbGVGb3JMYXllcihs
YXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1cGRhdGVJbmZvKSk7CkBAIC04MzIsNyArODM2LDcg
QEAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEkKICAgICB9CiAKICAgICBzdGF0aWMgY29uc3QgaW50
IFNjcmF0Y2hCdWZmZXJEaW1lbnNpb24gPSAxMDI0OyAvLyBTaG91bGQgYmUgYSBwb3dlciBvZiB0
d28uCi0gICAgbV91cGRhdGVBdGxhc2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXMo
dGhpcywgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7CisgICAgbV91cGRhdGVBdGxh
c2VzLmFwcGVuZChhZG9wdFB0cihuZXcgVXBkYXRlQXRsYXModGhpcywgJmNyZWF0ZUNvb3JkaW5h
dGVkU3VyZmFjZSwgU2NyYXRjaEJ1ZmZlckRpbWVuc2lvbiwgZmxhZ3MpKSk7CiAgICAgc2NoZWR1
bGVSZWxlYXNlSW5hY3RpdmVBdGxhc2VzKCk7CiAgICAgcmV0dXJuIG1fdXBkYXRlQXRsYXNlcy5s
YXN0KCktPmJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcihhdGxhc0lELCBzaXplLCBvZmZz
ZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaAppbmRleCAwMTAyMmIyY2M0ZTk4NDg4YTRkZjc4N2VhMzY5MGI3MmFjY2Zm
NzI5Li5lNmRmYjZmNTA0YWFkYjVkMjZiNDUwZTMzOGJhNDJhZjFjZjdkOTg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApA
QCAtMjIsMzAgKzIyLDMyIEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKLSNp
bmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJDb29yZGluYXRl
ZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRl
ICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVB
dGxhcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NM
YXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogI2luY2x1ZGUgIldl
YkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5oIgogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKLWNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQ
YWdlOwogCiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVl
SG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpDb29yZGluYXRvcgotICAgICwgcHVibGljIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBw
dWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJs
aWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgLCBw
dWJsaWMgV2ViQ29yZTo6VXBkYXRlQXRsYXNDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpH
cmFwaGljc0xheWVyRmFjdG9yeQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudApAQCAtNzcsMTIgKzc5LDEyIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVl
OyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9
IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VT
Y2FsZUZhY3RvckRpZENoYW5nZSgpIHsgfQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6SW1h
Z2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdl
KikgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGbHVzaGluZ0xheWVyQ2hhbmdlcygp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlczsgfQotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQpOworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2li
bGVDb250ZW50c1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCk7CiAgICAgdmlydHVhbCB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOwpAQCAtOTAsMjQgKzky
LDI0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdE1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJ
RCwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJGYWN0b3J5KiBncmFwaGljc0xheWVyRmFjdG9yeSgpIE9WRVJSSURFOwogCi0gICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29v
cmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4o
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBj
b25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAgIHZpcnR1YWwgdm9p
ZCBzeW5jTGF5ZXJTdGF0ZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNo
aWxkcmVuKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRp
b25zKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NM
YXllckFuaW1hdGlvbnMmKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCB2
b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25z
Jik7CiAjZW5kaWYKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciop
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBs
YXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0NhbnZhcyhXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQpIE9WRVJSSURFOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Rml4ZWRMYXllcnMoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBv
aW50Jik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4g
YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29y
ZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9p
bnQmKTsKIAogICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAgdmlydHVhbCBib29sIGNyZWF0
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpAQCAtMTE1LDYgKzEx
Nyw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBPVkVSUklERTsKIAorICAgIC8vIENvb3JkaW5hdGVk
U3VyZmFjZQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFj
ZT4gY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJD
b3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxp
Y2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdChXZWJQYWdlKik7CiAKQEAgLTEyNSwxMCArMTMw
LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllciosIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjbGlw
UmVjdCk7CiAKICAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0b3IKLSAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZT4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7CiAKICAgICB2b2lkIGZsdXNoUGVuZGluZ0ltYWdl
QmFja2luZ0NoYW5nZXMoKTsKIApAQCAtMTc1LDExICsxODAsMTEgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9wYWdlT3ZlcmxheUxheWVyOwogCiAgICAg
SGFzaFNldDxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqPiBtX3JlZ2lzdGVyZWRM
YXllcnM7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0NyZWF0ZTsK
LSAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvRGVsZXRlOwotICAgIHR5
cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+ID4gSW1hZ2VCYWNraW5nTWFwOworICAgIFZlY3RvcjxXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVhdGU7CisgICAgVmVjdG9yPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPFdlYkNvcmU6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKICAgICBJbWFnZUJhY2tp
bmdNYXAgbV9pbWFnZUJhY2tpbmdzOwotICAgIFZlY3RvcjxPd25QdHI8VXBkYXRlQXRsYXM+ID4g
bV91cGRhdGVBdGxhc2VzOworICAgIFZlY3RvcjxPd25QdHI8V2ViQ29yZTo6VXBkYXRlQXRsYXM+
ID4gbV91cGRhdGVBdGxhc2VzOwogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIEhhc2hT
ZXQ8V2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5Kj4gbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsK
QEAgLTIwNyw4ICsyMTIsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2Vk
OwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZgorI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWMwYjU2NjI2ZTgxZjEwYjE4NzYyYjk4ZjM2
NTgwNGY4ZTMyNjE2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZFRpbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
b29yZGluYXRlZFRpbGUuaCIKLQotI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNs
dWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xp
ZW50LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotc3RhdGljIGNvbnN0IHVpbnQzMl90IEludmFsaWRDb29yZGluYXRlZFRpbGVJRCA9IDA7Ci0K
LUNvb3JkaW5hdGVkVGlsZTo6Q29vcmRpbmF0ZWRUaWxlKENvb3JkaW5hdGVkVGlsZUNsaWVudCog
Y2xpZW50LCBUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0IENvb3Jk
aW5hdGUmIHRpbGVDb29yZGluYXRlKQotICAgIDogbV9jbGllbnQoY2xpZW50KQotICAgICwgbV90
aWxlZEJhY2tpbmdTdG9yZSh0aWxlZEJhY2tpbmdTdG9yZSkKLSAgICAsIG1fY29vcmRpbmF0ZSh0
aWxlQ29vcmRpbmF0ZSkKLSAgICAsIG1fcmVjdCh0aWxlZEJhY2tpbmdTdG9yZS0+dGlsZVJlY3RG
b3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKSkKLSAgICAsIG1fSUQoSW52YWxpZENvb3JkaW5h
dGVkVGlsZUlEKQotICAgICwgbV9kaXJ0eVJlY3QobV9yZWN0KQotewotfQotCi1Db29yZGluYXRl
ZFRpbGU6On5Db29yZGluYXRlZFRpbGUoKQotewotICAgIGlmIChtX0lEICE9IEludmFsaWRDb29y
ZGluYXRlZFRpbGVJRCkKLSAgICAgICAgbV9jbGllbnQtPnJlbW92ZVRpbGUobV9JRCk7Ci19Ci0K
LWJvb2wgQ29vcmRpbmF0ZWRUaWxlOjppc0RpcnR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIW1f
ZGlydHlSZWN0LmlzRW1wdHkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZFRpbGU6OmludmFsaWRh
dGUoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQotewotICAgIEludFJlY3QgdGlsZURpcnR5UmVj
dCA9IGludGVyc2VjdGlvbihkaXJ0eVJlY3QsIG1fcmVjdCk7Ci0gICAgaWYgKHRpbGVEaXJ0eVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RpcnR5UmVjdC51bml0ZSh0
aWxlRGlydHlSZWN0KTsKLX0KLQotVmVjdG9yPEludFJlY3Q+IENvb3JkaW5hdGVkVGlsZTo6dXBk
YXRlQmFja0J1ZmZlcigpCi17Ci0gICAgaWYgKCFpc0RpcnR5KCkpCi0gICAgICAgIHJldHVybiBW
ZWN0b3I8SW50UmVjdD4oKTsKLQotICAgIFN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm87Ci0g
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gbV9jbGllbnQtPmJl
Z2luQ29udGVudFVwZGF0ZShtX2RpcnR5UmVjdC5zaXplKCksIHVwZGF0ZUluZm8uYXRsYXNJRCwg
dXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KTsKLSAgICBpZiAoIWdyYXBoaWNzQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOwotICAgIGdyYXBoaWNzQ29udGV4dC0+dHJh
bnNsYXRlKC1tX2RpcnR5UmVjdC54KCksIC1tX2RpcnR5UmVjdC55KCkpOwotICAgIGdyYXBoaWNz
Q29udGV4dC0+c2NhbGUoRmxvYXRTaXplKG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2Nh
bGUoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpKSk7Ci0gICAgbV90aWxl
ZEJhY2tpbmdTdG9yZS0+Y2xpZW50KCktPnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoZ3JhcGhpY3ND
b250ZXh0LmdldCgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fZGlydHlS
ZWN0KSk7Ci0KLSAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3QgPSBtX2RpcnR5UmVjdDsKLSAgICB1
cGRhdGVJbmZvLnVwZGF0ZVJlY3QubW92ZSgtbV9yZWN0LngoKSwgLW1fcmVjdC55KCkpOwotICAg
IHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IgPSBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1Nj
YWxlKCk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2UoKTsKLQotICAgIHN0YXRpYyB1aW50
MzJfdCBpZCA9IDE7Ci0gICAgaWYgKG1fSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEKSB7
Ci0gICAgICAgIG1fSUQgPSBpZCsrOwotICAgICAgICAvLyBXZSBtYXkgZ2V0IGFuIGludmFsaWQg
SUQgZHVlIHRvIHdyYXAtYXJvdW5kIG9uIG92ZXJmbG93LgotICAgICAgICBpZiAobV9JRCA9PSBJ
bnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCi0gICAgICAgICAgICBtX0lEID0gaWQrKzsKLSAgICAg
ICAgbV9jbGllbnQtPmNyZWF0ZVRpbGUobV9JRCwgdXBkYXRlSW5mbywgbV9yZWN0KTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVRpbGUobV9JRCwgdXBkYXRlSW5mbywgbV9y
ZWN0KTsKLQotICAgIFZlY3RvcjxJbnRSZWN0PiB1cGRhdGVkUmVjdHM7Ci0gICAgdXBkYXRlZFJl
Y3RzLmFwcGVuZChtX2RpcnR5UmVjdCk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBJbnRSZWN0KCk7Ci0g
ICAgcmV0dXJuIHVwZGF0ZWRSZWN0czsKLX0KLQotdm9pZCBDb29yZGluYXRlZFRpbGU6OnN3YXBC
YWNrQnVmZmVyVG9Gcm9udCgpCi17Ci0gICAgLy8gSGFuZGxlZCBieSB0aWxlZEJhY2tpbmdTdG9y
ZVBhaW50RW5kLgotfQotCi1ib29sIENvb3JkaW5hdGVkVGlsZTo6aXNSZWFkeVRvUGFpbnQoKSBj
b25zdAotewotICAgIHJldHVybiBtX0lEICE9IEludmFsaWRDb29yZGluYXRlZFRpbGVJRDsKLX0K
LQotdm9pZCBDb29yZGluYXRlZFRpbGU6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKQotewotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1NpemUpCi17Ci0gICAgbV9yZWN0ID0g
SW50UmVjdChtX3JlY3QubG9jYXRpb24oKSwgbmV3U2l6ZSk7Ci0gICAgbV9kaXJ0eVJlY3QgPSBt
X3JlY3Q7Ci19Ci0KLUNvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OkNvb3JkaW5hdGVkVGlsZUJhY2tl
bmQoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQpCi0gICAgOiBtX2NsaWVudChjbGllbnQp
Ci17Ci19Ci0KLVBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gQ29vcmRpbmF0ZWRUaWxlQmFja2Vu
ZDo6Y3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3Rv
cmUsIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQotewot
ICAgIHJldHVybiBDb29yZGluYXRlZFRpbGU6OmNyZWF0ZShtX2NsaWVudCwgdGlsZWRCYWNraW5n
U3RvcmUsIHRpbGVDb29yZGluYXRlKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZFRpbGVCYWNrZW5k
OjpwYWludENoZWNrZXJQYXR0ZXJuKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkVGlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTE1Y2M3
NzJiNTMxZWExYTRhNzM0MWMxZDA0NmI2NTA4ZjZjY2ZjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ29vcmRp
bmF0ZWRUaWxlX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRUaWxlX2gKLQotI2lmIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQotCi0jaW5jbHVkZSAiVGlsZS5oIgotI2luY2x1ZGUgIlRpbGVkQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSAiV2ViQ29yZS9JbnRSZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEltYWdlQnVmZmVyOwotY2xhc3MgVGlsZWRCYWNraW5nU3RvcmU7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBDb29yZGluYXRlZFRpbGVDbGllbnQ7Ci1jbGFz
cyBTdXJmYWNlVXBkYXRlSW5mbzsKLQotY2xhc3MgQ29vcmRpbmF0ZWRUaWxlIDogcHVibGljIFdl
YkNvcmU6OlRpbGUgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0
ZShDb29yZGluYXRlZFRpbGVDbGllbnQqIGNsaWVudCwgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3Rv
cmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkVGlsZShjbGllbnQsIHRpbGVkQmFja2lu
Z1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSkpOyB9Ci0gICAgfkNvb3JkaW5hdGVkVGlsZSgpOwotCi0g
ICAgYm9vbCBpc0RpcnR5KCkgY29uc3Q7Ci0gICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gdXBkYXRlQmFja0J1
ZmZlcigpOwotICAgIHZvaWQgc3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7Ci0gICAgYm9vbCBpc1Jl
YWR5VG9QYWludCgpIGNvbnN0OwotICAgIHZvaWQgcGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotCi0gICAgY29uc3QgQ29vcmRpbmF0ZSYg
Y29vcmRpbmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQotICAgIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KLSAgICB2b2lk
IHJlc2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0KLXByaXZhdGU6Ci0gICAgQ29vcmRp
bmF0ZWRUaWxlKENvb3JkaW5hdGVkVGlsZUNsaWVudCosIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0
b3JlKiwgY29uc3QgQ29vcmRpbmF0ZSYpOwotCi0gICAgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBt
X2NsaWVudDsKLSAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSogbV90aWxlZEJhY2tpbmdT
dG9yZTsKLSAgICBDb29yZGluYXRlIG1fY29vcmRpbmF0ZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0
IG1fcmVjdDsKLQotICAgIHVpbnQzMl90IG1fSUQ7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX2Rp
cnR5UmVjdDsKLQotICAgIE93blB0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gbV9sb2NhbEJ1ZmZl
cjsKLX07Ci0KLWNsYXNzIENvb3JkaW5hdGVkVGlsZUNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmly
dHVhbCB+Q29vcmRpbmF0ZWRUaWxlQ2xpZW50KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0
ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUodWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKSA9
IDA7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVn
aW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCB1aW50MzJfdCYgYXRsYXNJ
RCwgV2ViQ29yZTo6SW50UG9pbnQmKSA9IDA7Ci19OwotCi1jbGFzcyBDb29yZGluYXRlZFRpbGVC
YWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQmFja2VuZCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8V2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmVCYWNr
ZW5kPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDb29yZGluYXRlZFRpbGVCYWNrZW5kKGNsaWVudCkpOyB9Ci0gICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpUaWxlPiBjcmVhdGVUaWxlKFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiwg
Y29uc3QgV2ViQ29yZTo6VGlsZTo6Q29vcmRpbmF0ZSYpOwotICAgIHZvaWQgcGFpbnRDaGVja2Vy
UGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZFRpbGVCYWNrZW5kKENv
b3JkaW5hdGVkVGlsZUNsaWVudCopOwotICAgIENvb3JkaW5hdGVkVGlsZUNsaWVudCogbV9jbGll
bnQ7Ci19OwotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKFRJTEVE
X0JBQ0tJTkdfU1RPUkUpCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZFRpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1Vw
ZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDgyZDMyZmM2ZmZjMTAyY2Y2ZDRhNjQzZjVjMzI4Nzg0ZDZiNTcxYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw5NiArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTIg
Q29tcGFueSAxMDAsIEluYy4KLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIlVwZGF0ZUF0bGFzLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1VcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMo
VXBkYXRlQXRsYXNDbGllbnQqIGNsaWVudCwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJm
YWNlOjpGbGFncyBmbGFncykKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1faW5hY3Rp
dml0eUluU2Vjb25kcygwKQotewotICAgIHN0YXRpYyB1aW50MzJfdCBuZXh0SUQgPSAwOwotICAg
IG1fSUQgPSArK25leHRJRDsKLSAgICBJbnRTaXplIHNpemUgPSBuZXh0UG93ZXJPZlR3byhJbnRT
aXplKGRpbWVuc2lvbiwgZGltZW5zaW9uKSk7Ci0gICAgbV9zdXJmYWNlID0gQ29vcmRpbmF0ZWRT
dXJmYWNlOjpjcmVhdGUoc2l6ZSwgZmxhZ3MpOwotCi0gICAgLy8gRklYTUU6IEN1cnJlbnRseSwg
aWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgVXBkYXRlQXRsYXMgZ2l2ZXMgdXAgZHJhd2lu
ZyBhbnl0aGluZyBpbXBsaWNpdGx5LgotICAgIGlmICghbV9jbGllbnQtPmNyZWF0ZVVwZGF0ZUF0
bGFzKG1fSUQsIG1fc3VyZmFjZSkpCi0gICAgICAgIG1fc3VyZmFjZS5jbGVhcigpOwotfQotCi1V
cGRhdGVBdGxhczo6flVwZGF0ZUF0bGFzKCkKLXsKLSAgICBpZiAobV9zdXJmYWNlKQotICAgICAg
ICBtX2NsaWVudC0+cmVtb3ZlVXBkYXRlQXRsYXMobV9JRCk7Ci19Ci0KLXZvaWQgVXBkYXRlQXRs
YXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQoKQotewotICAgIGlmICghbV9hcmVhQWxsb2NhdG9yKSB7
Ci0gICAgICAgIG1fYXJlYUFsbG9jYXRvciA9IGFkb3B0UHRyKG5ldyBHZW5lcmFsQXJlYUFsbG9j
YXRvcihzaXplKCkpKTsKLSAgICAgICAgbV9hcmVhQWxsb2NhdG9yLT5zZXRNaW5pbXVtQWxsb2Nh
dGlvbihJbnRTaXplKDMyLCAzMikpOwotICAgIH0KLX0KLQotdm9pZCBVcGRhdGVBdGxhczo6ZGlk
U3dhcEJ1ZmZlcnMoKQotewotICAgIG1fYXJlYUFsbG9jYXRvci5jbGVhcigpOwotfQotCi1QYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gVXBkYXRlQXRsYXM6OmJlZ2luUGFpbnRpbmdPbkF2YWls
YWJsZUJ1ZmZlcih1aW50MzJfdCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6
ZSwgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgPSAwOwot
ICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLSAgICBJbnRSZWN0IHJlY3QgPSBtX2FyZWFBbGxv
Y2F0b3ItPmFsbG9jYXRlKHNpemUpOwotCi0gICAgLy8gTm8gYXZhaWxhYmxlIGJ1ZmZlciB3YXMg
Zm91bmQsIHJldHVybmluZyBudWxsLgotICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PigpOwotCi0gICAgaWYgKCFtX3N1cmZh
Y2UpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKLQotICAg
IGF0bGFzSUQgPSBtX0lEOwotCi0gICAgLy8gRklYTUU6IFVzZSB0cmktc3RhdGUgYnVmZmVycywg
dG8gYWxsb3cgZmFzdGVyIHVwZGF0ZXMuCi0gICAgb2Zmc2V0ID0gcmVjdC5sb2NhdGlvbigpOwot
ICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fc3VyZmFjZS0+
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwotCi0gICAgaWYgKHN1cHBvcnRzQWxwaGEoKSkg
ewotICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVDb3B5KTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5maWxsUmVjdChJbnRSZWN0KEludFBv
aW50Ojp6ZXJvKCksIHNpemUpLCBDb2xvcjo6dHJhbnNwYXJlbnQsIENvbG9yU3BhY2VEZXZpY2VS
R0IpOwotICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVTb3VyY2VPdmVyKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ3JhcGhpY3NDb250ZXh0LnJl
bGVhc2UoKTsKLX0KLQotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRs
YXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ1ODYzYjg0ZDBkOGRiYWNjYmFl
MzliMTJlMjM0MTQ4MzM4NzYyYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9VcGRhdGVBdGxhcy5oCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLyoK
LSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgVXBkYXRlQXRsYXNfaAotI2RlZmluZSBVcGRhdGVB
dGxhc19oCi0KLSNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0
ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgR3JhcGhpY3NDb250ZXh0Owot
Y2xhc3MgSW50UG9pbnQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBVcGRhdGVB
dGxhc0NsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFz
KHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKSA9IDA7
Ci19OwotCi1jbGFzcyBVcGRhdGVBdGxhcyB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVXBk
YXRlQXRsYXMpOwotcHVibGljOgotICAgIFVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50Kiwg
aW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7Ci0gICAgflVwZGF0ZUF0
bGFzKCk7Ci0KLSAgICBpbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KLQotICAgIC8vIFJldHVybnMgYSBudWxsIHBvaW50ZXIg
b2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KLSAgICBQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90
JiBhdGxhc0lELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6SW50UG9pbnQmIG9m
ZnNldCk7Ci0gICAgdm9pZCBkaWRTd2FwQnVmZmVycygpOwotICAgIGJvb2wgc3VwcG9ydHNBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c3VwcG9ydHNBbHBoYSgpOyB9Ci0KLSAgICB2
b2lkIGFkZFRpbWVJbmFjdGl2ZShkb3VibGUgc2Vjb25kcykKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCghaXNJblVzZSgpKTsKLSAgICAgICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzICs9IHNlY29uZHM7
Ci0gICAgfQotICAgIGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBjb25z
dCBkb3VibGUgaW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNlID0gMzsKLSAgICAgICAgcmV0dXJuIG1f
aW5hY3Rpdml0eUluU2Vjb25kcyA+IGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZTsKLSAgICB9Ci0g
ICAgYm9vbCBpc0luVXNlKCkgY29uc3QgeyByZXR1cm4gbV9hcmVhQWxsb2NhdG9yOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBidWlsZExheW91dElmTmVlZGVkKCk7Ci0KLXByaXZhdGU6Ci0gICAg
VXBkYXRlQXRsYXNDbGllbnQqIG1fY2xpZW50OwotICAgIE93blB0cjxHZW5lcmFsQXJlYUFsbG9j
YXRvcj4gbV9hcmVhQWxsb2NhdG9yOwotICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1f
c3VyZmFjZTsKLSAgICBkb3VibGUgbV9pbmFjdGl2aXR5SW5TZWNvbmRzOwotICAgIHVpbnQzMl90
IG1fSUQ7Ci19OwotCi19Ci0jZW5kaWYKLSNlbmRpZiAvLyBVcGRhdGVBdGxhc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185693</attachid>
            <date>2013-01-30 23:58:20 -0800</date>
            <delta_ts>2013-01-31 01:32:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108149-20130130235545.patch</filename>
            <type>text/plain</type>
            <size>387491</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgwOGVjMDkzZjFkYWUy
Nzk4NGQ1ZDU4MDE5Y2VlM2MzZWMxYTYxOS4uMzA5MWQwZWRmOWQzMGYyZGNlYTQzNDdmYjE0YmFm
NzE0M2QyNWU0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NiBAQAorMjAxMy0wMS0zMCAgSmFl
IEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzIDogTW92ZSBDb29yZGluYXRlZEdyYXBoaWNzIHJlbGF0ZWQgZmlsZXMgdG8g
V2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA4MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBtb3ZlcyBDb29yZGluYXRlZCBHcmFwaGljcyByZWxhdGVkIGNvZGUgdG8gV2Vi
Q29yZS4gVG8KKyAgICAgICAgaW1wbGVtZW50IFRocmVhZGVkIENvb3JkaW5hdGVkIEdyYXBoaWNz
LCBtb3N0IG9mIENvb3JkaWFudGVkIEdyYXBoaWNzCisgICAgICAgIGNvZGUgc2hvdWxkIGJlIHNo
YXJlZC4gVGhlcmVmb3JlLCB0aGV5IHNob3VsZCByZXNpZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9m
CisgICAgICAgIFdlYktpdDIuCisKKyAgICAgICAgV2hlbiBtb3ZpbmcgdG8gV2ViQ29yZSwgdHdv
IHJlbmFtaW5ncyBoYXZlIGJlZW4gZG9uZS4KKworICAgICAgICAxLiBSZW5hbWUgTGF5ZXJUcmVl
UmVuZGVyZXIgdG8gVGV4dHVyZU1hcHBlclNjZW5lLgorCisgICAgICAgIDIuIFJlbmFtZSBXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gdG8KKyAgICAg
ICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBDb29yZGluYXRlZEN1c3RvbUZp
bHRlck9wZXJhdGlvbiwKKyAgICAgICAgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OkFy
ZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6fkFyZWFBbGxv
Y2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6ZXhwYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkFyZWFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRv
cjo6b3ZlcmhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6cm91bmRBbGxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFs
QXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6
fkdlbmVyYWxBcmVhQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxs
b2NhdG9yOjpmcmVlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRv
cjo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmZpdHNXaXRoaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZUZyb21Ob2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
bmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxv
Y2F0b3IuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFBvd2Vy
T2ZUd28pOgorICAgICAgICAoQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpBcmVh
QWxsb2NhdG9yOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6Om1pbmlt
dW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnNldE1pbmlt
dW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6Om1hcmdpbik6
CisgICAgICAgIChXZWJDb3JlOjpBcmVhQWxsb2NhdG9yOjpzZXRNYXJnaW4pOgorICAgICAgICAo
R2VuZXJhbEFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92
ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1
cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRp
bGVzVG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3UmVwYWludENvdW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRp
b25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmguCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OkNvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGU6OnNjYWxlKToKKyAgICAgICAgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpyZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uOjpwcm9ncmFtSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb246OkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21G
aWx0ZXJQcm9ncmFtLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJQcm9ncmFtLmguCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OkNvb3JkaW5hdGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b0Nvb3JkaW5hdGVkTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hh
bmdlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNl
cnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291bnRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3Np
dGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0Zp
bHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
SW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmltYWdlQmFja2luZ1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9y
ZVBhaW50QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZWZm
ZWN0aXZlQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVQYWludEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wVG9Db250ZW50c1JlY3RJZlJlY3RJc0luZmlu
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29u
dGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZWdyYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQaXhl
bEFsaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGFzQWN0aXZl
VHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3Jtcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhdXNlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3VzcGVu
ZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y292ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjptYXJrRGlydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0eUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNv
bnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEltYWdlQmFja2luZy5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRl
ZEltYWdlQmFja2luZyk6CisgICAgICAgIChDb29yZGluYXRvcik6CisgICAgICAgIChIb3N0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVySW5mby5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbzo6Q29vcmRpbmF0ZWRMYXllckluZm8pOgor
ICAgICAgICAoQ29vcmRpbmF0ZWRMYXllckluZm8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRT
dXJmYWNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRTdXJmYWNlOjpzZXRGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
U3VyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6fkNvb3JkaW5hdGVkU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OnN1cHBvcnRzQWxwaGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjpDb29yZGluYXRlZFRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZFRpbGU6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
VGlsZTo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkVGlsZTo6aXNSZWFkeVRvUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRU
aWxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OnJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRlZFRp
bGVCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNy
ZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6cGFp
bnRDaGVja2VyUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmgu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZFRpbGU6OmNvb3JkaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRUaWxlOjpyZWN0KToKKyAgICAgICAgKENvb3JkaW5hdGVkVGlsZUNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGVDbGllbnQ6On5Db29yZGluYXRlZFRpbGVDbGllbnQp
OgorICAgICAgICAoQ29vcmRpbmF0ZWRUaWxlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUlu
Zm8uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3VyZmFjZVVwZGF0ZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm86OlN1cmZhY2VVcGRhdGVJbmZvKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGV4dHVyZU1h
cHBlclNjZW5lLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpkaXNwYXRjaE9uTWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGVkU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6bGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6VGV4dHVyZU1hcHBlclNjZW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6flRleHR1cmVNYXBwZXJTY2VuZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6YW5pbWF0aW9uRnJhbWVSZWFk
eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnJlcXVlc3RBbmltYXRp
b25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnBhaW50VG9H
cmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpz
ZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
Y2VuZTo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNj
ZW5lOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpjcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTY2VuZTo6ZGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2NlbmU6OnNldExheWVyUmVwYWludENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVyRmlsdGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2NlbmU6OmluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlQ3VzdG9tRmlsdGVy
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5l
OjpzZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6
Z2V0TGF5ZXJCeUlESWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNj
ZW5lOjpjcmVhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5l
OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmRl
bGV0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmRlbGV0
ZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0Um9vdExh
eWVySUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpwcmVwYXJlQ29u
dGVudEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6
OmNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTY2VuZTo6cmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpyZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZVRpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpyZW1vdmVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6cmVtb3ZlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6YXNzaWduSW1h
Z2VCYWNraW5nVG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6
OnJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTY2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpmbHVzaExheWVyQ2hhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbmRlck5leHRGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmVuc3VyZVJvb3RMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnN5bmNSZW1vdGVDb250
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6cHVyZ2VHTFJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnB1cmdlQmFja2lu
Z1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVy
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnNldEFu
aW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpk
ZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjphcHBlbmRVcGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzZXRBY3RpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzZXRCYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9UZXh0dXJl
TWFwcGVyU2NlbmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmguCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTY2VuZUNsaWVudCk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyU2NlbmUpOgorICAgICAgICAoVGlsZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2NlbmU6OlRpbGVVcGRhdGU6OlRpbGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzZXREcmF3c0JhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpsYXllckJ5SUQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNjZW5lOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNjZW5lOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTY2VuZTo6bm90aWZ5Rmx1c2hSZXF1aXJlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1VwZGF0ZUF0bGFzLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0
bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJ1aWxk
TGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmRpZFN3YXBC
dWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25B
dmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9VcGRhdGVBdGxhcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoVXBkYXRlQXRsYXNDbGllbnQpOgorICAgICAgICAoVXBkYXRl
QXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OnNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6VXBkYXRlQXRsYXM6OnN1cHBvcnRzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
VXBkYXRlQXRsYXM6OmFkZFRpbWVJbmFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVB
dGxhczo6aXNJbmFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6aXNJblVz
ZSk6CisKIDIwMTMtMDEtMzAgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUG9ydCBEcmFnSW1hZ2VXaW4uY3BwIHRvIFdpbkNFCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
ZjI2MmU5ZTY2NjJmOTViNzE2YzQwNjAzNjhlNzAxODgyZjk4ZWRkMC4uNDljMzUwMTk4NjdmNDJj
YmJhNjFhNzBkYzU0NWVmNDk3MDZlMWUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExNCBAQAog
MjAxMy0wMS0zMCAgSmFlIEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgogCisg
ICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzIDogTW92ZSBDb29yZGluYXRlZEdyYXBoaWNzIHJl
bGF0ZWQgZmlsZXMgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTA4MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBDb29yZGluYXRlZCBHcmFwaGljcyByZWxh
dGVkIGNvZGUgdG8gV2ViQ29yZS4gVG8KKyAgICAgICAgaW1wbGVtZW50IFRocmVhZGVkIENvb3Jk
aW5hdGVkIEdyYXBoaWNzLCBtb3N0IG9mIENvb3JkaWFudGVkIEdyYXBoaWNzCisgICAgICAgIGNv
ZGUgc2hvdWxkIGJlIHNoYXJlZC4gVGhlcmVmb3JlLCB0aGV5IHNob3VsZCByZXNpZGUgaW4gV2Vi
Q29yZSBpbnN0ZWFkIG9mCisgICAgICAgIFdlYktpdDIuCisKKyAgICAgICAgV2hlbiBtb3Zpbmcg
dG8gV2ViQ29yZSwgdHdvIHJlbmFtaW5ncyBoYXZlIGJlZW4gZG9uZS4KKworICAgICAgICAxLiBS
ZW5hbWUgTGF5ZXJUcmVlUmVuZGVyZXIgdG8gVGV4dHVyZU1hcHBlclNjZW5lLgorCisgICAgICAg
IDIuIFJlbmFtZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBXZWJDdXN0b21GaWx0ZXJPcGVy
YXRpb24gdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBDb29y
ZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiwKKyAgICAgICAgcmVzcGVjdGl2ZWx5LgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5w
eToKKyAgICAgICAgKGhlYWRlcnNfZm9yX3R5cGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAg
ICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRl
ZFN1cmZhY2UuaDoKKyAgICAgICAgKEhhbmRsZSk6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6
OnRleHR1cmVNYXBwZXJTY2VuZSk6CisgICAgICAgIChFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJl
ZCk6CisgICAgICAgIChFd2tWaWV3OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVBy
aXZhdGU6OnBhaW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAg
ICAoUVJhd1dlYlZpZXc6OnNldEFjdGl2ZSk6CisgICAgICAgIChRUmF3V2ViVmlldzo6dGV4dHVy
ZU1hcHBlclNjZW5lKToKKyAgICAgICAgKFFSYXdXZWJWaWV3OjpwYWludCk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdfcC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpc3BhdGNoVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDdXN0b21GaWx0
ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2Vk
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFZp
c2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNhbnZh
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5j
Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6dGV4dHVyZU1hcHBlclNjZW5lKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5t
ZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjpz
ZXRSZW5kZXJlckFjdGl2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9k
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvbnRlbnRzU0dOb2RlOjpDb250ZW50c1NHTm9kZSk6
CisgICAgICAgIChXZWJLaXQ6OkNvbnRlbnRzU0dOb2RlOjpyZW5kZXIpOgorICAgICAgICAoV2Vi
S2l0OjpDb250ZW50c1NHTm9kZTo6fkNvbnRlbnRzU0dOb2RlKToKKyAgICAgICAgKFdlYktpdDo6
Q29udGVudHNTR05vZGU6OnRleHR1cmVNYXBwZXJTY2VuZSk6CisgICAgICAgIChDb250ZW50c1NH
Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZVNHTm9kZTo6c2V0VGV4dHVyZU1hcHBl
clNjZW5lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChRdFdlYlBhZ2VTR05v
ZGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGlsZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmg6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdCk6CisKKzIwMTMt
MDEtMzAgIEphZSBIeXVuIFBhcmsgIDxqYWUucGFya0Bjb21wYW55MTAwLm5ldD4KKwogICAgICAg
ICBDb29yZGluYXRlZCBHcmFwaGljcyA6IFJlbW92ZSBXZWJDb29yZGluYXRlZFN1cmZhY2UgZGVw
ZW5kZW5jeSBmcm9tIENvb3JkaW5hdGVkU3VyZmFjZQogICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MjU5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
ODAzNjQ0YjdhZTliMTQ2OWY0ZjA4NWE5YTM3YTdmMjExODZmMzllNi4uNWExNTI5ZTM4ZDdjNjQ2
ZTc1Yjg2MjJmOGU1NmMxMGU4ZGZlODczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU1LDYg
KzU1LDggQEAgc2V0KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6eiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW50eXBlIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3JtcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcCIKQEAgLTE5ODcsNiAr
MTk4OSwxNCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3Bv
dExpZ2h0U291cmNlLmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0FyZWFBbGxvY2F0b3IuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZFN1cmZhY2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkVGlsZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVGV4dHVyZU1hcHBlclNjZW5lLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckltYWdlQnVmZmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggYzNiOGZjMDIwYzEyNmE2NGQ2
MTlhN2Q3MGJlYmJjOTdiZGJkZjIxZC4uZDkwMWMxYmFlZGEyMGY0MmVlNDU4YTljOTQ3MGU0ZjU0
MzZhNTc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yMjM5LDYgKzIyMzksMTggQEAgSEVBREVSUyArPSBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZVRva2VuLmggXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGls
ZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVw
ZGF0ZUluZm8uaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1Rl
eHR1cmVNYXBwZXJTY2VuZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVXBkYXRlQXRsYXMuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dy
YW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmggXApAQCAtMjg3NCw2ICsyODg2LDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L1BhdGhRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5R
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgXAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxl
LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RleHR1cmVN
YXBwZXJTY2VuZS5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9VcGRhdGVBdGxhcy5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJCYWNraW5nU3RvcmUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmgKaW5kZXggOGY3NWY1Zjg2NDNlMzlmMzNmNDViNmE0MTM0ZjY2NmRiMmRjODg2NS4uN2Zj
OTdjNjU5ZmM0ZmRjN2ViNGJkMWM0Y2FmY2NhNmU3ZWU3NzFmOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgog
Ci0gICAgLy8gRklYTUU6IEl0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciByZW1vdmluZyBkZXBlbmRl
bmN5IG9mIExheWVyVHJlZVJlbmRlcmVyIG9uIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLgor
ICAgIC8vIEZJWE1FOiBJdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgcmVtb3ZpbmcgZGVwZW5kZW5j
eSBvZiBUZXh0dXJlTWFwcGVyU2NlbmUgb24gR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuCiAg
ICAgdm9pZCBzZXRIYXNPd25CYWNraW5nU3RvcmUoYm9vbCBiKSB7IG1faGFzT3duQmFja2luZ1N0
b3JlID0gYjsgfQogICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZT4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRv
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWY1NDE4NWI5OGU4YTcwOGE2ZDZmMWFiMjA0NWQyYjEyMzQ4MzYw
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJBcmVhQWxs
b2NhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXJlYUFsbG9jYXRvcjo6QXJlYUFs
bG9jYXRvcihjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBt
X21pbkFsbG9jKDEsIDEpCisgICAgLCBtX21hcmdpbigwLCAwKQoreworfQorCitBcmVhQWxsb2Nh
dG9yOjp+QXJlYUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5k
KGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0gbV9zaXplLmV4cGFuZGVkVG8o
c2l6ZSk7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBtX3NpemUgKz0gc2l6ZTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpy
ZWxlYXNlKGNvbnN0IEludFJlY3QmKQoreworfQorCitpbnQgQXJlYUFsbG9jYXRvcjo6b3Zlcmhl
YWQoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCitJbnRTaXplIEFyZWFBbGxvY2F0b3I6
OnJvdW5kQWxsb2NhdGlvbihjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9
IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBpbnQgZXh0cmEgPSB3aWR0
aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIHdpZHRoICs9
IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9taW5B
bGxvYy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhlaWdodCArPSBtX21pbkFs
bG9jLmhlaWdodCgpIC0gZXh0cmE7CisKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0
IEludFNpemUmIHNpemUpCisgICAgOiBBcmVhQWxsb2NhdG9yKG5leHRQb3dlck9mVHdvKHNpemUp
KQoreworICAgIG1fcm9vdCA9IG5ldyBOb2RlKCk7CisgICAgbV9yb290LT5yZWN0ID0gSW50UmVj
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBtX3Jvb3QtPmxh
cmdlc3RGcmVlID0gbV9zaXplOworICAgIG1fcm9vdC0+cGFyZW50ID0gMDsKKyAgICBtX3Jvb3Qt
PmxlZnQgPSAwOworICAgIG1fcm9vdC0+cmlnaHQgPSAwOworICAgIG1fbm9kZUNvdW50ID0gMTsK
KyAgICBzZXRNaW5pbXVtQWxsb2NhdGlvbihJbnRTaXplKDgsIDgpKTsKK30KKworR2VuZXJhbEFy
ZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCit7CisgICAgZnJlZU5vZGUobV9y
b290KTsKK30KKwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9kZSogbm9k
ZSkKK3sKKyAgICBpZiAobm9kZSkgeworICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKKyAg
ICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOworICAgIH0KKyAgICBkZWxldGUgbm9kZTsKK30K
Kwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKG5leHRQb3dlck9mVHdvKHNpemUpKTsKKwor
ICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuOyAv
LyBObyBjaGFuZ2UuCisKKyAgICBpZiAoIW1fcm9vdC0+bGVmdCAmJiBtX3Jvb3QtPmxhcmdlc3RG
cmVlLndpZHRoKCkgPiAwKSB7CisgICAgICAgIC8vIE5vIGFsbG9jYXRpb25zIGhhdmUgb2NjdXJy
ZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCisgICAgICAgIG1fcm9vdC0+cmVjdCA9
IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQgcm9vdCB0byBleHBhbmQg
dGhlIHRyZWUuCisgICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsKKyAgICBTcGxpdCBzcGxpdDsK
KyAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICBzcGxp
dCA9IFNwbGl0T25YOworICAgIGVsc2UKKyAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKworICAg
IHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkgeworICAgICAgICBpZiAobV9y
b290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCisgICAgICAgICAgICBzcGxpdCA9
IFNwbGl0T25ZOworICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgPT0gbV9z
aXplLmhlaWdodCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgTm9k
ZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgp
OworICAgICAgICBtX25vZGVDb3VudCArPSAyOworICAgICAgICBtX3Jvb3QtPnBhcmVudCA9IHBh
cmVudDsKKyAgICAgICAgcGFyZW50LT5wYXJlbnQgPSAwOworICAgICAgICBwYXJlbnQtPmxlZnQg
PSBtX3Jvb3Q7CisgICAgICAgIHBhcmVudC0+cmlnaHQgPSByaWdodDsKKyAgICAgICAgcGFyZW50
LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7CisgICAgICAgIHJpZ2h0LT5wYXJl
bnQgPSBwYXJlbnQ7CisgICAgICAgIHJpZ2h0LT5sZWZ0ID0gMDsKKyAgICAgICAgcmlnaHQtPnJp
Z2h0ID0gMDsKKyAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUo
KTsKKyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7CisgICAgICAgICAgICBwYXJlbnQt
PnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCisgICAg
ICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0
KCkpOworICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkg
KyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAg
ICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0
LngoKSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lk
dGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpICogMik7CisgICAgICAgICAgICByaWdodC0+cmVj
dCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+
cmVjdC53aWR0aCgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jv
b3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIHNwbGl0ID0gKHNwbGl0ID09
IFNwbGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7CisgICAgICAgIG1fcm9vdCA9IHBhcmVu
dDsKKyAgICB9CisgICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IEludFNpemUmIHNpemUxLCBjb25zdCBJbnRTaXpl
JiBzaXplMikKK3sKKyAgICByZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYm
IHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdodCgpOworfQorCitJbnRSZWN0IEdlbmVyYWxB
cmVhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEludFNp
emUgcm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKKyAgICByb3VuZGVkID0gbmV4dFBv
d2VyT2ZUd28ocm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5k
ZWQud2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJvdW5kZWQuaGVpZ2h0KCkg
PD0gMCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQorICAgICAgICByZXR1
cm4gSW50UmVjdCgpOworCisgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJv
dW5kZWQsIG1fcm9vdCk7CisgICAgaWYgKHBvaW50LngoKSA+PSAwKQorICAgICAgICByZXR1cm4g
SW50UmVjdChwb2ludCwgc2l6ZSk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UG9p
bnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgTm9kZSogbm9kZSkKK3sKKyAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0
IGludG8sIHdoaWNoIHNob3VsZCBiZQorICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91
bnQgb2YgdW51c2VkIHNwYWNlIHRoYXQgaXMKKyAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4g
dGhlIHJlcXVlc3RlZCBzaXplLgorICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIC8vIEdvIGRv
d24gYSBsZXZlbCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0CisgICAgICAgIC8v
IHN1Yi10cmVlIGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgorICAgICAg
ICBOb2RlKiBsZWZ0ID0gbm9kZS0+bGVmdDsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5y
aWdodDsKKyAgICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0
RnJlZSkpIHsKKyAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0
LT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUu
d2lkdGgoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCisgICAgICAgICAgICAgICAgICAg
IHx8IGxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdo
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5
IGJlIGEgbGl0dGxlIG92ZXJzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRo
ZSBsZWZ0IHN1Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KKyAgICAgICAgICAg
ICAgICAgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0
ZUZyb21Ob2RlKHNpemUsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbm9kZSA9IHJpZ2h0OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbm9k
ZSA9IGxlZnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCBy
aWdodC0+bGFyZ2VzdEZyZWUpKQorICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICBl
bHNlIGlmIChsZWZ0IHx8IHJpZ2h0KSB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2Rl
IGhhcyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAgICAgICAgIHJldHVybiBJ
bnRQb2ludCgtMSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9k
ZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRo
aXMgbm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAgU3BsaXQgc3BsaXQ7Cisg
ICAgICAgICAgICBpZiAoZml0c1dpdGhpbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUu
aGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8g
U3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCisgICAgICAg
ICAgICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRyeSB0byBi
YWxhbmNlCisgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMgZnVydGhl
ciBzdWJkaXZpc2lvbnMgaGFwcGVuLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQK
KyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LngoKSA9PSBu
b2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQg
PSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQpCisgICAg
ICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAg
ICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNlIGlmIChm
aXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUt
Pmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRp
cmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAgICAgICAg
fSBlbHNlIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
ICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFs
b25nIHRoZSBZIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVy
dGhlciAtIGFsbG9jYXRlIHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0
RnJlZSA9IEludFNpemUoMCwgMCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUo
bm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJv
dW5kIGFnYWluIHVzaW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgorICAgICAgICAgICAgbm9kZSA9IHNw
bGl0Tm9kZShub2RlLCBzcGxpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBD
YW5ub3QgcG9zc2libHkgZml0IGludG8gdGhpcyBub2RlLgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEludFBvaW50KC0xLCAtMSk7Cit9CisKK0dlbmVy
YWxBcmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlCisg
ICAgKE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQoreworICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9k
ZSgpOworICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICBtX25vZGVDb3VudCArPSAy
OworICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgbGVmdC0+bGVmdCA9IDA7CisgICAgbGVm
dC0+cmlnaHQgPSAwOworICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIHJpZ2h0LT5sZWZ0
ID0gMDsKKyAgICByaWdodC0+cmlnaHQgPSAwOworICAgIG5vZGUtPmxlZnQgPSBsZWZ0OworICAg
IG5vZGUtPnJpZ2h0ID0gcmlnaHQ7CisKKyAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAg
ICAgICAgbGVmdC0+cmVjdCA9IEludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJlY3QueSgp
LAorICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9kZS0+cmVjdC5oZWlnaHQo
KSk7CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gSW50UmVjdChsZWZ0LT5yZWN0Lm1heFgoKSwgbm9k
ZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5y
ZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0LT5yZWN0ID0gSW50UmVj
dChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0
LndpZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgcmlnaHQtPnJlY3Qg
PSBJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBsZWZ0LT5yZWN0Lm1heFkoKSwKKyAgICAgICAgICAg
IG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOworICAgIH0KKwor
ICAgIGxlZnQtPmxhcmdlc3RGcmVlID0gbGVmdC0+cmVjdC5zaXplKCk7CisgICAgcmlnaHQtPmxh
cmdlc3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6ZSgpOworICAgIG5vZGUtPmxhcmdlc3RGcmVlID0g
cmlnaHQtPmxhcmdlc3RGcmVlOworICAgIHJldHVybiBsZWZ0OworfQorCit2b2lkIEdlbmVyYWxB
cmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0RnJlZShOb2RlKiBub2RlKQoreworICAgIHdoaWxl
ICgobm9kZSA9IG5vZGUtPnBhcmVudCkpIHsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBJ
bnRTaXplKAorICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUud2lk
dGgoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkpLAorICAgICAgICAgICAgc3Rk
OjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5sYXJn
ZXN0RnJlZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICk7CisgICAgfQorfQorCit2b2lkIEdlbmVy
YWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8g
TG9jYXRlIHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRlZCByZWdpb24uCisgICAg
Tm9kZSogbm9kZSA9IG1fcm9vdDsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJlY3QubG9jYXRpb24o
KTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+bGVmdCAmJiBub2RlLT5s
ZWZ0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5sZWZ0
OworICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5yaWdodC0+cmVjdC5jb250
YWlucyhwb2ludCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgICAgIGVs
c2UgaWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsgLy8gUG9pbnQgaXMgY29tcGxldGVseSBv
dXRzaWRlIHRoZSB0cmVlLgorICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJlZSBhbmQgdGhlbiB3b3JrIHVwd2FyZHMgdGhy
b3VnaCB0aGUgdHJlZQorICAgIC8vIHJlY29tYmluaW5nIGFuZCBkZWxldGluZyBub2RlcyB1bnRp
bCB3ZSByZWFjaCBhIHNpYmxpbmcKKyAgICAvLyB0aGF0IGlzIHN0aWxsIGFsbG9jYXRlZC4KKyAg
ICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOworICAgIHdoaWxlIChub2Rl
LT5wYXJlbnQpIHsKKyAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdCA9PSBub2RlKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodC0+bGFyZ2VzdEZyZWUgIT0gbm9kZS0+
cGFyZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0LT5sYXJnZXN0
RnJlZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3Quc2l6ZSgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisgICAgICAg
IGZyZWVOb2RlKG5vZGUtPmxlZnQpOworICAgICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7Cisg
ICAgICAgIG1fbm9kZUNvdW50IC09IDI7CisgICAgICAgIG5vZGUtPmxlZnQgPSAwOworICAgICAg
ICBub2RlLT5yaWdodCA9IDA7CisgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVj
dC5zaXplKCk7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmVzdCBvZiBvdXIgYW5jZXN0b3Jz
IGhhdmUgdGhlIGNvcnJlY3QgImxhcmdlc3QgZnJlZSBzaXplIi4KKyAgICB1cGRhdGVMYXJnZXN0
RnJlZShub2RlKTsKK30KKworaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTgwY2Fl
MjM3NzUwZjZmYTM0M2IwYmM3ZjJhOTMwOTM5MDhkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxv
Y2F0b3IuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICoKKyAqLworCisjaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAorI2RlZmluZSBBcmVhQWxsb2Nh
dG9yX2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIp
Cit7CisgICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dlck9mVHdvIGZv
ciBhbiBpbnRlZ2VyLgorICAgIC0tbnVtYmVyOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTsK
KyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA0Owor
ICAgIG51bWJlciB8PSBudW1iZXIgPj4gODsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE2Owor
ICAgIG51bWJlcisrOworICAgIHJldHVybiBudW1iZXI7Cit9CisKK2lubGluZSBJbnRTaXplIG5l
eHRQb3dlck9mVHdvKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEludFNpemUo
bmV4dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwgbmV4dFBvd2VyT2ZUd28oc2l6ZS5oZWlnaHQo
KSkpOworfQorCitjbGFzcyBBcmVhQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBB
cmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5BcmVhQWxsb2NhdG9y
KCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAg
IEludFNpemUgbWluaW11bUFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21pbkFsbG9jOyB9
CisgICAgdm9pZCBzZXRNaW5pbXVtQWxsb2NhdGlvbihjb25zdCBJbnRTaXplJiBzaXplKSB7IG1f
bWluQWxsb2MgPSBzaXplOyB9CisKKyAgICBJbnRTaXplIG1hcmdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWFyZ2luOyB9CisgICAgdm9pZCBzZXRNYXJnaW4oY29uc3QgSW50U2l6ZSAmbWFyZ2luKSB7
IG1fbWFyZ2luID0gbWFyZ2luOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZXhwYW5kKGNvbnN0IElu
dFNpemUmKTsKKyAgICB2b2lkIGV4cGFuZEJ5KGNvbnN0IEludFNpemUmKTsKKworICAgIHZpcnR1
YWwgSW50UmVjdCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCByZWxlYXNlKGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgaW50IG92ZXJoZWFkKCkg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRTaXplIG1f
bWluQWxsb2M7CisgICAgSW50U2l6ZSBtX21hcmdpbjsKKworICAgIEludFNpemUgcm91bmRBbGxv
Y2F0aW9uKGNvbnN0IEludFNpemUmKSBjb25zdDsKK307CisKK2NsYXNzIEdlbmVyYWxBcmVhQWxs
b2NhdG9yIDogcHVibGljIEFyZWFBbGxvY2F0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IEdl
bmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5HZW5lcmFs
QXJlYUFsbG9jYXRvcigpOworCisgICAgdm9pZCBleHBhbmQoY29uc3QgSW50U2l6ZSYpOworICAg
IEludFJlY3QgYWxsb2NhdGUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVsZWFzZShjb25z
dCBJbnRSZWN0Jik7CisgICAgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
ZW51bSBTcGxpdCB7IFNwbGl0T25YLCBTcGxpdE9uWSB9OworCisgICAgc3RydWN0IE5vZGUgewor
ICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIEludFNpemUgbGFyZ2VzdEZyZWU7CisgICAg
ICAgIE5vZGUqIHBhcmVudDsKKyAgICAgICAgTm9kZSogbGVmdDsKKyAgICAgICAgTm9kZSogcmln
aHQ7CisgICAgfTsKKworICAgIE5vZGUqIG1fcm9vdDsKKyAgICBpbnQgbV9ub2RlQ291bnQ7CisK
KyAgICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7CisgICAgSW50UG9pbnQgYWxsb2NhdGVG
cm9tTm9kZShjb25zdCBJbnRTaXplJiwgTm9kZSopOworICAgIE5vZGUqIHNwbGl0Tm9kZShOb2Rl
KiwgU3BsaXQpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKworI2VuZGlmIC8vIEFyZWFBbGxvY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVk
YTJiOGZiNWY0YThkOWQyYzk4NzllOTNhY2I4NWMwZjNjOWI4YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJHTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmVUaWxlOjpzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQorewor
ICAgIGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgdGls
ZVJlY3QobV90aWxlUmVjdCk7CisgICAgdGlsZVJlY3Quc2NhbGUoMS4gLyBtX3NjYWxlKTsKKyAg
ICBib29sIHNob3VsZFJlc2V0ID0gZmFsc2U7CisgICAgaWYgKHRpbGVSZWN0ICE9IHJlY3QoKSkg
eworICAgICAgICBzZXRSZWN0KHRpbGVSZWN0KTsKKyAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVl
OworICAgIH0KKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IHRoaXMtPnRleHR1
cmUoKTsKKyAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVNYXBw
ZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgc2V0VGV4dHVyZSh0ZXh0dXJlLmdldCgpKTsK
KyAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOworICAgIH0KKworICAgIEFTU0VSVCh0ZXh0dXJl
TWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLndpZHRoKCkgPj0gbV90aWxlUmVjdC5zaXplKCkud2lk
dGgoKSAmJiB0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLmhlaWdodCgpID49IG1fdGls
ZVJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgIHRl
eHR1cmUtPnJlc2V0KG1fdGlsZVJlY3Quc2l6ZSgpLCBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEo
KSk7CisKKyAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVyZSwgbV9zb3VyY2VSZWN0
LCBtX3N1cmZhY2VPZmZzZXQpOworICAgIG1fc3VyZmFjZS5jbGVhcigpOworfQorCit2b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3NvdXJj
ZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIG1fdGlsZVJlY3QgPSB0aWxlUmVjdDsKKyAgICBtX3N1
cmZhY2VPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdXJmYWNlID0gYnVmZmVyOworfQorCit2b2lk
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKHVpbnQzMl90IGlkLCBmbG9hdCBz
Y2FsZSkKK3sKKyAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
KHNjYWxlKSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlOjpyZW1vdmVUaWxlKHVpbnQzMl90IGlkKQoreworICAgIEFTU0VSVChtX3RpbGVz
LmNvbnRhaW5zKGlkKSk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmFkZChpZCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAgICBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7Cisg
ICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1fdGlsZXNUb1JlbW92ZS5h
ZGQoaXQtPmtleSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRp
bGUodWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3Qm
IHRpbGVSZWN0LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYmFja0J1ZmZlciwgY29u
c3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV90
aWxlcy5lbmQoKSk7CisgICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJj
ZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVy
ZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5l
bmQoKTsKKyAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBS
ZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7CisgICAg
ICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfQorCisg
ICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAg
bV9zaXplID0gc2l6ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRU
aWxlc1RvVGV4dHVyZU1hcHBlcihWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiYgdGlsZXMsIFRl
eHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2ssIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzLnNpemUoKTsg
KytpKQorICAgICAgICB0aWxlc1tpXS0+cGFpbnQodGV4dHVyZU1hcHBlciwgdHJhbnNmb3JtLCBv
cGFjaXR5LCBtYXNrLCBjYWxjdWxhdGVFeHBvc2VkVGlsZUVkZ2VzKHJlY3QsIHRpbGVzW2ldLT5y
ZWN0KCkpKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU6OmFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3Qp
Cit7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KHJlY3QoKSwg
dGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxv
YXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKKyAgICBpZiAobV90aWxlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fc2l6ZS5pc1plcm8oKSk7CisK
KyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFpbnQ7CisgICAgVmVjdG9y
PFRleHR1cmVNYXBwZXJUaWxlKj4gcHJldmlvdXNUaWxlc1RvUGFpbnQ7CisKKyAgICAvLyBXZSBo
YXZlIHRvIGRvIHRoaXMgZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2FzZSB0aGUgb3BhY2l0eSBo
YXMgY2hhbmdlZC4KKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OworICAgIGZv
ciAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlVGlsZSYgdGlsZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0aWxlLnNjYWxlKCkgPT0gbV9z
Y2FsZSkgeworICAgICAgICAgICAgdGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7CisgICAgICAg
ICAgICBjb3ZlcmVkUmVjdC51bml0ZSh0aWxlLnJlY3QoKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9ubHkgc2hvdyB0aGUgcHJldmlvdXMgdGlsZSBp
ZiB0aGUgb3BhY2l0eSBpcyBoaWdoLCBvdGhlcndpc2UgZWZmZWN0IGxvb2tzIGxpa2UgYSBidWcu
CisgICAgICAgIC8vIFdlIHNob3cgdGhlIHByZXZpb3VzLXNjYWxlIHRpbGUgYW55d2F5IGlmIGl0
IGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggYW55IGN1cnJlbnQtc2NhbGUgdGlsZS4KKyAgICAgICAg
aWYgKG9wYWNpdHkgPCAwLjk1ICYmIGNvdmVyZWRSZWN0LmludGVyc2VjdHModGlsZS5yZWN0KCkp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcHJldmlvdXNUaWxlc1RvUGFpbnQu
YXBwZW5kKCZ0aWxlKTsKKyAgICB9CisKKyAgICAvLyB0YXJnZXRSZWN0IGlzIG9uIHRoZSBjb250
ZW50cyBjb29yZGluYXRlIHN5c3RlbSwgc28gd2UgbXVzdCBjb21wYXJlIHR3byByZWN0cyBvbiB0
aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgLy8gU2VlIFRpbGVkQmFja2luZ1N0
b3JlLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNm
b3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworCisgICAgcGFpbnRU
aWxlc1RvVGV4dHVyZU1hcHBlcihwcmV2aW91c1RpbGVzVG9QYWludCwgdGV4dHVyZU1hcHBlciwg
YWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3QoKSk7CisgICAgcGFpbnRUaWxl
c1RvVGV4dHVyZU1hcHBlcih0aWxlc1RvUGFpbnQsIHRleHR1cmVNYXBwZXIsIGFkanVzdGVkVHJh
bnNmb3JtLCBvcGFjaXR5LCBtYXNrLCByZWN0KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlOjpkcmF3Qm9yZGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0
IENvbG9yJiBib3JkZXJDb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFk
anVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKKyAgICBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdCb3JkZXIo
Ym9yZGVyQ29sb3IsIGJvcmRlcldpZHRoLCBpdC0+dmFsdWUucmVjdCgpLCBhZGp1c3RlZFRyYW5z
Zm9ybSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmRyYXdSZXBhaW50Q291
bnRlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgcmVwYWludENvdW50LCBjb25z
dCBDb2xvciYgYm9yZGVyQ29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9y
UmVjdCh0YXJnZXRSZWN0KTsKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0
ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdSZXBhaW50Q291bnRlcihyZXBhaW50Q291
bnQsIGJvcmRlckNvbG9yLCBpdC0+dmFsdWUucmVjdCgpLmxvY2F0aW9uKCksIGFkanVzdGVkVHJh
bnNmb3JtKTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9w
ZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBIYXNoU2V0PHVp
bnQzMl90Pjo6aXRlcmF0b3IgdGlsZXNUb1JlbW92ZUVuZCA9IG1fdGlsZXNUb1JlbW92ZS5lbmQo
KTsKKyAgICBmb3IgKEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciBpdCA9IG1fdGlsZXNUb1Jl
bW92ZS5iZWdpbigpOyBpdCAhPSB0aWxlc1RvUmVtb3ZlRW5kOyArK2l0KQorICAgICAgICBtX3Rp
bGVzLnJlbW92ZSgqaXQpOworICAgIG1fdGlsZXNUb1JlbW92ZS5jbGVhcigpOworCisgICAgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciB0aWxlc0VuZCA9IG1fdGlsZXMu
ZW5kKCk7CisgICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytpdCkKKyAgICAgICAgaXQt
PnZhbHVlLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
MzM2ZDcxZmM4ZjM1OGVlOGNiMTJmNWZmMGRlMGM3ZmY3ZjNhOTk3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVf
aAorI2RlZmluZSBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29y
ZGluYXRlZFN1cmZhY2U7CisKK2NsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSA6IHB1
YmxpYyBUZXh0dXJlTWFwcGVyVGlsZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKKyAgICAgICAgOiBUZXh0dXJlTWFw
cGVyVGlsZShGbG9hdFJlY3QoKSkKKyAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQorICAgIHsKKyAg
ICB9CisKKyAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9
CisgICAgdm9pZCBzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBzZXRCYWNr
QnVmZmVyKGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZFN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmKTsKKworcHJpdmF0ZToKKyAgICBS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgSW50UmVjdCBtX3NvdXJj
ZVJlY3Q7CisgICAgSW50UmVjdCBtX3RpbGVSZWN0OworICAgIEludFBvaW50IG1fc3VyZmFjZU9m
ZnNldDsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAg
dm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgZmxvYXQpOworICAgIHZvaWQgcmVtb3Zl
VGlsZSh1aW50MzJfdCB0aWxlSUQpOworICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICB2
b2lkIHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50
UmVjdCYsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiwgY29uc3QgSW50UG9pbnQmKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKTsgfQorICAgIHZv
aWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciopOworICAgIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBG
bG9hdFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
ZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0JvcmRlcihUZXh0
dXJlTWFwcGVyKiwgY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXIqLCBpbnQgcmVwYWludENvdW50
LCBjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUo
KQorICAgICAgICA6IG1fc2NhbGUoMS4pCisgICAgeyB9CisgICAgdm9pZCBwYWludFRpbGVzVG9U
ZXh0dXJlTWFwcGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+JiwgVGV4dHVyZU1hcHBlcios
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqLCBjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9y
bUZvclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7
IHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOyB9CisKKyAgICB0
eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT4gQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
VGlsZU1hcCBtX3RpbGVzOworICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1fdGlsZXNUb1JlbW92ZTsK
KyAgICBGbG9hdFNpemUgbV9zaXplOworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisK
KyNlbmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRD
dXN0b21GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmYwMjFiMGI0OTZlYWNjNmJkYTJmZTZkNTA5ZWUzZjYzZjg4OTBkYzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaApAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisg
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb25faAorI2RlZmluZSBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyBpcyBv
bmx5IGFkZGluZyB0aGUgcHJvZ3JhbUlkIG9uIHRvcCBvZiBDdXN0b21GaWx0ZXJPcGVyYXRpb24u
IFRoZSBhcmd1bWVudCBkZWNvZGVyIGhhcyBubworLy8gY29udGV4dCwgc28gd2UgY2Fubm90IHNl
YXJjaCBpbiBvdXIgY2FjaGVkIEN1c3RvbUZpbHRlclByb2dyYW1zIHdoaWxlIGRlY29kaW5nLiBJ
biB0aGF0IGNhc2UKKy8vIGl0IHdpbGwganVzdCBzdG9yZSB0aGUgcHJvZ3JhbUlkIGFuZCBubyBD
dXN0b21GaWx0ZXJQcm9ncmFtIGluc3RhbmNlLiBUaGUgcmVjZWl2ZXIgaXMgc3VwcG9zZWQgdG8K
Ky8vIGl0ZXJhdGUgb24gdGhpcyBzdHJ1Y3R1cmUgYW5kIGluamVjdCB0aGUgcmlnaHQgQ3VzdG9t
RmlsdGVyUHJvZ3JhbXMuCisKK2NsYXNzIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
IDogcHVibGljIEN1c3RvbUZpbHRlck9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGludCBwcm9ncmFtSUQsIGNvbnN0IEN1
c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hS
b3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3VzdG9tRmls
dGVyT3BlcmF0aW9uKHByb2dyYW0sIHByb2dyYW1JRCwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJv
d3MsIG1lc2hDb2x1bW5zLCBtZXNoVHlwZSkpOworICAgIH0KKworICAgIGludCBwcm9ncmFtSUQo
KSBjb25zdCB7IHJldHVybiBtX3Byb2dyYW1JRDsgfQorCitwcml2YXRlOgorICAgIENvb3JkaW5h
dGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbSwgaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYg
c29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5z
LCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKKyAgICAgICAgOiBDdXN0b21GaWx0ZXJP
cGVyYXRpb24ocHJvZ3JhbSwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5z
LCBtZXNoVHlwZSkKKyAgICAgICAgLCBtX3Byb2dyYW1JRChwcm9ncmFtSUQpCisgICAgeworICAg
IH0KKworICAgIGludCBtX3Byb2dyYW1JRDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclBy
b2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTQ5YjFi
ZWE1ZGYyZGJhZTFjMTUzZDU0Mjc4MDNmZTU0MTE1OTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW1faAorI2RlZmluZSBD
b29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW1faAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKSAmJiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29u
c3RhbnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6IHB1Ymxp
YyBDdXN0b21GaWx0ZXJQcm9ncmFtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
b29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShTdHJpbmcgdmVydGV4U2hhZGVy
U3RyaW5nLCBTdHJpbmcgbV9mcmFnbWVudFNoYWRlclN0cmluZywgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bVR5cGUgcHJvZ3JhbVR5cGUsIEN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0
aW5ncywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFk
ZXJTdHJpbmcsIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcsIHByb2dyYW1UeXBlLCBtaXhTZXR0aW5n
cywgbWVzaFR5cGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkZWQoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtJiBvKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSAhPSBvcGVyYXRvciBiZWNhdXNlIHRoYXQgd291bGQg
cmVjdXJzaXZlbHkgY2FsbCB0aGlzIG1ldGhvZC4KKyAgICAgICAgaWYgKCFDdXN0b21GaWx0ZXJQ
cm9ncmFtOjpvcGVyYXRvcj09KG8pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIC8vIFRoZSBmb2xsb3dpbmcgY2FzdCBpcyB1Z2x5LCBidXQgQ29vcmRpbmF0ZWRDdXN0b21G
aWx0ZXJQcm9ncmFtIGlzIHRoZSBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgQ3VzdG9tRmlsdGVy
UHJvZ3JhbSBvbiBVSSBQcm9jZXNzLgorICAgICAgICBjb25zdCBDb29yZGluYXRlZEN1c3RvbUZp
bHRlclByb2dyYW0qIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDdXN0b21G
aWx0ZXJQcm9ncmFtKj4oJm8pOworICAgICAgICByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTdHJpbmcg
PT0gb3RoZXItPnZlcnRleFNoYWRlclN0cmluZygpICYmIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcg
PT0gb3RoZXItPmZyYWdtZW50U2hhZGVyU3RyaW5nKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCBTdHJpbmcgdmVydGV4U2hhZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBmcmFnbWVu
dFNoYWRlclN0cmluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJT
dHJpbmc7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aWxsSGF2ZUNsaWVudHMoKSBPVkVSUklERSB7
IG5vdGlmeUNsaWVudHMoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVMYXN0Q2xpZW50
KCkgT1ZFUlJJREUgeyB9CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQ
cm9ncmFtKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0cmluZyBmcmFnbWVudFNoYWRlclN0
cmluZywgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUsIEN1c3RvbUZpbHRlclBy
b2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5ncywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5
cGUpCisgICAgICAgIDogQ3VzdG9tRmlsdGVyUHJvZ3JhbShwcm9ncmFtVHlwZSwgbWl4U2V0dGlu
Z3MsIG1lc2hUeXBlKQorICAgICAgICAsIG1fdmVydGV4U2hhZGVyU3RyaW5nKHZlcnRleFNoYWRl
clN0cmluZykKKyAgICAgICAgLCBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nKGZyYWdtZW50U2hhZGVy
U3RyaW5nKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7
CisgICAgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmc7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIEVOQUJM
RShDU1NfU0hBREVSUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3Jh
bV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MzZmMjYwNGMwYzEwNDM5OTk1N2I5OGEyNTI1ZWU3ZGJj
ZGQ5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMCww
ICsxLDEwNTYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuCisgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisjZW5k
aWYKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChHcmFwaGlj
c0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihsYXllciktPmlkKCkgOiAwOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpCit7CisgICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0
ZSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1
c2hSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRp
ZENoYW5nZUFuaW1hdGlvbnMoKQoreworICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSB0cnVl
OworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWly
ZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VD
aGlsZHJlbigpCit7CisgICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0cnVlOworICAgIGlmIChj
bGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9
CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZGlkQ2hhbmdlRmlsdGVycygpCit7CisgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IHRydWU7
CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJl
ZCh0aGlzKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlk
Q2hhbmdlSW1hZ2VCYWNraW5nKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcgPSB0
cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVx
dWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91
bGRVcGRhdGVWaXNpYmxlUmVjdCgpCit7CisgICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9
IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytp
KQorICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbigpW2ldKS0+c2V0
U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAg
ICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0U2hvdWxk
VXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmRpZENoYW5nZUdlb21ldHJ5KCkKK3sKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAg
c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50
KQorICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9p
c1B1cmdpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Qo
dHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKKyAgICAsIG1fc2hvdWxk
U3luY0NoaWxkcmVuKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUpCisgICAg
LCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0FuaW1h
dGlvbnModHJ1ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQorICAgICwgbV9wZW5k
aW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdWaXNpYmxl
UmVjdEFkanVzdG1lbnQoZmFsc2UpCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgLCBt
X2lzVmFsaWRDYW52YXMoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24oTm9u
ZSkKKyNlbmRpZgorICAgICwgbV9jb29yZGluYXRvcigwKQorICAgICwgbV9jb21wb3NpdGVkTmF0
aXZlSW1hZ2VQdHIoMCkKKyAgICAsIG1fY2FudmFzUGxhdGZvcm1MYXllcigwKQorICAgICwgbV9h
bmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5p
bWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCit7CisgICAgc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJ
RCBuZXh0TGF5ZXJJRCA9IDE7CisgICAgbV9pZCA9IG5leHRMYXllcklEKys7Cit9CisKK0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6fkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpCit7CisgICAg
aWYgKG1fY29vcmRpbmF0b3IpIHsKKyAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAg
ICAgIG1fY29vcmRpbmF0b3ItPmRldGFjaExheWVyKHRoaXMpOworICAgIH0KKyAgICBBU1NFUlQo
IW1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgIW1fbWFpbkJhY2tpbmdTdG9yZSk7CisgICAg
d2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKK3sKKyAg
ICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworICAgIGlm
ICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRk
Q2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGQobGF5ZXIpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGlu
dCBpbmRleCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGlu
ZGV4KTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NM
YXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVy
LCBzaWJsaW5nKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3Jh
cGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93
KGxheWVyLCBzaWJsaW5nKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCitib29sIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENo
aWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NM
YXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7CisgICAgaWYgKCFvaykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFy
ZW50KCkKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAgICAgICAgcGFyZW50TGF5
ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBh
cmVudCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24o
Y29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKKyAgICBkaWRD
aGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQoreworICAgIGlmIChhbmNob3JQb2lu
dCgpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hv
clBvaW50KHApOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBp
ZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFNpemUoc2l6ZSk7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1h
c2tMYXllcigpLT5zZXRTaXplKHNpemUpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHRyYW5zZm9ybSgpID09IHQpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBkaWRD
aGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAg
aWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0
cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNE
KGJvb2wgYikKK3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQorICAgICAgICByZXR1cm47
CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKKyAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza3NU
b0JvdW5kcyhib29sIGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQorICAgICAg
ICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsKKyAgICBk
aWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0gYikK
KyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsK
KworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRz
QXJlVmlzaWJsZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRDb250ZW50c1Zpc2libGUoYik7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNr
TGF5ZXIoKS0+c2V0Q29udGVudHNWaXNpYmxlKGIpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFx
dWUoYm9vbCBiKQoreworICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5n
U3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWIpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzT3BhcXVlKGIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpCit7Cisg
ICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAgIHJldHVybjsKKworICAg
IEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKKyAgICBkaWRDaGFuZ2VM
YXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRPcGFj
aXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5
KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNp
dHkpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlm
IChjb250ZW50c1JlY3QoKSA9PSByKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xh
eWVyOjpzZXRDb250ZW50c1JlY3Qocik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXko
KQoreworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmIChtX2NhbnZhc1BsYXRmb3Jt
TGF5ZXIpCisgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBTeW5jQ2FudmFzOwor
I2VuZGlmCisKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVz
aFJlcXVpcmVkKHRoaXMpOworCisgICAgYWRkUmVwYWludFJlY3QoY29udGVudHNSZWN0KCkpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyhQ
bGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQoreworI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorICAgIGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2Fu
dmFzVG9rZW4uaXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybUxheWVyKSB7CisgICAg
ICAgICAgICBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gfD0gRGVzdHJveUNhbnZhczsKKyAgICAg
ICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+Q3JlYXRlQ2FudmFzOworICAgICAg
ICB9ICBlbHNlIGlmICgobV9jYW52YXNTaXplICE9IHBsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5
ZXJTaXplKCkpIHx8IChtX2NhbnZhc1Rva2VuICE9IHBsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3Vy
ZmFjZVRva2VuKCkpKSB7CisgICAgICAgICAgICAvLyBtX2NhbnZhc1Rva2VuIGNhbiBiZSBkaWZm
ZXJlbnQgdG8gcGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSwgZXZlbiBpZiBt
X2NhbnZhc1BsYXRmb3JtTGF5ZXIgZXF1YWxzIHBsYXRmb3JtTGF5ZXIuCisgICAgICAgICAgICBt
X3BlbmRpbmdDYW52YXNPcGVyYXRpb24gfD0gUmVjcmVhdGVDYW52YXM7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgeworICAgICAgICBpZiAocGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIG1fcGVu
ZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBDcmVhdGVBbmRTeW5jQ2FudmFzOworICAgIH0KKworICAg
IG1fY2FudmFzUGxhdGZvcm1MYXllciA9IHBsYXRmb3JtTGF5ZXI7CisgICAgLy8gbV9jYW52YXNU
b2tlbiBpcyB1cGRhdGVkIG9ubHkgaGVyZS4gSW4gZGV0YWlsLCB3aGVuIEdyYXBoaWNzQ29udGV4
dDNEIGlzIGNoYW5nZWQgb3IgcmVzaGFwZWQsIG1fY2FudmFzVG9rZW4gaXMgY2hhbmdlZCBhbmQg
c2V0Q29udGVudHNUb0NhbnZhcygpIGlzIGFsd2F5cyBjYWxsZWQuCisgICAgbV9jYW52YXNTaXpl
ID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyID8gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9y
bUxheWVyU2l6ZSgpIDogSW50U2l6ZSgpOworICAgIG1fY2FudmFzVG9rZW4gPSBtX2NhbnZhc1Bs
YXRmb3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2Vu
KCkgOiBHcmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgIEFTU0VSVCghKCFtX2NhbnZhc1Rva2Vu
LmlzVmFsaWQoKSAmJiBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpKTsKKworICAgIGlmIChjbGllbnQo
KSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9ybUxheWVyKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQorYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKK3sKKyAgICBpZiAoZmlsdGVycygp
ID09IG5ld0ZpbHRlcnMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRpZENoYW5nZUZpbHRl
cnMoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsK
K30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNU
b1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChtX2xheWVySW5mby5z
b2xpZENvbG9yID09IGNvbG9yKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllckluZm8uc29s
aWRDb2xvciA9IGNvbG9yOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcihib29sIHNob3cpCit7
CisgICAgaWYgKGlzU2hvd2luZ0RlYnVnQm9yZGVyKCkgPT0gc2hvdykKKyAgICAgICAgcmV0dXJu
OworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKHNob3cpOworICAgIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFNob3dSZXBhaW50Q291bnRlcihib29sIHNob3cpCit7CisgICAgaWYgKGlzU2hvd2luZ1Jl
cGFpbnRDb3VudGVyKCkgPT0gc2hvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NM
YXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKHNob3cpOworICAgIGRpZENoYW5nZUxheWVyU3Rh
dGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9J
bWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmV3TmF0aXZlSW1hZ2VQ
dHIgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDogMDsKKyAg
ICBpZiAobmV3TmF0aXZlSW1hZ2VQdHIpIHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIG1ha2VzIHRo
ZSBhc3N1bXB0aW9uIHRoYXQgcG9pbnRlciBlcXVhbGl0eSBvbiBhIE5hdGl2ZUltYWdlUHRyIGlz
IGEgdmFsaWQgd2F5IHRvIHRlbGwgaWYgdGhlIGltYWdlIGlzIGNoYW5nZWQuCisgICAgICAgIC8v
IFRoaXMgYXNzdW1wdGlvbiBpcyB0cnVlIGluIFF0LCBHVEsgYW5kIEVGTC4KKyAgICAgICAgaWYg
KG5ld05hdGl2ZUltYWdlUHRyID09IG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0gaW1hZ2U7CisgICAg
ICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gbmV3TmF0aXZlSW1hZ2VQdHI7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAwOworICAgICAgICBtX2NvbXBv
c2l0ZWROYXRpdmVJbWFnZVB0ciA9IDA7CisgICAgfQorCisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNUb0ltYWdlKGltYWdlKTsKKyAgICBkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xh
eWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7CisKKyAgICBp
ZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0U2l6ZShzaXplKCkp
OworICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUoY29udGVudHNBcmVWaXNpYmxlKCkpOwor
ICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRMYXllciA9IHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICBjb29yZGluYXRlZExheWVyLT5kaWRDaGFu
Z2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCitib29sIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZShJbWFn
ZSogaW1hZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1h
Z2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZW51bSB7IE1heERpbWVuc3Rpb25G
b3JEaXJlY3RDb21wb3NpdGluZyA9IDIwMDAgfTsKKyAgICBpZiAoaW1hZ2UtPndpZHRoKCkgPiBN
YXhEaW1lbnN0aW9uRm9yRGlyZWN0Q29tcG9zaXRpbmcgfHwgaW1hZ2UtPmhlaWdodCgpID4gTWF4
RGltZW5zdGlvbkZvckRpcmVjdENvbXBvc2l0aW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChsYXll
ciA9PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
cjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgp
Cit7CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNp
emUoKSkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNw
bGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9tYWluQmFja2lu
Z1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChy
ZWN0KSk7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisKKyAgICBhZGRSZXBhaW50UmVj
dChyZWN0KTsKK30KKworQ29vcmRpbmF0ZWRMYXllcklEIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lkOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICBpZiAoIW1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSkg
eworICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1
c2hSZXF1aXJlZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciht
YXNrTGF5ZXIoKSkpCisgICAgICAgIG1hc2stPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNM
YXllck9ubHkoKTsKKworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2Eg
PSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgIHJl
cGxpY2EtPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1f
Y29vcmRpbmF0b3ItPnN5bmNGaXhlZExheWVycygpOworCisgICAgZmx1c2hDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGls
ZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5mbHVzaENvbXBvc2l0
aW5nU3RhdGUocmVjdCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+KGxheWVyKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCit7CisgICAgaWYgKCFtX3No
b3VsZFN5bmNDaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0NoaWxk
cmVuID0gZmFsc2U7CisgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRJRHM7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAg
ICBjaGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRyZW4oKVtpXSkpOwor
CisgICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOwor
fQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnN5bmNGaWx0ZXJzKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7CisgICAgbV9jb29y
ZGluYXRvci0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOworfQorI2VuZGlmCisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKCkKK3sKKyAg
ICBpZiAoIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZykKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c2hvdWxkU3luY0ltYWdlQmFja2luZyA9IGZhbHNlOworCisgICAgaWYgKG1fY29tcG9zaXRlZE5h
dGl2ZUltYWdlUHRyKSB7CisgICAgICAgIEFTU0VSVCghc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgp
KTsKKyAgICAgICAgQVNTRVJUKG1fY29tcG9zaXRlZEltYWdlKTsKKworICAgICAgICBib29sIGlt
YWdlSW5zdGFuY2VSZXBsYWNlZCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgKG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCkgIT0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Omdl
dENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpKTsKKyAg
ICAgICAgaWYgKGltYWdlSW5zdGFuY2VSZXBsYWNlZCkKKyAgICAgICAgICAgIHJlbGVhc2VJbWFn
ZUJhY2tpbmdJZk5lZWRlZCgpOworCisgICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFj
a2luZykgeworICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRp
bmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgp
KTsKKyAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZEhvc3QodGhpcyk7
CisgICAgICAgICAgICBtX2xheWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFj
a2luZy0+aWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmctPm1hcmtEaXJ0eSgpOworICAgIH0gZWxzZQorICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5n
SWZOZWVkZWQoKTsKKworICAgIC8vIHN5bmNJbWFnZUJhY2tpbmcoKSBjaGFuZ2VkIG1fbGF5ZXJJ
bmZvLmltYWdlSUQuCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQoreworICAgIGlmICghbV9zaG91
bGRTeW5jTGF5ZXJTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0xheWVy
U3RhdGUgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRv
Vmlld3BvcnQoKTsKKworICAgIG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNl
VmlzaWJpbGl0eSgpOworICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRy
ZW5UcmFuc2Zvcm0oKTsKKyAgICBtX2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRz
T3BhcXVlKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7
CisgICAgbV9sYXllckluZm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7CisgICAgbV9s
YXllckluZm8uY29udGVudHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNpYmxlKCk7CisgICAgbV9s
YXllckluZm8ubWFzayA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKG1hc2tMYXllcigpKTsKKyAgICBt
X2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOworICAgIG1fbGF5ZXJJ
bmZvLm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBw
cmVzZXJ2ZXMzRCgpOworICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVkTGF5
ZXJJRChyZXBsaWNhTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNm
b3JtKCk7CisKKyAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IG1fYWRqdXN0ZWRBbmNob3JQ
b2ludDsKKyAgICBtX2xheWVySW5mby5wb3MgPSBtX2FkanVzdGVkUG9zaXRpb247CisgICAgbV9s
YXllckluZm8uc2l6ZSA9IG1fYWRqdXN0ZWRTaXplOworCisgICAgbV9sYXllckluZm8uc2hvd0Rl
YnVnQm9yZGVycyA9IGlzU2hvd2luZ0RlYnVnQm9yZGVyKCk7CisgICAgaWYgKG1fbGF5ZXJJbmZv
LnNob3dEZWJ1Z0JvcmRlcnMpCisgICAgICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOworICAg
IG1fbGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVy
KCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5m
byk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihj
b25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQoreworICAgIEFTU0VSVChtX2xheWVySW5m
by5zaG93RGVidWdCb3JkZXJzKTsKKyAgICBtX2xheWVySW5mby5kZWJ1Z0JvcmRlckNvbG9yID0g
Y29sb3I7CisgICAgbV9sYXllckluZm8uZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQoreworICAgIGlm
ICghbV9zaG91bGRTeW5jQW5pbWF0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91
bGRTeW5jQW5pbWF0aW9ucyA9IGZhbHNlOworCisgICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJB
bmltYXRpb25zKG1faWQsIG1fYW5pbWF0aW9ucyk7Cit9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKK3sKKyAg
ICBkZXN0cm95Q2FudmFzSWZOZWVkZWQoKTsKKyAgICBjcmVhdGVDYW52YXNJZk5lZWRlZCgpOwor
CisgICAgaWYgKCEobV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgU3luY0NhbnZhcykpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+U3luY0NhbnZh
czsKKworICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2Nvb3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQo
KQoreworICAgIGlmICghKG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIERlc3Ryb3lDYW52YXMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1ZhbGlkQ2FudmFzKSB7CisgICAgICAg
IG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9pZCk7CisgICAgICAgIG1faXNWYWxpZENh
bnZhcyA9IGZhbHNlOworICAgIH0KKworICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+
RGVzdHJveUNhbnZhczsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZUNhbnZhc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoIShtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24g
JiBDcmVhdGVDYW52YXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9jYW52YXNQ
bGF0Zm9ybUxheWVyKTsKKyAgICBpZiAoIW1faXNWYWxpZENhbnZhcykgeworICAgICAgICBtX2Nv
b3JkaW5hdG9yLT5jcmVhdGVDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAg
ICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3BlbmRpbmdDYW52
YXNPcGVyYXRpb24gJj0gfkNyZWF0ZUNhbnZhczsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
Cit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7
CisKKyAgICAvLyBTZXRzIHRoZSB2YWx1ZXMuCisgICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KG1f
YWRqdXN0ZWRQb3NpdGlvbiwgbV9hZGp1c3RlZFNpemUsIG1fYWRqdXN0ZWRBbmNob3JQb2ludCwg
bV9waXhlbEFsaWdubWVudE9mZnNldCk7CisKKyAgICBzeW5jSW1hZ2VCYWNraW5nKCk7CisgICAg
c3luY0xheWVyU3RhdGUoKTsKKyAgICBzeW5jQW5pbWF0aW9ucygpOworICAgIGNvbXB1dGVUcmFu
c2Zvcm1lZFZpc2libGVSZWN0KCk7CisgICAgc3luY0NoaWxkcmVuKCk7CisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorICAgIHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB1cGRhdGVDb250ZW50
QnVmZmVycygpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHN5bmNDYW52YXMoKTsK
KyNlbmRpZgorfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW1hZ2VCYWNraW5n
VmlzaWJsZSgpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOworICAg
IHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkuaW50ZXJzZWN0cyhjb250ZW50
c1JlY3QoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1h
Z2VCYWNraW5nSWZOZWVkZWQoKQoreworICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2lu
ZykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOworICAgIG1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPnJlbW92ZUhvc3QodGhpcyk7CisgICAgbV9jb29yZGlu
YXRlZEltYWdlQmFja2luZy5jbGVhcigpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBJbnZh
bGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCit7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCit7CisgICAg
bV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRl
bnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9y
KQoreworICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX21haW5CYWNraW5nU3RvcmUtPnNldFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rv
cik7CisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCit7
CisgICAgaWYgKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgbV9wZW5kaW5nQ29u
dGVudHNTY2FsZUFkanVzdG1lbnQgPSB0cnVlOworfQorCitmbG9hdCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQoreworICAgIHJldHVybiBzZWxmT3JB
bmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkgPyAxIDogZGV2aWNlU2NhbGVGYWN0b3Io
KSAqIHBhZ2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6YWRqdXN0Q29udGVudHNTY2FsZSgpCit7CisgICAgQVNTRVJUKHNob3VsZEhhdmVCYWNraW5n
U3RvcmUoKSk7CisgICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0
b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9y
ZSBhbmQgcGFpbnRpbmcgdGhlIGNvbnRlbnQsCisgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZHJv
cCB0aGUgcHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCisgICAgLy8gYnJpZWZs
eSBzZWVpbmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9y
ZQorICAgIC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgorICAgIG1fcHJldmlvdXNCYWNraW5n
U3RvcmUgPSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworCisgICAgLy8gTm8gcmVhc29u
IHRvIHNhdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFz
LgorICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0b3Jl
KCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5n
U3RvcmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAg
bV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsK
KyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVu
dHNTY2FsZSgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBh
aW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVj
dG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCit7CisgICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRD
b3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29vcmRpbmF0
b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgpKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFz
UGVuZGluZ1RpbGVDcmVhdGlvbigpCit7CisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1l
bnQoKTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJl
cXVpcmVkKHRoaXMpOworfQorCitJbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQoreworICAgIHJldHVybiBJbnRSZWN0KDAsIDAs
IHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworfQorCitzdGF0aWMgdm9pZCBjbGFt
cFRvQ29udGVudHNSZWN0SWZSZWN0SXNJbmZpbml0ZShGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRzUmVjdCkKK3sKKyAgICBpZiAocmVjdC53aWR0aCgpID49IExheW91dFVu
aXQ6Om5lYXJseU1heCgpIHx8IHJlY3Qud2lkdGgoKSA8PSBMYXlvdXRVbml0OjpuZWFybHlNaW4o
KSkgeworICAgICAgICByZWN0LnNldFgoY29udGVudHNSZWN0LngoKSk7CisgICAgICAgIHJlY3Qu
c2V0V2lkdGgoY29udGVudHNSZWN0LndpZHRoKCkpOworICAgIH0KKworICAgIGlmIChyZWN0Lmhl
aWdodCgpID49IExheW91dFVuaXQ6Om5lYXJseU1heCgpIHx8IHJlY3QuaGVpZ2h0KCkgPD0gTGF5
b3V0VW5pdDo6bmVhcmx5TWluKCkpIHsKKyAgICAgICAgcmVjdC5zZXRZKGNvbnRlbnRzUmVjdC55
KCkpOworICAgICAgICByZWN0LnNldEhlaWdodChjb250ZW50c1JlY3QuaGVpZ2h0KCkpOworICAg
IH0KK30KKworSW50UmVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0
b3JlVmlzaWJsZVJlY3QoKQoreworICAgIC8vIE5vbi1pbnZlcnRpYmxlIGxheWVycyBhcmUgbm90
IHZpc2libGUuCisgICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNJbnZlcnRp
YmxlKCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAvLyBSZXR1cm4gYSBwcm9q
ZWN0aW9uIG9mIHRoZSB2aXNpYmxlIHJlY3QgKHN1cmZhY2UgY29vcmRpbmF0ZXMpIG9udG8gdGhl
IGxheWVyJ3MgcGxhbmUgKGxheWVyIGNvb3JkaW5hdGVzKS4KKyAgICAvLyBUaGUgcmVzdWx0aW5n
IHF1YWQgbWlnaHQgYmUgc3F1ZXdlZCBhbmQgdGhlIHZpc2libGUgcmVjdCBpcyB0aGUgYm91bmRp
bmcgYm94IG9mIHRoaXMgcXVhZCwKKyAgICAvLyBzbyBpdCBtaWdodCBzcHJlYWQgZnVydGhlciB0
aGFuIHRoZSByZWFsIHZpc2libGUgYXJlYSAoYW5kIHRoZW4gZXZlbiBtb3JlIGFtcGxpZmllZCBi
eSB0aGUgY292ZXIgcmVjdCBtdWx0aXBsaWVyKS4KKyAgICBBU1NFUlQobV9jYWNoZWRJbnZlcnNl
VHJhbnNmb3JtID09IG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkpOworICAg
IEZsb2F0UmVjdCByZWN0ID0gbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtLmNsYW1wZWRCb3VuZHNP
ZlByb2plY3RlZFF1YWQoRmxvYXRRdWFkKG1fY29vcmRpbmF0b3ItPnZpc2libGVDb250ZW50c1Jl
Y3QoKSkpOworICAgIGNsYW1wVG9Db250ZW50c1JlY3RJZlJlY3RJc0luZmluaXRlKHJlY3QsIHRp
bGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KHJlY3QpOworfQorCitDb2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFj
a2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudHNP
cGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKK30KKworUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250
ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIHVpbnQzMl90JiBhdGxhcywgSW50UG9pbnQm
IG9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CisgICAgQVNTRVJUKG1fY29v
cmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7CisgICAgcmV0dXJuIG1fY29vcmRp
bmF0b3ItPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gQ29vcmRp
bmF0ZWRTdXJmYWNlOjpOb0ZsYWdzIDogQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhh
LCBhdGxhcywgb2Zmc2V0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNy
ZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3IpOworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkp
OworICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZv
LCB0aWxlUmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVU
aWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8s
IGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQoreworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsK
KyAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKKyAg
ICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGls
ZVJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlVGlsZSh1
aW50MzJfdCB0aWxlSUQpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOworICAgIEFTU0VS
VChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgfHwgbV9pc1B1cmdpbmcp
OworICAgIG1fY29vcmRpbmF0b3ItPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKK3sKKyAg
ICBpZiAoIXNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkgeworICAgICAgICBtX21haW5CYWNraW5n
U3RvcmUuY2xlYXIoKTsKKyAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVB
ZGp1c3RtZW50KSB7CisgICAgICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKKyAgICAgICAgbV9w
ZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBU
aGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGlsZWQgYmFja2lu
ZyBzdG9yZSwgb25jZSB3ZQorICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFuZCB3ZSBhcmUg
cmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KKyAgICBpZiAoIW1fbWFp
bkJhY2tpbmdTdG9yZSkKKyAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBpZiAo
bV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50KSB7CisgICAgICAgIG1fcGVuZGluZ1Zpc2li
bGVSZWN0QWRqdXN0bWVudCA9IGZhbHNlOworICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNv
dmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICBtX21haW5CYWNraW5nU3RvcmUt
PnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisKKyAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9y
ZSBpcyBrZXB0IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KKyAgICAvLyByZW1v
dmluZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZp
cnN0IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92
ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZS4KKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3Jl
LT52aXNpYmxlQXJlYUlzQ292ZXJlZCgpKQorICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3Jl
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tp
bmdTdG9yZXMoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4g
dXBkYXRlTW9kZVByb3RlY3RvcihtX2lzUHVyZ2luZywgdHJ1ZSk7CisjZW5kaWYKKyAgICBtX21h
aW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFy
KCk7CisKKyAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKworICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENv
b3JkaW5hdG9yKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogY29vcmRpbmF0b3IpCit7
CisgICAgbV9jb29yZGluYXRvciA9IGNvb3JkaW5hdG9yOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKQoreworICAgIGlm
IChzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpCisgICAgICAgIG1fcGVuZGluZ1Zpc2libGVSZWN0
QWRqdXN0bWVudCA9IHRydWU7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpo
YXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKQoreworICAgIGlmIChvcGFjaXR5KCkgPCAwLjAxICYm
ICFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5
T3BhY2l0eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAodG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPmhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygp
KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRTeW5j
Q2FudmFzID0gZmFsc2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgc2hvdWxkU3lu
Y0NhbnZhcyA9IG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIFN5bmNDYW52YXM7CisjZW5kaWYK
KworICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRy
ZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZyAm
JiAhbV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhc2hvdWxkU3luY0NhbnZhcykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3Qo
KS5pbnRlcnNlY3RzKHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNJbnRlZ3JhbChmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50Pih2YWx1ZSkgPT0gdmFsdWU7Cit9CisKK0Zsb2F0UG9pbnQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZSgpCit7CisgICAg
RmxvYXRQb2ludCBvZmZzZXQ7CisgICAgZm9yIChjb25zdCBHcmFwaGljc0xheWVyKiBjdXJyTGF5
ZXIgPSB0aGlzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+cGFyZW50KCkpCisg
ICAgICAgIG9mZnNldCArPSBjdXJyTGF5ZXItPnBvc2l0aW9uKCk7CisKKyAgICByZXR1cm4gb2Zm
c2V0OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVBpeGVsQWxp
Z25tZW50KEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBGbG9hdFNpemUmIHNpemUsIEZsb2F0UG9pbnQz
RCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KQoreworICAgIGlmIChp
c0ludGVncmFsKGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkpIHsKKyAgICAgICAgcG9zaXRpb24g
PSBtX3Bvc2l0aW9uOworICAgICAgICBzaXplID0gbV9zaXplOworICAgICAgICBhbmNob3JQb2lu
dCA9IG1fYW5jaG9yUG9pbnQ7CisgICAgICAgIGFsaWdubWVudE9mZnNldCA9IEZsb2F0U2l6ZSgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRmxvYXRQb2ludCBwb3NpdGlvblJlbGF0
aXZlVG9CYXNlID0gY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKTsKKworICAgIEZsb2F0
UmVjdCBiYXNlUmVsYXRpdmVCb3VuZHMocG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwgbV9zaXplKTsK
KyAgICBGbG9hdFJlY3Qgc2NhbGVkQm91bmRzID0gYmFzZVJlbGF0aXZlQm91bmRzOworCisgICAg
Ly8gU2NhbGUgYnkgdGhlIGVmZmVjdGl2ZSBzY2FsZSBmYWN0b3IgdG8gY29tcHV0ZSB0aGUgc2Ny
ZWVuLXJlbGF0aXZlIGJvdW5kcy4KKyAgICBzY2FsZWRCb3VuZHMuc2NhbGUoZWZmZWN0aXZlQ29u
dGVudHNTY2FsZSgpKTsKKworICAgIC8vIFJvdW5kIHRvIGludGVnZXIgYm91bmRhcmllcy4KKyAg
ICAvLyBOT1RFOiBXaGVuIHVzaW5nIGVuY2xvc2luZ0ludFJlY3QgKGFzIG1hYykgaXQgd2lsbCBo
YXZlIGRpZmZlcmVudCBzaXplcyBkZXBlbmRpbmcgb24gcG9zaXRpb24uCisgICAgRmxvYXRSZWN0
IGFsaWduZWRCb3VuZHMgPSByb3VuZGVkSW50UmVjdChzY2FsZWRCb3VuZHMpOworCisgICAgLy8g
Q29udmVydCBiYWNrIHRvIGxheWVyIGNvb3JkaW5hdGVzLgorICAgIGFsaWduZWRCb3VuZHMuc2Nh
bGUoMSAvIGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7CisKKyAgICAvLyBDb252ZXJ0IGJhY2sg
dG8gbGF5ZXIgY29vcmRpbmF0ZXMuCisgICAgYWxpZ25tZW50T2Zmc2V0ID0gYmFzZVJlbGF0aXZl
Qm91bmRzLmxvY2F0aW9uKCkgLSBhbGlnbmVkQm91bmRzLmxvY2F0aW9uKCk7CisKKyAgICBwb3Np
dGlvbiA9IG1fcG9zaXRpb24gLSBhbGlnbm1lbnRPZmZzZXQ7CisgICAgc2l6ZSA9IGFsaWduZWRC
b3VuZHMuc2l6ZSgpOworCisgICAgLy8gTm93IHdlIGhhdmUgdG8gY29tcHV0ZSBhIG5ldyBhbmNo
b3IgcG9pbnQgd2hpY2ggY29tcGVuc2F0ZXMgZm9yIHJvdW5kaW5nLgorICAgIGZsb2F0IGFuY2hv
clBvaW50WCA9IG1fYW5jaG9yUG9pbnQueCgpOworICAgIGZsb2F0IGFuY2hvclBvaW50WSA9IG1f
YW5jaG9yUG9pbnQueSgpOworCisgICAgaWYgKGFsaWduZWRCb3VuZHMud2lkdGgoKSkKKyAgICAg
ICAgYW5jaG9yUG9pbnRYID0gKGJhc2VSZWxhdGl2ZUJvdW5kcy53aWR0aCgpICogYW5jaG9yUG9p
bnRYICsgYWxpZ25tZW50T2Zmc2V0LndpZHRoKCkpIC8gYWxpZ25lZEJvdW5kcy53aWR0aCgpOwor
CisgICAgaWYgKGFsaWduZWRCb3VuZHMuaGVpZ2h0KCkpCisgICAgICAgIGFuY2hvclBvaW50WSA9
IChiYXNlUmVsYXRpdmVCb3VuZHMuaGVpZ2h0KCkgKiBhbmNob3JQb2ludFkgKyBhbGlnbm1lbnRP
ZmZzZXQuaGVpZ2h0KCkpIC8gYWxpZ25lZEJvdW5kcy5oZWlnaHQoKTsKKworICAgIGFuY2hvclBv
aW50ID0gRmxvYXRQb2ludDNEKGFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZLCBtX2FuY2hvclBv
aW50LnooKSAqIGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpCit7CisgICAg
Ly8gV2hlbiB3ZSBoYXZlIGEgdHJhbnNmb3JtIGFuaW1hdGlvbiwgd2UgbmVlZCB0byB1cGRhdGUg
dmlzaWJsZSByZWN0IGV2ZXJ5IGZyYW1lIHRvIGFkanVzdCB0aGUgdmlzaWJsZSByZWN0IG9mIGEg
YmFja2luZyBzdG9yZS4KKyAgICBib29sIGhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbiA9IHNl
bGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCk7CisgICAgaWYgKCFtX3No
b3VsZFVwZGF0ZVZpc2libGVSZWN0ICYmICFoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSBmYWxzZTsK
KyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyZW50VHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7
CisgICAgaWYgKGhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbikKKyAgICAgICAgY2xpZW50KCkt
PmdldEN1cnJlbnRUcmFuc2Zvcm0odGhpcywgY3VycmVudFRyYW5zZm9ybSk7CisgICAgbV9sYXll
clRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsKKworICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobV9hZGp1c3RlZEFuY2hvclBvaW50KTsKKyAg
ICBtX2xheWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fYWRqdXN0ZWRQb3NpdGlvbik7CisgICAg
bV9sYXllclRyYW5zZm9ybS5zZXRTaXplKG1fYWRqdXN0ZWRTaXplKTsKKworICAgIG1fbGF5ZXJU
cmFuc2Zvcm0uc2V0RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7CisgICAgbV9sYXllclRyYW5z
Zm9ybS5zZXRDaGlsZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5zZm9ybSgpKTsKKyAgICBtX2xh
eWVyVHJhbnNmb3JtLmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgpID8gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIocGFyZW50KCkpLT5tX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkRm9yQ2hpbGRy
ZW4oKSA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworCisgICAgbV9jYWNoZWRJbnZlcnNlVHJh
bnNmb3JtID0gbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKTsKKworICAgIC8v
IFRoZSBjb21iaW5lZCB0cmFuc2Zvcm0gd2lsbCBiZSB1c2VkIGluIHRpbGVkQmFja2luZ1N0b3Jl
VmlzaWJsZVJlY3QuCisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKK30KKwor
Ym9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSBj
b25zdAoreworICAgIHJldHVybiBkcmF3c0NvbnRlbnQoKSAmJiBjb250ZW50c0FyZVZpc2libGUo
KSAmJiAhbV9zaXplLmlzRW1wdHkoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3QKK3sK
KyAgICBpZiAobV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+c2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFu
c2Zvcm1BbmltYXRpb24oKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
bGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKQoreworICAgIGlmIChtX2FuaW1h
dGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5V2Via2l0VHJh
bnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zv
cm0uY29tYmluZWQoKS5pc0FmZmluZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
ICghcGFyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0b0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmlu
ZVRyYW5zZm9ybXMoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFu
aW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBJbnRTaXpl
JiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVz
TmFtZSwgZG91YmxlIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQpCit7CisgICAgQVNTRVJUKCFr
ZXlmcmFtZXNOYW1lLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIWFuaW0gfHwgYW5pbS0+aXNFbXB0
eU9yWmVyb0R1cmF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIgfHwgKHZhbHVlTGlzdC5w
cm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0gJiYgdmFsdWVMaXN0
LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKKyAgICBib29sIGlnbm9yZWRI
YXNCaWdSb3RhdGlvbjsKKworICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRl
ZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVU
cmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaWdub3JlZEhhc0JpZ1JvdGF0aW9uKSA+PSAw
OworCisgICAgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0g
ZGVsYXlBc05lZ2F0aXZlVGltZU9mZnNldDsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKEdyYXBoaWNz
TGF5ZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCBt
X2xhc3RBbmltYXRpb25TdGFydFRpbWUsIGxpc3RzTWF0Y2gpKTsKKyAgICBtX2FuaW1hdGlvblN0
YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSkKK3sK
KyAgICBtX2FuaW1hdGlvbnMucGF1c2UoYW5pbWF0aW9uTmFtZSwgdGltZSk7CisgICAgZGlkQ2hh
bmdlQW5pbWF0aW9ucygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVt
b3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBtX2FuaW1h
dGlvbnMucmVtb3ZlKGFuaW1hdGlvbk5hbWUpOworICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN1c3BlbmRBbmltYXRpb25zKGRv
dWJsZSB0aW1lKQoreworICAgIG1fYW5pbWF0aW9ucy5zdXNwZW5kKHRpbWUpOworICAgIGRpZENo
YW5nZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJl
c3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fYW5pbWF0aW9ucy5yZXN1bWUoKTsKKyAgICBkaWRD
aGFuZ2VBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjph
bmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+
KikKK3sKKyAgICBjbGllbnQoKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBtX2xhc3RB
bmltYXRpb25TdGFydFRpbWUpOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTUxZDM1MTFhZGE2NDRl
YmY3MzJiZWY2MmU4NmFkOWQ4N2YxYTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oCkBAIC0wLDAgKzEsMjY4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCisjZGVmaW5l
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdl
QmFja2luZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRUaWxlLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIlRpbGVk
QmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNF
KQorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZVRva2VuLmgiCisjZW5kaWYKKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjsKK2Ns
YXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzKCkgY29uc3QgPSAwOworCisgICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50CisgICAg
dmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
KSA9IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4g
Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXll
ckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKSA9IDA7CisjaWYg
RU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKKyNlbmRpZgor
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpID0gMDsKKyNl
bmRpZgorCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVk
TGF5ZXJJRCwgaW50KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9IDA7CisgICAgdmly
dHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0
IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwg
SW50UG9pbnQmKSA9IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBw
dWJsaWMgR3JhcGhpY3NMYXllcgorICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50
CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Okhvc3QKKyAgICAsIHB1Ymxp
YyBDb29yZGluYXRlZFRpbGVDbGllbnQgeworcHVibGljOgorICAgIGV4cGxpY2l0IENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKCk7CisKKyAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9t
IEdyYXBoaWNzTGF5ZXIuaC4KKyAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVj
dG9yPEdyYXBoaWNzTGF5ZXIqPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGls
ZChHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJ
bmRleChHcmFwaGljc0xheWVyKiwgaW50KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
Q2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVy
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVy
KiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9t
UGFyZW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29u
c3QgRmxvYXRQb2ludDNEJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29u
c3QgRmxvYXRTaXplJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDb250ZW50c1Zpc2libGUoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENv
bnRlbnRzT3BhcXVlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFj
ZVZpc2liaWxpdHkoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHko
ZmxvYXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3Qg
SW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2Uo
SW1hZ2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29s
b3IoY29uc3QgQ29sb3ImKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd0RlYnVn
Qm9yZGVyKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93UmVwYWludENv
dW50ZXIoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNob3VsZERpcmVjdGx5Q29t
cG9zaXRlSW1hZ2UoSW1hZ2UqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpIE9WRVJSSURFOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIGJv
b2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgT1ZFUlJJREU7CisjZW5kaWYK
KyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYs
IGRvdWJsZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25z
dCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMo
ZG91YmxlIHRpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25z
KCkgT1ZFUlJJREU7CisKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9C
YXNlKCk7CisgICAgdm9pZCBjb21wdXRlUGl4ZWxBbGlnbm1lbnQoRmxvYXRQb2ludCYgcG9zaXRp
b24sIEZsb2F0U2l6ZSYsIEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxp
Z25tZW50T2Zmc2V0KTsKKworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9y
eVZlY3Rvcihjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICB2b2lkIHNldFJvb3RMYXllcihib29s
KTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBpZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRG
aXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhl
ZDsgfQorCisgICAgSW50UmVjdCBjb3ZlclJlY3QoKSBjb25zdCB7IHJldHVybiBtX21haW5CYWNr
aW5nU3RvcmUgPyBtX21haW5CYWNraW5nU3RvcmUtPm1hcFRvQ29udGVudHMobV9tYWluQmFja2lu
Z1N0b3JlLT5jb3ZlclJlY3QoKSkgOiBJbnRSZWN0KCk7IH0KKworICAgIC8vIFRpbGVkQmFja2lu
Z1N0b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdp
bigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50
ZWRBcmVhKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVIYXNQ
ZW5kaW5nVGlsZUNyZWF0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVk
QmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0
IHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENv
bG9yIHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisK
KyAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGls
ZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVj
dCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgSW50U2l6ZSYsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURFOwor
CisgICAgdm9pZCBzZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQq
KTsKKworICAgIHZvaWQgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKKyAgICB2b2lk
IHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIGJvb2wgaGFzUGVuZGluZ1Zpc2libGVDaGFuZ2Vz
KCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgZW51bSBQZW5k
aW5nQ2FudmFzT3BlcmF0aW9uIHsKKyAgICAgICAgTm9uZSA9IDB4MDAsCisgICAgICAgIENyZWF0
ZUNhbnZhcyA9IDB4MDEsCisgICAgICAgIERlc3Ryb3lDYW52YXMgPSAweDAyLAorICAgICAgICBT
eW5jQ2FudmFzID0gMHgwNCwKKyAgICAgICAgQ3JlYXRlQW5kU3luY0NhbnZhcyA9IENyZWF0ZUNh
bnZhcyB8IFN5bmNDYW52YXMsCisgICAgICAgIFJlY3JlYXRlQ2FudmFzID0gQ3JlYXRlQW5kU3lu
Y0NhbnZhcyB8IERlc3Ryb3lDYW52YXMKKyAgICB9OworCisgICAgdm9pZCBzeW5jQ2FudmFzKCk7
CisgICAgdm9pZCBkZXN0cm95Q2FudmFzSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNyZWF0ZUNhbnZh
c0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JvcmRlcihj
b25zdCBDb2xvciYsIGZsb2F0IHdpZHRoKSBPVkVSUklERTsKKworICAgIGJvb2wgZml4ZWRUb1Zp
ZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvVmlld3BvcnQ7IH0KKworICAgIHZvaWQg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwor
ICAgIHZvaWQgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKKyAgICB2b2lkIGRpZENoYW5nZUNoaWxkcmVu
KCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgZGlkQ2hhbmdlRmlsdGVycygp
OworI2VuZGlmCisgICAgdm9pZCBkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKTsKKworICAgIHZvaWQg
c3luY0xheWVyU3RhdGUoKTsKKyAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CisgICAgdm9pZCBz
eW5jQ2hpbGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzeW5jRmls
dGVycygpOworI2VuZGlmCisgICAgdm9pZCBzeW5jSW1hZ2VCYWNraW5nKCk7CisgICAgdm9pZCBj
b21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOworICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1
ZmZlcnMoKTsKKworICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisgICAgdm9pZCByZWxl
YXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKworICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpIb3N0CisgICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSBPVkVSUklE
RTsKKyAgICBib29sIHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSBjb25zdDsKKyAgICBib29sIHNl
bGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3Q7CisgICAgYm9v
bCBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7CisgICAgdm9pZCBhZGp1
c3RDb250ZW50c1NjYWxlKCk7CisKKyAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0
KCk7CisgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOworCisgICAgdm9pZCBhbmlt
YXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+Kik7
CisKKyAgICBDb29yZGluYXRlZExheWVySUQgbV9pZDsKKyAgICBDb29yZGluYXRlZExheWVySW5m
byBtX2xheWVySW5mbzsKKyAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zv
cm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtOwor
ICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0OworICAgIEZsb2F0U2l6ZSBtX2Fk
anVzdGVkU2l6ZTsKKyAgICBGbG9hdFBvaW50IG1fYWRqdXN0ZWRQb3NpdGlvbjsKKyAgICBGbG9h
dFBvaW50M0QgbV9hZGp1c3RlZEFuY2hvclBvaW50OworCisjaWZuZGVmIE5ERUJVRworICAgIGJv
b2wgbV9pc1B1cmdpbmc7CisjZW5kaWYKKyAgICBib29sIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJl
Y3Q6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRlOiAxOworICAgIGJvb2wgbV9z
aG91bGRTeW5jQ2hpbGRyZW46IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNGaWx0ZXJzOiAxOwor
ICAgIGJvb2wgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nOiAxOworICAgIGJvb2wgbV9zaG91bGRT
eW5jQW5pbWF0aW9uczogMTsKKyAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKKyAgICBi
b29sIG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50IDogMTsKKyAgICBib29sIG1fcGVu
ZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCA6IDE7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisgICAgYm9vbCBtX2lzVmFsaWRDYW52YXMgOiAxOworICAgIHVuc2lnbmVkIG1fcGVuZGluZ0Nh
bnZhc09wZXJhdGlvbiA6IDM7CisjZW5kaWYKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCogbV9jb29yZGluYXRvcjsKKyAgICBPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1f
bWFpbkJhY2tpbmdTdG9yZTsKKyAgICBPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlv
dXNCYWNraW5nU3RvcmU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdlOwor
ICAgIE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOworICAgIFJlZlB0
cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gbV9jb29yZGluYXRlZEltYWdlQmFja2luZzsKKwor
ICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKKyNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKKyAgICBJbnRTaXplIG1fY2FudmFzU2l6ZTsKKyAgICBHcmFwaGljc1N1cmZh
Y2VUb2tlbiBtX2NhbnZhc1Rva2VuOworI2VuZGlmCisgICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKKyAgICBHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyBtX2FuaW1hdGlvbnM7CisgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGlt
ZTsKK307CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIoR3JhcGhpY3NMYXllciopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2OTI0ODI4NzVkNWNmYzIxZGI2YmIwZDZmMjAw
ZTFkOTljNWIyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCkBA
IC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZElt
YWdlQmFja2luZy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSogaW1hZ2UpCit7Cisg
ICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcga2VlcHMgYSBSZWZQdHI8SW1hZ2U+IG1lbWJl
ciwgc28gdGhlIHNhbWUgSW1hZ2UgcG9pbnRlciBjYW4gbm90IHJlZmVyIHR3byBkaWZmZXJlbnQg
aW5zdGFuY2VzIHVudGlsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHJlbGVhc2VzIHRoZSBtZW1i
ZXIuCisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RD4oaW1hZ2UpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29y
ZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQ
dHI8SW1hZ2U+IGltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcoY2xpZW50LCBpbWFnZSkpOworfQorCitDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0
cjxJbWFnZT4gaW1hZ2UpCisgICAgOiBtX2Nvb3JkaW5hdG9yKGNsaWVudCkKKyAgICAsIG1faW1h
Z2UoaW1hZ2UpCisgICAgLCBtX2lkKGdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQobV9pbWFn
ZS5nZXQoKSkpCisgICAgLCBtX2NsZWFyQ29udGVudHNUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKQorICAgICwgbV9pc0RpcnR5KGZh
bHNlKQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCit7CisgICAgLy8gRklYTUU6IFdlIHdvdWxk
IG5lZWQgdG8gZGVjb2RlIGEgc21hbGwgaW1hZ2UgZGlyZWN0bHkgaW50byBhIEdyYXBoaWNzU3Vy
ZmFjZS4KKyAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMTQyNgorCisgICAgbV9jb29yZGlu
YXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOworfQorCitDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkKK3sKK30KKwordm9pZCBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6YWRkSG9zdChIb3N0KiBob3N0KQoreworICAgIEFTU0VSVCghbV9ob3N0
cy5jb250YWlucyhob3N0KSk7CisgICAgbV9ob3N0cy5hcHBlbmQoaG9zdCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhvc3QoSG9zdCogaG9zdCkKK3sKKyAgICBz
aXplX3QgcG9zaXRpb24gPSBtX2hvc3RzLmZpbmQoaG9zdCk7CisgICAgQVNTRVJUKHBvc2l0aW9u
ICE9IG5vdEZvdW5kKTsKKyAgICBtX2hvc3RzLnJlbW92ZShwb3NpdGlvbik7CisKKyAgICBpZiAo
bV9ob3N0cy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29vcmRpbmF0b3ItPnJlbW92ZUltYWdlQmFj
a2luZyhpZCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0RpcnR5
KCkKK3sKKyAgICBtX2lzRGlydHkgPSB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjp1cGRhdGUoKQoreworICAgIHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKKworICAg
IGJvb2wgY2hhbmdlZFRvVmlzaWJsZTsKKyAgICB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoY2hh
bmdlZFRvVmlzaWJsZSk7CisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFjaGFuZ2VkVG9WaXNpYmxlKSB7CisgICAgICAgIGlmICghbV9pc0RpcnR5KQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX25hdGl2ZUltYWdlUHRyID09IG1f
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpIHsKKyAgICAgICAgICAgIG1faXNE
aXJ0eSA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9zdXJmYWNlID0gQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUobV9pbWFnZS0+c2l6ZSgp
LCBtX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gQ29vcmRpbmF0ZWRTdXJmYWNlOjpT
dXBwb3J0c0FscGhhIDogQ29vcmRpbmF0ZWRTdXJmYWNlOjpOb0ZsYWdzKTsKKyAgICBpZiAoIW1f
c3VyZmFjZSkgeworICAgICAgICBtX2lzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBtX2ltYWdlLT5zaXpl
KCkpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBtX3N1cmZhY2UtPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFn
ZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVjdCwgcmVjdCk7CisKKyAgICBtX25hdGl2
ZUltYWdlUHRyID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAg
IC8vIElmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIHRyeSBhZ2FpbiBpbiB0aGUgbmV4dCB1
cGRhdGUuCisgICAgYm9vbCBzdWNjZXNzID0gbV9jb29yZGluYXRvci0+dXBkYXRlSW1hZ2VCYWNr
aW5nKGlkKCksIG1fc3VyZmFjZSk7CisgICAgbV9pc0RpcnR5ID0gIXN1Y2Nlc3M7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKQorewor
ICAgIC8vIFdlIG11c3Qga2VlcCBtX3N1cmZhY2UgdW50aWwgVUkgUHJvY2VzcyByZWFkcyBtX3N1
cmZhY2UuCisgICAgLy8gSWYgbV9zdXJmYWNlIGV4aXN0cywgaXQgd2FzIGNyZWF0ZWQgaW4gdGhl
IHByZXZpb3VzIHVwZGF0ZS4KKyAgICBtX3N1cmZhY2UuY2xlYXIoKTsKK30KKworc3RhdGljIGNv
bnN0IGRvdWJsZSBjbGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCA9IDM7CisKK3ZvaWQgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29sJiBjaGFuZ2Vk
VG9WaXNpYmxlKQoreworICAgIGJvb2wgcHJldmlvdXNJc1Zpc2libGUgPSBtX2lzVmlzaWJsZTsK
KworICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2hvc3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2hvc3RzW2ldLT5pbWFnZUJhY2tp
bmdWaXNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkVG9JbnZpc2li
bGUgPSBwcmV2aW91c0lzVmlzaWJsZSAmJiAhbV9pc1Zpc2libGU7CisgICAgaWYgKGNoYW5nZWRU
b0ludmlzaWJsZSkgeworICAgICAgICBBU1NFUlQoIW1fY2xlYXJDb250ZW50c1RpbWVyLmlzQWN0
aXZlKCkpOworICAgICAgICBtX2NsZWFyQ29udGVudHNUaW1lci5zdGFydE9uZVNob3QoY2xlYXJD
b250ZW50c1RpbWVySW50ZXJ2YWwpOworICAgIH0KKworICAgIGNoYW5nZWRUb1Zpc2libGUgPSAh
cHJldmlvdXNJc1Zpc2libGUgJiYgbV9pc1Zpc2libGU7CisKKyAgICBpZiAobV9pc1Zpc2libGUg
JiYgbV9jbGVhckNvbnRlbnRzVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX2NsZWFyQ29u
dGVudHNUaW1lci5zdG9wKCk7CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRo
ZSB0ZXh0dXJlIGlmIHdlIGRpZG4ndCByZW1vdmUgdGhlIHRleHR1cmUuCisgICAgICAgIGNoYW5n
ZWRUb1Zpc2libGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiopCit7CisgICAgbV9jb29yZGluYXRvci0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhp
ZCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVi
NWI1N2E2ZWNiMTAxZWY3NWIyOTE5MWI1NzUwN2JlZGRhMmY3NjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmcuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworI2lmbmRlZiBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCisjZGVmaW5lIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNs
dWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFj
ZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEltYWdlQmFja2luZyA6IHB1YmxpYyBSZWZDb3Vu
dGVkPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiB7CitwdWJsaWM6CisgICAgY2xhc3MgQ29vcmRp
bmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9v
bCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0
cjxDb29yZGluYXRlZFN1cmZhY2U+KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKSA9IDA7CisgICAgfTsKKworICAgIGNsYXNzIEhvc3QgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSA9IDA7CisgICAgfTsKKworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRp
bmF0b3IqLCBQYXNzUmVmUHRyPEltYWdlPik7CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcoKTsKKworICAgIHN0YXRpYyBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGdldENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoSW1hZ2UqKTsKKyAgICBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgdm9pZCBhZGRIb3N0KEhv
c3QqKTsKKyAgICB2b2lkIHJlbW92ZUhvc3QoSG9zdCopOworCisgICAgLy8gV2hlbiBhIG5ldyBp
bWFnZSBpcyB1cGRhdGVkIG9yIGFuIGFuaW1hdGVkIGdpZiBpcyBwcm9ncmVzc2VkLCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIgY2FsbHMgbWFya0RpcnR5KCkuCisgICAgdm9pZCBtYXJrRGlydHko
KTsKKworICAgIC8vIENyZWF0ZSwgcmVtb3ZlIG9yIHVwZGF0ZSBpdHMgYmFja2luZy4KKyAgICB2
b2lkIHVwZGF0ZSgpOworCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENv
b3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxJbWFnZT4pOworCisgICAgdm9pZCByZWxlYXNlU3VyZmFj
ZUlmTmVlZGVkKCk7CisgICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hh
bmdlZFRvVmlzaWJsZSk7CisgICAgdm9pZCBjbGVhckNvbnRlbnRzVGltZXJGaXJlZChUaW1lcjxD
b29yZGluYXRlZEltYWdlQmFja2luZz4qKTsKKworICAgIENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5h
dG9yOworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX25h
dGl2ZUltYWdlUHRyOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKKyAgICBW
ZWN0b3I8SG9zdCo+IG1faG9zdHM7CisKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBt
X3N1cmZhY2U7CisKKyAgICBUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gbV9jbGVhckNv
bnRlbnRzVGltZXI7CisKKyAgICBib29sIG1faXNEaXJ0eTsKKyAgICBib29sIG1faXNWaXNpYmxl
OworCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wZmEyYTEyZWQzZjQ2YzA4NDIzYjRiOWM0ZGM5MTY1NjlmMDM4Yjc2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllckluZm9faAor
I2RlZmluZSBDb29yZGluYXRlZExheWVySW5mb19oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2lu
Y2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgdWlu
dDMyX3QgQ29vcmRpbmF0ZWRMYXllcklEOworZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVy
SUQgPSAwIH07CisKK3R5cGVkZWYgdWludDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsK
K2VudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKKworLy8gTk9U
RTogQ29vcmRpbmF0ZWRMYXllckluZm8gc2hvdWxkIG9ubHkgdXNlIFBPRCB0eXBlcywgYXMgdG8g
bWFrZSBzZXJpYWxpemF0aW9uIGZhc3Rlci4KK3N0cnVjdCBDb29yZGluYXRlZExheWVySW5mbyB7
CisgICAgQ29vcmRpbmF0ZWRMYXllckluZm8oKQorICAgICAgICA6IHJlcGxpY2EoSW52YWxpZENv
b3JkaW5hdGVkTGF5ZXJJRCkKKyAgICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExheWVy
SUQpCisgICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkK
KyAgICAgICAgLCBvcGFjaXR5KDApCisgICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQorICAg
ICAgICAsIGZsYWdzKDApIHsgfQorCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGxpY2E7Cisg
ICAgQ29vcmRpbmF0ZWRMYXllcklEIG1hc2s7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpbWFnZUlEOworCisgICAgRmxvYXRQb2ludCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hv
clBvaW50OworICAgIEZsb2F0U2l6ZSBzaXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAg
ICBJbnRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIENvbG9yIHNv
bGlkQ29sb3I7CisgICAgQ29sb3IgZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBkZWJ1Z0Jv
cmRlcldpZHRoOworCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg
Ym9vbCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6
IDE7CisgICAgICAgICAgICBib29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBi
b29sIGJhY2tmYWNlVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMg
OiAxOworICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7CisgICAgICAgICAgICBib29s
IGlzUm9vdExheWVyOiAxOworICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwor
ICAgICAgICAgICAgYm9vbCBzaG93RGVidWdCb3JkZXJzIDogMTsKKyAgICAgICAgICAgIGJvb2wg
c2hvd1JlcGFpbnRDb3VudGVyIDogMTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5zaWduZWQgZmxh
Z3M7CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJJbmZv
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjlhOTQyMzcyNzQzNWE0NTg0ZDc1YmQwMDM4YWIzNmQ3MWYwYTM2ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0Nvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSogQ29vcmRpbmF0ZWRTdXJmYWNl
OjpzX2ZhY3RvcnkgPSAwOworCit2b2lkIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeShD
b29yZGluYXRlZFN1cmZhY2U6OkZhY3RvcnkgZmFjdG9yeSkKK3sKKyAgICBzX2ZhY3RvcnkgPSBm
YWN0b3J5OworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRT
dXJmYWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCit7CisgICAg
QVNTRVJUKHNfZmFjdG9yeSk7CisgICAgcmV0dXJuIHNfZmFjdG9yeShzaXplLCBmbGFncyk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMDc3YzNjMDljNGFiMDY3ZmZiOTg2NjZiNDBmNjA3NTk3ODVlNWQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgQ29w
eXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQorIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkU3VyZmFjZV9oCisjZGVmaW5lIENvb3Jk
aW5hdGVkU3VyZmFjZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQml0bWFwVGV4dHVyZTsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKKworY2xhc3MgQ29vcmRpbmF0ZWRTdXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPENvb3JkaW5hdGVkU3VyZmFjZT4geworcHVibGljOgorICAgIGVudW0gRmxhZyB7
CisgICAgICAgIE5vRmxhZ3MgPSAwLAorICAgICAgICBTdXBwb3J0c0FscGhhID0gMSA8PCAwLAor
ICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBGbGFnczsKKworICAgIHR5cGVkZWYgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IEZhY3RvcnkoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRGYWN0b3J5KEZhY3RvcnkpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7CisK
KyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZFN1cmZhY2UoKSB7IH0KKworICAgIGJvb2wgc3VwcG9y
dHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBTdXBwb3J0c0FscGhhOyB9CisgICAg
dmlydHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7CisKKyAgICAvLyBDcmVhdGUgYSBncmFw
aGljcyBjb250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFpbnQgaW50byB0aGUgYmFja2luZyBz
dG9yZS4KKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVHcmFw
aGljc0NvbnRleHQoY29uc3QgSW50UmVjdCYpID0gMDsKKworI2lmIFVTRShURVhUVVJFX01BUFBF
UikKKyAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4dHVyZShQYXNzUmVmUHRyPEJpdG1hcFRleHR1
cmU+LCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQp
ID0gMDsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBGbGFncyBmbGFncygpIGNv
bnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGYWN0
b3J5KiBzX2ZhY3Rvcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRTdXJmYWNl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWY5ZDM0ZTYwNWIwZTJiMjUyNjhiYWE2NmM0ODA1ZGJlZmEyMDkzMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZFRpbGUuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxl
LmgiCisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVw
ZGF0ZUluZm8uaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBJbnZhbGlkQ29vcmRpbmF0
ZWRUaWxlSUQgPSAwOworCitDb29yZGluYXRlZFRpbGU6OkNvb3JkaW5hdGVkVGlsZShDb29yZGlu
YXRlZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0
b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKKyAgICA6IG1fY2xpZW50KGNs
aWVudCkKKyAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCisgICAg
LCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCisgICAgLCBtX3JlY3QodGlsZWRCYWNraW5n
U3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCisgICAgLCBtX0lE
KEludmFsaWRDb29yZGluYXRlZFRpbGVJRCkKKyAgICAsIG1fZGlydHlSZWN0KG1fcmVjdCkKK3sK
K30KKworQ29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRUaWxlKCkKK3sKKyAgICBpZiAobV9J
RCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVU
aWxlKG1fSUQpOworfQorCitib29sIENvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBJbnRS
ZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOworICAg
IGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9k
aXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Cit9CisKK1ZlY3RvcjxJbnRSZWN0PiBDb29y
ZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQoreworICAgIGlmICghaXNEaXJ0eSgpKQor
ICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CisKKyAgICBTdXJmYWNlVXBkYXRlSW5m
byB1cGRhdGVJbmZvOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4
dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRh
dGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7CisgICAgaWYgKCFncmFw
aGljc0NvbnRleHQpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKKyAgICBncmFw
aGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgp
KTsKKyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0
b3JlLT5jb250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUo
KSkpOworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9y
ZVBhaW50KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9D
b250ZW50cyhtX2RpcnR5UmVjdCkpOworCisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9k
aXJ0eVJlY3Q7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1t
X3JlY3QueSgpKTsKKyAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdT
dG9yZS0+Y29udGVudHNTY2FsZSgpOworICAgIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CisK
KyAgICBzdGF0aWMgdWludDMyX3QgaWQgPSAxOworICAgIGlmIChtX0lEID09IEludmFsaWRDb29y
ZGluYXRlZFRpbGVJRCkgeworICAgICAgICBtX0lEID0gaWQrKzsKKyAgICAgICAgLy8gV2UgbWF5
IGdldCBhbiBpbnZhbGlkIElEIGR1ZSB0byB3cmFwLWFyb3VuZCBvbiBvdmVyZmxvdy4KKyAgICAg
ICAgaWYgKG1fSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEKQorICAgICAgICAgICAgbV9J
RCA9IGlkKys7CisgICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8s
IG1fcmVjdCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT51cGRhdGVUaWxlKG1fSUQs
IHVwZGF0ZUluZm8sIG1fcmVjdCk7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gdXBkYXRlZFJlY3Rz
OworICAgIHVwZGF0ZWRSZWN0cy5hcHBlbmQobV9kaXJ0eVJlY3QpOworICAgIG1fZGlydHlSZWN0
ID0gSW50UmVjdCgpOworICAgIHJldHVybiB1cGRhdGVkUmVjdHM7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQoreworICAgIC8vIEhhbmRsZWQgYnkg
dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4KK30KKworYm9vbCBDb29yZGluYXRlZFRpbGU6Omlz
UmVhZHlUb1BhaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9JRCAhPSBJbnZhbGlkQ29vcmRp
bmF0ZWRUaWxlSUQ7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZFRpbGU6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQor
eworICAgIG1fcmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOworICAg
IG1fZGlydHlSZWN0ID0gbV9yZWN0OworfQorCitDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29y
ZGluYXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KQorICAgIDog
bV9jbGllbnQoY2xpZW50KQoreworfQorCitQYXNzUmVmUHRyPFRpbGU+IENvb3JkaW5hdGVkVGls
ZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3Jl
LCBjb25zdCBUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK3sKKyAgICByZXR1cm4g
Q29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxl
Q29vcmRpbmF0ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6cGFpbnRDaGVj
a2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQoreworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
ZTk5YmZkYWZlZjQ5MWRhZDNhMzZmZmM1YjIzZjQ0NDdkYmVlNDVmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkVGlsZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRUaWxlX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRUaWxlX2gK
KworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIlRpbGUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkVGlsZUNsaWVudDsKK2NsYXNzIElt
YWdlQnVmZmVyOworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CitjbGFzcyBUaWxlZEJhY2tpbmdT
dG9yZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRUaWxlIDogcHVibGljIFRpbGUgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0ZShDb29yZGluYXRlZFRpbGVDbGllbnQq
IGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29y
ZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVk
VGlsZShjbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSkpOyB9CisgICAg
fkNvb3JkaW5hdGVkVGlsZSgpOworCisgICAgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CisgICAgdm9p
ZCBpbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gdXBkYXRl
QmFja0J1ZmZlcigpOworICAgIHZvaWQgc3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7CisgICAgYm9v
bCBpc1JlYWR5VG9QYWludCgpIGNvbnN0OworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOworCisgICAgY29uc3QgQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQorICAgIGNvbnN0IEludFJlY3QmIHJlY3Qo
KSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXpl
Jik7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRUaWxlKENvb3JkaW5hdGVkVGlsZUNsaWVu
dCosIFRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgQ29vcmRpbmF0ZSYpOworCisgICAgQ29vcmRp
bmF0ZWRUaWxlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBUaWxlZEJhY2tpbmdTdG9yZSogbV90aWxl
ZEJhY2tpbmdTdG9yZTsKKyAgICBDb29yZGluYXRlIG1fY29vcmRpbmF0ZTsKKyAgICBJbnRSZWN0
IG1fcmVjdDsKKworICAgIHVpbnQzMl90IG1fSUQ7CisgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsK
KworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9sb2NhbEJ1ZmZlcjsKK307CisKK2NsYXNzIENv
b3JkaW5hdGVkVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRU
aWxlQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGls
ZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRp
bGUodWludDMyX3QgdGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCB1aW50MzJfdCYgYXRs
YXNJRCwgSW50UG9pbnQmKSA9IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFRpbGVCYWNrZW5k
IDogcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kPiBjcmVhdGUoQ29vcmRpbmF0ZWRU
aWxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZFRpbGVC
YWNrZW5kKGNsaWVudCkpOyB9CisgICAgUGFzc1JlZlB0cjxUaWxlPiBjcmVhdGVUaWxlKFRpbGVk
QmFja2luZ1N0b3JlKiwgY29uc3QgVGlsZTo6Q29vcmRpbmF0ZSYpOworICAgIHZvaWQgcGFpbnRD
aGVja2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKworcHJp
dmF0ZToKKyAgICBleHBsaWNpdCBDb29yZGluYXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGls
ZUNsaWVudCopOworICAgIENvb3JkaW5hdGVkVGlsZUNsaWVudCogbV9jbGllbnQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkVGlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUlu
Zm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9TdXJmYWNlVXBkYXRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhYjM4NGExMWVhYTVlYTI1NDA4MTNj
NzAyNWU1ZmM4YzE3ZDM5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaApAQCAt
MCwwICsxLDUzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
bmRlZiBTdXJmYWNlVXBkYXRlSW5mb19oCisjZGVmaW5lIFN1cmZhY2VVcGRhdGVJbmZvX2gKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBTdXJmYWNlVXBkYXRlSW5mbyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3VyZmFjZVVw
ZGF0ZUluZm8pOworCitwdWJsaWM6CisgICAgU3VyZmFjZVVwZGF0ZUluZm8oKSB7IH0KKworICAg
IC8vIFRoZSByZWN0IHRvIGJlIHVwZGF0ZWQuCisgICAgSW50UmVjdCB1cGRhdGVSZWN0OworCisg
ICAgLy8gVGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIHVzZWQgdG8gcmVuZGVyIHRoaXMgdXBkYXRlLgor
ICAgIGZsb2F0IHNjYWxlRmFjdG9yOworCisgICAgLy8gVGhlIGlkIG9mIHRoZSB1cGRhdGUgYXRs
YXMgaW5jbHVkaW5nIHRoZSBzaGFyZWFibGUgYml0bWFwIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZXMu
CisgICAgdWludDMyX3QgYXRsYXNJRDsKKworICAgIC8vIFRoZSBvZmZzZXQgaW4gdGhlIGJpdG1h
cCB3aGVyZSB0aGUgcmVuZGVyZWQgY29udGVudHMgYXJlLgorICAgIEludFBvaW50IHN1cmZhY2VP
ZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBTdXJmYWNlVXBkYXRlSW5mb19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVGV4dHVyZU1hcHBlclNjZW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9UZXh0dXJlTWFwcGVyU2NlbmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJjN2Q4YWJkYzFjYmUwNGYwNDgzMDAxYmYxODJmYTUzY2Y5MzM4MzUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VGV4dHVyZU1hcHBlclNjZW5lLmNwcApAQCAtMCwwICsxLDY5OCBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
CisgICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAg
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclNjZW5lLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIK
KyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5
ZXIuaCIKKyNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyNpbmNsdWRlICJDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
IkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRl
clByb2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgorI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmRpc3Bh
dGNoT25NYWluVGhyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAg
IGlmIChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICBlbHNlCisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoZnVuY3Rpb24pOworfQorCitzdGF0aWMgRmxvYXRQb2ludCBi
b3VuZGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNv
bnN0IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRl
bnRTaXplKQoreworICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9sbFBv
c2l0aW9uLngoKSwgMC4wZik7CisgICAgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Nyb2xs
UG9zaXRpb25YLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRo
KCkpOworCisgICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRp
b24ueSgpLCAwLjBmKTsKKyAgICBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1pbihzY3JvbGxQb3Np
dGlvblksIGNvbnRlbnRTaXplLmhlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgp
KTsKKyAgICByZXR1cm4gRmxvYXRQb2ludChzY3JvbGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9u
WSk7Cit9CisKK3N0YXRpYyBib29sIGxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShHcmFwaGlj
c0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXItPmRyYXdzQ29udGVudCgpICYmIGxh
eWVyLT5jb250ZW50c0FyZVZpc2libGUoKSAmJiAhbGF5ZXItPnNpemUoKS5pc0VtcHR5KCk7Cit9
CisKK1RleHR1cmVNYXBwZXJTY2VuZTo6VGV4dHVyZU1hcHBlclNjZW5lKFRleHR1cmVNYXBwZXJT
Y2VuZUNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pc0Fj
dGl2ZShmYWxzZSkKKyAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJ
RCkKKyAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKKyNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCisgICAgLCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKGZhbHNlKQor
I2VuZGlmCisgICAgLCBtX2JhY2tncm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX3Nl
dERyYXdzQmFja2dyb3VuZChmYWxzZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
fQorCitUZXh0dXJlTWFwcGVyU2NlbmU6On5UZXh0dXJlTWFwcGVyU2NlbmUoKQoreworfQorCit2
b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0
JiBjbGlwUmVjdCwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQoreworICAg
IGlmICghbV90ZXh0dXJlTWFwcGVyKSB7CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1
cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5h
YmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKHRydWUpOworICAgIH0KKworICAgIEFTU0VSVCht
X3RleHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVu
R0xNb2RlKTsKKyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworCisgICAgYWRqdXN0UG9zaXRpb25G
b3JGaXhlZExheWVycygpOworICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSBy
b290TGF5ZXIoKTsKKyAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihj
dXJyZW50Um9vdExheWVyKTsKKworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGxheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAg
aWYgKCFtX2FuaW1hdGlvbnNMb2NrZWQpCisgICAgICAgIGxheWVyLT5hcHBseUFuaW1hdGlvbnNS
ZWN1cnNpdmVseSgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZs
YWdzKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBjbGlwUmVjdCk7CisKKyAgICBpZiAobV9zZXREcmF3c0JhY2tncm91bmQpIHsKKyAgICAg
ICAgUkdCQTMyIHJnYmEgPSBtYWtlUkdCQTMyRnJvbUZsb2F0cyhtX2JhY2tncm91bmRDb2xvci5y
ZWQoKSwKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIG1fYmFja2dyb3Vu
ZENvbG9yLmJsdWUoKSwKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yLmFscGhhKCkgKiBv
cGFjaXR5KTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVj
dCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgQ29sb3IocmdiYSkpOworICAgIH0KKworICAgIGlm
IChjdXJyZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExh
eWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+
c2V0T3BhY2l0eShvcGFjaXR5KTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNm
b3JtKG1hdHJpeCk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdT
dGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBsYXllci0+cGFpbnQoKTsKKyAg
ICBtX3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBh
aW50aW5nKCk7CisKKyAgICBpZiAobGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdB
bmltYXRpb25zKCkpCisgICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJlRleHR1cmVN
YXBwZXJTY2VuZTo6dXBkYXRlVmlld3BvcnQsIHRoaXMpKTsKKworI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKKyAgICBpZiAobV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZCkgewor
ICAgICAgICBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIGRpc3Bh
dGNoT25NYWluVGhyZWFkKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6YW5pbWF0aW9uRnJhbWVS
ZWFkeSwgdGhpcykpOworICAgIH0KKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmFuaW1hdGlvbkZyYW1lUmVh
ZHkoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+YW5pbWF0aW9uRnJhbWVSZWFkeSgpOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJTY2VuZTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKK3sKKyAgICBtX2FuaW1hdGlv
bkZyYW1lUmVxdWVzdGVkID0gdHJ1ZTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCit2
b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciog
cGFpbnRlcikKKyNlbGlmIFVTRShDQUlSTykKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpwYWlu
dFRvR3JhcGhpY3NDb250ZXh0KGNhaXJvX3QqIHBhaW50ZXIpCisjZW5kaWYKK3sKKyAgICBpZiAo
IW1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBl
cjo6Y3JlYXRlKCk7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9k
ZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJlTW9kZSk7CisgICAgc3luY1JlbW90ZUNvbnRl
bnQoKTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5
ZXIocm9vdExheWVyKCkpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChwYWludGVyKTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX3Rl
eHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKworICAgIGlmIChtX3NldERyYXdzQmFja2dy
b3VuZCkKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihncmFwaGljc0Nv
bnRleHQuY2xpcEJvdW5kcygpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBtX2JhY2tncm91bmRD
b2xvcik7CisKKyAgICBsYXllci0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBh
aW50aW5nKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoMCk7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRT
aXplJiBjb250ZW50c1NpemUpCit7CisgICAgbV9jb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7
Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6dXBkYXRlVmlld3BvcnQoKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2Ns
aWVudC0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmFk
anVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQoreworICAgIGlmIChtX2ZpeGVkTGF5ZXJzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRml4ZWQgbGF5ZXIgcG9zaXRpb25z
IGFyZSB1cGRhdGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB3aGVuIHdlIHVwZGF0ZSB0aGUgdmlzaWJs
ZSBjb250ZW50cyByZWN0IC8gc2Nyb2xsIHBvc2l0aW9uLgorICAgIC8vIElmIHdlIHdhbnQgdGhv
c2UgbGF5ZXJzIHRvIGZvbGxvdyBhY2N1cmF0ZWx5IHRoZSB2aWV3cG9ydCB3aGVuIHdlIG1vdmUg
YmV0d2VlbiB0aGUgd2ViIHByb2Nlc3MgdXBkYXRlcywgd2UgaGF2ZSB0byBvZmZzZXQKKyAgICAv
LyB0aGVtIGJ5IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCB0aGUg
cG9zaXRpb24gb2YgdGhlIHZpZXdwb3J0IHVzZWQgZm9yIHRoZSBsYXN0IGxheW91dC4KKyAgICBG
bG9hdFBvaW50IHNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdC5sb2NhdGlvbigpLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVu
dHNTaXplKTsKKyAgICBGbG9hdFBvaW50IHJlbmRlcmVkU2Nyb2xsUG9zaXRpb24gPSBib3VuZGVk
U2Nyb2xsUG9zaXRpb24obV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24sIG1fdmlzaWJs
ZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHNj
cm9sbFBvc2l0aW9uIC0gcmVuZGVyZWRTY3JvbGxQb3NpdGlvbjsKKworICAgIExheWVyUmF3UHRy
TWFwOjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJS
YXdQdHJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT52YWx1ZSktPnNldFNjcm9s
bFBvc2l0aW9uRGVsdGFJZk5lZWRlZChkZWx0YSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNj
ZW5lOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikK
K3sKKyAgICBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlv
bjsKK30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBUZXh0dXJlTWFwcGVyU2Nl
bmU6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmLCBQ
YXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKK3sKKyAgICBBU1NFUlQobV90ZXh0
dXJlTWFwcGVyKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Cisg
ICAgQVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7CisKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9y
ZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1fc3Vy
ZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUpOworCisgICAgY2Fu
dmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uoc3VyZmFjZSk7CisgICAgbGF5ZXIt
PnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJTY2VuZTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVp
bnQzMl90IGZyb250QnVmZmVyKQoreworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOworICAg
IEFTU0VSVChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7CisKKyAgICBTdXJm
YWNlQmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMu
ZmluZChpZCk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBj
YW52YXNCYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CisKKyAgICBjYW52YXNCYWNraW5nU3RvcmUt
PnN3YXBCdWZmZXJzSWZOZWVkZWQoZnJvbnRCdWZmZXIpOworfQorCit2b2lkIFRleHR1cmVNYXBw
ZXJTY2VuZTo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgQVNT
RVJUKG1fdGV4dHVyZU1hcHBlcik7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5
SUQoaWQpOworICAgIEFTU0VSVChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7
CisKKyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShpZCk7CisgICAgbGF5ZXItPnNl
dENvbnRlbnRzVG9NZWRpYSgwKTsKK30KKyNlbmRpZgorCit2b2lkIFRleHR1cmVNYXBwZXJTY2Vu
ZTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUp
Cit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworICAgIHRvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRSZXBhaW50Q291bnQodmFsdWUpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZElEcykK
K3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisgICAgVmVjdG9y
PEdyYXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2hpbGRJRHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxk
SUQgPSBjaGlsZElEc1tpXTsKKyAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5
SUQoY2hpbGRJRCk7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgfQorICAg
IGxheWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBHcmFw
aGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpCisgICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoZmlsdGVycyk7CisjZW5k
aWYKKyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKK30KKyNlbmRpZgorCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmluamVjdENhY2hlZEN1
c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0
Cit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5vcGVyYXRpb25zKCku
YXQoaSkuZ2V0KCk7CisgICAgICAgIGlmIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSAh
PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXN0b21PcGVyYXRpb24gPSBz
dGF0aWNfY2FzdDxDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7
CisgICAgICAgIEFTU0VSVCghY3VzdG9tT3BlcmF0aW9uLT5wcm9ncmFtKCkpOworICAgICAgICBD
dXN0b21GaWx0ZXJQcm9ncmFtTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0
ZXJQcm9ncmFtcy5maW5kKGN1c3RvbU9wZXJhdGlvbi0+cHJvZ3JhbUlEKCkpOworICAgICAgICBB
U1NFUlQoaXRlciAhPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmVuZCgpKTsKKyAgICAgICAgY3Vz
dG9tT3BlcmF0aW9uLT5zZXRQcm9ncmFtKGl0ZXItPnZhbHVlLmdldCgpKTsKKyAgICB9Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBp
ZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQoreworICAgIEFT
U0VSVCghbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5jb250YWlucyhpZCkpOworICAgIG1fY3VzdG9t
RmlsdGVyUHJvZ3JhbXMuc2V0KGlkLCBDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OmNy
ZWF0ZShwcm9ncmFtSW5mby52ZXJ0ZXhTaGFkZXJTdHJpbmcoKSwgcHJvZ3JhbUluZm8uZnJhZ21l
bnRTaGFkZXJTdHJpbmcoKSwgcHJvZ3JhbUluZm8ucHJvZ3JhbVR5cGUoKSwgcHJvZ3JhbUluZm8u
bWl4U2V0dGluZ3MoKSwgcHJvZ3JhbUluZm8ubWVzaFR5cGUoKSkpOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCit7CisgICAg
Q3VzdG9tRmlsdGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY3VzdG9tRmlsdGVyUHJv
Z3JhbXMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9ncmFt
cy5lbmQoKSk7CisgICAgaWYgKG1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFw
cGVyLT5yZW1vdmVDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtKGl0ZXItPnZhbHVlLmdldCgpKTsK
KyAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShpdGVyKTsKK30KKyNlbmRpZiAvLyBF
TkFCTEUoQ1NTX1NIQURFUlMpCisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRMYXllclN0
YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGxh
eWVySW5mbykKK3sKKyAgICBBU1NFUlQobV9yb290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0
ZWRMYXllcklEKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisK
KyAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5
ZXJJbmZvLnJlcGxpY2EpKTsKKyAgICBsYXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJRElm
RXhpc3RzKGxheWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5
ZXJJbmZvLmFuY2hvclBvaW50KTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBv
cyk7CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOworCisgICAgbGF5ZXItPnNl
dFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0Q2hpbGRyZW5U
cmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0QmFj
a2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOworICAgIGxheWVyLT5z
ZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOworICAgIGxheWVyLT5z
ZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7CisgICAgbGF5ZXItPnNldENv
bnRlbnRzVG9Tb2xpZENvbG9yKGxheWVySW5mby5zb2xpZENvbG9yKTsKKyAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworICAgIGxheWVyLT5zZXRDb250
ZW50c1Zpc2libGUobGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSk7CisgICAgdG9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllckluZm8uZml4
ZWRUb1ZpZXdwb3J0KTsKKyAgICBsYXllci0+c2V0U2hvd0RlYnVnQm9yZGVyKGxheWVySW5mby5z
aG93RGVidWdCb3JkZXJzKTsKKyAgICBsYXllci0+c2V0RGVidWdCb3JkZXIobGF5ZXJJbmZvLmRl
YnVnQm9yZGVyQ29sb3IsIGxheWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+
c2V0U2hvd1JlcGFpbnRDb3VudGVyKGxheWVySW5mby5zaG93UmVwYWludENvdW50ZXIpOworCisg
ICAgaWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCisgICAgICAgIG1fZml4ZWRMYXllcnMu
YWRkKGlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShp
ZCk7CisKKyAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1h
Z2VJRCk7CisgICAgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUobGF5ZXIpOworCisgICAgLy8g
TmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgIGxheWVyLT5zZXRNYXNrc1RvQm91
bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3Vu
ZHMpOworICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKKyAgICBsYXll
ci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKK30KKworR3JhcGhpY3NM
YXllciogVGV4dHVyZU1hcHBlclNjZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRl
ZExheWVySUQgaWQpCit7CisgICAgcmV0dXJuIChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXll
cklEKSA/IGxheWVyQnlJRChpZCkgOiAwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6
Y3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCit7Cisg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGlkcy5zaXplKCk7ICsraW5kZXgpCisg
ICAgICAgIGNyZWF0ZUxheWVyKGlkc1tpbmRleF0pOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJT
Y2VuZTo6Y3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIE93blB0cjxH
cmFwaGljc0xheWVyPiBuZXdMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZhY3Rv
cnkgKi8sIHRoaXMpOworICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobmV3TGF5ZXIu
Z2V0KCkpLT5zZXRIYXNPd25CYWNraW5nU3RvcmUoZmFsc2UpOworICAgIG1fbGF5ZXJzLmFkZChp
ZCwgbmV3TGF5ZXIucmVsZWFzZSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmRl
bGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCit7
CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGxheWVySURzLnNpemUoKTsgKytp
bmRleCkKKyAgICAgICAgZGVsZXRlTGF5ZXIobGF5ZXJJRHNbaW5kZXhdKTsKK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVyU2NlbmU6OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
KQoreworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IG1fbGF5ZXJzLnRha2UobGF5
ZXJJRCk7CisgICAgQVNTRVJUKGxheWVyKTsKKworICAgIG1fYmFja2luZ1N0b3Jlcy5yZW1vdmUo
bGF5ZXIuZ2V0KCkpOworICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOworI2lmIFVT
RShHUkFQSElDU19TVVJGQUNFKQorICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxh
eWVySUQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRSb290TGF5
ZXJJRChDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBBU1NFUlQobGF5ZXJJRCAh
PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICBBU1NFUlQobV9yb290TGF5ZXJJRCA9
PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKKworICAgIG1fcm9vdExheWVySUQgPSBsYXll
cklEOworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Cisg
ICAgQVNTRVJUKG1fcm9vdExheWVyLT5jaGlsZHJlbigpLmlzRW1wdHkoKSk7CisgICAgbV9yb290
TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnBy
ZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7
CisgICAgaWYgKCFsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUoZ3JhcGhpY3NMYXllcikpIHsK
KyAgICAgICAgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoZ3JhcGhpY3NMYXllcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChncmFw
aGljc0xheWVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZUJhY2tpbmdT
dG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgaWYgKG1f
YmFja2luZ1N0b3Jlcy5jb250YWlucyhncmFwaGljc0xheWVyKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBiYWNraW5nU3RvcmUtPnNldFNpemUo
Z3JhcGhpY3NMYXllci0+c2l6ZSgpKTsKKyAgICBtX2JhY2tpbmdTdG9yZXMuYWRkKGdyYXBoaWNz
TGF5ZXIsIGJhY2tpbmdTdG9yZSk7CisgICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihn
cmFwaGljc0xheWVyKS0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlclNjZW5lOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQoreworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLnRha2UoZ3JhcGhpY3NMYXllcik7Cisg
ICAgaWYgKCFiYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAgIHRvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllciktPnNldEJhY2tpbmdTdG9yZSgwKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJT
aXplKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgUmVmUHRyPENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGdyYXBo
aWNzTGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOworICAgIGJhY2tpbmdTdG9yZS0+
c2V0U2l6ZShncmFwaGljc0xheWVyLT5zaXplKCkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJT
Y2VuZTo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBmbG9hdCBzY2FsZSkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJ
RChsYXllcklEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3Rv
cmUpOworICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKKyAgICBy
ZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Cit9CisKK3ZvaWQgVGV4dHVy
ZU1hcHBlclNjZW5lOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5
ZXJJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7Cisg
ICAgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOworICAgIG1fYmFja2lu
Z1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBU
ZXh0dXJlTWFwcGVyU2NlbmU6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQoreworICAgIEdyYXBo
aWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIFJlZlB0cjxDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXll
cik7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisKKyAgICBTdXJmYWNlTWFwOjppdGVyYXRv
ciBpdCA9IG1fc3VyZmFjZXMuZmluZCh1cGRhdGUuYXRsYXNJRCk7CisgICAgQVNTRVJUKGl0ICE9
IG1fc3VyZmFjZXMuZW5kKCkpOworCisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJ
RCwgdXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50aWxlUmVjdCwgaXQtPnZhbHVlLCB1cGRhdGUu
b2Zmc2V0KTsKKyAgICByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Cisg
ICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCit7CisgICAg
QVNTRVJUKCFtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKKyAgICBtX3N1cmZhY2VzLmFk
ZChhdGxhc0lELCBzdXJmYWNlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit7CisgICAgQVNTRVJUKG1fc3VyZmFjZXMu
Y29udGFpbnMoYXRsYXNJRCkpOworICAgIG1fc3VyZmFjZXMucmVtb3ZlKGF0bGFzSUQpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBBU1NFUlQoIW1faW1hZ2VCYWNraW5ncy5j
b250YWlucyhpbWFnZUlEKSk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBi
YWNraW5nU3RvcmUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBtX2lt
YWdlQmFja2luZ3MuYWRkKGltYWdlSUQsIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCkpOworfQorCit2
b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZh
Y2UpCit7CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Cisg
ICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGlt
YWdlSUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
ID0gaXQtPnZhbHVlOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgaXMgcmVhbGl6
ZWQgdG8gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgd2l0aCBvbmx5IG9uZSB0aWxlIGluIFVJIFBy
b2Nlc3MuCisgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKDEgLyogaWQgKi8sIDEgLyogc2Nh
bGUgKi8pOworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzdXJmYWNlLT5zaXpl
KCkpOworICAgIC8vIFNlZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZERpcmVjdGx5
Q29tcG9zaXRlSW1hZ2UoKQorICAgIEFTU0VSVCgyMDAwID49IHN0ZDo6bWF4KHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSkpOworICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShyZWN0LnNpemUo
KSk7CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKDEgLyogaWQgKi8sIHJlY3QsIHJlY3Qs
IHN1cmZhY2UsIHJlY3QubG9jYXRpb24oKSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNj
ZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
aW1hZ2VJRCkKK3sKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQp
KTsKKyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZp
bmQoaW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBpdC0+dmFsdWU7CisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOwor
ICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5n
cy5jb250YWlucyhpbWFnZUlEKSk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IFRleHR1cmVNYXBw
ZXJMYXllciByZWZlcnMgYSBkYW5nbGluZyBwb2ludGVyLgorICAgIG1fcmVsZWFzZWRJbWFnZUJh
Y2tpbmdzLmFwcGVuZChtX2ltYWdlQmFja2luZ3MudGFrZShpbWFnZUlEKSk7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlclNjZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5
ZXIqIGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgaWYg
KGltYWdlSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIHsKKyAgICAgICAg
bGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1h
Z2VJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7CisgICAgbGF5
ZXItPnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOworfQorCit2b2lkIFRleHR1
cmVNYXBwZXJTY2VuZTo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQorewor
ICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1h
cHBlclNjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCit7CisgICAg
SGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hT
ZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fYmFj
a2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICgqaXQpLT5jb21taXRUaWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkp
OworCisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCit7CisgICAgbV9y
ZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRz
U2Nyb2xsUG9zaXRpb247CisKKyAgICAvLyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVuIHJl
bmRlcmVkLCB3ZSBjYW4gc2FmZWx5IHVubG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUgbmV4
dCBsYXlvdXQuCisgICAgc2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSk7CisKKyAgICBtX3Jvb3RM
YXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKKyAgICBjb21taXRQZW5k
aW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOworICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNr
aW5nc0lmTmVlZGVkKCk7CisKKyAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBp
dHMgd2F5IGZvciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhl
IG5leHQgb25lLgorICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJlRleHR1cmVNYXBwZXJT
Y2VuZTo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNj
ZW5lOjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9j
bGllbnQtPnJlbmRlck5leHRGcmFtZSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6
ZW5zdXJlUm9vdExheWVyKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9y
eSAqLywgdGhpcyk7CisgICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOwor
ICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVy
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJv
b3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1p
emVkIG91dC4KKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsK
KworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVy
KG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0
KCkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c3luY1JlbW90ZUNvbnRlbnQoKQor
eworICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFp
bnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KKyAgICBlbnN1cmVSb290
TGF5ZXIoKTsKKworICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gcmVuZGVyUXVldWU7Cisg
ICAgYm9vbCBjYWxsZWRPbk1haW5UaHJlYWQgPSBXVEY6OmlzTWFpblRocmVhZCgpOworICAgIGlm
ICghY2FsbGVkT25NYWluVGhyZWFkKQorICAgICAgICBtX3JlbmRlclF1ZXVlTXV0ZXgubG9jaygp
OworICAgIHJlbmRlclF1ZXVlLnN3YXAobV9yZW5kZXJRdWV1ZSk7CisgICAgaWYgKCFjYWxsZWRP
bk1haW5UaHJlYWQpCisgICAgICAgIG1fcmVuZGVyUXVldWVNdXRleC51bmxvY2soKTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAg
IHJlbmRlclF1ZXVlW2ldKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpwdXJnZUdM
UmVzb3VyY2VzKCkKK3sKKyAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3JlbGVh
c2VkSW1hZ2VCYWNraW5ncy5jbGVhcigpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY2xlYXIoKTsKKyNlbmRpZgorICAgIG1fc3VyZmFjZXMu
Y2xlYXIoKTsKKworICAgIG1fcm9vdExheWVyLmNsZWFyKCk7CisgICAgbV9yb290TGF5ZXJJRCA9
IEludmFsaWRDb29yZGluYXRlZExheWVySUQ7CisgICAgbV9sYXllcnMuY2xlYXIoKTsKKyAgICBt
X2ZpeGVkTGF5ZXJzLmNsZWFyKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7CisgICAg
bV9iYWNraW5nU3RvcmVzLmNsZWFyKCk7CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdC
dWZmZXJzLmNsZWFyKCk7CisKKyAgICBzZXRBY3RpdmUoZmFsc2UpOworICAgIGRpc3BhdGNoT25N
YWluVGhyZWFkKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzLCB0
aGlzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpwdXJnZUJhY2tpbmdTdG9yZXMo
KQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnB1cmdlQmFja2luZ1N0
b3JlcygpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFu
aW1hdGlvbnMpCit7CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyID0gdG9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllckJ5SUQoaWQpKTsKKyNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLmFuaW1hdGlv
bnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5
ZnJhbWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAg
ICAgIGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0Rmls
dGVyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwga2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmlt
YXRpb25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRp
b25WYWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7CisgICAgICAgICAgICBpbmplY3RDYWNoZWRDdXN0
b21GaWx0ZXJQcm9ncmFtcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICB9CisgICAg
fQorI2VuZGlmCisgICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoYW5pbWF0aW9ucyk7Cit9CisKK3Zv
aWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQor
eworICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGxvY2tlZDsKK30KKwordm9pZCBUZXh0dXJlTWFw
cGVyU2NlbmU6OmRldGFjaCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBt
X2NsaWVudCA9IDA7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjphcHBlbmRVcGRhdGUo
Y29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgaWYgKCFtX2lzQWN0aXZl
KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0ZXgpOworICAgIG1fcmVuZGVyUXVldWUu
YXBwZW5kKGZ1bmN0aW9uKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnNldEFjdGl2
ZShib29sIGFjdGl2ZSkKK3sKKyAgICBpZiAobV9pc0FjdGl2ZSA9PSBhY3RpdmUpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEhhdmUgdG8gY2xlYXIgcmVuZGVyIHF1ZXVlIGluIGJvdGggY2Fz
ZXMuCisgICAgLy8gSWYgdGhlcmUgYXJlIHNvbWUgdXBkYXRlcyBpbiBxdWV1ZSBkdXJpbmcgYWN0
aXZhdGlvbiB0aGVuIHRob3NlIHVwZGF0ZXMgYXJlIGZyb20gcHJldmlvdXMgaW5zdGFuY2Ugb2Yg
cGFpbnQgbm9kZQorICAgIC8vIGFuZCBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgbmV3bHkgY3Jl
YXRlZCBpbnN0YW5jZS4KKyAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7CisgICAgbV9pc0FjdGl2
ZSA9IGFjdGl2ZTsKKyAgICBpZiAobV9pc0FjdGl2ZSkKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsK
K30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1RleHR1cmVNYXBwZXJTY2VuZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RleHR1cmVNYXBwZXJTY2VuZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjA4MWI4YjA4MWQwMmE2ODExZWQ4MDdkOWI4MjQwYjgwMmNmODcxOWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVGV4dHVyZU1hcHBlclNjZW5lLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgICAgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyovCisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlclNjZW5lX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBl
clNjZW5lX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29y
ZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJm
YWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNs
dWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTsKK2NsYXNz
IENvb3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbTsKK2NsYXNz
IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvOworY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOworCitj
bGFzcyBUZXh0dXJlTWFwcGVyU2NlbmVDbGllbnQgeworcHVibGljOgorI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uRnJhbWVSZWFk
eSgpID0gMDsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVmlld3BvcnQoKSA9IDA7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2Nl
bmUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNjZW5lPiwgcHVi
bGljIEdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0cnVjdCBUaWxlVXBkYXRl
IHsKKyAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0OworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0
OworICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAgICAgICBJbnRQb2ludCBvZmZzZXQ7Cisg
ICAgICAgIFRpbGVVcGRhdGUoY29uc3QgSW50UmVjdCYgc291cmNlLCBjb25zdCBJbnRSZWN0JiB0
aWxlLCB1aW50MzJfdCBhdGxhcywgY29uc3QgSW50UG9pbnQmIG5ld09mZnNldCkKKyAgICAgICAg
ICAgIDogc291cmNlUmVjdChzb3VyY2UpCisgICAgICAgICAgICAsIHRpbGVSZWN0KHRpbGUpCisg
ICAgICAgICAgICAsIGF0bGFzSUQoYXRsYXMpCisgICAgICAgICAgICAsIG9mZnNldChuZXdPZmZz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisgICAgZXhwbGljaXQgVGV4dHVyZU1h
cHBlclNjZW5lKFRleHR1cmVNYXBwZXJTY2VuZUNsaWVudCopOworICAgIHZpcnR1YWwgflRleHR1
cmVNYXBwZXJTY2VuZSgpOworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgRmxvYXRSZWN0JiwgVGV4dHVyZU1h
cHBlcjo6UGFpbnRGbGFncyA9IDApOworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgcGFpbnRU
b0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciopOworI2VsaWYgVVNFKENBSVJPKQorICAgIHZvaWQg
cGFpbnRUb0dyYXBoaWNzQ29udGV4dChjYWlyb190Kik7CisjZW5kaWYKKyAgICB2b2lkIHNldENv
bnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlv
bihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbik7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisgICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXpl
JiwgUGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKKyAgICB2b2lkIHN5bmNDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7CisgICAgdm9pZCBkZXN0cm95
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisjZW5kaWYKKyAgICB2b2lkIHNldExheWVyUmVw
YWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKKworICAgIHZvaWQgZGV0
YWNoKCk7CisgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOwor
CisgICAgLy8gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRv
IHVzZSBiZWxvdyB0d28gbWV0aG9kcywgYmVjYXVzZSB0d28gbWV0aG9kcyBhY2Nlc3MgbWVtYmVy
cyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYW5hZ2VzLiBTZWUgbV9jbGllbnQuCisgICAgLy8gQ3Vy
cmVudGx5LCBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoKSBsb2NrcyB0aGUgbWFpbiB0
aHJlYWQgYmVmb3JlIGNhbGxpbmcgYm90aCBtZXRob2RzLgorICAgIHZvaWQgcHVyZ2VHTFJlc291
cmNlcygpOworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOworCisgICAgdm9pZCBjcmVhdGVMYXll
cnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUxh
eWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0Um9v
dExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4o
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwor
ICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5h
dGVkTGF5ZXJJbmZvJik7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5
ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwor
I2VuZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgaW5qZWN0Q2FjaGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgY29uc3Q7
CisgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9t
RmlsdGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0o
aW50IGlkKTsKKyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlELCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKENv
b3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmKTsK
KyAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPik7CisgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJf
dCBhdGxhc0lEKTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjcmVh
dGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCB1cGRh
dGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+KTsKKyAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAgIHZv
aWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xv
cihjb25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxl
KSB7IG1fc2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CisKKyNpZiBFTkFCTEUoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUUpCisgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRl
ZExheWVySUQgaWQpCisgICAgeworICAgICAgICBBU1NFUlQobV9sYXllcnMuY29udGFpbnMoaWQp
KTsKKyAgICAgICAgQVNTRVJUKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOworICAg
ICAgICByZXR1cm4gbV9sYXllcnMuZ2V0KGlkKTsKKyAgICB9CisgICAgR3JhcGhpY3NMYXllciog
Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICBHcmFwaGljc0xh
eWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9p
ZCBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExh
eWVycygpOworCisgICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyQ2xp
ZW50LgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBo
aWNzTGF5ZXIqLCBkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVp
cmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250
ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERSB7IH0KKworICAgIHZvaWQg
ZGlzcGF0Y2hPbk1haW5UaHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQg
dXBkYXRlVmlld3BvcnQoKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisg
ICAgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCk7CisjZW5kaWYKKyAgICB2b2lkIHJlbmRlck5l
eHRGcmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICB2b2lkIGNy
ZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBkZWxldGVMYXllcihDb29y
ZGluYXRlZExheWVySUQpOworCisgICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdy
YXBoaWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92
ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CisgICAgdm9pZCBlbnN1cmVSb290TGF5
ZXIoKTsKKyAgICB2b2lkIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CisK
KyAgICB2b2lkIHByZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKEdyYXBoaWNzTGF5ZXIqKTsKKyAg
ICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2
b2lkIHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lk
IHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIqKTsKKworICAg
IEZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVu
dHNSZWN0OworCisgICAgLy8gUmVuZGVyIHF1ZXVlIGNhbiBiZSBhY2Nlc3NlZCBvbnkgZnJvbSBt
YWluIHRocmVhZCBvciB1cGRhdGVQYWludE5vZGUgY2FsbCBzdGFjayEKKyAgICBWZWN0b3I8RnVu
Y3Rpb248dm9pZCgpPiA+IG1fcmVuZGVyUXVldWU7CisgICAgTXV0ZXggbV9yZW5kZXJRdWV1ZU11
dGV4OworCisgICAgT3duUHRyPFRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKworICAg
IHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU+ID4gSW1hZ2VCYWNraW5nTWFwOworICAgIEltYWdlQmFja2luZ01h
cCBtX2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZT4gPiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxH
cmFwaGljc0xheWVyKiwgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IEJhY2tpbmdT
dG9yZU1hcDsKKyAgICBCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVzOworCisgICAgSGFz
aFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdHlwZWRl
ZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNl
QmFja2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7CisgICAgU3VyZmFjZUJhY2tp
bmdTdG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3RvcmVzOworI2VuZGlmCisKKyAgICB0eXBlZGVm
IEhhc2hNYXA8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFj
ZT4gPiBTdXJmYWNlTWFwOworICAgIFN1cmZhY2VNYXAgbV9zdXJmYWNlczsKKworICAgIC8vIEJl
bG93IHR3byBtZW1iZXJzIGFyZSBhY2Nlc3NlZCBieSBvbmx5IHRoZSBtYWluIHRocmVhZC4gVGhl
IHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIGFjY2VzcyBib3Ro
IG1lbWJlcnMuCisgICAgVGV4dHVyZU1hcHBlclNjZW5lQ2xpZW50KiBtX2NsaWVudDsKKyAgICBi
b29sIG1faXNBY3RpdmU7CisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBPd25QdHI8R3JhcGhp
Y3NMYXllcj4gPiBMYXllck1hcDsKKyAgICBMYXllck1hcCBtX2xheWVyczsKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBHcmFwaGljc0xheWVyKj4gTGF5ZXJSYXdQdHJN
YXA7CisgICAgTGF5ZXJSYXdQdHJNYXAgbV9maXhlZExheWVyczsKKyAgICBDb29yZGluYXRlZExh
eWVySUQgbV9yb290TGF5ZXJJRDsKKyAgICBGbG9hdFBvaW50IG1fcmVuZGVyZWRDb250ZW50c1Nj
cm9sbFBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Nj
cm9sbFBvc2l0aW9uOworICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2VkOworI2lmIEVOQUJMRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBib29sIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0
ZWQ7CisjZW5kaWYKKyAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKKyAgICBib29sIG1fc2V0
RHJhd3NCYWNrZ3JvdW5kOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHR5cGVkZWYg
SGFzaE1hcDxpbnQsIFJlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiA+IEN1c3RvbUZpbHRlclBy
b2dyYW1NYXA7CisgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1hcCBtX2N1c3RvbUZpbHRlclByb2dy
YW1zOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyU2NlbmVf
aAorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2
NGYwNjg3MTA4MmI1OGZjYmQ4M2EwZWYzMTQ1MGJlNDgwMDg0OGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBk
YXRlQXRsYXMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAo
QykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCog
Y2xpZW50LCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQor
ICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pbmFjdGl2aXR5SW5TZWNvbmRzKDApCit7
CisgICAgc3RhdGljIHVpbnQzMl90IG5leHRJRCA9IDA7CisgICAgbV9JRCA9ICsrbmV4dElEOwor
ICAgIEludFNpemUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1l
bnNpb24pKTsKKyAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXpl
LCBmbGFncyk7CisKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNz
YWdlIGZhaWxzLCBVcGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0
bHkuCisgICAgaWYgKCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNl
KSkKKyAgICAgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK1VwZGF0ZUF0bGFzOjp+VXBkYXRl
QXRsYXMoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVV
cGRhdGVBdGxhcyhtX0lEKTsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5l
ZWRlZCgpCit7CisgICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsKKyAgICAgICAgbV9hcmVhQWxs
b2NhdG9yID0gYWRvcHRQdHIobmV3IEdlbmVyYWxBcmVhQWxsb2NhdG9yKHNpemUoKSkpOworICAg
ICAgICBtX2FyZWFBbGxvY2F0b3ItPnNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMy
KSk7CisgICAgfQorfQorCit2b2lkIFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycygpCit7Cisg
ICAgbV9hcmVhQWxsb2NhdG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250
ZXh0PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90
JiBhdGxhc0lELCBjb25zdCBJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IG1faW5hY3Rpdml0eUluU2Vjb25kcyA9IDA7CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwor
ICAgIEludFJlY3QgcmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CisKKyAg
ICAvLyBObyBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCisgICAg
aWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQ+KCk7CisKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgYXRsYXNJRCA9IG1fSUQ7CisKKyAgICAvLyBG
SVhNRTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KKyAg
ICBvZmZzZXQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
Z3JhcGhpY3NDb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7
CisKKyAgICBpZiAoc3VwcG9ydHNBbHBoYSgpKSB7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc2l6ZSksIENvbG9yOjp0
cmFuc3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIH0KKwor
ICAgIHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1Vw
ZGF0ZUF0bGFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvVXBkYXRlQXRsYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGE2YmY4NDRhNDkwZjdmZDJjMzlh
MDQyNGUzMzBmZGRiMTZkNzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVXBkYXRlQXRsYXNfaAorI2Rl
ZmluZSBVcGRhdGVBdGxhc19oCisKKyNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CitjbGFzcyBJbnRQb2ludDsKKworY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQg
eworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOworfTsKKworY2xh
c3MgVXBkYXRlQXRsYXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsK
K3B1YmxpYzoKKyAgICBVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNp
b24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOworICAgIH5VcGRhdGVBdGxhcygpOworCisg
ICAgaW5saW5lIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgp
OyB9CisKKyAgICAvLyBSZXR1cm5zIGEgbnVsbCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWls
YWJsZSBidWZmZXIuCisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRp
bmdPbkF2YWlsYWJsZUJ1ZmZlcih1aW50MzJfdCYgYXRsYXNJRCwgY29uc3QgSW50U2l6ZSYsIElu
dFBvaW50JiBvZmZzZXQpOworICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKKyAgICBib29sIHN1
cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKTsg
fQorCisgICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCisgICAgeworICAg
ICAgICBBU1NFUlQoIWlzSW5Vc2UoKSk7CisgICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyAr
PSBzZWNvbmRzOworICAgIH0KKyAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgY29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7CisgICAgICAg
IHJldHVybiBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2U7
CisgICAgfQorICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9jYXRv
cjsgfQorCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworCitwcml2
YXRlOgorICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8R2VuZXJh
bEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPiBtX3N1cmZhY2U7CisgICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKKyAg
ICB1aW50MzJfdCBtX0lEOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBVcGRhdGVBdGxhc19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NN
YWtlTGlzdHMudHh0CmluZGV4IDhmZGRhMzc2Nzg2YjBjNDhiNDU4YTA2ZGEwMWEzNzA0NDRjZjhh
YzEuLmQyYjk5YTI0Zjc0YWE0NzJlNTM1YjA2MzdjMDFkNWM5MGFiNTgyNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CkBAIC0yMjQsNyArMjI0LDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNo
YXJlZC9BUEkvYy9XS1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKIAogICAgIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKLSAg
ICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuY3BwCiAgICAg
U2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAogICAg
IFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5j
cHAKIApAQCAtMzUyLDkgKzM1MSw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvQXV0aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5jcHAKICAgICBVSVByb2Nlc3MvQXV0aGVu
dGljYXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmNwcAogCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCiAgICAgVUlQcm9jZXNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCi0gICAg
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCiAKICAg
ICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0Rv
d25sb2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNTA1LDEyICs1MDIsNyBAQCBzZXQoV2Vi
S2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNw
cAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCi0gICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCiApCiAKIHNl
dChXZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtp
dDIvbWVzc2FnZXMucHkKaW5kZXggZmFiYWVjNDYwYmZlOWU4MTRjNjg2NTQ1MjE2YWY5NDMxMjVk
NWRkOC4uNWZiODBiNDMyMGYzZTJjODAxZDYwNWYyNWVmZTE4YjQwMDU5YWY3MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQpAQCAtMzcxLDYgKzM3MSw3IEBA
IGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgIHNwZWNpYWxfY2FzZXMgPSB7CiAgICAg
ICAgICdXVEY6OlN0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddLAogICAgICAgICAn
V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUnOiBbJzxXZWJDb3JlL0VkaXRvci5oPiddLAor
ICAgICAgICAnV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEJzogWyc8V2ViQ29yZS9Db29yZGlu
YXRlZExheWVySW5mby5oPiddLAogICAgICAgICAnV2ViQ29yZTo6R3JhbW1hckRldGFpbCc6IFsn
PFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJBbmltYXRpb25zJzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+
J10sCiAgICAgICAgICdXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCc6IFsnPFdlYkNvcmUvR3Jh
cGhpY3NMYXllci5oPiddLApAQCAtMzc5LDcgKzM4MCw2IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBl
KHR5cGUpOgogICAgICAgICAnV2ViQ29yZTo6UGx1Z2luSW5mbyc6IFsnPFdlYkNvcmUvUGx1Z2lu
RGF0YS5oPiddLAogICAgICAgICAnV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0JzogWyc8V2Vi
Q29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRB
dHRyaWJ1dGVzJzogWyc8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPiddLAotICAgICAgICAn
V2ViS2l0OjpDb29yZGluYXRlZExheWVySUQnOiBbJyJDb29yZGluYXRlZExheWVySW5mby5oIidd
LAogICAgICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcic6IFtd
LAogICAgICAgICAnV2ViS2l0OjpXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAg
ICAgICAgICdXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcApp
bmRleCBlNWFiMzQ1ODZmNDc0MzcxODFiN2M0MzUyMWM0ZTA3YjA0YjBiZjQyLi5jMzM3MWQyYzA4
NGUwNTJkZWRjZjY0ZWZmNGJkMTQ3NTAwZTliNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDExICsyOSwxMCBA
QAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogCiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZv
LmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZv
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJh
bnNmb3JtT3BlcmF0aW9uLmg+CkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9S
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9u
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9u
TWF0cml4Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24u
aD4KQEAgLTU0LDkgKzU0LDkgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQot
I2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYkN1c3Rv
bUZpbHRlclByb2dyYW0uaCIKICNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9DdXN0b21GaWx0ZXJDb25zdGFudHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1c3Rv
bUZpbHRlck51bWJlclBhcmFtZXRlci5oPgpAQCAtNzMsNyArNzMsOSBAQAogI2VuZGlmCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCkBAIC0zMjks
NyArMzMxLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+
OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLAogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgU2hhZGVycyBhcmUg
YWxyZWFkeSB2YWxpZGF0ZWQsIHNvIHdlIGp1c3QgdXNlIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlv
biBmb3IgdHJhbnNwb3J0YXRpb24uCi0gICAgICAgICAgICBmaWx0ZXIgPSBXZWJDdXN0b21GaWx0
ZXJPcGVyYXRpb246OmNyZWF0ZSgwLCBwcm9ncmFtSUQsIHBhcmFtZXRlcnMsIG1lc2hSb3dzLCBt
ZXNoQ29sdW1ucywgbWVzaFR5cGUpOworICAgICAgICAgICAgZmlsdGVyID0gQ29vcmRpbmF0ZWRD
dXN0b21GaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLCBwcm9ncmFtSUQsIHBhcmFtZXRlcnMsIG1l
c2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJn
dW1lbnRDb2RlcnMuaAppbmRleCAwYjVlMTRjYzE3OTk2ZTY1ZDk0NmFmZGI5MmExNGE4YmYyZWJm
Y2ZjLi4yYWVmYzY1NzRmZjNlYTQxMTEzZmMxZTQyYzAxOTE4ZjQyNDFiZjY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaApAQCAtMzIs
MTEgKzMyLDEzIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CiBjbGFzcyBGbG9hdFBvaW50M0Q7CiBj
bGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlv
bnM7CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlv
bnM7CitzdHJ1Y3QgQ29vcmRpbmF0ZWRMYXllckluZm87CiBzdHJ1Y3QgTGVuZ3RoOwogCiAjaWYg
RU5BQkxFKENTU19GSUxURVJTKQpAQCAtNTIsMTEgKzU0LDYgQEAgc3RydWN0IEdyYXBoaWNzU3Vy
ZmFjZVRva2VuOwogI2VuZGlmCiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IENvb3Jk
aW5hdGVkTGF5ZXJJbmZvOwotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci19Ci0KIG5hbWVzcGFj
ZSBDb3JlSVBDIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpG
bG9hdFBvaW50M0Q+IHsKQEAgLTExMCwxNCArMTA3LDE0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+IHsKIH07CiAjZW5kaWYK
IAotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0
IFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUo
QXJndW1lbnREZWNvZGVyKiwgV2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyYpOwordGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbz4g
eworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVu
dERlY29kZXIqLCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwogfTsKIAotdGVtcGxh
dGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvPiB7Ci0g
ICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYktpdDo6U3Vy
ZmFjZVVwZGF0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbz4geworICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYp
OworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpTdXJm
YWNlVXBkYXRlSW5mbyYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllckluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNWZi
YjY2YTgwMjU4MWI0OGM5MDNkNDhiNWUxODM5ODRjMTNlNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllckluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDg1
ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0g
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVm
IENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRMYXllckluZm9faAot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXR5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRMYXllcklEOwotZW51bSB7
IEludmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07Ci0KLXR5cGVkZWYgdWludDY0X3QgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCA9IDAgfTsKLQotLy8gTk9URTogQ29vcmRpbmF0ZWRMYXllckluZm8gc2hvdWxkIG9u
bHkgdXNlIFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0aW9uIGZhc3Rlci4KLXN0cnVj
dCBDb29yZGluYXRlZExheWVySW5mbyB7Ci0gICAgQ29vcmRpbmF0ZWRMYXllckluZm8oKQotICAg
ICAgICA6IHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAgICAgICAgLCBtYXNr
KEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKLSAgICAgICAgLCBvcGFjaXR5KDApCi0gICAgICAgICwg
ZGVidWdCb3JkZXJXaWR0aCgwKQotICAgICAgICAsIGZsYWdzKDApIHsgfQotCi0gICAgQ29vcmRp
bmF0ZWRMYXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIG1hc2s7Ci0gICAg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotCi0gICAgV2ViQ29yZTo6RmxvYXRQ
b2ludCBwb3M7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIFdl
YkNvcmU6OkZsb2F0U2l6ZSBzaXplOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybTsKLSAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRy
YW5zZm9ybTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBv
cGFjaXR5OwotICAgIFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7Ci0gICAgV2ViQ29yZTo6Q29s
b3IgZGVidWdCb3JkZXJDb2xvcjsKLSAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwotCi0gICAg
dW5pb24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBjb250ZW50c09wYXF1
ZSA6IDE7Ci0gICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7Ci0gICAgICAgICAgICBi
b29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJs
ZSA6IDE7Ci0gICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwotICAgICAgICAgICAg
Ym9vbCBwcmVzZXJ2ZXMzRCA6IDE7Ci0gICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOwot
ICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwotICAgICAgICAgICAgYm9vbCBz
aG93RGVidWdCb3JkZXJzIDogMTsKLSAgICAgICAgICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVy
IDogMTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5zaWduZWQgZmxhZ3M7Ci0gICAgfTsKLX07Ci0K
LX0KLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIENv
b3JkaW5hdGVkTGF5ZXJJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmEyZDU1YTc2ZTkwNjE3OTJlZmM5NjY5Yzc0ZDg4
NjI4MTBlYTg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3Vy
ZmFjZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIK
LQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LUNvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSogQ29vcmRpbmF0ZWRTdXJmYWNlOjpzX2ZhY3Rv
cnkgPSAwOwotCi12b2lkIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeShDb29yZGluYXRl
ZFN1cmZhY2U6OkZhY3RvcnkgZmFjdG9yeSkKLXsKLSAgICBzX2ZhY3RvcnkgPSBmYWN0b3J5Owot
fQotCi1QYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRTdXJmYWNlOjpj
cmVhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCi17Ci0gICAg
QVNTRVJUKHNfZmFjdG9yeSk7Ci0gICAgcmV0dXJuIHNfZmFjdG9yeShzaXplLCBmbGFncyk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzRiMTdjZWQxOTliMzdiZjQ0NGYzNzkzZjEwNGI4NWQzOTdkMjE4Yi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBD
b21wYW55IDEwMCwgSW5jLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENvb3Jk
aW5hdGVkU3VyZmFjZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkU3VyZmFjZV9oCi0KLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
Qml0bWFwVGV4dHVyZTsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxDb29yZGluYXRlZFN1cmZhY2U+IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZsYWcgewot
ICAgICAgICBOb0ZsYWdzID0gMCwKLSAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDEgPDwgMCwKLSAg
ICB9OwotICAgIHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7Ci0KLSAgICB0eXBlZGVmIFBhc3NSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBGYWN0b3J5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBG
bGFncyk7Ci0gICAgc3RhdGljIHZvaWQgc2V0RmFjdG9yeShGYWN0b3J5KTsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgRmxhZ3MpOwotCi0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRTdXJmYWNlKCkgeyB9Ci0K
LSAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgU3VwcG9y
dHNBbHBoYTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgPSAw
OwotCi0gICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRv
IHBhaW50IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSA9IDA7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVh
bCB2b2lkIGNvcHlUb1RleHR1cmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
c291cmNlT2Zmc2V0KSA9IDA7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgRmxh
Z3MgZmxhZ3MoKSBjb25zdCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIENvb3JkaW5hdGVk
U3VyZmFjZTo6RmFjdG9yeSogc19mYWN0b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZgotI2VuZGlmIC8vIENvb3JkaW5hdGVkU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5m
by5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVw
ZGF0ZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyODlmY2RmMGZmYjlm
ZWUwNmUwNDQxOTg0ODMxNzBmODMyZmIyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9TdXJmYWNlVXBkYXRlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoK
LSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU3VyZmFjZVVwZGF0
ZUluZm9faAotI2RlZmluZSBTdXJmYWNlVXBkYXRlSW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFN1cmZhY2VV
cGRhdGVJbmZvIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBkYXRlSW5mbyk7
Ci0KLXB1YmxpYzoKLSAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQotCi0gICAgLy8gVGhlIHJl
Y3QgdG8gYmUgdXBkYXRlZC4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHVwZGF0ZVJlY3Q7Ci0KLSAg
ICAvLyBUaGUgcGFnZSBzY2FsZSBmYWN0b3IgdXNlZCB0byByZW5kZXIgdGhpcyB1cGRhdGUuCi0g
ICAgZmxvYXQgc2NhbGVGYWN0b3I7Ci0KLSAgICAvLyBUaGUgaWQgb2YgdGhlIHVwZGF0ZSBhdGxh
cyBpbmNsdWRpbmcgdGhlIHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBkYXRlcy4K
LSAgICB1aW50MzJfdCBhdGxhc0lEOwotCi0gICAgLy8gVGhlIG9mZnNldCBpbiB0aGUgYml0bWFw
IHdoZXJlIHRoZSByZW5kZXJlZCBjb250ZW50cyBhcmUuCi0gICAgV2ViQ29yZTo6SW50UG9pbnQg
c3VyZmFjZU9mZnNldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jZW5kaWYgLy8gU3VyZmFjZVVwZGF0ZUluZm9f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAppbmRleCBiODI4YWFkODE3NDU0MmVk
ZDM3YjE4ZTM3ZjI2Y2RjOTRhYjgwOWYwLi4xNGE3YzAwNzg1NDkwNzRkMDM1NzliZDQ5ZWZkZDI4
YmU0YTVmZDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaApAQCAtMjIsOCAr
MjIsOCBAQAogI2RlZmluZSBXZWJDb29yZGluYXRlZFN1cmZhY2VfaAogCiAjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1
ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRTdXJm
YWNlLmg+CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICNpbmNsdWRlICJHcmFwaGljc1N1
cmZhY2UuaCIKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlIDogcHVibGljIENv
b3JkaW5hdGVkU3VyZmFjZSB7CitjbGFzcyBXZWJDb29yZGluYXRlZFN1cmZhY2UgOiBwdWJsaWMg
V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlIHsKIHB1YmxpYzoKICAgICBjbGFzcyBIYW5kbGUg
ewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIYW5kbGUpOwpAQCAtNTcsNyArNTcsNyBA
QCBwdWJsaWM6CiAgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIG1fZ3JhcGhp
Y3NTdXJmYWNlVG9rZW47CiAjZW5kaWYKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7
Ci0gICAgICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgbV9mbGFnczsKKyAgICAgICAgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBtX2ZsYWdzOwogICAgIH07CiAKICAgICAv
LyBDcmVhdGUgYSBuZXcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLCBhbmQgYWxsb2NhdGUgZWl0aGVy
IGEgR3JhcGhpY3NTdXJmYWNlIG9yIGEgU2hhcmVhYmxlQml0bWFwIGFzIGJhY2tpbmcuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0
b21GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0YmYyNzdhNzBlNmVhZWFlNzNiZmUzMjA4MThjNzY0ZTA0MDUwNTUzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9i
ZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCi0jZGVmaW5lIFdlYkN1c3RvbUZpbHRl
ck9wZXJhdGlvbl9oCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBjbGFz
cyBpcyBvbmx5IGFkZGluZyB0aGUgcHJvZ3JhbUlkIG9uIHRvcCBvZiBDdXN0b21GaWx0ZXJPcGVy
YXRpb24uIFRoZSBhcmd1bWVudCBkZWNvZGVyIGhhcyBubwotLy8gY29udGV4dCwgc28gd2UgY2Fu
bm90IHNlYXJjaCBpbiBvdXIgY2FjaGVkIEN1c3RvbUZpbHRlclByb2dyYW1zIHdoaWxlIGRlY29k
aW5nLiBJbiB0aGF0IGNhc2UKLS8vIGl0IHdpbGwganVzdCBzdG9yZSB0aGUgcHJvZ3JhbUlkIGFu
ZCBubyBDdXN0b21GaWx0ZXJQcm9ncmFtIGluc3RhbmNlLiBUaGUgcmVjZWl2ZXIgaXMgc3VwcG9z
ZWQgdG8KLS8vIGl0ZXJhdGUgb24gdGhpcyBzdHJ1Y3R1cmUgYW5kIGluamVjdCB0aGUgcmlnaHQg
Q3VzdG9tRmlsdGVyUHJvZ3JhbXMuCi0KLWNsYXNzIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiA6
IHB1YmxpYyBDdXN0b21GaWx0ZXJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSwgaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2ln
bmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHByb2dy
YW0sIHByb2dyYW1JRCwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBt
ZXNoVHlwZSkpOwotICAgIH0KLQotICAgIGludCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBt
X3Byb2dyYW1JRDsgfQotCi1wcml2YXRlOgotICAgIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbihQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGludCBwcm9ncmFtSUQsIGNv
bnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVk
IG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVz
aFR5cGUpCi0gICAgICAgIDogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHByb2dyYW0sIHNvcnRlZFBh
cmFtZXRlcnMsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpCi0gICAgICAgICwgbV9w
cm9ncmFtSUQocHJvZ3JhbUlEKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgbV9wcm9ncmFtSUQ7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NI
QURFUlMpCi0KLSNlbmRpZiAvLyBDdXN0b21GaWx0ZXJPcGVyYXRpb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Q3VzdG9tRmlsdGVyUHJvZ3JhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWFh
ZGQ2ZmVkNzljYzQ4YjNjZTU5NDhlMDZmNzQ2ZjM3Nzc1Y2ZlLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaAorKysgL2Rldi9udWxsCkBAIC0x
LDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJDdXN0b21GaWx0ZXJQ
cm9ncmFtX2gKLSNkZWZpbmUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCi0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpICYmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlIDxXZWJD
b3JlL0N1c3RvbUZpbHRlckNvbnN0YW50cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ3VzdG9tRmls
dGVyUHJvZ3JhbSA6IHB1YmxpYyBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtPiBjcmVhdGUo
U3RyaW5nIHZlcnRleFNoYWRlclN0cmluZywgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcs
IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBlLCBXZWJDb3JlOjpD
dXN0b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3MsIFdlYkNvcmU6OkN1c3Rv
bUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgbV9mcmFnbWVu
dFNoYWRlclN0cmluZywgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSkpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IHRydWU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEN1c3RvbUZpbHRl
clByb2dyYW0mIG8pIGNvbnN0IE9WRVJSSURFCi0gICAgewotICAgICAgICAvLyBXZSBkb24ndCB1
c2UgdGhlICE9IG9wZXJhdG9yIGJlY2F1c2UgdGhhdCB3b3VsZCByZWN1cnNpdmVseSBjYWxsIHRo
aXMgbWV0aG9kLgotICAgICAgICBpZiAoIUN1c3RvbUZpbHRlclByb2dyYW06Om9wZXJhdG9yPT0o
bykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBjYXN0IGlzIHVnbHksIGJ1dCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtIGlzIHRoZSBzaW5nbGUg
aW1wbGVtZW50YXRpb24gb2YgQ3VzdG9tRmlsdGVyUHJvZ3JhbSBvbiBVSSBQcm9jZXNzLgotICAg
ICAgICBjb25zdCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKiBvdGhlciA9IHN0YXRpY19jYXN0PGNv
bnN0IFdlYkN1c3RvbUZpbHRlclByb2dyYW0qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX3ZlcnRl
eFNoYWRlclN0cmluZyA9PSBvdGhlci0+dmVydGV4U2hhZGVyU3RyaW5nKCkgJiYgbV9mcmFnbWVu
dFNoYWRlclN0cmluZyA9PSBvdGhlci0+ZnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsKLSAgICB9Ci0K
LXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX3ZlcnRleFNoYWRlclN0cmluZzsgfQotICAgIHZpcnR1YWwg
U3RyaW5nIGZyYWdtZW50U2hhZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9m
cmFnbWVudFNoYWRlclN0cmluZzsgfQotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxIYXZlQ2xpZW50
cygpIE9WRVJSSURFIHsgbm90aWZ5Q2xpZW50cygpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJl
bW92ZUxhc3RDbGllbnQoKSBPVkVSUklERSB7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJDdXN0b21G
aWx0ZXJQcm9ncmFtKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0cmluZyBmcmFnbWVudFNo
YWRlclN0cmluZywgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUs
IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5ncywgV2Vi
Q29yZTo6Q3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCi0gICAgICAgIDogV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUHJvZ3JhbShwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKQot
ICAgICAgICAsIG1fdmVydGV4U2hhZGVyU3RyaW5nKHZlcnRleFNoYWRlclN0cmluZykKLSAgICAg
ICAgLCBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nKGZyYWdtZW50U2hhZGVyU3RyaW5nKQotICAgIHsK
LSAgICB9Ci0KLSAgICBTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7Ci0gICAgU3RyaW5nIG1f
ZnJhZ21lbnRTaGFkZXJTdHJpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgRU5BQkxFKENTU19TSEFERVJTKQot
Ci0jZW5kaWYgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBiZmQx
NGM2NGRjM2Q1YzE5YTg0OWJmMTUxZDUyMmVkNDQ5NmYyYmVkLi5iZWRjYTNhZWU1NDIwOWNmYjE2
ZDFhOTc0OTlhNDFlMTFmNWU3ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQu
cHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEzOSwxMSArMTM5LDcgQEAg
SEVBREVSUyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmggXAogICAgIFNoYXJlZC9X
ZWJVc2VyQ29udGVudFVSTFBhdHRlcm4uaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggXAotICAgIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXAotICAgIFNoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5oIFwKLSAgICBTaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICBTaGFyZWQvUGx1Z2lu
cy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9O
UFJlbW90ZU9iamVjdE1hcC5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRh
LmggXApAQCAtMjE2LDkgKzIxMiw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9BdXRo
ZW50aWNhdGlvbi9XZWJQcm90ZWN0aW9uU3BhY2UuaCBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdT
dG9yZS5oIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaCBcCi0gICAg
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBc
CiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuaCBcCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVl
UmVuZGVyZXIuaCBcCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5oIFwKICAg
ICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaCBcCkBAIC0zNzQsMTIgKzM2OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJl
YUFsbG9jYXRvci5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmggXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkVGlsZS5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9V
cGRhdGVBdGxhcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJv
bGxlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmggXApAQCAtNTE3LDcgKzUwNiw2IEBAIFNP
VVJDRVMgKz0gXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5jcHAgXAogICAgIFNoYXJlZC9X
ZWJXaGVlbEV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmNwcCBcCiAgICAgU2hhcmVk
L3F0L0FyZ3VtZW50Q29kZXJzUXQuY3BwIFwKQEAgLTU4MSw5ICs1NjksNyBAQCBTT1VSQ0VTICs9
IFwKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmNwcCBc
CiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9CYWNr
aW5nU3RvcmVRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIFwKLSAgICBVSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9E
ZWZhdWx0VW5kb0NvbnRyb2xsZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25s
b2FkUHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAu
Y3BwIFwKQEAgLTc2NSwxMiArNzUxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0VuY29kZXJBZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5j
cHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxv
Y2F0b3IuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dC5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkVGlsZS5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1VwZGF0ZUF0bGFzLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdo
dENvbnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5j
cHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCA1YmI0NDY0NzdjYmQy
NTc1ZjU2ZDBjYzkzZGVhMDIxMWY3MjFhOTAzLi44MDZlYzJmMjg3MmQyN2IwOTk2OGI1YmMyZWUw
YTExYWU5Nzc3MDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKICNp
bmNsdWRlICJGb3JtQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZs
LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50
QmFzZS5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIlBh
Z2VDbGllbnRMZWdhY3lJbXBsLmgiCkBAIC02Myw2ICs2Miw3IEBACiAjaW5jbHVkZSA8RWRqZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXNFZmwuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0N1cnNvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclNjZW5lLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KIAogI2lmIEVOQUJMRShWSUJSQVRJT04p
CkBAIC0zNjIsNyArMzYyLDcgQEAgQWZmaW5lVHJhbnNmb3JtIEV3a1ZpZXc6OnRyYW5zZm9ybVRv
U2NyZWVuKCkgY29uc3QKIH0KIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLUxheWVy
VHJlZVJlbmRlcmVyKiBFd2tWaWV3OjpsYXllclRyZWVSZW5kZXJlcigpCitUZXh0dXJlTWFwcGVy
U2NlbmUqIEV3a1ZpZXc6OnRleHR1cmVNYXBwZXJTY2VuZSgpCiB7CiAgICAgRHJhd2luZ0FyZWFQ
cm94eSogZHJhd2luZ0FyZWEgPSBwYWdlKCktPmRyYXdpbmdBcmVhKCk7CiAgICAgaWYgKCFkcmF3
aW5nQXJlYSkKQEAgLTM3Miw3ICszNzIsNyBAQCBMYXllclRyZWVSZW5kZXJlciogRXdrVmlldzo6
bGF5ZXJUcmVlUmVuZGVyZXIoKQogICAgIGlmICghY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworICAgIHJldHVybiBjb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS0+dGV4dHVyZU1hcHBlclNjZW5lKCk7CiB9CiAjZW5kaWYKIApAQCAt
Mzk0LDE0ICszOTQsMTQgQEAgdm9pZCBFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZChUaW1lcjxF
d2tWaWV3PiopCiAgICAgLy8gV2UgYXJlIHN1cHBvc2VkIHRvIGNsaXAgdG8gdGhlIGFjdHVhbCB2
aWV3cG9ydCwgbm90aGluZyBsZXNzLgogICAgIEludFJlY3Qgdmlld3BvcnQoc2QtPnZpZXcueCwg
c2QtPnZpZXcueSwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7CiAKLSAgICBMYXllclRyZWVSZW5k
ZXJlciogcmVuZGVyZXIgPSBsYXllclRyZWVSZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIp
CisgICAgVGV4dHVyZU1hcHBlclNjZW5lKiBzY2VuZSA9IHRleHR1cmVNYXBwZXJTY2VuZSgpOwor
ICAgIGlmICghc2NlbmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlcmVyLT5zZXRBY3Rp
dmUodHJ1ZSk7Ci0gICAgcmVuZGVyZXItPnNldERyYXdzQmFja2dyb3VuZChtX3NldERyYXdzQmFj
a2dyb3VuZCk7CisgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKKyAgICBzY2VuZS0+c2V0RHJh
d3NCYWNrZ3JvdW5kKG1fc2V0RHJhd3NCYWNrZ3JvdW5kKTsKICAgICBpZiAobV9pc0hhcmR3YXJl
QWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgcmVuZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0
KHRyYW5zZm9ybVRvU2NlbmUoKS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCksIC8qIG9wYWNpdHkg
Ki8gMSwgdmlld3BvcnQpOworICAgICAgICBzY2VuZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQo
dHJhbnNmb3JtVG9TY2VuZSgpLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgLyogb3BhY2l0eSAq
LyAxLCB2aWV3cG9ydCk7CiAgICAgICAgIC8vIHNkLT5pbWFnZSBpcyB0aWVkIHRvIGEgbmF0aXZl
IHN1cmZhY2UuIFRoZSBuYXRpdmUgc3VyZmFjZSBpcyBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0
ZXMsCiAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIHZpZXdwb3J0IHBv
c2l0aW9uIHdoZW4gY2FsbGluZyBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQuCiAg
ICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzZC0+aW1hZ2UsIHZpZXdw
b3J0LngoKSwgdmlld3BvcnQueSgpLCB2aWV3cG9ydC53aWR0aCgpLCB2aWV3cG9ydC5oZWlnaHQo
KSk7CkBAIC00MTQsNyArNDE0LDcgQEAgdm9pZCBFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZChU
aW1lcjxFd2tWaWV3PiopCiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShncmFwaGljc0NvbnRleHQu
Z2V0KCksIC0gcGFnZVBvc2l0aW9uKCkueCgpLCAtIHBhZ2VQb3NpdGlvbigpLnkoKSk7CiAgICAg
ICAgIGNhaXJvX3NjYWxlKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgcGFnZVNjYWxlRmFjdG9yKCks
IHBhZ2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgY2Fpcm9fc2NhbGUoZ3JhcGhpY3NDb250ZXh0
LmdldCgpLCBkZXZpY2VTY2FsZUZhY3RvcigpLCBkZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAg
ICAgcmVuZGVyZXItPnBhaW50VG9HcmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0LmdldCgp
KTsKKyAgICAgICAgc2NlbmUtPnBhaW50VG9HcmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0
LmdldCgpKTsKICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNkLT5p
bWFnZSwgMCwgMCwgdmlld3BvcnQud2lkdGgoKSwgdmlld3BvcnQuaGVpZ2h0KCkpOwogICAgIH0K
ICNlbmRpZgpAQCAtNjk1LDcgKzY5NSw3IEBAIGJvb2wgRXdrVmlldzo6Y3JlYXRlR0xTdXJmYWNl
KGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogCiBib29sIEV3a1ZpZXc6OmVudGVyQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGUoKQogewotICAgIGxheWVyVHJlZVJlbmRlcmVyKCktPnNldEFjdGl2
ZSh0cnVlKTsKKyAgICB0ZXh0dXJlTWFwcGVyU2NlbmUoKS0+c2V0QWN0aXZlKHRydWUpOwogCiAg
ICAgaWYgKCFtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMzdhOGQxYmRi
YmJhYzgwMWRmOWI1MWEyN2Y2NmQyOGUxNDZlYjc2Yi4uMTk1Mjg1ZTMyMjk0Njc2NjVmNjFhZDk4
ZTcyMGUwM2Q1NjIwOGE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuaApAQCAtNjgsMTAgKzY4LDYgQEAgY2xhc3MgV2ViUG9wdXBNZW51UHJveHlFZmw7CiAj
aWYgRU5BQkxFKFZJQlJBVElPTikKIGNsYXNzIFZpYnJhdGlvbkNsaWVudEVmbDsKICNlbmRpZgot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7
Ci0jZW5kaWYKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzksNiArNzUsOSBAQCBjbGFz
cyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBDb2xvcjsKIGNsYXNzIEN1cnNvcjsKIGNsYXNzIElu
dFNpemU7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorY2xhc3MgVGV4dHVyZU1hcHBl
clNjZW5lOworI2VuZGlmCiB9CiAKIGNsYXNzIEV3a0NvbnRleHQ7CkBAIC0yMTksNyArMjE4LDcg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGRpc3BsYXlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPEV3
a1ZpZXc+Kik7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgV2ViS2l0OjpM
YXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICBXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2NlbmUqIHRleHR1cmVNYXBwZXJTY2VuZSgpOwogI2VuZGlmCiAKICAgICB2b2lk
IGluZm9ybUljb25DaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3FxdWlja3dlYnBhZ2UuY3BwCmluZGV4IGZhMDEzYWY1Mzc2ODBhNDJiMzkzOWY3YzI4ZWY3
MDhhNmVmZGEwY2QuLmQxYWVmNzVkODY0MDI3ZjEyNWNmMmEzMTg2ZWM2ZWMxM2Q5OTI3NTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNw
cApAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgogCiAjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKLSNpbmNsdWRlICJMYXllclRy
ZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2luY2x1
ZGUgIlF0V2ViUGFnZVNHTm9kZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CkBAIC0zMSw2ICszMCw3IEBACiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVk
ZSAicXdlYmtpdHRlc3RfcC5oIgogI2luY2x1ZGUgPFFRdWlja1dpbmRvdz4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1RleHR1cmVNYXBwZXJTY2VuZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
CkBAIC03MSw4ICs3MSw4IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWlu
dGVyKiBwYWludGVyKQogICAgIGlmICghd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+
bGF5ZXJUcmVlUmVuZGVyZXIoKSkKLSAgICAgICAgY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkoKS0+bGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChwYWludGVy
KTsKKyAgICBpZiAoY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+dGV4dHVyZU1hcHBl
clNjZW5lKCkpCisgICAgICAgIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPnRleHR1
cmVNYXBwZXJTY2VuZSgpLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwogfQogCiBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogUVF1aWNrV2ViUGFnZVByaXZhdGU6OmNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkKQEAgLTg4LDcgKzg4LDcgQEAgUVNHTm9kZSogUVF1
aWNrV2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50
Tm9kZURhdGEqKQogICAgIGlmICghZC0+d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQogICAg
ICAgICByZXR1cm4gb2xkTm9kZTsKIAotICAgIExheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9
IGQtPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPmxheWVyVHJlZVJlbmRlcmVyKCk7
CisgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lKiB0ZXh0dXJlTWFwcGVyU2NlbmUgPSBk
LT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT50ZXh0dXJlTWFwcGVyU2NlbmUoKTsK
IAogICAgIFF0V2ViUGFnZVNHTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PFF0V2ViUGFnZVNHTm9k
ZSo+KG9sZE5vZGUpOwogCkBAIC0xMDUsNyArMTA1LDcgQEAgUVNHTm9kZSogUVF1aWNrV2ViUGFn
ZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEq
KQogICAgIGlmICghbm9kZSkKICAgICAgICAgbm9kZSA9IG5ldyBRdFdlYlBhZ2VTR05vZGU7CiAK
LSAgICBub2RlLT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CisgICAgbm9kZS0+c2V0VGV4dHVyZU1h
cHBlclNjZW5lKHRleHR1cmVNYXBwZXJTY2VuZSk7CiAKICAgICBub2RlLT5zZXRTY2FsZShkLT5j
b250ZW50c1NjYWxlKTsKICAgICBub2RlLT5zZXREZXZpY2VQaXhlbFJhdGlvKHdpbmRvdy0+ZGV2
aWNlUGl4ZWxSYXRpbygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAppbmRleCAzNjFmNzRkYWI4NTFhZDg5OGVkMzlkMjc3YTdh
NmY0NzliMjU5NzMxLi42MjYxOWQ5ZmM4YzRmMDFlZWJkMzU3ZDY4ZTY5NTc3ZDhlYjhkNDY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZp
ZXcuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVBy
b3h5SW1wbC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUgIldl
YlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAicXJh
d3dlYnZpZXdfcF9wLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU2NlbmUuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL3FyYXd3ZWJ2aWV3X3AuaD4KIAogdm9pZCBRUmF3V2ViVmlld1By
aXZhdGU6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIFFSYXdXZWJWaWV3OjpzZXRBY3Rp
dmUoYm9vbCBhY3RpdmUpCiB7CiAgICAgZC0+bV9hY3RpdmUgPSBhY3RpdmU7CiAgICAgZC0+bV93
ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Vmll
d1dpbmRvd0lzQWN0aXZlKTsKLSAgICBsYXllclRyZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUoYWN0
aXZlKTsKKyAgICB0ZXh0dXJlTWFwcGVyU2NlbmUoKS0+c2V0QWN0aXZlKGFjdGl2ZSk7CiB9CiAK
IFFTaXplIFFSYXdXZWJWaWV3OjpzaXplKCkgY29uc3QKQEAgLTM2Myw3ICszNjMsNyBAQCBXS1Bh
Z2VSZWYgUVJhd1dlYlZpZXc6OnBhZ2VSZWYoKQogICAgIHJldHVybiB0b0FQSShkLT5tX3dlYlBh
Z2VQcm94eS5nZXQoKSk7CiB9CiAKLVdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXIqIFFSYXdXZWJW
aWV3OjpsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0CitXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2Nl
bmUqIFFSYXdXZWJWaWV3Ojp0ZXh0dXJlTWFwcGVyU2NlbmUoKSBjb25zdAogewogICAgIFdlYktp
dDo6RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT5tX3dlYlBhZ2VQcm94eS0+ZHJh
d2luZ0FyZWEoKTsKICAgICBpZiAoIWRyYXdpbmdBcmVhKQpAQCAtMzcxLDIwICszNzEsMjAgQEAg
V2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogUVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRlcmVy
KCkgY29uc3QKICAgICBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGRyYXdpbmdBcmVhLT5jb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSgpOwogICAgIGlmICghY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICByZXR1cm4gY29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHktPnRleHR1cmVNYXBwZXJTY2VuZSgpOwogfQogCiB2b2lkIFFSYXdXZWJWaWV3
OjpwYWludChjb25zdCBRTWF0cml4NHg0JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIHVuc2ln
bmVkIHBhaW50RmxhZ3MpCiB7Ci0gICAgV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogcmVuZGVy
ZXIgPSBsYXllclRyZWVSZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCisgICAgV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNjZW5lKiBzY2VuZSA9IHRleHR1cmVNYXBwZXJTY2VuZSgpOworICAg
IGlmICghc2NlbmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUo
dHJ1ZSk7CisgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCByZWN0KDAsIDAsIGQtPm1fc2l6ZS53aWR0aCgpLCBkLT5tX3NpemUuaGVpZ2h0KCkpOwog
Ci0gICAgcmVuZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0
eSwgdHJhbnNmb3JtLm1hcFJlY3QocmVjdCksIHBhaW50RmxhZ3MpOworICAgIHNjZW5lLT5wYWlu
dFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHksIHRyYW5zZm9ybS5tYXBSZWN0
KHJlY3QpLCBwYWludEZsYWdzKTsKIH0KIAogdm9pZCBRUmF3V2ViVmlldzo6c2VuZEtleUV2ZW50
KFFLZXlFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3Jhdy9xcmF3d2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Jhdy9xcmF3d2Vidmlld19wLmgKaW5kZXggMDE1ODE1YWQ4YzcwYTlkZTA1ZDgxYmE2YTYz
MDIxMGI3MjJjZjdmNC4uODFjNmIyNGVlOTI3ODgzMzM4YjFiZjRiNTIyZGI1ZTVmMDU1YjM1MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZp
ZXdfcC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2
aWV3X3AuaApAQCAtNDcsOCArNDcsOCBAQCBRVF9FTkRfTkFNRVNQQUNFCiAKIGNsYXNzIFFSYXdX
ZWJWaWV3UHJpdmF0ZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBMYXllclRyZWVSZW5k
ZXJlcjsKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJTY2VuZTsKIH0K
IAogY2xhc3MgUVJhd1dlYlZpZXdDbGllbnQgewpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNlbmRUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAg
V2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmUqIHRleHR1cmVNYXBwZXJTY2VuZSgpIGNvbnN0
OwogCiAgICAgUVJhd1dlYlZpZXdQcml2YXRlKiBkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzgzOGJiMGRiMjBkODc0MzRjOGE0MzFhNGYwNGY0ZmQ4NmE2NjBmYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0g
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdT
dG9yZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIpCi17Ci0gICAgaWYgKCFtX3N1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEZsb2F0UmVjdCB0aWxlUmVjdChtX3RpbGVSZWN0KTsKLSAgICB0aWxlUmVjdC5zY2FsZSgx
LiAvIG1fc2NhbGUpOwotICAgIGJvb2wgc2hvdWxkUmVzZXQgPSBmYWxzZTsKLSAgICBpZiAodGls
ZVJlY3QgIT0gcmVjdCgpKSB7Ci0gICAgICAgIHNldFJlY3QodGlsZVJlY3QpOwotICAgICAgICBz
aG91bGRSZXNldCA9IHRydWU7Ci0gICAgfQotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0
dXJlID0gdGhpcy0+dGV4dHVyZSgpOwotICAgIGlmICghdGV4dHVyZSkgewotICAgICAgICB0ZXh0
dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBzZXRUZXh0dXJl
KHRleHR1cmUuZ2V0KCkpOwotICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkud2lkdGgoKSA+PSBtX3Rp
bGVSZWN0LnNpemUoKS53aWR0aCgpICYmIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCku
aGVpZ2h0KCkgPj0gbV90aWxlUmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotICAgIGlmIChzaG91bGRS
ZXNldCkKLSAgICAgICAgdGV4dHVyZS0+cmVzZXQobV90aWxlUmVjdC5zaXplKCksIG1fc3VyZmFj
ZS0+c3VwcG9ydHNBbHBoYSgpKTsKLQotICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0
dXJlLCBtX3NvdXJjZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7Ci0gICAgbV9zdXJmYWNlLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVy
KGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0
KQotewotICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgbV90aWxlUmVjdCA9IHRp
bGVSZWN0OwotICAgIG1fc3VyZmFjZU9mZnNldCA9IG9mZnNldDsKLSAgICBtX3N1cmZhY2UgPSBi
dWZmZXI7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUodWlu
dDMyX3QgaWQsIGZsb2F0IHNjYWxlKQotewotICAgIG1fdGlsZXMuYWRkKGlkLCBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGUoc2NhbGUpKTsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUodWludDMyX3QgaWQpCi17Ci0g
ICAgQVNTRVJUKG1fdGlsZXMuY29udGFpbnMoaWQpKTsKLSAgICBtX3RpbGVzVG9SZW1vdmUuYWRk
KGlkKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlQWxsVGlsZXMo
KQotewotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0g
bV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
bV90aWxlc1RvUmVtb3ZlLmFkZChpdC0+a2V5KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTo6dXBkYXRlVGlsZSh1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBiYWNrQnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwotICAg
IEFTU0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+dmFsdWUuc2V0QmFja0J1ZmZl
cih0aWxlUmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKLX0KLQotUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNv
bnN0Ci17Ci0gICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnZhbHVl
LnRleHR1cmUoKTsKLSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgICAgICByZXR1cm4gdGV4
dHVyZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBzaXplOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKFZlY3RvcjxUZXh0
dXJlTWFwcGVyVGlsZSo+JiB0aWxlcywgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFw
VGV4dHVyZSogbWFzaywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdGlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRpbGVzW2ldLT5wYWludCh0
ZXh0dXJlTWFwcGVyLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIGNhbGN1bGF0ZUV4cG9zZWRU
aWxlRWRnZXMocmVjdCwgdGlsZXNbaV0tPnJlY3QoKSkpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1h
dHJpeCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnJlY3RUb1JlY3QocmVjdCgpLCB0YXJnZXRSZWN0KTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4
dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNr
KQotewotICAgIGlmIChtX3RpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVCghbV9zaXplLmlzWmVybygpKTsKLQotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+
IHRpbGVzVG9QYWludDsKLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiBwcmV2aW91c1Rp
bGVzVG9QYWludDsKLQotICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBh
aW50LCBpbiBjYXNlIHRoZSBvcGFjaXR5IGhhcyBjaGFuZ2VkLgotICAgIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBGbG9h
dFJlY3QgY292ZXJlZFJlY3Q7Ci0gICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVN
YXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOwotICAg
ICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgaWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7Ci0gICAgICAgICAgICB0aWxlc1RvUGFp
bnQuYXBwZW5kKCZ0aWxlKTsKLSAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRlKHRpbGUucmVj
dCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25s
eSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gsIG90aGVyd2lz
ZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KLSAgICAgICAgLy8gV2Ugc2hvdyB0aGUgcHJldmlv
dXMtc2NhbGUgdGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0aCBhbnkgY3Vy
cmVudC1zY2FsZSB0aWxlLgotICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYgY292ZXJlZFJl
Y3QuaW50ZXJzZWN0cyh0aWxlLnJlY3QoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBwcmV2aW91c1RpbGVzVG9QYWludC5hcHBlbmQoJnRpbGUpOwotICAgIH0KLQotICAgIC8v
IHRhcmdldFJlY3QgaXMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLCBzbyB3ZSBt
dXN0IGNvbXBhcmUgdHdvIHJlY3RzIG9uIHRoZSBjb250ZW50cyBjb29yZGluYXRlIHN5c3RlbS4K
LSAgICAvLyBTZWUgVGlsZWRCYWNraW5nU3RvcmUuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
YWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3Qo
dGFyZ2V0UmVjdCk7Ci0KLSAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHByZXZpb3VzVGls
ZXNUb1BhaW50LCB0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFz
aywgcmVjdCgpKTsKLSAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHRpbGVzVG9QYWludCwg
dGV4dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3QoKSk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBmbG9hdCBib3Jk
ZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVk
VHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJl
Y3QpOwotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0g
bV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAg
dGV4dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihib3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIGl0LT52
YWx1ZS5yZWN0KCksIGFkanVzdGVkVHJhbnNmb3JtKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBw
ZXIsIGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
KQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNm
b3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOwotICAgIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAg
ICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Rp
bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJh
d1JlcGFpbnRDb3VudGVyKHJlcGFpbnRDb3VudCwgYm9yZGVyQ29sb3IsIGl0LT52YWx1ZS5yZWN0
KCkubG9jYXRpb24oKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOwotfQotCi12b2lkIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyKQotewotICAgIEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciB0aWxlc1RvUmVtb3Zl
RW5kID0gbV90aWxlc1RvUmVtb3ZlLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDx1aW50MzJfdD46
Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IHRpbGVzVG9SZW1v
dmVFbmQ7ICsraXQpCi0gICAgICAgIG1fdGlsZXMucmVtb3ZlKCppdCk7Ci0gICAgbV90aWxlc1Rv
UmVtb3ZlLmNsZWFyKCk7Ci0KLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0
ZXJhdG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRp
bGVzRW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBl
cik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YTgxMjBlOWUzODIyNWY2NDA5NTQ2MDgzNjhmNDkyNDM0N2Q4MzRmYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAotI2RlZmluZSBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZV9oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9y
ZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKLQotY2xh
c3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJUaWxlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQotICAgICAgICA6IFRleHR1cmVNYXBwZXJUaWxlKFdlYkNv
cmU6OkZsb2F0UmVjdCgpKQotICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCi0gICAgewotICAgIH0K
LQotICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KLSAg
ICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIHNl
dEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+
IG1fc3VyZmFjZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsKLSAgICBXZWJD
b3JlOjpJbnRSZWN0IG1fdGlsZVJlY3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zdXJmYWNl
T2Zmc2V0OwotICAgIGZsb2F0IG1fc2NhbGU7Ci19OwotCi1jbGFzcyBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKLXB1
YmxpYzoKLSAgICB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBmbG9hdCk7Ci0gICAg
dm9pZCByZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCByZW1vdmVBbGxUaWxl
cygpOwotICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUpOyB9Ci0gICAgdm9pZCBjb21taXRUaWxlT3BlcmF0
aW9ucyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBl
cihXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFw
VGV4dHVyZSopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Qm9yZGVyKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXIqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlciosIGludCByZXBhaW50Q291bnQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25N
YXRyaXgmKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZSgpCi0gICAgICAgIDogbV9zY2FsZSgxLikKLSAgICB7IH0KLSAgICB2b2lkIHBhaW50VGlsZXNU
b1RleHR1cmVNYXBwZXIoVmVjdG9yPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlKj4mLCBXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3Jt
Rm9yUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdChXZWJDb3JlOjpGbG9h
dFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KLQotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJf
dCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRp
bGVNYXA7Ci0gICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwIG1fdGlsZXM7Ci0gICAg
SGFzaFNldDx1aW50MzJfdD4gbV90aWxlc1RvUmVtb3ZlOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6
ZSBtX3NpemU7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotI2VuZGlmCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKaW5kZXgg
MGNjMzQyOTk1OTZhMTFkNWM1OTNmZDE4Mjc4ZjUwZjRiN2MyZDRjYy4uNjU0NDQwNGM4MjZiMWY0
YzdmMmEwNjMyZWM5Y2YxMzYzYWU1NWRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAtMjIsMTMgKzIyLDEzIEBACiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5LmgiCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1
ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTGF5ZXJU
cmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+
CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8uaCIKQEAgLTQwLDEzICs0MCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCiAgICAgOiBtX2RyYXdpbmdB
cmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKLSAgICAsIG1fcmVuZGVyZXIoYWRvcHRSZWYobmV3
IExheWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKKyAgICAsIG1fdGV4dHVyZU1hcHBlclNjZW5lKGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2NlbmUodGhpcykpKQogewogfQogCiBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkKIHsK
LSAgICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKKyAgICBtX3RleHR1cmVNYXBwZXJTY2VuZS0+ZGV0
YWNoKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZp
ZXdwb3J0KCkKQEAgLTU2LDgxICs1Niw4MSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQog
ewotICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CisgICAgbV90ZXh0dXJl
TWFwcGVyU2NlbmUtPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVy
SUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGlu
YXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIu
Z2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlVGlsZSwgbV90ZXh0
dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZh
Y3RvcikpOwogICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0
LCB1cGRhdGVJbmZvKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
dXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRh
dGVJbmZvJiB1cGRhdGVJbmZvKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
dXBkYXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYg
dXBkYXRlSW5mbykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBMYXllclRy
ZWVSZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1
cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnVwZGF0ZVRpbGUsIG1fdGV4dHVy
ZU1hcHBlclNjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIFRleHR1cmVNYXBwZXJTY2VuZTo6
VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZvLmF0
bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJ
RCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQs
IHRpbGVJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6
cmVtb3ZlVGlsZSwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRs
ZSYgaGFuZGxlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpjcmVhdGVVcGRhdGVBdGxhcywgbV9yZW5kZXJlci5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRp
bmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JlRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXMsIG1fdGV4dHVyZU1hcHBlclNj
ZW5lLmdldCgpLCBhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUp
KSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVVwZGF0ZUF0bGFzLCBtX3JlbmRlcmVyLmdldCgpLCBhdGxh
c0lEKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpyZW1v
dmVVcGRhdGVBdGxhcywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGF0bGFzSUQpKTsKIH0K
IAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ29tcG9zaXRpbmdM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykKIHsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXJzLCBtX3JlbmRl
cmVyLmdldCgpLCBpZHMpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVy
U2NlbmU6OmNyZWF0ZUxheWVycywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkcykpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGlu
Z0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQogewotICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcnMsIG1fcmVu
ZGVyZXIuZ2V0KCksIGlkcykpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBw
ZXJTY2VuZTo6ZGVsZXRlTGF5ZXJzLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5nZXQoKSwgaWRzKSk7
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3Np
dGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCks
IGlkKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRS
b290TGF5ZXJJRCwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkKSk7CiB9CiAKIHZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShD
b29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQog
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0
YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgaW5mbykpOworICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJTdGF0ZSwgbV90ZXh0dXJlTWFwcGVyU2Nl
bmUuZ2V0KCksIGlkLCBpbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQs
IGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKIHsKLSAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9y
ZW5kZXJlci5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
VGV4dHVyZU1hcHBlclNjZW5lOjpzZXRMYXllckNoaWxkcmVuLCBtX3RleHR1cmVNYXBwZXJTY2Vu
ZS5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmls
dGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExh
eWVyRmlsdGVycywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVyRmlsdGVycywgbV90ZXh0
dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7CiB9CiAjZW5kaWYKIAogI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJl
bW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3JlbmRl
cmVyLmdldCgpLCBpZCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJT
Y2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0
KCksIGlkKSk7CiB9Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVD
dXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8mIHByb2dyYW1JbmZvKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZpbHRlclBy
b2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXll
clRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQo
KSwgaWQsIHByb2dyYW1JbmZvKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1h
cHBlclNjZW5lOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3RleHR1cmVNYXBwZXJTY2Vu
ZS5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3Zv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IElu
dFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCiB7Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2Vz
LCBtX3JlbmRlcmVyLmdldCgpKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1h
cHBlclNjZW5lOjpmbHVzaExheWVyQ2hhbmdlcywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCkp
KTsKICAgICB1cGRhdGVWaWV3cG9ydCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQog
ICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1Np
emUsIGNvdmVyZWRSZWN0KTsKQEAgLTE0Miw0MyArMTQyLDQzIEBAIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGNvbnRlCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZywgbV9y
ZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1
cmVNYXBwZXJTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5n
ZXQoKSwgaW1hZ2VJRCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
Ojp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBj
b25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJbWFnZUJhY2tpbmcsIG1f
cmVuZGVyZXIuZ2V0KCksIGltYWdlSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhh
bmRsZSkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnVw
ZGF0ZUltYWdlQmFja2luZywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGltYWdlSUQsIFdl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1fcmVuZGVyZXIu
Z2V0KCksIGltYWdlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVy
U2NlbmU6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1fdGV4dHVyZU1hcHBlclNjZW5lLmdl
dCgpLCBpbWFnZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdl
QmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6cmVtb3ZlSW1hZ2VCYWNraW5nLCBtX3RleHR1cmVN
YXBwZXJTY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1Np
emUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENv
bnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRDb250ZW50c1NpemUsIG1fdGV4
dHVyZU1hcHBlclNjZW5lLmdldCgpLCBjb250ZW50c1NpemUpKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCiB7Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQW5pbWF0
aW9ucywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVyQW5pbWF0aW9ucywgbV90ZXh0
dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7CiB9CiAKIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQp
CiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1h
dGlvbnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOworICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0QW5pbWF0aW9uc0xvY2tlZCwgbV90ZXh0
dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGxvY2tlZCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICAvLyBJbmZv
cm0gdGhlIHJlbmRlcmVyIHRvIGFkanVzdCB2aWV3cG9ydC1maXhlZCBsYXllcnMuCi0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1Jl
Y3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJlY3QpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZU
ZXh0dXJlTWFwcGVyU2NlbmU6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fdGV4dHVyZU1hcHBl
clNjZW5lLmdldCgpLCByZWN0KSk7CiAKICAgICBpZiAocmVjdCA9PSBtX2xhc3RTZW50VmlzaWJs
ZVJlY3QgJiYgdHJhamVjdG9yeVZlY3RvciA9PSBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcikK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVS
ZW5kZXJlcjo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBtX3JlbmRlcmVyLmdldCgpKSk7CisgICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpyZXF1ZXN0QW5pbWF0aW9u
RnJhbWUsIG1fdGV4dHVyZU1hcHBlclNjZW5lLmdldCgpKSk7CiAgICAgdXBkYXRlVmlld3BvcnQo
KTsKIH0KIApAQCAtMjA4LDMwICsyMDgsMzAgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBv
c2l0aW9uKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpk
aWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OmRpZENoYW5nZVNjcm9s
bFBvc2l0aW9uLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5nZXQoKSwgcG9zaXRpb24pKTsKIH0KIAog
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYg
Y2FudmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQogewogICAgIEdy
YXBoaWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBw
b3J0c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ2FudmFzLCBt
X3JlbmRlcmVyLmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUo
Y2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZUNhbnZhcywgbV90ZXh0dXJlTWFwcGVyU2Nl
bmUuZ2V0KCksIGlkLCBjYW52YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjYW52YXNT
aXplLCBzdXJmYWNlRmxhZ3MsIHRva2VuKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3Qg
ZnJvbnRCdWZmZXIpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOworICAg
IGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6c3luY0NhbnZhcywgbV90
ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwogfQogCiB2b2lkIENv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
ZGVzdHJveUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKKyAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OmRlc3Ryb3lDYW52YXMsIG1fdGV4dHVyZU1hcHBl
clNjZW5lLmdldCgpLCBpZCkpOwogfQogI2VuZGlmCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
aW50IHZhbHVlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpzZXRMYXllclJlcGFpbnRDb3VudCwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIHZhbHVlKSk7Cisg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRMYXllclJlcGFp
bnRDb3VudCwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkLCB2YWx1ZSkpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQpA
QCAtMjM5LDkgKzIzOSw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnB1
cmdlQmFja2luZ1N0b3JlcygpCiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tp
bmdTdG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAot
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKGNv
bnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEJhY2tncm91bmRDb2xvciwg
bV9yZW5kZXJlci5nZXQoKSwgY29sb3IpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0
dXJlTWFwcGVyU2NlbmU6OnNldEJhY2tncm91bmRDb2xvciwgbV90ZXh0dXJlTWFwcGVyU2NlbmUu
Z2V0KCksIGNvbG9yKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IGJkMGEzZWU0MDcwMmJkMjNmNzg2YTM5NTAxMmE4
NjI2OWFiOWMxMjkuLmMzZDEzNjgxOThmZWZhMzVjNTBkYjNhMDM0N2M3YjlkNzM0MjRiYjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApA
QCAtMjQsMTEgKzI0LDggQEAKIAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIkNvb3JkaW5h
dGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUg
IkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiU3Vy
ZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllci5oPgpAQCAtMzcsNjMgKzM0LDY2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9S
dW5Mb29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU2NlbmUuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJ
bmZvOwotY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7CitjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsK
K30KIAotY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgTGF5ZXJU
cmVlUmVuZGVyZXJDbGllbnQgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5IDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2Vu
ZUNsaWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4
cGxpY2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsK
LSAgICB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBv
c2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5
ZXJJbmZvJik7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZpcnR1
YWwgfkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CisgICAgdm9pZCBzZXRDb21wb3Np
dGluZ0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySW5mbyYpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNo
aWxkcmVuKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9p
ZCBzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdl
YkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJG
aWx0ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9ucyYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIHZvaWQg
Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZp
bHRlclByb2dyYW1JbmZvJik7CiAgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGlu
dCBpZCk7CiAjZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xh
eWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIGNyZWF0ZUNv
bXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+
Jik7CisgICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5
ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKICAgICB2b2lkIHNldENvbnRlbnRzU2l6
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50
c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYgdHJhamVjdG9yeVZlY3Rvcik7CiAgICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVy
ZWRSZWN0KTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJm
YWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9p
ZCB1cGRhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNl
VXBkYXRlSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKICAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxl
Jik7CiAgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLSAgICB2
b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2
b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBX
ZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIGNyZWF0ZUlt
YWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lk
IHVwZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBj
b25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOworICAgIHZvaWQgY2xlYXJJbWFn
ZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAg
ICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKTsKICAgICB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAg
ICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBwb3NpdGlvbik7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVD
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3Qg
V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKKyAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7CisgICAgdm9pZCBk
ZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CiAjZW5kaWYKLSAgICB2
b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsK
LSAgICBMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlbmRlcmVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwor
ICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
LCBpbnQgdmFsdWUpOworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZSogdGV4dHVyZU1h
cHBlclNjZW5lKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CiAgICAgdm9pZCBzZXRB
bmltYXRpb25zTG9ja2VkKGJvb2wpOwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKICAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwogI2VuZGlmCiAgICAgdm9pZCBz
ZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIAotICAgIC8vIExheWVy
VHJlZVJlbmRlcmVyQ2xpZW50IE1ldGhvZHMuCisgICAgLy8gVGV4dHVyZU1hcHBlclNjZW5lQ2xp
ZW50IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAgLTEw
NSwxMyArMTA1LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mKTsKIAogICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0Fy
ZWFQcm94eTsKLSAgICBSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CisgICAg
UmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZT4gbV90ZXh0dXJlTWFwcGVyU2NlbmU7
CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKICAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yOwogfTsKIAotfQorfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZgorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKIAogI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkubWVzc2FnZXMuaW4KaW5kZXggZTNlNzhiMzBiMDE5MjU1M2IwNmM2OTI4OTI4YjBhNmIzM2Q2
ZDZhZS4uMjFkYzI2MzQ1MDNjY2RlODc5MDYyZDc5MzIzYzZiYmFiZTRmNzJlYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
bWVzc2FnZXMuaW4KQEAgLTE5LDcgKzE5LDcgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKIG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IExlZ2FjeVJl
Y2VpdmVyIHsKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvKQorICAgIFNldENvbXBvc2l0aW5nTGF5
ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJ
bmZvKQogICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9y
PHVpbnQzMl90PiBjaGlsZHJlbikKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgU2V0Q29t
cG9zaXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMgZmlsdGVycykKQEAgLTMxLDggKzMxLDggQEAgbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldFJvb3RDb21wb3NpdGluZ0xh
eWVyKHVpbnQzMl90IGlkKQogICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50
MzJfdD4gaWRzKQogICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4g
aWRzKQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUlu
Zm8gdXBkYXRlSW5mbykKLSAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJLaXQ6OlN1cmZh
Y2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90
IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2Vi
Q29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5
ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRp
bGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQogICAgIFJlbW92
ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCiAgICAgQ3Jl
YXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1
cmZhY2U6OkhhbmRsZSBoYW5kbGUpCiAgICAgUmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9D
b29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNzBmYTk2M2E3ODU3ODIzMDBiZWJmY2YyZGM4MzgxMTg2NGE4YTFkZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw2OTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiTGF5ZXJUcmVl
UmVuZGVyZXIuaCIKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJMYXllci5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlIDxP
cGVuR0xTaGltcy5oPgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21G
aWx0ZXJQcm9ncmFtLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKLSNp
bmNsdWRlICJXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJDdXN0b21G
aWx0ZXJQcm9ncmFtLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaXNwYXRjaE9uTWFp
blRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBpZiAoaXNN
YWluVGhyZWFkKCkpCi0gICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxs
T25NYWluVGhyZWFkKGZ1bmN0aW9uKTsKLX0KLQotc3RhdGljIEZsb2F0UG9pbnQgYm91bmRlZFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSkK
LXsKLSAgICBmbG9hdCBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi54
KCksIDAuMGYpOwotICAgIHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9u
WCwgY29udGVudFNpemUud2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdC53aWR0aCgpKTsKLQot
ICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLnkoKSwg
MC4wZik7Ci0gICAgc2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25ZLCBj
b250ZW50U2l6ZS5oZWlnaHQoKSAtIHZpc2libGVDb250ZW50UmVjdC5oZWlnaHQoKSk7Ci0gICAg
cmV0dXJuIEZsb2F0UG9pbnQoc2Nyb2xsUG9zaXRpb25YLCBzY3JvbGxQb3NpdGlvblkpOwotfQot
Ci1zdGF0aWMgYm9vbCBsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciog
bGF5ZXIpCi17Ci0gICAgcmV0dXJuIGxheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+Y29u
dGVudHNBcmVWaXNpYmxlKCkgJiYgIWxheWVyLT5zaXplKCkuaXNFbXB0eSgpOwotfQotCi1MYXll
clRyZWVSZW5kZXJlcjo6TGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlUmVuZGVyZXJDbGllbnQq
IGNsaWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1faXNBY3RpdmUoZmFsc2Up
Ci0gICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgLCBt
X2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZS
QU1FKQotICAgICwgbV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZChmYWxzZSkKLSNlbmRpZgotICAg
ICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9zZXREcmF3c0JhY2tn
cm91bmQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0KLQotTGF5ZXJU
cmVlUmVuZGVyZXI6On5MYXllclRyZWVSZW5kZXJlcigpCi17Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QsIFRl
eHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKLXsKLSAgICBpZiAoIW1fdGV4dHVy
ZU1hcHBlcikgewotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVh
dGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHR1
cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZyh0cnVlKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVy
LT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAg
c3luY1JlbW90ZUNvbnRlbnQoKTsKLQotICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMo
KTsKLSAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7Ci0g
ICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0dXJl
TWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXll
cik7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0
VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIGlmICghbV9hbmltYXRp
b25zTG9ja2VkKQotICAgICAgICBsYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsK
LSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7Ci0gICAgbV90
ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3Qp
OwotCi0gICAgaWYgKG1fc2V0RHJhd3NCYWNrZ3JvdW5kKSB7Ci0gICAgICAgIFJHQkEzMiByZ2Jh
ID0gbWFrZVJHQkEzMkZyb21GbG9hdHMobV9iYWNrZ3JvdW5kQ29sb3IucmVkKCksCi0gICAgICAg
ICAgICBtX2JhY2tncm91bmRDb2xvci5ncmVlbigpLCBtX2JhY2tncm91bmRDb2xvci5ibHVlKCks
Ci0gICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvci5hbHBoYSgpICogb3BhY2l0eSk7Ci0gICAg
ICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIENvbG9yKHJnYmEpKTsKLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudFJvb3RM
YXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3Jt
KCkgIT0gbWF0cml4KSB7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3Bh
Y2l0eSk7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwot
ICAgICAgICBjdXJyZW50Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7Ci0gICAgfQotCi0gICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRDbGlwKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwotCi0g
ICAgaWYgKGxheWVyLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQot
ICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBk
YXRlVmlld3BvcnQsIHRoaXMpKTsKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RSkKLSAgICBpZiAobV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZCkgewotICAgICAgICBtX2FuaW1h
dGlvbkZyYW1lUmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFk
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjphbmltYXRpb25GcmFtZVJlYWR5LCB0aGlzKSk7Ci0g
ICAgfQotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjphbmltYXRpb25GcmFtZVJlYWR5KCkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQt
PmFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVx
dWVzdEFuaW1hdGlvbkZyYW1lKCkKLXsKLSAgICBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkID0g
dHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhp
Y3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgcGFpbnRlcikK
LXsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0g
VGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNj
ZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJlTW9kZSk7Ci0gICAgc3lu
Y1JlbW90ZUNvbnRlbnQoKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0
dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChwYWludGVyKTsK
LSAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0
KTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKLQotICAgIGlmIChtX3Nl
dERyYXdzQmFja2dyb3VuZCkKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xv
cihncmFwaGljc0NvbnRleHQuY2xpcEJvdW5kcygpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBt
X2JhY2tncm91bmRDb2xvcik7Ci0KLSAgICBsYXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVN
YXBwZXItPmVuZFBhaW50aW5nKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0Nv
bnRleHQoMCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZShj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKLXsKLSAgICBtX2NvbnRlbnRz
U2l6ZSA9IGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0Vmlz
aWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV92aXNpYmxl
Q29udGVudHNSZWN0ID0gcmVjdDsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRl
Vmlld3BvcnQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY2xp
ZW50KQotICAgICAgICBtX2NsaWVudC0+dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpCi17Ci0gICAgaWYg
KG1fZml4ZWRMYXllcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXhl
ZCBsYXllciBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQgYnkgdGhlIHdlYiBwcm9jZXNzIHdoZW4gd2Ug
dXBkYXRlIHRoZSB2aXNpYmxlIGNvbnRlbnRzIHJlY3QgLyBzY3JvbGwgcG9zaXRpb24uCi0gICAg
Ly8gSWYgd2Ugd2FudCB0aG9zZSBsYXllcnMgdG8gZm9sbG93IGFjY3VyYXRlbHkgdGhlIHZpZXdw
b3J0IHdoZW4gd2UgbW92ZSBiZXR3ZWVuIHRoZSB3ZWIgcHJvY2VzcyB1cGRhdGVzLCB3ZSBoYXZl
IHRvIG9mZnNldAotICAgIC8vIHRoZW0gYnkgdGhlIGRlbHRhIGJldHdlZW4gdGhlIGN1cnJlbnQg
cG9zaXRpb24gYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmlld3BvcnQgdXNlZCBmb3IgdGhlIGxh
c3QgbGF5b3V0LgotICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xs
UG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIG1fdmlzaWJsZUNvbnRl
bnRzUmVjdCwgbV9jb250ZW50c1NpemUpOwotICAgIEZsb2F0UG9pbnQgcmVuZGVyZWRTY3JvbGxQ
b3NpdGlvbiA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQ
b3NpdGlvbiwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7Ci0gICAgRmxv
YXRTaXplIGRlbHRhID0gc2Nyb2xsUG9zaXRpb24gLSByZW5kZXJlZFNjcm9sbFBvc2l0aW9uOwot
Ci0gICAgTGF5ZXJSYXdQdHJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7
Ci0gICAgZm9yIChMYXllclJhd1B0ck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQt
PnZhbHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQ
b2ludCYgcG9zaXRpb24pCi17Ci0gICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBv
c2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFj
ZSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICBHcmFwaGljc0xheWVyKiBs
YXllciA9IGxheWVyQnlJRChpZCk7Ci0gICAgQVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3RvcmVz
LmNvbnRhaW5zKGlkKSk7Ci0KLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5n
U3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKCkpOwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNC
YWNraW5nU3RvcmUpOwotCi0gICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZh
Y2Uoc3VyZmFjZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5n
U3RvcmUuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi17Ci0gICAgQVNTRVJU
KG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29u
dGFpbnMoaWQpKTsKLQotICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5maW5kKGlkKTsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBl
clN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLQot
ICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChmcm9udEJ1ZmZlcik7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQotewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQobV9zdXJmYWNlQmFja2lu
Z1N0b3Jlcy5jb250YWlucyhpZCkpOwotCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1v
dmUoaWQpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXll
ckJ5SUQoaWQpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRS
ZXBhaW50Q291bnQodmFsdWUpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXll
ckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVk
TGF5ZXJJRD4mIGNoaWxkSURzKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJC
eUlEKGlkKTsKLSAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7ICsraSkgewotICAgICAgICBDb29y
ZGluYXRlZExheWVySUQgY2hpbGRJRCA9IGNoaWxkSURzW2ldOwotICAgICAgICBHcmFwaGljc0xh
eWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5k
KGNoaWxkKTsKLSAgICB9Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLX0KLQot
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVy
RmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotCi0j
aWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dy
YW1zKGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7Ci19
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmls
dGVycy5vcGVyYXRpb25zKCkuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChvcGVyYXRpb24tPmdl
dE9wZXJhdGlvblR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tT3Bl
cmF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9u
KTsKLSAgICAgICAgQVNTRVJUKCFjdXN0b21PcGVyYXRpb24tPnByb2dyYW0oKSk7Ci0gICAgICAg
IEN1c3RvbUZpbHRlclByb2dyYW1NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZp
bHRlclByb2dyYW1zLmZpbmQoY3VzdG9tT3BlcmF0aW9uLT5wcm9ncmFtSUQoKSk7Ci0gICAgICAg
IEFTU0VSVChpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCkpOwotICAgICAgICBj
dXN0b21PcGVyYXRpb24tPnNldFByb2dyYW0oaXRlci0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLX0K
LQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykK
LXsKLSAgICBBU1NFUlQoIW1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuY29udGFpbnMoaWQpKTsKLSAg
ICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnNldChpZCwgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6
Y3JlYXRlKHByb2dyYW1JbmZvLnZlcnRleFNoYWRlclN0cmluZygpLCBwcm9ncmFtSW5mby5mcmFn
bWVudFNoYWRlclN0cmluZygpLCBwcm9ncmFtSW5mby5wcm9ncmFtVHlwZSgpLCBwcm9ncmFtSW5m
by5taXhTZXR0aW5ncygpLCBwcm9ncmFtSW5mby5tZXNoVHlwZSgpKSk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQotewotICAg
IEN1c3RvbUZpbHRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclBy
b2dyYW1zLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3Jh
bXMuZW5kKCkpOwotICAgIGlmIChtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1h
cHBlci0+cmVtb3ZlQ2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbShpdGVyLT52YWx1ZS5nZXQoKSk7
Ci0gICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoaXRlcik7Ci19Ci0jZW5kaWYgLy8g
RU5BQkxFKENTU19TSEFERVJTKQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0
YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGxh
eWVySW5mbykKLXsKLSAgICBBU1NFUlQobV9yb290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0
ZWRMYXllcklEKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0K
LSAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5
ZXJJbmZvLnJlcGxpY2EpKTsKLSAgICBsYXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJRElm
RXhpc3RzKGxheWVySW5mby5tYXNrKSk7Ci0KLSAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5
ZXJJbmZvLmFuY2hvclBvaW50KTsKLSAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBv
cyk7Ci0gICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwotCi0gICAgbGF5ZXItPnNl
dFRyYW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0Q2hpbGRyZW5U
cmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0QmFj
a2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOwotICAgIGxheWVyLT5z
ZXRDb250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOwotICAgIGxheWVyLT5z
ZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7Ci0gICAgbGF5ZXItPnNldENv
bnRlbnRzVG9Tb2xpZENvbG9yKGxheWVySW5mby5zb2xpZENvbG9yKTsKLSAgICBsYXllci0+c2V0
RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwotICAgIGxheWVyLT5zZXRDb250
ZW50c1Zpc2libGUobGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSk7Ci0gICAgdG9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllckluZm8uZml4
ZWRUb1ZpZXdwb3J0KTsKLSAgICBsYXllci0+c2V0U2hvd0RlYnVnQm9yZGVyKGxheWVySW5mby5z
aG93RGVidWdCb3JkZXJzKTsKLSAgICBsYXllci0+c2V0RGVidWdCb3JkZXIobGF5ZXJJbmZvLmRl
YnVnQm9yZGVyQ29sb3IsIGxheWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoKTsKLSAgICBsYXllci0+
c2V0U2hvd1JlcGFpbnRDb3VudGVyKGxheWVySW5mby5zaG93UmVwYWludENvdW50ZXIpOwotCi0g
ICAgaWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCi0gICAgICAgIG1fZml4ZWRMYXllcnMu
YWRkKGlkLCBsYXllcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShp
ZCk7Ci0KLSAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1h
Z2VJRCk7Ci0gICAgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUobGF5ZXIpOwotCi0gICAgLy8g
TmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgotICAgIGxheWVyLT5zZXRNYXNrc1RvQm91
bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3Vu
ZHMpOwotICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKLSAgICBsYXll
ci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKLX0KLQotR3JhcGhpY3NM
YXllciogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldExheWVyQnlJRElmRXhpc3RzKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCkKLXsKLSAgICByZXR1cm4gKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVy
SUQpID8gbGF5ZXJCeUlEKGlkKSA6IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNy
ZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQotewotICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBpZHMuc2l6ZSgpOyArK2luZGV4KQotICAg
ICAgICBjcmVhdGVMYXllcihpZHNbaW5kZXhdKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6Y3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIE93blB0cjxXZWJD
b3JlOjpHcmFwaGljc0xheWVyPiBuZXdMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8q
IGZhY3RvcnkgKi8sIHRoaXMpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobmV3
TGF5ZXIuZ2V0KCkpLT5zZXRIYXNPd25CYWNraW5nU3RvcmUoZmFsc2UpOwotICAgIG1fbGF5ZXJz
LmFkZChpZCwgbmV3TGF5ZXIucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6ZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklE
cykKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbGF5ZXJJRHMuc2l6ZSgp
OyArK2luZGV4KQotICAgICAgICBkZWxldGVMYXllcihsYXllcklEc1tpbmRleF0pOwotfQotCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5
ZXJJRCkKLXsKLSAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIgPSBtX2xheWVycy50YWtl
KGxheWVySUQpOwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXMucmVt
b3ZlKGxheWVyLmdldCgpKTsKLSAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92
ZShsYXllcklEKTsKLSNlbmRpZgotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290
TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBBU1NFUlQobGF5ZXJJ
RCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXJJ
RCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLQotICAgIG1fcm9vdExheWVySUQgPSBs
YXllcklEOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
Ci0gICAgQVNTRVJUKG1fcm9vdExheWVyLT5jaGlsZHJlbigpLmlzRW1wdHkoKSk7Ci0gICAgbV9y
b290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
cHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikK
LXsKLSAgICBpZiAoIWxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShncmFwaGljc0xheWVyKSkg
ewotICAgICAgICByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChncmFwaGljc0xheWVyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGdy
YXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVCYWNraW5n
U3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIGlmICht
X2JhY2tpbmdTdG9yZXMuY29udGFpbnMoZ3JhcGhpY3NMYXllcikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7Ci0gICAgYmFja2luZ1N0b3JlLT5zZXRTaXpl
KGdyYXBoaWNzTGF5ZXItPnNpemUoKSk7Ci0gICAgbV9iYWNraW5nU3RvcmVzLmFkZChncmFwaGlj
c0xheWVyLCBiYWNraW5nU3RvcmUpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIo
Z3JhcGhpY3NMYXllciktPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpOwotfQotCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQotewotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLnRha2UoZ3JhcGhpY3NMYXllcik7Ci0g
ICAgaWYgKCFiYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllciktPnNldEJhY2tpbmdTdG9yZSgwKTsKLX0K
LQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNp
emUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQoZ3JhcGhp
Y3NMYXllcik7Ci0gICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5z
ZXRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgZmxvYXQgc2NhbGUpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQo
bGF5ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3Jl
KTsKLSAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7Ci0gICAgcmVz
ZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJ
RCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBt
X2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7Ci0gICAg
cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOwotICAgIG1fYmFja2luZ1N0
b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCi17Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsK
LSAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLQotICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5hdGxhc0lEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9z
dXJmYWNlcy5lbmQoKSk7Ci0KLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1
cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRpbGVSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZS5vZmZz
ZXQpOwotICAgIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKGxheWVyKTsKLSAgICBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Ci19Ci0K
LXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQotewotICAgIEFTU0VS
VCghbV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lEKSk7Ci0gICAgbV9zdXJmYWNlcy5hZGQoYXRs
YXNJRCwgc3VyZmFjZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgQVNTRVJUKG1fc3VyZmFjZXMuY29udGFp
bnMoYXRsYXNJRCkpOwotICAgIG1fc3VyZmFjZXMucmVtb3ZlKGF0bGFzSUQpOwotfQotCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBpbWFnZUlEKQotewotICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5z
KGltYWdlSUQpKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdT
dG9yZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1faW1hZ2VCYWNr
aW5ncy5hZGQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQotewot
ICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIEltYWdl
QmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsK
LSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52
YWx1ZTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlIHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgot
ICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsK
LSAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+c2l6ZSgpKTsKLSAg
ICAvLyBTZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0
ZUltYWdlKCkKLSAgICBBU1NFUlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkpOwotICAg
IGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBzdXJmYWNl
LCByZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZm
ZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkK
LXsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBJ
bWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJ
RCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBp
dC0+dmFsdWU7Ci0gICAgYmFja2luZ1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOwotICAgIG1fYmFj
a2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5z
KGltYWdlSUQpKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJl
ZmVycyBhIGRhbmdsaW5nIHBvaW50ZXIuCi0gICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBw
ZW5kKG1faW1hZ2VCYWNraW5ncy50YWtlKGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChpbWFnZUlEID09
IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRD
b250ZW50c1RvTWVkaWEoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSW1hZ2VCYWNr
aW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAg
IEFTU0VSVChpdCAhPSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250
ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQotewotICAgIG1fcmVsZWFz
ZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNv
bW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKLXsKLSAgICBIYXNoU2V0PFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3Rv
cmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0
aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCkt
PmNvbW1pdFRpbGVPcGVyYXRpb25zKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQotewotICAgIG1fcmVuZGVyZWRDb250ZW50
c1Njcm9sbFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9u
OwotCi0gICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2Fu
IHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgotICAg
IHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOwotCi0gICAgbV9yb290TGF5ZXItPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Ci0gICAgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9y
ZU9wZXJhdGlvbnMoKTsKLSAgICByZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgp
OwotCi0gICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhl
IHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KLSAg
ICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4
dEZyYW1lLCB0aGlzKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRG
cmFtZSgpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+cmVuZGVyTmV4
dEZyYW1lKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXllcigp
Ci17Ci0gICAgaWYgKG1fcm9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RM
YXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZhY3RvcnkgKi8sIHRoaXMpOwotICAg
IG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+
c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQo
RmxvYXRQb2ludDNEKDAsIDAsIDApKTsKLQotICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBu
b3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCi0gICAgbV9y
b290TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7Ci0KLSAgICBBU1NFUlQobV90
ZXh0dXJlTWFwcGVyKTsKLSAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQo
KSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLX0KLQotdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6c3luY1JlbW90ZUNvbnRlbnQoKQotewotICAgIC8vIFdlIGVucXVl
dWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWly
ZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KLSAgICBlbnN1cmVSb290TGF5ZXIoKTsKLQotICAgIFZl
Y3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gcmVuZGVyUXVldWU7Ci0gICAgYm9vbCBjYWxsZWRPbk1h
aW5UaHJlYWQgPSBXVEY6OmlzTWFpblRocmVhZCgpOwotICAgIGlmICghY2FsbGVkT25NYWluVGhy
ZWFkKQotICAgICAgICBtX3JlbmRlclF1ZXVlTXV0ZXgubG9jaygpOwotICAgIHJlbmRlclF1ZXVl
LnN3YXAobV9yZW5kZXJRdWV1ZSk7Ci0gICAgaWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCi0gICAg
ICAgIG1fcmVuZGVyUXVldWVNdXRleC51bmxvY2soKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbmRlclF1ZXVlW2ldKCk7
Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAg
IG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwotICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNs
ZWFyKCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5jbGVhcigpOwotI2VuZGlmCi0gICAgbV9zdXJmYWNlcy5jbGVhcigpOwotCi0gICAgbV9y
b290TGF5ZXIuY2xlYXIoKTsKLSAgICBtX3Jvb3RMYXllcklEID0gSW52YWxpZENvb3JkaW5hdGVk
TGF5ZXJJRDsKLSAgICBtX2xheWVycy5jbGVhcigpOwotICAgIG1fZml4ZWRMYXllcnMuY2xlYXIo
KTsKLSAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXMuY2xl
YXIoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLQot
ICAgIHNldEFjdGl2ZShmYWxzZSk7Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3JlcywgdGhpcykpOwotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQotewotICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgbV9jbGllbnQtPnB1cmdlQmFja2luZ1N0b3JlcygpOwotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
LCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyKGxheWVyQnlJRChpZCkpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFu
aW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9w
ZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyAr
K2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0
KGkpKTsKLSAgICAgICAgICAgIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKCpmaWx0
ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBsYXllci0+
c2V0QW5pbWF0aW9ucyhhbmltYXRpb25zKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLXsKLSAgICBtX2FuaW1hdGlvbnNMb2Nr
ZWQgPSBsb2NrZWQ7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCi17Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2NsaWVudCA9IDA7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBm
dW5jdGlvbikKLXsKLSAgICBpZiAoIW1faXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVy
UXVldWVNdXRleCk7Ci0gICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOwotfQotCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYg
KG1faXNBY3RpdmUgPT0gYWN0aXZlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBIYXZlIHRv
IGNsZWFyIHJlbmRlciBxdWV1ZSBpbiBib3RoIGNhc2VzLgotICAgIC8vIElmIHRoZXJlIGFyZSBz
b21lIHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFjdGl2YXRpb24gdGhlbiB0aG9zZSB1cGRhdGVz
IGFyZSBmcm9tIHByZXZpb3VzIGluc3RhbmNlIG9mIHBhaW50IG5vZGUKLSAgICAvLyBhbmQgY2Fu
bm90IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCi0gICAgbV9yZW5k
ZXJRdWV1ZS5jbGVhcigpOwotICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7Ci0gICAgaWYgKG1faXNB
Y3RpdmUpCi0gICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJl
cjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKLXsKLSAg
ICBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRy
ZWVSZW5kZXJlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTM4MWUzM2M2Y2Vl
YTFiZWY3Y2FkNTZiNGJlNWU4ZTgxODJmZGIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXllclRyZWVSZW5kZXJlcl9oCi0jZGVm
aW5lIExheWVyVHJlZVJlbmRlcmVyX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5m
by5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
TGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
UnVuTG9vcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVu
Y3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW07Ci1jbGFzcyBDdXN0b21GaWx0ZXJQ
cm9ncmFtSW5mbzsKLWNsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKLX0KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOwotY2xhc3MgQ29vcmRpbmF0
ZWRMYXllckluZm87Ci0KLWNsYXNzIExheWVyVHJlZVJlbmRlcmVyQ2xpZW50IHsKLXB1YmxpYzoK
LSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgdmlydHVhbCB2b2lkIGFu
aW1hdGlvbkZyYW1lUmVhZHkoKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Vmlld3BvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgPSAwOwotfTsKLQotY2xhc3Mg
TGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVl
UmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Ci1wdWJsaWM6
Ci0gICAgc3RydWN0IFRpbGVVcGRhdGUgewotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNvdXJj
ZVJlY3Q7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHVpbnQz
Ml90IGF0bGFzSUQ7Ci0gICAgICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldDsKLSAgICAgICAg
VGlsZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHRpbGUsIHVpbnQzMl90IGF0bGFzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
bmV3T2Zmc2V0KQotICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKLSAgICAgICAgICAg
ICwgdGlsZVJlY3QodGlsZSkKLSAgICAgICAgICAgICwgYXRsYXNJRChhdGxhcykKLSAgICAgICAg
ICAgICwgb2Zmc2V0KG5ld09mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLSAg
ICBleHBsaWNpdCBMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVSZW5kZXJlckNsaWVudCopOwot
ICAgIHZpcnR1YWwgfkxheWVyVHJlZVJlbmRlcmVyKCk7Ci0gICAgdm9pZCBwYWludFRvQ3VycmVu
dEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpQYWludEZs
YWdzID0gMCk7Ci0gICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0
aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKLSNpZiBVU0UoR1JBUEhJ
Q1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFj
ZT4pOwotICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZy
b250QnVmZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsK
LSNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklE
LCBpbnQgdmFsdWUpOwotCi0gICAgdm9pZCBkZXRhY2goKTsKLSAgICB2b2lkIGFwcGVuZFVwZGF0
ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0KLSAgICAvLyBUaGUgcGFpbnRpbmcgdGhyZWFk
IG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gdXNlIGJlbG93IHR3byBtZXRob2RzLCBiZWNh
dXNlIHR3byBtZXRob2RzIGFjY2VzcyBtZW1iZXJzIHRoYXQgdGhlIG1haW4gdGhyZWFkIG1hbmFn
ZXMuIFNlZSBtX2NsaWVudC4KLSAgICAvLyBDdXJyZW50bHksIFFRdWlja1dlYlBhZ2U6OnVwZGF0
ZVBhaW50Tm9kZSgpIGxvY2tzIHRoZSBtYWluIHRocmVhZCBiZWZvcmUgY2FsbGluZyBib3RoIG1l
dGhvZHMuCi0gICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBzZXRBY3RpdmUo
Ym9vbCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRM
YXllcklEPiYpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQp
OwotICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZl
Y3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklE
LCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi0gICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhj
b25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lk
IGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21G
aWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShp
bnQgaWQpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwot
ICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+KTsKLSAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90
IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkU3VyZmFjZT4pOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7
Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2dy
b3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7Ci0gICAgdm9pZCBzZXREcmF3c0JhY2tn
cm91bmQoYm9vbCBlbmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KLQot
I2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmlt
YXRpb25GcmFtZSgpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogbGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2xheWVycy5jb250YWlucyhpZCkpOwotICAgICAgICBBU1NFUlQoaWQgIT0gSW52YWxp
ZENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOwot
ICAgIH0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBnZXRMYXllckJ5SURJZkV4aXN0cyhD
b29yZGluYXRlZExheWVySUQpOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXll
cigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHN5bmNSZW1vdGVD
b250ZW50KCk7Ci0gICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7Ci0KLSAg
ICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQu
Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6
R3JhcGhpY3NMYXllciosIGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNo
UmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFIHsgfQotCi0gICAgdm9pZCBkaXNwYXRj
aE9uTWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1cGRhdGVW
aWV3cG9ydCgpOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lk
IGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKLSNlbmRpZgotICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1l
KCk7Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIHZvaWQgY3JlYXRlTGF5
ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVk
TGF5ZXJJRCk7Ci0KLSAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgcmVt
b3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKLSAgICB2b2lkIGVuc3VyZVJvb3RM
YXllcigpOwotICAgIHZvaWQgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsK
LQotICAgIHZvaWQgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoV2ViQ29yZTo6R3JhcGhpY3NM
YXllciopOwotICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopOwotICAgIHZvaWQgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXll
clNpemUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotCi0gICAgV2ViQ29yZTo6RmxvYXRTaXpl
IG1fY29udGVudHNTaXplOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50
c1JlY3Q7Ci0KLSAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1h
aW4gdGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQotICAgIFZlY3RvcjxGdW5j
dGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKLSAgICBNdXRleCBtX3JlbmRlclF1ZXVlTXV0
ZXg7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVy
OwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VC
YWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiA+IG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzOwotCi0gICAgdHlwZWRlZiBI
YXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU+ID4gQmFja2luZ1N0b3JlTWFwOwotICAgIEJhY2tpbmdTdG9yZU1hcCBtX2JhY2tpbmdT
dG9yZXM7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBSZWZQdHI8V2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdT
dG9yZU1hcDsKLSAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwIG1fc3VyZmFjZUJhY2tpbmdTdG9y
ZXM7Ci0jZW5kaWYKLQotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCAvKiBhdGxhc0lEICov
LCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+IFN1cmZhY2VNYXA7Ci0gICAgU3VyZmFjZU1h
cCBtX3N1cmZhY2VzOwotCi0gICAgLy8gQmVsb3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5
IG9ubHkgdGhlIG1haW4gdGhyZWFkLiBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUg
bWFpbiB0aHJlYWQgdG8gYWNjZXNzIGJvdGggbWVtYmVycy4KLSAgICBMYXllclRyZWVSZW5kZXJl
ckNsaWVudCogbV9jbGllbnQ7Ci0gICAgYm9vbCBtX2lzQWN0aXZlOwotCi0gICAgT3duUHRyPFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFw
PENvb3JkaW5hdGVkTGF5ZXJJRCwgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+ID4gTGF5
ZXJNYXA7Ci0gICAgTGF5ZXJNYXAgbV9sYXllcnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3Jk
aW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyUmF3UHRyTWFwOwot
ICAgIExheWVyUmF3UHRyTWFwIG1fZml4ZWRMYXllcnM7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklE
IG1fcm9vdExheWVySUQ7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3JlbmRlcmVkQ29udGVu
dHNTY3JvbGxQb3NpdGlvbjsKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fcGVuZGluZ1JlbmRl
cmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsK
LSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgYm9vbCBtX2FuaW1hdGlv
bkZyYW1lUmVxdWVzdGVkOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Q29sb3IgbV9iYWNrZ3JvdW5k
Q29sb3I7Ci0gICAgYm9vbCBtX3NldERyYXdzQmFja2dyb3VuZDsKLQotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8V2ViQ29yZTo6Q3VzdG9t
RmlsdGVyUHJvZ3JhbT4gPiBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOwotICAgIEN1c3RvbUZpbHRl
clByb2dyYW1NYXAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKLSNlbmRpZgotfTsKLQotfTsKLQot
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIExheWVyVHJl
ZVJlbmRlcmVyX2gKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1BhZ2VDbGllbnRCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNs
aWVudEJhc2UuY3BwCmluZGV4IDJlZmRiZDBlMTM5ZWIwMDg4NWY5MWFlZjliMjhjOTAzYmZkYzFj
M2QuLjUxMTU0YmM4MzdjOWZhYzM0OTViYjQzNmQ2NGE5YTU5ZTNhMGNmZTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCkBAIC0zMCw3ICsz
MCw2IEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJFd2tW
aWV3LmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCi0jaW5jbHVkZSAiTGF5
ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRy
b2xsZXJDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmll
d3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAppbmRleCBmMTFkMDhkZDA5OWM4M2IwZWM4Yjdj
NWFlZDA5ZWQ2NGFkY2NlMTZjLi5lNzAzOTk1ODc3OTc0MjAyYWViNDdhYzk0YzE0OTgwM2I5ZWIy
MDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9y
dENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAK
IAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAi
RXdrVmlldy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUGFn
ZVZpZXdwb3J0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU2NlbmUuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKQEAgLTU2LDcgKzU2LDcgQEAgRHJhd2luZ0FyZWFQcm94eSogUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZHJhd2luZ0FyZWEoKSBjb25zdAogCiB2b2lkIFBh
Z2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFJlbmRlcmVyQWN0aXZlKGJvb2wgYWN0
aXZlKQogewotICAgIGRyYXdpbmdBcmVhKCktPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
KCktPmxheWVyVHJlZVJlbmRlcmVyKCktPnNldEFjdGl2ZShhY3RpdmUpOworICAgIGRyYXdpbmdB
cmVhKCktPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPnRleHR1cmVNYXBwZXJTY2Vu
ZSgpLT5zZXRBY3RpdmUoYWN0aXZlKTsKIH0KIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVy
Q2xpZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcAppbmRleCBmNTM2YzQyMTc2NWYyYjY2NjZjNjMw
ZDMxYmEzMzQyOGE5NTY5NzI5Li5jZTczMzM3YjM2NjAzYWI4ZGYyNTc4YWY4NjQxN2EwZTA5MmQ2
MTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dO
b2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2Rl
LmNwcApAQCAtMjEsMTEgKzIxLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
UXRXZWJQYWdlU0dOb2RlLmgiCiAKLSNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2lu
Y2x1ZGUgPFF0R3VpL1FQb2x5Z29uRj4KICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0l0ZW0+CiAj
aW5jbHVkZSA8UXRRdWljay9RUXVpY2tXaW5kb3c+CiAjaW5jbHVkZSA8UXRRdWljay9RU0dTaW1w
bGVSZWN0Tm9kZT4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJTY2VuZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDxwcml2YXRl
L3FzZ3JlbmRlcm5vZGVfcC5oPgogCkBAIC0zNSwxMCArMzUsMTAgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIENvbnRlbnRzU0dOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogcHVi
bGljOgotICAgIENvbnRlbnRzU0dOb2RlKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJl
bmRlcmVyKQotICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisgICAgQ29udGVudHNTR05v
ZGUoUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2NlbmU+IHNjZW5lKQorICAgICAgICA6IG1fdGV4
dHVyZU1hcHBlclNjZW5lKHNjZW5lKQogICAgIHsKLSAgICAgICAgbGF5ZXJUcmVlUmVuZGVyZXIo
KS0+c2V0QWN0aXZlKHRydWUpOworICAgICAgICB0ZXh0dXJlTWFwcGVyU2NlbmUoKS0+c2V0QWN0
aXZlKHRydWUpOwogICAgIH0KIAogICAgIHZpcnR1YWwgU3RhdGVGbGFncyBjaGFuZ2VkU3RhdGVz
KCkKQEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbWlycm9yZWQgPSBw
cm9qZWN0aW9uICYmICgqcHJvamVjdGlvbikoMCwgMCkgKiAoKnByb2plY3Rpb24pKDEsIDEpIC0g
KCpwcm9qZWN0aW9uKSgwLCAxKSAqICgqcHJvamVjdGlvbikoMSwgMCkgPiAwOwogCiAgICAgICAg
IC8vIEZJWE1FOiBTdXBwb3J0IG5vbi1yZWN0YW5ndWxhciBjbGlwcGluZ3MuCi0gICAgICAgIGxh
eWVyVHJlZVJlbmRlcmVyKCktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHJlbmRlck1hdHJpeCwg
aW5oZXJpdGVkT3BhY2l0eSgpLCBjbGlwUmVjdCgpLCBtaXJyb3JlZCA/IFRleHR1cmVNYXBwZXI6
OlBhaW50aW5nTWlycm9yZWQgOiAwKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlclNjZW5lKCktPnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KHJlbmRlck1hdHJpeCwgaW5oZXJpdGVkT3BhY2l0eSgpLCBj
bGlwUmVjdCgpLCBtaXJyb3JlZCA/IFRleHR1cmVNYXBwZXI6OlBhaW50aW5nTWlycm9yZWQgOiAw
KTsKICAgICB9CiAKICAgICB+Q29udGVudHNTR05vZGUoKQogICAgIHsKLSAgICAgICAgbGF5ZXJU
cmVlUmVuZGVyZXIoKS0+cHVyZ2VHTFJlc291cmNlcygpOworICAgICAgICB0ZXh0dXJlTWFwcGVy
U2NlbmUoKS0+cHVyZ2VHTFJlc291cmNlcygpOwogICAgIH0KIAogICAgIGNvbnN0IFF0V2ViUGFn
ZVNHTm9kZSogcGFnZU5vZGUoKSBjb25zdApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBwYXJlbnQ7CiAgICAgfQogCi0gICAgTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVy
VHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorICAgIFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZSogdGV4dHVyZU1hcHBlclNjZW5lKCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBRUmVj
dEYgY2xpcFJlY3QoKSBjb25zdApAQCAtMTI2LDcgKzEyNiw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiByZXN1bHRSZWN0OwogICAgIH0KIAotICAgIFJlZlB0cjxMYXllclRyZWVSZW5kZXJl
cj4gbV9yZW5kZXJlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lPiBt
X3RleHR1cmVNYXBwZXJTY2VuZTsKIH07CiAKIFF0V2ViUGFnZVNHTm9kZTo6UXRXZWJQYWdlU0dO
b2RlKCkKQEAgLTE1MCwxMyArMTUwLDEzIEBAIHZvaWQgUXRXZWJQYWdlU0dOb2RlOjpzZXRTY2Fs
ZShmbG9hdCBzY2FsZSkKICAgICBzZXRNYXRyaXgobWF0cml4KTsKIH0KIAotdm9pZCBRdFdlYlBh
Z2VTR05vZGU6OnNldFJlbmRlcmVyKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRl
cmVyKQordm9pZCBRdFdlYlBhZ2VTR05vZGU6OnNldFRleHR1cmVNYXBwZXJTY2VuZShQYXNzUmVm
UHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZT4gdGV4dHVyZU1hcHBlclNjZW5lKQogewot
ICAgIGlmIChtX2NvbnRlbnRzTm9kZSAmJiBtX2NvbnRlbnRzTm9kZS0+bGF5ZXJUcmVlUmVuZGVy
ZXIoKSA9PSByZW5kZXJlcikKKyAgICBpZiAobV9jb250ZW50c05vZGUgJiYgbV9jb250ZW50c05v
ZGUtPnRleHR1cmVNYXBwZXJTY2VuZSgpID09IHRleHR1cmVNYXBwZXJTY2VuZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgZGVsZXRlIG1fY29udGVudHNOb2RlOwotICAgIG1fY29udGVudHNOb2Rl
ID0gbmV3IENvbnRlbnRzU0dOb2RlKHJlbmRlcmVyKTsKKyAgICBtX2NvbnRlbnRzTm9kZSA9IG5l
dyBDb250ZW50c1NHTm9kZSh0ZXh0dXJlTWFwcGVyU2NlbmUpOwogICAgIC8vIFRoaXMgc2V0cyB0
aGUgcGFyZW50IG5vZGUgb2YgdGhlIGNvbnRlbnQgdG8gUXRXZWJQYWdlU0dOb2RlLgogICAgIGFw
cGVuZENoaWxkTm9kZShtX2NvbnRlbnRzTm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgKaW5kZXggMWJjYzI4ZTQzOTkwMmY1OWZkYzg0OWQ0
MDc2ODZlMTUwMzgxODhiMi4uMzgwY2ExNGYyNmViNjRiNTdmZTE0OGE4Mzc0ZmIxZjhhN2RmZTE5
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaApA
QCAtMjksMTcgKzI5LDIwIEBAIGNsYXNzIFFRdWlja0l0ZW07CiBjbGFzcyBRU0dTaW1wbGVSZWN0
Tm9kZTsKIFFUX0VORF9OQU1FU1BBQ0UKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGV4
dHVyZU1hcHBlclNjZW5lOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29udGVu
dHNTR05vZGU7Ci1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKIAogY2xhc3MgUXRXZWJQYWdlU0dO
b2RlIDogcHVibGljIFFTR1RyYW5zZm9ybU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUXRX
ZWJQYWdlU0dOb2RlKCk7CiAgICAgICAgIHZvaWQgc2V0QmFja2dyb3VuZChjb25zdCBRUmVjdEYm
LCBjb25zdCBRQ29sb3ImKTsKICAgICAgICAgdm9pZCBzZXRTY2FsZShmbG9hdCk7Ci0gICAgICAg
IHZvaWQgc2V0UmVuZGVyZXIoUGFzc1JlZlB0cjxMYXllclRyZWVSZW5kZXJlcj4pOworICAgICAg
ICB2b2lkIHNldFRleHR1cmVNYXBwZXJTY2VuZShQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTY2VuZT4pOwogICAgICAgICBxcmVhbCBkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QgeyBy
ZXR1cm4gbV9kZXZpY2VQaXhlbFJhdGlvOyB9CiAgICAgICAgIHZvaWQgc2V0RGV2aWNlUGl4ZWxS
YXRpbyhxcmVhbCBkZXZpY2VQaXhlbFJhdGlvKSB7IG1fZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmlj
ZVBpeGVsUmF0aW87IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9y
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JlZmNkYWM4NTIwMTJjZmU5M2M4
N2E1YTkzMjFhODFkNzUzNTg0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkFy
ZWFBbGxvY2F0b3IuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUFyZWFBbGxvY2F0b3I6OkFy
ZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fc2l6ZShz
aXplKQotICAgICwgbV9taW5BbGxvYygxLCAxKQotICAgICwgbV9tYXJnaW4oMCwgMCkKLXsKLX0K
LQotQXJlYUFsbG9jYXRvcjo6fkFyZWFBbGxvY2F0b3IoKQotewotfQotCi12b2lkIEFyZWFBbGxv
Y2F0b3I6OmV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6
ZSA9IG1fc2l6ZS5leHBhbmRlZFRvKHNpemUpOwotfQotCi12b2lkIEFyZWFBbGxvY2F0b3I6OmV4
cGFuZEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgbV9zaXplICs9IHNp
emU7Ci19Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JikKLXsKLX0KLQotaW50IEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBBcmVhQWxsb2NhdG9yOjpyb3VuZEFs
bG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAgICBpbnQg
d2lkdGggPSBzaXplLndpZHRoKCkgKyBtX21hcmdpbi53aWR0aCgpOwotICAgIGludCBoZWlnaHQg
PSBzaXplLmhlaWdodCgpICsgbV9tYXJnaW4uaGVpZ2h0KCk7Ci0gICAgaW50IGV4dHJhID0gd2lk
dGggJSBtX21pbkFsbG9jLndpZHRoKCk7Ci0gICAgaWYgKGV4dHJhKQotICAgICAgICB3aWR0aCAr
PSBtX21pbkFsbG9jLndpZHRoKCkgLSBleHRyYTsKLSAgICBleHRyYSA9IGhlaWdodCAlIG1fbWlu
QWxsb2MuaGVpZ2h0KCk7Ci0gICAgaWYgKGV4dHJhKQotICAgICAgICBoZWlnaHQgKz0gbV9taW5B
bGxvYy5oZWlnaHQoKSAtIGV4dHJhOwotCi0gICAgcmV0dXJuIFdlYkNvcmU6OkludFNpemUod2lk
dGgsIGhlaWdodCk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9j
YXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotICAgIDogQXJlYUFsbG9jYXRvcihX
ZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhzaXplKSkKLXsKLSAgICBtX3Jvb3QgPSBuZXcgTm9kZSgp
OwotICAgIG1fcm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsK
LSAgICBtX3Jvb3QtPnBhcmVudCA9IDA7Ci0gICAgbV9yb290LT5sZWZ0ID0gMDsKLSAgICBtX3Jv
b3QtPnJpZ2h0ID0gMDsKLSAgICBtX25vZGVDb3VudCA9IDE7Ci0gICAgc2V0TWluaW11bUFsbG9j
YXRpb24oV2ViQ29yZTo6SW50U2l6ZSg4LCA4KSk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9y
Ojp+R2VuZXJhbEFyZWFBbGxvY2F0b3IoKQotewotICAgIGZyZWVOb2RlKG1fcm9vdCk7Ci19Ci0K
LXZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmZyZWVOb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAg
aWYgKG5vZGUpIHsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7Ci0gICAgICAgIGZyZWVO
b2RlKG5vZGUtPnJpZ2h0KTsKLSAgICB9Ci0gICAgZGVsZXRlIG5vZGU7Ci19Ci0KLXZvaWQgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQot
ewotICAgIEFyZWFBbGxvY2F0b3I6OmV4cGFuZChXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhzaXpl
KSk7Ci0KLSAgICBpZiAobV9yb290LT5yZWN0LnNpemUoKSA9PSBtX3NpemUpCi0gICAgICAgIHJl
dHVybjsgLy8gTm8gY2hhbmdlLgotCi0gICAgaWYgKCFtX3Jvb3QtPmxlZnQgJiYgbV9yb290LT5s
YXJnZXN0RnJlZS53aWR0aCgpID4gMCkgewotICAgICAgICAvLyBObyBhbGxvY2F0aW9ucyBoYXZl
IG9jY3VycmVkLCBzbyBqdXN0IGFkanVzdCB0aGUgcm9vdCBzaXplLgotICAgICAgICBtX3Jvb3Qt
PnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpOwotICAgICAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXplOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWRkIGV4dHJhIG5vZGVzIGFib3ZlIHRoZSBjdXJyZW50
IHJvb3QgdG8gZXhwYW5kIHRoZSB0cmVlLgotICAgIE5vZGUqIG9sZFJvb3QgPSBtX3Jvb3Q7Ci0g
ICAgU3BsaXQgc3BsaXQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpID49IG1fc2l6ZS5oZWlnaHQo
KSkKLSAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICBlbHNlCi0gICAgICAgIHNwbGl0ID0g
U3BsaXRPblk7Ci0KLSAgICB3aGlsZSAobV9yb290LT5yZWN0LnNpemUoKSAhPSBtX3NpemUpIHsK
LSAgICAgICAgaWYgKG1fcm9vdC0+cmVjdC53aWR0aCgpID09IG1fc2l6ZS53aWR0aCgpKQotICAg
ICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgZWxzZSBpZiAobV9yb290LT5yZWN0
LmhlaWdodCgpID09IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRP
blg7Ci0gICAgICAgIE5vZGUqIHBhcmVudCA9IG5ldyBOb2RlKCk7Ci0gICAgICAgIE5vZGUqIHJp
Z2h0ID0gbmV3IE5vZGUoKTsKLSAgICAgICAgbV9ub2RlQ291bnQgKz0gMjsKLSAgICAgICAgbV9y
b290LT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHBhcmVudC0+cGFyZW50ID0gMDsKLSAgICAg
ICAgcGFyZW50LT5sZWZ0ID0gbV9yb290OwotICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gcmlnaHQ7
Ci0gICAgICAgIHBhcmVudC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Quc2l6ZSgpOwotICAg
ICAgICByaWdodC0+cGFyZW50ID0gcGFyZW50OwotICAgICAgICByaWdodC0+bGVmdCA9IDA7Ci0g
ICAgICAgIHJpZ2h0LT5yaWdodCA9IDA7Ci0gICAgICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IG1f
cm9vdC0+cmVjdC5zaXplKCk7Ci0gICAgICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgewotICAg
ICAgICAgICAgcGFyZW50LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgp
LCBtX3Jvb3QtPnJlY3QueSgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgp
ICogMiwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0g
V2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpICsgbV9yb290LT5yZWN0LndpZHRoKCks
IG1fcm9vdC0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCks
IG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBw
YXJlbnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+
cmVjdC55KCksCi0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+
cmVjdC5oZWlnaHQoKSAqIDIpOwotICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJ
bnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCkgKyBtX3Jvb3QtPnJlY3Qu
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5y
ZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfQotICAgICAgICBzcGxpdCA9IChzcGxpdCA9PSBTcGxp
dE9uWCA/IFNwbGl0T25ZIDogU3BsaXRPblgpOwotICAgICAgICBtX3Jvb3QgPSBwYXJlbnQ7Ci0g
ICAgfQotICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG9sZFJvb3QpOwotfQotCi1zdGF0aWMgaW5saW5l
IGJvb2wgZml0c1dpdGhpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplMSwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgc2l6ZTIpCi17Ci0gICAgcmV0dXJuIHNpemUxLndpZHRoKCkgPD0gc2l6
ZTIud2lkdGgoKSAmJiBzaXplMS5oZWlnaHQoKSA8PSBzaXplMi5oZWlnaHQoKTsKLX0KLQotV2Vi
Q29yZTo6SW50UmVjdCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kZWQgPSByb3Vu
ZEFsbG9jYXRpb24oc2l6ZSk7Ci0gICAgcm91bmRlZCA9IFdlYkNvcmU6Om5leHRQb3dlck9mVHdv
KHJvdW5kZWQpOwotICAgIGlmIChyb3VuZGVkLndpZHRoKCkgPD0gMCB8fCByb3VuZGVkLndpZHRo
KCkgPiBtX3NpemUud2lkdGgoKQotICAgICAgICB8fCByb3VuZGVkLmhlaWdodCgpIDw9IDAgfHwg
cm91bmRlZC5oZWlnaHQoKSA+IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkludFJlY3QoKTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVG
cm9tTm9kZShyb3VuZGVkLCBtX3Jvb3QpOwotICAgIGlmIChwb2ludC54KCkgPj0gMCkKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OkludFJlY3QocG9pbnQsIHNpemUpOwotICAgIHJldHVybiBXZWJD
b3JlOjpJbnRSZWN0KCk7Ci19Ci0KLVdlYkNvcmU6OkludFBvaW50IEdlbmVyYWxBcmVhQWxsb2Nh
dG9yOjphbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIE5vZGUq
IG5vZGUpCi17Ci0gICAgLy8gRmluZCB0aGUgYmVzdCBub2RlIHRvIGluc2VydCBpbnRvLCB3aGlj
aCBzaG91bGQgYmUKLSAgICAvLyBhIG5vZGUgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHVudXNl
ZCBzcGFjZSB0aGF0IGlzCi0gICAgLy8gYmlnIGVub3VnaCB0byBjb250YWluIHRoZSByZXF1ZXN0
ZWQgc2l6ZS4KLSAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAvLyBHbyBkb3duIGEgbGV2ZWwg
YW5kIGRldGVybWluZSBpZiB0aGUgbGVmdCBvciByaWdodAotICAgICAgICAvLyBzdWItdHJlZSBj
b250YWlucyB0aGUgYmVzdCBjaGFuY2Ugb2YgYWxsb2NhdGlvbi4KLSAgICAgICAgTm9kZSogbGVm
dCA9IG5vZGUtPmxlZnQ7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+cmlnaHQ7Ci0gICAg
ICAgIGlmIChsZWZ0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgbGVmdC0+bGFyZ2VzdEZyZWUpKSB7Ci0g
ICAgICAgICAgICBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZy
ZWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCkgPCBy
aWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKQotICAgICAgICAgICAgICAgICAgICB8fCBsZWZ0LT5s
YXJnZXN0RnJlZS5oZWlnaHQoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBUaGUgbGFyZ2VzdEZyZWUgdmFsdWVzIG1heSBiZSBhIGxpdHRs
ZSBvdmVyc2l6ZWQsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRyeSB0aGUgbGVmdCBzdWIt
dHJlZSBhbmQgdGhlbiB0aGUgcmlnaHQgc3ViLXRyZWUuCi0gICAgICAgICAgICAgICAgICAgIFdl
YkNvcmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShzaXplLCBsZWZ0KTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBvaW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVG
cm9tTm9kZShzaXplLCByaWdodCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IG5vZGUgPSByaWdodDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG5vZGUg
PSBsZWZ0OwotICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmln
aHQtPmxhcmdlc3RGcmVlKSkKLSAgICAgICAgICAgIG5vZGUgPSByaWdodDsKLSAgICAgICAgZWxz
ZSBpZiAobGVmdCB8fCByaWdodCkgewotICAgICAgICAgICAgLy8gTmVpdGhlciBzdWItbm9kZSBo
YXMgZW5vdWdoIHNwYWNlIHRvIGFsbG9jYXRlIGZyb20uCi0gICAgICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6SW50UG9pbnQoLTEsIC0xKTsKLSAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKHNp
emUsIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBz
cGxpdCB0aGlzIG5vZGUgaW50byBzbWFsbGVyIHBpZWNlcz8KLSAgICAgICAgICAgIFNwbGl0IHNw
bGl0OwotICAgICAgICAgICAgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndp
ZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAg
ICAgICAgICAgICAgIC8vIFNwbGl0IGluIGVpdGhlciBkaXJlY3Rpb246IGNob29zZSB0aGUgaW52
ZXJzZSBvZgotICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgbm9kZSdzIHNwbGl0IGRpcmVj
dGlvbiB0byB0cnkgdG8gYmFsYW5jZQotICAgICAgICAgICAgICAgIC8vIG91dCB0aGUgd2FzdGVk
IHNwYWNlIGFzIGZ1cnRoZXIgc3ViZGl2aXNpb25zIGhhcHBlbi4KLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+cGFyZW50Ci0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnBhcmVudC0+bGVm
dC0+cmVjdC54KCkgPT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC54KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9k
ZS0+cGFyZW50KQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJlY3Qud2lkdGgoKSA+PSBub2RlLT5yZWN0LmhlaWdo
dCgpKQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAg
ICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lkdGgoKSAq
IDIsIHNpemUuaGVpZ2h0KCkpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBTcGxpdCBhbG9uZyB0aGUgWCBkaXJlY3Rpb24uCi0gICAgICAgICAgICAgICAgc3BsaXQg
PSBTcGxpdE9uWDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJ
bnRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJl
ZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBTcGxpdCBhbG9uZyB0aGUgWSBkaXJlY3Rpb24uCi0g
ICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgLy8gQ2Fubm90IHNwbGl0IGZ1cnRoZXIgLSBhbGxvY2F0ZSB0aGlzIG5v
ZGUuCi0gICAgICAgICAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXpl
KDAsIDApOwotICAgICAgICAgICAgICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlLT5yZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBub2RlLCB0aGVuIGdvIGFyb3VuZCBhZ2FpbiB1c2lu
ZyB0aGUgbGVmdCBzdWItdHJlZS4KLSAgICAgICAgICAgIG5vZGUgPSBzcGxpdE5vZGUobm9kZSwg
c3BsaXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2Fubm90IHBvc3NpYmx5
IGZpdCBpbnRvIHRoaXMgbm9kZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwotfQotCi1HZW5lcmFsQXJl
YUFsbG9jYXRvcjo6Tm9kZSogR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnNwbGl0Tm9kZQotICAgIChO
b2RlKiBub2RlLCBTcGxpdCBzcGxpdCkKLXsKLSAgICBOb2RlKiBsZWZ0ID0gbmV3IE5vZGUoKTsK
LSAgICBOb2RlKiByaWdodCA9IG5ldyBOb2RlKCk7Ci0gICAgbV9ub2RlQ291bnQgKz0gMjsKLSAg
ICBsZWZ0LT5wYXJlbnQgPSBub2RlOwotICAgIGxlZnQtPmxlZnQgPSAwOwotICAgIGxlZnQtPnJp
Z2h0ID0gMDsKLSAgICByaWdodC0+cGFyZW50ID0gbm9kZTsKLSAgICByaWdodC0+bGVmdCA9IDA7
Ci0gICAgcmlnaHQtPnJpZ2h0ID0gMDsKLSAgICBub2RlLT5sZWZ0ID0gbGVmdDsKLSAgICBub2Rl
LT5yaWdodCA9IHJpZ2h0OwotCi0gICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAg
IGxlZnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0
LnkoKSwKLSAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVp
Z2h0KCkpOwotICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobGVmdC0+cmVj
dC5tYXhYKCksIG5vZGUtPnJlY3QueSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgp
IC8gMiwgbm9kZS0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGVmdC0+
cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJlY3QueSgpLAot
ICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7
Ci0gICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwg
bGVmdC0+cmVjdC5tYXhZKCksCi0gICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUt
PnJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0KLSAgICBsZWZ0LT5sYXJnZXN0RnJlZSA9IGxl
ZnQtPnJlY3Quc2l6ZSgpOwotICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5yZWN0LnNp
emUoKTsKLSAgICBub2RlLT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5sYXJnZXN0RnJlZTsKLSAgICBy
ZXR1cm4gbGVmdDsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6dXBkYXRlTGFyZ2Vz
dEZyZWUoTm9kZSogbm9kZSkKLXsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5wYXJlbnQpKSB7
Ci0gICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gV2ViQ29yZTo6SW50U2l6ZSgKLSAgICAgICAg
ICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCksIG5vZGUtPnJpZ2h0
LT5sYXJnZXN0RnJlZS53aWR0aCgpKSwKLSAgICAgICAgICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQt
Pmxhcmdlc3RGcmVlLmhlaWdodCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkp
Ci0gICAgICAgICAgICApOwotICAgIH0KLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6
cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIC8vIExvY2F0ZSB0
aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLgotICAgIE5vZGUqIG5v
ZGUgPSBtX3Jvb3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9u
KCk7Ci0gICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+
bGVmdC0+cmVjdC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+bGVm
dDsKLSAgICAgICAgZWxzZSBpZiAobm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29u
dGFpbnMocG9pbnQpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBl
bHNlIGlmIChub2RlLT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkg
b3V0c2lkZSB0aGUgdHJlZS4KLSAgICB9Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBNYXJrIHRoZSBub2RlIGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRo
cm91Z2ggdGhlIHRyZWUKLSAgICAvLyByZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50
aWwgd2UgcmVhY2ggYSBzaWJsaW5nCi0gICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCi0g
ICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKLSAgICB3aGlsZSAobm9k
ZS0+cGFyZW50KSB7Ci0gICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgewot
ICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUt
PnBhcmVudC0+cmlnaHQtPnJlY3Quc2l6ZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2Vz
dEZyZWUgIT0gbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OwotICAgICAg
ICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwot
ICAgICAgICBtX25vZGVDb3VudCAtPSAyOwotICAgICAgICBub2RlLT5sZWZ0ID0gMDsKLSAgICAg
ICAgbm9kZS0+cmlnaHQgPSAwOwotICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJl
Y3Quc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9y
cyBoYXZlIHRoZSBjb3JyZWN0ICJsYXJnZXN0IGZyZWUgc2l6ZSIuCi0gICAgdXBkYXRlTGFyZ2Vz
dEZyZWUobm9kZSk7Ci19Ci0KLWludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX25vZGVDb3VudCAqIHNpemVvZihOb2RlKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0FyZWFBbGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMTY1NmJiOGFlMTAwNjg4YTM0NjYyNmU0ZDMzMzNjNjBiOWU4OTM4Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQotICoKLSAqLwotCi0jaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAotI2RlZmluZSBBcmVhQWxs
b2NhdG9yX2gKLQotI2luY2x1ZGUgPEludFBvaW50Lmg+Ci0jaW5jbHVkZSA8SW50UmVjdC5oPgot
I2luY2x1ZGUgPEludFNpemUuaD4KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotaW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVy
KQotewotICAgIC8vIFRoaXMgaXMgYSBmYXN0IHRyaWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBm
b3IgYW4gaW50ZWdlci4KLSAgICAtLW51bWJlcjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7
Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsK
LSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDg7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsK
LSAgICBudW1iZXIrKzsKLSAgICByZXR1cm4gbnVtYmVyOwotfQotCi1pbmxpbmUgSW50U2l6ZSBu
ZXh0UG93ZXJPZlR3byhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIHJldHVybiBJbnRTaXpl
KG5leHRQb3dlck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0
KCkpKTsKLX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0K
LWNsYXNzIEFyZWFBbGxvY2F0b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IEFyZWFBbGxvY2F0
b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgfkFyZWFBbGxvY2F0b3Io
KTsKLQotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fbWluQWxsb2M7IH0KLSAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUpIHsgbV9taW5BbGxvYyA9IHNpemU7IH0KLQotICAgIFdlYkNv
cmU6OkludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAgICB2b2lk
IHNldE1hcmdpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBt
YXJnaW47IH0KLQotICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwotICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi0gICAg
dmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwotCi0gICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAg
IFdlYkNvcmU6OkludFNpemUgbV9zaXplOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9taW5BbGxv
YzsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWFyZ2luOwotCi0gICAgV2ViQ29yZTo6SW50U2l6
ZSByb3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0OwotfTsKLQot
Y2xhc3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgOiBwdWJsaWMgQXJlYUFsbG9jYXRvciB7Ci1wdWJs
aWM6Ci0gICAgZXhwbGljaXQgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpOwotICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7Ci0KLSAgICB2b2lk
IGV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBh
bGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCByZWxlYXNlKGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKTsKLSAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJpdmF0
ZToKLSAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07Ci0KLSAgICBzdHJ1Y3Qg
Tm9kZSB7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsKLSAgICAgICAgV2ViQ29yZTo6
SW50U2l6ZSBsYXJnZXN0RnJlZTsKLSAgICAgICAgTm9kZSogcGFyZW50OwotICAgICAgICBOb2Rl
KiBsZWZ0OwotICAgICAgICBOb2RlKiByaWdodDsKLSAgICB9OwotCi0gICAgTm9kZSogbV9yb290
OwotICAgIGludCBtX25vZGVDb3VudDsKLQotICAgIHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUq
KTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBhbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBOb2RlKik7Ci0gICAgTm9kZSogc3BsaXROb2RlKE5vZGUqLCBTcGxpdCk7Ci0g
ICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSopOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNl
bmRpZiAvLyBBcmVhQWxsb2NhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjM2Q3OGIxOGYxYjA4Nzk4ZTY1YTU5MThhNGYyMDQyMDNhZjEwMDU0Li4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYxICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
IENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gQ29w
eXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0gQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
Ci0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCi0KLSNpbmNsdWRlICJC
YWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1l
c3NhZ2VzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0jaW5jbHVkZSAiRmxvYXRR
dWFkLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0j
aW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHd0Zi9UZW1wb3Jh
cnlDaGFuZ2UuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgQ29v
cmRpbmF0ZWRMYXllcklEIHRvQ29vcmRpbmF0ZWRMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQotewotICAgIHJldHVybiBsYXllciA/IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVy
KS0+aWQoKSA6IDA7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFu
Z2VMYXllclN0YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKLSAg
ICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRo
aXMpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQW5pbWF0
aW9ucygpCi17Ci0gICAgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9IHRydWU7Ci0gICAgaWYgKGNs
aWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVuKCkKLXsK
LSAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAg
ICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0KLQotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VG
aWx0ZXJzKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gdHJ1ZTsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwotfQot
I2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VJbWFnZUJh
Y2tpbmcoKQotewotICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IHRydWU7Ci0gICAgaWYg
KGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2li
bGVSZWN0KCkKLXsKLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gdHJ1ZTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVW
aXNpYmxlUmVjdCgpOwotICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxl
UmVjdCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlR2Vv
bWV0cnkoKQotewotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBzZXRTaG91bGRVcGRh
dGVWaXNpYmxlUmVjdCgpOwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBHcmFw
aGljc0xheWVyKGNsaWVudCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2lzUHVyZ2luZyhmYWxz
ZSkKLSNlbmRpZgotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQotICAgICwg
bV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4o
dHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZpbHRlcnModHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3lu
Y0ltYWdlQmFja2luZyh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyh0cnVlKQot
ICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdDb250ZW50c1Nj
YWxlQWRqdXN0bWVudChmYWxzZSkKLSAgICAsIG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVu
dChmYWxzZSkKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAsIG1faXNWYWxpZENhbnZh
cyhmYWxzZSkKLSAgICAsIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbihOb25lKQotI2VuZGlmCi0g
ICAgLCBtX2Nvb3JkaW5hdG9yKDApCi0gICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigw
KQotICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCi0gICAgLCBtX2FuaW1hdGlvblN0YXJ0
ZWRUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVk
VGltZXJGaXJlZCkKLXsKLSAgICBzdGF0aWMgQ29vcmRpbmF0ZWRMYXllcklEIG5leHRMYXllcklE
ID0gMTsKLSAgICBtX2lkID0gbmV4dExheWVySUQrKzsKLX0KLQotQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjp+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCkKLXsKLSAgICBpZiAobV9jb29yZGlu
YXRvcikgewotICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgbV9jb29yZGlu
YXRvci0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIEFTU0VSVCghbV9jb29yZGluYXRl
ZEltYWdlQmFja2luZyAmJiAhbV9tYWluQmFja2luZ1N0b3JlKTsKLSAgICB3aWxsQmVEZXN0cm95
ZWQoKTsKLX0KLQotYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNv
bnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQotewotICAgIGJvb2wgb2sgPSBH
cmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7Ci0gICAgaWYgKCFvaykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGlj
c0xheWVyKiBsYXllcikKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Ci0g
ICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQotewot
ICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOwotICAgIGRp
ZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5n
KQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOwot
ICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBz
aWJsaW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxp
bmcpOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNz
TGF5ZXIqIG5ld0NoaWxkKQotewotICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNl
Q2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQotewotICAg
IGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpKQotICAgICAgICBwYXJlbnRMYXllci0+ZGlkQ2hhbmdl
Q2hpbGRyZW4oKTsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBv
aW50JiBwKQotewotICAgIGlmIChwb3NpdGlvbigpID09IHApCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHApOwotICAgIGRpZENoYW5nZUdlb21ldHJ5
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChj
b25zdCBGbG9hdFBvaW50M0QmIHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7Ci0g
ICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlmICh0aGlzLT5zaXpl
KCkgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6
ZShzaXplKTsKLQotICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnNl
dFNpemUoc2l6ZSk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdCkKLXsKLSAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5z
Zm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsKLSAgICBpZiAoY2hpbGRyZW5U
cmFuc2Zvcm0oKSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpz
ZXRDaGlsZHJlblRyYW5zZm9ybSh0KTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBiKQotewot
ICAgIGlmIChwcmVzZXJ2ZXMzRCgpID09IGIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wg
YikKLXsKLSAgICBpZiAobWFza3NUb0JvdW5kcygpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAg
ICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGIpOwotICAgIGRpZENoYW5nZUdlb21l
dHJ5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRl
bnQoYm9vbCBiKQotewotICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQotICAgICAgICByZXR1
cm47Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOwotCi0gICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNWaXNpYmxlKGJvb2wgYikKLXsKLSAgICBpZiAoY29udGVudHNBcmVWaXNpYmxlKCkg
PT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlz
aWJsZShiKTsKLSAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zZXRD
b250ZW50c1Zpc2libGUoYik7Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCi17
Ci0gICAgaWYgKGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3Vw
cG9ydHNBbHBoYSghYik7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7
Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKLXsKLSAgICBpZiAoYmFja2Zh
Y2VWaXNpYmlsaXR5KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXll
cjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3Bh
Y2l0eSkKLXsKLSAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKGNvbnRlbnRzUmVj
dCgpID09IHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzUmVjdChyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCi17Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fY2FudmFzUGxhdGZvcm1MYXllcikKLSAgICAg
ICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIHw9IFN5bmNDYW52YXM7Ci0jZW5kaWYKLQotICAg
IGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhp
cyk7Ci0KLSAgICBhZGRSZXBhaW50UmVjdChjb250ZW50c1JlY3QoKSk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIpCi17Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1f
Y2FudmFzUGxhdGZvcm1MYXllcikgewotICAgICAgICBBU1NFUlQobV9jYW52YXNUb2tlbi5pc1Zh
bGlkKCkpOwotICAgICAgICBpZiAoIXBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fcGVu
ZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBEZXN0cm95Q2FudmFzOwotICAgICAgICAgICAgbV9wZW5k
aW5nQ2FudmFzT3BlcmF0aW9uICY9IH5DcmVhdGVDYW52YXM7Ci0gICAgICAgIH0gIGVsc2UgaWYg
KChtX2NhbnZhc1NpemUgIT0gcGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKSkgfHwg
KG1fY2FudmFzVG9rZW4gIT0gcGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSkp
IHsKLSAgICAgICAgICAgIC8vIG1fY2FudmFzVG9rZW4gY2FuIGJlIGRpZmZlcmVudCB0byBwbGF0
Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpLCBldmVuIGlmIG1fY2FudmFzUGxhdGZv
cm1MYXllciBlcXVhbHMgcGxhdGZvcm1MYXllci4KLSAgICAgICAgICAgIG1fcGVuZGluZ0NhbnZh
c09wZXJhdGlvbiB8PSBSZWNyZWF0ZUNhbnZhczsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChwbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgbV9wZW5kaW5nQ2FudmFzT3Bl
cmF0aW9uIHw9IENyZWF0ZUFuZFN5bmNDYW52YXM7Ci0gICAgfQotCi0gICAgbV9jYW52YXNQbGF0
Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICAvLyBtX2NhbnZhc1Rva2VuIGlzIHVwZGF0
ZWQgb25seSBoZXJlLiBJbiBkZXRhaWwsIHdoZW4gR3JhcGhpY3NDb250ZXh0M0QgaXMgY2hhbmdl
ZCBvciByZXNoYXBlZCwgbV9jYW52YXNUb2tlbiBpcyBjaGFuZ2VkIGFuZCBzZXRDb250ZW50c1Rv
Q2FudmFzKCkgaXMgYWx3YXlzIGNhbGxlZC4KLSAgICBtX2NhbnZhc1NpemUgPSBtX2NhbnZhc1Bs
YXRmb3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCkg
OiBJbnRTaXplKCk7Ci0gICAgbV9jYW52YXNUb2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllciA/
IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSA6IEdyYXBoaWNz
U3VyZmFjZVRva2VuKCk7Ci0gICAgQVNTRVJUKCEoIW1fY2FudmFzVG9rZW4uaXNWYWxpZCgpICYm
IG1fY2FudmFzUGxhdGZvcm1MYXllcikpOwotCi0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBj
bGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHBsYXRmb3JtTGF5ZXIpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBuZXdGaWx0ZXJzKQotewotICAgIGlmIChmaWx0ZXJzKCkgPT0gbmV3RmlsdGVy
cykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGlkQ2hhbmdlRmlsdGVycygpOwotICAgIHJl
dHVybiBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpOwotfQotI2VuZGlmCi0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKG1fbGF5ZXJJbmZvLnNvbGlkQ29sb3IgPT0g
Y29sb3IpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2xheWVySW5mby5zb2xpZENvbG9yID0gY29s
b3I7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wgc2hvdykKLXsKLSAgICBpZiAoaXNT
aG93aW5nRGVidWdCb3JkZXIoKSA9PSBzaG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFw
aGljc0xheWVyOjpzZXRTaG93RGVidWdCb3JkZXIoc2hvdyk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFp
bnRDb3VudGVyKGJvb2wgc2hvdykKLXsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIo
KSA9PSBzaG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93
UmVwYWludENvdW50ZXIoc2hvdyk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBp
bWFnZSkKLXsKLSAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlID8g
aW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAwOwotICAgIGlmIChuZXdOYXRp
dmVJbWFnZVB0cikgewotICAgICAgICAvLyBUaGlzIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24g
dGhhdCBwb2ludGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxpZCB3YXkg
dG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KLSAgICAgICAgLy8gVGhpcyBhc3N1bXB0
aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBhbmQgRUZMLgotICAgICAgICBpZiAobmV3TmF0aXZlSW1h
Z2VQdHIgPT0gbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgbV9jb21wb3Np
dGVkTmF0aXZlSW1hZ2VQdHIgPSBuZXdOYXRpdmVJbWFnZVB0cjsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IDA7Ci0gICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUlt
YWdlUHRyID0gMDsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1h
Z2UoaW1hZ2UpOwotICAgIGRpZENoYW5nZUltYWdlQmFja2luZygpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQot
ewotICAgIGlmIChsYXllciA9PSBtYXNrTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKGxheWVyKTsKLQotICAgIGlmICghbGF5ZXIpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRTaXplKHNpemUoKSk7Ci0gICAgbGF5ZXIt
PnNldENvbnRlbnRzVmlzaWJsZShjb250ZW50c0FyZVZpc2libGUoKSk7Ci0gICAgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKiBjb29yZGluYXRlZExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIobGF5ZXIpOwotICAgIGNvb3JkaW5hdGVkTGF5ZXItPmRpZENoYW5nZUxheWVyU3RhdGUo
KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKEltYWdlKiBpbWFnZSkgY29u
c3QKLXsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlbnVtIHsga01heERpbWVuc3Rpb25Gb3JEaXJlY3RDb21w
b3NpdGluZyA9IDIwMDAgfTsKLSAgICBpZiAoaW1hZ2UtPndpZHRoKCkgPiBrTWF4RGltZW5zdGlv
bkZvckRpcmVjdENvbXBvc2l0aW5nIHx8IGltYWdlLT5oZWlnaHQoKSA+IGtNYXhEaW1lbnN0aW9u
Rm9yRGlyZWN0Q29tcG9zaXRpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09IHJlcGxp
Y2FMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBs
aWNhdGVkQnlMYXllcihsYXllcik7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBz
ZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0g
ICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKLQot
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLQotICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOwot
fQotCi1Db29yZGluYXRlZExheWVySUQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1faWQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAg
IGlmICghbV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKSB7Ci0gICAgICAg
IGlmIChjbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVk
KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciogbWFzayA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1hc2tMYXllcigp
KSkKLSAgICAgICAgbWFzay0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgp
OwotCi0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAgcmVwbGljYS0+Zmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgbV9jb29yZGluYXRv
ci0+c3luY0ZpeGVkTGF5ZXJzKCk7Ci0KLSAgICBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6
ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShy
ZWN0KTsKLX0KLQotQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiB0b0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4obGF5ZXIpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0No
aWxkcmVuKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxz
ZTsKLSAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZElEczsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkSURz
LmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7Ci0KLSAgICBtX2Nv
b3JkaW5hdG9yLT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7Ci19Ci0KLSNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0Zp
bHRlcnMoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5z
eW5jTGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcoKQotewotICAgIGlmICghbV9z
aG91bGRTeW5jSW1hZ2VCYWNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5j
SW1hZ2VCYWNraW5nID0gZmFsc2U7Ci0KLSAgICBpZiAobV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQ
dHIpIHsKLSAgICAgICAgQVNTRVJUKCFzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpOwotICAgICAg
ICBBU1NFUlQobV9jb21wb3NpdGVkSW1hZ2UpOwotCi0gICAgICAgIGJvb2wgaW1hZ2VJbnN0YW5j
ZVJlcGxhY2VkID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZyAmJiAobV9jb29yZGluYXRlZElt
YWdlQmFja2luZy0+aWQoKSAhPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRChtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSkpOwotICAgICAgICBpZiAo
aW1hZ2VJbnN0YW5jZVJlcGxhY2VkKQotICAgICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lm
TmVlZGVkKCk7Ci0KLSAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKSB7Ci0g
ICAgICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nID0gbV9jb29yZGluYXRvci0+Y3Jl
YXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwotICAgICAg
ICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+YWRkSG9zdCh0aGlzKTsKLSAgICAgICAg
ICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5pZCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+bWFya0Rp
cnR5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgp
OwotCi0gICAgLy8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9sYXllckluZm8uaW1hZ2VJ
RC4KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXll
clN0YXRlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZh
bHNlOwotICAgIG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgp
OwotCi0gICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5
KCk7Ci0gICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9y
bSgpOwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsK
LSAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xh
eWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKLSAgICBtX2xheWVySW5mby5j
b250ZW50c1Zpc2libGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKLSAgICBtX2xheWVySW5mby5t
YXNrID0gdG9Db29yZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZv
Lm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0
eSA9IG9wYWNpdHkoKTsKLSAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNE
KCk7Ci0gICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxp
Y2FMYXllcigpKTsKLSAgICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLQot
ICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50OwotICAg
IG1fbGF5ZXJJbmZvLnBvcyA9IG1fYWRqdXN0ZWRQb3NpdGlvbjsKLSAgICBtX2xheWVySW5mby5z
aXplID0gbV9hZGp1c3RlZFNpemU7Ci0KLSAgICBtX2xheWVySW5mby5zaG93RGVidWdCb3JkZXJz
ID0gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsKLSAgICBpZiAobV9sYXllckluZm8uc2hvd0RlYnVn
Qm9yZGVycykKLSAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Ci0gICAgbV9sYXllcklu
Zm8uc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKLQotICAg
IG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9y
JiBjb2xvciwgZmxvYXQgd2lkdGgpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJJbmZvLnNob3dEZWJ1
Z0JvcmRlcnMpOwotICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29sb3IgPSBjb2xvcjsKLSAg
ICBtX2xheWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX3Nob3Vs
ZFN5bmNBbmltYXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFN5bmNBbmlt
YXRpb25zID0gZmFsc2U7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllckFuaW1hdGlvbnMo
bV9pZCwgbV9hbmltYXRpb25zKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQotewotICAgIGRlc3Ryb3lD
YW52YXNJZk5lZWRlZCgpOwotICAgIGNyZWF0ZUNhbnZhc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAo
IShtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBTeW5jQ2FudmFzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5TeW5jQ2FudmFzOwotCi0gICAg
aWYgKCFtX2lzVmFsaWRDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29vcmRpbmF0
b3ItPnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpCi17Ci0gICAg
aWYgKCEobV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgRGVzdHJveUNhbnZhcykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAgICAgbV9jb29yZGlu
YXRvci0+ZGVzdHJveUNhbnZhcyhtX2lkKTsKLSAgICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gZmFs
c2U7Ci0gICAgfQotCi0gICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5EZXN0cm95Q2Fu
dmFzOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZO
ZWVkZWQoKQotewotICAgIGlmICghKG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIENyZWF0ZUNh
bnZhcykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5
ZXIpOwotICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3It
PmNyZWF0ZUNhbnZhcyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwotICAgICAgICBtX2lz
VmFsaWRDYW52YXMgPSB0cnVlOwotICAgIH0KLQotICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlv
biAmPSB+Q3JlYXRlQ2FudmFzOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKLXsKLSAgICBB
U1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLQotICAgIC8v
IFNldHMgdGhlIHZhbHVlcy4KLSAgICBjb21wdXRlUGl4ZWxBbGlnbm1lbnQobV9hZGp1c3RlZFBv
c2l0aW9uLCBtX2FkanVzdGVkU2l6ZSwgbV9hZGp1c3RlZEFuY2hvclBvaW50LCBtX3BpeGVsQWxp
Z25tZW50T2Zmc2V0KTsKLQotICAgIHN5bmNJbWFnZUJhY2tpbmcoKTsKLSAgICBzeW5jTGF5ZXJT
dGF0ZSgpOwotICAgIHN5bmNBbmltYXRpb25zKCk7Ci0gICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlz
aWJsZVJlY3QoKTsKLSAgICBzeW5jQ2hpbGRyZW4oKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci0gICAgc3luY0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7
Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgc3luY0NhbnZhcygpOwotI2VuZGlmCi19
Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdWaXNpYmxlKCkK
LXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRlZEltYWdlQmFja2luZyk7Ci0gICAgcmV0dXJuIHRp
bGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKGNvbnRlbnRzUmVjdCgpKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbGVhc2VJbWFnZUJhY2tpbmdJ
Zk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgbV9jb29yZGluYXRl
ZEltYWdlQmFja2luZy0+cmVtb3ZlSG9zdCh0aGlzKTsKLSAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nLmNsZWFyKCk7Ci0gICAgbV9sYXllckluZm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKLXsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKLXsKLSAgICBtX2xheWVySW5m
by5pc1Jvb3RMYXllciA9IGlzUm9vdDsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFq
ZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAg
aWYgKCFtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS0+c2V0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICBz
ZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKLXsKLSAgICBpZiAo
c2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX3BlbmRpbmdDb250ZW50c1NjYWxl
QWRqdXN0bWVudCA9IHRydWU7Ci19Ci0KLWZsb2F0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpCi17Ci0gICAgcmV0dXJuIHNlbGZPckFuY2VzdG9ySGF2
ZU5vbkFmZmluZVRyYW5zZm9ybXMoKSA/IDEgOiBkZXZpY2VTY2FsZUZhY3RvcigpICogcGFnZVNj
YWxlRmFjdG9yKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RD
b250ZW50c1NjYWxlKCkKLXsKLSAgICBBU1NFUlQoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKTsK
LSAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRl
bnRzU2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWlu
dGluZyB0aGUgY29udGVudCwKLSAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2
aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4KLSAgICAvLyBicmllZmx5IHNlZWluZyBm
bGlja2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlCi0gICAgLy8g
c29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCi0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1f
bWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0
aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCi0gICAgbV9w
cmV2aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQotewotICAg
IG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlz
LCBDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKLSAgICBtX21haW5CYWNr
aW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWNvbnRlbnRzT3BhcXVlKCkpOwotICAgIG1fbWFp
bkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZShlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQ
YWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgaWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRHcmFwaGlj
c0xheWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVj
dD4mIHVwZGF0ZWRSZWN0cykKLXsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSAm
JiAhdXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+c2V0TGF5
ZXJSZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVIYXNQZW5kaW5nVGls
ZUNyZWF0aW9uKCkKLXsKLSAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAg
IGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhp
cyk7Ci19Ci0KLUludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdT
dG9yZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndp
ZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsYW1wVG9Db250ZW50
c1JlY3RJZlJlY3RJc0luZmluaXRlKEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgY29u
dGVudHNSZWN0KQotewotICAgIGlmIChyZWN0LndpZHRoKCkgPj0gTGF5b3V0VW5pdDo6bmVhcmx5
TWF4KCkgfHwgcmVjdC53aWR0aCgpIDw9IExheW91dFVuaXQ6Om5lYXJseU1pbigpKSB7Ci0gICAg
ICAgIHJlY3Quc2V0WChjb250ZW50c1JlY3QueCgpKTsKLSAgICAgICAgcmVjdC5zZXRXaWR0aChj
b250ZW50c1JlY3Qud2lkdGgoKSk7Ci0gICAgfQotCi0gICAgaWYgKHJlY3QuaGVpZ2h0KCkgPj0g
TGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkgfHwgcmVjdC5oZWlnaHQoKSA8PSBMYXlvdXRVbml0Ojpu
ZWFybHlNaW4oKSkgewotICAgICAgICByZWN0LnNldFkoY29udGVudHNSZWN0LnkoKSk7Ci0gICAg
ICAgIHJlY3Quc2V0SGVpZ2h0KGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotfQotCi1J
bnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxl
UmVjdCgpCi17Ci0gICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4K
LSAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2Yg
dGhlIHZpc2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBw
bGFuZSAobGF5ZXIgY29vcmRpbmF0ZXMpLgotICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdo
dCBiZSBzcXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2Yg
dGhpcyBxdWFkLAotICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJl
YWwgdmlzaWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3Zl
ciByZWN0IG11bHRpcGxpZXIpLgotICAgIEFTU0VSVChtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0g
PT0gbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKSk7Ci0gICAgRmxvYXRSZWN0
IHJlY3QgPSBtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0uY2xhbXBlZEJvdW5kc09mUHJvamVjdGVk
UXVhZChGbG9hdFF1YWQobV9jb29yZGluYXRvci0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpKSk7Ci0g
ICAgY2xhbXBUb0NvbnRlbnRzUmVjdElmUmVjdElzSW5maW5pdGUocmVjdCwgdGlsZWRCYWNraW5n
U3RvcmVDb250ZW50c1JlY3QoKSk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7
Ci19Ci0KLUNvbG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVC
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgpID8g
Q29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwotfQotCi1QYXNzT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzLCBJbnRQb2ludCYgb2Zmc2V0KQot
ewotICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvci0+
aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICByZXR1cm4gbV9jb29yZGluYXRvci0+YmVn
aW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyBDb29yZGluYXRlZFN1cmZh
Y2U6Ok5vRmxhZ3MgOiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEsIGF0bGFzLCBv
ZmZzZXQpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSh1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRv
cik7Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7
Ci0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8s
IHRpbGVSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRp
bGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywg
Y29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwot
ICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAg
IG1fY29vcmRpbmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxl
UmVjdCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVp
bnQzMl90IHRpbGVJRCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgQVNTRVJU
KG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7
Ci0gICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQotewotICAg
IGlmICghc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKSB7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS5jbGVhcigpOwotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wZW5kaW5nQ29udGVudHNTY2FsZUFk
anVzdG1lbnQpIHsKLSAgICAgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotICAgICAgICBtX3Bl
bmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRo
aXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBiYWNraW5n
IHN0b3JlLCBvbmNlIHdlCi0gICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdlIGFyZSBy
ZWFkeSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgotICAgIGlmICghbV9tYWlu
QmFja2luZ1N0b3JlKQotICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgIGlmICht
X3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQpIHsKLSAgICAgICAgbV9wZW5kaW5nVmlzaWJs
ZVJlY3RBZGp1c3RtZW50ID0gZmFsc2U7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292
ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOwotICAgIH0KLQotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+
dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKLQotICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3Jl
IGlzIGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgotICAgIC8vIHJlbW92
aW5nIHRoZSBleGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmly
c3QgdGltZQotICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3Zl
IHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlLgotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUt
PnZpc2libGVBcmVhSXNDb3ZlcmVkKCkpCi0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUu
Y2xlYXIoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFja2lu
Z1N0b3JlcygpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiB1
cGRhdGVNb2RlUHJvdGVjdG9yKG1faXNQdXJnaW5nLCB0cnVlKTsKLSNlbmRpZgotICAgIG1fbWFp
bkJhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIo
KTsKLQotICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwotCi0gICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29v
cmRpbmF0b3IoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNvb3JkaW5h
dG9yKQotewotICAgIG1fY29vcmRpbmF0b3IgPSBjb29yZGluYXRvcjsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCkKLXsK
LSAgICBpZiAoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX3BlbmRpbmdWaXNp
YmxlUmVjdEFkanVzdG1lbnQgPSB0cnVlOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKLXsKLSAgICBpZiAob3BhY2l0eSgpIDwg
MC4wMSAmJiAhbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQ
cm9wZXJ0eU9wYWNpdHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5oYXNQZW5kaW5nVmlzaWJsZUNo
YW5nZXMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgc2hv
dWxkU3luY0NhbnZhcyA9IGZhbHNlOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHNo
b3VsZFN5bmNDYW52YXMgPSBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBTeW5jQ2FudmFzOwot
I2VuZGlmCi0KLSAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUgJiYgIW1fc2hvdWxkU3lu
Y0NoaWxkcmVuICYmICFtX3Nob3VsZFN5bmNGaWx0ZXJzICYmICFtX3Nob3VsZFN5bmNJbWFnZUJh
Y2tpbmcgJiYgIW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIXNob3VsZFN5bmNDYW52YXMpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2li
bGVSZWN0KCkuaW50ZXJzZWN0cyh0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsKLX0K
LQotc3RhdGljIGlubGluZSBib29sIGlzSW50ZWdyYWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4odmFsdWUpID09IHZhbHVlOwotfQotCi1GbG9hdFBvaW50IENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKQot
ewotICAgIEZsb2F0UG9pbnQgb2Zmc2V0OwotICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciog
Y3VyckxheWVyID0gdGhpczsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVu
dCgpKQotICAgICAgICBvZmZzZXQgKz0gY3VyckxheWVyLT5wb3NpdGlvbigpOwotCi0gICAgcmV0
dXJuIG9mZnNldDsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQ
aXhlbEFsaWdubWVudChGbG9hdFBvaW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiBzaXplLCBGbG9h
dFBvaW50M0QmIGFuY2hvclBvaW50LCBGbG9hdFNpemUmIGFsaWdubWVudE9mZnNldCkKLXsKLSAg
ICBpZiAoaXNJbnRlZ3JhbChlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpKSB7Ci0gICAgICAgIHBv
c2l0aW9uID0gbV9wb3NpdGlvbjsKLSAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKLSAgICAgICAgYW5j
aG9yUG9pbnQgPSBtX2FuY2hvclBvaW50OwotICAgICAgICBhbGlnbm1lbnRPZmZzZXQgPSBGbG9h
dFNpemUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgcG9zaXRp
b25SZWxhdGl2ZVRvQmFzZSA9IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCk7Ci0KLSAg
ICBGbG9hdFJlY3QgYmFzZVJlbGF0aXZlQm91bmRzKHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIG1f
c2l6ZSk7Ci0gICAgRmxvYXRSZWN0IHNjYWxlZEJvdW5kcyA9IGJhc2VSZWxhdGl2ZUJvdW5kczsK
LQotICAgIC8vIFNjYWxlIGJ5IHRoZSBlZmZlY3RpdmUgc2NhbGUgZmFjdG9yIHRvIGNvbXB1dGUg
dGhlIHNjcmVlbi1yZWxhdGl2ZSBib3VuZHMuCi0gICAgc2NhbGVkQm91bmRzLnNjYWxlKGVmZmVj
dGl2ZUNvbnRlbnRzU2NhbGUoKSk7Ci0KLSAgICAvLyBSb3VuZCB0byBpbnRlZ2VyIGJvdW5kYXJp
ZXMuCi0gICAgLy8gTk9URTogV2hlbiB1c2luZyBlbmNsb3NpbmdJbnRSZWN0IChhcyBtYWMpIGl0
IHdpbGwgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgZGVwZW5kaW5nIG9uIHBvc2l0aW9uLgotICAgIEZs
b2F0UmVjdCBhbGlnbmVkQm91bmRzID0gcm91bmRlZEludFJlY3Qoc2NhbGVkQm91bmRzKTsKLQot
ICAgIC8vIENvbnZlcnQgYmFjayB0byBsYXllciBjb29yZGluYXRlcy4KLSAgICBhbGlnbmVkQm91
bmRzLnNjYWxlKDEgLyBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotCi0gICAgLy8gQ29udmVy
dCBiYWNrIHRvIGxheWVyIGNvb3JkaW5hdGVzLgotICAgIGFsaWdubWVudE9mZnNldCA9IGJhc2VS
ZWxhdGl2ZUJvdW5kcy5sb2NhdGlvbigpIC0gYWxpZ25lZEJvdW5kcy5sb2NhdGlvbigpOwotCi0g
ICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uIC0gYWxpZ25tZW50T2Zmc2V0OwotICAgIHNpemUgPSBh
bGlnbmVkQm91bmRzLnNpemUoKTsKLQotICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNvbXB1dGUgYSBu
ZXcgYW5jaG9yIHBvaW50IHdoaWNoIGNvbXBlbnNhdGVzIGZvciByb3VuZGluZy4KLSAgICBmbG9h
dCBhbmNob3JQb2ludFggPSBtX2FuY2hvclBvaW50LngoKTsKLSAgICBmbG9hdCBhbmNob3JQb2lu
dFkgPSBtX2FuY2hvclBvaW50LnkoKTsKLQotICAgIGlmIChhbGlnbmVkQm91bmRzLndpZHRoKCkp
Ci0gICAgICAgIGFuY2hvclBvaW50WCA9IChiYXNlUmVsYXRpdmVCb3VuZHMud2lkdGgoKSAqIGFu
Y2hvclBvaW50WCArIGFsaWdubWVudE9mZnNldC53aWR0aCgpKSAvIGFsaWduZWRCb3VuZHMud2lk
dGgoKTsKLQotICAgIGlmIChhbGlnbmVkQm91bmRzLmhlaWdodCgpKQotICAgICAgICBhbmNob3JQ
b2ludFkgPSAoYmFzZVJlbGF0aXZlQm91bmRzLmhlaWdodCgpICogYW5jaG9yUG9pbnRZICsgYWxp
Z25tZW50T2Zmc2V0LmhlaWdodCgpKSAvIGFsaWduZWRCb3VuZHMuaGVpZ2h0KCk7Ci0KLSAgICBh
bmNob3JQb2ludCA9IEZsb2F0UG9pbnQzRChhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WSwgbV9h
bmNob3JQb2ludC56KCkgKiBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQot
ewotICAgIC8vIFdoZW4gd2UgaGF2ZSBhIHRyYW5zZm9ybSBhbmltYXRpb24sIHdlIG5lZWQgdG8g
dXBkYXRlIHZpc2libGUgcmVjdCBldmVyeSBmcmFtZSB0byBhZGp1c3QgdGhlIHZpc2libGUgcmVj
dCBvZiBhIGJhY2tpbmcgc3RvcmUuCi0gICAgYm9vbCBoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRp
b24gPSBzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpOwotICAgIGlm
ICghbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCAmJiAhaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0g
ZmFsc2U7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VycmVudFRyYW5zZm9ybSA9IHRyYW5z
Zm9ybSgpOwotICAgIGlmIChoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgIGNs
aWVudCgpLT5nZXRDdXJyZW50VHJhbnNmb3JtKHRoaXMsIGN1cnJlbnRUcmFuc2Zvcm0pOwotICAg
IG1fbGF5ZXJUcmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0K
LSAgICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fYWRqdXN0ZWRBbmNob3JQb2lu
dCk7Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihtX2FkanVzdGVkUG9zaXRpb24p
OwotICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShtX2FkanVzdGVkU2l6ZSk7Ci0KLSAgICBt
X2xheWVyVHJhbnNmb3JtLnNldEZsYXR0ZW5pbmcoIXByZXNlcnZlczNEKCkpOwotICAgIG1fbGF5
ZXJUcmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY2hpbGRyZW5UcmFuc2Zvcm0oKSk7Ci0g
ICAgbV9sYXllclRyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3JtcyhwYXJlbnQoKSA/IHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZv
ckNoaWxkcmVuKCkgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKLQotICAgIG1fY2FjaGVkSW52
ZXJzZVRyYW5zZm9ybSA9IG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCk7Ci0K
LSAgICAvLyBUaGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tp
bmdTdG9yZVZpc2libGVSZWN0LgotICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7
Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGRIYXZlQmFja2luZ1N0
b3JlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVW
aXNpYmxlKCkgJiYgIW1fc2l6ZS5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPnNlbGZPckFuY2VzdG9ySGFzQWN0
aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKLXsKLSAgICBpZiAo
bV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2xheWVy
VHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5zZWxmT3JBbmNlc3RvckhhdmVO
b25BZmZpbmVUcmFuc2Zvcm1zKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjphZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3Qg
SW50U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtl
eWZyYW1lc05hbWUsIGRvdWJsZSBkZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0KQotewotICAgIEFT
U0VSVCgha2V5ZnJhbWVzTmFtZS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKCFhbmltIHx8IGFuaW0t
PmlzRW1wdHlPclplcm9EdXJhdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyIHx8ICh2YWx1
ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZh
bHVlTGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYm9vbCBsaXN0c01hdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBp
Z25vcmVkSGFzQmlnUm90YXRpb247Ci0KLSAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKLSAgICAgICAgbGlzdHNNYXRjaCA9IHZh
bGlkYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlv
bikgPj0gMDsKLQotICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRp
bWUoKSAtIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQ7Ci0gICAgbV9hbmltYXRpb25zLmFkZChH
cmFwaGljc0xheWVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwg
YW5pbSwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7Ci0gICAgbV9hbmlt
YXRpb25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIGRpZENoYW5nZUFuaW1hdGlv
bnMoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRp
bWUpCi17Ci0gICAgbV9hbmltYXRpb25zLnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWUpOwotICAg
IGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCi17Ci0gICAg
bV9hbmltYXRpb25zLnJlbW92ZShhbmltYXRpb25OYW1lKTsKLSAgICBkaWRDaGFuZ2VBbmltYXRp
b25zKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzdXNwZW5kQW5pbWF0
aW9ucyhkb3VibGUgdGltZSkKLXsKLSAgICBtX2FuaW1hdGlvbnMuc3VzcGVuZCh0aW1lKTsKLSAg
ICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBtX2FuaW1hdGlvbnMucmVzdW1lKCk7Ci0g
ICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyPiopCi17Ci0gICAgY2xpZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywg
bV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lKTsKLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZGNmZWViMDJkZWQ4OWFiOTA3NTc5MzQwMzNmMGM3N2JjM2Nl
YzI0OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKgot
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcl9oCi0jZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCi0KLSNp
bmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJJbmZvLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0jaW5jbHVkZSAiRmxv
YXRQb2ludDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgi
Ci0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiVGls
ZWRCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgot
I2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5o
IgotI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZVRva2VuLmg+Ci0jZW5kaWYKLSNpbmNsdWRl
IDxXZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0K
LSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFz
cyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9u
czsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNo
YW5nZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKLSAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQpID0gMDsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0
IHZpc2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJD
b3JlOjpJbWFnZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0
b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgPSAwOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBI
SUNTX1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5
bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAw
OwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRp
bmF0ZWRMYXllcklELCBpbnQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1h
dGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhl
ZExheWVycygpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIENvb3Jk
aW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2lu
dCYpID0gMDsKLX07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKLSAgICAsIHB1YmxpYyBUaWxl
ZEJhY2tpbmdTdG9yZUNsaWVudAotICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6Okhvc3QKLSAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBo
aWNzTGF5ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIo
KTsKLQotICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAg
IHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+Jikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBp
bnQpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5
ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
QmVsb3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFByZXNlcnZlczNEKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1Rv
Qm91bmRzKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQo
Ym9vbCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29s
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKSBPVkVS
UklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93RGVidWdCb3JkZXIoYm9vbCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFNob3dSZXBhaW50Q291bnRlcihib29sKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZShJbWFnZSopIGNv
bnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRm
b3JtTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBo
aWNzTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5
ZXIoR3JhcGhpY3NMYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rp
c3BsYXkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50
c05lZWRzRGlzcGxheSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21w
b3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9p
ZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkgT1ZFUlJJREU7Ci0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBhZGRB
bmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3Qg
QW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91YmxlKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKSBPVkVSUklERTsKLQotICAgIEZs
b2F0UG9pbnQgY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKTsKLSAgICB2b2lkIGNvbXB1
dGVQaXhlbEFsaWdubWVudChGbG9hdFBvaW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiwgRmxvYXRQ
b2ludDNEJiBhbmNob3JQb2ludCwgRmxvYXRTaXplJiBhbGlnbm1lbnRPZmZzZXQpOwotCi0gICAg
dm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9p
bnQmKTsKLQotICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwotCi0gICAgV2ViS2l0OjpDb29y
ZGluYXRlZExheWVySUQgaWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0
KGJvb2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0KLQotICAgIElu
dFJlY3QgY292ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYWluQmFja2luZ1N0b3JlID8gbV9t
YWluQmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJS
ZWN0KCkpIDogSW50UmVjdCgpOyB9Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAot
ICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVh
dGlvbigpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNv
bnRlbnRzUmVjdCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdT
dG9yZVZpc2libGVSZWN0KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tp
bmdTdG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gQ29vcmRp
bmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGls
ZUlELCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBJbnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgT1ZFUlJJREU7
Ci0KLSAgICB2b2lkIHNldENvb3JkaW5hdG9yKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyQ2xpZW50Kik7Ci0KLSAgICB2b2lkIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7
Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBib29sIGhhc1BlbmRpbmdWaXNp
YmxlQ2hhbmdlcygpOwotCi1wcml2YXRlOgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IGVudW0gUGVuZGluZ0NhbnZhc09wZXJhdGlvbiB7Ci0gICAgICAgIE5vbmUgPSAweDAwLAotICAg
ICAgICBDcmVhdGVDYW52YXMgPSAweDAxLAotICAgICAgICBEZXN0cm95Q2FudmFzID0gMHgwMiwK
LSAgICAgICAgU3luY0NhbnZhcyA9IDB4MDQsCi0gICAgICAgIENyZWF0ZUFuZFN5bmNDYW52YXMg
PSBDcmVhdGVDYW52YXMgfCBTeW5jQ2FudmFzLAotICAgICAgICBSZWNyZWF0ZUNhbnZhcyA9IENy
ZWF0ZUFuZFN5bmNDYW52YXMgfCBEZXN0cm95Q2FudmFzCi0gICAgfTsKLQotICAgIHZvaWQgc3lu
Y0NhbnZhcygpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBj
cmVhdGVDYW52YXNJZk5lZWRlZCgpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVi
dWdCb3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCB3aWR0aCkgT1ZFUlJJREU7Ci0KLSAgICBib29s
IGZpeGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9Ci0K
LSAgICB2b2lkIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB2b2lkIGRpZENoYW5nZUFuaW1h
dGlvbnMoKTsKLSAgICB2b2lkIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci0gICAgdm9pZCBkaWRDaGFu
Z2VDaGlsZHJlbigpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRpZENoYW5n
ZUZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHZvaWQgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7Ci0K
LSAgICB2b2lkIHN5bmNMYXllclN0YXRlKCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwot
ICAgIHZvaWQgc3luY0NoaWxkcmVuKCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZv
aWQgc3luY0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHZvaWQgc3luY0ltYWdlQmFja2luZygpOwot
ICAgIHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICB2b2lkIHVwZGF0
ZUNvbnRlbnRCdWZmZXJzKCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwotICAg
IHZvaWQgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6SG9zdAotICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNpYmxl
KCkgT1ZFUlJJREU7Ci0gICAgYm9vbCBzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkgY29uc3Q7Ci0g
ICAgYm9vbCBzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0
OwotICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwotICAg
IHZvaWQgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotCi0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVW
aXNpYmxlUmVjdCgpOwotICAgIGZsb2F0IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKTsKLQotICAg
IHZvaWQgYW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyPiopOwotCi0gICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVySUQgbV9pZDsKLSAgICBX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIEdyYXBoaWNzTGF5
ZXJUcmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBt
X2NhY2hlZEludmVyc2VUcmFuc2Zvcm07Ci0gICAgRmxvYXRTaXplIG1fcGl4ZWxBbGlnbm1lbnRP
ZmZzZXQ7Ci0gICAgRmxvYXRTaXplIG1fYWRqdXN0ZWRTaXplOwotICAgIEZsb2F0UG9pbnQgbV9h
ZGp1c3RlZFBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7
Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2lzUHVyZ2luZzsKLSNlbmRpZgotICAgIGJv
b2wgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdDogMTsKLSAgICBib29sIG1fc2hvdWxkU3luY0xh
eWVyU3RhdGU6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKLSAgICBib29s
IG1fc2hvdWxkU3luY0ZpbHRlcnM6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tp
bmc6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNBbmltYXRpb25zOiAxOwotICAgIGJvb2wgbV9m
aXhlZFRvVmlld3BvcnQgOiAxOwotICAgIGJvb2wgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVz
dG1lbnQgOiAxOwotICAgIGJvb2wgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50IDogMTsK
LSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBib29sIG1faXNWYWxpZENhbnZhcyA6IDE7
Ci0gICAgdW5zaWduZWQgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIDogMzsKLSNlbmRpZgotCi0g
ICAgV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fY29vcmRpbmF0b3I7
Ci0gICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAg
T3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotCi0gICAg
UmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKLSAgICBOYXRpdmVJbWFnZVB0ciBtX2Nv
bXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKLSAgICBSZWZQdHI8V2ViS2l0OjpDb29yZGluYXRlZElt
YWdlQmFja2luZz4gbV9jb29yZGluYXRlZEltYWdlQmFja2luZzsKLQotICAgIFBsYXRmb3JtTGF5
ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICBJbnRTaXplIG1fY2FudmFzU2l6ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiBtX2NhbnZh
c1Rva2VuOwotI2VuZGlmCi0gICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiBtX2Fu
aW1hdGlvblN0YXJ0ZWRUaW1lcjsKLSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBtX2FuaW1h
dGlvbnM7Ci0gICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZTsKLX07Ci0KLUNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NM
YXllciopOwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cl9ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdl
QmFja2luZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDMxNDkzMjVjYTVh
NzZkYzk1YjQ3NTJjZDZlZDJmZjliNmE2ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1Db29yZGluYXRlZElt
YWdlQmFja2luZ0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKEltYWdlKiBpbWFnZSkKLXsKLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2lu
ZyBrZWVwcyBhIFJlZlB0cjxJbWFnZT4gbWVtYmVyLCBzbyB0aGUgc2FtZSBJbWFnZSBwb2ludGVy
IGNhbiBub3QgcmVmZXIgdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgdW50aWwgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmcgcmVsZWFzZXMgdGhlIG1lbWJlci4KLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPihpbWFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUo
Q29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZEltYWdlQmFja2luZyhjbGllbnQsIGltYWdlKSk7
Ci19Ci0KLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhD
b29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKLSAgICA6IG1fY29v
cmRpbmF0b3IoY2xpZW50KQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1faWQoZ2V0Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKLSAgICAsIG1fY2xlYXJDb250
ZW50c1RpbWVyKHRoaXMsICZDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1Rp
bWVyRmlyZWQpCi0gICAgLCBtX2lzRGlydHkoZmFsc2UpCi0gICAgLCBtX2lzVmlzaWJsZShmYWxz
ZSkKLXsKLSAgICAvLyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFn
ZSBkaXJlY3RseSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgotICAgIC8vIGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTAxNDI2Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQo
KSk7Ci19Ci0KLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcoKQotewotfQotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KEhvc3Qq
IGhvc3QpCi17Ci0gICAgQVNTRVJUKCFtX2hvc3RzLmNvbnRhaW5zKGhvc3QpKTsKLSAgICBtX2hv
c3RzLmFwcGVuZChob3N0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVt
b3ZlSG9zdChIb3N0KiBob3N0KQotewotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1faG9zdHMuZmlu
ZChob3N0KTsKLSAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwotICAgIG1faG9zdHMu
cmVtb3ZlKHBvc2l0aW9uKTsKLQotICAgIGlmIChtX2hvc3RzLmlzRW1wdHkoKSkKLSAgICAgICAg
bV9jb29yZGluYXRvci0+cmVtb3ZlSW1hZ2VCYWNraW5nKGlkKCkpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjptYXJrRGlydHkoKQotewotICAgIG1faXNEaXJ0eSA9IHRydWU7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSgpCi17Ci0gICAgcmVs
ZWFzZVN1cmZhY2VJZk5lZWRlZCgpOwotCi0gICAgYm9vbCBjaGFuZ2VkVG9WaXNpYmxlOwotICAg
IHVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChjaGFuZ2VkVG9WaXNpYmxlKTsKLSAgICBpZiAoIW1f
aXNWaXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNoYW5nZWRUb1Zpc2libGUp
IHsKLSAgICAgICAgaWYgKCFtX2lzRGlydHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaWYgKG1fbmF0aXZlSW1hZ2VQdHIgPT0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKSkgewotICAgICAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1
cmZhY2U6OmNyZWF0ZShtX2ltYWdlLT5zaXplKCksIG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0Fs
cGhhKCkgPyBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEgOiBDb29yZGluYXRlZFN1
cmZhY2U6Ok5vRmxhZ3MpOwotICAgIGlmICghbV9zdXJmYWNlKSB7Ci0gICAgICAgIG1faXNEaXJ0
eSA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByZWN0KElu
dFBvaW50Ojp6ZXJvKCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gY29udGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwot
ICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCByZWN0LCByZWN0KTsKLQotICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBm
YWlscywgdHJ5IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBt
X2Nvb3JkaW5hdG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKLSAgICBt
X2lzRGlydHkgPSAhc3VjY2VzczsKLX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6
cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpCi17Ci0gICAgLy8gV2UgbXVzdCBrZWVwIG1fc3VyZmFj
ZSB1bnRpbCBVSSBQcm9jZXNzIHJlYWRzIG1fc3VyZmFjZS4KLSAgICAvLyBJZiBtX3N1cmZhY2Ug
ZXhpc3RzLCBpdCB3YXMgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgdXBkYXRlLgotICAgIG1fc3Vy
ZmFjZS5jbGVhcigpOwotfQotCi1zdGF0aWMgY29uc3QgZG91YmxlIGNsZWFyQ29udGVudHNUaW1l
ckludGVydmFsID0gMzsKLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlz
aWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpCi17Ci0gICAgYm9vbCBwcmV2
aW91c0lzVmlzaWJsZSA9IG1faXNWaXNpYmxlOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faG9zdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1faG9zdHNbaV0tPmltYWdlQmFja2luZ1Zpc2libGUoKSkgewotICAgICAgICAgICAg
bV9pc1Zpc2libGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBib29sIGNoYW5nZWRUb0ludmlzaWJsZSA9IHByZXZpb3VzSXNWaXNpYmxlICYmICFt
X2lzVmlzaWJsZTsKLSAgICBpZiAoY2hhbmdlZFRvSW52aXNpYmxlKSB7Ci0gICAgICAgIEFTU0VS
VCghbV9jbGVhckNvbnRlbnRzVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgICAgIG1fY2xlYXJDb250
ZW50c1RpbWVyLnN0YXJ0T25lU2hvdChjbGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCk7Ci0gICAg
fQotCi0gICAgY2hhbmdlZFRvVmlzaWJsZSA9ICFwcmV2aW91c0lzVmlzaWJsZSAmJiBtX2lzVmlz
aWJsZTsKLQotICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX2NsZWFyQ29udGVudHNUaW1lci5pc0Fj
dGl2ZSgpKSB7Ci0gICAgICAgIG1fY2xlYXJDb250ZW50c1RpbWVyLnN0b3AoKTsKLSAgICAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgdGhlIHRleHR1cmUgaWYgd2UgZGlkbid0IHJlbW92
ZSB0aGUgdGV4dHVyZS4KLSAgICAgICAgY2hhbmdlZFRvVmlzaWJsZSA9IGZhbHNlOwotICAgIH0K
LX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmly
ZWQoV2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKLXsKLSAgICBtX2Nv
b3JkaW5hdG9yLT5jbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGlkKCkpOwotfQotCi19Ci0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFj
a2luZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRiMmEwMmViODJkZjI3ZDkx
MGY1YTljY2IwYTcwY2U3NDM0ZjQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBDb29yZGluYXRlZEltYWdl
QmFja2luZ19oCi0jZGVmaW5lIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgot
I2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gewotcHVibGljOgotICAgIGNsYXNzIENvb3JkaW5hdG9yIHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikg
PSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgIH07Ci0KLSAg
ICBjbGFzcyBIb3N0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJh
Y2tpbmdWaXNpYmxlKCkgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJbWFnZT4pOwotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7Ci0K
LSAgICBzdGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEKFdlYkNvcmU6OkltYWdlKik7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIHZvaWQgYWRkSG9zdChIb3N0Kik7
Ci0gICAgdm9pZCByZW1vdmVIb3N0KEhvc3QqKTsKLQotICAgIC8vIFdoZW4gYSBuZXcgaW1hZ2Ug
aXMgdXBkYXRlZCBvciBhbiBhbmltYXRlZCBnaWYgaXMgcHJvZ3Jlc3NlZCwgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyIGNhbGxzIG1hcmtEaXJ0eSgpLgotICAgIHZvaWQgbWFya0RpcnR5KCk7Ci0K
LSAgICAvLyBDcmVhdGUsIHJlbW92ZSBvciB1cGRhdGUgaXRzIGJhY2tpbmcuCi0gICAgdm9pZCB1
cGRhdGUoKTsKLQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGlu
YXRvciosIFBhc3NSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+KTsKLQotICAgIHZvaWQgcmVsZWFzZVN1
cmZhY2VJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wm
IGNoYW5nZWRUb1Zpc2libGUpOwotICAgIHZvaWQgY2xlYXJDb250ZW50c1RpbWVyRmlyZWQoV2Vi
Q29yZTo6VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+Kik7Ci0KLSAgICBDb29yZGluYXRv
ciogbV9jb29yZGluYXRvcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IG1faW1hZ2U7Ci0g
ICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZVB0cjsKLSAgICBDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEIG1faWQ7Ci0gICAgVmVjdG9yPEhvc3QqPiBtX2hvc3RzOwotCi0g
ICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwotCi0gICAgV2ViQ29yZTo6
VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IG1fY2xlYXJDb250ZW50c1RpbWVyOwotCi0g
ICAgYm9vbCBtX2lzRGlydHk7Ci0gICAgYm9vbCBtX2lzVmlzaWJsZTsKLQotfTsKLQotfQotI2Vu
ZGlmCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZ19ICmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRl
eCAxYTRhOTk3OTI4MTU0YzY1Zjg2ZTdiZmMxYjhjNTQ1ZTJkYjVlYmFjLi5lOGE1OTMyZjhlMmJm
YzJlYjQ5ZWMyZGJhMGFkODRjM2VhZWQzOTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDEyICszMSwx
MCBAQAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgogCiAjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlN1cmZh
Y2VVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5j
bHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAt
NTAsNiArNDgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0
aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL1Rl
bXBvcmFyeUNoYW5nZS5oPgogCkBAIC03MDgsMTMgKzcwNywxMyBAQCBib29sIExheWVyVHJlZUhv
c3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVk
TGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKIHsKICAgICBtX3No
b3VsZFN5bmNGcmFtZSA9IHRydWU7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRp
bGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHRpbGVSZWN0KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVw
ZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHRpbGVSZWN0KQogewogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKICAg
ICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5m
bykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3QuaAppbmRleCBiZDY2ZTRhNzBjMjJjMzY3MjUzMzhhOTJmZDBjZjc2OTAzNmQ0NjM2
Li43Mjk3ZWVkODFlMDVhMmVlMGYwMDVlZWEzZGY4MTg4NWZlYzNmMmI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAt
MjIsMzAgKzIyLDMyIEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKLSNpbmNs
dWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZElt
YWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJM
YXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxh
cy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXll
ckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogI2luY2x1ZGUgIldlYkN1
c3RvbUZpbHRlclByb2dyYW1Qcm94eS5oIgogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNs
YXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKLWNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdl
OwogCiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9z
dCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpDb29yZGluYXRvcgotICAgICwgcHVibGljIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJs
aWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMg
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgLCBwdWJs
aWMgV2ViQ29yZTo6VXBkYXRlQXRsYXNDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyRmFjdG9yeQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eUNsaWVudApAQCAtNzcsMTIgKzc5LDEyIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZh
bHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBh
Z2VTY2FsZUZhY3RvckNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNv
cmU6OkltYWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3Jl
OjpJbWFnZSopIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNo
YW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQz
Ml90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3Jl
OjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3Vy
ZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVj
dCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5l
eHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKQEAgLTkw
LDI1ICs5MiwyNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpN
ZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rv
cnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVy
SW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExh
eWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0
YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllcklEPiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyYpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVy
RmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlv
bnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgog
I2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2Fu
dmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJ
REU7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRp
bmF0ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJl
cGFpbnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGludCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKIAotICAgIHZpcnR1
YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWlu
dDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCBQYXNzT3du
UHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50
MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogICAgIC8vIFVwZGF0ZUF0bGFz
Q2xpZW50Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJl
bW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1Rf
QU5JTUFUSU9OX0ZSQU1FKQpAQCAtMTE2LDcgKzExOCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBP
VkVSUklERTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY3Jl
YXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb29yZGluYXRl
ZFN1cmZhY2U6OkZsYWdzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGlu
YXRlZFN1cmZhY2U+IGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CiAKIHByb3RlY3RlZDoK
ICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSopOwpAQCAtMTMw
LDEwICsxMzIsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3Rv
cigpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNv
b3JkaW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29u
dGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFn
ZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwogCiAgICAgdm9pZCBmbHVz
aFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKQEAgLTE4MCwxMSArMTgyLDExIEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlM
YXllcjsKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4g
bV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IG1fbGF5
ZXJzVG9DcmVhdGU7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0Rl
bGV0ZTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVm
UHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBWZWN0
b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvQ3JlYXRlOworICAgIFZl
Y3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0
cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CiAg
ICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFVw
ZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKKyAgICBWZWN0b3I8T3duUHRyPFdlYkNvcmU6
OlVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVS
UykKICAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmls
dGVyUHJvZ3JhbXM7CkBAIC0yMTEsOCArMjEzLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fYW5p
bWF0aW9uc0xvY2tlZDsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYK
KyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNlbmRpZiAvLyBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkVGlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMGI1NjYyNmU4MWYx
MGIxODc2MmI5OGYzNjU4MDRmOGUzMjYxNjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19T
VE9SRSkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJUaWxlZEJh
Y2tpbmdTdG9yZUNsaWVudC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBJbnZhbGlkQ29vcmRpbmF0ZWRU
aWxlSUQgPSAwOwotCi1Db29yZGluYXRlZFRpbGU6OkNvb3JkaW5hdGVkVGlsZShDb29yZGluYXRl
ZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3Jl
LCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKLSAgICA6IG1fY2xpZW50KGNsaWVu
dCkKLSAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCi0gICAgLCBt
X2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCi0gICAgLCBtX3JlY3QodGlsZWRCYWNraW5nU3Rv
cmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCi0gICAgLCBtX0lEKElu
dmFsaWRDb29yZGluYXRlZFRpbGVJRCkKLSAgICAsIG1fZGlydHlSZWN0KG1fcmVjdCkKLXsKLX0K
LQotQ29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRUaWxlKCkKLXsKLSAgICBpZiAobV9JRCAh
PSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxl
KG1fSUQpOwotfQotCi1ib29sIENvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRU
aWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBJbnRSZWN0
IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOwotICAgIGlm
ICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXJ0
eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Ci19Ci0KLVZlY3RvcjxJbnRSZWN0PiBDb29yZGlu
YXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQotewotICAgIGlmICghaXNEaXJ0eSgpKQotICAg
ICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Ci0KLSAgICBTdXJmYWNlVXBkYXRlSW5mbyB1
cGRhdGVJbmZvOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJ
bmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7Ci0gICAgaWYgKCFncmFwaGlj
c0NvbnRleHQpCi0gICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKLSAgICBncmFwaGlj
c0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsK
LSAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3Jl
LT5jb250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkp
OwotICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBh
aW50KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250
ZW50cyhtX2RpcnR5UmVjdCkpOwotCi0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0
eVJlY3Q7Ci0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3Jl
Y3QueSgpKTsKLSAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9y
ZS0+Y29udGVudHNTY2FsZSgpOwotICAgIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0KLSAg
ICBzdGF0aWMgdWludDMyX3QgaWQgPSAxOwotICAgIGlmIChtX0lEID09IEludmFsaWRDb29yZGlu
YXRlZFRpbGVJRCkgewotICAgICAgICBtX0lEID0gaWQrKzsKLSAgICAgICAgLy8gV2UgbWF5IGdl
dCBhbiBpbnZhbGlkIElEIGR1ZSB0byB3cmFwLWFyb3VuZCBvbiBvdmVyZmxvdy4KLSAgICAgICAg
aWYgKG1fSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEKQotICAgICAgICAgICAgbV9JRCA9
IGlkKys7Ci0gICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1f
cmVjdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LT51cGRhdGVUaWxlKG1fSUQsIHVw
ZGF0ZUluZm8sIG1fcmVjdCk7Ci0KLSAgICBWZWN0b3I8SW50UmVjdD4gdXBkYXRlZFJlY3RzOwot
ICAgIHVwZGF0ZWRSZWN0cy5hcHBlbmQobV9kaXJ0eVJlY3QpOwotICAgIG1fZGlydHlSZWN0ID0g
SW50UmVjdCgpOwotICAgIHJldHVybiB1cGRhdGVkUmVjdHM7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQotewotICAgIC8vIEhhbmRsZWQgYnkgdGls
ZWRCYWNraW5nU3RvcmVQYWludEVuZC4KLX0KLQotYm9vbCBDb29yZGluYXRlZFRpbGU6OmlzUmVh
ZHlUb1BhaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0
ZWRUaWxlSUQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZFRpbGU6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewot
ICAgIG1fcmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOwotICAgIG1f
ZGlydHlSZWN0ID0gbV9yZWN0OwotfQotCi1Db29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGlu
YXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KQotICAgIDogbV9j
bGllbnQoY2xpZW50KQotewotfQotCi1QYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IENvb3JkaW5h
dGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRp
bGVkQmFja2luZ1N0b3JlLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29v
cmRpbmF0ZSkKLXsKLSAgICByZXR1cm4gQ29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQs
IHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRUaWxlQmFja2VuZDo6cGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRUaWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNmUxNWNjNzcyYjUzMWVhMWE0YTczNDFjMWQwNDZiNjUwOGY2Y2NmYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIENvb3JkaW5hdGVkVGlsZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkVGlsZV9oCi0KLSNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQotI2luY2x1ZGUgIlRpbGUuaCIKLSNpbmNsdWRl
ICJUaWxlZEJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIldlYkNvcmUvSW50UmVjdC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIFRpbGVkQmFja2lu
Z1N0b3JlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRUaWxl
Q2xpZW50OwotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci0KLWNsYXNzIENvb3JkaW5hdGVkVGls
ZSA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQsIFdlYkNvcmU6OlRp
bGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGls
ZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFRpbGUoY2xpZW50
LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUpKTsgfQotICAgIH5Db29yZGluYXRl
ZFRpbGUoKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0
ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+
IHVwZGF0ZUJhY2tCdWZmZXIoKTsKLSAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwot
ICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIGNvbnN0
IENvb3JkaW5hdGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0K
LSAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0
OyB9Ci0gICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi1wcml2YXRl
OgotICAgIENvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqLCBXZWJDb3JlOjpU
aWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKLQotICAgIENvb3JkaW5hdGVk
VGlsZUNsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIG1f
dGlsZWRCYWNraW5nU3RvcmU7Ci0gICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5hdGU7Ci0gICAgV2Vi
Q29yZTo6SW50UmVjdCBtX3JlY3Q7Ci0KLSAgICB1aW50MzJfdCBtX0lEOwotICAgIFdlYkNvcmU6
OkludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+
IG1fbG9jYWxCdWZmZXI7Ci19OwotCi1jbGFzcyBDb29yZGluYXRlZFRpbGVDbGllbnQgewotcHVi
bGljOgotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkVGlsZUNsaWVudCgpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKHVpbnQz
Ml90IHRpbGVJRCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgdWlu
dDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwotfTsKLQotY2xhc3MgQ29v
cmRpbmF0ZWRUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJh
Y2tlbmQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFj
a2luZ1N0b3JlQmFja2VuZD4gY3JlYXRlKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KSB7
IHJldHVybiBhZG9wdFB0cihuZXcgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChjbGllbnQpKTsgfQot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJh
Y2tpbmdTdG9yZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsKLSAgICB2b2lk
IHBhaW50Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRU
aWxlQmFja2VuZChDb29yZGluYXRlZFRpbGVDbGllbnQqKTsKLSAgICBDb29yZGluYXRlZFRpbGVD
bGllbnQqIG1fY2xpZW50OwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRUaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQ4MmQzMmZjNmZmYzEwMmNmNmQ0YTY0M2Y1YzMyODc4NGQ2YjU3MWMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJp
Z2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVXBkYXRlQXRsYXM6
OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24sIENv
b3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0g
ICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKLXsKLSAgICBzdGF0aWMgdWludDMyX3QgbmV4
dElEID0gMDsKLSAgICBtX0lEID0gKytuZXh0SUQ7Ci0gICAgSW50U2l6ZSBzaXplID0gbmV4dFBv
d2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOwotICAgIG1fc3VyZmFjZSA9
IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGZsYWdzKTsKLQotICAgIC8vIEZJWE1F
OiBDdXJyZW50bHksIGlmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIFVwZGF0ZUF0bGFzIGdp
dmVzIHVwIGRyYXdpbmcgYW55dGhpbmcgaW1wbGljaXRseS4KLSAgICBpZiAoIW1fY2xpZW50LT5j
cmVhdGVVcGRhdGVBdGxhcyhtX0lELCBtX3N1cmZhY2UpKQotICAgICAgICBtX3N1cmZhY2UuY2xl
YXIoKTsKLX0KLQotVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCi17Ci0gICAgaWYgKG1fc3Vy
ZmFjZSkKLSAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOwotfQotCi12
b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYXJl
YUFsbG9jYXRvcikgewotICAgICAgICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3Ioc2l6ZSgpKSk7Ci0gICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0
TWluaW11bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVXBk
YXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKLXsKLSAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIo
KTsKLX0KLQotUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBh
aW50aW5nT25BdmFpbGFibGVCdWZmZXIodWludDMyX3QmIGF0bGFzSUQsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUsIEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgbV9pbmFjdGl2aXR5SW5T
ZWNvbmRzID0gMDsKLSAgICBidWlsZExheW91dElmTmVlZGVkKCk7Ci0gICAgSW50UmVjdCByZWN0
ID0gbV9hcmVhQWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKTsKLQotICAgIC8vIE5vIGF2YWlsYWJs
ZSBidWZmZXIgd2FzIGZvdW5kLCByZXR1cm5pbmcgbnVsbC4KLSAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKLQotICAg
IGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQ+KCk7Ci0KLSAgICBhdGxhc0lEID0gbV9JRDsKLQotICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0
YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgotICAgIG9mZnNldCA9IHJlY3Qu
bG9jYXRpb24oKTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQg
PSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKLQotICAgIGlmIChzdXBw
b3J0c0FscGhhKCkpIHsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xv
clNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdyYXBo
aWNzQ29udGV4dC5yZWxlYXNlKCk7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRs
YXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1VwZGF0ZUF0bGFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTg2M2I4
NGQwZDhkYmFjY2JhZTM5YjEyZTIzNDE0ODMzODc2MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgw
ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwg
SW5jLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFVwZGF0ZUF0bGFzX2gKLSNk
ZWZpbmUgVXBkYXRlQXRsYXNfaAotCi0jaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgotI2luY2x1
ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLQotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIEludFBvaW50OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCkgPSAwOwotfTsKLQotY2xhc3MgVXBkYXRlQXRsYXMgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKLXB1YmxpYzoKLSAgICBVcGRhdGVBdGxhcyhVcGRhdGVB
dGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOwot
ICAgIH5VcGRhdGVBdGxhcygpOwotCi0gICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEg
bnVsbCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCi0gICAgUGFzc093
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1
ZmZlcih1aW50MzJfdCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6
OkludFBvaW50JiBvZmZzZXQpOwotICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKLSAgICBib29s
IHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEo
KTsgfQotCi0gICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCi0gICAgewot
ICAgICAgICBBU1NFUlQoIWlzSW5Vc2UoKSk7Ci0gICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25k
cyArPSBzZWNvbmRzOwotICAgIH0KLSAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgY29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7Ci0gICAg
ICAgIHJldHVybiBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFu
Y2U7Ci0gICAgfQotICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9j
YXRvcjsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwotCi1w
cml2YXRlOgotICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKLSAgICBPd25QdHI8R2Vu
ZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKLSAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsK
LSAgICB1aW50MzJfdCBtX0lEOwotfTsKLQotfQotI2VuZGlmCi0jZW5kaWYgLy8gVXBkYXRlQXRs
YXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185714</attachid>
            <date>2013-01-31 01:32:34 -0800</date>
            <delta_ts>2013-01-31 02:14:45 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>bug-108149-20130131012959.patch</filename>
            <type>text/plain</type>
            <size>387488</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY0MDhhODA5ZmRlYmNl
ZTdlODg3ZTNhMTJkYzc5MTI3MzNjZDE2Mi4uYjkwNTgxYWQwZGFiZGIyMGJkOTQ0YjgzMTA3NmM1
N2IwZmExMzM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NiBAQAorMjAxMy0wMS0zMCAgSmFl
IEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzIDogTW92ZSBDb29yZGluYXRlZEdyYXBoaWNzIHJlbGF0ZWQgZmlsZXMgdG8g
V2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA4MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBtb3ZlcyBDb29yZGluYXRlZCBHcmFwaGljcyByZWxhdGVkIGNvZGUgdG8gV2Vi
Q29yZS4gVG8KKyAgICAgICAgaW1wbGVtZW50IFRocmVhZGVkIENvb3JkaW5hdGVkIEdyYXBoaWNz
LCBtb3N0IG9mIENvb3JkaWFudGVkIEdyYXBoaWNzCisgICAgICAgIGNvZGUgc2hvdWxkIGJlIHNo
YXJlZC4gVGhlcmVmb3JlLCB0aGV5IHNob3VsZCByZXNpZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9m
CisgICAgICAgIFdlYktpdDIuCisKKyAgICAgICAgV2hlbiBtb3ZpbmcgdG8gV2ViQ29yZSwgdHdv
IHJlbmFtaW5ncyBoYXZlIGJlZW4gZG9uZS4KKworICAgICAgICAxLiBSZW5hbWUgTGF5ZXJUcmVl
UmVuZGVyZXIgdG8gVGV4dHVyZU1hcHBlclNjZW5lLgorCisgICAgICAgIDIuIFJlbmFtZSBXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gdG8KKyAgICAg
ICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBDb29yZGluYXRlZEN1c3RvbUZp
bHRlck9wZXJhdGlvbiwKKyAgICAgICAgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OkFy
ZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6fkFyZWFBbGxv
Y2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6ZXhwYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KToKKyAgICAgICAgKFdlYkNvcmU6
OkFyZWFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRv
cjo6b3ZlcmhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6cm91bmRBbGxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFs
QXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6
fkdlbmVyYWxBcmVhQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxs
b2NhdG9yOjpmcmVlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRv
cjo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmZpdHNXaXRoaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZUZyb21Ob2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdl
bmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxv
Y2F0b3IuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFBvd2Vy
T2ZUd28pOgorICAgICAgICAoQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpBcmVh
QWxsb2NhdG9yOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6Om1pbmlt
dW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnNldE1pbmlt
dW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6Om1hcmdpbik6
CisgICAgICAgIChXZWJDb3JlOjpBcmVhQWxsb2NhdG9yOjpzZXRNYXJnaW4pOgorICAgICAgICAo
R2VuZXJhbEFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92
ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp1
cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRp
bGVzVG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3Qm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3UmVwYWludENvdW50ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRp
b25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmguCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OkNvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGU6OnNjYWxlKToKKyAgICAgICAgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpyZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uOjpwcm9ncmFtSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb246OkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21G
aWx0ZXJQcm9ncmFtLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRp
bmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJQcm9ncmFtLmguCisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OkNvb3JkaW5hdGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b0Nvb3JkaW5hdGVkTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VBbmltYXRpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRyZW4pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hh
bmdlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9y
bSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNl
cnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291bnRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheUlu
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmlkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3Np
dGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxk
cmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0Zp
bHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
SW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmltYWdlQmFja2luZ1Zpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9y
ZVBhaW50QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZWZm
ZWN0aXZlQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVQYWludEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wVG9Db250ZW50c1JlY3RJZlJlY3RJc0luZmlu
aXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29u
dGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2libGVDaGFu
Z2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZWdyYWwpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQaXhl
bEFsaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGFzQWN0aXZl
VHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3Jtcyk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhdXNlQW5pbWF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3VzcGVu
ZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAgICAoQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y292ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdl
QmFja2luZzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjptYXJrRGlydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0eUlmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVhckNv
bnRlbnRzVGltZXJGaXJlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEltYWdlQmFja2luZy5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRl
ZEltYWdlQmFja2luZyk6CisgICAgICAgIChDb29yZGluYXRvcik6CisgICAgICAgIChIb3N0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjppZCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJ
bmZvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVySW5mby5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbzo6Q29vcmRpbmF0ZWRMYXllckluZm8pOgor
ICAgICAgICAoQ29vcmRpbmF0ZWRMYXllckluZm8pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRT
dXJmYWNlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRTdXJmYWNlOjpzZXRGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
U3VyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0ZWRTdXJmYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkU3VyZmFjZTo6fkNvb3JkaW5hdGVkU3VyZmFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OnN1cHBvcnRzQWxwaGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjpDb29yZGluYXRlZFRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZFRpbGU6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRUaWxlOjp1cGRhdGVCYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
VGlsZTo6c3dhcEJhY2tCdWZmZXJUb0Zyb250KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkVGlsZTo6aXNSZWFkeVRvUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRU
aWxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OnJlc2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRlZFRp
bGVCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNy
ZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6cGFp
bnRDaGVja2VyUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmgu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZFRpbGU6OmNvb3JkaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRUaWxlOjpyZWN0KToKKyAgICAgICAgKENvb3JkaW5hdGVkVGlsZUNsaWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGVDbGllbnQ6On5Db29yZGluYXRlZFRpbGVDbGllbnQp
OgorICAgICAgICAoQ29vcmRpbmF0ZWRUaWxlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUlu
Zm8uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3VyZmFjZVVwZGF0ZUluZm8pOgor
ICAgICAgICAoV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm86OlN1cmZhY2VVcGRhdGVJbmZvKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGV4dHVyZU1h
cHBlclNjZW5lLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpkaXNwYXRjaE9uTWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGVkU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6bGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6VGV4dHVyZU1hcHBlclNjZW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6flRleHR1cmVNYXBwZXJTY2VuZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6YW5pbWF0aW9uRnJhbWVSZWFk
eSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnJlcXVlc3RBbmltYXRp
b25GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnBhaW50VG9H
cmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpz
ZXRDb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJT
Y2VuZTo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNj
ZW5lOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpjcmVhdGVDYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXJTY2VuZTo6ZGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2NlbmU6OnNldExheWVyUmVwYWludENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVyRmlsdGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyU2NlbmU6OmluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlQ3VzdG9tRmlsdGVy
UHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbW92ZUN1
c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5l
OjpzZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6
Z2V0TGF5ZXJCeUlESWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNj
ZW5lOjpjcmVhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5l
OjpjcmVhdGVMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmRl
bGV0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmRlbGV0
ZUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0Um9vdExh
eWVySUQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpwcmVwYXJlQ29u
dGVudEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6
OmNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJTY2VuZTo6cmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpyZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZVRpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpyZW1vdmVUaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpjbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6cmVtb3ZlSW1hZ2VC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6YXNzaWduSW1h
Z2VCYWNraW5nVG9MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6
OnJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTY2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpmbHVzaExheWVyQ2hhbmdl
cyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbmRlck5leHRGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OmVuc3VyZVJvb3RMYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnN5bmNSZW1vdGVDb250
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZTo6cHVyZ2VHTFJlc291
cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnB1cmdlQmFja2lu
Z1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVy
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmU6OnNldEFu
aW1hdGlvbnNMb2NrZWQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpk
ZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjphcHBlbmRVcGRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzZXRBY3RpdmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzZXRCYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9UZXh0dXJl
TWFwcGVyU2NlbmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmguCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFRleHR1cmVNYXBwZXJTY2VuZUNsaWVudCk6CisgICAgICAgIChUZXh0dXJlTWFw
cGVyU2NlbmUpOgorICAgICAgICAoVGlsZVVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyU2NlbmU6OlRpbGVVcGRhdGU6OlRpbGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpzZXREcmF3c0JhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlclNjZW5lOjpsYXllckJ5SUQpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNjZW5lOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlclNjZW5lOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJTY2VuZTo6bm90aWZ5Rmx1c2hSZXF1aXJlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL1VwZGF0ZUF0bGFzLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0
bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJ1aWxk
TGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmRpZFN3YXBC
dWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25B
dmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9VcGRhdGVBdGxhcy5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoVXBkYXRlQXRsYXNDbGllbnQpOgorICAgICAgICAoVXBkYXRl
QXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OnNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6VXBkYXRlQXRsYXM6OnN1cHBvcnRzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
VXBkYXRlQXRsYXM6OmFkZFRpbWVJbmFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVB
dGxhczo6aXNJbmFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6aXNJblVz
ZSk6CisKIDIwMTMtMDEtMzEgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFtWOF0gVHJhY2Ugbm90IG9ubHkgbWFqb3IgRE9NIEdDcyBidXQgYWxzbyBtaW5v
ciBET00gR0NzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDgzMTBjYjVkYTA2MmVjNDlkYzlmZTQxMDhiNGExYmVm
MmMyNmE5MC4uYjRiNTEwNWQ3ZTVkY2Y3MDQ5YzM0N2MyMjAzNjlkZTllMzkwOWI3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxMy0wMS0zMCAgSmFlIEh5dW4gUGFyayAgPGphZS5w
YXJrQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzIDogTW92
ZSBDb29yZGluYXRlZEdyYXBoaWNzIHJlbGF0ZWQgZmlsZXMgdG8gV2ViQ29yZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MTQ5CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBD
b29yZGluYXRlZCBHcmFwaGljcyByZWxhdGVkIGNvZGUgdG8gV2ViQ29yZS4gVG8KKyAgICAgICAg
aW1wbGVtZW50IFRocmVhZGVkIENvb3JkaW5hdGVkIEdyYXBoaWNzLCBtb3N0IG9mIENvb3JkaWFu
dGVkIEdyYXBoaWNzCisgICAgICAgIGNvZGUgc2hvdWxkIGJlIHNoYXJlZC4gVGhlcmVmb3JlLCB0
aGV5IHNob3VsZCByZXNpZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9mCisgICAgICAgIFdlYktpdDIu
CisKKyAgICAgICAgV2hlbiBtb3ZpbmcgdG8gV2ViQ29yZSwgdHdvIHJlbmFtaW5ncyBoYXZlIGJl
ZW4gZG9uZS4KKworICAgICAgICAxLiBSZW5hbWUgTGF5ZXJUcmVlUmVuZGVyZXIgdG8gVGV4dHVy
ZU1hcHBlclNjZW5lLgorCisgICAgICAgIDIuIFJlbmFtZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFt
IGFuZCBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRDdXN0
b21GaWx0ZXJQcm9ncmFtIGFuZCBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiwKKyAg
ICAgICAgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBl
eGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKGhlYWRlcnNfZm9yX3R5cGUpOgor
ICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NB
cmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6CisgICAgICAg
ICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50
Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaDoKKyAgICAgICAgKEhhbmRsZSk6Cisg
ICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6OnRleHR1cmVNYXBwZXJTY2VuZSk6CisgICAgICAgIChF
d2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZCk6CisgICAgICAgIChFd2tWaWV3OjplbnRlckFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChF
d2tWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgor
ICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KToKKyAgICAgICAgKFFRdWlja1dl
YlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcv
cXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAoUVJhd1dlYlZpZXc6OnNldEFjdGl2ZSk6CisgICAg
ICAgIChRUmF3V2ViVmlldzo6dGV4dHVyZU1hcHBlclNjZW5lKToKKyAgICAgICAgKFFSYXdXZWJW
aWV3OjpwYWludCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdf
cC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVU
aWxlRm9yTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAg
ICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNvbXBvc2l0
aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAg
KFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5
ZXJTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyk6
CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVJ
bWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKToK
KyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVy
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRBbmltYXRpb25zTG9ja2VkKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1l
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENo
YW5nZVNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZUNhbnZhcyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5jQ2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViS2l0
OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQpOgor
ICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dy
b3VuZENvbG9yKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dGV4dHVyZU1hcHBl
clNjZW5lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1BhZ2VDbGllbnRCYXNlLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50RWZsOjpzZXRSZW5kZXJlckFjdGl2ZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvbnRlbnRz
U0dOb2RlOjpDb250ZW50c1NHTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRlbnRzU0dOb2Rl
OjpyZW5kZXIpOgorICAgICAgICAoV2ViS2l0OjpDb250ZW50c1NHTm9kZTo6fkNvbnRlbnRzU0dO
b2RlKToKKyAgICAgICAgKFdlYktpdDo6Q29udGVudHNTR05vZGU6OnRleHR1cmVNYXBwZXJTY2Vu
ZSk6CisgICAgICAgIChDb250ZW50c1NHTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFn
ZVNHTm9kZTo6c2V0VGV4dHVyZU1hcHBlclNjZW5lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQv
UXRXZWJQYWdlU0dOb2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChRdFdlYlBhZ2VTR05vZGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZSk6CisgICAg
ICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGlsZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdCk6CisKIDIwMTMtMDEtMzEgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hh
aWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBSZXF1ZXN0TWFu
YWdlckNsaWVudEVmbCwgRG93bmxvYWRNYW5hZ2VyRWZsIGFuZCBDb250ZXh0SGlzdG9yeUNsaWVu
dEVmbCBzaG91bGQgYmUgYmFzZWQgb24gQyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODAz
NjQ0YjdhZTliMTQ2OWY0ZjA4NWE5YTM3YTdmMjExODZmMzllNi4uNWExNTI5ZTM4ZDdjNjQ2ZTc1
Yjg2MjJmOGU1NmMxMGU4ZGZlODczYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU1LDYgKzU1
LDggQEAgc2V0KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6eiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL29wZW50eXBlIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcCIKQEAgLTE5ODcsNiArMTk4
OSwxNCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9Tb3VyY2VHcmFwaGljLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExp
Z2h0U291cmNlLmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0FyZWFBbGxvY2F0b3IuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1
cmZhY2UuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkVGlsZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VGV4dHVyZU1hcHBlclNjZW5lLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggYzNiOGZjMDIwYzEyNmE2NGQ2MTlh
N2Q3MGJlYmJjOTdiZGJkZjIxZC4uZDkwMWMxYmFlZGEyMGY0MmVlNDU4YTljOTQ3MGU0ZjU0MzZh
NTc3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yMjM5LDYgKzIyMzksMTggQEAgSEVBREVSUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZVRva2VuLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5o
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0
ZUluZm8uaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RleHR1
cmVNYXBwZXJTY2VuZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVXBkYXRlQXRsYXMuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0u
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFw
cGVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmggXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgg
XApAQCAtMjg3NCw2ICsyODg2LDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L1BhdGhRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRlcm5RdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgXAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmNw
cCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RleHR1cmVNYXBw
ZXJTY2VuZS5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9V
cGRhdGVBdGxhcy5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xh
eWVyVGV4dHVyZU1hcHBlci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJCYWNraW5nU3RvcmUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmgKaW5kZXggOGY3NWY1Zjg2NDNlMzlmMzNmNDViNmE0MTM0ZjY2NmRiMmRjODg2NS4uN2ZjOTdj
NjU5ZmM0ZmRjN2ViNGJkMWM0Y2FmY2NhNmU3ZWU3NzFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgogCi0g
ICAgLy8gRklYTUU6IEl0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciByZW1vdmluZyBkZXBlbmRlbmN5
IG9mIExheWVyVHJlZVJlbmRlcmVyIG9uIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLgorICAg
IC8vIEZJWE1FOiBJdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgcmVtb3ZpbmcgZGVwZW5kZW5jeSBv
ZiBUZXh0dXJlTWFwcGVyU2NlbmUgb24gR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuCiAgICAg
dm9pZCBzZXRIYXNPd25CYWNraW5nU3RvcmUoYm9vbCBiKSB7IG1faGFzT3duQmFja2luZ1N0b3Jl
ID0gYjsgfQogICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZT4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWY1NDE4NWI5OGU4YTcwOGE2ZDZmMWFiMjA0NWQyYjEyMzQ4MzYwMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcApAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJBcmVhQWxsb2Nh
dG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXJlYUFsbG9jYXRvcjo6QXJlYUFsbG9j
YXRvcihjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX21p
bkFsbG9jKDEsIDEpCisgICAgLCBtX21hcmdpbigwLCAwKQoreworfQorCitBcmVhQWxsb2NhdG9y
Ojp+QXJlYUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNv
bnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0gbV9zaXplLmV4cGFuZGVkVG8oc2l6
ZSk7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBtX3NpemUgKz0gc2l6ZTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxl
YXNlKGNvbnN0IEludFJlY3QmKQoreworfQorCitpbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQo
KSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCitJbnRTaXplIEFyZWFBbGxvY2F0b3I6OnJv
dW5kQWxsb2NhdGlvbihjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGludCB3aWR0
aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNp
emUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBpbnQgZXh0cmEgPSB3aWR0aCAl
IG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIHdpZHRoICs9IG1f
bWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9taW5BbGxv
Yy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhlaWdodCArPSBtX21pbkFsbG9j
LmhlaWdodCgpIC0gZXh0cmE7CisKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
K30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IElu
dFNpemUmIHNpemUpCisgICAgOiBBcmVhQWxsb2NhdG9yKG5leHRQb3dlck9mVHdvKHNpemUpKQor
eworICAgIG1fcm9vdCA9IG5ldyBOb2RlKCk7CisgICAgbV9yb290LT5yZWN0ID0gSW50UmVjdCgw
LCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBtX3Jvb3QtPmxhcmdl
c3RGcmVlID0gbV9zaXplOworICAgIG1fcm9vdC0+cGFyZW50ID0gMDsKKyAgICBtX3Jvb3QtPmxl
ZnQgPSAwOworICAgIG1fcm9vdC0+cmlnaHQgPSAwOworICAgIG1fbm9kZUNvdW50ID0gMTsKKyAg
ICBzZXRNaW5pbXVtQWxsb2NhdGlvbihJbnRTaXplKDgsIDgpKTsKK30KKworR2VuZXJhbEFyZWFB
bGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCit7CisgICAgZnJlZU5vZGUobV9yb290
KTsKK30KKwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAobm9kZSkgeworICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKKyAgICAg
ICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOworICAgIH0KKyAgICBkZWxldGUgbm9kZTsKK30KKwor
dm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKG5leHRQb3dlck9mVHdvKHNpemUpKTsKKworICAg
IGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuOyAvLyBO
byBjaGFuZ2UuCisKKyAgICBpZiAoIW1fcm9vdC0+bGVmdCAmJiBtX3Jvb3QtPmxhcmdlc3RGcmVl
LndpZHRoKCkgPiAwKSB7CisgICAgICAgIC8vIE5vIGFsbG9jYXRpb25zIGhhdmUgb2NjdXJyZWQs
IHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCisgICAgICAgIG1fcm9vdC0+cmVjdCA9IElu
dFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1f
cm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQgcm9vdCB0byBleHBhbmQgdGhl
IHRyZWUuCisgICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsKKyAgICBTcGxpdCBzcGxpdDsKKyAg
ICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICBzcGxpdCA9
IFNwbGl0T25YOworICAgIGVsc2UKKyAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKworICAgIHdo
aWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkgeworICAgICAgICBpZiAobV9yb290
LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCisgICAgICAgICAgICBzcGxpdCA9IFNw
bGl0T25ZOworICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgPT0gbV9zaXpl
LmhlaWdodCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgTm9kZSog
cGFyZW50ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOwor
ICAgICAgICBtX25vZGVDb3VudCArPSAyOworICAgICAgICBtX3Jvb3QtPnBhcmVudCA9IHBhcmVu
dDsKKyAgICAgICAgcGFyZW50LT5wYXJlbnQgPSAwOworICAgICAgICBwYXJlbnQtPmxlZnQgPSBt
X3Jvb3Q7CisgICAgICAgIHBhcmVudC0+cmlnaHQgPSByaWdodDsKKyAgICAgICAgcGFyZW50LT5s
YXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7CisgICAgICAgIHJpZ2h0LT5wYXJlbnQg
PSBwYXJlbnQ7CisgICAgICAgIHJpZ2h0LT5sZWZ0ID0gMDsKKyAgICAgICAgcmlnaHQtPnJpZ2h0
ID0gMDsKKyAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsK
KyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7CisgICAgICAgICAgICBwYXJlbnQtPnJl
Y3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCisgICAgICAg
ICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkp
OworICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBt
X3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBt
X3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0Lngo
KSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgo
KSwgbV9yb290LT5yZWN0LmhlaWdodCgpICogMik7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9
IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVj
dC53aWR0aCgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3Qt
PnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIHNwbGl0ID0gKHNwbGl0ID09IFNw
bGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7CisgICAgICAgIG1fcm9vdCA9IHBhcmVudDsK
KyAgICB9CisgICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IEludFNpemUmIHNpemUxLCBjb25zdCBJbnRTaXplJiBz
aXplMikKK3sKKyAgICByZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNp
emUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdodCgpOworfQorCitJbnRSZWN0IEdlbmVyYWxBcmVh
QWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEludFNpemUg
cm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKKyAgICByb3VuZGVkID0gbmV4dFBvd2Vy
T2ZUd28ocm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5kZWQu
d2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPD0g
MCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworCisgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJvdW5k
ZWQsIG1fcm9vdCk7CisgICAgaWYgKHBvaW50LngoKSA+PSAwKQorICAgICAgICByZXR1cm4gSW50
UmVjdChwb2ludCwgc2l6ZSk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UG9pbnQg
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgTm9kZSogbm9kZSkKK3sKKyAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0IGlu
dG8sIHdoaWNoIHNob3VsZCBiZQorICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQg
b2YgdW51c2VkIHNwYWNlIHRoYXQgaXMKKyAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhl
IHJlcXVlc3RlZCBzaXplLgorICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIC8vIEdvIGRvd24g
YSBsZXZlbCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0CisgICAgICAgIC8vIHN1
Yi10cmVlIGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgorICAgICAgICBO
b2RlKiBsZWZ0ID0gbm9kZS0+bGVmdDsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5yaWdo
dDsKKyAgICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0RnJl
ZSkpIHsKKyAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5s
YXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUud2lk
dGgoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCisgICAgICAgICAgICAgICAgICAgIHx8
IGxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5IGJl
IGEgbGl0dGxlIG92ZXJzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRoZSBs
ZWZ0IHN1Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KKyAgICAgICAgICAgICAg
ICAgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUZy
b21Ob2RlKHNpemUsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bm9kZSA9IHJpZ2h0OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbm9kZSA9
IGxlZnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdo
dC0+bGFyZ2VzdEZyZWUpKQorICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICBlbHNl
IGlmIChsZWZ0IHx8IHJpZ2h0KSB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2RlIGhh
cyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAgICAgICAgIHJldHVybiBJbnRQ
b2ludCgtMSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+
bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMg
bm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAgU3BsaXQgc3BsaXQ7CisgICAg
ICAgICAgICBpZiAoZml0c1dpdGhpbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVp
Z2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3Bs
aXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCisgICAgICAgICAg
ICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRyeSB0byBiYWxh
bmNlCisgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMgZnVydGhlciBz
dWJkaXZpc2lvbnMgaGFwcGVuLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LngoKSA9PSBub2Rl
LT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBT
cGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQpCisgICAgICAg
ICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAg
ICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRz
V2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxh
cmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVj
dGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAgICAgICAgfSBl
bHNlIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICog
MiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25n
IHRoZSBZIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhl
ciAtIGFsbG9jYXRlIHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJl
ZSA9IEludFNpemUoMCwgMCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9k
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJvdW5k
IGFnYWluIHVzaW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgorICAgICAgICAgICAgbm9kZSA9IHNwbGl0
Tm9kZShub2RlLCBzcGxpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDYW5u
b3QgcG9zc2libHkgZml0IGludG8gdGhpcyBub2RlLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEludFBvaW50KC0xLCAtMSk7Cit9CisKK0dlbmVyYWxB
cmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlCisgICAg
KE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQoreworICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9kZSgp
OworICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICBtX25vZGVDb3VudCArPSAyOwor
ICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgbGVmdC0+bGVmdCA9IDA7CisgICAgbGVmdC0+
cmlnaHQgPSAwOworICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIHJpZ2h0LT5sZWZ0ID0g
MDsKKyAgICByaWdodC0+cmlnaHQgPSAwOworICAgIG5vZGUtPmxlZnQgPSBsZWZ0OworICAgIG5v
ZGUtPnJpZ2h0ID0gcmlnaHQ7CisKKyAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAgICAg
ICAgbGVmdC0+cmVjdCA9IEludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJlY3QueSgpLAor
ICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9kZS0+cmVjdC5oZWlnaHQoKSk7
CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gSW50UmVjdChsZWZ0LT5yZWN0Lm1heFgoKSwgbm9kZS0+
cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0
LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0LT5yZWN0ID0gSW50UmVjdChu
b2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0Lndp
ZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBJ
bnRSZWN0KG5vZGUtPnJlY3QueCgpLCBsZWZ0LT5yZWN0Lm1heFkoKSwKKyAgICAgICAgICAgIG5v
ZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOworICAgIH0KKworICAg
IGxlZnQtPmxhcmdlc3RGcmVlID0gbGVmdC0+cmVjdC5zaXplKCk7CisgICAgcmlnaHQtPmxhcmdl
c3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6ZSgpOworICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gcmln
aHQtPmxhcmdlc3RGcmVlOworICAgIHJldHVybiBsZWZ0OworfQorCit2b2lkIEdlbmVyYWxBcmVh
QWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0RnJlZShOb2RlKiBub2RlKQoreworICAgIHdoaWxlICgo
bm9kZSA9IG5vZGUtPnBhcmVudCkpIHsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBJbnRT
aXplKAorICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgo
KSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkpLAorICAgICAgICAgICAgc3RkOjpt
YXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5sYXJnZXN0
RnJlZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICk7CisgICAgfQorfQorCit2b2lkIEdlbmVyYWxB
cmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gTG9j
YXRlIHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRlZCByZWdpb24uCisgICAgTm9k
ZSogbm9kZSA9IG1fcm9vdDsKKyAgICBJbnRQb2ludCBwb2ludCA9IHJlY3QubG9jYXRpb24oKTsK
KyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+bGVmdCAmJiBub2RlLT5sZWZ0
LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5sZWZ0Owor
ICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5yaWdodC0+cmVjdC5jb250YWlu
cyhwb2ludCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+cmlnaHQ7CisgICAgICAgIGVsc2Ug
aWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsgLy8gUG9pbnQgaXMgY29tcGxldGVseSBvdXRz
aWRlIHRoZSB0cmVlLgorICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJlZSBhbmQgdGhlbiB3b3JrIHVwd2FyZHMgdGhyb3Vn
aCB0aGUgdHJlZQorICAgIC8vIHJlY29tYmluaW5nIGFuZCBkZWxldGluZyBub2RlcyB1bnRpbCB3
ZSByZWFjaCBhIHNpYmxpbmcKKyAgICAvLyB0aGF0IGlzIHN0aWxsIGFsbG9jYXRlZC4KKyAgICBu
b2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOworICAgIHdoaWxlIChub2RlLT5w
YXJlbnQpIHsKKyAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdCA9PSBub2RlKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodC0+bGFyZ2VzdEZyZWUgIT0gbm9kZS0+cGFy
ZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0LT5sYXJnZXN0RnJl
ZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3Quc2l6ZSgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnQ7CisgICAgICAgIGZy
ZWVOb2RlKG5vZGUtPmxlZnQpOworICAgICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7CisgICAg
ICAgIG1fbm9kZUNvdW50IC09IDI7CisgICAgICAgIG5vZGUtPmxlZnQgPSAwOworICAgICAgICBu
b2RlLT5yaWdodCA9IDA7CisgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5z
aXplKCk7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmVzdCBvZiBvdXIgYW5jZXN0b3JzIGhh
dmUgdGhlIGNvcnJlY3QgImxhcmdlc3QgZnJlZSBzaXplIi4KKyAgICB1cGRhdGVMYXJnZXN0RnJl
ZShub2RlKTsKK30KKworaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQXJlYUFsbG9jYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTgwY2FlMjM3
NzUwZjZmYTM0M2IwYmM3ZjJhOTMwOTM5MDhkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0
b3IuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICoKKyAqLworCisjaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAorI2RlZmluZSBBcmVhQWxsb2NhdG9y
X2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIkludFNpemUuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitpbmxpbmUgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIpCit7
CisgICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dlck9mVHdvIGZvciBh
biBpbnRlZ2VyLgorICAgIC0tbnVtYmVyOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTsKKyAg
ICBudW1iZXIgfD0gbnVtYmVyID4+IDI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA0OworICAg
IG51bWJlciB8PSBudW1iZXIgPj4gODsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE2OworICAg
IG51bWJlcisrOworICAgIHJldHVybiBudW1iZXI7Cit9CisKK2lubGluZSBJbnRTaXplIG5leHRQ
b3dlck9mVHdvKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIEludFNpemUobmV4
dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwgbmV4dFBvd2VyT2ZUd28oc2l6ZS5oZWlnaHQoKSkp
OworfQorCitjbGFzcyBBcmVhQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBBcmVh
QWxsb2NhdG9yKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5BcmVhQWxsb2NhdG9yKCk7
CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIElu
dFNpemUgbWluaW11bUFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21pbkFsbG9jOyB9Cisg
ICAgdm9pZCBzZXRNaW5pbXVtQWxsb2NhdGlvbihjb25zdCBJbnRTaXplJiBzaXplKSB7IG1fbWlu
QWxsb2MgPSBzaXplOyB9CisKKyAgICBJbnRTaXplIG1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
bWFyZ2luOyB9CisgICAgdm9pZCBzZXRNYXJnaW4oY29uc3QgSW50U2l6ZSAmbWFyZ2luKSB7IG1f
bWFyZ2luID0gbWFyZ2luOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZXhwYW5kKGNvbnN0IEludFNp
emUmKTsKKyAgICB2b2lkIGV4cGFuZEJ5KGNvbnN0IEludFNpemUmKTsKKworICAgIHZpcnR1YWwg
SW50UmVjdCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBy
ZWxlYXNlKGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgaW50IG92ZXJoZWFkKCkgY29u
c3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRTaXplIG1fbWlu
QWxsb2M7CisgICAgSW50U2l6ZSBtX21hcmdpbjsKKworICAgIEludFNpemUgcm91bmRBbGxvY2F0
aW9uKGNvbnN0IEludFNpemUmKSBjb25zdDsKK307CisKK2NsYXNzIEdlbmVyYWxBcmVhQWxsb2Nh
dG9yIDogcHVibGljIEFyZWFBbGxvY2F0b3IgeworcHVibGljOgorICAgIGV4cGxpY2l0IEdlbmVy
YWxBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIH5HZW5lcmFsQXJl
YUFsbG9jYXRvcigpOworCisgICAgdm9pZCBleHBhbmQoY29uc3QgSW50U2l6ZSYpOworICAgIElu
dFJlY3QgYWxsb2NhdGUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVsZWFzZShjb25zdCBJ
bnRSZWN0Jik7CisgICAgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZW51
bSBTcGxpdCB7IFNwbGl0T25YLCBTcGxpdE9uWSB9OworCisgICAgc3RydWN0IE5vZGUgeworICAg
ICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIEludFNpemUgbGFyZ2VzdEZyZWU7CisgICAgICAg
IE5vZGUqIHBhcmVudDsKKyAgICAgICAgTm9kZSogbGVmdDsKKyAgICAgICAgTm9kZSogcmlnaHQ7
CisgICAgfTsKKworICAgIE5vZGUqIG1fcm9vdDsKKyAgICBpbnQgbV9ub2RlQ291bnQ7CisKKyAg
ICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7CisgICAgSW50UG9pbnQgYWxsb2NhdGVGcm9t
Tm9kZShjb25zdCBJbnRTaXplJiwgTm9kZSopOworICAgIE5vZGUqIHNwbGl0Tm9kZShOb2RlKiwg
U3BsaXQpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqKTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKworI2VuZGlmIC8vIEFyZWFBbGxvY2F0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTVkYTJi
OGZiNWY0YThkOWQyYzk4NzllOTNhY2I4NWMwZjNjOWI4YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxODggQEAKKy8qCisgQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVy
LmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
TC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlOjpzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAg
IGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBGbG9hdFJlY3QgdGlsZVJl
Y3QobV90aWxlUmVjdCk7CisgICAgdGlsZVJlY3Quc2NhbGUoMS4gLyBtX3NjYWxlKTsKKyAgICBi
b29sIHNob3VsZFJlc2V0ID0gZmFsc2U7CisgICAgaWYgKHRpbGVSZWN0ICE9IHJlY3QoKSkgewor
ICAgICAgICBzZXRSZWN0KHRpbGVSZWN0KTsKKyAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOwor
ICAgIH0KKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IHRoaXMtPnRleHR1cmUo
KTsKKyAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAgICAgdGV4dHVyZSA9IHRleHR1cmVNYXBwZXIt
PmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgc2V0VGV4dHVyZSh0ZXh0dXJlLmdldCgpKTsKKyAg
ICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOworICAgIH0KKworICAgIEFTU0VSVCh0ZXh0dXJlTWFw
cGVyLT5tYXhUZXh0dXJlU2l6ZSgpLndpZHRoKCkgPj0gbV90aWxlUmVjdC5zaXplKCkud2lkdGgo
KSAmJiB0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLmhlaWdodCgpID49IG1fdGlsZVJl
Y3Quc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBpZiAoc2hvdWxkUmVzZXQpCisgICAgICAgIHRleHR1
cmUtPnJlc2V0KG1fdGlsZVJlY3Quc2l6ZSgpLCBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKSk7
CisKKyAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVyZSwgbV9zb3VyY2VSZWN0LCBt
X3N1cmZhY2VPZmZzZXQpOworICAgIG1fc3VyZmFjZS5jbGVhcigpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihjb25zdCBJbnRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3NvdXJjZVJl
Y3QgPSBzb3VyY2VSZWN0OworICAgIG1fdGlsZVJlY3QgPSB0aWxlUmVjdDsKKyAgICBtX3N1cmZh
Y2VPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdXJmYWNlID0gYnVmZmVyOworfQorCit2b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKHVpbnQzMl90IGlkLCBmbG9hdCBzY2Fs
ZSkKK3sKKyAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKHNj
YWxlKSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlOjpyZW1vdmVUaWxlKHVpbnQzMl90IGlkKQoreworICAgIEFTU0VSVChtX3RpbGVzLmNv
bnRhaW5zKGlkKSk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmFkZChpZCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkKK3sKKyAgICBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAg
Zm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1fdGlsZXNUb1JlbW92ZS5hZGQo
aXQtPmtleSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnVwZGF0ZVRpbGUo
dWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIHRp
bGVSZWN0LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYmFja0J1ZmZlciwgY29uc3Qg
SW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKKyAgICBBU1NFUlQoaXQgIT0gbV90aWxl
cy5lbmQoKSk7CisgICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIodGlsZVJlY3QsIHNvdXJjZVJl
Y3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7Cit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25zdAoreworICAgIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQo
KTsKKyAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50ZXh0dXJlKCk7CisgICAgICAg
IGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRleHR1cmU7CisgICAgfQorCisgICAg
cmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit7CisgICAgbV9z
aXplID0gc2l6ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUaWxl
c1RvVGV4dHVyZU1hcHBlcihWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiYgdGlsZXMsIFRleHR1
cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2ssIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRpbGVzLnNpemUoKTsgKytp
KQorICAgICAgICB0aWxlc1tpXS0+cGFpbnQodGV4dHVyZU1hcHBlciwgdHJhbnNmb3JtLCBvcGFj
aXR5LCBtYXNrLCBjYWxjdWxhdGVFeHBvc2VkVGlsZUVkZ2VzKHJlY3QsIHRpbGVzW2ldLT5yZWN0
KCkpKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OmFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpCit7
CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9SZWN0KHJlY3QoKSwgdGFy
Z2V0UmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0
dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYg
dGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQg
b3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKKyAgICBpZiAobV90aWxlcy5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fc2l6ZS5pc1plcm8oKSk7CisKKyAg
ICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFpbnQ7CisgICAgVmVjdG9yPFRl
eHR1cmVNYXBwZXJUaWxlKj4gcHJldmlvdXNUaWxlc1RvUGFpbnQ7CisKKyAgICAvLyBXZSBoYXZl
IHRvIGRvIHRoaXMgZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2FzZSB0aGUgb3BhY2l0eSBoYXMg
Y2hhbmdlZC4KKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgRmxvYXRSZWN0IGNvdmVyZWRSZWN0OworICAgIGZvciAo
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
VGlsZSYgdGlsZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgaWYgKCF0aWxlLnRleHR1cmUoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0aWxlLnNjYWxlKCkgPT0gbV9zY2Fs
ZSkgeworICAgICAgICAgICAgdGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7CisgICAgICAgICAg
ICBjb3ZlcmVkUmVjdC51bml0ZSh0aWxlLnJlY3QoKSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIE9ubHkgc2hvdyB0aGUgcHJldmlvdXMgdGlsZSBpZiB0
aGUgb3BhY2l0eSBpcyBoaWdoLCBvdGhlcndpc2UgZWZmZWN0IGxvb2tzIGxpa2UgYSBidWcuCisg
ICAgICAgIC8vIFdlIHNob3cgdGhlIHByZXZpb3VzLXNjYWxlIHRpbGUgYW55d2F5IGlmIGl0IGRv
ZXNuJ3QgaW50ZXJzZWN0IHdpdGggYW55IGN1cnJlbnQtc2NhbGUgdGlsZS4KKyAgICAgICAgaWYg
KG9wYWNpdHkgPCAwLjk1ICYmIGNvdmVyZWRSZWN0LmludGVyc2VjdHModGlsZS5yZWN0KCkpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcHJldmlvdXNUaWxlc1RvUGFpbnQuYXBw
ZW5kKCZ0aWxlKTsKKyAgICB9CisKKyAgICAvLyB0YXJnZXRSZWN0IGlzIG9uIHRoZSBjb250ZW50
cyBjb29yZGluYXRlIHN5c3RlbSwgc28gd2UgbXVzdCBjb21wYXJlIHR3byByZWN0cyBvbiB0aGUg
Y29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgLy8gU2VlIFRpbGVkQmFja2luZ1N0b3Jl
LgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3Jt
ICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworCisgICAgcGFpbnRUaWxl
c1RvVGV4dHVyZU1hcHBlcihwcmV2aW91c1RpbGVzVG9QYWludCwgdGV4dHVyZU1hcHBlciwgYWRq
dXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3QoKSk7CisgICAgcGFpbnRUaWxlc1Rv
VGV4dHVyZU1hcHBlcih0aWxlc1RvUGFpbnQsIHRleHR1cmVNYXBwZXIsIGFkanVzdGVkVHJhbnNm
b3JtLCBvcGFjaXR5LCBtYXNrLCByZWN0KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlOjpkcmF3Qm9yZGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IENv
bG9yJiBib3JkZXJDb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVz
dGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKKyAgICBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdCb3JkZXIoYm9y
ZGVyQ29sb3IsIGJvcmRlcldpZHRoLCBpdC0+dmFsdWUucmVjdCgpLCBhZGp1c3RlZFRyYW5zZm9y
bSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmRyYXdSZXBhaW50Q291bnRl
cihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgcmVwYWludENvdW50LCBjb25zdCBD
b2xvciYgYm9yZGVyQ29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVj
dCh0YXJnZXRSZWN0KTsKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdSZXBhaW50Q291bnRlcihyZXBhaW50Q291bnQs
IGJvcmRlckNvbG9yLCBpdC0+dmFsdWUucmVjdCgpLmxvY2F0aW9uKCksIGFkanVzdGVkVHJhbnNm
b3JtKTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y29tbWl0VGlsZU9wZXJh
dGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sKKyAgICBIYXNoU2V0PHVpbnQz
Ml90Pjo6aXRlcmF0b3IgdGlsZXNUb1JlbW92ZUVuZCA9IG1fdGlsZXNUb1JlbW92ZS5lbmQoKTsK
KyAgICBmb3IgKEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciBpdCA9IG1fdGlsZXNUb1JlbW92
ZS5iZWdpbigpOyBpdCAhPSB0aWxlc1RvUmVtb3ZlRW5kOyArK2l0KQorICAgICAgICBtX3RpbGVz
LnJlbW92ZSgqaXQpOworICAgIG1fdGlsZXNUb1JlbW92ZS5jbGVhcigpOworCisgICAgQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciB0aWxlc0VuZCA9IG1fdGlsZXMuZW5k
KCk7CisgICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytpdCkKKyAgICAgICAgaXQtPnZh
bHVlLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5h
dGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMzM2
ZDcxZmM4ZjM1OGVlOGNiMTJmNWZmMGRlMGM3ZmY3ZjNhOTk3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAor
I2RlZmluZSBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGlu
YXRlZFN1cmZhY2U7CisKK2NsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZSA6IHB1Ymxp
YyBUZXh0dXJlTWFwcGVyVGlsZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKKyAgICAgICAgOiBUZXh0dXJlTWFwcGVy
VGlsZShGbG9hdFJlY3QoKSkKKyAgICAgICAgLCBtX3NjYWxlKHNjYWxlKQorICAgIHsKKyAgICB9
CisKKyAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3NjYWxlOyB9Cisg
ICAgdm9pZCBzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKik7CisgICAgdm9pZCBzZXRCYWNrQnVm
ZmVyKGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmKTsKKworcHJpdmF0ZToKKyAgICBSZWZQ
dHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAgSW50UmVjdCBtX3NvdXJjZVJl
Y3Q7CisgICAgSW50UmVjdCBtX3RpbGVSZWN0OworICAgIEludFBvaW50IG1fc3VyZmFjZU9mZnNl
dDsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgdm9p
ZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgZmxvYXQpOworICAgIHZvaWQgcmVtb3ZlVGls
ZSh1aW50MzJfdCB0aWxlSUQpOworICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICB2b2lk
IHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVj
dCYsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiwgY29uc3QgSW50UG9pbnQmKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gY3JlYXRlKCkgeyBy
ZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKTsgfQorICAgIHZvaWQg
Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciopOworICAgIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9h
dFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0JvcmRlcihUZXh0dXJl
TWFwcGVyKiwgY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXIqLCBpbnQgcmVwYWludENvdW50LCBj
b25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUoKQor
ICAgICAgICA6IG1fc2NhbGUoMS4pCisgICAgeyB9CisgICAgdm9pZCBwYWludFRpbGVzVG9UZXh0
dXJlTWFwcGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+JiwgVGV4dHVyZU1hcHBlciosIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqLCBjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybUZv
clJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgRmxvYXRSZWN0IHJlY3QoKSBjb25zdCB7IHJl
dHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3NpemUpOyB9CisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZT4gQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZU1hcCBtX3RpbGVzOworICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1fdGlsZXNUb1JlbW92ZTsKKyAg
ICBGbG9hdFNpemUgbV9zaXplOworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNl
bmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYwMjFiMGI0OTZlYWNjNmJkYTJmZTZkNTA5ZWUzZjYzZjg4OTBkYzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaApAQCAtMCwwICsxLDY2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRDdXN0b21G
aWx0ZXJPcGVyYXRpb25faAorI2RlZmluZSBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlv
bl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVGhpcyBjbGFzcyBpcyBvbmx5
IGFkZGluZyB0aGUgcHJvZ3JhbUlkIG9uIHRvcCBvZiBDdXN0b21GaWx0ZXJPcGVyYXRpb24uIFRo
ZSBhcmd1bWVudCBkZWNvZGVyIGhhcyBubworLy8gY29udGV4dCwgc28gd2UgY2Fubm90IHNlYXJj
aCBpbiBvdXIgY2FjaGVkIEN1c3RvbUZpbHRlclByb2dyYW1zIHdoaWxlIGRlY29kaW5nLiBJbiB0
aGF0IGNhc2UKKy8vIGl0IHdpbGwganVzdCBzdG9yZSB0aGUgcHJvZ3JhbUlkIGFuZCBubyBDdXN0
b21GaWx0ZXJQcm9ncmFtIGluc3RhbmNlLiBUaGUgcmVjZWl2ZXIgaXMgc3VwcG9zZWQgdG8KKy8v
IGl0ZXJhdGUgb24gdGhpcyBzdHJ1Y3R1cmUgYW5kIGluamVjdCB0aGUgcmlnaHQgQ3VzdG9tRmls
dGVyUHJvZ3JhbXMuCisKK2NsYXNzIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIDog
cHVibGljIEN1c3RvbUZpbHRlck9wZXJhdGlvbiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRy
PEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGludCBwcm9ncmFtSUQsIGNvbnN0IEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hSb3dz
LCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uKHByb2dyYW0sIHByb2dyYW1JRCwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3Ms
IG1lc2hDb2x1bW5zLCBtZXNoVHlwZSkpOworICAgIH0KKworICAgIGludCBwcm9ncmFtSUQoKSBj
b25zdCB7IHJldHVybiBtX3Byb2dyYW1JRDsgfQorCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJv
Z3JhbSwgaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgc29y
dGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBD
dXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKKyAgICAgICAgOiBDdXN0b21GaWx0ZXJPcGVy
YXRpb24ocHJvZ3JhbSwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBt
ZXNoVHlwZSkKKyAgICAgICAgLCBtX3Byb2dyYW1JRChwcm9ncmFtSUQpCisgICAgeworICAgIH0K
KworICAgIGludCBtX3Byb2dyYW1JRDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dy
YW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTQ5YjFiZWE1
ZGYyZGJhZTFjMTUzZDU0Mjc4MDNmZTU0MTE1OTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
Q3VzdG9tRmlsdGVyUHJvZ3JhbS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW1faAorI2RlZmluZSBDb29y
ZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW1faAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKSAmJiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3Rh
bnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSA6IHB1YmxpYyBD
dXN0b21GaWx0ZXJQcm9ncmFtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShTdHJpbmcgdmVydGV4U2hhZGVyU3Ry
aW5nLCBTdHJpbmcgbV9mcmFnbWVudFNoYWRlclN0cmluZywgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5
cGUgcHJvZ3JhbVR5cGUsIEN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5n
cywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSh2ZXJ0ZXhTaGFkZXJT
dHJpbmcsIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcsIHByb2dyYW1UeXBlLCBtaXhTZXR0aW5ncywg
bWVzaFR5cGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkZWQoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtJiBvKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAg
ICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSAhPSBvcGVyYXRvciBiZWNhdXNlIHRoYXQgd291bGQgcmVj
dXJzaXZlbHkgY2FsbCB0aGlzIG1ldGhvZC4KKyAgICAgICAgaWYgKCFDdXN0b21GaWx0ZXJQcm9n
cmFtOjpvcGVyYXRvcj09KG8pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgY2FzdCBpcyB1Z2x5LCBidXQgQ29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJQcm9ncmFtIGlzIHRoZSBzaW5nbGUgaW1wbGVtZW50YXRpb24gb2YgQ3VzdG9tRmlsdGVyUHJv
Z3JhbSBvbiBVSSBQcm9jZXNzLgorICAgICAgICBjb25zdCBDb29yZGluYXRlZEN1c3RvbUZpbHRl
clByb2dyYW0qIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJQcm9ncmFtKj4oJm8pOworICAgICAgICByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTdHJpbmcgPT0g
b3RoZXItPnZlcnRleFNoYWRlclN0cmluZygpICYmIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcgPT0g
b3RoZXItPmZyYWdtZW50U2hhZGVyU3RyaW5nKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBTdHJpbmcgdmVydGV4U2hhZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBmcmFnbWVudFNo
YWRlclN0cmluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZnJhZ21lbnRTaGFkZXJTdHJp
bmc7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aWxsSGF2ZUNsaWVudHMoKSBPVkVSUklERSB7IG5v
dGlmeUNsaWVudHMoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVMYXN0Q2xpZW50KCkg
T1ZFUlJJREUgeyB9CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9n
cmFtKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0cmluZyBmcmFnbWVudFNoYWRlclN0cmlu
ZywgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUsIEN1c3RvbUZpbHRlclByb2dy
YW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5ncywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUp
CisgICAgICAgIDogQ3VzdG9tRmlsdGVyUHJvZ3JhbShwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3Ms
IG1lc2hUeXBlKQorICAgICAgICAsIG1fdmVydGV4U2hhZGVyU3RyaW5nKHZlcnRleFNoYWRlclN0
cmluZykKKyAgICAgICAgLCBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nKGZyYWdtZW50U2hhZGVyU3Ry
aW5nKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7Cisg
ICAgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmc7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIEVOQUJMRShD
U1NfU0hBREVSUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM3MzZmMjYwNGMwYzEwNDM5OTk1N2I5OGEyNTI1ZWU3ZGJjZGQ5
YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApAQCAtMCwwICsx
LDEwNTYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
CisgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIK
KyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CisjZW5kaWYK
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChHcmFwaGljc0xh
eWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcihsYXllciktPmlkKCkgOiAwOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpCit7CisgICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9
IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hS
ZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENo
YW5nZUFuaW1hdGlvbnMoKQoreworICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSB0cnVlOwor
ICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQo
dGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VDaGls
ZHJlbigpCit7CisgICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0cnVlOworICAgIGlmIChjbGll
bnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisK
KyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
ZGlkQ2hhbmdlRmlsdGVycygpCit7CisgICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IHRydWU7Cisg
ICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0
aGlzKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hh
bmdlSW1hZ2VCYWNraW5nKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcgPSB0cnVl
OworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWly
ZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRV
cGRhdGVWaXNpYmxlUmVjdCgpCit7CisgICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRy
dWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQor
ICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbigpW2ldKS0+c2V0U2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAg
IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0U2hvdWxkVXBk
YXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRp
ZENoYW5nZUdlb21ldHJ5KCkKK3sKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgc2V0
U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQor
ICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9pc1B1
cmdpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QodHJ1
ZSkKKyAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3lu
Y0NoaWxkcmVuKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUpCisgICAgLCBt
X3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0FuaW1hdGlv
bnModHJ1ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQorICAgICwgbV9wZW5kaW5n
Q29udGVudHNTY2FsZUFkanVzdG1lbnQoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdWaXNpYmxlUmVj
dEFkanVzdG1lbnQoZmFsc2UpCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgLCBtX2lz
VmFsaWRDYW52YXMoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24oTm9uZSkK
KyNlbmRpZgorICAgICwgbV9jb29yZGluYXRvcigwKQorICAgICwgbV9jb21wb3NpdGVkTmF0aXZl
SW1hZ2VQdHIoMCkKKyAgICAsIG1fY2FudmFzUGxhdGZvcm1MYXllcigwKQorICAgICwgbV9hbmlt
YXRpb25TdGFydGVkVGltZXIodGhpcywgJkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0
aW9uU3RhcnRlZFRpbWVyRmlyZWQpCit7CisgICAgc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCBu
ZXh0TGF5ZXJJRCA9IDE7CisgICAgbV9pZCA9IG5leHRMYXllcklEKys7Cit9CisKK0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6fkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpCit7CisgICAgaWYg
KG1fY29vcmRpbmF0b3IpIHsKKyAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgICAg
IG1fY29vcmRpbmF0b3ItPmRldGFjaExheWVyKHRoaXMpOworICAgIH0KKyAgICBBU1NFUlQoIW1f
Y29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgIW1fbWFpbkJhY2tpbmdTdG9yZSk7CisgICAgd2ls
bEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRD
aGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKK3sKKyAgICBi
b29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworICAgIGlmICgh
b2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQo
bGF5ZXIpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBp
bmRleCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4
KTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXll
ciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBz
aWJsaW5nKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhp
Y3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxh
eWVyLCBzaWJsaW5nKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCitib29sIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxk
LCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXll
cjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7CisgICAgaWYgKCFvaykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50
KCkKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAgICAgICAgcGFyZW50TGF5ZXIt
PmRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVu
dCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24oKSA9PSBwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKKyAgICBkaWRDaGFu
Z2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5j
aG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQoreworICAgIGlmIChhbmNob3JQb2ludCgp
ID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBv
aW50KHApOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
dGhpcy0+c2l6ZSgpID09IHNpemUpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5
ZXI6OnNldFNpemUoc2l6ZSk7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1hc2tM
YXllcigpLT5zZXRTaXplKHNpemUpOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHRyYW5zZm9ybSgpID09IHQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKKyAgICBkaWRDaGFu
Z2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYg
KGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhp
Y3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnko
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJv
b2wgYikKK3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKKyAgICBkaWRDaGFuZ2VHZW9t
ZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0Jv
dW5kcyhib29sIGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQorICAgICAgICBy
ZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsKKyAgICBkaWRD
aGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0gYikKKyAg
ICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsKKwor
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRzQXJl
VmlzaWJsZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRD
b250ZW50c1Zpc2libGUoYik7CisgICAgaWYgKG1hc2tMYXllcigpKQorICAgICAgICBtYXNrTGF5
ZXIoKS0+c2V0Q29udGVudHNWaXNpYmxlKGIpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUo
Ym9vbCBiKQoreworICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3Rv
cmUtPnNldFN1cHBvcnRzQWxwaGEoIWIpOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
T3BhcXVlKGIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpCit7CisgICAg
aWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAgIHJldHVybjsKKworICAgIEdy
YXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKKyAgICBkaWRDaGFuZ2VMYXll
clN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkp
OworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChj
b250ZW50c1JlY3QoKSA9PSByKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1JlY3Qocik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQor
eworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5
ZXIpCisgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBTeW5jQ2FudmFzOworI2Vu
ZGlmCisKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJl
cXVpcmVkKHRoaXMpOworCisgICAgYWRkUmVwYWludFJlY3QoY29udGVudHNSZWN0KCkpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQoreworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
ICAgIGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpIHsKKyAgICAgICAgQVNTRVJUKG1fY2FudmFz
VG9rZW4uaXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybUxheWVyKSB7CisgICAgICAg
ICAgICBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gfD0gRGVzdHJveUNhbnZhczsKKyAgICAgICAg
ICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+Q3JlYXRlQ2FudmFzOworICAgICAgICB9
ICBlbHNlIGlmICgobV9jYW52YXNTaXplICE9IHBsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJT
aXplKCkpIHx8IChtX2NhbnZhc1Rva2VuICE9IHBsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFj
ZVRva2VuKCkpKSB7CisgICAgICAgICAgICAvLyBtX2NhbnZhc1Rva2VuIGNhbiBiZSBkaWZmZXJl
bnQgdG8gcGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSwgZXZlbiBpZiBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIgZXF1YWxzIHBsYXRmb3JtTGF5ZXIuCisgICAgICAgICAgICBtX3Bl
bmRpbmdDYW52YXNPcGVyYXRpb24gfD0gUmVjcmVhdGVDYW52YXM7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAocGxhdGZvcm1MYXllcikKKyAgICAgICAgICAgIG1fcGVuZGlu
Z0NhbnZhc09wZXJhdGlvbiB8PSBDcmVhdGVBbmRTeW5jQ2FudmFzOworICAgIH0KKworICAgIG1f
Y2FudmFzUGxhdGZvcm1MYXllciA9IHBsYXRmb3JtTGF5ZXI7CisgICAgLy8gbV9jYW52YXNUb2tl
biBpcyB1cGRhdGVkIG9ubHkgaGVyZS4gSW4gZGV0YWlsLCB3aGVuIEdyYXBoaWNzQ29udGV4dDNE
IGlzIGNoYW5nZWQgb3IgcmVzaGFwZWQsIG1fY2FudmFzVG9rZW4gaXMgY2hhbmdlZCBhbmQgc2V0
Q29udGVudHNUb0NhbnZhcygpIGlzIGFsd2F5cyBjYWxsZWQuCisgICAgbV9jYW52YXNTaXplID0g
bV9jYW52YXNQbGF0Zm9ybUxheWVyID8gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxh
eWVyU2l6ZSgpIDogSW50U2l6ZSgpOworICAgIG1fY2FudmFzVG9rZW4gPSBtX2NhbnZhc1BsYXRm
b3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCkg
OiBHcmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgIEFTU0VSVCghKCFtX2NhbnZhc1Rva2VuLmlz
VmFsaWQoKSAmJiBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpKTsKKworICAgIGlmIChjbGllbnQoKSkK
KyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShwbGF0Zm9ybUxheWVyKTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKK3sKKyAgICBpZiAoZmlsdGVycygpID09
IG5ld0ZpbHRlcnMpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRpZENoYW5nZUZpbHRlcnMo
KTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKK30K
KyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1Nv
bGlkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlmIChtX2xheWVySW5mby5zb2xp
ZENvbG9yID09IGNvbG9yKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllckluZm8uc29saWRD
b2xvciA9IGNvbG9yOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcihib29sIHNob3cpCit7Cisg
ICAgaWYgKGlzU2hvd2luZ0RlYnVnQm9yZGVyKCkgPT0gc2hvdykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKHNob3cpOworICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFNob3dSZXBhaW50Q291bnRlcihib29sIHNob3cpCit7CisgICAgaWYgKGlzU2hvd2luZ1JlcGFp
bnRDb3VudGVyKCkgPT0gc2hvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXll
cjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKHNob3cpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFn
ZShJbWFnZSogaW1hZ2UpCit7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmV3TmF0aXZlSW1hZ2VQdHIg
PSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDogMDsKKyAgICBp
ZiAobmV3TmF0aXZlSW1hZ2VQdHIpIHsKKyAgICAgICAgLy8gVGhpcyBjb2RlIG1ha2VzIHRoZSBh
c3N1bXB0aW9uIHRoYXQgcG9pbnRlciBlcXVhbGl0eSBvbiBhIE5hdGl2ZUltYWdlUHRyIGlzIGEg
dmFsaWQgd2F5IHRvIHRlbGwgaWYgdGhlIGltYWdlIGlzIGNoYW5nZWQuCisgICAgICAgIC8vIFRo
aXMgYXNzdW1wdGlvbiBpcyB0cnVlIGluIFF0LCBHVEsgYW5kIEVGTC4KKyAgICAgICAgaWYgKG5l
d05hdGl2ZUltYWdlUHRyID09IG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0gaW1hZ2U7CisgICAgICAg
IG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gbmV3TmF0aXZlSW1hZ2VQdHI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAwOworICAgICAgICBtX2NvbXBvc2l0
ZWROYXRpdmVJbWFnZVB0ciA9IDA7CisgICAgfQorCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb0ltYWdlKGltYWdlKTsKKyAgICBkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVy
KiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7CisKKyAgICBpZiAo
IWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0U2l6ZShzaXplKCkpOwor
ICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUoY29udGVudHNBcmVWaXNpYmxlKCkpOworICAg
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRMYXllciA9IHRvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICBjb29yZGluYXRlZExheWVyLT5kaWRDaGFuZ2VM
YXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCitib29sIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZShJbWFnZSog
aW1hZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1hZ2Uo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZW51bSB7IE1heERpbWVuc3Rpb25Gb3JE
aXJlY3RDb21wb3NpdGluZyA9IDIwMDAgfTsKKyAgICBpZiAoaW1hZ2UtPndpZHRoKCkgPiBNYXhE
aW1lbnN0aW9uRm9yRGlyZWN0Q29tcG9zaXRpbmcgfHwgaW1hZ2UtPmhlaWdodCgpID4gTWF4RGlt
ZW5zdGlvbkZvckRpcmVjdENvbXBvc2l0aW5nKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJl
cGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChsYXllciA9
PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6
c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgpCit7
CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUo
KSkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9tYWluQmFja2luZ1N0
b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0
KSk7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisKKyAgICBhZGRSZXBhaW50UmVjdChy
ZWN0KTsKK30KKworQ29vcmRpbmF0ZWRMYXllcklEIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
aWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lkOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAoIW1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSkgewor
ICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hS
ZXF1aXJlZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtYXNr
TGF5ZXIoKSkpCisgICAgICAgIG1hc2stPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXll
ck9ubHkoKTsKKworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0
b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCisgICAgICAgIHJlcGxp
Y2EtPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIG1fY29v
cmRpbmF0b3ItPnN5bmNGaXhlZExheWVycygpOworCisgICAgZmx1c2hDb21wb3NpdGluZ1N0YXRl
Rm9yVGhpc0xheWVyT25seSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJl
bigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5mbHVzaENvbXBvc2l0aW5n
U3RhdGUocmVjdCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+KGxheWVyKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCit7CisgICAgaWYgKCFtX3Nob3Vs
ZFN5bmNDaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0NoaWxkcmVu
ID0gZmFsc2U7CisgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRJRHM7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBj
aGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRyZW4oKVtpXSkpOworCisg
ICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOworfQor
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnN5bmNGaWx0ZXJzKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCisgICAgICAg
IHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7CisgICAgbV9jb29yZGlu
YXRvci0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOworfQorI2VuZGlmCisKK3Zv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKCkKK3sKKyAgICBp
ZiAoIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hv
dWxkU3luY0ltYWdlQmFja2luZyA9IGZhbHNlOworCisgICAgaWYgKG1fY29tcG9zaXRlZE5hdGl2
ZUltYWdlUHRyKSB7CisgICAgICAgIEFTU0VSVCghc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKTsK
KyAgICAgICAgQVNTRVJUKG1fY29tcG9zaXRlZEltYWdlKTsKKworICAgICAgICBib29sIGltYWdl
SW5zdGFuY2VSZXBsYWNlZCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgKG1fY29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmctPmlkKCkgIT0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpKTsKKyAgICAg
ICAgaWYgKGltYWdlSW5zdGFuY2VSZXBsYWNlZCkKKyAgICAgICAgICAgIHJlbGVhc2VJbWFnZUJh
Y2tpbmdJZk5lZWRlZCgpOworCisgICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2lu
ZykgeworICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRpbmF0
b3ItPmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsK
KyAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZEhvc3QodGhpcyk7Cisg
ICAgICAgICAgICBtX2xheWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2lu
Zy0+aWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmct
Pm1hcmtEaXJ0eSgpOworICAgIH0gZWxzZQorICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZO
ZWVkZWQoKTsKKworICAgIC8vIHN5bmNJbWFnZUJhY2tpbmcoKSBjaGFuZ2VkIG1fbGF5ZXJJbmZv
LmltYWdlSUQuCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQoreworICAgIGlmICghbV9zaG91bGRT
eW5jTGF5ZXJTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0xheWVyU3Rh
dGUgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmll
d3BvcnQoKTsKKworICAgIG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlz
aWJpbGl0eSgpOworICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5U
cmFuc2Zvcm0oKTsKKyAgICBtX2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3Bh
cXVlKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7Cisg
ICAgbV9sYXllckluZm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7CisgICAgbV9sYXll
ckluZm8uY29udGVudHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNpYmxlKCk7CisgICAgbV9sYXll
ckluZm8ubWFzayA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKG1hc2tMYXllcigpKTsKKyAgICBtX2xh
eWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOworICAgIG1fbGF5ZXJJbmZv
Lm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVz
ZXJ2ZXMzRCgpOworICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJ
RChyZXBsaWNhTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3Jt
KCk7CisKKyAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IG1fYWRqdXN0ZWRBbmNob3JQb2lu
dDsKKyAgICBtX2xheWVySW5mby5wb3MgPSBtX2FkanVzdGVkUG9zaXRpb247CisgICAgbV9sYXll
ckluZm8uc2l6ZSA9IG1fYWRqdXN0ZWRTaXplOworCisgICAgbV9sYXllckluZm8uc2hvd0RlYnVn
Qm9yZGVycyA9IGlzU2hvd2luZ0RlYnVnQm9yZGVyKCk7CisgICAgaWYgKG1fbGF5ZXJJbmZvLnNo
b3dEZWJ1Z0JvcmRlcnMpCisgICAgICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOworICAgIG1f
bGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7
CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25z
dCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQoreworICAgIEFTU0VSVChtX2xheWVySW5mby5z
aG93RGVidWdCb3JkZXJzKTsKKyAgICBtX2xheWVySW5mby5kZWJ1Z0JvcmRlckNvbG9yID0gY29s
b3I7CisgICAgbV9sYXllckluZm8uZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQoreworICAgIGlmICgh
bV9zaG91bGRTeW5jQW5pbWF0aW9ucykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRT
eW5jQW5pbWF0aW9ucyA9IGZhbHNlOworCisgICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJBbmlt
YXRpb25zKG1faWQsIG1fYW5pbWF0aW9ucyk7Cit9CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKK3sKKyAgICBk
ZXN0cm95Q2FudmFzSWZOZWVkZWQoKTsKKyAgICBjcmVhdGVDYW52YXNJZk5lZWRlZCgpOworCisg
ICAgaWYgKCEobV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgU3luY0NhbnZhcykpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+U3luY0NhbnZhczsK
KworICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nv
b3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQoKQor
eworICAgIGlmICghKG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIERlc3Ryb3lDYW52YXMpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1ZhbGlkQ2FudmFzKSB7CisgICAgICAgIG1f
Y29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9pZCk7CisgICAgICAgIG1faXNWYWxpZENhbnZh
cyA9IGZhbHNlOworICAgIH0KKworICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+RGVz
dHJveUNhbnZhczsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNh
bnZhc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoIShtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBD
cmVhdGVDYW52YXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9jYW52YXNQbGF0
Zm9ybUxheWVyKTsKKyAgICBpZiAoIW1faXNWYWxpZENhbnZhcykgeworICAgICAgICBtX2Nvb3Jk
aW5hdG9yLT5jcmVhdGVDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICAg
ICAgbV9pc1ZhbGlkQ2FudmFzID0gdHJ1ZTsKKyAgICB9CisKKyAgICBtX3BlbmRpbmdDYW52YXNP
cGVyYXRpb24gJj0gfkNyZWF0ZUNhbnZhczsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCit7
CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7CisK
KyAgICAvLyBTZXRzIHRoZSB2YWx1ZXMuCisgICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KG1fYWRq
dXN0ZWRQb3NpdGlvbiwgbV9hZGp1c3RlZFNpemUsIG1fYWRqdXN0ZWRBbmNob3JQb2ludCwgbV9w
aXhlbEFsaWdubWVudE9mZnNldCk7CisKKyAgICBzeW5jSW1hZ2VCYWNraW5nKCk7CisgICAgc3lu
Y0xheWVyU3RhdGUoKTsKKyAgICBzeW5jQW5pbWF0aW9ucygpOworICAgIGNvbXB1dGVUcmFuc2Zv
cm1lZFZpc2libGVSZWN0KCk7CisgICAgc3luY0NoaWxkcmVuKCk7CisjaWYgRU5BQkxFKENTU19G
SUxURVJTKQorICAgIHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB1cGRhdGVDb250ZW50QnVm
ZmVycygpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHN5bmNDYW52YXMoKTsKKyNl
bmRpZgorfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW1hZ2VCYWNraW5nVmlz
aWJsZSgpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOworICAgIHJl
dHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkuaW50ZXJzZWN0cyhjb250ZW50c1Jl
Y3QoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VC
YWNraW5nSWZOZWVkZWQoKQoreworICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykK
KyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOworICAgIG1fY29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmctPnJlbW92ZUhvc3QodGhpcyk7CisgICAgbV9jb29yZGluYXRl
ZEltYWdlQmFja2luZy5jbGVhcigpOworICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBJbnZhbGlk
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCit7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCit7CisgICAgbV9s
YXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRS
ZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQor
eworICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X21haW5CYWNraW5nU3RvcmUtPnNldFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7
CisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgbV9wZW5kaW5nQ29udGVu
dHNTY2FsZUFkanVzdG1lbnQgPSB0cnVlOworfQorCitmbG9hdCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQoreworICAgIHJldHVybiBzZWxmT3JBbmNl
c3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkgPyAxIDogZGV2aWNlU2NhbGVGYWN0b3IoKSAq
IHBhZ2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
YWRqdXN0Q29udGVudHNTY2FsZSgpCit7CisgICAgQVNTRVJUKHNob3VsZEhhdmVCYWNraW5nU3Rv
cmUoKSk7CisgICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0b3Jl
LT5jb250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBh
bmQgcGFpbnRpbmcgdGhlIGNvbnRlbnQsCisgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZHJvcCB0
aGUgcHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCisgICAgLy8gYnJpZWZseSBz
ZWVpbmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZQor
ICAgIC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgorICAgIG1fcHJldmlvdXNCYWNraW5nU3Rv
cmUgPSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworCisgICAgLy8gTm8gcmVhc29uIHRv
IHNhdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFzLgor
ICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0b3JlKCkK
K3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3Rv
cmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7CisgICAgbV9t
YWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsKKyAg
ICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNT
Y2FsZSgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50
R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKK30KKwordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9y
PEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCit7CisgICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3Vu
dGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29vcmRpbmF0b3It
PnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgpKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVu
ZGluZ1RpbGVDcmVhdGlvbigpCit7CisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQo
KTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVp
cmVkKHRoaXMpOworfQorCitJbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRC
YWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQoreworICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworfQorCitzdGF0aWMgdm9pZCBjbGFtcFRv
Q29udGVudHNSZWN0SWZSZWN0SXNJbmZpbml0ZShGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEludFJl
Y3QmIGNvbnRlbnRzUmVjdCkKK3sKKyAgICBpZiAocmVjdC53aWR0aCgpID49IExheW91dFVuaXQ6
Om5lYXJseU1heCgpIHx8IHJlY3Qud2lkdGgoKSA8PSBMYXlvdXRVbml0OjpuZWFybHlNaW4oKSkg
eworICAgICAgICByZWN0LnNldFgoY29udGVudHNSZWN0LngoKSk7CisgICAgICAgIHJlY3Quc2V0
V2lkdGgoY29udGVudHNSZWN0LndpZHRoKCkpOworICAgIH0KKworICAgIGlmIChyZWN0LmhlaWdo
dCgpID49IExheW91dFVuaXQ6Om5lYXJseU1heCgpIHx8IHJlY3QuaGVpZ2h0KCkgPD0gTGF5b3V0
VW5pdDo6bmVhcmx5TWluKCkpIHsKKyAgICAgICAgcmVjdC5zZXRZKGNvbnRlbnRzUmVjdC55KCkp
OworICAgICAgICByZWN0LnNldEhlaWdodChjb250ZW50c1JlY3QuaGVpZ2h0KCkpOworICAgIH0K
K30KKworSW50UmVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3Jl
VmlzaWJsZVJlY3QoKQoreworICAgIC8vIE5vbi1pbnZlcnRpYmxlIGxheWVycyBhcmUgbm90IHZp
c2libGUuCisgICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNJbnZlcnRpYmxl
KCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAvLyBSZXR1cm4gYSBwcm9qZWN0
aW9uIG9mIHRoZSB2aXNpYmxlIHJlY3QgKHN1cmZhY2UgY29vcmRpbmF0ZXMpIG9udG8gdGhlIGxh
eWVyJ3MgcGxhbmUgKGxheWVyIGNvb3JkaW5hdGVzKS4KKyAgICAvLyBUaGUgcmVzdWx0aW5nIHF1
YWQgbWlnaHQgYmUgc3F1ZXdlZCBhbmQgdGhlIHZpc2libGUgcmVjdCBpcyB0aGUgYm91bmRpbmcg
Ym94IG9mIHRoaXMgcXVhZCwKKyAgICAvLyBzbyBpdCBtaWdodCBzcHJlYWQgZnVydGhlciB0aGFu
IHRoZSByZWFsIHZpc2libGUgYXJlYSAoYW5kIHRoZW4gZXZlbiBtb3JlIGFtcGxpZmllZCBieSB0
aGUgY292ZXIgcmVjdCBtdWx0aXBsaWVyKS4KKyAgICBBU1NFUlQobV9jYWNoZWRJbnZlcnNlVHJh
bnNmb3JtID09IG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkpOworICAgIEZs
b2F0UmVjdCByZWN0ID0gbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtLmNsYW1wZWRCb3VuZHNPZlBy
b2plY3RlZFF1YWQoRmxvYXRRdWFkKG1fY29vcmRpbmF0b3ItPnZpc2libGVDb250ZW50c1JlY3Qo
KSkpOworICAgIGNsYW1wVG9Db250ZW50c1JlY3RJZlJlY3RJc0luZmluaXRlKHJlY3QsIHRpbGVk
QmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KHJlY3QpOworfQorCitDb2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2lu
Z1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29udGVudHNPcGFx
dWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKK30KKworUGFzc093blB0
cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50
VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIHVpbnQzMl90JiBhdGxhcywgSW50UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CisgICAgQVNTRVJUKG1fY29vcmRp
bmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7CisgICAgcmV0dXJuIG1fY29vcmRpbmF0
b3ItPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gQ29vcmRpbmF0
ZWRTdXJmYWNlOjpOb0ZsYWdzIDogQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhhLCBh
dGxhcywgb2Zmc2V0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3Ip
OworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwor
ICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0
aWxlUmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxl
KHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0KQoreworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKKyAg
ICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKKyAgICBt
X2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJl
Y3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlVGlsZSh1aW50
MzJfdCB0aWxlSUQpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOworICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgfHwgbV9pc1B1cmdpbmcpOwor
ICAgIG1fY29vcmRpbmF0b3ItPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKK3sKKyAgICBp
ZiAoIXNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkgeworICAgICAgICBtX21haW5CYWNraW5nU3Rv
cmUuY2xlYXIoKTsKKyAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1
c3RtZW50KSB7CisgICAgICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKKyAgICAgICAgbV9wZW5k
aW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgPSBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGlz
IGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGlsZWQgYmFja2luZyBz
dG9yZSwgb25jZSB3ZQorICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFuZCB3ZSBhcmUgcmVh
ZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KKyAgICBpZiAoIW1fbWFpbkJh
Y2tpbmdTdG9yZSkKKyAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisKKyAgICBpZiAobV9w
ZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50KSB7CisgICAgICAgIG1fcGVuZGluZ1Zpc2libGVS
ZWN0QWRqdXN0bWVudCA9IGZhbHNlOworICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVy
V2l0aFRpbGVzSWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnVw
ZGF0ZVRpbGVCdWZmZXJzKCk7CisKKyAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBp
cyBrZXB0IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KKyAgICAvLyByZW1vdmlu
ZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZpcnN0
IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92ZSB0
aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZS4KKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlLT52
aXNpYmxlQXJlYUlzQ292ZXJlZCgpKQorICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNs
ZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdT
dG9yZXMoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gdXBk
YXRlTW9kZVByb3RlY3RvcihtX2lzUHVyZ2luZywgdHJ1ZSk7CisjZW5kaWYKKyAgICBtX21haW5C
YWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7
CisKKyAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKworICAgIGRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvb3Jk
aW5hdG9yKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCogY29vcmRpbmF0b3IpCit7Cisg
ICAgbV9jb29yZGluYXRvciA9IGNvb3JkaW5hdG9yOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKQoreworICAgIGlmIChz
aG91bGRIYXZlQmFja2luZ1N0b3JlKCkpCisgICAgICAgIG1fcGVuZGluZ1Zpc2libGVSZWN0QWRq
dXN0bWVudCA9IHRydWU7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpoYXNQ
ZW5kaW5nVmlzaWJsZUNoYW5nZXMoKQoreworICAgIGlmIChvcGFjaXR5KCkgPCAwLjAxICYmICFt
X2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAodG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPmhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRTeW5jQ2Fu
dmFzID0gZmFsc2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgc2hvdWxkU3luY0Nh
bnZhcyA9IG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIFN5bmNDYW52YXM7CisjZW5kaWYKKwor
ICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9zaG91bGRTeW5jQ2hpbGRyZW4g
JiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZyAmJiAh
bV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhc2hvdWxkU3luY0NhbnZhcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5p
bnRlcnNlY3RzKHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNJbnRlZ3JhbChmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pih2YWx1ZSkgPT0gdmFsdWU7Cit9CisKK0Zsb2F0UG9pbnQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZSgpCit7CisgICAgRmxv
YXRQb2ludCBvZmZzZXQ7CisgICAgZm9yIChjb25zdCBHcmFwaGljc0xheWVyKiBjdXJyTGF5ZXIg
PSB0aGlzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+cGFyZW50KCkpCisgICAg
ICAgIG9mZnNldCArPSBjdXJyTGF5ZXItPnBvc2l0aW9uKCk7CisKKyAgICByZXR1cm4gb2Zmc2V0
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVBpeGVsQWxpZ25t
ZW50KEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBGbG9hdFNpemUmIHNpemUsIEZsb2F0UG9pbnQzRCYg
YW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KQoreworICAgIGlmIChpc0lu
dGVncmFsKGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkpIHsKKyAgICAgICAgcG9zaXRpb24gPSBt
X3Bvc2l0aW9uOworICAgICAgICBzaXplID0gbV9zaXplOworICAgICAgICBhbmNob3JQb2ludCA9
IG1fYW5jaG9yUG9pbnQ7CisgICAgICAgIGFsaWdubWVudE9mZnNldCA9IEZsb2F0U2l6ZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRmxvYXRQb2ludCBwb3NpdGlvblJlbGF0aXZl
VG9CYXNlID0gY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKTsKKworICAgIEZsb2F0UmVj
dCBiYXNlUmVsYXRpdmVCb3VuZHMocG9zaXRpb25SZWxhdGl2ZVRvQmFzZSwgbV9zaXplKTsKKyAg
ICBGbG9hdFJlY3Qgc2NhbGVkQm91bmRzID0gYmFzZVJlbGF0aXZlQm91bmRzOworCisgICAgLy8g
U2NhbGUgYnkgdGhlIGVmZmVjdGl2ZSBzY2FsZSBmYWN0b3IgdG8gY29tcHV0ZSB0aGUgc2NyZWVu
LXJlbGF0aXZlIGJvdW5kcy4KKyAgICBzY2FsZWRCb3VuZHMuc2NhbGUoZWZmZWN0aXZlQ29udGVu
dHNTY2FsZSgpKTsKKworICAgIC8vIFJvdW5kIHRvIGludGVnZXIgYm91bmRhcmllcy4KKyAgICAv
LyBOT1RFOiBXaGVuIHVzaW5nIGVuY2xvc2luZ0ludFJlY3QgKGFzIG1hYykgaXQgd2lsbCBoYXZl
IGRpZmZlcmVudCBzaXplcyBkZXBlbmRpbmcgb24gcG9zaXRpb24uCisgICAgRmxvYXRSZWN0IGFs
aWduZWRCb3VuZHMgPSByb3VuZGVkSW50UmVjdChzY2FsZWRCb3VuZHMpOworCisgICAgLy8gQ29u
dmVydCBiYWNrIHRvIGxheWVyIGNvb3JkaW5hdGVzLgorICAgIGFsaWduZWRCb3VuZHMuc2NhbGUo
MSAvIGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7CisKKyAgICAvLyBDb252ZXJ0IGJhY2sgdG8g
bGF5ZXIgY29vcmRpbmF0ZXMuCisgICAgYWxpZ25tZW50T2Zmc2V0ID0gYmFzZVJlbGF0aXZlQm91
bmRzLmxvY2F0aW9uKCkgLSBhbGlnbmVkQm91bmRzLmxvY2F0aW9uKCk7CisKKyAgICBwb3NpdGlv
biA9IG1fcG9zaXRpb24gLSBhbGlnbm1lbnRPZmZzZXQ7CisgICAgc2l6ZSA9IGFsaWduZWRCb3Vu
ZHMuc2l6ZSgpOworCisgICAgLy8gTm93IHdlIGhhdmUgdG8gY29tcHV0ZSBhIG5ldyBhbmNob3Ig
cG9pbnQgd2hpY2ggY29tcGVuc2F0ZXMgZm9yIHJvdW5kaW5nLgorICAgIGZsb2F0IGFuY2hvclBv
aW50WCA9IG1fYW5jaG9yUG9pbnQueCgpOworICAgIGZsb2F0IGFuY2hvclBvaW50WSA9IG1fYW5j
aG9yUG9pbnQueSgpOworCisgICAgaWYgKGFsaWduZWRCb3VuZHMud2lkdGgoKSkKKyAgICAgICAg
YW5jaG9yUG9pbnRYID0gKGJhc2VSZWxhdGl2ZUJvdW5kcy53aWR0aCgpICogYW5jaG9yUG9pbnRY
ICsgYWxpZ25tZW50T2Zmc2V0LndpZHRoKCkpIC8gYWxpZ25lZEJvdW5kcy53aWR0aCgpOworCisg
ICAgaWYgKGFsaWduZWRCb3VuZHMuaGVpZ2h0KCkpCisgICAgICAgIGFuY2hvclBvaW50WSA9IChi
YXNlUmVsYXRpdmVCb3VuZHMuaGVpZ2h0KCkgKiBhbmNob3JQb2ludFkgKyBhbGlnbm1lbnRPZmZz
ZXQuaGVpZ2h0KCkpIC8gYWxpZ25lZEJvdW5kcy5oZWlnaHQoKTsKKworICAgIGFuY2hvclBvaW50
ID0gRmxvYXRQb2ludDNEKGFuY2hvclBvaW50WCwgYW5jaG9yUG9pbnRZLCBtX2FuY2hvclBvaW50
LnooKSAqIGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpCit7CisgICAgLy8g
V2hlbiB3ZSBoYXZlIGEgdHJhbnNmb3JtIGFuaW1hdGlvbiwgd2UgbmVlZCB0byB1cGRhdGUgdmlz
aWJsZSByZWN0IGV2ZXJ5IGZyYW1lIHRvIGFkanVzdCB0aGUgdmlzaWJsZSByZWN0IG9mIGEgYmFj
a2luZyBzdG9yZS4KKyAgICBib29sIGhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbiA9IHNlbGZP
ckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCk7CisgICAgaWYgKCFtX3Nob3Vs
ZFVwZGF0ZVZpc2libGVSZWN0ICYmICFoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgPSBmYWxzZTsKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyZW50VHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7Cisg
ICAgaWYgKGhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbikKKyAgICAgICAgY2xpZW50KCktPmdl
dEN1cnJlbnRUcmFuc2Zvcm0odGhpcywgY3VycmVudFRyYW5zZm9ybSk7CisgICAgbV9sYXllclRy
YW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsKKworICAgIG1fbGF5
ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobV9hZGp1c3RlZEFuY2hvclBvaW50KTsKKyAgICBt
X2xheWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fYWRqdXN0ZWRQb3NpdGlvbik7CisgICAgbV9s
YXllclRyYW5zZm9ybS5zZXRTaXplKG1fYWRqdXN0ZWRTaXplKTsKKworICAgIG1fbGF5ZXJUcmFu
c2Zvcm0uc2V0RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7CisgICAgbV9sYXllclRyYW5zZm9y
bS5zZXRDaGlsZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5zZm9ybSgpKTsKKyAgICBtX2xheWVy
VHJhbnNmb3JtLmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgpID8gdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIocGFyZW50KCkpLT5tX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkRm9yQ2hpbGRyZW4o
KSA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworCisgICAgbV9jYWNoZWRJbnZlcnNlVHJhbnNm
b3JtID0gbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKTsKKworICAgIC8vIFRo
ZSBjb21iaW5lZCB0cmFuc2Zvcm0gd2lsbCBiZSB1c2VkIGluIHRpbGVkQmFja2luZ1N0b3JlVmlz
aWJsZVJlY3QuCisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKK30KKworYm9v
bCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSBjb25z
dAoreworICAgIHJldHVybiBkcmF3c0NvbnRlbnQoKSAmJiBjb250ZW50c0FyZVZpc2libGUoKSAm
JiAhbV9zaXplLmlzRW1wdHkoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAg
ICBpZiAobV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKCFw
YXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+c2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zv
cm1BbmltYXRpb24oKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNlbGZP
ckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKQoreworICAgIGlmIChtX2FuaW1hdGlv
bnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNm
b3JtKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0u
Y29tYmluZWQoKS5pc0FmZmluZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICgh
cGFyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRy
YW5zZm9ybXMoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1h
dGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBJbnRTaXplJiBi
b3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0cmluZyYga2V5ZnJhbWVzTmFt
ZSwgZG91YmxlIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQpCit7CisgICAgQVNTRVJUKCFrZXlm
cmFtZXNOYW1lLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIWFuaW0gfHwgYW5pbS0+aXNFbXB0eU9y
WmVyb0R1cmF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIgfHwgKHZhbHVlTGlzdC5wcm9w
ZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0gJiYgdmFsdWVMaXN0LnBy
b3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKKyAgICBib29sIGlnbm9yZWRIYXNC
aWdSb3RhdGlvbjsKKworICAgIGlmICh2YWx1ZUxpc3QucHJvcGVydHkoKSA9PSBBbmltYXRlZFBy
b3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAgICBsaXN0c01hdGNoID0gdmFsaWRhdGVUcmFu
c2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaWdub3JlZEhhc0JpZ1JvdGF0aW9uKSA+PSAwOwor
CisgICAgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lID0gV1RGOjpjdXJyZW50VGltZSgpIC0gZGVs
YXlBc05lZ2F0aXZlVGltZU9mZnNldDsKKyAgICBtX2FuaW1hdGlvbnMuYWRkKEdyYXBoaWNzTGF5
ZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBib3hTaXplLCBhbmltLCBtX2xh
c3RBbmltYXRpb25TdGFydFRpbWUsIGxpc3RzTWF0Y2gpKTsKKyAgICBtX2FuaW1hdGlvblN0YXJ0
ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cGF1c2VB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgdGltZSkKK3sKKyAg
ICBtX2FuaW1hdGlvbnMucGF1c2UoYW5pbWF0aW9uTmFtZSwgdGltZSk7CisgICAgZGlkQ2hhbmdl
QW5pbWF0aW9ucygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3Zl
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKK3sKKyAgICBtX2FuaW1hdGlv
bnMucmVtb3ZlKGFuaW1hdGlvbk5hbWUpOworICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN1c3BlbmRBbmltYXRpb25zKGRvdWJs
ZSB0aW1lKQoreworICAgIG1fYW5pbWF0aW9ucy5zdXNwZW5kKHRpbWUpOworICAgIGRpZENoYW5n
ZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlc3Vt
ZUFuaW1hdGlvbnMoKQoreworICAgIG1fYW5pbWF0aW9ucy5yZXN1bWUoKTsKKyAgICBkaWRDaGFu
Z2VBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmlt
YXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+KikK
K3sKKyAgICBjbGllbnQoKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBtX2xhc3RBbmlt
YXRpb25TdGFydFRpbWUpOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTUxZDM1MTFhZGE2NDRlYmY3
MzJiZWY2MmU4NmFkOWQ4N2YxYTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oCkBAIC0wLDAgKzEsMjY4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCisjZGVmaW5lIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFj
a2luZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRUaWxlLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIlRpbGVkQmFj
a2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKyNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQor
I2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZVRva2VuLmgiCisjZW5kaWYKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjsKK2NsYXNz
IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFu
Z2VzKCkgY29uc3QgPSAwOworCisgICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50CisgICAgdmly
dHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKSA9
IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3Jl
YXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5
bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllcklu
Zm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKSA9IDA7CisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKKyNlbmRpZgorI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
eW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1MYXllciopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpID0gMDsKKyNlbmRp
ZgorCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5
ZXJJRCwgaW50KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKSA9IDA7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKikg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKSA9IDA7CisgICAgdmlydHVh
bCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IElu
dFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50
UG9pbnQmKSA9IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIgOiBwdWJs
aWMgR3JhcGhpY3NMYXllcgorICAgICwgcHVibGljIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50Cisg
ICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Okhvc3QKKyAgICAsIHB1YmxpYyBD
b29yZGluYXRlZFRpbGVDbGllbnQgeworcHVibGljOgorICAgIGV4cGxpY2l0IENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKCk7CisKKyAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIEdy
YXBoaWNzTGF5ZXIuaC4KKyAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9y
PEdyYXBoaWNzTGF5ZXIqPiYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChH
cmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJbmRl
eChHcmFwaGljc0xheWVyKiwgaW50KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKikg
T1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFy
ZW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0
UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludDNEJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3Qg
RmxvYXRTaXplJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
aGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0RHJhd3NDb250ZW50KGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1Zpc2libGUoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRl
bnRzT3BhcXVlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFjZVZp
c2liaWxpdHkoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxv
YXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50
UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1h
Z2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29sb3Io
Y29uc3QgQ29sb3ImKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd0RlYnVnQm9y
ZGVyKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93UmVwYWludENvdW50
ZXIoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNob3VsZERpcmVjdGx5Q29tcG9z
aXRlSW1hZ2UoSW1hZ2UqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25s
eSgpIE9WRVJSSURFOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2aXJ0dWFsIGJvb2wg
c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgT1ZFUlJJREU7CisjZW5kaWYKKyAg
ICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGRv
dWJsZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBT
dHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91
YmxlIHRpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCkg
T1ZFUlJJREU7CisKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNl
KCk7CisgICAgdm9pZCBjb21wdXRlUGl4ZWxBbGlnbm1lbnQoRmxvYXRQb2ludCYgcG9zaXRpb24s
IEZsb2F0U2l6ZSYsIEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25t
ZW50T2Zmc2V0KTsKKworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZl
Y3Rvcihjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsK
KworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBpZCgpIGNvbnN0OworCisgICAgdm9pZCBzZXRGaXhl
ZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1ZpZXdwb3J0ID0gaXNGaXhlZDsg
fQorCisgICAgSW50UmVjdCBjb3ZlclJlY3QoKSBjb25zdCB7IHJldHVybiBtX21haW5CYWNraW5n
U3RvcmUgPyBtX21haW5CYWNraW5nU3RvcmUtPm1hcFRvQ29udGVudHMobV9tYWluQmFja2luZ1N0
b3JlLT5jb3ZlclJlY3QoKSkgOiBJbnRSZWN0KCk7IH0KKworICAgIC8vIFRpbGVkQmFja2luZ1N0
b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHBhaW50ZWRB
cmVhKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVIYXNQZW5k
aW5nVGlsZUNyZWF0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IHRpbGVkQmFj
a2luZ1N0b3JlQ29udGVudHNSZWN0KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRSZWN0IHRp
bGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIENvbG9y
IHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QgT1ZFUlJJREU7CisKKyAg
ICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZSh1
aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgSW50U2l6ZSYsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURFOworCisg
ICAgdm9pZCBzZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsK
KworICAgIHZvaWQgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKKyAgICB2b2lkIHB1
cmdlQmFja2luZ1N0b3JlcygpOworICAgIGJvb2wgaGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCk7
CisKK3ByaXZhdGU6CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgZW51bSBQZW5kaW5n
Q2FudmFzT3BlcmF0aW9uIHsKKyAgICAgICAgTm9uZSA9IDB4MDAsCisgICAgICAgIENyZWF0ZUNh
bnZhcyA9IDB4MDEsCisgICAgICAgIERlc3Ryb3lDYW52YXMgPSAweDAyLAorICAgICAgICBTeW5j
Q2FudmFzID0gMHgwNCwKKyAgICAgICAgQ3JlYXRlQW5kU3luY0NhbnZhcyA9IENyZWF0ZUNhbnZh
cyB8IFN5bmNDYW52YXMsCisgICAgICAgIFJlY3JlYXRlQ2FudmFzID0gQ3JlYXRlQW5kU3luY0Nh
bnZhcyB8IERlc3Ryb3lDYW52YXMKKyAgICB9OworCisgICAgdm9pZCBzeW5jQ2FudmFzKCk7Cisg
ICAgdm9pZCBkZXN0cm95Q2FudmFzSWZOZWVkZWQoKTsKKyAgICB2b2lkIGNyZWF0ZUNhbnZhc0lm
TmVlZGVkKCk7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBzZXREZWJ1Z0JvcmRlcihjb25z
dCBDb2xvciYsIGZsb2F0IHdpZHRoKSBPVkVSUklERTsKKworICAgIGJvb2wgZml4ZWRUb1ZpZXdw
b3J0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvVmlld3BvcnQ7IH0KKworICAgIHZvaWQgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOworICAg
IHZvaWQgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKKyAgICB2b2lkIGRpZENoYW5nZUNoaWxkcmVuKCk7
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgZGlkQ2hhbmdlRmlsdGVycygpOwor
I2VuZGlmCisgICAgdm9pZCBkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKTsKKworICAgIHZvaWQgc3lu
Y0xheWVyU3RhdGUoKTsKKyAgICB2b2lkIHN5bmNBbmltYXRpb25zKCk7CisgICAgdm9pZCBzeW5j
Q2hpbGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzeW5jRmlsdGVy
cygpOworI2VuZGlmCisgICAgdm9pZCBzeW5jSW1hZ2VCYWNraW5nKCk7CisgICAgdm9pZCBjb21w
dXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOworICAgIHZvaWQgdXBkYXRlQ29udGVudEJ1ZmZl
cnMoKTsKKworICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7CisgICAgdm9pZCByZWxlYXNl
SW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKworICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpIb3N0CisgICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSBPVkVSUklERTsK
KyAgICBib29sIHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSBjb25zdDsKKyAgICBib29sIHNlbGZP
ckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBz
ZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7CisgICAgdm9pZCBhZGp1c3RD
b250ZW50c1NjYWxlKCk7CisKKyAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCk7
CisgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOworCisgICAgdm9pZCBhbmltYXRp
b25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI+Kik7CisK
KyAgICBDb29yZGluYXRlZExheWVySUQgbV9pZDsKKyAgICBDb29yZGluYXRlZExheWVySW5mbyBt
X2xheWVySW5mbzsKKyAgICBHcmFwaGljc0xheWVyVHJhbnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtOworICAg
IEZsb2F0U2l6ZSBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0OworICAgIEZsb2F0U2l6ZSBtX2FkanVz
dGVkU2l6ZTsKKyAgICBGbG9hdFBvaW50IG1fYWRqdXN0ZWRQb3NpdGlvbjsKKyAgICBGbG9hdFBv
aW50M0QgbV9hZGp1c3RlZEFuY2hvclBvaW50OworCisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wg
bV9pc1B1cmdpbmc7CisjZW5kaWYKKyAgICBib29sIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Q6
IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRlOiAxOworICAgIGJvb2wgbV9zaG91
bGRTeW5jQ2hpbGRyZW46IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNGaWx0ZXJzOiAxOworICAg
IGJvb2wgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5j
QW5pbWF0aW9uczogMTsKKyAgICBib29sIG1fZml4ZWRUb1ZpZXdwb3J0IDogMTsKKyAgICBib29s
IG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50IDogMTsKKyAgICBib29sIG1fcGVuZGlu
Z1Zpc2libGVSZWN0QWRqdXN0bWVudCA6IDE7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgYm9vbCBtX2lzVmFsaWRDYW52YXMgOiAxOworICAgIHVuc2lnbmVkIG1fcGVuZGluZ0NhbnZh
c09wZXJhdGlvbiA6IDM7CisjZW5kaWYKKworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCogbV9jb29yZGluYXRvcjsKKyAgICBPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1fbWFp
bkJhY2tpbmdTdG9yZTsKKyAgICBPd25QdHI8VGlsZWRCYWNraW5nU3RvcmU+IG1fcHJldmlvdXNC
YWNraW5nU3RvcmU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdlOworICAg
IE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOworICAgIFJlZlB0cjxD
b29yZGluYXRlZEltYWdlQmFja2luZz4gbV9jb29yZGluYXRlZEltYWdlQmFja2luZzsKKworICAg
IFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsKKyNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKKyAgICBJbnRTaXplIG1fY2FudmFzU2l6ZTsKKyAgICBHcmFwaGljc1N1cmZhY2VU
b2tlbiBtX2NhbnZhc1Rva2VuOworI2VuZGlmCisgICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKKyAgICBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyBtX2FuaW1hdGlvbnM7CisgICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZTsK
K307CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8g
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2OTI0ODI4NzVkNWNmYzIxZGI2YmIwZDZmMjAwZTFk
OTljNWIyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCkBAIC0w
LDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZEltYWdl
QmFja2luZy5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSogaW1hZ2UpCit7CisgICAg
Ly8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcga2VlcHMgYSBSZWZQdHI8SW1hZ2U+IG1lbWJlciwg
c28gdGhlIHNhbWUgSW1hZ2UgcG9pbnRlciBjYW4gbm90IHJlZmVyIHR3byBkaWZmZXJlbnQgaW5z
dGFuY2VzIHVudGlsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIHJlbGVhc2VzIHRoZSBtZW1iZXIu
CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4o
aW1hZ2UpOworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQdHI8
SW1hZ2U+IGltYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcoY2xpZW50LCBpbWFnZSkpOworfQorCitDb29yZGluYXRlZEltYWdlQmFja2luZzo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJ
bWFnZT4gaW1hZ2UpCisgICAgOiBtX2Nvb3JkaW5hdG9yKGNsaWVudCkKKyAgICAsIG1faW1hZ2Uo
aW1hZ2UpCisgICAgLCBtX2lkKGdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQobV9pbWFnZS5n
ZXQoKSkpCisgICAgLCBtX2NsZWFyQ29udGVudHNUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKQorICAgICwgbV9pc0RpcnR5KGZhbHNl
KQorICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCit7CisgICAgLy8gRklYTUU6IFdlIHdvdWxkIG5l
ZWQgdG8gZGVjb2RlIGEgc21hbGwgaW1hZ2UgZGlyZWN0bHkgaW50byBhIEdyYXBoaWNzU3VyZmFj
ZS4KKyAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMTQyNgorCisgICAgbV9jb29yZGluYXRv
ci0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOworfQorCitDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkKK3sKK30KKwordm9pZCBDb29yZGluYXRlZElt
YWdlQmFja2luZzo6YWRkSG9zdChIb3N0KiBob3N0KQoreworICAgIEFTU0VSVCghbV9ob3N0cy5j
b250YWlucyhob3N0KSk7CisgICAgbV9ob3N0cy5hcHBlbmQoaG9zdCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhvc3QoSG9zdCogaG9zdCkKK3sKKyAgICBzaXpl
X3QgcG9zaXRpb24gPSBtX2hvc3RzLmZpbmQoaG9zdCk7CisgICAgQVNTRVJUKHBvc2l0aW9uICE9
IG5vdEZvdW5kKTsKKyAgICBtX2hvc3RzLnJlbW92ZShwb3NpdGlvbik7CisKKyAgICBpZiAobV9o
b3N0cy5pc0VtcHR5KCkpCisgICAgICAgIG1fY29vcmRpbmF0b3ItPnJlbW92ZUltYWdlQmFja2lu
ZyhpZCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0RpcnR5KCkK
K3sKKyAgICBtX2lzRGlydHkgPSB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjp1cGRhdGUoKQoreworICAgIHJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKTsKKworICAgIGJv
b2wgY2hhbmdlZFRvVmlzaWJsZTsKKyAgICB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoY2hhbmdl
ZFRvVmlzaWJsZSk7CisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFjaGFuZ2VkVG9WaXNpYmxlKSB7CisgICAgICAgIGlmICghbV9pc0RpcnR5KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChtX25hdGl2ZUltYWdlUHRyID09IG1faW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpIHsKKyAgICAgICAgICAgIG1faXNEaXJ0
eSA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
bV9zdXJmYWNlID0gQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUobV9pbWFnZS0+c2l6ZSgpLCBt
X2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgpID8gQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBw
b3J0c0FscGhhIDogQ29vcmRpbmF0ZWRTdXJmYWNlOjpOb0ZsYWdzKTsKKyAgICBpZiAoIW1fc3Vy
ZmFjZSkgeworICAgICAgICBtX2lzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBtX2ltYWdlLT5zaXplKCkp
OworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZS5n
ZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVjdCwgcmVjdCk7CisKKyAgICBtX25hdGl2ZUlt
YWdlUHRyID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKworICAgIC8v
IElmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIHRyeSBhZ2FpbiBpbiB0aGUgbmV4dCB1cGRh
dGUuCisgICAgYm9vbCBzdWNjZXNzID0gbV9jb29yZGluYXRvci0+dXBkYXRlSW1hZ2VCYWNraW5n
KGlkKCksIG1fc3VyZmFjZSk7CisgICAgbV9pc0RpcnR5ID0gIXN1Y2Nlc3M7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbGVhc2VTdXJmYWNlSWZOZWVkZWQoKQoreworICAg
IC8vIFdlIG11c3Qga2VlcCBtX3N1cmZhY2UgdW50aWwgVUkgUHJvY2VzcyByZWFkcyBtX3N1cmZh
Y2UuCisgICAgLy8gSWYgbV9zdXJmYWNlIGV4aXN0cywgaXQgd2FzIGNyZWF0ZWQgaW4gdGhlIHBy
ZXZpb3VzIHVwZGF0ZS4KKyAgICBtX3N1cmZhY2UuY2xlYXIoKTsKK30KKworc3RhdGljIGNvbnN0
IGRvdWJsZSBjbGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCA9IDM7CisKK3ZvaWQgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29sJiBjaGFuZ2VkVG9W
aXNpYmxlKQoreworICAgIGJvb2wgcHJldmlvdXNJc1Zpc2libGUgPSBtX2lzVmlzaWJsZTsKKwor
ICAgIG1faXNWaXNpYmxlID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hv
c3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2hvc3RzW2ldLT5pbWFnZUJhY2tpbmdW
aXNpYmxlKCkpIHsKKyAgICAgICAgICAgIG1faXNWaXNpYmxlID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjaGFuZ2VkVG9JbnZpc2libGUg
PSBwcmV2aW91c0lzVmlzaWJsZSAmJiAhbV9pc1Zpc2libGU7CisgICAgaWYgKGNoYW5nZWRUb0lu
dmlzaWJsZSkgeworICAgICAgICBBU1NFUlQoIW1fY2xlYXJDb250ZW50c1RpbWVyLmlzQWN0aXZl
KCkpOworICAgICAgICBtX2NsZWFyQ29udGVudHNUaW1lci5zdGFydE9uZVNob3QoY2xlYXJDb250
ZW50c1RpbWVySW50ZXJ2YWwpOworICAgIH0KKworICAgIGNoYW5nZWRUb1Zpc2libGUgPSAhcHJl
dmlvdXNJc1Zpc2libGUgJiYgbV9pc1Zpc2libGU7CisKKyAgICBpZiAobV9pc1Zpc2libGUgJiYg
bV9jbGVhckNvbnRlbnRzVGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX2NsZWFyQ29udGVu
dHNUaW1lci5zdG9wKCk7CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSB0
ZXh0dXJlIGlmIHdlIGRpZG4ndCByZW1vdmUgdGhlIHRleHR1cmUuCisgICAgICAgIGNoYW5nZWRU
b1Zpc2libGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
PiopCit7CisgICAgbV9jb29yZGluYXRvci0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpZCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjViNWI1
N2E2ZWNiMTAxZWY3NWIyOTE5MWI1NzUwN2JlZGRhMmY3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmcuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworI2lmbmRlZiBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCisjZGVmaW5lIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5o
IgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb29yZGluYXRlZEltYWdlQmFja2luZyA6IHB1YmxpYyBSZWZDb3VudGVk
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiB7CitwdWJsaWM6CisgICAgY2xhc3MgQ29vcmRpbmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2lu
ZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCB1
cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckltYWdl
QmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KSA9IDA7CisgICAgfTsKKworICAgIGNsYXNzIEhvc3QgeworICAgIHB1YmxpYzoKKyAgICAgICAg
dmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zpc2libGUoKSA9IDA7CisgICAgfTsKKworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGUoQ29vcmRpbmF0
b3IqLCBQYXNzUmVmUHRyPEltYWdlPik7CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcoKTsKKworICAgIHN0YXRpYyBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGdldENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQoSW1hZ2UqKTsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorCisgICAgdm9pZCBhZGRIb3N0KEhvc3Qq
KTsKKyAgICB2b2lkIHJlbW92ZUhvc3QoSG9zdCopOworCisgICAgLy8gV2hlbiBhIG5ldyBpbWFn
ZSBpcyB1cGRhdGVkIG9yIGFuIGFuaW1hdGVkIGdpZiBpcyBwcm9ncmVzc2VkLCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIgY2FsbHMgbWFya0RpcnR5KCkuCisgICAgdm9pZCBtYXJrRGlydHkoKTsK
KworICAgIC8vIENyZWF0ZSwgcmVtb3ZlIG9yIHVwZGF0ZSBpdHMgYmFja2luZy4KKyAgICB2b2lk
IHVwZGF0ZSgpOworCitwcml2YXRlOgorICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdG9yKiwgUGFzc1JlZlB0cjxJbWFnZT4pOworCisgICAgdm9pZCByZWxlYXNlU3VyZmFjZUlm
TmVlZGVkKCk7CisgICAgdm9pZCB1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdl
ZFRvVmlzaWJsZSk7CisgICAgdm9pZCBjbGVhckNvbnRlbnRzVGltZXJGaXJlZChUaW1lcjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4qKTsKKworICAgIENvb3JkaW5hdG9yKiBtX2Nvb3JkaW5hdG9y
OworICAgIFJlZlB0cjxJbWFnZT4gbV9pbWFnZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX25hdGl2
ZUltYWdlUHRyOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgbV9pZDsKKyAgICBWZWN0
b3I8SG9zdCo+IG1faG9zdHM7CisKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1
cmZhY2U7CisKKyAgICBUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gbV9jbGVhckNvbnRl
bnRzVGltZXI7CisKKyAgICBib29sIG1faXNEaXJ0eTsKKyAgICBib29sIG1faXNWaXNpYmxlOwor
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
ZmEyYTEyZWQzZjQ2YzA4NDIzYjRiOWM0ZGM5MTY1NjlmMDM4Yjc2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkTGF5ZXJJbmZvLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllckluZm9faAorI2Rl
ZmluZSBDb29yZGluYXRlZExheWVySW5mb19oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgdWludDMy
X3QgQ29vcmRpbmF0ZWRMYXllcklEOworZW51bSB7IEludmFsaWRDb29yZGluYXRlZExheWVySUQg
PSAwIH07CisKK3R5cGVkZWYgdWludDY0X3QgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK2Vu
dW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCA9IDAgfTsKKworLy8gTk9URTog
Q29vcmRpbmF0ZWRMYXllckluZm8gc2hvdWxkIG9ubHkgdXNlIFBPRCB0eXBlcywgYXMgdG8gbWFr
ZSBzZXJpYWxpemF0aW9uIGZhc3Rlci4KK3N0cnVjdCBDb29yZGluYXRlZExheWVySW5mbyB7Cisg
ICAgQ29vcmRpbmF0ZWRMYXllckluZm8oKQorICAgICAgICA6IHJlcGxpY2EoSW52YWxpZENvb3Jk
aW5hdGVkTGF5ZXJJRCkKKyAgICAgICAgLCBtYXNrKEludmFsaWRDb29yZGluYXRlZExheWVySUQp
CisgICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkKKyAg
ICAgICAgLCBvcGFjaXR5KDApCisgICAgICAgICwgZGVidWdCb3JkZXJXaWR0aCgwKQorICAgICAg
ICAsIGZsYWdzKDApIHsgfQorCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIHJlcGxpY2E7CisgICAg
Q29vcmRpbmF0ZWRMYXllcklEIG1hc2s7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEOworCisgICAgRmxvYXRQb2ludCBwb3M7CisgICAgRmxvYXRQb2ludDNEIGFuY2hvclBv
aW50OworICAgIEZsb2F0U2l6ZSBzaXplOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9ybTsKKyAgICBJ
bnRSZWN0IGNvbnRlbnRzUmVjdDsKKyAgICBmbG9hdCBvcGFjaXR5OworICAgIENvbG9yIHNvbGlk
Q29sb3I7CisgICAgQ29sb3IgZGVidWdCb3JkZXJDb2xvcjsKKyAgICBmbG9hdCBkZWJ1Z0JvcmRl
cldpZHRoOworCisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgYm9v
bCBjb250ZW50c09wYXF1ZSA6IDE7CisgICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7
CisgICAgICAgICAgICBib29sIGNvbnRlbnRzVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBib29s
IGJhY2tmYWNlVmlzaWJsZSA6IDE7CisgICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAx
OworICAgICAgICAgICAgYm9vbCBwcmVzZXJ2ZXMzRCA6IDE7CisgICAgICAgICAgICBib29sIGlz
Um9vdExheWVyOiAxOworICAgICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOworICAg
ICAgICAgICAgYm9vbCBzaG93RGVidWdCb3JkZXJzIDogMTsKKyAgICAgICAgICAgIGJvb2wgc2hv
d1JlcGFpbnRDb3VudGVyIDogMTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5zaWduZWQgZmxhZ3M7
CisgICAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjlhOTQyMzcyNzQzNWE0NTg0ZDc1YmQwMDM4YWIzNmQ3MWYwYTM2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFj
ZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0Nvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSogQ29vcmRpbmF0ZWRTdXJmYWNlOjpz
X2ZhY3RvcnkgPSAwOworCit2b2lkIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeShDb29y
ZGluYXRlZFN1cmZhY2U6OkZhY3RvcnkgZmFjdG9yeSkKK3sKKyAgICBzX2ZhY3RvcnkgPSBmYWN0
b3J5OworfQorCitQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRTdXJm
YWNlOjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCit7CisgICAgQVNT
RVJUKHNfZmFjdG9yeSk7CisgICAgcmV0dXJuIHNfZmFjdG9yeShzaXplLCBmbGFncyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zMDc3YzNjMDljNGFiMDY3ZmZiOTg2NjZiNDBmNjA3NTk3ODVlNWQ2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgQ29weXJp
Z2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgorCisgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkU3VyZmFjZV9oCisjZGVmaW5lIENvb3JkaW5h
dGVkU3VyZmFjZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQml0bWFwVGV4dHVyZTsKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKKworY2xhc3MgQ29vcmRpbmF0ZWRTdXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPENvb3JkaW5hdGVkU3VyZmFjZT4geworcHVibGljOgorICAgIGVudW0gRmxhZyB7Cisg
ICAgICAgIE5vRmxhZ3MgPSAwLAorICAgICAgICBTdXBwb3J0c0FscGhhID0gMSA8PCAwLAorICAg
IH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBGbGFnczsKKworICAgIHR5cGVkZWYgUGFzc1JlZlB0
cjxDb29yZGluYXRlZFN1cmZhY2U+IEZhY3RvcnkoY29uc3QgSW50U2l6ZSYsIEZsYWdzKTsKKyAg
ICBzdGF0aWMgdm9pZCBzZXRGYWN0b3J5KEZhY3RvcnkpOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlKGNvbnN0IEludFNpemUmLCBGbGFncyk7CisKKyAg
ICB2aXJ0dWFsIH5Db29yZGluYXRlZFN1cmZhY2UoKSB7IH0KKworICAgIGJvb2wgc3VwcG9ydHNB
bHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBTdXBwb3J0c0FscGhhOyB9CisgICAgdmly
dHVhbCBJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7CisKKyAgICAvLyBDcmVhdGUgYSBncmFwaGlj
cyBjb250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFpbnQgaW50byB0aGUgYmFja2luZyBzdG9y
ZS4KKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVHcmFwaGlj
c0NvbnRleHQoY29uc3QgSW50UmVjdCYpID0gMDsKKworI2lmIFVTRShURVhUVVJFX01BUFBFUikK
KyAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4dHVyZShQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
LCBjb25zdCBJbnRSZWN0JiB0YXJnZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQpID0g
MDsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBGbGFncyBmbGFncygpIGNvbnN0
ID0gMDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGYWN0b3J5
KiBzX2ZhY3Rvcnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRTdXJmYWNlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZFRpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWY5ZDM0ZTYwNWIwZTJiMjUyNjhiYWE2NmM0ODA1ZGJlZmEyMDkzMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZFRpbGUuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgi
CisKKyNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiU3VyZmFjZVVwZGF0
ZUluZm8uaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBJbnZhbGlkQ29vcmRpbmF0ZWRU
aWxlSUQgPSAwOworCitDb29yZGluYXRlZFRpbGU6OkNvb3JkaW5hdGVkVGlsZShDb29yZGluYXRl
ZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3Jl
LCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKKyAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCisgICAgLCBt
X2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCisgICAgLCBtX3JlY3QodGlsZWRCYWNraW5nU3Rv
cmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCisgICAgLCBtX0lEKElu
dmFsaWRDb29yZGluYXRlZFRpbGVJRCkKKyAgICAsIG1fZGlydHlSZWN0KG1fcmVjdCkKK3sKK30K
KworQ29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRUaWxlKCkKK3sKKyAgICBpZiAobV9JRCAh
PSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxl
KG1fSUQpOworfQorCitib29sIENvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRU
aWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBJbnRSZWN0
IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOworICAgIGlm
ICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9kaXJ0
eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Cit9CisKK1ZlY3RvcjxJbnRSZWN0PiBDb29yZGlu
YXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQoreworICAgIGlmICghaXNEaXJ0eSgpKQorICAg
ICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CisKKyAgICBTdXJmYWNlVXBkYXRlSW5mbyB1
cGRhdGVJbmZvOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJ
bmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7CisgICAgaWYgKCFncmFwaGlj
c0NvbnRleHQpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKKyAgICBncmFwaGlj
c0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsK
KyAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3Jl
LT5jb250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkp
OworICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBh
aW50KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250
ZW50cyhtX2RpcnR5UmVjdCkpOworCisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0
eVJlY3Q7CisgICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3Jl
Y3QueSgpKTsKKyAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9y
ZS0+Y29udGVudHNTY2FsZSgpOworICAgIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7CisKKyAg
ICBzdGF0aWMgdWludDMyX3QgaWQgPSAxOworICAgIGlmIChtX0lEID09IEludmFsaWRDb29yZGlu
YXRlZFRpbGVJRCkgeworICAgICAgICBtX0lEID0gaWQrKzsKKyAgICAgICAgLy8gV2UgbWF5IGdl
dCBhbiBpbnZhbGlkIElEIGR1ZSB0byB3cmFwLWFyb3VuZCBvbiBvdmVyZmxvdy4KKyAgICAgICAg
aWYgKG1fSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEKQorICAgICAgICAgICAgbV9JRCA9
IGlkKys7CisgICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1f
cmVjdCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY2xpZW50LT51cGRhdGVUaWxlKG1fSUQsIHVw
ZGF0ZUluZm8sIG1fcmVjdCk7CisKKyAgICBWZWN0b3I8SW50UmVjdD4gdXBkYXRlZFJlY3RzOwor
ICAgIHVwZGF0ZWRSZWN0cy5hcHBlbmQobV9kaXJ0eVJlY3QpOworICAgIG1fZGlydHlSZWN0ID0g
SW50UmVjdCgpOworICAgIHJldHVybiB1cGRhdGVkUmVjdHM7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQoreworICAgIC8vIEhhbmRsZWQgYnkgdGls
ZWRCYWNraW5nU3RvcmVQYWludEVuZC4KK30KKworYm9vbCBDb29yZGluYXRlZFRpbGU6OmlzUmVh
ZHlUb1BhaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0
ZWRUaWxlSUQ7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpwYWludChHcmFwaGljc0NvbnRl
eHQqLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZFRpbGU6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQorewor
ICAgIG1fcmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOworICAgIG1f
ZGlydHlSZWN0ID0gbV9yZWN0OworfQorCitDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGlu
YXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KQorICAgIDogbV9j
bGllbnQoY2xpZW50KQoreworfQorCitQYXNzUmVmUHRyPFRpbGU+IENvb3JkaW5hdGVkVGlsZUJh
Y2tlbmQ6OmNyZWF0ZVRpbGUoVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBj
b25zdCBUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKK3sKKyAgICByZXR1cm4gQ29v
cmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29v
cmRpbmF0ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6cGFpbnRDaGVja2Vy
UGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZTk5
YmZkYWZlZjQ5MWRhZDNhMzZmZmM1YjIzZjQ0NDdkYmVlNDVmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkVGlsZS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ29vcmRpbmF0ZWRUaWxlX2gKKyNkZWZpbmUgQ29vcmRpbmF0ZWRUaWxlX2gKKwor
I2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIlRpbGUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkVGlsZUNsaWVudDsKK2NsYXNzIEltYWdl
QnVmZmVyOworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CitjbGFzcyBUaWxlZEJhY2tpbmdTdG9y
ZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRUaWxlIDogcHVibGljIFRpbGUgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0ZShDb29yZGluYXRlZFRpbGVDbGllbnQqIGNs
aWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGlu
YXRlJiB0aWxlQ29vcmRpbmF0ZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkVGls
ZShjbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSkpOyB9CisgICAgfkNv
b3JkaW5hdGVkVGlsZSgpOworCisgICAgYm9vbCBpc0RpcnR5KCkgY29uc3Q7CisgICAgdm9pZCBp
bnZhbGlkYXRlKGNvbnN0IEludFJlY3QmKTsKKyAgICBWZWN0b3I8SW50UmVjdD4gdXBkYXRlQmFj
a0J1ZmZlcigpOworICAgIHZvaWQgc3dhcEJhY2tCdWZmZXJUb0Zyb250KCk7CisgICAgYm9vbCBp
c1JlYWR5VG9QYWludCgpIGNvbnN0OworICAgIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgSW50UmVjdCYpOworCisgICAgY29uc3QgQ29vcmRpbmF0ZSYgY29vcmRpbmF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29vcmRpbmF0ZTsgfQorICAgIGNvbnN0IEludFJlY3QmIHJlY3QoKSBj
b25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHJlc2l6ZShjb25zdCBJbnRTaXplJik7
CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRUaWxlKENvb3JkaW5hdGVkVGlsZUNsaWVudCos
IFRpbGVkQmFja2luZ1N0b3JlKiwgY29uc3QgQ29vcmRpbmF0ZSYpOworCisgICAgQ29vcmRpbmF0
ZWRUaWxlQ2xpZW50KiBtX2NsaWVudDsKKyAgICBUaWxlZEJhY2tpbmdTdG9yZSogbV90aWxlZEJh
Y2tpbmdTdG9yZTsKKyAgICBDb29yZGluYXRlIG1fY29vcmRpbmF0ZTsKKyAgICBJbnRSZWN0IG1f
cmVjdDsKKworICAgIHVpbnQzMl90IG1fSUQ7CisgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKKwor
ICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gbV9sb2NhbEJ1ZmZlcjsKK307CisKK2NsYXNzIENvb3Jk
aW5hdGVkVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRUaWxl
Q2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRl
SW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUo
dWludDMyX3QgdGlsZUlEKSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCB1aW50MzJfdCYgYXRsYXNJ
RCwgSW50UG9pbnQmKSA9IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFRpbGVCYWNrZW5kIDog
cHVibGljIFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8VGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxl
Q2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb29yZGluYXRlZFRpbGVCYWNr
ZW5kKGNsaWVudCkpOyB9CisgICAgUGFzc1JlZlB0cjxUaWxlPiBjcmVhdGVUaWxlKFRpbGVkQmFj
a2luZ1N0b3JlKiwgY29uc3QgVGlsZTo6Q29vcmRpbmF0ZSYpOworICAgIHZvaWQgcGFpbnRDaGVj
a2VyUGF0dGVybihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBDb29yZGluYXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNs
aWVudCopOworICAgIENvb3JkaW5hdGVkVGlsZUNsaWVudCogbV9jbGllbnQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
KworI2VuZGlmIC8vIENvb3JkaW5hdGVkVGlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9T
dXJmYWNlVXBkYXRlSW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZhYjM4NGExMWVhYTVlYTI1NDA4MTNjNzAy
NWU1ZmM4YzE3ZDM5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaApAQCAtMCww
ICsxLDUzIEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBTdXJmYWNlVXBkYXRlSW5mb19oCisjZGVmaW5lIFN1cmZhY2VVcGRhdGVJbmZvX2gKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
dXJmYWNlVXBkYXRlSW5mbyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3VyZmFjZVVwZGF0
ZUluZm8pOworCitwdWJsaWM6CisgICAgU3VyZmFjZVVwZGF0ZUluZm8oKSB7IH0KKworICAgIC8v
IFRoZSByZWN0IHRvIGJlIHVwZGF0ZWQuCisgICAgSW50UmVjdCB1cGRhdGVSZWN0OworCisgICAg
Ly8gVGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIHVzZWQgdG8gcmVuZGVyIHRoaXMgdXBkYXRlLgorICAg
IGZsb2F0IHNjYWxlRmFjdG9yOworCisgICAgLy8gVGhlIGlkIG9mIHRoZSB1cGRhdGUgYXRsYXMg
aW5jbHVkaW5nIHRoZSBzaGFyZWFibGUgYml0bWFwIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZXMuCisg
ICAgdWludDMyX3QgYXRsYXNJRDsKKworICAgIC8vIFRoZSBvZmZzZXQgaW4gdGhlIGJpdG1hcCB3
aGVyZSB0aGUgcmVuZGVyZWQgY29udGVudHMgYXJlLgorICAgIEludFBvaW50IHN1cmZhY2VPZmZz
ZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBTdXJmYWNlVXBkYXRlSW5mb19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VGV4dHVyZU1hcHBlclNjZW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9UZXh0dXJlTWFwcGVyU2NlbmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJj
N2Q4YWJkYzFjYmUwNGYwNDgzMDAxYmYxODJmYTUzY2Y5MzM4MzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVGV4
dHVyZU1hcHBlclNjZW5lLmNwcApAQCAtMCwwICsxLDY5OCBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
ICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclNjZW5lLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyTGF5ZXIu
aCIKKyNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Cisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNp
bmNsdWRlICJDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkNv
b3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBy
b2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmRpc3BhdGNo
T25NYWluVGhyZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQoreworICAgIGlm
IChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgZnVuY3Rpb24oKTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoZnVuY3Rpb24pOworfQorCitzdGF0aWMgRmxvYXRQb2ludCBib3Vu
ZGVkU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgdmlzaWJsZUNvbnRlbnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRT
aXplKQoreworICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0
aW9uLngoKSwgMC4wZik7CisgICAgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Nyb2xsUG9z
aXRpb25YLCBjb250ZW50U2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRoKCkp
OworCisgICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24u
eSgpLCAwLjBmKTsKKyAgICBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlv
blksIGNvbnRlbnRTaXplLmhlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpKTsK
KyAgICByZXR1cm4gRmxvYXRQb2ludChzY3JvbGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9uWSk7
Cit9CisKK3N0YXRpYyBib29sIGxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShHcmFwaGljc0xh
eWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXItPmRyYXdzQ29udGVudCgpICYmIGxheWVy
LT5jb250ZW50c0FyZVZpc2libGUoKSAmJiAhbGF5ZXItPnNpemUoKS5pc0VtcHR5KCk7Cit9CisK
K1RleHR1cmVNYXBwZXJTY2VuZTo6VGV4dHVyZU1hcHBlclNjZW5lKFRleHR1cmVNYXBwZXJTY2Vu
ZUNsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pc0FjdGl2
ZShmYWxzZSkKKyAgICAsIG1fcm9vdExheWVySUQoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkK
KyAgICAsIG1fYW5pbWF0aW9uc0xvY2tlZChmYWxzZSkKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCisgICAgLCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKGZhbHNlKQorI2Vu
ZGlmCisgICAgLCBtX2JhY2tncm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCisgICAgLCBtX3NldERy
YXdzQmFja2dyb3VuZChmYWxzZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQor
CitUZXh0dXJlTWFwcGVyU2NlbmU6On5UZXh0dXJlTWFwcGVyU2NlbmUoKQoreworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJTY2VuZTo6cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBj
bGlwUmVjdCwgVGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQoreworICAgIGlm
ICghbV90ZXh0dXJlTWFwcGVyKSB7CisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVN
YXBwZXI6OmNyZWF0ZShUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKKyAgICAgICAgc3RhdGlj
X2Nhc3Q8VGV4dHVyZU1hcHBlckdMKj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5hYmxl
RWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKHRydWUpOworICAgIH0KKworICAgIEFTU0VSVChtX3Rl
eHR1cmVNYXBwZXItPmFjY2VsZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xN
b2RlKTsKKyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworCisgICAgYWRqdXN0UG9zaXRpb25Gb3JG
aXhlZExheWVycygpOworICAgIEdyYXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290
TGF5ZXIoKTsKKyAgICBpZiAoIWN1cnJlbnRSb290TGF5ZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJy
ZW50Um9vdExheWVyKTsKKworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IGxheWVyLT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7CisgICAgaWYg
KCFtX2FuaW1hdGlvbnNMb2NrZWQpCisgICAgICAgIGxheWVyLT5hcHBseUFuaW1hdGlvbnNSZWN1
cnNpdmVseSgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZsYWdz
KTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCBjbGlwUmVjdCk7CisKKyAgICBpZiAobV9zZXREcmF3c0JhY2tncm91bmQpIHsKKyAgICAgICAg
UkdCQTMyIHJnYmEgPSBtYWtlUkdCQTMyRnJvbUZsb2F0cyhtX2JhY2tncm91bmRDb2xvci5yZWQo
KSwKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yLmdyZWVuKCksIG1fYmFja2dyb3VuZENv
bG9yLmJsdWUoKSwKKyAgICAgICAgICAgIG1fYmFja2dyb3VuZENvbG9yLmFscGhhKCkgKiBvcGFj
aXR5KTsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwg
VHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgQ29sb3IocmdiYSkpOworICAgIH0KKworICAgIGlmIChj
dXJyZW50Um9vdExheWVyLT5vcGFjaXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVy
LT50cmFuc2Zvcm0oKSAhPSBtYXRyaXgpIHsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0
T3BhY2l0eShvcGFjaXR5KTsKKyAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3Jt
KG1hdHJpeCk7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICB9CisKKyAgICBsYXllci0+cGFpbnQoKTsKKyAgICBt
X3RleHR1cmVNYXBwZXItPmVuZENsaXAoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50
aW5nKCk7CisKKyAgICBpZiAobGF5ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmlt
YXRpb25zKCkpCisgICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJlRleHR1cmVNYXBw
ZXJTY2VuZTo6dXBkYXRlVmlld3BvcnQsIHRoaXMpKTsKKworI2lmIEVOQUJMRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRSkKKyAgICBpZiAobV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZCkgeworICAg
ICAgICBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkID0gZmFsc2U7CisgICAgICAgIGRpc3BhdGNo
T25NYWluVGhyZWFkKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6YW5pbWF0aW9uRnJhbWVSZWFk
eSwgdGhpcykpOworICAgIH0KKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmFuaW1hdGlvbkZyYW1lUmVhZHko
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+YW5pbWF0aW9uRnJhbWVSZWFkeSgpOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJTY2VuZTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKK3sKKyAgICBtX2FuaW1hdGlvbkZy
YW1lUmVxdWVzdGVkID0gdHJ1ZTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpCit2b2lk
IFRleHR1cmVNYXBwZXJTY2VuZTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChRUGFpbnRlciogcGFp
bnRlcikKKyNlbGlmIFVTRShDQUlSTykKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpwYWludFRv
R3JhcGhpY3NDb250ZXh0KGNhaXJvX3QqIHBhaW50ZXIpCisjZW5kaWYKK3sKKyAgICBpZiAoIW1f
dGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6
Y3JlYXRlKCk7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgp
ID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJlTW9kZSk7CisgICAgc3luY1JlbW90ZUNvbnRlbnQo
KTsKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIo
cm9vdExheWVyKCkpOworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChwYWludGVyKTsKKyAgICBtX3RleHR1cmVN
YXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKKworICAgIGlmIChtX3NldERyYXdzQmFja2dyb3Vu
ZCkKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihncmFwaGljc0NvbnRl
eHQuY2xpcEJvdW5kcygpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBtX2JhY2tncm91bmRDb2xv
cik7CisKKyAgICBsYXllci0+cGFpbnQoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50
aW5nKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoMCk7Cit9CisK
K3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXpl
JiBjb250ZW50c1NpemUpCit7CisgICAgbV9jb250ZW50c1NpemUgPSBjb250ZW50c1NpemU7Cit9
CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBtX3Zpc2libGVDb250ZW50c1JlY3QgPSByZWN0Owor
fQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6dXBkYXRlVmlld3BvcnQoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVu
dC0+dXBkYXRlVmlld3BvcnQoKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmFkanVz
dFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKQoreworICAgIGlmIChtX2ZpeGVkTGF5ZXJzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRml4ZWQgbGF5ZXIgcG9zaXRpb25zIGFy
ZSB1cGRhdGVkIGJ5IHRoZSB3ZWIgcHJvY2VzcyB3aGVuIHdlIHVwZGF0ZSB0aGUgdmlzaWJsZSBj
b250ZW50cyByZWN0IC8gc2Nyb2xsIHBvc2l0aW9uLgorICAgIC8vIElmIHdlIHdhbnQgdGhvc2Ug
bGF5ZXJzIHRvIGZvbGxvdyBhY2N1cmF0ZWx5IHRoZSB2aWV3cG9ydCB3aGVuIHdlIG1vdmUgYmV0
d2VlbiB0aGUgd2ViIHByb2Nlc3MgdXBkYXRlcywgd2UgaGF2ZSB0byBvZmZzZXQKKyAgICAvLyB0
aGVtIGJ5IHRoZSBkZWx0YSBiZXR3ZWVuIHRoZSBjdXJyZW50IHBvc2l0aW9uIGFuZCB0aGUgcG9z
aXRpb24gb2YgdGhlIHZpZXdwb3J0IHVzZWQgZm9yIHRoZSBsYXN0IGxheW91dC4KKyAgICBGbG9h
dFBvaW50IHNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1fdmlzaWJsZUNv
bnRlbnRzUmVjdC5sb2NhdGlvbigpLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNT
aXplKTsKKyAgICBGbG9hdFBvaW50IHJlbmRlcmVkU2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Ny
b2xsUG9zaXRpb24obV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24sIG1fdmlzaWJsZUNv
bnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworICAgIEZsb2F0U2l6ZSBkZWx0YSA9IHNjcm9s
bFBvc2l0aW9uIC0gcmVuZGVyZWRTY3JvbGxQb3NpdGlvbjsKKworICAgIExheWVyUmF3UHRyTWFw
OjppdGVyYXRvciBlbmQgPSBtX2ZpeGVkTGF5ZXJzLmVuZCgpOworICAgIGZvciAoTGF5ZXJSYXdQ
dHJNYXA6Oml0ZXJhdG9yIGl0ID0gbV9maXhlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKGl0LT52YWx1ZSktPnNldFNjcm9sbFBv
c2l0aW9uRGVsdGFJZk5lZWRlZChkZWx0YSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5l
OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sK
KyAgICBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBwb3NpdGlvbjsK
K30KKworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6
OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEludFNpemUmLCBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJl
TWFwcGVyKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisgICAg
QVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7CisKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShU
ZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1fc3VyZmFj
ZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUpOworCisgICAgY2FudmFz
QmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uoc3VyZmFjZSk7CisgICAgbGF5ZXItPnNl
dENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOworfQorCit2b2lkIFRl
eHR1cmVNYXBwZXJTY2VuZTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIHVpbnQz
Ml90IGZyb250QnVmZmVyKQoreworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOworICAgIEFT
U0VSVChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7CisKKyAgICBTdXJmYWNl
QmFja2luZ1N0b3JlTWFwOjppdGVyYXRvciBpdCA9IG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuZmlu
ZChpZCk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBjYW52
YXNCYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CisKKyAgICBjYW52YXNCYWNraW5nU3RvcmUtPnN3
YXBCdWZmZXJzSWZOZWVkZWQoZnJvbnRCdWZmZXIpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJT
Y2VuZTo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCit7CisgICAgQVNTRVJU
KG1fdGV4dHVyZU1hcHBlcik7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQo
aWQpOworICAgIEFTU0VSVChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7CisK
KyAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShpZCk7CisgICAgbGF5ZXItPnNldENv
bnRlbnRzVG9NZWRpYSgwKTsKK30KKyNlbmRpZgorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6
c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCit7
CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworICAgIHRvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRSZXBhaW50Q291bnQodmFsdWUpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExh
eWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZElEcykKK3sK
KyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisgICAgVmVjdG9yPEdy
YXBoaWNzTGF5ZXIqPiBjaGlsZHJlbjsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hp
bGRJRHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRMYXllcklEIGNoaWxkSUQg
PSBjaGlsZElEc1tpXTsKKyAgICAgICAgR3JhcGhpY3NMYXllciogY2hpbGQgPSBsYXllckJ5SUQo
Y2hpbGRJRCk7CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7CisgICAgfQorICAgIGxh
eWVyLT5zZXRDaGlsZHJlbihjaGlsZHJlbik7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Cit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKK3sKKyAgICBHcmFwaGlj
c0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMp
CisgICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoZmlsdGVycyk7CisjZW5kaWYK
KyAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKK30KKyNlbmRpZgorCisjaWYgRU5BQkxF
KENTU19TSEFERVJTKQordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmluamVjdENhY2hlZEN1c3Rv
bUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0Cit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5vcGVyYXRpb25zKCkuYXQo
aSkuZ2V0KCk7CisgICAgICAgIGlmIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSAhPSBG
aWx0ZXJPcGVyYXRpb246OkNVU1RPTSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXN0b21PcGVyYXRpb24gPSBzdGF0
aWNfY2FzdDxDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbio+KG9wZXJhdGlvbik7Cisg
ICAgICAgIEFTU0VSVCghY3VzdG9tT3BlcmF0aW9uLT5wcm9ncmFtKCkpOworICAgICAgICBDdXN0
b21GaWx0ZXJQcm9ncmFtTWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQ
cm9ncmFtcy5maW5kKGN1c3RvbU9wZXJhdGlvbi0+cHJvZ3JhbUlEKCkpOworICAgICAgICBBU1NF
UlQoaXRlciAhPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmVuZCgpKTsKKyAgICAgICAgY3VzdG9t
T3BlcmF0aW9uLT5zZXRQcm9ncmFtKGl0ZXItPnZhbHVlLmdldCgpKTsKKyAgICB9Cit9CisKK3Zv
aWQgVGV4dHVyZU1hcHBlclNjZW5lOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwg
Y29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQoreworICAgIEFTU0VS
VCghbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5jb250YWlucyhpZCkpOworICAgIG1fY3VzdG9tRmls
dGVyUHJvZ3JhbXMuc2V0KGlkLCBDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0
ZShwcm9ncmFtSW5mby52ZXJ0ZXhTaGFkZXJTdHJpbmcoKSwgcHJvZ3JhbUluZm8uZnJhZ21lbnRT
aGFkZXJTdHJpbmcoKSwgcHJvZ3JhbUluZm8ucHJvZ3JhbVR5cGUoKSwgcHJvZ3JhbUluZm8ubWl4
U2V0dGluZ3MoKSwgcHJvZ3JhbUluZm8ubWVzaFR5cGUoKSkpOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCit7CisgICAgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY3VzdG9tRmlsdGVyUHJvZ3Jh
bXMuZmluZChpZCk7CisgICAgQVNTRVJUKGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5l
bmQoKSk7CisgICAgaWYgKG1fdGV4dHVyZU1hcHBlcikKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVy
LT5yZW1vdmVDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtKGl0ZXItPnZhbHVlLmdldCgpKTsKKyAg
ICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShpdGVyKTsKK30KKyNlbmRpZiAvLyBFTkFC
TEUoQ1NTX1NIQURFUlMpCisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRMYXllclN0YXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGxheWVy
SW5mbykKK3sKKyAgICBBU1NFUlQobV9yb290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRM
YXllcklEKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7CisKKyAg
ICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJ
bmZvLnJlcGxpY2EpKTsKKyAgICBsYXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJRElmRXhp
c3RzKGxheWVySW5mby5tYXNrKSk7CisKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJ
bmZvLmFuY2hvclBvaW50KTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7
CisgICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOworCisgICAgbGF5ZXItPnNldFRy
YW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFu
c2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKKyAgICBsYXllci0+c2V0QmFja2Zh
Y2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOworICAgIGxheWVyLT5zZXRD
b250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOworICAgIGxheWVyLT5zZXRD
b250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7CisgICAgbGF5ZXItPnNldENvbnRl
bnRzVG9Tb2xpZENvbG9yKGxheWVySW5mby5zb2xpZENvbG9yKTsKKyAgICBsYXllci0+c2V0RHJh
d3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOworICAgIGxheWVyLT5zZXRDb250ZW50
c1Zpc2libGUobGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSk7CisgICAgdG9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllckluZm8uZml4ZWRU
b1ZpZXdwb3J0KTsKKyAgICBsYXllci0+c2V0U2hvd0RlYnVnQm9yZGVyKGxheWVySW5mby5zaG93
RGVidWdCb3JkZXJzKTsKKyAgICBsYXllci0+c2V0RGVidWdCb3JkZXIobGF5ZXJJbmZvLmRlYnVn
Qm9yZGVyQ29sb3IsIGxheWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+c2V0
U2hvd1JlcGFpbnRDb3VudGVyKGxheWVySW5mby5zaG93UmVwYWludENvdW50ZXIpOworCisgICAg
aWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCisgICAgICAgIG1fZml4ZWRMYXllcnMuYWRk
KGlkLCBsYXllcik7CisgICAgZWxzZQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7
CisKKyAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VJ
RCk7CisgICAgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUobGF5ZXIpOworCisgICAgLy8gTmV2
ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgorICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRz
KGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMp
OworICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKKyAgICBsYXllci0+
c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKK30KKworR3JhcGhpY3NMYXll
ciogVGV4dHVyZU1hcHBlclNjZW5lOjpnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExh
eWVySUQgaWQpCit7CisgICAgcmV0dXJuIChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklE
KSA/IGxheWVyQnlJRChpZCkgOiAwOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6Y3Jl
YXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCit7CisgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGlkcy5zaXplKCk7ICsraW5kZXgpCisgICAg
ICAgIGNyZWF0ZUxheWVyKGlkc1tpbmRleF0pOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2Vu
ZTo6Y3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIE93blB0cjxHcmFw
aGljc0xheWVyPiBuZXdMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZhY3Rvcnkg
Ki8sIHRoaXMpOworICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobmV3TGF5ZXIuZ2V0
KCkpLT5zZXRIYXNPd25CYWNraW5nU3RvcmUoZmFsc2UpOworICAgIG1fbGF5ZXJzLmFkZChpZCwg
bmV3TGF5ZXIucmVsZWFzZSgpKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmRlbGV0
ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgbGF5ZXJJRHMpCit7Cisg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGxheWVySURzLnNpemUoKTsgKytpbmRl
eCkKKyAgICAgICAgZGVsZXRlTGF5ZXIobGF5ZXJJRHNbaW5kZXhdKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyU2NlbmU6OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQor
eworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJ
RCk7CisgICAgQVNTRVJUKGxheWVyKTsKKworICAgIG1fYmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5
ZXIuZ2V0KCkpOworICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVy
SUQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRSb290TGF5ZXJJ
RChDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBBU1NFUlQobGF5ZXJJRCAhPSBJ
bnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICBBU1NFUlQobV9yb290TGF5ZXJJRCA9PSBJ
bnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKKworICAgIG1fcm9vdExheWVySUQgPSBsYXllcklE
OworCisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7CisgICAg
QVNTRVJUKG1fcm9vdExheWVyLT5jaGlsZHJlbigpLmlzRW1wdHkoKSk7CisgICAgbV9yb290TGF5
ZXItPmFkZENoaWxkKGxheWVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnByZXBh
cmVDb250ZW50QmFja2luZ1N0b3JlKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7Cisg
ICAgaWYgKCFsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUoZ3JhcGhpY3NMYXllcikpIHsKKyAg
ICAgICAgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoZ3JhcGhpY3NMYXllcik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChncmFwaGlj
c0xheWVyKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZUJhY2tpbmdTdG9y
ZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgaWYgKG1fYmFj
a2luZ1N0b3Jlcy5jb250YWlucyhncmFwaGljc0xheWVyKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBiYWNraW5nU3RvcmUtPnNldFNpemUoZ3Jh
cGhpY3NMYXllci0+c2l6ZSgpKTsKKyAgICBtX2JhY2tpbmdTdG9yZXMuYWRkKGdyYXBoaWNzTGF5
ZXIsIGJhY2tpbmdTdG9yZSk7CisgICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFw
aGljc0xheWVyKS0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlclNjZW5lOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQoreworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLnRha2UoZ3JhcGhpY3NMYXllcik7CisgICAg
aWYgKCFiYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKworICAgIHRvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllciktPnNldEJhY2tpbmdTdG9yZSgwKTsKK30KKwor
dm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXpl
KEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgUmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGdyYXBoaWNz
TGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOworICAgIGJhY2tpbmdTdG9yZS0+c2V0
U2l6ZShncmFwaGljc0xheWVyLT5zaXplKCkpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2Vu
ZTo6Y3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBmbG9hdCBzY2FsZSkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChs
YXllcklEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmUp
OworICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKKyAgICByZXNl
dEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Cit9CisKK3ZvaWQgVGV4dHVyZU1h
cHBlclNjZW5lOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJ
RCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBt
X2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7CisgICAg
cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOworICAgIG1fYmFja2luZ1N0
b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBUZXh0
dXJlTWFwcGVyU2NlbmU6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYgdXBkYXRlKQoreworICAgIEdyYXBoaWNz
TGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxheWVySUQpOworICAgIFJlZlB0cjxDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7
CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisKKyAgICBTdXJmYWNlTWFwOjppdGVyYXRvciBp
dCA9IG1fc3VyZmFjZXMuZmluZCh1cGRhdGUuYXRsYXNJRCk7CisgICAgQVNTRVJUKGl0ICE9IG1f
c3VyZmFjZXMuZW5kKCkpOworCisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKHRpbGVJRCwg
dXBkYXRlLnNvdXJjZVJlY3QsIHVwZGF0ZS50aWxlUmVjdCwgaXQtPnZhbHVlLCB1cGRhdGUub2Zm
c2V0KTsKKyAgICByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7CisgICAg
bV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworfQor
Cit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCit7CisgICAgQVNT
RVJUKCFtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKKyAgICBtX3N1cmZhY2VzLmFkZChh
dGxhc0lELCBzdXJmYWNlKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbW92ZVVw
ZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCit7CisgICAgQVNTRVJUKG1fc3VyZmFjZXMuY29u
dGFpbnMoYXRsYXNJRCkpOworICAgIG1fc3VyZmFjZXMucmVtb3ZlKGF0bGFzSUQpOworfQorCit2
b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBBU1NFUlQoIW1faW1hZ2VCYWNraW5ncy5jb250
YWlucyhpbWFnZUlEKSk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBtX2ltYWdl
QmFja2luZ3MuYWRkKGltYWdlSUQsIGJhY2tpbmdTdG9yZS5yZWxlYXNlKCkpOworfQorCit2b2lk
IFRleHR1cmVNYXBwZXJTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQgaW1hZ2VJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2Up
Cit7CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAg
SW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdl
SUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0g
aXQtPnZhbHVlOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgaXMgcmVhbGl6ZWQg
dG8gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUgd2l0aCBvbmx5IG9uZSB0aWxlIGluIFVJIFByb2Nl
c3MuCisgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKDEgLyogaWQgKi8sIDEgLyogc2NhbGUg
Ki8pOworICAgIEludFJlY3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzdXJmYWNlLT5zaXplKCkp
OworICAgIC8vIFNlZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZERpcmVjdGx5Q29t
cG9zaXRlSW1hZ2UoKQorICAgIEFTU0VSVCgyMDAwID49IHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOworICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShyZWN0LnNpemUoKSk7
CisgICAgYmFja2luZ1N0b3JlLT51cGRhdGVUaWxlKDEgLyogaWQgKi8sIHJlY3QsIHJlY3QsIHN1
cmZhY2UsIHJlY3QubG9jYXRpb24oKSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGlu
Z0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5l
OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1h
Z2VJRCkKK3sKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsK
KyAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQo
aW1hZ2VJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3Rv
cmUgPSBpdC0+dmFsdWU7CisgICAgYmFja2luZ1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOworICAg
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgQVNTRVJUKG1faW1hZ2VCYWNraW5ncy5j
b250YWlucyhpbWFnZUlEKSk7CisKKyAgICAvLyBXZSBkb24ndCB3YW50IFRleHR1cmVNYXBwZXJM
YXllciByZWZlcnMgYSBkYW5nbGluZyBwb2ludGVyLgorICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tp
bmdzLmFwcGVuZChtX2ltYWdlQmFja2luZ3MudGFrZShpbWFnZUlEKSk7Cit9CisKK3ZvaWQgVGV4
dHVyZU1hcHBlclNjZW5lOjphc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIq
IGxheWVyLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgaWYgKGlt
YWdlSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIHsKKyAgICAgICAgbGF5
ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJ
bWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJ
RCk7CisgICAgQVNTRVJUKGl0ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7CisgICAgbGF5ZXIt
PnNldENvbnRlbnRzVG9NZWRpYShpdC0+dmFsdWUuZ2V0KCkpOworfQorCit2b2lkIFRleHR1cmVN
YXBwZXJTY2VuZTo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQoreworICAg
IG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBl
clNjZW5lOjpjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpCit7CisgICAgSGFz
aFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGVuZCA9IG1f
YmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8
UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBpdCA9IG1fYmFja2lu
Z1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICgqaXQpLT5jb21taXRUaWxlT3BlcmF0aW9ucyhtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwor
CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmNsZWFyKCk7Cit9CisKK3Zv
aWQgVGV4dHVyZU1hcHBlclNjZW5lOjpmbHVzaExheWVyQ2hhbmdlcygpCit7CisgICAgbV9yZW5k
ZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Ny
b2xsUG9zaXRpb247CisKKyAgICAvLyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVuIHJlbmRl
cmVkLCB3ZSBjYW4gc2FmZWx5IHVubG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUgbmV4dCBs
YXlvdXQuCisgICAgc2V0QW5pbWF0aW9uc0xvY2tlZChmYWxzZSk7CisKKyAgICBtX3Jvb3RMYXll
ci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlKEZsb2F0UmVjdCgpKTsKKyAgICBjb21taXRQZW5kaW5n
QmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOworICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5n
c0lmTmVlZGVkKCk7CisKKyAgICAvLyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMg
d2F5IGZvciB0aGUgc2NyZWVuLCB0ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5l
eHQgb25lLgorICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJlRleHR1cmVNYXBwZXJTY2Vu
ZTo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5l
OjpyZW5kZXJOZXh0RnJhbWUoKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGll
bnQtPnJlbmRlck5leHRGcmFtZSgpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6ZW5z
dXJlUm9vdExheWVyKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXIpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAq
LywgdGhpcyk7CisgICAgbV9yb290TGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOworICAg
IG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgIG1fcm9vdExheWVyLT5z
ZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoMCwgMCwgMCkpOworCisgICAgLy8gVGhlIHJvb3Qg
bGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHplcm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVk
IG91dC4KKyAgICBtX3Jvb3RMYXllci0+c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKKwor
ICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOworICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1f
cm9vdExheWVyLmdldCgpKS0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkp
OworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c3luY1JlbW90ZUNvbnRlbnQoKQorewor
ICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQs
IGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KKyAgICBlbnN1cmVSb290TGF5
ZXIoKTsKKworICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gcmVuZGVyUXVldWU7CisgICAg
Ym9vbCBjYWxsZWRPbk1haW5UaHJlYWQgPSBXVEY6OmlzTWFpblRocmVhZCgpOworICAgIGlmICgh
Y2FsbGVkT25NYWluVGhyZWFkKQorICAgICAgICBtX3JlbmRlclF1ZXVlTXV0ZXgubG9jaygpOwor
ICAgIHJlbmRlclF1ZXVlLnN3YXAobV9yZW5kZXJRdWV1ZSk7CisgICAgaWYgKCFjYWxsZWRPbk1h
aW5UaHJlYWQpCisgICAgICAgIG1fcmVuZGVyUXVldWVNdXRleC51bmxvY2soKTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAgIHJl
bmRlclF1ZXVlW2ldKCk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpwdXJnZUdMUmVz
b3VyY2VzKCkKK3sKKyAgICBtX2ltYWdlQmFja2luZ3MuY2xlYXIoKTsKKyAgICBtX3JlbGVhc2Vk
SW1hZ2VCYWNraW5ncy5jbGVhcigpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIG1f
c3VyZmFjZUJhY2tpbmdTdG9yZXMuY2xlYXIoKTsKKyNlbmRpZgorICAgIG1fc3VyZmFjZXMuY2xl
YXIoKTsKKworICAgIG1fcm9vdExheWVyLmNsZWFyKCk7CisgICAgbV9yb290TGF5ZXJJRCA9IElu
dmFsaWRDb29yZGluYXRlZExheWVySUQ7CisgICAgbV9sYXllcnMuY2xlYXIoKTsKKyAgICBtX2Zp
eGVkTGF5ZXJzLmNsZWFyKCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLmNsZWFyKCk7CisgICAgbV9i
YWNraW5nU3RvcmVzLmNsZWFyKCk7CisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZm
ZXJzLmNsZWFyKCk7CisKKyAgICBzZXRBY3RpdmUoZmFsc2UpOworICAgIGRpc3BhdGNoT25NYWlu
VGhyZWFkKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzLCB0aGlz
KSk7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQor
eworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnB1cmdlQmFja2luZ1N0b3Jl
cygpOworfQorCit2b2lkIFRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJBbmltYXRpb25zKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1h
dGlvbnMpCit7CisgICAgR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIqIGxheWVyID0gdG9HcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllckJ5SUQoaWQpKTsKKyNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRpb25zLmFuaW1hdGlvbnMo
KS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJh
bWVzID0gYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuYXQoaSkua2V5ZnJhbWVzKCk7CisgICAgICAg
IGlmIChrZXlmcmFtZXMucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0RmlsdGVy
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
a2V5ZnJhbWVzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBGaWx0ZXJBbmltYXRp
b25WYWx1ZSogZmlsdGVyVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBGaWx0ZXJBbmltYXRpb25W
YWx1ZSo+KGtleWZyYW1lcy5hdChpKSk7CisgICAgICAgICAgICBpbmplY3RDYWNoZWRDdXN0b21G
aWx0ZXJQcm9ncmFtcygqZmlsdGVyVmFsdWUtPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQor
I2VuZGlmCisgICAgbGF5ZXItPnNldEFuaW1hdGlvbnMoYW5pbWF0aW9ucyk7Cit9CisKK3ZvaWQg
VGV4dHVyZU1hcHBlclNjZW5lOjpzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wgbG9ja2VkKQorewor
ICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGxvY2tlZDsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVy
U2NlbmU6OmRldGFjaCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2Ns
aWVudCA9IDA7Cit9CisKK3ZvaWQgVGV4dHVyZU1hcHBlclNjZW5lOjphcHBlbmRVcGRhdGUoY29u
c3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7CisgICAgaWYgKCFtX2lzQWN0aXZlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3JlbmRlclF1ZXVlTXV0ZXgpOworICAgIG1fcmVuZGVyUXVldWUuYXBw
ZW5kKGZ1bmN0aW9uKTsKK30KKwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnNldEFjdGl2ZShi
b29sIGFjdGl2ZSkKK3sKKyAgICBpZiAobV9pc0FjdGl2ZSA9PSBhY3RpdmUpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIEhhdmUgdG8gY2xlYXIgcmVuZGVyIHF1ZXVlIGluIGJvdGggY2FzZXMu
CisgICAgLy8gSWYgdGhlcmUgYXJlIHNvbWUgdXBkYXRlcyBpbiBxdWV1ZSBkdXJpbmcgYWN0aXZh
dGlvbiB0aGVuIHRob3NlIHVwZGF0ZXMgYXJlIGZyb20gcHJldmlvdXMgaW5zdGFuY2Ugb2YgcGFp
bnQgbm9kZQorICAgIC8vIGFuZCBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgbmV3bHkgY3JlYXRl
ZCBpbnN0YW5jZS4KKyAgICBtX3JlbmRlclF1ZXVlLmNsZWFyKCk7CisgICAgbV9pc0FjdGl2ZSA9
IGFjdGl2ZTsKKyAgICBpZiAobV9pc0FjdGl2ZSkKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJl
YWQoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKK30K
Kwordm9pZCBUZXh0dXJlTWFwcGVyU2NlbmU6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1RleHR1cmVNYXBwZXJTY2VuZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1RleHR1cmVNYXBwZXJTY2VuZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjA4MWI4YjA4MWQwMmE2ODExZWQ4MDdkOWI4MjQwYjgwMmNmODcxOWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VGV4dHVyZU1hcHBlclNjZW5lLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgVGV4dHVyZU1hcHBlclNjZW5lX2gKKyNkZWZpbmUgVGV4dHVyZU1hcHBlclNj
ZW5lX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGlu
YXRlZExheWVySW5mby5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTsKK2NsYXNzIENv
b3JkaW5hdGVkTGF5ZXJJbmZvOworY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbTsKK2NsYXNzIEN1
c3RvbUZpbHRlclByb2dyYW1JbmZvOworY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOworCitjbGFz
cyBUZXh0dXJlTWFwcGVyU2NlbmVDbGllbnQgeworcHVibGljOgorI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uRnJhbWVSZWFkeSgp
ID0gMDsKKyNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlVmlld3BvcnQoKSA9IDA7Cit9OworCitjbGFzcyBUZXh0dXJlTWFwcGVyU2NlbmUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8VGV4dHVyZU1hcHBlclNjZW5lPiwgcHVibGlj
IEdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHN0cnVjdCBUaWxlVXBkYXRlIHsK
KyAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0OworICAgICAgICBJbnRSZWN0IHRpbGVSZWN0Owor
ICAgICAgICB1aW50MzJfdCBhdGxhc0lEOworICAgICAgICBJbnRQb2ludCBvZmZzZXQ7CisgICAg
ICAgIFRpbGVVcGRhdGUoY29uc3QgSW50UmVjdCYgc291cmNlLCBjb25zdCBJbnRSZWN0JiB0aWxl
LCB1aW50MzJfdCBhdGxhcywgY29uc3QgSW50UG9pbnQmIG5ld09mZnNldCkKKyAgICAgICAgICAg
IDogc291cmNlUmVjdChzb3VyY2UpCisgICAgICAgICAgICAsIHRpbGVSZWN0KHRpbGUpCisgICAg
ICAgICAgICAsIGF0bGFzSUQoYXRsYXMpCisgICAgICAgICAgICAsIG9mZnNldChuZXdPZmZzZXQp
CisgICAgICAgIHsKKyAgICAgICAgfQorICAgIH07CisgICAgZXhwbGljaXQgVGV4dHVyZU1hcHBl
clNjZW5lKFRleHR1cmVNYXBwZXJTY2VuZUNsaWVudCopOworICAgIHZpcnR1YWwgflRleHR1cmVN
YXBwZXJTY2VuZSgpOworICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgRmxvYXRSZWN0JiwgVGV4dHVyZU1hcHBl
cjo6UGFpbnRGbGFncyA9IDApOworI2lmIFBMQVRGT1JNKFFUKQorICAgIHZvaWQgcGFpbnRUb0dy
YXBoaWNzQ29udGV4dChRUGFpbnRlciopOworI2VsaWYgVVNFKENBSVJPKQorICAgIHZvaWQgcGFp
bnRUb0dyYXBoaWNzQ29udGV4dChjYWlyb190Kik7CisjZW5kaWYKKyAgICB2b2lkIHNldENvbnRl
bnRzU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1Jl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihj
b25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbik7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisg
ICAgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBJbnRTaXplJiwg
UGFzc1JlZlB0cjxHcmFwaGljc1N1cmZhY2U+KTsKKyAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7CisgICAgdm9pZCBkZXN0cm95Q2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisjZW5kaWYKKyAgICB2b2lkIHNldExheWVyUmVwYWlu
dENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKKworICAgIHZvaWQgZGV0YWNo
KCk7CisgICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworCisg
ICAgLy8gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIHVz
ZSBiZWxvdyB0d28gbWV0aG9kcywgYmVjYXVzZSB0d28gbWV0aG9kcyBhY2Nlc3MgbWVtYmVycyB0
aGF0IHRoZSBtYWluIHRocmVhZCBtYW5hZ2VzLiBTZWUgbV9jbGllbnQuCisgICAgLy8gQ3VycmVu
dGx5LCBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoKSBsb2NrcyB0aGUgbWFpbiB0aHJl
YWQgYmVmb3JlIGNhbGxpbmcgYm90aCBtZXRob2RzLgorICAgIHZvaWQgcHVyZ2VHTFJlc291cmNl
cygpOworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOworCisgICAgdm9pZCBjcmVhdGVMYXllcnMo
Y29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUxheWVy
cyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0Um9vdExh
eWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIHNldExheWVyQ2hpbGRyZW4oQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAg
IHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVk
TGF5ZXJJbmZvJik7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgc2V0TGF5ZXJG
aWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworI2Vu
ZGlmCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHZvaWQgaW5qZWN0Q2FjaGVkQ3VzdG9t
RmlsdGVyUHJvZ3JhbXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgY29uc3Q7Cisg
ICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmls
dGVyUHJvZ3JhbUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50
IGlkKTsKKyNlbmRpZgorCisgICAgdm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBmbG9hdCBzY2FsZSk7CisgICAgdm9pZCByZW1vdmVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKKyAg
ICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPik7CisgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBh
dGxhc0lEKTsKKyAgICB2b2lkIGZsdXNoTGF5ZXJDaGFuZ2VzKCk7CisgICAgdm9pZCBjcmVhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCB1cGRhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZFN1cmZhY2U+KTsKKyAgICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAgIHZvaWQg
c2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihj
b25zdCBDb2xvciYpOworICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7
IG1fc2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUUpCisgICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGluYXRlZExh
eWVySUQgaWQpCisgICAgeworICAgICAgICBBU1NFUlQobV9sYXllcnMuY29udGFpbnMoaWQpKTsK
KyAgICAgICAgQVNTRVJUKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOworICAgICAg
ICByZXR1cm4gbV9sYXllcnMuZ2V0KGlkKTsKKyAgICB9CisgICAgR3JhcGhpY3NMYXllciogZ2V0
TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICBHcmFwaGljc0xheWVy
KiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBz
eW5jUmVtb3RlQ29udGVudCgpOworICAgIHZvaWQgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVy
cygpOworCisgICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMgZnJvbSBHcmFwaGljc0xheWVyQ2xpZW50
LgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqLCBkb3VibGUpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50
cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgR3JhcGhpY3NMYXllclBh
aW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERSB7IH0KKworICAgIHZvaWQgZGlz
cGF0Y2hPbk1haW5UaHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYpOworICAgIHZvaWQgdXBk
YXRlVmlld3BvcnQoKTsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAg
dm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCk7CisjZW5kaWYKKyAgICB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOworICAgIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisKKyAgICB2b2lkIGNyZWF0
ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBkZWxldGVMYXllcihDb29yZGlu
YXRlZExheWVySUQpOworCisgICAgdm9pZCBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBo
aWNzTGF5ZXIqLCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZVJl
bGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7CisgICAgdm9pZCBlbnN1cmVSb290TGF5ZXIo
KTsKKyAgICB2b2lkIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CisKKyAg
ICB2b2lkIHByZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2
b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lk
IHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqKTsKKyAgICB2b2lkIHJl
c2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKEdyYXBoaWNzTGF5ZXIqKTsKKworICAgIEZs
b2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNS
ZWN0OworCisgICAgLy8gUmVuZGVyIHF1ZXVlIGNhbiBiZSBhY2Nlc3NlZCBvbnkgZnJvbSBtYWlu
IHRocmVhZCBvciB1cGRhdGVQYWludE5vZGUgY2FsbCBzdGFjayEKKyAgICBWZWN0b3I8RnVuY3Rp
b248dm9pZCgpPiA+IG1fcmVuZGVyUXVldWU7CisgICAgTXV0ZXggbV9yZW5kZXJRdWV1ZU11dGV4
OworCisgICAgT3duUHRyPFRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+ID4gSW1hZ2VCYWNraW5nTWFwOworICAgIEltYWdlQmFja2luZ01hcCBt
X2ltYWdlQmFja2luZ3M7CisgICAgVmVjdG9yPFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZT4gPiBtX3JlbGVhc2VkSW1hZ2VCYWNraW5nczsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFw
aGljc0xheWVyKiwgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IEJhY2tpbmdTdG9y
ZU1hcDsKKyAgICBCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVzOworCisgICAgSGFzaFNl
dDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzOworCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdHlwZWRlZiBI
YXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgUmVmUHRyPFRleHR1cmVNYXBwZXJTdXJmYWNlQmFj
a2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7CisgICAgU3VyZmFjZUJhY2tpbmdT
dG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3RvcmVzOworI2VuZGlmCisKKyAgICB0eXBlZGVmIEhh
c2hNYXA8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4g
PiBTdXJmYWNlTWFwOworICAgIFN1cmZhY2VNYXAgbV9zdXJmYWNlczsKKworICAgIC8vIEJlbG93
IHR3byBtZW1iZXJzIGFyZSBhY2Nlc3NlZCBieSBvbmx5IHRoZSBtYWluIHRocmVhZC4gVGhlIHBh
aW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIGFjY2VzcyBib3RoIG1l
bWJlcnMuCisgICAgVGV4dHVyZU1hcHBlclNjZW5lQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29s
IG1faXNBY3RpdmU7CisKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CisK
KyAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBPd25QdHI8R3JhcGhpY3NM
YXllcj4gPiBMYXllck1hcDsKKyAgICBMYXllck1hcCBtX2xheWVyczsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBHcmFwaGljc0xheWVyKj4gTGF5ZXJSYXdQdHJNYXA7
CisgICAgTGF5ZXJSYXdQdHJNYXAgbV9maXhlZExheWVyczsKKyAgICBDb29yZGluYXRlZExheWVy
SUQgbV9yb290TGF5ZXJJRDsKKyAgICBGbG9hdFBvaW50IG1fcmVuZGVyZWRDb250ZW50c1Njcm9s
bFBvc2l0aW9uOworICAgIEZsb2F0UG9pbnQgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9s
bFBvc2l0aW9uOworICAgIGJvb2wgbV9hbmltYXRpb25zTG9ja2VkOworI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICBib29sIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQ7
CisjZW5kaWYKKyAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKKyAgICBib29sIG1fc2V0RHJh
d3NCYWNrZ3JvdW5kOworCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIHR5cGVkZWYgSGFz
aE1hcDxpbnQsIFJlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiA+IEN1c3RvbUZpbHRlclByb2dy
YW1NYXA7CisgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1hcCBtX2N1c3RvbUZpbHRlclByb2dyYW1z
OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBUZXh0dXJlTWFwcGVyU2NlbmVfaAor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NGYw
Njg3MTA4MmI1OGZjYmQ4M2EwZWYzMTQ1MGJlNDgwMDg0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRl
QXRsYXMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykg
MjAxMiBDb21wYW55IDEwMCwgSW5jLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xp
ZW50LCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQorICAg
IDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pbmFjdGl2aXR5SW5TZWNvbmRzKDApCit7Cisg
ICAgc3RhdGljIHVpbnQzMl90IG5leHRJRCA9IDA7CisgICAgbV9JRCA9ICsrbmV4dElEOworICAg
IEludFNpemUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNp
b24pKTsKKyAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXplLCBm
bGFncyk7CisKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdl
IGZhaWxzLCBVcGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHku
CisgICAgaWYgKCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkK
KyAgICAgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK1VwZGF0ZUF0bGFzOjp+VXBkYXRlQXRs
YXMoKQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVVcGRh
dGVBdGxhcyhtX0lEKTsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRl
ZCgpCit7CisgICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsKKyAgICAgICAgbV9hcmVhQWxsb2Nh
dG9yID0gYWRvcHRQdHIobmV3IEdlbmVyYWxBcmVhQWxsb2NhdG9yKHNpemUoKSkpOworICAgICAg
ICBtX2FyZWFBbGxvY2F0b3ItPnNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMyKSk7
CisgICAgfQorfQorCit2b2lkIFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycygpCit7CisgICAg
bV9hcmVhQWxsb2NhdG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0
PiBVcGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90JiBh
dGxhc0lELCBjb25zdCBJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1f
aW5hY3Rpdml0eUluU2Vjb25kcyA9IDA7CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAg
IEludFJlY3QgcmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CisKKyAgICAv
LyBObyBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCisgICAgaWYg
KHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRl
eHQ+KCk7CisKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0PigpOworCisgICAgYXRsYXNJRCA9IG1fSUQ7CisKKyAgICAvLyBGSVhN
RTogVXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KKyAgICBv
ZmZzZXQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisK
KyAgICBpZiAoc3VwcG9ydHNBbHBoYSgpKSB7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc2l6ZSksIENvbG9yOjp0cmFu
c3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIH0KKworICAg
IHJldHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0
ZUF0bGFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVXBkYXRlQXRsYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGE2YmY4NDRhNDkwZjdmZDJjMzlhMDQy
NGUzMzBmZGRiMTZkNzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
CisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVXBkYXRlQXRsYXNfaAorI2RlZmlu
ZSBVcGRhdGVBdGxhc19oCisKKyNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGlj
c0NvbnRleHQ7CitjbGFzcyBJbnRQb2ludDsKKworY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxh
c0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOworfTsKKworY2xhc3Mg
VXBkYXRlQXRsYXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKK3B1
YmxpYzoKKyAgICBVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNpb24s
IENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOworICAgIH5VcGRhdGVBdGxhcygpOworCisgICAg
aW5saW5lIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9
CisKKyAgICAvLyBSZXR1cm5zIGEgbnVsbCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJs
ZSBidWZmZXIuCisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdP
bkF2YWlsYWJsZUJ1ZmZlcih1aW50MzJfdCYgYXRsYXNJRCwgY29uc3QgSW50U2l6ZSYsIEludFBv
aW50JiBvZmZzZXQpOworICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKKyAgICBib29sIHN1cHBv
cnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKTsgfQor
CisgICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzSW5Vc2UoKSk7CisgICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyArPSBz
ZWNvbmRzOworICAgIH0KKyAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgY29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7CisgICAgICAgIHJl
dHVybiBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2U7Cisg
ICAgfQorICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9jYXRvcjsg
fQorCitwcml2YXRlOgorICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworCitwcml2YXRl
OgorICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8R2VuZXJhbEFy
ZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPiBtX3N1cmZhY2U7CisgICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKKyAgICB1
aW50MzJfdCBtX0lEOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBVcGRhdGVBdGxhc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtl
TGlzdHMudHh0CmluZGV4IDhmZGRhMzc2Nzg2YjBjNDhiNDU4YTA2ZGEwMWEzNzA0NDRjZjhhYzEu
LmQyYjk5YTI0Zjc0YWE0NzJlNTM1YjA2MzdjMDFkNWM5MGFiNTgyNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CkBAIC0yMjQsNyArMjI0LDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJl
ZC9BUEkvYy9XS1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKIAogICAgIFNoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKLSAgICBT
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuY3BwCiAgICAgU2hh
cmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAogICAgIFNo
YXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5jcHAK
IApAQCAtMzUyLDkgKzM1MSw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3Mv
QXV0aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5jcHAKICAgICBVSVByb2Nlc3MvQXV0aGVudGlj
YXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmNwcAogCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCiAgICAgVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCi0gICAgVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCiAKICAgICBV
SVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0Rvd25s
b2Fkcy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNTA1LDEyICs1MDIsNyBAQCBzZXQoV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAotICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
Y3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCi0gICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCiApCiAKIHNldChX
ZWJLaXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3Jp
cHRzL3dlYmtpdDIvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIv
bWVzc2FnZXMucHkKaW5kZXggZmFiYWVjNDYwYmZlOWU4MTRjNjg2NTQ1MjE2YWY5NDMxMjVkNWRk
OC4uNWZiODBiNDMyMGYzZTJjODAxZDYwNWYyNWVmZTE4YjQwMDU5YWY3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQpAQCAtMzcxLDYgKzM3MSw3IEBAIGRl
ZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgIHNwZWNpYWxfY2FzZXMgPSB7CiAgICAgICAg
ICdXVEY6OlN0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddLAogICAgICAgICAnV2Vi
Q29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUnOiBbJzxXZWJDb3JlL0VkaXRvci5oPiddLAorICAg
ICAgICAnV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEJzogWyc8V2ViQ29yZS9Db29yZGluYXRl
ZExheWVySW5mby5oPiddLAogICAgICAgICAnV2ViQ29yZTo6R3JhbW1hckRldGFpbCc6IFsnPFdl
YkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+J10s
CiAgICAgICAgICdXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCc6IFsnPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPiddLApAQCAtMzc5LDcgKzM4MCw2IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5
cGUpOgogICAgICAgICAnV2ViQ29yZTo6UGx1Z2luSW5mbyc6IFsnPFdlYkNvcmUvUGx1Z2luRGF0
YS5oPiddLAogICAgICAgICAnV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0JzogWyc8V2ViQ29y
ZS9UZXh0Q2hlY2tlckNsaWVudC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRBdHRy
aWJ1dGVzJzogWyc8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPiddLAotICAgICAgICAnV2Vi
S2l0OjpDb29yZGluYXRlZExheWVySUQnOiBbJyJDb29yZGluYXRlZExheWVySW5mby5oIiddLAog
ICAgICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAog
ICAgICAgICAnV2ViS2l0OjpXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAgICAg
ICAgICdXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRl
eCBlNWFiMzQ1ODZmNDc0MzcxODFiN2M0MzUyMWM0ZTA3YjA0YjBiZjQyLi5jMzM3MWQyYzA4NGUw
NTJkZWRjZjY0ZWZmNGJkMTQ3NTAwZTliNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2Rl
cnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDExICsyOSwxMCBAQAog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogCiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgi
Ci0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNm
b3JtT3BlcmF0aW9uLmg+CkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Sb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvVGltaW5nRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0
cml4Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4K
QEAgLTU0LDkgKzU0LDkgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2lu
Y2x1ZGUgIldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYkN1c3RvbUZp
bHRlclByb2dyYW0uaCIKICNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9DdXN0b21GaWx0ZXJDb25zdGFudHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZp
bHRlck51bWJlclBhcmFtZXRlci5oPgpAQCAtNzMsNyArNzMsOSBAQAogI2VuZGlmCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCkBAIC0zMjksNyAr
MzMxLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+Ojpk
ZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLAogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgU2hhZGVycyBhcmUgYWxy
ZWFkeSB2YWxpZGF0ZWQsIHNvIHdlIGp1c3QgdXNlIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiBm
b3IgdHJhbnNwb3J0YXRpb24uCi0gICAgICAgICAgICBmaWx0ZXIgPSBXZWJDdXN0b21GaWx0ZXJP
cGVyYXRpb246OmNyZWF0ZSgwLCBwcm9ncmFtSUQsIHBhcmFtZXRlcnMsIG1lc2hSb3dzLCBtZXNo
Q29sdW1ucywgbWVzaFR5cGUpOworICAgICAgICAgICAgZmlsdGVyID0gQ29vcmRpbmF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLCBwcm9ncmFtSUQsIHBhcmFtZXRlcnMsIG1lc2hS
b3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1l
bnRDb2RlcnMuaAppbmRleCAwYjVlMTRjYzE3OTk2ZTY1ZDk0NmFmZGI5MmExNGE4YmYyZWJmY2Zj
Li4yYWVmYzY1NzRmZjNlYTQxMTEzZmMxZTQyYzAxOTE4ZjQyNDFiZjY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaApAQCAtMzIsMTEg
KzMyLDEzIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CiBjbGFzcyBGbG9hdFBvaW50M0Q7CiBjbGFz
cyBHcmFwaGljc0xheWVyQW5pbWF0aW9uOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7
CiBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7
CitzdHJ1Y3QgQ29vcmRpbmF0ZWRMYXllckluZm87CiBzdHJ1Y3QgTGVuZ3RoOwogCiAjaWYgRU5B
QkxFKENTU19GSUxURVJTKQpAQCAtNTIsMTEgKzU0LDYgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFj
ZVRva2VuOwogI2VuZGlmCiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IENvb3JkaW5h
dGVkTGF5ZXJJbmZvOwotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci19Ci0KIG5hbWVzcGFjZSBD
b3JlSVBDIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9h
dFBvaW50M0Q+IHsKQEAgLTExMCwxNCArMTA3LDE0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+IHsKIH07CiAjZW5kaWYKIAot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJJ
bmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyYpOwordGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbz4gewor
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERl
Y29kZXIqLCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwogfTsKIAotdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYktpdDo6U3VyZmFj
ZVVwZGF0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbz4geworICAgIHN0YXRpYyB2b2lkIGVuY29k
ZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOwor
ICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpTdXJmYWNl
VXBkYXRlSW5mbyYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
ckluZm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNWZiYjY2
YTgwMjU4MWI0OGM5MDNkNDhiNWUxODM5ODRjMTNlNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllckluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICsw
LDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENv
b3JkaW5hdGVkTGF5ZXJJbmZvX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRMYXllckluZm9faAotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLXR5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRMYXllcklEOwotZW51bSB7IElu
dmFsaWRDb29yZGluYXRlZExheWVySUQgPSAwIH07Ci0KLXR5cGVkZWYgdWludDY0X3QgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCA9IDAgfTsKLQotLy8gTk9URTogQ29vcmRpbmF0ZWRMYXllckluZm8gc2hvdWxkIG9ubHkg
dXNlIFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0aW9uIGZhc3Rlci4KLXN0cnVjdCBD
b29yZGluYXRlZExheWVySW5mbyB7Ci0gICAgQ29vcmRpbmF0ZWRMYXllckluZm8oKQotICAgICAg
ICA6IHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAgICAgICAgLCBtYXNrKElu
dmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkKLSAgICAgICAgLCBvcGFjaXR5KDApCi0gICAgICAgICwgZGVi
dWdCb3JkZXJXaWR0aCgwKQotICAgICAgICAsIGZsYWdzKDApIHsgfQotCi0gICAgQ29vcmRpbmF0
ZWRMYXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIG1hc2s7Ci0gICAgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotCi0gICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBwb3M7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIFdlYkNv
cmU6OkZsb2F0U2l6ZSBzaXplOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zZm9ybTsKLSAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5z
Zm9ybTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBvcGFj
aXR5OwotICAgIFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7Ci0gICAgV2ViQ29yZTo6Q29sb3Ig
ZGVidWdCb3JkZXJDb2xvcjsKLSAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwotCi0gICAgdW5p
b24gewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6
IDE7Ci0gICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7Ci0gICAgICAgICAgICBib29s
IGNvbnRlbnRzVmlzaWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJsZSA6
IDE7Ci0gICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwotICAgICAgICAgICAgYm9v
bCBwcmVzZXJ2ZXMzRCA6IDE7Ci0gICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOwotICAg
ICAgICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwotICAgICAgICAgICAgYm9vbCBzaG93
RGVidWdCb3JkZXJzIDogMTsKLSAgICAgICAgICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyIDog
MTsKLSAgICAgICAgfTsKLSAgICAgICAgdW5zaWduZWQgZmxhZ3M7Ci0gICAgfTsKLX07Ci0KLX0K
LQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIENvb3Jk
aW5hdGVkTGF5ZXJJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmEyZDU1YTc2ZTkwNjE3OTJlZmM5NjY5Yzc0ZDg4NjI4
MTBlYTg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFj
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNv
b3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSogQ29vcmRpbmF0ZWRTdXJmYWNlOjpzX2ZhY3Rvcnkg
PSAwOwotCi12b2lkIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeShDb29yZGluYXRlZFN1
cmZhY2U6OkZhY3RvcnkgZmFjdG9yeSkKLXsKLSAgICBzX2ZhY3RvcnkgPSBmYWN0b3J5OwotfQot
Ci1QYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVh
dGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCi17Ci0gICAgQVNT
RVJUKHNfZmFjdG9yeSk7Ci0gICAgcmV0dXJuIHNfZmFjdG9yeShzaXplLCBmbGFncyk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzRiMTdjZWQxOTliMzdiZjQ0NGYzNzkzZjEwNGI4NWQzOTdkMjE4Yi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaAorKysgL2Rldi9udWxs
CkBAIC0xLDcxICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBDb21w
YW55IDEwMCwgSW5jLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENvb3JkaW5h
dGVkU3VyZmFjZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkU3VyZmFjZV9oCi0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQml0
bWFwVGV4dHVyZTsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLX0KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxDb29yZGluYXRlZFN1cmZhY2U+IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZsYWcgewotICAg
ICAgICBOb0ZsYWdzID0gMCwKLSAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDEgPDwgMCwKLSAgICB9
OwotICAgIHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7Ci0KLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPiBGYWN0b3J5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFn
cyk7Ci0gICAgc3RhdGljIHZvaWQgc2V0RmFjdG9yeShGYWN0b3J5KTsKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgRmxhZ3MpOwotCi0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRTdXJmYWNlKCkgeyB9Ci0KLSAg
ICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgU3VwcG9ydHNB
bHBoYTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwot
Ci0gICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBh
aW50IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSA9IDA7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2
b2lkIGNvcHlUb1RleHR1cmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc291
cmNlT2Zmc2V0KSA9IDA7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgRmxhZ3Mg
ZmxhZ3MoKSBjb25zdCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIENvb3JkaW5hdGVkU3Vy
ZmFjZTo6RmFjdG9yeSogc19mYWN0b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0K
LSNlbmRpZgotI2VuZGlmIC8vIENvb3JkaW5hdGVkU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5o
IGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0
ZUluZm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyODlmY2RmMGZmYjlmZWUw
NmUwNDQxOTg0ODMxNzBmODMyZmIyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9T
dXJmYWNlVXBkYXRlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSBD
b3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU3VyZmFjZVVwZGF0ZUlu
Zm9faAotI2RlZmluZSBTdXJmYWNlVXBkYXRlSW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFN1cmZhY2VVcGRh
dGVJbmZvIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBkYXRlSW5mbyk7Ci0K
LXB1YmxpYzoKLSAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQotCi0gICAgLy8gVGhlIHJlY3Qg
dG8gYmUgdXBkYXRlZC4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHVwZGF0ZVJlY3Q7Ci0KLSAgICAv
LyBUaGUgcGFnZSBzY2FsZSBmYWN0b3IgdXNlZCB0byByZW5kZXIgdGhpcyB1cGRhdGUuCi0gICAg
ZmxvYXQgc2NhbGVGYWN0b3I7Ci0KLSAgICAvLyBUaGUgaWQgb2YgdGhlIHVwZGF0ZSBhdGxhcyBp
bmNsdWRpbmcgdGhlIHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBkYXRlcy4KLSAg
ICB1aW50MzJfdCBhdGxhc0lEOwotCi0gICAgLy8gVGhlIG9mZnNldCBpbiB0aGUgYml0bWFwIHdo
ZXJlIHRoZSByZW5kZXJlZCBjb250ZW50cyBhcmUuCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgc3Vy
ZmFjZU9mZnNldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jZW5kaWYgLy8gU3VyZmFjZVVwZGF0ZUluZm9faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAppbmRleCBiODI4YWFkODE3NDU0MmVkZDM3
YjE4ZTM3ZjI2Y2RjOTRhYjgwOWYwLi4xNGE3YzAwNzg1NDkwNzRkMDM1NzliZDQ5ZWZkZDI4YmU0
YTVmZDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaApAQCAtMjIsOCArMjIs
OCBAQAogI2RlZmluZSBXZWJDb29yZGluYXRlZFN1cmZhY2VfaAogCiAjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRTdXJmYWNl
Lmg+CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICNpbmNsdWRlICJHcmFwaGljc1N1cmZh
Y2UuaCIKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotY2xhc3MgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlIDogcHVibGljIENvb3Jk
aW5hdGVkU3VyZmFjZSB7CitjbGFzcyBXZWJDb29yZGluYXRlZFN1cmZhY2UgOiBwdWJsaWMgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlIHsKIHB1YmxpYzoKICAgICBjbGFzcyBIYW5kbGUgewog
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIYW5kbGUpOwpAQCAtNTcsNyArNTcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIG1fZ3JhcGhpY3NT
dXJmYWNlVG9rZW47CiAjZW5kaWYKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7Ci0g
ICAgICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgbV9mbGFnczsKKyAgICAgICAgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBtX2ZsYWdzOwogICAgIH07CiAKICAgICAvLyBD
cmVhdGUgYSBuZXcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLCBhbmQgYWxsb2NhdGUgZWl0aGVyIGEg
R3JhcGhpY3NTdXJmYWNlIG9yIGEgU2hhcmVhYmxlQml0bWFwIGFzIGJhY2tpbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21G
aWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0YmYyNzdhNzBlNmVhZWFlNzNiZmUzMjA4MThjNzY0ZTA0MDUwNTUzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBT
eXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCi0jZGVmaW5lIFdlYkN1c3RvbUZpbHRlck9w
ZXJhdGlvbl9oCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBjbGFzcyBp
cyBvbmx5IGFkZGluZyB0aGUgcHJvZ3JhbUlkIG9uIHRvcCBvZiBDdXN0b21GaWx0ZXJPcGVyYXRp
b24uIFRoZSBhcmd1bWVudCBkZWNvZGVyIGhhcyBubwotLy8gY29udGV4dCwgc28gd2UgY2Fubm90
IHNlYXJjaCBpbiBvdXIgY2FjaGVkIEN1c3RvbUZpbHRlclByb2dyYW1zIHdoaWxlIGRlY29kaW5n
LiBJbiB0aGF0IGNhc2UKLS8vIGl0IHdpbGwganVzdCBzdG9yZSB0aGUgcHJvZ3JhbUlkIGFuZCBu
byBDdXN0b21GaWx0ZXJQcm9ncmFtIGluc3RhbmNlLiBUaGUgcmVjZWl2ZXIgaXMgc3VwcG9zZWQg
dG8KLS8vIGl0ZXJhdGUgb24gdGhpcyBzdHJ1Y3R1cmUgYW5kIGluamVjdCB0aGUgcmlnaHQgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbXMuCi0KLWNsYXNzIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiA6IHB1
YmxpYyBDdXN0b21GaWx0ZXJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyUHJvZ3JhbT4gcHJvZ3JhbSwgaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVk
IG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHByb2dyYW0s
IHByb2dyYW1JRCwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNo
VHlwZSkpOwotICAgIH0KLQotICAgIGludCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX3By
b2dyYW1JRDsgfQotCi1wcml2YXRlOgotICAgIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbihQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGludCBwcm9ncmFtSUQsIGNvbnN0
IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1l
c2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5
cGUpCi0gICAgICAgIDogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHByb2dyYW0sIHNvcnRlZFBhcmFt
ZXRlcnMsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpCi0gICAgICAgICwgbV9wcm9n
cmFtSUQocHJvZ3JhbUlEKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgbV9wcm9ncmFtSUQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURF
UlMpCi0KLSNlbmRpZiAvLyBDdXN0b21GaWx0ZXJPcGVyYXRpb25faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3Vz
dG9tRmlsdGVyUHJvZ3JhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWFhZGQ2
ZmVkNzljYzQ4YjNjZTU5NDhlMDZmNzQ2ZjM3Nzc1Y2ZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJDdXN0b21GaWx0ZXJQcm9n
cmFtX2gKLSNkZWZpbmUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCi0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpICYmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlIDxXZWJDb3Jl
L0N1c3RvbUZpbHRlckNvbnN0YW50cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ3VzdG9tRmlsdGVy
UHJvZ3JhbSA6IHB1YmxpYyBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtPiBjcmVhdGUoU3Ry
aW5nIHZlcnRleFNoYWRlclN0cmluZywgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcsIFdl
YkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBlLCBXZWJDb3JlOjpDdXN0
b21GaWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3MsIFdlYkNvcmU6OkN1c3RvbUZp
bHRlck1lc2hUeXBlIG1lc2hUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgbV9mcmFnbWVudFNo
YWRlclN0cmluZywgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSkpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEN1c3RvbUZpbHRlclBy
b2dyYW0mIG8pIGNvbnN0IE9WRVJSSURFCi0gICAgewotICAgICAgICAvLyBXZSBkb24ndCB1c2Ug
dGhlICE9IG9wZXJhdG9yIGJlY2F1c2UgdGhhdCB3b3VsZCByZWN1cnNpdmVseSBjYWxsIHRoaXMg
bWV0aG9kLgotICAgICAgICBpZiAoIUN1c3RvbUZpbHRlclByb2dyYW06Om9wZXJhdG9yPT0obykp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBj
YXN0IGlzIHVnbHksIGJ1dCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtIGlzIHRoZSBzaW5nbGUgaW1w
bGVtZW50YXRpb24gb2YgQ3VzdG9tRmlsdGVyUHJvZ3JhbSBvbiBVSSBQcm9jZXNzLgotICAgICAg
ICBjb25zdCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0
IFdlYkN1c3RvbUZpbHRlclByb2dyYW0qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX3ZlcnRleFNo
YWRlclN0cmluZyA9PSBvdGhlci0+dmVydGV4U2hhZGVyU3RyaW5nKCkgJiYgbV9mcmFnbWVudFNo
YWRlclN0cmluZyA9PSBvdGhlci0+ZnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsKLSAgICB9Ci0KLXBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiBtX3ZlcnRleFNoYWRlclN0cmluZzsgfQotICAgIHZpcnR1YWwgU3Ry
aW5nIGZyYWdtZW50U2hhZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9mcmFn
bWVudFNoYWRlclN0cmluZzsgfQotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxIYXZlQ2xpZW50cygp
IE9WRVJSSURFIHsgbm90aWZ5Q2xpZW50cygpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlbW92
ZUxhc3RDbGllbnQoKSBPVkVSUklERSB7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJDdXN0b21GaWx0
ZXJQcm9ncmFtKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0cmluZyBmcmFnbWVudFNoYWRl
clN0cmluZywgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUsIFdl
YkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5ncywgV2ViQ29y
ZTo6Q3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCi0gICAgICAgIDogV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUHJvZ3JhbShwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKQotICAg
ICAgICAsIG1fdmVydGV4U2hhZGVyU3RyaW5nKHZlcnRleFNoYWRlclN0cmluZykKLSAgICAgICAg
LCBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nKGZyYWdtZW50U2hhZGVyU3RyaW5nKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7Ci0gICAgU3RyaW5nIG1fZnJh
Z21lbnRTaGFkZXJTdHJpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgRU5BQkxFKENTU19TSEFERVJTKQotCi0j
ZW5kaWYgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBiZmQxNGM2
NGRjM2Q1YzE5YTg0OWJmMTUxZDUyMmVkNDQ5NmYyYmVkLi5iZWRjYTNhZWU1NDIwOWNmYjE2ZDFh
OTc0OTlhNDFlMTFmNWU3ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEzOSwxMSArMTM5LDcgQEAgSEVB
REVSUyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmggXAogICAgIFNoYXJlZC9XZWJV
c2VyQ29udGVudFVSTFBhdHRlcm4uaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggXAotICAgIFNoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXAotICAgIFNoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5oIFwKLSAgICBTaGFyZWQvQ29vcmRpbmF0
ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9O
ZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUFJl
bW90ZU9iamVjdE1hcC5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmgg
XApAQCAtMjE2LDkgKzIxMiw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50
aWNhdGlvbi9XZWJQcm90ZWN0aW9uU3BhY2UuaCBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9y
ZS5oIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaCBcCi0gICAgVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCiAg
ICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaCBcCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVu
ZGVyZXIuaCBcCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5oIFwKICAgICBV
SVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQ
cm94eUltcGwuaCBcCkBAIC0zNzQsMTIgKzM2OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0V2ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xs
ZXIuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFs
bG9jYXRvci5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0Lmgg
XAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
VGlsZS5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRh
dGVBdGxhcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxl
ci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmggXApAQCAtNTE3LDcgKzUwNiw2IEBAIFNPVVJD
RVMgKz0gXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5jcHAgXAogICAgIFNoYXJlZC9XZWJX
aGVlbEV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmNwcCBcCiAgICAgU2hhcmVkL3F0
L0FyZ3VtZW50Q29kZXJzUXQuY3BwIFwKQEAgLTU4MSw5ICs1NjksNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmNwcCBcCiAg
ICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9CYWNraW5n
U3RvcmVRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkQmFja2luZ1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIFwKLSAgICBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9EZWZh
dWx0VW5kb0NvbnRyb2xsZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2Fk
UHJveHkuY3BwIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3Bw
IFwKQEAgLTc2NSwxMiArNzUxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0VuY29kZXJBZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlz
cGF0Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAg
XAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0
b3IuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5j
cHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkVGlsZS5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L1VwZGF0ZUF0bGFzLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENv
bnRyb2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCA1YmI0NDY0NzdjYmQyNTc1
ZjU2ZDBjYzkzZGVhMDIxMWY3MjFhOTAzLi44MDZlYzJmMjg3MmQyN2IwOTk2OGI1YmMyZWUwYTEx
YWU5Nzc3MDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKICNpbmNs
dWRlICJGb3JtQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmFz
ZS5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VD
bGllbnRMZWdhY3lJbXBsLmgiCkBAIC02Myw2ICs2Miw3IEBACiAjaW5jbHVkZSA8RWRqZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXNFZmwuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0N1cnNvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dHVyZU1hcHBlclNjZW5lLmg+CiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KIAogI2lmIEVOQUJMRShWSUJSQVRJT04pCkBA
IC0zNjIsNyArMzYyLDcgQEAgQWZmaW5lVHJhbnNmb3JtIEV3a1ZpZXc6OnRyYW5zZm9ybVRvU2Ny
ZWVuKCkgY29uc3QKIH0KIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLUxheWVyVHJl
ZVJlbmRlcmVyKiBFd2tWaWV3OjpsYXllclRyZWVSZW5kZXJlcigpCitUZXh0dXJlTWFwcGVyU2Nl
bmUqIEV3a1ZpZXc6OnRleHR1cmVNYXBwZXJTY2VuZSgpCiB7CiAgICAgRHJhd2luZ0FyZWFQcm94
eSogZHJhd2luZ0FyZWEgPSBwYWdlKCktPmRyYXdpbmdBcmVhKCk7CiAgICAgaWYgKCFkcmF3aW5n
QXJlYSkKQEAgLTM3Miw3ICszNzIsNyBAQCBMYXllclRyZWVSZW5kZXJlciogRXdrVmlldzo6bGF5
ZXJUcmVlUmVuZGVyZXIoKQogICAgIGlmICghY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworICAgIHJldHVybiBjb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS0+dGV4dHVyZU1hcHBlclNjZW5lKCk7CiB9CiAjZW5kaWYKIApAQCAtMzk0
LDE0ICszOTQsMTQgQEAgdm9pZCBFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZChUaW1lcjxFd2tW
aWV3PiopCiAgICAgLy8gV2UgYXJlIHN1cHBvc2VkIHRvIGNsaXAgdG8gdGhlIGFjdHVhbCB2aWV3
cG9ydCwgbm90aGluZyBsZXNzLgogICAgIEludFJlY3Qgdmlld3BvcnQoc2QtPnZpZXcueCwgc2Qt
PnZpZXcueSwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7CiAKLSAgICBMYXllclRyZWVSZW5kZXJl
ciogcmVuZGVyZXIgPSBsYXllclRyZWVSZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCisg
ICAgVGV4dHVyZU1hcHBlclNjZW5lKiBzY2VuZSA9IHRleHR1cmVNYXBwZXJTY2VuZSgpOworICAg
IGlmICghc2NlbmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUo
dHJ1ZSk7Ci0gICAgcmVuZGVyZXItPnNldERyYXdzQmFja2dyb3VuZChtX3NldERyYXdzQmFja2dy
b3VuZCk7CisgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKKyAgICBzY2VuZS0+c2V0RHJhd3NC
YWNrZ3JvdW5kKG1fc2V0RHJhd3NCYWNrZ3JvdW5kKTsKICAgICBpZiAobV9pc0hhcmR3YXJlQWNj
ZWxlcmF0ZWQpIHsKLSAgICAgICAgcmVuZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRy
YW5zZm9ybVRvU2NlbmUoKS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCksIC8qIG9wYWNpdHkgKi8g
MSwgdmlld3BvcnQpOworICAgICAgICBzY2VuZS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJh
bnNmb3JtVG9TY2VuZSgpLnRvVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgLyogb3BhY2l0eSAqLyAx
LCB2aWV3cG9ydCk7CiAgICAgICAgIC8vIHNkLT5pbWFnZSBpcyB0aWVkIHRvIGEgbmF0aXZlIHN1
cmZhY2UuIFRoZSBuYXRpdmUgc3VyZmFjZSBpcyBpbiB0aGUgcGFyZW50J3MgY29vcmRpbmF0ZXMs
CiAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgdGhlIHZpZXdwb3J0IHBvc2l0
aW9uIHdoZW4gY2FsbGluZyBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQuCiAgICAg
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzZC0+aW1hZ2UsIHZpZXdwb3J0
LngoKSwgdmlld3BvcnQueSgpLCB2aWV3cG9ydC53aWR0aCgpLCB2aWV3cG9ydC5oZWlnaHQoKSk7
CkBAIC00MTQsNyArNDE0LDcgQEAgdm9pZCBFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZChUaW1l
cjxFd2tWaWV3PiopCiAgICAgICAgIGNhaXJvX3RyYW5zbGF0ZShncmFwaGljc0NvbnRleHQuZ2V0
KCksIC0gcGFnZVBvc2l0aW9uKCkueCgpLCAtIHBhZ2VQb3NpdGlvbigpLnkoKSk7CiAgICAgICAg
IGNhaXJvX3NjYWxlKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgcGFnZVNjYWxlRmFjdG9yKCksIHBh
Z2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgY2Fpcm9fc2NhbGUoZ3JhcGhpY3NDb250ZXh0Lmdl
dCgpLCBkZXZpY2VTY2FsZUZhY3RvcigpLCBkZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAg
cmVuZGVyZXItPnBhaW50VG9HcmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0LmdldCgpKTsK
KyAgICAgICAgc2NlbmUtPnBhaW50VG9HcmFwaGljc0NvbnRleHQoZ3JhcGhpY3NDb250ZXh0Lmdl
dCgpKTsKICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNkLT5pbWFn
ZSwgMCwgMCwgdmlld3BvcnQud2lkdGgoKSwgdmlld3BvcnQuaGVpZ2h0KCkpOwogICAgIH0KICNl
bmRpZgpAQCAtNjk1LDcgKzY5NSw3IEBAIGJvb2wgRXdrVmlldzo6Y3JlYXRlR0xTdXJmYWNlKGNv
bnN0IEludFNpemUmIHZpZXdTaXplKQogCiBib29sIEV3a1ZpZXc6OmVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKQogewotICAgIGxheWVyVHJlZVJlbmRlcmVyKCktPnNldEFjdGl2ZSh0
cnVlKTsKKyAgICB0ZXh0dXJlTWFwcGVyU2NlbmUoKS0+c2V0QWN0aXZlKHRydWUpOwogCiAgICAg
aWYgKCFtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMzdhOGQxYmRiYmJh
YzgwMWRmOWI1MWEyN2Y2NmQyOGUxNDZlYjc2Yi4uMTk1Mjg1ZTMyMjk0Njc2NjVmNjFhZDk4ZTcy
MGUwM2Q1NjIwOGE4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuaApAQCAtNjgsMTAgKzY4LDYgQEAgY2xhc3MgV2ViUG9wdXBNZW51UHJveHlFZmw7CiAjaWYg
RU5BQkxFKFZJQlJBVElPTikKIGNsYXNzIFZpYnJhdGlvbkNsaWVudEVmbDsKICNlbmRpZgotCi0j
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7Ci0j
ZW5kaWYKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzksNiArNzUsOSBAQCBjbGFzcyBB
ZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBDb2xvcjsKIGNsYXNzIEN1cnNvcjsKIGNsYXNzIEludFNp
emU7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorY2xhc3MgVGV4dHVyZU1hcHBlclNj
ZW5lOworI2VuZGlmCiB9CiAKIGNsYXNzIEV3a0NvbnRleHQ7CkBAIC0yMTksNyArMjE4LDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGRpc3BsYXlUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPEV3a1Zp
ZXc+Kik7CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgV2ViS2l0OjpMYXll
clRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICBXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyU2NlbmUqIHRleHR1cmVNYXBwZXJTY2VuZSgpOwogI2VuZGlmCiAKICAgICB2b2lkIGlu
Zm9ybUljb25DaGFuZ2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvcXQvcXF1aWNrd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3FxdWlja3dlYnBhZ2UuY3BwCmluZGV4IGZhMDEzYWY1Mzc2ODBhNDJiMzkzOWY3YzI4ZWY3MDhh
NmVmZGEwY2QuLmQxYWVmNzVkODY0MDI3ZjEyNWNmMmEzMTg2ZWM2ZWMxM2Q5OTI3NTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcApA
QCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgInFxdWlja3dlYnBhZ2VfcC5oIgogCiAjaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaCIKLSNpbmNsdWRlICJMYXllclRyZWVS
ZW5kZXJlci5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZUV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUg
IlF0V2ViUGFnZVNHTm9kZS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCkBA
IC0zMSw2ICszMCw3IEBACiAjaW5jbHVkZSAicXF1aWNrd2Vidmlld19wLmgiCiAjaW5jbHVkZSAi
cXdlYmtpdHRlc3RfcC5oIgogI2luY2x1ZGUgPFFRdWlja1dpbmRvdz4KKyNpbmNsdWRlIDxXZWJD
b3JlL1RleHR1cmVNYXBwZXJTY2VuZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCkBA
IC03MSw4ICs3MSw4IEBAIHZvaWQgUVF1aWNrV2ViUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVy
KiBwYWludGVyKQogICAgIGlmICghd2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+bGF5
ZXJUcmVlUmVuZGVyZXIoKSkKLSAgICAgICAgY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHko
KS0+bGF5ZXJUcmVlUmVuZGVyZXIoKS0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChwYWludGVyKTsK
KyAgICBpZiAoY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+dGV4dHVyZU1hcHBlclNj
ZW5lKCkpCisgICAgICAgIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPnRleHR1cmVN
YXBwZXJTY2VuZSgpLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwogfQogCiBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSogUVF1aWNrV2ViUGFnZVByaXZhdGU6OmNvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkKQEAgLTg4LDcgKzg4LDcgQEAgUVNHTm9kZSogUVF1aWNr
V2ViUGFnZTo6dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50Tm9k
ZURhdGEqKQogICAgIGlmICghZC0+d2ViUGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpKQogICAgICAg
ICByZXR1cm4gb2xkTm9kZTsKIAotICAgIExheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGQt
PmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPmxheWVyVHJlZVJlbmRlcmVyKCk7Cisg
ICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lKiB0ZXh0dXJlTWFwcGVyU2NlbmUgPSBkLT5j
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT50ZXh0dXJlTWFwcGVyU2NlbmUoKTsKIAog
ICAgIFF0V2ViUGFnZVNHTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PFF0V2ViUGFnZVNHTm9kZSo+
KG9sZE5vZGUpOwogCkBAIC0xMDUsNyArMTA1LDcgQEAgUVNHTm9kZSogUVF1aWNrV2ViUGFnZTo6
dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQog
ICAgIGlmICghbm9kZSkKICAgICAgICAgbm9kZSA9IG5ldyBRdFdlYlBhZ2VTR05vZGU7CiAKLSAg
ICBub2RlLT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CisgICAgbm9kZS0+c2V0VGV4dHVyZU1hcHBl
clNjZW5lKHRleHR1cmVNYXBwZXJTY2VuZSk7CiAKICAgICBub2RlLT5zZXRTY2FsZShkLT5jb250
ZW50c1NjYWxlKTsKICAgICBub2RlLT5zZXREZXZpY2VQaXhlbFJhdGlvKHdpbmRvdy0+ZGV2aWNl
UGl4ZWxSYXRpbygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
cXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cmF3L3FyYXd3ZWJ2aWV3LmNwcAppbmRleCAzNjFmNzRkYWI4NTFhZDg5OGVkMzlkMjc3YTdhNmY0
NzliMjU5NzMxLi42MjYxOWQ5ZmM4YzRmMDFlZWJkMzU3ZDY4ZTY5NTc3ZDhlYjhkNDY0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcu
Y3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
SW1wbC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiTmF0aXZl
V2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1ZGUgIldlYlBh
Z2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAicXJhd3dl
YnZpZXdfcF9wLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU2NlbmUuaD4KICNp
bmNsdWRlIDxXZWJLaXQyL3FyYXd3ZWJ2aWV3X3AuaD4KIAogdm9pZCBRUmF3V2ViVmlld1ByaXZh
dGU6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIFFSYXdXZWJWaWV3OjpzZXRBY3RpdmUo
Ym9vbCBhY3RpdmUpCiB7CiAgICAgZC0+bV9hY3RpdmUgPSBhY3RpdmU7CiAgICAgZC0+bV93ZWJQ
YWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Vmlld1dp
bmRvd0lzQWN0aXZlKTsKLSAgICBsYXllclRyZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUoYWN0aXZl
KTsKKyAgICB0ZXh0dXJlTWFwcGVyU2NlbmUoKS0+c2V0QWN0aXZlKGFjdGl2ZSk7CiB9CiAKIFFT
aXplIFFSYXdXZWJWaWV3OjpzaXplKCkgY29uc3QKQEAgLTM2Myw3ICszNjMsNyBAQCBXS1BhZ2VS
ZWYgUVJhd1dlYlZpZXc6OnBhZ2VSZWYoKQogICAgIHJldHVybiB0b0FQSShkLT5tX3dlYlBhZ2VQ
cm94eS5nZXQoKSk7CiB9CiAKLVdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXIqIFFSYXdXZWJWaWV3
OjpsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0CitXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmUq
IFFSYXdXZWJWaWV3Ojp0ZXh0dXJlTWFwcGVyU2NlbmUoKSBjb25zdAogewogICAgIFdlYktpdDo6
RHJhd2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWEgPSBkLT5tX3dlYlBhZ2VQcm94eS0+ZHJhd2lu
Z0FyZWEoKTsKICAgICBpZiAoIWRyYXdpbmdBcmVhKQpAQCAtMzcxLDIwICszNzEsMjAgQEAgV2Vi
S2l0OjpMYXllclRyZWVSZW5kZXJlciogUVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkg
Y29uc3QKICAgICBXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSA9IGRyYXdpbmdBcmVhLT5jb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSgpOwogICAgIGlmICghY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCiAg
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICByZXR1cm4gY29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHktPnRleHR1cmVNYXBwZXJTY2VuZSgpOwogfQogCiB2b2lkIFFSYXdXZWJWaWV3Ojpw
YWludChjb25zdCBRTWF0cml4NHg0JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVk
IHBhaW50RmxhZ3MpCiB7Ci0gICAgV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIg
PSBsYXllclRyZWVSZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpCisgICAgV2ViQ29yZTo6
VGV4dHVyZU1hcHBlclNjZW5lKiBzY2VuZSA9IHRleHR1cmVNYXBwZXJTY2VuZSgpOworICAgIGlm
ICghc2NlbmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1
ZSk7CisgICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0KDAsIDAsIGQtPm1fc2l6ZS53aWR0aCgpLCBkLT5tX3NpemUuaGVpZ2h0KCkpOwogCi0g
ICAgcmVuZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0eSwg
dHJhbnNmb3JtLm1hcFJlY3QocmVjdCksIHBhaW50RmxhZ3MpOworICAgIHNjZW5lLT5wYWludFRv
Q3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHksIHRyYW5zZm9ybS5tYXBSZWN0KHJl
Y3QpLCBwYWludEZsYWdzKTsKIH0KIAogdm9pZCBRUmF3V2ViVmlldzo6c2VuZEtleUV2ZW50KFFL
ZXlFdmVudCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3Jhdy9xcmF3d2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0
L3Jhdy9xcmF3d2Vidmlld19wLmgKaW5kZXggMDE1ODE1YWQ4YzcwYTlkZTA1ZDgxYmE2YTYzMDIx
MGI3MjJjZjdmNC4uODFjNmIyNGVlOTI3ODgzMzM4YjFiZjRiNTIyZGI1ZTVmMDU1YjM1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdf
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3
X3AuaApAQCAtNDcsOCArNDcsOCBAQCBRVF9FTkRfTkFNRVNQQUNFCiAKIGNsYXNzIFFSYXdXZWJW
aWV3UHJpdmF0ZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBMYXllclRyZWVSZW5kZXJl
cjsKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFRleHR1cmVNYXBwZXJTY2VuZTsKIH0KIAog
Y2xhc3MgUVJhd1dlYlZpZXdDbGllbnQgewpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNlbmRUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAgV2Vi
S2l0OjpMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdDsKKyAgICBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2NlbmUqIHRleHR1cmVNYXBwZXJTY2VuZSgpIGNvbnN0Owog
CiAgICAgUVJhd1dlYlZpZXdQcml2YXRlKiBkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgz
OGJiMGRiMjBkODc0MzRjOGE0MzFhNGYwNGY0ZmQ4NmE2NjBmYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5h
dGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0
dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIpCi17Ci0gICAgaWYgKCFtX3N1cmZhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEZsb2F0UmVjdCB0aWxlUmVjdChtX3RpbGVSZWN0KTsKLSAgICB0aWxlUmVjdC5zY2FsZSgxLiAv
IG1fc2NhbGUpOwotICAgIGJvb2wgc2hvdWxkUmVzZXQgPSBmYWxzZTsKLSAgICBpZiAodGlsZVJl
Y3QgIT0gcmVjdCgpKSB7Ci0gICAgICAgIHNldFJlY3QodGlsZVJlY3QpOwotICAgICAgICBzaG91
bGRSZXNldCA9IHRydWU7Ci0gICAgfQotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJl
ID0gdGhpcy0+dGV4dHVyZSgpOwotICAgIGlmICghdGV4dHVyZSkgewotICAgICAgICB0ZXh0dXJl
ID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBzZXRUZXh0dXJlKHRl
eHR1cmUuZ2V0KCkpOwotICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0gICAgfQotCi0gICAg
QVNTRVJUKHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkud2lkdGgoKSA+PSBtX3RpbGVS
ZWN0LnNpemUoKS53aWR0aCgpICYmIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkuaGVp
Z2h0KCkgPj0gbV90aWxlUmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotICAgIGlmIChzaG91bGRSZXNl
dCkKLSAgICAgICAgdGV4dHVyZS0+cmVzZXQobV90aWxlUmVjdC5zaXplKCksIG1fc3VyZmFjZS0+
c3VwcG9ydHNBbHBoYSgpKTsKLQotICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJl
LCBtX3NvdXJjZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7Ci0gICAgbV9zdXJmYWNlLmNsZWFyKCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQot
ewotICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgbV90aWxlUmVjdCA9IHRpbGVS
ZWN0OwotICAgIG1fc3VyZmFjZU9mZnNldCA9IG9mZnNldDsKLSAgICBtX3N1cmZhY2UgPSBidWZm
ZXI7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUodWludDMy
X3QgaWQsIGZsb2F0IHNjYWxlKQotewotICAgIG1fdGlsZXMuYWRkKGlkLCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZVRpbGUoc2NhbGUpKTsKLSAgICBtX3NjYWxlID0gc2NhbGU7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUodWludDMyX3QgaWQpCi17Ci0gICAg
QVNTRVJUKG1fdGlsZXMuY29udGFpbnMoaWQpKTsKLSAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGlk
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlQWxsVGlsZXMoKQot
ewotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90
aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgbV90
aWxlc1RvUmVtb3ZlLmFkZChpdC0+a2V5KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6dXBkYXRlVGlsZSh1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBi
YWNrQnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOwotICAgIEFT
U0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+dmFsdWUuc2V0QmFja0J1ZmZlcih0
aWxlUmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKLX0KLQotUGFzc1JlZlB0
cjxCaXRtYXBUZXh0dXJlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0
Ci17Ci0gICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnZhbHVlLnRl
eHR1cmUoKTsKLSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgICAgICByZXR1cm4gdGV4dHVy
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBzaXplOwotfQotCi12b2lkIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjpwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKFZlY3RvcjxUZXh0dXJl
TWFwcGVyVGlsZSo+JiB0aWxlcywgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4
dHVyZSogbWFzaywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRpbGVzW2ldLT5wYWludCh0ZXh0
dXJlTWFwcGVyLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIGNhbGN1bGF0ZUV4cG9zZWRUaWxl
RWRnZXMocmVjdCwgdGlsZXNbaV0tPnJlY3QoKSkpOwotfQotCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRy
aXg6OnJlY3RUb1JlY3QocmVjdCgpLCB0YXJnZXRSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVy
ZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQot
ewotICAgIGlmIChtX3RpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VCghbV9zaXplLmlzWmVybygpKTsKLQotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHRp
bGVzVG9QYWludDsKLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiBwcmV2aW91c1RpbGVz
VG9QYWludDsKLQotICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBhaW50
LCBpbiBjYXNlIHRoZSBvcGFjaXR5IGhhcyBjaGFuZ2VkLgotICAgIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBGbG9hdFJl
Y3QgY292ZXJlZFJlY3Q7Ci0gICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOwotICAgICAg
ICBpZiAoIXRpbGUudGV4dHVyZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7Ci0gICAgICAgICAgICB0aWxlc1RvUGFpbnQu
YXBwZW5kKCZ0aWxlKTsKLSAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRlKHRpbGUucmVjdCgp
KTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gT25seSBz
aG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gsIG90aGVyd2lzZSBl
ZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KLSAgICAgICAgLy8gV2Ugc2hvdyB0aGUgcHJldmlvdXMt
c2NhbGUgdGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0aCBhbnkgY3VycmVu
dC1zY2FsZSB0aWxlLgotICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYgY292ZXJlZFJlY3Qu
aW50ZXJzZWN0cyh0aWxlLnJlY3QoKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBwcmV2aW91c1RpbGVzVG9QYWludC5hcHBlbmQoJnRpbGUpOwotICAgIH0KLQotICAgIC8vIHRh
cmdldFJlY3QgaXMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLCBzbyB3ZSBtdXN0
IGNvbXBhcmUgdHdvIHJlY3RzIG9uIHRoZSBjb250ZW50cyBjb29yZGluYXRlIHN5c3RlbS4KLSAg
ICAvLyBTZWUgVGlsZWRCYWNraW5nU3RvcmUuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRq
dXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFy
Z2V0UmVjdCk7Ci0KLSAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHByZXZpb3VzVGlsZXNU
b1BhaW50LCB0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywg
cmVjdCgpKTsKLSAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHRpbGVzVG9QYWludCwgdGV4
dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3QoKSk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hcHBlciwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBmbG9hdCBib3JkZXJX
aWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtKQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJh
bnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3Qp
OwotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90
aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdGV4
dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihib3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIGl0LT52YWx1
ZS5yZWN0KCksIGFkanVzdGVkVHJhbnNmb3JtKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQot
ewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3Jt
ICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOwotICAgIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBm
b3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd1Jl
cGFpbnRDb3VudGVyKHJlcGFpbnRDb3VudCwgYm9yZGVyQ29sb3IsIGl0LT52YWx1ZS5yZWN0KCku
bG9jYXRpb24oKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyKQotewotICAgIEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciB0aWxlc1RvUmVtb3ZlRW5k
ID0gbV90aWxlc1RvUmVtb3ZlLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDx1aW50MzJfdD46Oml0
ZXJhdG9yIGl0ID0gbV90aWxlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IHRpbGVzVG9SZW1vdmVF
bmQ7ICsraXQpCi0gICAgICAgIG1fdGlsZXMucmVtb3ZlKCppdCk7Ci0gICAgbV90aWxlc1RvUmVt
b3ZlLmNsZWFyKCk7Ci0KLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJh
dG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRpbGVz
RW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdT
dG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgx
MjBlOWUzODIyNWY2NDA5NTQ2MDgzNjhmNDkyNDM0N2Q4MzRmYi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsODYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0K
LSNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAotI2RlZmluZSBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZV9oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKLQotY2xhc3Mg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlIDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJUaWxlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRp
bGUoZmxvYXQgc2NhbGUgPSAxKQotICAgICAgICA6IFRleHR1cmVNYXBwZXJUaWxlKFdlYkNvcmU6
OkZsb2F0UmVjdCgpKQotICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCi0gICAgewotICAgIH0KLQot
ICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KLSAgICB2
b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICB2b2lkIHNldEJh
Y2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1f
c3VyZmFjZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsKLSAgICBXZWJDb3Jl
OjpJbnRSZWN0IG1fdGlsZVJlY3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgbV9zdXJmYWNlT2Zm
c2V0OwotICAgIGZsb2F0IG1fc2NhbGU7Ci19OwotCi1jbGFzcyBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBmbG9hdCk7Ci0gICAgdm9p
ZCByZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCByZW1vdmVBbGxUaWxlcygp
OwotICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1
cmZhY2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUpOyB9Ci0gICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9u
cyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRt
YXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXplKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4
dHVyZSopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Qm9yZGVyKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXIqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoV2ViQ29yZTo6VGV4
dHVyZU1hcHBlciosIGludCByZXBhaW50Q291bnQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXgmKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZSgp
Ci0gICAgICAgIDogbV9zY2FsZSgxLikKLSAgICB7IH0KLSAgICB2b2lkIHBhaW50VGlsZXNUb1Rl
eHR1cmVNYXBwZXIoVmVjdG9yPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxlKj4mLCBXZWJDb3Jl
OjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBm
bG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtRm9y
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICBXZWJDb3JlOjpGbG9hdFJlY3Qg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdChXZWJDb3JlOjpGbG9hdFBv
aW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KLQotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVN
YXA7Ci0gICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwIG1fdGlsZXM7Ci0gICAgSGFz
aFNldDx1aW50MzJfdD4gbV90aWxlc1RvUmVtb3ZlOwotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBt
X3NpemU7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAot
I2VuZGlmCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKaW5kZXggMGNj
MzQyOTk1OTZhMTFkNWM1OTNmZDE4Mjc4ZjUwZjRiN2MyZDRjYy4uNjU0NDQwNGM4MjZiMWY0Yzdm
MmEwNjMyZWM5Y2YxMzYzYWU1NWRlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAtMjIsMTMgKzIyLDEzIEBACiAjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5LmgiCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgogI2luY2x1ZGUg
IkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVl
UmVuZGVyZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRhdGVJbmZvLmg+CiAK
ICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUlu
Zm8uaCIKQEAgLTQwLDEzICs0MCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCiAgICAgOiBtX2RyYXdpbmdBcmVh
UHJveHkoZHJhd2luZ0FyZWFQcm94eSkKLSAgICAsIG1fcmVuZGVyZXIoYWRvcHRSZWYobmV3IExh
eWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKKyAgICAsIG1fdGV4dHVyZU1hcHBlclNjZW5lKGFkb3B0
UmVmKG5ldyBUZXh0dXJlTWFwcGVyU2NlbmUodGhpcykpKQogewogfQogCiBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkKIHsKLSAg
ICBtX3JlbmRlcmVyLT5kZXRhY2goKTsKKyAgICBtX3RleHR1cmVNYXBwZXJTY2VuZS0+ZGV0YWNo
KCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdw
b3J0KCkKQEAgLTU2LDgxICs1Niw4MSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQogewot
ICAgIG1fcmVuZGVyZXItPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CisgICAgbV90ZXh0dXJlTWFw
cGVyU2NlbmUtPmFwcGVuZFVwZGF0ZShmdW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0
KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOworICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlVGlsZSwgbV90ZXh0dXJl
TWFwcGVyU2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwgdXBkYXRlSW5mby5zY2FsZUZhY3Rv
cikpOwogICAgIHVwZGF0ZVRpbGVGb3JMYXllcihsYXllcklELCB0aWxlSUQsIHRpbGVSZWN0LCB1
cGRhdGVJbmZvKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJ
bmZvJiB1cGRhdGVJbmZvKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBk
YXRlSW5mbykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6
dXBkYXRlVGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBMYXllclRyZWVS
ZW5kZXJlcjo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKKyAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnVwZGF0ZVRpbGUsIG1fdGV4dHVyZU1h
cHBlclNjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIFRleHR1cmVNYXBwZXJTY2VuZTo6VGls
ZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRhdGVJbmZvLmF0bGFz
SUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRp
bGVJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6cmVt
b3ZlVGlsZSwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGxheWVySUQsIHRpbGVJRCkpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYg
aGFuZGxlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpj
cmVhdGVVcGRhdGVBdGxhcywgbV9yZW5kZXJlci5nZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0
ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRl
eHR1cmVNYXBwZXJTY2VuZTo6Y3JlYXRlVXBkYXRlQXRsYXMsIG1fdGV4dHVyZU1hcHBlclNjZW5l
LmdldCgpLCBhdGxhc0lELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJU
cmVlUmVuZGVyZXI6OnJlbW92ZVVwZGF0ZUF0bGFzLCBtX3JlbmRlcmVyLmdldCgpLCBhdGxhc0lE
KSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpyZW1vdmVV
cGRhdGVBdGxhcywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGF0bGFzSUQpKTsKIH0KIAog
dm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ29tcG9zaXRpbmdMYXll
cnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykKIHsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXJzLCBtX3JlbmRlcmVy
LmdldCgpLCBpZHMpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2Nl
bmU6OmNyZWF0ZUxheWVycywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkcykpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xh
eWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQogewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcnMsIG1fcmVuZGVy
ZXIuZ2V0KCksIGlkcykpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJT
Y2VuZTo6ZGVsZXRlTGF5ZXJzLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5nZXQoKSwgaWRzKSk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFJvb3RDb21wb3NpdGlu
Z0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6c2V0Um9vdExheWVySUQsIG1fcmVuZGVyZXIuZ2V0KCksIGlk
KSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRSb290
TGF5ZXJJRCwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkKSk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29y
ZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQogewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRl
LCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgaW5mbykpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0TGF5ZXJTdGF0ZSwgbV90ZXh0dXJlTWFwcGVyU2NlbmUu
Z2V0KCksIGlkLCBpbmZvKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBjaGlsZHJlbikKIHsKLSAgICBkaXNwYXRj
aFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9yZW5k
ZXJlci5nZXQoKSwgaWQsIGNoaWxkcmVuKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4
dHVyZU1hcHBlclNjZW5lOjpzZXRMYXllckNoaWxkcmVuLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5n
ZXQoKSwgaWQsIGNoaWxkcmVuKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyRmlsdGVy
cyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMp
CiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVy
RmlsdGVycywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGZpbHRlcnMpKTsKKyAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVyRmlsdGVycywgbV90ZXh0dXJl
TWFwcGVyU2NlbmUuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3JlbmRlcmVy
LmdldCgpLCBpZCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2Vu
ZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCks
IGlkKSk7CiB9Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDdXN0
b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dy
YW1JbmZvJiBwcm9ncmFtSW5mbykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwg
aWQsIHByb2dyYW1JbmZvKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBl
clNjZW5lOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5n
ZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7CiB9CiAjZW5kaWYKIAotdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
Y29udGVudHNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKK3ZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IEludFNp
emUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UmVjdCYgY292ZXJlZFJlY3QpCiB7Ci0gICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBt
X3JlbmRlcmVyLmdldCgpKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBl
clNjZW5lOjpmbHVzaExheWVyQ2hhbmdlcywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCkpKTsK
ICAgICB1cGRhdGVWaWV3cG9ydCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAg
IG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUs
IGNvdmVyZWRSZWN0KTsKQEAgLTE0Miw0MyArMTQyLDQzIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNv
bnRlCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlQmFj
a2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZywgbV9yZW5k
ZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVN
YXBwZXJTY2VuZTo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5nZXQo
KSwgaW1hZ2VJRCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1
cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBjb25z
dCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJbWFnZUJhY2tpbmcsIG1fcmVu
ZGVyZXIuZ2V0KCksIGltYWdlSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRs
ZSkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnVwZGF0
ZUltYWdlQmFja2luZywgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGltYWdlSUQsIFdlYkNv
b3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1fcmVuZGVyZXIuZ2V0
KCksIGltYWdlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2Nl
bmU6OmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMsIG1fdGV4dHVyZU1hcHBlclNjZW5lLmdldCgp
LCBpbWFnZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJl
bW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUltYWdlQmFj
a2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6cmVtb3ZlSW1hZ2VCYWNraW5nLCBtX3RleHR1cmVNYXBw
ZXJTY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUoY29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUp
CiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRl
bnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwgY29udGVudHNTaXplKSk7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRDb250ZW50c1NpemUsIG1fdGV4dHVy
ZU1hcHBlclNjZW5lLmdldCgpLCBjb250ZW50c1NpemUpKTsKIH0KIAogdm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmIGFuaW1hdGlvbnMpCiB7Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQW5pbWF0aW9u
cywgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGFuaW1hdGlvbnMpKTsKKyAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OnNldExheWVyQW5pbWF0aW9ucywgbV90ZXh0dXJl
TWFwcGVyU2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1hdGlv
bnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6c2V0QW5pbWF0aW9uc0xvY2tlZCwgbV90ZXh0dXJl
TWFwcGVyU2NlbmUuZ2V0KCksIGxvY2tlZCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICAvLyBJbmZvcm0g
dGhlIHJlbmRlcmVyIHRvIGFkanVzdCB2aWV3cG9ydC1maXhlZCBsYXllcnMuCi0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250ZW50c1JlY3Qs
IG1fcmVuZGVyZXIuZ2V0KCksIHJlY3QpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0
dXJlTWFwcGVyU2NlbmU6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1fdGV4dHVyZU1hcHBlclNj
ZW5lLmdldCgpLCByZWN0KSk7CiAKICAgICBpZiAocmVjdCA9PSBtX2xhc3RTZW50VmlzaWJsZVJl
Y3QgJiYgdHJhamVjdG9yeVZlY3RvciA9PSBtX2xhc3RTZW50VHJhamVjdG9yeVZlY3RvcikKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OnJlbmRlck5leHRGcmFtZSgpCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFU
SU9OX0ZSQU1FKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVxdWVzdEFu
aW1hdGlvbkZyYW1lKCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBtX3JlbmRlcmVyLmdldCgpKSk7CisgICAgZGlz
cGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpyZXF1ZXN0QW5pbWF0aW9uRnJh
bWUsIG1fdGV4dHVyZU1hcHBlclNjZW5lLmdldCgpKSk7CiAgICAgdXBkYXRlVmlld3BvcnQoKTsK
IH0KIApAQCAtMjA4LDMwICsyMDgsMzAgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eTo6YW5pbWF0aW9uRnJhbWVSZWFkeSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0
aW9uKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkaWRD
aGFuZ2VTY3JvbGxQb3NpdGlvbiwgbV9yZW5kZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OmRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uLCBtX3RleHR1cmVNYXBwZXJTY2VuZS5nZXQoKSwgcG9zaXRpb24pKTsKIH0KIAogI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2Fu
dmFzU2l6ZSwgY29uc3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQogewogICAgIEdyYXBo
aWNzU3VyZmFjZTo6RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0
c1RleHR1cmVUYXJnZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ2FudmFzLCBtX3Jl
bmRlcmVyLmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2Fu
dmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZUZXh0dXJlTWFwcGVyU2NlbmU6OmNyZWF0ZUNhbnZhcywgbV90ZXh0dXJlTWFwcGVyU2NlbmUu
Z2V0KCksIGlkLCBjYW52YXNTaXplLCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjYW52YXNTaXpl
LCBzdXJmYWNlRmxhZ3MsIHRva2VuKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5OjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJv
bnRCdWZmZXIpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6
OnN5bmNDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJlRleHR1cmVNYXBwZXJTY2VuZTo6c3luY0NhbnZhcywgbV90ZXh0
dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwogfQogCiB2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGVz
dHJveUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZUZXh0dXJlTWFwcGVyU2NlbmU6OmRlc3Ryb3lDYW52YXMsIG1fdGV4dHVyZU1hcHBlclNj
ZW5lLmdldCgpLCBpZCkpOwogfQogI2VuZGlmCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50
IHZhbHVlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpz
ZXRMYXllclJlcGFpbnRDb3VudCwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIHZhbHVlKSk7CisgICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmVGV4dHVyZU1hcHBlclNjZW5lOjpzZXRMYXllclJlcGFpbnRD
b3VudCwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCksIGlkLCB2YWx1ZSkpOwogfQogCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJnZUJhY2tpbmdTdG9yZXMoKQpAQCAt
MjM5LDkgKzIzOSw5IEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnB1cmdl
QmFja2luZ1N0b3JlcygpCiAgICAgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnByb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpQdXJnZUJhY2tpbmdT
dG9yZXMoKSwgbV9kcmF3aW5nQXJlYVByb3h5LT5wYWdlKCktPnBhZ2VJRCgpKTsKIH0KIAotdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0
IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldEJhY2tncm91bmRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEJhY2tncm91bmRDb2xvciwgbV9y
ZW5kZXJlci5nZXQoKSwgY29sb3IpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZUZXh0dXJl
TWFwcGVyU2NlbmU6OnNldEJhY2tncm91bmRDb2xvciwgbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0
KCksIGNvbG9yKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS5oCmluZGV4IGJkMGEzZWU0MDcwMmJkMjNmNzg2YTM5NTAxMmE4NjI2
OWFiOWMxMjkuLmMzZDEzNjgxOThmZWZhMzVjNTBkYjNhMDM0N2M3YjlkNzM0MjRiYjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAt
MjQsMTEgKzI0LDggQEAKIAogI2luY2x1ZGUgIkJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkNv
b3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eS5oIgotI2luY2x1ZGUgIkxh
eWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5jbHVkZSAiU3VyZmFj
ZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb29yZGluYXRlZFN1cmZhY2UuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllci5oPgpAQCAtMzcsNjMgKzM0LDY2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SdW5M
b29wLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU2NlbmUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1RpbWVyLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvb3JkaW5hdGVkTGF5ZXJJbmZv
OwotY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXI7CitjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsKK30K
IAotY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMgTGF5ZXJUcmVl
UmVuZGVyZXJDbGllbnQgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIENvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5IDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZUNs
aWVudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxp
Y2l0IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqKTsKLSAg
ICB+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKTsKLSAgICB2b2lkIHNldENvbXBvc2l0
aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJ
bmZvJik7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZpcnR1YWwg
fkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CisgICAgdm9pZCBzZXRDb21wb3NpdGlu
Z0xheWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySW5mbyYpOworICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNoaWxk
cmVuKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRD4mKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBz
ZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0
ZXJzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogICAgIHZvaWQgY3Jl
YXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRl
clByb2dyYW1JbmZvJik7CiAgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBp
ZCk7CiAjZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVy
cyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgc2V0Um9vdENv
bXBvc2l0aW5nTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIGNyZWF0ZUNvbXBv
c2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7
CisgICAgdm9pZCBkZWxldGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgc2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEKTsKICAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsKICAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1Jl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
dHJhamVjdG9yeVZlY3Rvcik7CiAgICAgdm9pZCBkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRS
ZWN0KTsKLSAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRh
dGVJbmZvJik7Ci0gICAgdm9pZCB1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBTdXJmYWNl
VXBkYXRlSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2b2lkIGNyZWF0ZVRpbGVGb3JMYXllcihXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCB1
cGRhdGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5h
dGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKICAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFz
KHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlJik7
CiAgICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLSAgICB2b2lk
IGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lk
IHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25zdCBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIGNyZWF0ZUltYWdl
QmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHVw
ZGF0ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBjb25z
dCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYpOworICAgIHZvaWQgY2xlYXJJbWFnZUJh
Y2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2
b2lkIHJlbW92ZUltYWdlQmFja2luZyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3Nh
Z2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VEZWNvZGVyJik7CiAgICAg
dm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBw
b3NpdGlvbik7CiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBjcmVhdGVDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKLSAgICB2b2lkIHN5bmNDYW52YXMoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBkZXN0cm95Q2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgdm9pZCBjcmVhdGVDYW52YXMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4mKTsKKyAgICB2b2lkIHN5bmNDYW52YXMoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7CisgICAgdm9pZCBkZXN0
cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CiAjZW5kaWYKLSAgICB2b2lk
IHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKLSAg
ICBMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlcmVyLmdldCgpOyB9Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOworICAg
IHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBp
bnQgdmFsdWUpOworICAgIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZSogdGV4dHVyZU1hcHBl
clNjZW5lKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCk7IH0KKyAg
ICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CiAgICAgdm9pZCBzZXRBbmlt
YXRpb25zTG9ja2VkKGJvb2wpOwogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
ICAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwogI2VuZGlmCiAgICAgdm9pZCBzZXRC
YWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsKIAotICAgIC8vIExheWVyVHJl
ZVJlbmRlcmVyQ2xpZW50IE1ldGhvZHMuCisgICAgLy8gVGV4dHVyZU1hcHBlclNjZW5lQ2xpZW50
IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQogICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgT1ZFUlJJREU7CiAjZW5kaWYKQEAgLTEwNSwx
MyArMTA1LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1
bmN0aW9uPHZvaWQoKT4mKTsKIAogICAgIERyYXdpbmdBcmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQ
cm94eTsKLSAgICBSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IG1fcmVuZGVyZXI7CisgICAgUmVm
UHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZT4gbV90ZXh0dXJlTWFwcGVyU2NlbmU7CiAg
ICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1fbGFzdFNlbnRWaXNpYmxlUmVjdDsKICAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50IG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yOwogfTsKIAotfQorfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRpZgorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKIAogI2VuZGlmIC8vIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHku
bWVzc2FnZXMuaW4KaW5kZXggZTNlNzhiMzBiMDE5MjU1M2IwNmM2OTI4OTI4YjBhNmIzM2Q2ZDZh
ZS4uMjFkYzI2MzQ1MDNjY2RlODc5MDYyZDc5MzIzYzZiYmFiZTRmNzJlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVz
c2FnZXMuaW4KQEAgLTE5LDcgKzE5LDcgQEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKIG1lc3NhZ2VzIC0+IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IExlZ2FjeVJlY2Vp
dmVyIHsKLSAgICBTZXRDb21wb3NpdGluZ0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYktpdDo6
Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvKQorICAgIFNldENvbXBvc2l0aW5nTGF5ZXJT
dGF0ZSh1aW50MzJfdCBpZCwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZv
KQogICAgIFNldENvbXBvc2l0aW5nTGF5ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVp
bnQzMl90PiBjaGlsZHJlbikKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgU2V0Q29tcG9z
aXRpbmdMYXllckZpbHRlcnModWludDMyX3QgaWQsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMg
ZmlsdGVycykKQEAgLTMxLDggKzMxLDggQEAgbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkgTGVnYWN5UmVjZWl2ZXIgewogICAgIFNldFJvb3RDb21wb3NpdGluZ0xheWVy
KHVpbnQzMl90IGlkKQogICAgIENyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJf
dD4gaWRzKQogICAgIERlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRz
KQotICAgIENyZWF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8g
dXBkYXRlSW5mbykKLSAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJLaXQ6OlN1cmZhY2VV
cGRhdGVJbmZvIHVwZGF0ZUluZm8pCisgICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViQ29y
ZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIo
dWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVS
ZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQogICAgIFJlbW92ZVRp
bGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCiAgICAgQ3JlYXRl
VXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1cmZh
Y2U6OkhhbmRsZSBoYW5kbGUpCiAgICAgUmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJ
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNzBmYTk2M2E3ODU3ODIzMDBiZWJmY2YyZGM4MzgxMTg2NGE4YTFkZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw2OTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29weXJp
Z2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVu
ZGVyZXIuaCIKLQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tp
bmdTdG9yZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJMYXllci5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlIDxPcGVu
R0xTaGltcy5oPgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0
ZXJQcm9ncmFtLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKLSNpbmNs
dWRlICJXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXZWJDdXN0b21GaWx0
ZXJQcm9ncmFtLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkaXNwYXRjaE9uTWFpblRo
cmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBpZiAoaXNNYWlu
VGhyZWFkKCkpCi0gICAgICAgIGZ1bmN0aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKGZ1bmN0aW9uKTsKLX0KLQotc3RhdGljIEZsb2F0UG9pbnQgYm91bmRlZFNjcm9s
bFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHZpc2libGVDb250ZW50UmVjdCwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSkKLXsK
LSAgICBmbG9hdCBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi54KCks
IDAuMGYpOwotICAgIHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWCwg
Y29udGVudFNpemUud2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdC53aWR0aCgpKTsKLQotICAg
IGZsb2F0IHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLnkoKSwgMC4w
Zik7Ci0gICAgc2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25ZLCBjb250
ZW50U2l6ZS5oZWlnaHQoKSAtIHZpc2libGVDb250ZW50UmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0
dXJuIEZsb2F0UG9pbnQoc2Nyb2xsUG9zaXRpb25YLCBzY3JvbGxQb3NpdGlvblkpOwotfQotCi1z
dGF0aWMgYm9vbCBsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciogbGF5
ZXIpCi17Ci0gICAgcmV0dXJuIGxheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+Y29udGVu
dHNBcmVWaXNpYmxlKCkgJiYgIWxheWVyLT5zaXplKCkuaXNFbXB0eSgpOwotfQotCi1MYXllclRy
ZWVSZW5kZXJlcjo6TGF5ZXJUcmVlUmVuZGVyZXIoTGF5ZXJUcmVlUmVuZGVyZXJDbGllbnQqIGNs
aWVudCkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1faXNBY3RpdmUoZmFsc2UpCi0g
ICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRDb29yZGluYXRlZExheWVySUQpCi0gICAgLCBtX2Fu
aW1hdGlvbnNMb2NrZWQoZmFsc2UpCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KQotICAgICwgbV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZChmYWxzZSkKLSNlbmRpZgotICAgICwg
bV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9zZXREcmF3c0JhY2tncm91
bmQoZmFsc2UpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLX0KLQotTGF5ZXJUcmVl
UmVuZGVyZXI6On5MYXllclRyZWVSZW5kZXJlcigpCi17Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QsIFRleHR1
cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKLXsKLSAgICBpZiAoIW1fdGV4dHVyZU1h
cHBlcikgewotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUo
VGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHR1cmVN
YXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0YW5jZUFu
dGlhbGlhc2luZyh0cnVlKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5h
Y2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgc3lu
Y1JlbW90ZUNvbnRlbnQoKTsKLQotICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsK
LSAgICBHcmFwaGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7Ci0gICAg
aWYgKCFjdXJyZW50Um9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0dXJlTWFw
cGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7
Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotICAgIGlmICghbV9hbmltYXRpb25z
TG9ja2VkKQotICAgICAgICBsYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKLSAg
ICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7Ci0gICAgbV90ZXh0
dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOwot
Ci0gICAgaWYgKG1fc2V0RHJhd3NCYWNrZ3JvdW5kKSB7Ci0gICAgICAgIFJHQkEzMiByZ2JhID0g
bWFrZVJHQkEzMkZyb21GbG9hdHMobV9iYWNrZ3JvdW5kQ29sb3IucmVkKCksCi0gICAgICAgICAg
ICBtX2JhY2tncm91bmRDb2xvci5ncmVlbigpLCBtX2JhY2tncm91bmRDb2xvci5ibHVlKCksCi0g
ICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvci5hbHBoYSgpICogb3BhY2l0eSk7Ci0gICAgICAg
IG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5zZm9ybWF0aW9u
TWF0cml4KCksIENvbG9yKHJnYmEpKTsKLSAgICB9Ci0KLSAgICBpZiAoY3VycmVudFJvb3RMYXll
ci0+b3BhY2l0eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkg
IT0gbWF0cml4KSB7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0
eSk7Ci0gICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAg
ICAgICBjdXJyZW50Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCk7Ci0gICAgfQotCi0gICAgbGF5ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVy
LT5lbmRDbGlwKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwotCi0gICAg
aWYgKGxheWVyLT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQotICAg
ICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRl
Vmlld3BvcnQsIHRoaXMpKTsKLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
LSAgICBpZiAobV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZCkgewotICAgICAgICBtX2FuaW1hdGlv
bkZyYW1lUmVxdWVzdGVkID0gZmFsc2U7Ci0gICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjphbmltYXRpb25GcmFtZVJlYWR5LCB0aGlzKSk7Ci0gICAg
fQotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjphbmltYXRpb25GcmFtZVJlYWR5KCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmFu
aW1hdGlvbkZyYW1lUmVhZHkoKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVxdWVz
dEFuaW1hdGlvbkZyYW1lKCkKLXsKLSAgICBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkID0gdHJ1
ZTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpY3ND
b250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQgcGFpbnRlcikKLXsK
LSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4
dHVyZU1hcHBlcjo6Y3JlYXRlKCk7Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxl
cmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6OlNvZnR3YXJlTW9kZSk7Ci0gICAgc3luY1Jl
bW90ZUNvbnRlbnQoKTsKLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJl
TWFwcGVyTGF5ZXIocm9vdExheWVyKCkpOwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChwYWludGVyKTsKLSAg
ICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsK
LSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoKTsKLQotICAgIGlmIChtX3NldERy
YXdzQmFja2dyb3VuZCkKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihn
cmFwaGljc0NvbnRleHQuY2xpcEJvdW5kcygpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBtX2Jh
Y2tncm91bmRDb2xvcik7Ci0KLSAgICBsYXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVNYXBw
ZXItPmVuZFBhaW50aW5nKCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRl
eHQoMCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZShjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKLXsKLSAgICBtX2NvbnRlbnRzU2l6
ZSA9IGNvbnRlbnRzU2l6ZTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJs
ZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgbV92aXNpYmxlQ29u
dGVudHNSZWN0ID0gcmVjdDsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmll
d3BvcnQoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY2xpZW50
KQotICAgICAgICBtX2NsaWVudC0+dXBkYXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpCi17Ci0gICAgaWYgKG1f
Zml4ZWRMYXllcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXhlZCBs
YXllciBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQgYnkgdGhlIHdlYiBwcm9jZXNzIHdoZW4gd2UgdXBk
YXRlIHRoZSB2aXNpYmxlIGNvbnRlbnRzIHJlY3QgLyBzY3JvbGwgcG9zaXRpb24uCi0gICAgLy8g
SWYgd2Ugd2FudCB0aG9zZSBsYXllcnMgdG8gZm9sbG93IGFjY3VyYXRlbHkgdGhlIHZpZXdwb3J0
IHdoZW4gd2UgbW92ZSBiZXR3ZWVuIHRoZSB3ZWIgcHJvY2VzcyB1cGRhdGVzLCB3ZSBoYXZlIHRv
IG9mZnNldAotICAgIC8vIHRoZW0gYnkgdGhlIGRlbHRhIGJldHdlZW4gdGhlIGN1cnJlbnQgcG9z
aXRpb24gYW5kIHRoZSBwb3NpdGlvbiBvZiB0aGUgdmlld3BvcnQgdXNlZCBmb3IgdGhlIGxhc3Qg
bGF5b3V0LgotICAgIEZsb2F0UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9z
aXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0LmxvY2F0aW9uKCksIG1fdmlzaWJsZUNvbnRlbnRz
UmVjdCwgbV9jb250ZW50c1NpemUpOwotICAgIEZsb2F0UG9pbnQgcmVuZGVyZWRTY3JvbGxQb3Np
dGlvbiA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3Np
dGlvbiwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7Ci0gICAgRmxvYXRT
aXplIGRlbHRhID0gc2Nyb2xsUG9zaXRpb24gLSByZW5kZXJlZFNjcm9sbFBvc2l0aW9uOwotCi0g
ICAgTGF5ZXJSYXdQdHJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7Ci0g
ICAgZm9yIChMYXllclJhd1B0ck1hcDo6aXRlcmF0b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnZh
bHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0YUlmTmVlZGVkKGRlbHRhKTsKLX0KLQotdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24pCi17Ci0gICAgbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0
aW9uID0gcG9zaXRpb247Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkK
LXsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyQnlJRChpZCk7Ci0gICAgQVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNv
bnRhaW5zKGlkKSk7Ci0KLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU+IGNhbnZhc0JhY2tpbmdTdG9yZShUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6
Y3JlYXRlKCkpOwotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNr
aW5nU3RvcmUpOwotCi0gICAgY2FudmFzQmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uo
c3VyZmFjZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3Rv
cmUuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCi17Ci0gICAgQVNTRVJUKG1f
dGV4dHVyZU1hcHBlcik7Ci0gICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFp
bnMoaWQpKTsKLQotICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9z
dXJmYWNlQmFja2luZ1N0b3Jlcy5maW5kKGlkKTsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1
cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLQotICAg
IGNhbnZhc0JhY2tpbmdTdG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChmcm9udEJ1ZmZlcik7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXll
cklEIGlkKQotewotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIEdyYXBoaWNzTGF5
ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5jb250YWlucyhpZCkpOwotCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUo
aWQpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXll
cklEIGlkLCBpbnQgdmFsdWUpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5
SUQoaWQpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRSZXBh
aW50Q291bnQodmFsdWUpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNo
aWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5
ZXJJRD4mIGNoaWxkSURzKQotewotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlE
KGlkKTsKLSAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7ICsraSkgewotICAgICAgICBDb29yZGlu
YXRlZExheWVySUQgY2hpbGRJRCA9IGNoaWxkSURzW2ldOwotICAgICAgICBHcmFwaGljc0xheWVy
KiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNo
aWxkKTsKLSAgICB9Ci0gICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLX0KLQotI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmls
dGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotCi0jaWYg
RU5BQkxFKENTU19TSEFERVJTKQotICAgIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1z
KGZpbHRlcnMpOwotI2VuZGlmCi0gICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7Ci19Ci0j
ZW5kaWYKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OmluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMpIGNvbnN0Ci17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVy
cy5vcGVyYXRpb25zKCkuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChvcGVyYXRpb24tPmdldE9w
ZXJhdGlvblR5cGUoKSAhPSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tT3BlcmF0
aW9uID0gc3RhdGljX2Nhc3Q8V2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsK
LSAgICAgICAgQVNTRVJUKCFjdXN0b21PcGVyYXRpb24tPnByb2dyYW0oKSk7Ci0gICAgICAgIEN1
c3RvbUZpbHRlclByb2dyYW1NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRl
clByb2dyYW1zLmZpbmQoY3VzdG9tT3BlcmF0aW9uLT5wcm9ncmFtSUQoKSk7Ci0gICAgICAgIEFT
U0VSVChpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCkpOwotICAgICAgICBjdXN0
b21PcGVyYXRpb24tPnNldFByb2dyYW0oaXRlci0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLX0KLQot
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQs
IGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsK
LSAgICBBU1NFUlQoIW1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuY29udGFpbnMoaWQpKTsKLSAgICBt
X2N1c3RvbUZpbHRlclByb2dyYW1zLnNldChpZCwgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3Jl
YXRlKHByb2dyYW1JbmZvLnZlcnRleFNoYWRlclN0cmluZygpLCBwcm9ncmFtSW5mby5mcmFnbWVu
dFNoYWRlclN0cmluZygpLCBwcm9ncmFtSW5mby5wcm9ncmFtVHlwZSgpLCBwcm9ncmFtSW5mby5t
aXhTZXR0aW5ncygpLCBwcm9ncmFtSW5mby5tZXNoVHlwZSgpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQotewotICAgIEN1
c3RvbUZpbHRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dy
YW1zLmZpbmQoaWQpOwotICAgIEFTU0VSVChpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMu
ZW5kKCkpOwotICAgIGlmIChtX3RleHR1cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBl
ci0+cmVtb3ZlQ2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbShpdGVyLT52YWx1ZS5nZXQoKSk7Ci0g
ICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5yZW1vdmUoaXRlcik7Ci19Ci0jZW5kaWYgLy8gRU5B
QkxFKENTU19TSEFERVJTKQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRl
KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGxheWVy
SW5mbykKLXsKLSAgICBBU1NFUlQobV9yb290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRM
YXllcklEKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0KLSAg
ICBsYXllci0+c2V0UmVwbGljYXRlZEJ5TGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJ
bmZvLnJlcGxpY2EpKTsKLSAgICBsYXllci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJRElmRXhp
c3RzKGxheWVySW5mby5tYXNrKSk7Ci0KLSAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJ
bmZvLmFuY2hvclBvaW50KTsKLSAgICBsYXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7
Ci0gICAgbGF5ZXItPnNldFNpemUobGF5ZXJJbmZvLnNpemUpOwotCi0gICAgbGF5ZXItPnNldFRy
YW5zZm9ybShsYXllckluZm8udHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFu
c2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0QmFja2Zh
Y2VWaXNpYmlsaXR5KGxheWVySW5mby5iYWNrZmFjZVZpc2libGUpOwotICAgIGxheWVyLT5zZXRD
b250ZW50c09wYXF1ZShsYXllckluZm8uY29udGVudHNPcGFxdWUpOwotICAgIGxheWVyLT5zZXRD
b250ZW50c1JlY3QobGF5ZXJJbmZvLmNvbnRlbnRzUmVjdCk7Ci0gICAgbGF5ZXItPnNldENvbnRl
bnRzVG9Tb2xpZENvbG9yKGxheWVySW5mby5zb2xpZENvbG9yKTsKLSAgICBsYXllci0+c2V0RHJh
d3NDb250ZW50KGxheWVySW5mby5kcmF3c0NvbnRlbnQpOwotICAgIGxheWVyLT5zZXRDb250ZW50
c1Zpc2libGUobGF5ZXJJbmZvLmNvbnRlbnRzVmlzaWJsZSk7Ci0gICAgdG9HcmFwaGljc0xheWVy
VGV4dHVyZU1hcHBlcihsYXllciktPnNldEZpeGVkVG9WaWV3cG9ydChsYXllckluZm8uZml4ZWRU
b1ZpZXdwb3J0KTsKLSAgICBsYXllci0+c2V0U2hvd0RlYnVnQm9yZGVyKGxheWVySW5mby5zaG93
RGVidWdCb3JkZXJzKTsKLSAgICBsYXllci0+c2V0RGVidWdCb3JkZXIobGF5ZXJJbmZvLmRlYnVn
Qm9yZGVyQ29sb3IsIGxheWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoKTsKLSAgICBsYXllci0+c2V0
U2hvd1JlcGFpbnRDb3VudGVyKGxheWVySW5mby5zaG93UmVwYWludENvdW50ZXIpOwotCi0gICAg
aWYgKGxheWVySW5mby5maXhlZFRvVmlld3BvcnQpCi0gICAgICAgIG1fZml4ZWRMYXllcnMuYWRk
KGlkLCBsYXllcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7
Ci0KLSAgICBhc3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VJ
RCk7Ci0gICAgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUobGF5ZXIpOwotCi0gICAgLy8gTmV2
ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBjbGlwLgotICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRz
KGxheWVySW5mby5pc1Jvb3RMYXllciA/IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMp
OwotICAgIGxheWVyLT5zZXRPcGFjaXR5KGxheWVySW5mby5vcGFjaXR5KTsKLSAgICBsYXllci0+
c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZvLnByZXNlcnZlczNEKTsKLX0KLQotR3JhcGhpY3NMYXll
ciogTGF5ZXJUcmVlUmVuZGVyZXI6OmdldExheWVyQnlJRElmRXhpc3RzKENvb3JkaW5hdGVkTGF5
ZXJJRCBpZCkKLXsKLSAgICByZXR1cm4gKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQp
ID8gbGF5ZXJCeUlEKGlkKSA6IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0
ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQotewotICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBpZHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAg
ICBjcmVhdGVMYXllcihpZHNbaW5kZXhdKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
Y3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIE93blB0cjxXZWJDb3Jl
OjpHcmFwaGljc0xheWVyPiBuZXdMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZh
Y3RvcnkgKi8sIHRoaXMpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobmV3TGF5
ZXIuZ2V0KCkpLT5zZXRIYXNPd25CYWNraW5nU3RvcmUoZmFsc2UpOwotICAgIG1fbGF5ZXJzLmFk
ZChpZCwgbmV3TGF5ZXIucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
ZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykK
LXsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbGF5ZXJJRHMuc2l6ZSgpOyAr
K2luZGV4KQotICAgICAgICBkZWxldGVMYXllcihsYXllcklEc1tpbmRleF0pOwotfQotCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJ
RCkKLXsKLSAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIgPSBtX2xheWVycy50YWtlKGxh
eWVySUQpOwotICAgIEFTU0VSVChsYXllcik7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3Zl
KGxheWVyLmdldCgpKTsKLSAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKLSNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShs
YXllcklEKTsKLSNlbmRpZgotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5
ZXJJRChDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBBU1NFUlQobGF5ZXJJRCAh
PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXJJRCA9
PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLQotICAgIG1fcm9vdExheWVySUQgPSBsYXll
cklEOwotCi0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0g
ICAgQVNTRVJUKG1fcm9vdExheWVyLT5jaGlsZHJlbigpLmlzRW1wdHkoKSk7Ci0gICAgbV9yb290
TGF5ZXItPmFkZENoaWxkKGxheWVyKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHJl
cGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsK
LSAgICBpZiAoIWxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShncmFwaGljc0xheWVyKSkgewot
ICAgICAgICByZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChncmFwaGljc0xheWVyKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGdyYXBo
aWNzTGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVCYWNraW5nU3Rv
cmVJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZXMuY29udGFpbnMoZ3JhcGhpY3NMYXllcikpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7Ci0gICAgYmFja2luZ1N0b3JlLT5zZXRTaXplKGdy
YXBoaWNzTGF5ZXItPnNpemUoKSk7Ci0gICAgbV9iYWNraW5nU3RvcmVzLmFkZChncmFwaGljc0xh
eWVyLCBiYWNraW5nU3RvcmUpOwotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3Jh
cGhpY3NMYXllciktPnNldEJhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQotewotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4g
YmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLnRha2UoZ3JhcGhpY3NMYXllcik7Ci0gICAg
aWYgKCFiYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRvR3JhcGhpY3NMYXll
clRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllciktPnNldEJhY2tpbmdTdG9yZSgwKTsKLX0KLQot
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRC
YWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQoZ3JhcGhpY3NM
YXllcik7Ci0gICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5zZXRT
aXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
ZmxvYXQgc2NhbGUpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5
ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsK
LSAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7Ci0gICAgcmVzZXRC
YWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpyZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0
aWxlSUQpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7
Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2Jh
Y2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9yZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYmFja2luZ1N0b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7Ci0gICAgcmVz
ZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOwotICAgIG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXllclRy
ZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRhdGUpCi17Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAg
ICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLQotICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0g
bV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5hdGxhc0lEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zdXJm
YWNlcy5lbmQoKSk7Ci0KLSAgICBiYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRh
dGUuc291cmNlUmVjdCwgdXBkYXRlLnRpbGVSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZS5vZmZzZXQp
OwotICAgIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKGxheWVyKTsKLSAgICBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQotewotICAgIEFTU0VSVCgh
bV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lEKSk7Ci0gICAgbV9zdXJmYWNlcy5hZGQoYXRsYXNJ
RCwgc3VyZmFjZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17Ci0gICAgQVNTRVJUKG1fc3VyZmFjZXMuY29udGFpbnMo
YXRsYXNJRCkpOwotICAgIG1fc3VyZmFjZXMucmVtb3ZlKGF0bGFzSUQpOwotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlEKQotewotICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGlt
YWdlSUQpKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZShDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1faW1hZ2VCYWNraW5n
cy5hZGQoaW1hZ2VJRCwgYmFja2luZ1N0b3JlLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
IGltYWdlSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQotewotICAg
IEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIEltYWdlQmFj
a2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAg
ICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1
ZTsKLQotICAgIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlIHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgotICAg
IGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsKLSAg
ICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+c2l6ZSgpKTsKLSAgICAv
LyBTZWUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUlt
YWdlKCkKLSAgICBBU1NFUlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVp
Z2h0KCkpKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkpOwotICAgIGJh
Y2tpbmdTdG9yZS0+dXBkYXRlVGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBzdXJmYWNlLCBy
ZWN0LmxvY2F0aW9uKCkpOwotCi0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJz
LmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjbGVhcklt
YWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsK
LSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBJbWFn
ZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7
Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+
dmFsdWU7Ci0gICAgYmFja2luZ1N0b3JlLT5yZW1vdmVBbGxUaWxlcygpOwotICAgIG1fYmFja2lu
Z1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBM
YXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGlt
YWdlSUQpKTsKLQotICAgIC8vIFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVy
cyBhIGRhbmdsaW5nIHBvaW50ZXIuCi0gICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBwZW5k
KG1faW1hZ2VCYWNraW5ncy50YWtlKGltYWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIGlmIChpbWFnZUlEID09IElu
dmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250
ZW50c1RvTWVkaWEoMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgSW1hZ2VCYWNraW5n
TWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIEFT
U0VSVChpdCAhPSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50
c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKQotewotICAgIG1fcmVsZWFzZWRJ
bWFnZUJhY2tpbmdzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1p
dFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCkKLXsKLSAgICBIYXNoU2V0PFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVz
V2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNv
bW1pdFRpbGVPcGVyYXRpb25zKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2JhY2tp
bmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5nZXMoKQotewotICAgIG1fcmVuZGVyZWRDb250ZW50c1Nj
cm9sbFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwot
Ci0gICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNh
ZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgotICAgIHNl
dEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOwotCi0gICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9z
aXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7Ci0gICAgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9w
ZXJhdGlvbnMoKTsKLSAgICByZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOwot
Ci0gICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNj
cmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KLSAgICBk
aXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZy
YW1lLCB0aGlzKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFt
ZSgpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+cmVuZGVyTmV4dEZy
YW1lKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXllcigpCi17
Ci0gICAgaWYgKG1fcm9vdExheWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZhY3RvcnkgKi8sIHRoaXMpOwotICAgIG1f
cm9vdExheWVyLT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0
RHJhd3NDb250ZW50KGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxv
YXRQb2ludDNEKDAsIDAsIDApKTsKLQotICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3Qg
aGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290
TGF5ZXItPnNldFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7Ci0KLSAgICBBU1NFUlQobV90ZXh0
dXJlTWFwcGVyKTsKLSAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSkt
PnNldFRleHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLX0KLQotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6c3luY1JlbW90ZUNvbnRlbnQoKQotewotICAgIC8vIFdlIGVucXVldWUg
bWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhlbSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBh
biBhY3RpdmUgR0wgY29udGV4dC4KLSAgICBlbnN1cmVSb290TGF5ZXIoKTsKLQotICAgIFZlY3Rv
cjxGdW5jdGlvbjx2b2lkKCk+ID4gcmVuZGVyUXVldWU7Ci0gICAgYm9vbCBjYWxsZWRPbk1haW5U
aHJlYWQgPSBXVEY6OmlzTWFpblRocmVhZCgpOwotICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFk
KQotICAgICAgICBtX3JlbmRlclF1ZXVlTXV0ZXgubG9jaygpOwotICAgIHJlbmRlclF1ZXVlLnN3
YXAobV9yZW5kZXJRdWV1ZSk7Ci0gICAgaWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCi0gICAgICAg
IG1fcmVuZGVyUXVldWVNdXRleC51bmxvY2soKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVuZGVyUXVldWUuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlbmRlclF1ZXVlW2ldKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAgIG1f
aW1hZ2VCYWNraW5ncy5jbGVhcigpOwotICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFy
KCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jl
cy5jbGVhcigpOwotI2VuZGlmCi0gICAgbV9zdXJmYWNlcy5jbGVhcigpOwotCi0gICAgbV9yb290
TGF5ZXIuY2xlYXIoKTsKLSAgICBtX3Jvb3RMYXllcklEID0gSW52YWxpZENvb3JkaW5hdGVkTGF5
ZXJJRDsKLSAgICBtX2xheWVycy5jbGVhcigpOwotICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsK
LSAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXMuY2xlYXIo
KTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLQotICAg
IHNldEFjdGl2ZShmYWxzZSk7Ci0gICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJU
cmVlUmVuZGVyZXI6OnB1cmdlQmFja2luZ1N0b3JlcywgdGhpcykpOwotfQotCi12b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQotewotICAgIGlmIChtX2NsaWVudCkK
LSAgICAgICAgbV9jbGllbnQtPnB1cmdlQmFja2luZ1N0b3JlcygpOwotfQotCi12b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBj
b25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBHcmFwaGlj
c0xheWVyVGV4dHVyZU1hcHBlciogbGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KGxheWVyQnlJRChpZCkpOwotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1h
dGlvbnMoKS5hdChpKS5rZXlmcmFtZXMoKTsKLSAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0
eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRGaWx0ZXIpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2op
IHsKLSAgICAgICAgICAgIGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkp
KTsKLSAgICAgICAgICAgIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKCpmaWx0ZXJW
YWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLSAgICBsYXllci0+c2V0
QW5pbWF0aW9ucyhhbmltYXRpb25zKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0
QW5pbWF0aW9uc0xvY2tlZChib29sIGxvY2tlZCkKLXsKLSAgICBtX2FuaW1hdGlvbnNMb2NrZWQg
PSBsb2NrZWQ7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCi17Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2NsaWVudCA9IDA7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OmFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKLXsKLSAgICBpZiAoIW1faXNBY3RpdmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVyUXVl
dWVNdXRleCk7Ci0gICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOwotfQotCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1f
aXNBY3RpdmUgPT0gYWN0aXZlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBIYXZlIHRvIGNs
ZWFyIHJlbmRlciBxdWV1ZSBpbiBib3RoIGNhc2VzLgotICAgIC8vIElmIHRoZXJlIGFyZSBzb21l
IHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFjdGl2YXRpb24gdGhlbiB0aG9zZSB1cGRhdGVzIGFy
ZSBmcm9tIHByZXZpb3VzIGluc3RhbmNlIG9mIHBhaW50IG5vZGUKLSAgICAvLyBhbmQgY2Fubm90
IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCi0gICAgbV9yZW5kZXJR
dWV1ZS5jbGVhcigpOwotICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7Ci0gICAgaWYgKG1faXNBY3Rp
dmUpCi0gICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVy
OjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKLXsKLSAgICBt
X2JhY2tncm91bmRDb2xvciA9IGNvbG9yOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVS
ZW5kZXJlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTM4MWUzM2M2Y2VlYTFi
ZWY3Y2FkNTZiNGJlNWU4ZTgxODJmZGIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBo
aWNzL0xheWVyVHJlZVJlbmRlcmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAot
LyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBMYXllclRyZWVSZW5kZXJlcl9oCi0jZGVmaW5l
IExheWVyVHJlZVJlbmRlcmVyX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNp
bmNsdWRlICJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5o
IgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVj
dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVu
TG9vcC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGlu
Z1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW07Ci1jbGFzcyBDdXN0b21GaWx0ZXJQcm9n
cmFtSW5mbzsKLWNsYXNzIFRleHR1cmVNYXBwZXJMYXllcjsKLX0KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOwotY2xhc3MgQ29vcmRpbmF0ZWRM
YXllckluZm87Ci0KLWNsYXNzIExheWVyVHJlZVJlbmRlcmVyQ2xpZW50IHsKLXB1YmxpYzoKLSNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgdmlydHVhbCB2b2lkIGFuaW1h
dGlvbkZyYW1lUmVhZHkoKSA9IDA7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmll
d3BvcnQoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCkgPSAwOwotfTsKLQotY2xhc3MgTGF5
ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVlUmVu
ZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0g
ICAgc3RydWN0IFRpbGVVcGRhdGUgewotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJl
Y3Q7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHVpbnQzMl90
IGF0bGFzSUQ7Ci0gICAgICAgIFdlYkNvcmU6OkludFBvaW50IG9mZnNldDsKLSAgICAgICAgVGls
ZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHRpbGUsIHVpbnQzMl90IGF0bGFzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbmV3
T2Zmc2V0KQotICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNvdXJjZSkKLSAgICAgICAgICAgICwg
dGlsZVJlY3QodGlsZSkKLSAgICAgICAgICAgICwgYXRsYXNJRChhdGxhcykKLSAgICAgICAgICAg
ICwgb2Zmc2V0KG5ld09mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLSAgICBl
eHBsaWNpdCBMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVSZW5kZXJlckNsaWVudCopOwotICAg
IHZpcnR1YWwgfkxheWVyVHJlZVJlbmRlcmVyKCk7Ci0gICAgdm9pZCBwYWludFRvQ3VycmVudEdM
Q29udGV4dChjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdz
ID0gMCk7Ci0gICAgdm9pZCBwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQpOwotICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKLSNpZiBVU0UoR1JBUEhJQ1Nf
U1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4p
OwotICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250
QnVmZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSNl
bmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBp
bnQgdmFsdWUpOwotCi0gICAgdm9pZCBkZXRhY2goKTsKLSAgICB2b2lkIGFwcGVuZFVwZGF0ZShj
b25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0KLSAgICAvLyBUaGUgcGFpbnRpbmcgdGhyZWFkIG11
c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gdXNlIGJlbG93IHR3byBtZXRob2RzLCBiZWNhdXNl
IHR3byBtZXRob2RzIGFjY2VzcyBtZW1iZXJzIHRoYXQgdGhlIG1haW4gdGhyZWFkIG1hbmFnZXMu
IFNlZSBtX2NsaWVudC4KLSAgICAvLyBDdXJyZW50bHksIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBh
aW50Tm9kZSgpIGxvY2tzIHRoZSBtYWluIHRocmVhZCBiZWZvcmUgY2FsbGluZyBib3RoIG1ldGhv
ZHMuCi0gICAgdm9pZCBwdXJnZUdMUmVzb3VyY2VzKCk7Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9v
bCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXll
cklEPiYpOwotICAgIHZvaWQgZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwot
ICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBj
b25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpCi0gICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25z
dCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNy
ZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0
ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQg
aWQpOwotI2VuZGlmCi0KLSAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29y
ZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwotICAg
IHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZFN1cmZhY2U+KTsKLSAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0
bGFzSUQpOwotICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUlt
YWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkU3VyZmFjZT4pOwotICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGlu
YXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0g
ICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2dyb3Vu
ZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNvbG9yJik7Ci0gICAgdm9pZCBzZXREcmF3c0JhY2tncm91
bmQoYm9vbCBlbmFibGUpIHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KLQotI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRp
b25GcmFtZSgpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciogbGF5ZXJCeUlEKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX2xheWVycy5jb250YWlucyhpZCkpOwotICAgICAgICBBU1NFUlQoaWQgIT0gSW52YWxpZENv
b3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAgICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOwotICAg
IH0KLSAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBnZXRMYXllckJ5SURJZkV4aXN0cyhDb29y
ZGluYXRlZExheWVySUQpOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigp
IHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9Ci0KLSAgICB2b2lkIHN5bmNSZW1vdGVDb250
ZW50KCk7Ci0gICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7Ci0KLSAgICAv
LyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQuCi0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIGRvdWJsZSkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVx
dWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBwYWludENvbnRlbnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYpIE9WRVJSSURFIHsgfQotCi0gICAgdm9pZCBkaXNwYXRjaE9u
TWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1cGRhdGVWaWV3
cG9ydCgpOwotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIGFu
aW1hdGlvbkZyYW1lUmVhZHkoKTsKLSNlbmRpZgotICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7
Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLQotICAgIHZvaWQgY3JlYXRlTGF5ZXIo
Q29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5
ZXJJRCk7Ci0KLSAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgcmVtb3Zl
UmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKLSAgICB2b2lkIGVuc3VyZVJvb3RMYXll
cigpOwotICAgIHZvaWQgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKLQot
ICAgIHZvaWQgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOwotICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllciopOwotICAgIHZvaWQgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6
R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNp
emUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotCi0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1f
Y29udGVudHNTaXplOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1Jl
Y3Q7Ci0KLSAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4g
dGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQotICAgIFZlY3RvcjxGdW5jdGlv
bjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKLSAgICBNdXRleCBtX3JlbmRlclF1ZXVlTXV0ZXg7
Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwot
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNr
aW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlPiA+IG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzOwotCi0gICAgdHlwZWRlZiBIYXNo
TWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU+ID4gQmFja2luZ1N0b3JlTWFwOwotICAgIEJhY2tpbmdTdG9yZU1hcCBtX2JhY2tpbmdTdG9y
ZXM7Ci0KLSAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2Jh
Y2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnM7Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFD
RSkKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBSZWZQdHI8V2ViQ29y
ZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9y
ZU1hcDsKLSAgICBTdXJmYWNlQmFja2luZ1N0b3JlTWFwIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXM7
Ci0jZW5kaWYKLQotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCAvKiBhdGxhc0lEICovLCBS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiA+IFN1cmZhY2VNYXA7Ci0gICAgU3VyZmFjZU1hcCBt
X3N1cmZhY2VzOwotCi0gICAgLy8gQmVsb3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9u
bHkgdGhlIG1haW4gdGhyZWFkLiBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFp
biB0aHJlYWQgdG8gYWNjZXNzIGJvdGggbWVtYmVycy4KLSAgICBMYXllclRyZWVSZW5kZXJlckNs
aWVudCogbV9jbGllbnQ7Ci0gICAgYm9vbCBtX2lzQWN0aXZlOwotCi0gICAgT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENv
b3JkaW5hdGVkTGF5ZXJJRCwgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+ID4gTGF5ZXJN
YXA7Ci0gICAgTGF5ZXJNYXAgbV9sYXllcnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5h
dGVkTGF5ZXJJRCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllcio+IExheWVyUmF3UHRyTWFwOwotICAg
IExheWVyUmF3UHRyTWFwIG1fZml4ZWRMYXllcnM7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIG1f
cm9vdExheWVySUQ7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBtX3JlbmRlcmVkQ29udGVudHNT
Y3JvbGxQb3NpdGlvbjsKLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fcGVuZGluZ1JlbmRlcmVk
Q29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKLSNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgYm9vbCBtX2FuaW1hdGlvbkZy
YW1lUmVxdWVzdGVkOwotI2VuZGlmCi0gICAgV2ViQ29yZTo6Q29sb3IgbV9iYWNrZ3JvdW5kQ29s
b3I7Ci0gICAgYm9vbCBtX3NldERyYXdzQmFja2dyb3VuZDsKLQotI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8V2ViQ29yZTo6Q3VzdG9tRmls
dGVyUHJvZ3JhbT4gPiBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOwotICAgIEN1c3RvbUZpbHRlclBy
b2dyYW1NYXAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKLSNlbmRpZgotfTsKLQotfTsKLQotI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIExheWVyVHJlZVJl
bmRlcmVyX2gKLQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1Bh
Z2VDbGllbnRCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVu
dEJhc2UuY3BwCmluZGV4IDJlZmRiZDBlMTM5ZWIwMDg4NWY5MWFlZjliMjhjOTAzYmZkYzFjM2Qu
LjUxMTU0YmM4MzdjOWZhYzM0OTViYjQzNmQ2NGE5YTU5ZTNhMGNmZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJFd2tWaWV3
LmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCi0jaW5jbHVkZSAiTGF5ZXJU
cmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3Bv
cnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcAppbmRleCBmMTFkMDhkZDA5OWM4M2IwZWM4YjdjNWFl
ZDA5ZWQ2NGFkY2NlMTZjLi5lNzAzOTk1ODc3OTc0MjAyYWViNDdhYzk0YzE0OTgwM2I5ZWIyMDE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENv
bnRyb2xsZXJDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiRXdr
Vmlldy5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUGFnZVZp
ZXdwb3J0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9UZXh0dXJlTWFwcGVyU2NlbmUuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTU2LDcgKzU2LDcgQEAgRHJhd2luZ0FyZWFQcm94eSogUGFnZVZpZXdw
b3J0Q29udHJvbGxlckNsaWVudEVmbDo6ZHJhd2luZ0FyZWEoKSBjb25zdAogCiB2b2lkIFBhZ2VW
aWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmw6OnNldFJlbmRlcmVyQWN0aXZlKGJvb2wgYWN0aXZl
KQogewotICAgIGRyYXdpbmdBcmVhKCktPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCkt
PmxheWVyVHJlZVJlbmRlcmVyKCktPnNldEFjdGl2ZShhY3RpdmUpOworICAgIGRyYXdpbmdBcmVh
KCktPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPnRleHR1cmVNYXBwZXJTY2VuZSgp
LT5zZXRBY3RpdmUoYWN0aXZlKTsKIH0KIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xp
ZW50RWZsOjp1cGRhdGVWaWV3cG9ydFNpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcAppbmRleCBmNTM2YzQyMTc2NWYyYjY2NjZjNjMwZDMx
YmEzMzQyOGE5NTY5NzI5Li5jZTczMzM3YjM2NjAzYWI4ZGYyNTc4YWY4NjQxN2EwZTA5MmQ2MTlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2Rl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNw
cApAQCAtMjEsMTEgKzIxLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRX
ZWJQYWdlU0dOb2RlLmgiCiAKLSNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1
ZGUgPFF0R3VpL1FQb2x5Z29uRj4KICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0l0ZW0+CiAjaW5j
bHVkZSA8UXRRdWljay9RUXVpY2tXaW5kb3c+CiAjaW5jbHVkZSA8UXRRdWljay9RU0dTaW1wbGVS
ZWN0Tm9kZT4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJTY2VuZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDxwcml2YXRlL3Fz
Z3JlbmRlcm5vZGVfcC5oPgogCkBAIC0zNSwxMCArMzUsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIENvbnRlbnRzU0dOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogcHVibGlj
OgotICAgIENvbnRlbnRzU0dOb2RlKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRl
cmVyKQotICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisgICAgQ29udGVudHNTR05vZGUo
UGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2NlbmU+IHNjZW5lKQorICAgICAgICA6IG1fdGV4dHVy
ZU1hcHBlclNjZW5lKHNjZW5lKQogICAgIHsKLSAgICAgICAgbGF5ZXJUcmVlUmVuZGVyZXIoKS0+
c2V0QWN0aXZlKHRydWUpOworICAgICAgICB0ZXh0dXJlTWFwcGVyU2NlbmUoKS0+c2V0QWN0aXZl
KHRydWUpOwogICAgIH0KIAogICAgIHZpcnR1YWwgU3RhdGVGbGFncyBjaGFuZ2VkU3RhdGVzKCkK
QEAgLTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbWlycm9yZWQgPSBwcm9q
ZWN0aW9uICYmICgqcHJvamVjdGlvbikoMCwgMCkgKiAoKnByb2plY3Rpb24pKDEsIDEpIC0gKCpw
cm9qZWN0aW9uKSgwLCAxKSAqICgqcHJvamVjdGlvbikoMSwgMCkgPiAwOwogCiAgICAgICAgIC8v
IEZJWE1FOiBTdXBwb3J0IG5vbi1yZWN0YW5ndWxhciBjbGlwcGluZ3MuCi0gICAgICAgIGxheWVy
VHJlZVJlbmRlcmVyKCktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHJlbmRlck1hdHJpeCwgaW5o
ZXJpdGVkT3BhY2l0eSgpLCBjbGlwUmVjdCgpLCBtaXJyb3JlZCA/IFRleHR1cmVNYXBwZXI6OlBh
aW50aW5nTWlycm9yZWQgOiAwKTsKKyAgICAgICAgdGV4dHVyZU1hcHBlclNjZW5lKCktPnBhaW50
VG9DdXJyZW50R0xDb250ZXh0KHJlbmRlck1hdHJpeCwgaW5oZXJpdGVkT3BhY2l0eSgpLCBjbGlw
UmVjdCgpLCBtaXJyb3JlZCA/IFRleHR1cmVNYXBwZXI6OlBhaW50aW5nTWlycm9yZWQgOiAwKTsK
ICAgICB9CiAKICAgICB+Q29udGVudHNTR05vZGUoKQogICAgIHsKLSAgICAgICAgbGF5ZXJUcmVl
UmVuZGVyZXIoKS0+cHVyZ2VHTFJlc291cmNlcygpOworICAgICAgICB0ZXh0dXJlTWFwcGVyU2Nl
bmUoKS0+cHVyZ2VHTFJlc291cmNlcygpOwogICAgIH0KIAogICAgIGNvbnN0IFF0V2ViUGFnZVNH
Tm9kZSogcGFnZU5vZGUoKSBjb25zdApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBwYXJlbnQ7CiAgICAgfQogCi0gICAgTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJl
ZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQorICAgIFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJTY2VuZSogdGV4dHVyZU1hcHBlclNjZW5lKCkgY29uc3QgeyByZXR1
cm4gbV90ZXh0dXJlTWFwcGVyU2NlbmUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBRUmVjdEYg
Y2xpcFJlY3QoKSBjb25zdApAQCAtMTI2LDcgKzEyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiByZXN1bHRSZWN0OwogICAgIH0KIAotICAgIFJlZlB0cjxMYXllclRyZWVSZW5kZXJlcj4g
bV9yZW5kZXJlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclNjZW5lPiBtX3Rl
eHR1cmVNYXBwZXJTY2VuZTsKIH07CiAKIFF0V2ViUGFnZVNHTm9kZTo6UXRXZWJQYWdlU0dOb2Rl
KCkKQEAgLTE1MCwxMyArMTUwLDEzIEBAIHZvaWQgUXRXZWJQYWdlU0dOb2RlOjpzZXRTY2FsZShm
bG9hdCBzY2FsZSkKICAgICBzZXRNYXRyaXgobWF0cml4KTsKIH0KIAotdm9pZCBRdFdlYlBhZ2VT
R05vZGU6OnNldFJlbmRlcmVyKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVy
KQordm9pZCBRdFdlYlBhZ2VTR05vZGU6OnNldFRleHR1cmVNYXBwZXJTY2VuZShQYXNzUmVmUHRy
PFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTY2VuZT4gdGV4dHVyZU1hcHBlclNjZW5lKQogewotICAg
IGlmIChtX2NvbnRlbnRzTm9kZSAmJiBtX2NvbnRlbnRzTm9kZS0+bGF5ZXJUcmVlUmVuZGVyZXIo
KSA9PSByZW5kZXJlcikKKyAgICBpZiAobV9jb250ZW50c05vZGUgJiYgbV9jb250ZW50c05vZGUt
PnRleHR1cmVNYXBwZXJTY2VuZSgpID09IHRleHR1cmVNYXBwZXJTY2VuZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgZGVsZXRlIG1fY29udGVudHNOb2RlOwotICAgIG1fY29udGVudHNOb2RlID0g
bmV3IENvbnRlbnRzU0dOb2RlKHJlbmRlcmVyKTsKKyAgICBtX2NvbnRlbnRzTm9kZSA9IG5ldyBD
b250ZW50c1NHTm9kZSh0ZXh0dXJlTWFwcGVyU2NlbmUpOwogICAgIC8vIFRoaXMgc2V0cyB0aGUg
cGFyZW50IG5vZGUgb2YgdGhlIGNvbnRlbnQgdG8gUXRXZWJQYWdlU0dOb2RlLgogICAgIGFwcGVu
ZENoaWxkTm9kZShtX2NvbnRlbnRzTm9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgKaW5kZXggMWJjYzI4ZTQzOTkwMmY1OWZkYzg0OWQ0MDc2
ODZlMTUwMzgxODhiMi4uMzgwY2ExNGYyNmViNjRiNTdmZTE0OGE4Mzc0ZmIxZjhhN2RmZTE5YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaApAQCAt
MjksMTcgKzI5LDIwIEBAIGNsYXNzIFFRdWlja0l0ZW07CiBjbGFzcyBRU0dTaW1wbGVSZWN0Tm9k
ZTsKIFFUX0VORF9OQU1FU1BBQ0UKIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGV4dHVy
ZU1hcHBlclNjZW5lOworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29udGVudHNT
R05vZGU7Ci1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKIAogY2xhc3MgUXRXZWJQYWdlU0dOb2Rl
IDogcHVibGljIFFTR1RyYW5zZm9ybU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUXRXZWJQ
YWdlU0dOb2RlKCk7CiAgICAgICAgIHZvaWQgc2V0QmFja2dyb3VuZChjb25zdCBRUmVjdEYmLCBj
b25zdCBRQ29sb3ImKTsKICAgICAgICAgdm9pZCBzZXRTY2FsZShmbG9hdCk7Ci0gICAgICAgIHZv
aWQgc2V0UmVuZGVyZXIoUGFzc1JlZlB0cjxMYXllclRyZWVSZW5kZXJlcj4pOworICAgICAgICB2
b2lkIHNldFRleHR1cmVNYXBwZXJTY2VuZShQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJTY2VuZT4pOwogICAgICAgICBxcmVhbCBkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QgeyByZXR1
cm4gbV9kZXZpY2VQaXhlbFJhdGlvOyB9CiAgICAgICAgIHZvaWQgc2V0RGV2aWNlUGl4ZWxSYXRp
byhxcmVhbCBkZXZpY2VQaXhlbFJhdGlvKSB7IG1fZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBp
eGVsUmF0aW87IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JlZmNkYWM4NTIwMTJjZmU5M2M4N2E1
YTkzMjFhODFkNzUzNTg0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9BcmVhQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkFyZWFB
bGxvY2F0b3IuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUFyZWFBbGxvY2F0b3I6OkFyZWFB
bGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fc2l6ZShzaXpl
KQotICAgICwgbV9taW5BbGxvYygxLCAxKQotICAgICwgbV9tYXJnaW4oMCwgMCkKLXsKLX0KLQot
QXJlYUFsbG9jYXRvcjo6fkFyZWFBbGxvY2F0b3IoKQotewotfQotCi12b2lkIEFyZWFBbGxvY2F0
b3I6OmV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSA9
IG1fc2l6ZS5leHBhbmRlZFRvKHNpemUpOwotfQotCi12b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFu
ZEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgbV9zaXplICs9IHNpemU7
Ci19Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JikKLXsKLX0KLQotaW50IEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBBcmVhQWxsb2NhdG9yOjpyb3VuZEFsbG9j
YXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAgICBpbnQgd2lk
dGggPSBzaXplLndpZHRoKCkgKyBtX21hcmdpbi53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBz
aXplLmhlaWdodCgpICsgbV9tYXJnaW4uaGVpZ2h0KCk7Ci0gICAgaW50IGV4dHJhID0gd2lkdGgg
JSBtX21pbkFsbG9jLndpZHRoKCk7Ci0gICAgaWYgKGV4dHJhKQotICAgICAgICB3aWR0aCArPSBt
X21pbkFsbG9jLndpZHRoKCkgLSBleHRyYTsKLSAgICBleHRyYSA9IGhlaWdodCAlIG1fbWluQWxs
b2MuaGVpZ2h0KCk7Ci0gICAgaWYgKGV4dHJhKQotICAgICAgICBoZWlnaHQgKz0gbV9taW5BbGxv
Yy5oZWlnaHQoKSAtIGV4dHJhOwotCi0gICAgcmV0dXJuIFdlYkNvcmU6OkludFNpemUod2lkdGgs
IGhlaWdodCk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9jYXRv
cihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotICAgIDogQXJlYUFsbG9jYXRvcihXZWJD
b3JlOjpuZXh0UG93ZXJPZlR3byhzaXplKSkKLXsKLSAgICBtX3Jvb3QgPSBuZXcgTm9kZSgpOwot
ICAgIG1fcm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKLSAg
ICBtX3Jvb3QtPnBhcmVudCA9IDA7Ci0gICAgbV9yb290LT5sZWZ0ID0gMDsKLSAgICBtX3Jvb3Qt
PnJpZ2h0ID0gMDsKLSAgICBtX25vZGVDb3VudCA9IDE7Ci0gICAgc2V0TWluaW11bUFsbG9jYXRp
b24oV2ViQ29yZTo6SW50U2l6ZSg4LCA4KSk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjp+
R2VuZXJhbEFyZWFBbGxvY2F0b3IoKQotewotICAgIGZyZWVOb2RlKG1fcm9vdCk7Ci19Ci0KLXZv
aWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmZyZWVOb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYg
KG5vZGUpIHsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7Ci0gICAgICAgIGZyZWVOb2Rl
KG5vZGUtPnJpZ2h0KTsKLSAgICB9Ci0gICAgZGVsZXRlIG5vZGU7Ci19Ci0KLXZvaWQgR2VuZXJh
bEFyZWFBbGxvY2F0b3I6OmV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewot
ICAgIEFyZWFBbGxvY2F0b3I6OmV4cGFuZChXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhzaXplKSk7
Ci0KLSAgICBpZiAobV9yb290LT5yZWN0LnNpemUoKSA9PSBtX3NpemUpCi0gICAgICAgIHJldHVy
bjsgLy8gTm8gY2hhbmdlLgotCi0gICAgaWYgKCFtX3Jvb3QtPmxlZnQgJiYgbV9yb290LT5sYXJn
ZXN0RnJlZS53aWR0aCgpID4gMCkgewotICAgICAgICAvLyBObyBhbGxvY2F0aW9ucyBoYXZlIG9j
Y3VycmVkLCBzbyBqdXN0IGFkanVzdCB0aGUgcm9vdCBzaXplLgotICAgICAgICBtX3Jvb3QtPnJl
Y3QgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCkpOwotICAgICAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXplOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gQWRkIGV4dHJhIG5vZGVzIGFib3ZlIHRoZSBjdXJyZW50IHJv
b3QgdG8gZXhwYW5kIHRoZSB0cmVlLgotICAgIE5vZGUqIG9sZFJvb3QgPSBtX3Jvb3Q7Ci0gICAg
U3BsaXQgc3BsaXQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpID49IG1fc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICBlbHNlCi0gICAgICAgIHNwbGl0ID0gU3Bs
aXRPblk7Ci0KLSAgICB3aGlsZSAobV9yb290LT5yZWN0LnNpemUoKSAhPSBtX3NpemUpIHsKLSAg
ICAgICAgaWYgKG1fcm9vdC0+cmVjdC53aWR0aCgpID09IG1fc2l6ZS53aWR0aCgpKQotICAgICAg
ICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgZWxzZSBpZiAobV9yb290LT5yZWN0Lmhl
aWdodCgpID09IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7
Ci0gICAgICAgIE5vZGUqIHBhcmVudCA9IG5ldyBOb2RlKCk7Ci0gICAgICAgIE5vZGUqIHJpZ2h0
ID0gbmV3IE5vZGUoKTsKLSAgICAgICAgbV9ub2RlQ291bnQgKz0gMjsKLSAgICAgICAgbV9yb290
LT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHBhcmVudC0+cGFyZW50ID0gMDsKLSAgICAgICAg
cGFyZW50LT5sZWZ0ID0gbV9yb290OwotICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gcmlnaHQ7Ci0g
ICAgICAgIHBhcmVudC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Quc2l6ZSgpOwotICAgICAg
ICByaWdodC0+cGFyZW50ID0gcGFyZW50OwotICAgICAgICByaWdodC0+bGVmdCA9IDA7Ci0gICAg
ICAgIHJpZ2h0LT5yaWdodCA9IDA7Ci0gICAgICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IG1fcm9v
dC0+cmVjdC5zaXplKCk7Ci0gICAgICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgewotICAgICAg
ICAgICAgcGFyZW50LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBt
X3Jvb3QtPnJlY3QueSgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpICog
MiwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2Vi
Q29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpICsgbV9yb290LT5yZWN0LndpZHRoKCksIG1f
cm9vdC0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1f
cm9vdC0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJl
bnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVj
dC55KCksCi0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVj
dC5oZWlnaHQoKSAqIDIpOwotICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRS
ZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCkgKyBtX3Jvb3QtPnJlY3Qud2lk
dGgoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgfQotICAgICAgICBzcGxpdCA9IChzcGxpdCA9PSBTcGxpdE9u
WCA/IFNwbGl0T25ZIDogU3BsaXRPblgpOwotICAgICAgICBtX3Jvb3QgPSBwYXJlbnQ7Ci0gICAg
fQotICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG9sZFJvb3QpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgZml0c1dpdGhpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplMSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2l6ZTIpCi17Ci0gICAgcmV0dXJuIHNpemUxLndpZHRoKCkgPD0gc2l6ZTIu
d2lkdGgoKSAmJiBzaXplMS5oZWlnaHQoKSA8PSBzaXplMi5oZWlnaHQoKTsKLX0KLQotV2ViQ29y
ZTo6SW50UmVjdCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kZWQgPSByb3VuZEFs
bG9jYXRpb24oc2l6ZSk7Ci0gICAgcm91bmRlZCA9IFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHJv
dW5kZWQpOwotICAgIGlmIChyb3VuZGVkLndpZHRoKCkgPD0gMCB8fCByb3VuZGVkLndpZHRoKCkg
PiBtX3NpemUud2lkdGgoKQotICAgICAgICB8fCByb3VuZGVkLmhlaWdodCgpIDw9IDAgfHwgcm91
bmRlZC5oZWlnaHQoKSA+IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkludFJlY3QoKTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9t
Tm9kZShyb3VuZGVkLCBtX3Jvb3QpOwotICAgIGlmIChwb2ludC54KCkgPj0gMCkKLSAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkludFJlY3QocG9pbnQsIHNpemUpOwotICAgIHJldHVybiBXZWJDb3Jl
OjpJbnRSZWN0KCk7Ci19Ci0KLVdlYkNvcmU6OkludFBvaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9y
OjphbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIE5vZGUqIG5v
ZGUpCi17Ci0gICAgLy8gRmluZCB0aGUgYmVzdCBub2RlIHRvIGluc2VydCBpbnRvLCB3aGljaCBz
aG91bGQgYmUKLSAgICAvLyBhIG5vZGUgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHVudXNlZCBz
cGFjZSB0aGF0IGlzCi0gICAgLy8gYmlnIGVub3VnaCB0byBjb250YWluIHRoZSByZXF1ZXN0ZWQg
c2l6ZS4KLSAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAvLyBHbyBkb3duIGEgbGV2ZWwgYW5k
IGRldGVybWluZSBpZiB0aGUgbGVmdCBvciByaWdodAotICAgICAgICAvLyBzdWItdHJlZSBjb250
YWlucyB0aGUgYmVzdCBjaGFuY2Ugb2YgYWxsb2NhdGlvbi4KLSAgICAgICAgTm9kZSogbGVmdCA9
IG5vZGUtPmxlZnQ7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+cmlnaHQ7Ci0gICAgICAg
IGlmIChsZWZ0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgbGVmdC0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAg
ICAgICAgICBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCkgPCByaWdo
dC0+bGFyZ2VzdEZyZWUud2lkdGgoKQotICAgICAgICAgICAgICAgICAgICB8fCBsZWZ0LT5sYXJn
ZXN0RnJlZS5oZWlnaHQoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgbGFyZ2VzdEZyZWUgdmFsdWVzIG1heSBiZSBhIGxpdHRsZSBv
dmVyc2l6ZWQsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRyeSB0aGUgbGVmdCBzdWItdHJl
ZSBhbmQgdGhlbiB0aGUgcmlnaHQgc3ViLXRyZWUuCi0gICAgICAgICAgICAgICAgICAgIFdlYkNv
cmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShzaXplLCBsZWZ0KTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHBvaW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVGcm9t
Tm9kZShzaXplLCByaWdodCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5v
ZGUgPSByaWdodDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG5vZGUgPSBs
ZWZ0OwotICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQt
Pmxhcmdlc3RGcmVlKSkKLSAgICAgICAgICAgIG5vZGUgPSByaWdodDsKLSAgICAgICAgZWxzZSBp
ZiAobGVmdCB8fCByaWdodCkgewotICAgICAgICAgICAgLy8gTmVpdGhlciBzdWItbm9kZSBoYXMg
ZW5vdWdoIHNwYWNlIHRvIGFsbG9jYXRlIGZyb20uCi0gICAgICAgICAgICByZXR1cm4gV2ViQ29y
ZTo6SW50UG9pbnQoLTEsIC0xKTsKLSAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKHNpemUs
IG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBzcGxp
dCB0aGlzIG5vZGUgaW50byBzbWFsbGVyIHBpZWNlcz8KLSAgICAgICAgICAgIFNwbGl0IHNwbGl0
OwotICAgICAgICAgICAgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndpZHRo
KCkgKiAyLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAg
ICAgICAgICAgIC8vIFNwbGl0IGluIGVpdGhlciBkaXJlY3Rpb246IGNob29zZSB0aGUgaW52ZXJz
ZSBvZgotICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgbm9kZSdzIHNwbGl0IGRpcmVjdGlv
biB0byB0cnkgdG8gYmFsYW5jZQotICAgICAgICAgICAgICAgIC8vIG91dCB0aGUgd2FzdGVkIHNw
YWNlIGFzIGZ1cnRoZXIgc3ViZGl2aXNpb25zIGhhcHBlbi4KLSAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+cGFyZW50Ci0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnBhcmVudC0+bGVmdC0+
cmVjdC54KCkgPT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC54KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+
cGFyZW50KQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPnJlY3Qud2lkdGgoKSA+PSBub2RlLT5yZWN0LmhlaWdodCgp
KQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lkdGgoKSAqIDIs
IHNpemUuaGVpZ2h0KCkpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAgICAv
LyBTcGxpdCBhbG9uZyB0aGUgWCBkaXJlY3Rpb24uCi0gICAgICAgICAgICAgICAgc3BsaXQgPSBT
cGxpdE9uWDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRT
aXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkp
IHsKLSAgICAgICAgICAgICAgICAvLyBTcGxpdCBhbG9uZyB0aGUgWSBkaXJlY3Rpb24uCi0gICAg
ICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgLy8gQ2Fubm90IHNwbGl0IGZ1cnRoZXIgLSBhbGxvY2F0ZSB0aGlzIG5vZGUu
Ci0gICAgICAgICAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXplKDAs
IDApOwotICAgICAgICAgICAgICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOwotICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlLT5yZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIFNwbGl0IHRoZSBub2RlLCB0aGVuIGdvIGFyb3VuZCBhZ2FpbiB1c2luZyB0
aGUgbGVmdCBzdWItdHJlZS4KLSAgICAgICAgICAgIG5vZGUgPSBzcGxpdE5vZGUobm9kZSwgc3Bs
aXQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2Fubm90IHBvc3NpYmx5IGZp
dCBpbnRvIHRoaXMgbm9kZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwotfQotCi1HZW5lcmFsQXJlYUFs
bG9jYXRvcjo6Tm9kZSogR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnNwbGl0Tm9kZQotICAgIChOb2Rl
KiBub2RlLCBTcGxpdCBzcGxpdCkKLXsKLSAgICBOb2RlKiBsZWZ0ID0gbmV3IE5vZGUoKTsKLSAg
ICBOb2RlKiByaWdodCA9IG5ldyBOb2RlKCk7Ci0gICAgbV9ub2RlQ291bnQgKz0gMjsKLSAgICBs
ZWZ0LT5wYXJlbnQgPSBub2RlOwotICAgIGxlZnQtPmxlZnQgPSAwOwotICAgIGxlZnQtPnJpZ2h0
ID0gMDsKLSAgICByaWdodC0+cGFyZW50ID0gbm9kZTsKLSAgICByaWdodC0+bGVmdCA9IDA7Ci0g
ICAgcmlnaHQtPnJpZ2h0ID0gMDsKLSAgICBub2RlLT5sZWZ0ID0gbGVmdDsKLSAgICBub2RlLT5y
aWdodCA9IHJpZ2h0OwotCi0gICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAgIGxl
ZnQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0Lnko
KSwKLSAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0
KCkpOwotICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobGVmdC0+cmVjdC5t
YXhYKCksIG5vZGUtPnJlY3QueSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8g
Miwgbm9kZS0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGVmdC0+cmVj
dCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJlY3QueSgpLAotICAg
ICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7Ci0g
ICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbGVm
dC0+cmVjdC5tYXhZKCksCi0gICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUtPnJl
Y3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0KLSAgICBsZWZ0LT5sYXJnZXN0RnJlZSA9IGxlZnQt
PnJlY3Quc2l6ZSgpOwotICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5yZWN0LnNpemUo
KTsKLSAgICBub2RlLT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5sYXJnZXN0RnJlZTsKLSAgICByZXR1
cm4gbGVmdDsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6dXBkYXRlTGFyZ2VzdEZy
ZWUoTm9kZSogbm9kZSkKLXsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5wYXJlbnQpKSB7Ci0g
ICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gV2ViQ29yZTo6SW50U2l6ZSgKLSAgICAgICAgICAg
IHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCksIG5vZGUtPnJpZ2h0LT5s
YXJnZXN0RnJlZS53aWR0aCgpKSwKLSAgICAgICAgICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxh
cmdlc3RGcmVlLmhlaWdodCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpCi0g
ICAgICAgICAgICApOwotICAgIH0KLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6cmVs
ZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIC8vIExvY2F0ZSB0aGUg
bm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLgotICAgIE5vZGUqIG5vZGUg
PSBtX3Jvb3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7
Ci0gICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVm
dC0+cmVjdC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+bGVmdDsK
LSAgICAgICAgZWxzZSBpZiAobm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29udGFp
bnMocG9pbnQpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBlbHNl
IGlmIChub2RlLT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkgb3V0
c2lkZSB0aGUgdHJlZS4KLSAgICB9Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBNYXJrIHRoZSBub2RlIGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRocm91
Z2ggdGhlIHRyZWUKLSAgICAvLyByZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50aWwg
d2UgcmVhY2ggYSBzaWJsaW5nCi0gICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCi0gICAg
bm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKLSAgICB3aGlsZSAobm9kZS0+
cGFyZW50KSB7Ci0gICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgewotICAg
ICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBh
cmVudC0+cmlnaHQtPnJlY3Quc2l6ZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZy
ZWUgIT0gbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OwotICAgICAgICBm
cmVlTm9kZShub2RlLT5sZWZ0KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAg
ICAgICBtX25vZGVDb3VudCAtPSAyOwotICAgICAgICBub2RlLT5sZWZ0ID0gMDsKLSAgICAgICAg
bm9kZS0+cmlnaHQgPSAwOwotICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Qu
c2l6ZSgpOwotICAgIH0KLQotICAgIC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9ycyBo
YXZlIHRoZSBjb3JyZWN0ICJsYXJnZXN0IGZyZWUgc2l6ZSIuCi0gICAgdXBkYXRlTGFyZ2VzdEZy
ZWUobm9kZSk7Ci19Ci0KLWludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25z
dAotewotICAgIHJldHVybiBtX25vZGVDb3VudCAqIHNpemVvZihOb2RlKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0FyZWFBbGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMTY1NmJiOGFlMTAwNjg4YTM0NjYyNmU0ZDMzMzNjNjBiOWU4OTM4Ny4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICoKLSAqLwotCi0jaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAotI2RlZmluZSBBcmVhQWxsb2Nh
dG9yX2gKLQotI2luY2x1ZGUgPEludFBvaW50Lmg+Ci0jaW5jbHVkZSA8SW50UmVjdC5oPgotI2lu
Y2x1ZGUgPEludFNpemUuaD4KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotaW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQot
ewotICAgIC8vIFRoaXMgaXMgYSBmYXN0IHRyaWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBmb3Ig
YW4gaW50ZWdlci4KLSAgICAtLW51bWJlcjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7Ci0g
ICAgbnVtYmVyIHw9IG51bWJlciA+PiAyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsKLSAg
ICBudW1iZXIgfD0gbnVtYmVyID4+IDg7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsKLSAg
ICBudW1iZXIrKzsKLSAgICByZXR1cm4gbnVtYmVyOwotfQotCi1pbmxpbmUgSW50U2l6ZSBuZXh0
UG93ZXJPZlR3byhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIHJldHVybiBJbnRTaXplKG5l
eHRQb3dlck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkp
KTsKLX0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNs
YXNzIEFyZWFBbGxvY2F0b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IEFyZWFBbGxvY2F0b3Io
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgfkFyZWFBbGxvY2F0b3IoKTsK
LQotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbWluQWxsb2M7IH0KLSAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9uKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHNpemUpIHsgbV9taW5BbGxvYyA9IHNpemU7IH0KLQotICAgIFdlYkNvcmU6
OkludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAgICB2b2lkIHNl
dE1hcmdpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBtYXJn
aW47IH0KLQotICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYp
OwotICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi0gICAgdmly
dHVhbCBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwot
Ci0gICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIFdl
YkNvcmU6OkludFNpemUgbV9zaXplOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9taW5BbGxvYzsK
LSAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWFyZ2luOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSBy
b3VuZEFsbG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0OwotfTsKLQotY2xh
c3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgOiBwdWJsaWMgQXJlYUFsbG9jYXRvciB7Ci1wdWJsaWM6
Ci0gICAgZXhwbGljaXQgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpOwotICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7Ci0KLSAgICB2b2lkIGV4
cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBhbGxv
Y2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCByZWxlYXNlKGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKTsKLSAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJpdmF0ZToK
LSAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07Ci0KLSAgICBzdHJ1Y3QgTm9k
ZSB7Ci0gICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsKLSAgICAgICAgV2ViQ29yZTo6SW50
U2l6ZSBsYXJnZXN0RnJlZTsKLSAgICAgICAgTm9kZSogcGFyZW50OwotICAgICAgICBOb2RlKiBs
ZWZ0OwotICAgICAgICBOb2RlKiByaWdodDsKLSAgICB9OwotCi0gICAgTm9kZSogbV9yb290Owot
ICAgIGludCBtX25vZGVDb3VudDsKLQotICAgIHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUqKTsK
LSAgICBXZWJDb3JlOjpJbnRQb2ludCBhbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBOb2RlKik7Ci0gICAgTm9kZSogc3BsaXROb2RlKE5vZGUqLCBTcGxpdCk7Ci0gICAg
c3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSopOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRp
ZiAvLyBBcmVhQWxsb2NhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjM2Q3OGIxOGYxYjA4Nzk4ZTY1YTU5MThhNGYyMDQyMDNhZjEwMDU0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYxICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChD
KSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gQ29weXJp
Z2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0gQ29weXJpZ2h0IChDKSAyMDEyIEludGVs
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCi0KLSNpbmNsdWRlICJCYWNr
aW5nU3RvcmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3Nh
Z2VzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVk
ZSAiUGFnZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5j
bHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+Ci0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlD
aGFuZ2UuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgQ29vcmRp
bmF0ZWRMYXllcklEIHRvQ29vcmRpbmF0ZWRMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQot
ewotICAgIHJldHVybiBsYXllciA/IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+
aWQoKSA6IDA7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VM
YXllclN0YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKLSAgICBp
ZiAoY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQW5pbWF0aW9u
cygpCi17Ci0gICAgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9IHRydWU7Ci0gICAgaWYgKGNsaWVu
dCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVuKCkKLXsKLSAg
ICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAg
ICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0KLQotI2lmIEVOQUJMRShD
U1NfRklMVEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VGaWx0
ZXJzKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50
KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwotfQotI2Vu
ZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VJbWFnZUJhY2tp
bmcoKQotewotICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IHRydWU7Ci0gICAgaWYgKGNs
aWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KCkKLXsKLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gdHJ1ZTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCgpOwotICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdG9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVj
dCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlR2VvbWV0
cnkoKQotewotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBzZXRTaG91bGRVcGRhdGVW
aXNpYmxlUmVjdCgpOwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBHcmFwaGlj
c0xheWVyKGNsaWVudCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkK
LSNlbmRpZgotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQotICAgICwgbV9z
aG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1
ZSkKLSAgICAsIG1fc2hvdWxkU3luY0ZpbHRlcnModHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0lt
YWdlQmFja2luZyh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyh0cnVlKQotICAg
ICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdDb250ZW50c1NjYWxl
QWRqdXN0bWVudChmYWxzZSkKLSAgICAsIG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudChm
YWxzZSkKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAsIG1faXNWYWxpZENhbnZhcyhm
YWxzZSkKLSAgICAsIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbihOb25lKQotI2VuZGlmCi0gICAg
LCBtX2Nvb3JkaW5hdG9yKDApCi0gICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQot
ICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCi0gICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRU
aW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGlt
ZXJGaXJlZCkKLXsKLSAgICBzdGF0aWMgQ29vcmRpbmF0ZWRMYXllcklEIG5leHRMYXllcklEID0g
MTsKLSAgICBtX2lkID0gbmV4dExheWVySUQrKzsKLX0KLQotQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjp+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCkKLXsKLSAgICBpZiAobV9jb29yZGluYXRv
cikgewotICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgbV9jb29yZGluYXRv
ci0+ZGV0YWNoTGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIEFTU0VSVCghbV9jb29yZGluYXRlZElt
YWdlQmFja2luZyAmJiAhbV9tYWluQmFja2luZ1N0b3JlKTsKLSAgICB3aWxsQmVEZXN0cm95ZWQo
KTsKLX0KLQotYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNvbnN0
IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQotewotICAgIGJvb2wgb2sgPSBHcmFw
aGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7Ci0gICAgaWYgKCFvaykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xh
eWVyKiBsYXllcikKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Ci0gICAg
ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQotewotICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOwotICAgIGRpZENo
YW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRD
aGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQot
ewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOwotICAg
IGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJs
aW5nKQotewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcp
OwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5
ZXIqIG5ld0NoaWxkKQotewotICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hp
bGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQotewotICAgIGlm
IChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIocGFyZW50KCkpKQotICAgICAgICBwYXJlbnRMYXllci0+ZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50
JiBwKQotewotICAgIGlmIChwb3NpdGlvbigpID09IHApCi0gICAgICAgIHJldHVybjsKLQotICAg
IEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHApOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25z
dCBGbG9hdFBvaW50M0QmIHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7Ci0gICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlmICh0aGlzLT5zaXplKCkg
PT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShz
aXplKTsKLQotICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnNldFNp
emUoc2l6ZSk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dCkKLXsKLSAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
R3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsKLSAgICBpZiAoY2hpbGRyZW5UcmFu
c2Zvcm0oKSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRD
aGlsZHJlblRyYW5zZm9ybSh0KTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBiKQotewotICAg
IGlmIChwcmVzZXJ2ZXMzRCgpID09IGIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNz
TGF5ZXI6OnNldFByZXNlcnZlczNEKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikK
LXsKLSAgICBpZiAobWFza3NUb0JvdW5kcygpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBH
cmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQo
Ym9vbCBiKQotewotICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQotICAgICAgICByZXR1cm47
Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOwotCi0gICAgZGlkQ2hhbmdl
TGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNWaXNpYmxlKGJvb2wgYikKLXsKLSAgICBpZiAoY29udGVudHNBcmVWaXNpYmxlKCkgPT0g
YikKLSAgICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJs
ZShiKTsKLSAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zZXRDb250
ZW50c1Zpc2libGUoYik7Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCi17Ci0g
ICAgaWYgKGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICht
X21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9y
dHNBbHBoYSghYik7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7Ci0g
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKLXsKLSAgICBpZiAoYmFja2ZhY2VW
aXNpYmlsaXR5KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6
c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0
eSkKLXsKLSAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgZGlkQ2hh
bmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKGNvbnRlbnRzUmVjdCgp
ID09IHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
UmVjdChyKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCi17Ci0jaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fY2FudmFzUGxhdGZvcm1MYXllcikKLSAgICAgICAg
bV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIHw9IFN5bmNDYW52YXM7Ci0jZW5kaWYKLQotICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7
Ci0KLSAgICBhZGRSZXBhaW50UmVjdChjb250ZW50c1JlY3QoKSk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIpCi17Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fY2Fu
dmFzUGxhdGZvcm1MYXllcikgewotICAgICAgICBBU1NFUlQobV9jYW52YXNUb2tlbi5pc1ZhbGlk
KCkpOwotICAgICAgICBpZiAoIXBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fcGVuZGlu
Z0NhbnZhc09wZXJhdGlvbiB8PSBEZXN0cm95Q2FudmFzOwotICAgICAgICAgICAgbV9wZW5kaW5n
Q2FudmFzT3BlcmF0aW9uICY9IH5DcmVhdGVDYW52YXM7Ci0gICAgICAgIH0gIGVsc2UgaWYgKCht
X2NhbnZhc1NpemUgIT0gcGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKSkgfHwgKG1f
Y2FudmFzVG9rZW4gIT0gcGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSkpIHsK
LSAgICAgICAgICAgIC8vIG1fY2FudmFzVG9rZW4gY2FuIGJlIGRpZmZlcmVudCB0byBwbGF0Zm9y
bUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpLCBldmVuIGlmIG1fY2FudmFzUGxhdGZvcm1M
YXllciBlcXVhbHMgcGxhdGZvcm1MYXllci4KLSAgICAgICAgICAgIG1fcGVuZGluZ0NhbnZhc09w
ZXJhdGlvbiB8PSBSZWNyZWF0ZUNhbnZhczsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChwbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0
aW9uIHw9IENyZWF0ZUFuZFN5bmNDYW52YXM7Ci0gICAgfQotCi0gICAgbV9jYW52YXNQbGF0Zm9y
bUxheWVyID0gcGxhdGZvcm1MYXllcjsKLSAgICAvLyBtX2NhbnZhc1Rva2VuIGlzIHVwZGF0ZWQg
b25seSBoZXJlLiBJbiBkZXRhaWwsIHdoZW4gR3JhcGhpY3NDb250ZXh0M0QgaXMgY2hhbmdlZCBv
ciByZXNoYXBlZCwgbV9jYW52YXNUb2tlbiBpcyBjaGFuZ2VkIGFuZCBzZXRDb250ZW50c1RvQ2Fu
dmFzKCkgaXMgYWx3YXlzIGNhbGxlZC4KLSAgICBtX2NhbnZhc1NpemUgPSBtX2NhbnZhc1BsYXRm
b3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCkgOiBJ
bnRTaXplKCk7Ci0gICAgbV9jYW52YXNUb2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllciA/IG1f
Y2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSA6IEdyYXBoaWNzU3Vy
ZmFjZVRva2VuKCk7Ci0gICAgQVNTRVJUKCEoIW1fY2FudmFzVG9rZW4uaXNWYWxpZCgpICYmIG1f
Y2FudmFzUGxhdGZvcm1MYXllcikpOwotCi0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGll
bnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KHBsYXRmb3JtTGF5ZXIpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1i
b29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBuZXdGaWx0ZXJzKQotewotICAgIGlmIChmaWx0ZXJzKCkgPT0gbmV3RmlsdGVycykK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGlkQ2hhbmdlRmlsdGVycygpOwotICAgIHJldHVy
biBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpOwotfQotI2VuZGlmCi0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKG1fbGF5ZXJJbmZvLnNvbGlkQ29sb3IgPT0gY29s
b3IpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2xheWVySW5mby5zb2xpZENvbG9yID0gY29sb3I7
Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wgc2hvdykKLXsKLSAgICBpZiAoaXNTaG93
aW5nRGVidWdCb3JkZXIoKSA9PSBzaG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGlj
c0xheWVyOjpzZXRTaG93RGVidWdCb3JkZXIoc2hvdyk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRD
b3VudGVyKGJvb2wgc2hvdykKLXsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSA9
PSBzaG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93UmVw
YWludENvdW50ZXIoc2hvdyk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFn
ZSkKLXsKLSAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlID8gaW1h
Z2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAwOwotICAgIGlmIChuZXdOYXRpdmVJ
bWFnZVB0cikgewotICAgICAgICAvLyBUaGlzIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhh
dCBwb2ludGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxpZCB3YXkgdG8g
dGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KLSAgICAgICAgLy8gVGhpcyBhc3N1bXB0aW9u
IGlzIHRydWUgaW4gUXQsIEdUSyBhbmQgRUZMLgotICAgICAgICBpZiAobmV3TmF0aXZlSW1hZ2VQ
dHIgPT0gbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgbV9jb21wb3NpdGVk
TmF0aXZlSW1hZ2VQdHIgPSBuZXdOYXRpdmVJbWFnZVB0cjsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX2NvbXBvc2l0ZWRJbWFnZSA9IDA7Ci0gICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdl
UHRyID0gMDsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2Uo
aW1hZ2UpOwotICAgIGRpZENoYW5nZUltYWdlQmFja2luZygpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewot
ICAgIGlmIChsYXllciA9PSBtYXNrTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3Jh
cGhpY3NMYXllcjo6c2V0TWFza0xheWVyKGxheWVyKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRTaXplKHNpemUoKSk7Ci0gICAgbGF5ZXItPnNl
dENvbnRlbnRzVmlzaWJsZShjb250ZW50c0FyZVZpc2libGUoKSk7Ci0gICAgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKiBjb29yZGluYXRlZExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIobGF5ZXIpOwotICAgIGNvb3JkaW5hdGVkTGF5ZXItPmRpZENoYW5nZUxheWVyU3RhdGUoKTsK
LSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKEltYWdlKiBpbWFnZSkgY29uc3QK
LXsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBlbnVtIHsga01heERpbWVuc3Rpb25Gb3JEaXJlY3RDb21wb3Np
dGluZyA9IDIwMDAgfTsKLSAgICBpZiAoaW1hZ2UtPndpZHRoKCkgPiBrTWF4RGltZW5zdGlvbkZv
ckRpcmVjdENvbXBvc2l0aW5nIHx8IGltYWdlLT5oZWlnaHQoKSA+IGtNYXhEaW1lbnN0aW9uRm9y
RGlyZWN0Q29tcG9zaXRpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09IHJlcGxpY2FM
YXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNh
dGVkQnlMYXllcihsYXllcik7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAg
ICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKLQotICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLQotICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOwotfQot
Ci1Db29yZGluYXRlZExheWVySUQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1faWQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlm
ICghbV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKSB7Ci0gICAgICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRo
aXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllciogbWFzayA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1hc2tMYXllcigpKSkK
LSAgICAgICAgbWFzay0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwot
Ci0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAgcmVwbGljYS0+Zmx1c2hD
b21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgbV9jb29yZGluYXRvci0+
c3luY0ZpeGVkTGF5ZXJzKCk7Ci0KLSAgICBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5
ZXJPbmx5KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGNoaWxkcmVuKClbaV0tPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShyZWN0
KTsKLX0KLQotQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKj4obGF5ZXIpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxk
cmVuKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsK
LSAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZElEczsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkSURzLmFw
cGVuZCh0b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7Ci0KLSAgICBtX2Nvb3Jk
aW5hdG9yLT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7Ci19Ci0KLSNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRl
cnMoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5j
TGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcoKQotewotICAgIGlmICghbV9zaG91
bGRTeW5jSW1hZ2VCYWNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jSW1h
Z2VCYWNraW5nID0gZmFsc2U7Ci0KLSAgICBpZiAobV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIp
IHsKLSAgICAgICAgQVNTRVJUKCFzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpOwotICAgICAgICBB
U1NFUlQobV9jb21wb3NpdGVkSW1hZ2UpOwotCi0gICAgICAgIGJvb2wgaW1hZ2VJbnN0YW5jZVJl
cGxhY2VkID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZyAmJiAobV9jb29yZGluYXRlZEltYWdl
QmFja2luZy0+aWQoKSAhPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRChtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSkpOwotICAgICAgICBpZiAoaW1h
Z2VJbnN0YW5jZVJlcGxhY2VkKQotICAgICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVl
ZGVkKCk7Ci0KLSAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKSB7Ci0gICAg
ICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nID0gbV9jb29yZGluYXRvci0+Y3JlYXRl
SW1hZ2VCYWNraW5nSWZOZWVkZWQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwotICAgICAgICAg
ICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+YWRkSG9zdCh0aGlzKTsKLSAgICAgICAgICAg
IG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5pZCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+bWFya0RpcnR5
KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwot
Ci0gICAgLy8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9sYXllckluZm8uaW1hZ2VJRC4K
LSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0
YXRlKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZhbHNl
OwotICAgIG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgpOwot
Ci0gICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7
Ci0gICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgp
OwotICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAg
ICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVy
SW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKLSAgICBtX2xheWVySW5mby5jb250
ZW50c1Zpc2libGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKLSAgICBtX2xheWVySW5mby5tYXNr
ID0gdG9Db29yZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLm1h
c2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0eSA9
IG9wYWNpdHkoKTsKLSAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7
Ci0gICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxpY2FM
YXllcigpKTsKLSAgICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLQotICAg
IG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50OwotICAgIG1f
bGF5ZXJJbmZvLnBvcyA9IG1fYWRqdXN0ZWRQb3NpdGlvbjsKLSAgICBtX2xheWVySW5mby5zaXpl
ID0gbV9hZGp1c3RlZFNpemU7Ci0KLSAgICBtX2xheWVySW5mby5zaG93RGVidWdCb3JkZXJzID0g
aXNTaG93aW5nRGVidWdCb3JkZXIoKTsKLSAgICBpZiAobV9sYXllckluZm8uc2hvd0RlYnVnQm9y
ZGVycykKLSAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Ci0gICAgbV9sYXllckluZm8u
c2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKLQotICAgIG1f
Y29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBj
b2xvciwgZmxvYXQgd2lkdGgpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJJbmZvLnNob3dEZWJ1Z0Jv
cmRlcnMpOwotICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29sb3IgPSBjb2xvcjsKLSAgICBt
X2xheWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5
bmNBbmltYXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFN5bmNBbmltYXRp
b25zID0gZmFsc2U7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllckFuaW1hdGlvbnMobV9p
ZCwgbV9hbmltYXRpb25zKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQotewotICAgIGRlc3Ryb3lDYW52
YXNJZk5lZWRlZCgpOwotICAgIGNyZWF0ZUNhbnZhc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAoISht
X3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBTeW5jQ2FudmFzKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5TeW5jQ2FudmFzOwotCi0gICAgaWYg
KCFtX2lzVmFsaWRDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29vcmRpbmF0b3It
PnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpCi17Ci0gICAgaWYg
KCEobV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgRGVzdHJveUNhbnZhcykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAgICAgbV9jb29yZGluYXRv
ci0+ZGVzdHJveUNhbnZhcyhtX2lkKTsKLSAgICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gZmFsc2U7
Ci0gICAgfQotCi0gICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5EZXN0cm95Q2FudmFz
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVk
ZWQoKQotewotICAgIGlmICghKG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIENyZWF0ZUNhbnZh
cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIp
OwotICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmNy
ZWF0ZUNhbnZhcyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwotICAgICAgICBtX2lzVmFs
aWRDYW52YXMgPSB0cnVlOwotICAgIH0KLQotICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAm
PSB+Q3JlYXRlQ2FudmFzOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKLXsKLSAgICBBU1NF
UlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLQotICAgIC8vIFNl
dHMgdGhlIHZhbHVlcy4KLSAgICBjb21wdXRlUGl4ZWxBbGlnbm1lbnQobV9hZGp1c3RlZFBvc2l0
aW9uLCBtX2FkanVzdGVkU2l6ZSwgbV9hZGp1c3RlZEFuY2hvclBvaW50LCBtX3BpeGVsQWxpZ25t
ZW50T2Zmc2V0KTsKLQotICAgIHN5bmNJbWFnZUJhY2tpbmcoKTsKLSAgICBzeW5jTGF5ZXJTdGF0
ZSgpOwotICAgIHN5bmNBbmltYXRpb25zKCk7Ci0gICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJs
ZVJlY3QoKTsKLSAgICBzeW5jQ2hpbGRyZW4oKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0g
ICAgc3luY0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0j
aWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgc3luY0NhbnZhcygpOwotI2VuZGlmCi19Ci0K
LWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdWaXNpYmxlKCkKLXsK
LSAgICBBU1NFUlQobV9jb29yZGluYXRlZEltYWdlQmFja2luZyk7Ci0gICAgcmV0dXJuIHRpbGVk
QmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKGNvbnRlbnRzUmVjdCgpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbGVhc2VJbWFnZUJhY2tpbmdJZk5l
ZWRlZCgpCi17Ci0gICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgbV9jb29yZGluYXRlZElt
YWdlQmFja2luZy0+cmVtb3ZlSG9zdCh0aGlzKTsKLSAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLmNsZWFyKCk7Ci0gICAgbV9sYXllckluZm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKLXsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKLXsKLSAgICBtX2xheWVySW5mby5p
c1Jvb3RMYXllciA9IGlzUm9vdDsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0
b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgaWYg
KCFtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWFpbkJhY2tp
bmdTdG9yZS0+c2V0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICBzZXRO
ZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKLXsKLSAgICBpZiAoc2hv
dWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX3BlbmRpbmdDb250ZW50c1NjYWxlQWRq
dXN0bWVudCA9IHRydWU7Ci19Ci0KLWZsb2F0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZWZm
ZWN0aXZlQ29udGVudHNTY2FsZSgpCi17Ci0gICAgcmV0dXJuIHNlbGZPckFuY2VzdG9ySGF2ZU5v
bkFmZmluZVRyYW5zZm9ybXMoKSA/IDEgOiBkZXZpY2VTY2FsZUZhY3RvcigpICogcGFnZVNjYWxl
RmFjdG9yKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RDb250
ZW50c1NjYWxlKCkKLXsKLSAgICBBU1NFUlQoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKTsKLSAg
ICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRz
U2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGlu
ZyB0aGUgY29udGVudCwKLSAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91
cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4KLSAgICAvLyBicmllZmx5IHNlZWluZyBmbGlj
a2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlCi0gICAgLy8gc29t
ZXRoaW5nIHJlcGxhY2VzIHRoZW0uCi0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFp
bkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUg
cHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCi0gICAgbV9wcmV2
aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQotewotICAgIG1f
bWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBD
b29yZGluYXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKLSAgICBtX21haW5CYWNraW5n
U3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWNvbnRlbnRzT3BhcXVlKCkpOwotICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZShlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
aWYgKHJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRHcmFwaGljc0xh
eWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4m
IHVwZGF0ZWRSZWN0cykKLXsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSAmJiAh
dXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJS
ZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNy
ZWF0aW9uKCkKLXsKLSAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAgIGlm
IChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7
Ci19Ci0KLUludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9y
ZUNvbnRlbnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRo
KCksIHNpemUoKS5oZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsYW1wVG9Db250ZW50c1Jl
Y3RJZlJlY3RJc0luZmluaXRlKEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVu
dHNSZWN0KQotewotICAgIGlmIChyZWN0LndpZHRoKCkgPj0gTGF5b3V0VW5pdDo6bmVhcmx5TWF4
KCkgfHwgcmVjdC53aWR0aCgpIDw9IExheW91dFVuaXQ6Om5lYXJseU1pbigpKSB7Ci0gICAgICAg
IHJlY3Quc2V0WChjb250ZW50c1JlY3QueCgpKTsKLSAgICAgICAgcmVjdC5zZXRXaWR0aChjb250
ZW50c1JlY3Qud2lkdGgoKSk7Ci0gICAgfQotCi0gICAgaWYgKHJlY3QuaGVpZ2h0KCkgPj0gTGF5
b3V0VW5pdDo6bmVhcmx5TWF4KCkgfHwgcmVjdC5oZWlnaHQoKSA8PSBMYXlvdXRVbml0OjpuZWFy
bHlNaW4oKSkgewotICAgICAgICByZWN0LnNldFkoY29udGVudHNSZWN0LnkoKSk7Ci0gICAgICAg
IHJlY3Quc2V0SGVpZ2h0KGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotfQotCi1JbnRS
ZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVj
dCgpCi17Ci0gICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KLSAg
ICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhl
IHZpc2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFu
ZSAobGF5ZXIgY29vcmRpbmF0ZXMpLgotICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBi
ZSBzcXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhp
cyBxdWFkLAotICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwg
dmlzaWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciBy
ZWN0IG11bHRpcGxpZXIpLgotICAgIEFTU0VSVChtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0gPT0g
bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKSk7Ci0gICAgRmxvYXRSZWN0IHJl
Y3QgPSBtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0uY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVh
ZChGbG9hdFF1YWQobV9jb29yZGluYXRvci0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpKSk7Ci0gICAg
Y2xhbXBUb0NvbnRlbnRzUmVjdElmUmVjdElzSW5maW5pdGUocmVjdCwgdGlsZWRCYWNraW5nU3Rv
cmVDb250ZW50c1JlY3QoKSk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci19
Ci0KLUNvbG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgpID8gQ29s
b3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzLCBJbnRQb2ludCYgb2Zmc2V0KQotewot
ICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNG
bHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICByZXR1cm4gbV9jb29yZGluYXRvci0+YmVnaW5D
b250ZW50VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyBDb29yZGluYXRlZFN1cmZhY2U6
Ok5vRmxhZ3MgOiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEsIGF0bGFzLCBvZmZz
ZXQpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSh1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7
Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0g
ICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRp
bGVSZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUo
dWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29u
c3QgSW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwotICAg
IEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1f
Y29vcmRpbmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVj
dCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQz
Ml90IHRpbGVJRCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgQVNTRVJUKG1f
Y29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0g
ICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQotewotICAgIGlm
ICghc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKSB7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS5jbGVhcigpOwotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVz
dG1lbnQpIHsKLSAgICAgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotICAgICAgICBtX3BlbmRp
bmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoaXMg
aXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBiYWNraW5nIHN0
b3JlLCBvbmNlIHdlCi0gICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdlIGFyZSByZWFk
eSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgotICAgIGlmICghbV9tYWluQmFj
a2luZ1N0b3JlKQotICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgIGlmIChtX3Bl
bmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQpIHsKLSAgICAgICAgbV9wZW5kaW5nVmlzaWJsZVJl
Y3RBZGp1c3RtZW50ID0gZmFsc2U7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJX
aXRoVGlsZXNJZk5lZWRlZCgpOwotICAgIH0KLQotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBk
YXRlVGlsZUJ1ZmZlcnMoKTsKLQotICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGlz
IGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgotICAgIC8vIHJlbW92aW5n
IHRoZSBleGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmlyc3Qg
dGltZQotICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3ZlIHRo
ZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlLgotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUtPnZp
c2libGVBcmVhSXNDb3ZlcmVkKCkpCi0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xl
YXIoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFja2luZ1N0
b3JlcygpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiB1cGRh
dGVNb2RlUHJvdGVjdG9yKG1faXNQdXJnaW5nLCB0cnVlKTsKLSNlbmRpZgotICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsK
LQotICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwotCi0gICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29vcmRp
bmF0b3IoV2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNvb3JkaW5hdG9y
KQotewotICAgIG1fY29vcmRpbmF0b3IgPSBjb29yZGluYXRvcjsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCkKLXsKLSAg
ICBpZiAoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX3BlbmRpbmdWaXNpYmxl
UmVjdEFkanVzdG1lbnQgPSB0cnVlOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKLXsKLSAgICBpZiAob3BhY2l0eSgpIDwgMC4w
MSAmJiAhbV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5n
ZXMoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxk
U3luY0NhbnZhcyA9IGZhbHNlOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHNob3Vs
ZFN5bmNDYW52YXMgPSBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBTeW5jQ2FudmFzOwotI2Vu
ZGlmCi0KLSAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUgJiYgIW1fc2hvdWxkU3luY0No
aWxkcmVuICYmICFtX3Nob3VsZFN5bmNGaWx0ZXJzICYmICFtX3Nob3VsZFN5bmNJbWFnZUJhY2tp
bmcgJiYgIW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIXNob3VsZFN5bmNDYW52YXMpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVS
ZWN0KCkuaW50ZXJzZWN0cyh0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsKLX0KLQot
c3RhdGljIGlubGluZSBib29sIGlzSW50ZWdyYWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4odmFsdWUpID09IHZhbHVlOwotfQotCi1GbG9hdFBvaW50IENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKQotewot
ICAgIEZsb2F0UG9pbnQgb2Zmc2V0OwotICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3Vy
ckxheWVyID0gdGhpczsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgp
KQotICAgICAgICBvZmZzZXQgKz0gY3VyckxheWVyLT5wb3NpdGlvbigpOwotCi0gICAgcmV0dXJu
IG9mZnNldDsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQaXhl
bEFsaWdubWVudChGbG9hdFBvaW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiBzaXplLCBGbG9hdFBv
aW50M0QmIGFuY2hvclBvaW50LCBGbG9hdFNpemUmIGFsaWdubWVudE9mZnNldCkKLXsKLSAgICBp
ZiAoaXNJbnRlZ3JhbChlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpKSB7Ci0gICAgICAgIHBvc2l0
aW9uID0gbV9wb3NpdGlvbjsKLSAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKLSAgICAgICAgYW5jaG9y
UG9pbnQgPSBtX2FuY2hvclBvaW50OwotICAgICAgICBhbGlnbm1lbnRPZmZzZXQgPSBGbG9hdFNp
emUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgcG9zaXRpb25S
ZWxhdGl2ZVRvQmFzZSA9IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCk7Ci0KLSAgICBG
bG9hdFJlY3QgYmFzZVJlbGF0aXZlQm91bmRzKHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIG1fc2l6
ZSk7Ci0gICAgRmxvYXRSZWN0IHNjYWxlZEJvdW5kcyA9IGJhc2VSZWxhdGl2ZUJvdW5kczsKLQot
ICAgIC8vIFNjYWxlIGJ5IHRoZSBlZmZlY3RpdmUgc2NhbGUgZmFjdG9yIHRvIGNvbXB1dGUgdGhl
IHNjcmVlbi1yZWxhdGl2ZSBib3VuZHMuCi0gICAgc2NhbGVkQm91bmRzLnNjYWxlKGVmZmVjdGl2
ZUNvbnRlbnRzU2NhbGUoKSk7Ci0KLSAgICAvLyBSb3VuZCB0byBpbnRlZ2VyIGJvdW5kYXJpZXMu
Ci0gICAgLy8gTk9URTogV2hlbiB1c2luZyBlbmNsb3NpbmdJbnRSZWN0IChhcyBtYWMpIGl0IHdp
bGwgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgZGVwZW5kaW5nIG9uIHBvc2l0aW9uLgotICAgIEZsb2F0
UmVjdCBhbGlnbmVkQm91bmRzID0gcm91bmRlZEludFJlY3Qoc2NhbGVkQm91bmRzKTsKLQotICAg
IC8vIENvbnZlcnQgYmFjayB0byBsYXllciBjb29yZGluYXRlcy4KLSAgICBhbGlnbmVkQm91bmRz
LnNjYWxlKDEgLyBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotCi0gICAgLy8gQ29udmVydCBi
YWNrIHRvIGxheWVyIGNvb3JkaW5hdGVzLgotICAgIGFsaWdubWVudE9mZnNldCA9IGJhc2VSZWxh
dGl2ZUJvdW5kcy5sb2NhdGlvbigpIC0gYWxpZ25lZEJvdW5kcy5sb2NhdGlvbigpOwotCi0gICAg
cG9zaXRpb24gPSBtX3Bvc2l0aW9uIC0gYWxpZ25tZW50T2Zmc2V0OwotICAgIHNpemUgPSBhbGln
bmVkQm91bmRzLnNpemUoKTsKLQotICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNvbXB1dGUgYSBuZXcg
YW5jaG9yIHBvaW50IHdoaWNoIGNvbXBlbnNhdGVzIGZvciByb3VuZGluZy4KLSAgICBmbG9hdCBh
bmNob3JQb2ludFggPSBtX2FuY2hvclBvaW50LngoKTsKLSAgICBmbG9hdCBhbmNob3JQb2ludFkg
PSBtX2FuY2hvclBvaW50LnkoKTsKLQotICAgIGlmIChhbGlnbmVkQm91bmRzLndpZHRoKCkpCi0g
ICAgICAgIGFuY2hvclBvaW50WCA9IChiYXNlUmVsYXRpdmVCb3VuZHMud2lkdGgoKSAqIGFuY2hv
clBvaW50WCArIGFsaWdubWVudE9mZnNldC53aWR0aCgpKSAvIGFsaWduZWRCb3VuZHMud2lkdGgo
KTsKLQotICAgIGlmIChhbGlnbmVkQm91bmRzLmhlaWdodCgpKQotICAgICAgICBhbmNob3JQb2lu
dFkgPSAoYmFzZVJlbGF0aXZlQm91bmRzLmhlaWdodCgpICogYW5jaG9yUG9pbnRZICsgYWxpZ25t
ZW50T2Zmc2V0LmhlaWdodCgpKSAvIGFsaWduZWRCb3VuZHMuaGVpZ2h0KCk7Ci0KLSAgICBhbmNo
b3JQb2ludCA9IEZsb2F0UG9pbnQzRChhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WSwgbV9hbmNo
b3JQb2ludC56KCkgKiBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQotewot
ICAgIC8vIFdoZW4gd2UgaGF2ZSBhIHRyYW5zZm9ybSBhbmltYXRpb24sIHdlIG5lZWQgdG8gdXBk
YXRlIHZpc2libGUgcmVjdCBldmVyeSBmcmFtZSB0byBhZGp1c3QgdGhlIHZpc2libGUgcmVjdCBv
ZiBhIGJhY2tpbmcgc3RvcmUuCi0gICAgYm9vbCBoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24g
PSBzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpOwotICAgIGlmICgh
bV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCAmJiAhaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9u
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFs
c2U7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VycmVudFRyYW5zZm9ybSA9IHRyYW5zZm9y
bSgpOwotICAgIGlmIChoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgIGNsaWVu
dCgpLT5nZXRDdXJyZW50VHJhbnNmb3JtKHRoaXMsIGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAg
ICBtX2xheWVyVHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fYWRqdXN0ZWRBbmNob3JQb2ludCk7
Ci0gICAgbV9sYXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihtX2FkanVzdGVkUG9zaXRpb24pOwot
ICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShtX2FkanVzdGVkU2l6ZSk7Ci0KLSAgICBtX2xh
eWVyVHJhbnNmb3JtLnNldEZsYXR0ZW5pbmcoIXByZXNlcnZlczNEKCkpOwotICAgIG1fbGF5ZXJU
cmFuc2Zvcm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY2hpbGRyZW5UcmFuc2Zvcm0oKSk7Ci0gICAg
bV9sYXllclRyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3JtcyhwYXJlbnQoKSA/IHRvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZvckNo
aWxkcmVuKCkgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKLQotICAgIG1fY2FjaGVkSW52ZXJz
ZVRyYW5zZm9ybSA9IG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCk7Ci0KLSAg
ICAvLyBUaGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdT
dG9yZVZpc2libGVSZWN0LgotICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci19
Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGRIYXZlQmFja2luZ1N0b3Jl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVWaXNp
YmxlKCkgJiYgIW1fc2l6ZS5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPnNlbGZPckFuY2VzdG9ySGFzQWN0aXZl
VHJhbnNmb3JtQW5pbWF0aW9uKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKLXsKLSAgICBpZiAobV9h
bmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2xheWVyVHJh
bnNmb3JtLmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBpZiAoIXBhcmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5zZWxmT3JBbmNlc3RvckhhdmVOb25B
ZmZpbmVUcmFuc2Zvcm1zKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjph
ZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50
U2l6ZSYgYm94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleWZy
YW1lc05hbWUsIGRvdWJsZSBkZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0KQotewotICAgIEFTU0VS
VCgha2V5ZnJhbWVzTmFtZS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKCFhbmltIHx8IGFuaW0tPmlz
RW1wdHlPclplcm9EdXJhdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyIHx8ICh2YWx1ZUxp
c3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVl
TGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYm9vbCBsaXN0c01hdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBpZ25v
cmVkSGFzQmlnUm90YXRpb247Ci0KLSAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5p
bWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKLSAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlk
YXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlvbikg
Pj0gMDsKLQotICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWUo
KSAtIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQ7Ci0gICAgbV9hbmltYXRpb25zLmFkZChHcmFw
aGljc0xheWVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5p
bSwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7Ci0gICAgbV9hbmltYXRp
b25TdGFydGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIGRpZENoYW5nZUFuaW1hdGlvbnMo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUp
Ci17Ci0gICAgbV9hbmltYXRpb25zLnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWUpOwotICAgIGRp
ZENoYW5nZUFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCi17Ci0gICAgbV9h
bmltYXRpb25zLnJlbW92ZShhbmltYXRpb25OYW1lKTsKLSAgICBkaWRDaGFuZ2VBbmltYXRpb25z
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzdXNwZW5kQW5pbWF0aW9u
cyhkb3VibGUgdGltZSkKLXsKLSAgICBtX2FuaW1hdGlvbnMuc3VzcGVuZCh0aW1lKTsKLSAgICBk
aWRDaGFuZ2VBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBtX2FuaW1hdGlvbnMucmVzdW1lKCk7Ci0gICAg
ZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyPiopCi17Ci0gICAgY2xpZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgbV9s
YXN0QW5pbWF0aW9uU3RhcnRUaW1lKTsKLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZGNmZWViMDJkZWQ4OWFiOTA3NTc5MzQwMzNmMGM3N2JjM2NlYzI0
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKgotIENv
cHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcl9oCi0jZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCi0KLSNpbmNs
dWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJJbmZvLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0jaW5jbHVkZSAiRmxvYXRQ
b2ludDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiVGlsZWRC
YWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgot
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzU3VyZmFjZVRva2VuLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxX
ZWJDb3JlL1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsK
LX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5n
ZXMoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKLSAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1
aW50MzJfdCB0aWxlSUQpID0gMDsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZp
c2libGVDb250ZW50c1JlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3Jl
OjpJbWFnZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8
Q29vcmRpbmF0ZWRMYXllcklEPiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAg
dmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJikgPSAwOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVy
SUQsIFdlYkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmND
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAwOwot
I2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0
ZWRMYXllcklELCBpbnQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlv
bnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExh
eWVycygpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIENvb3JkaW5h
dGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYp
ID0gMDsKLX07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKLSAgICAsIHB1YmxpYyBUaWxlZEJh
Y2tpbmdTdG9yZUNsaWVudAotICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc6Okhvc3QKLSAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudCB7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNz
TGF5ZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoKTsK
LQotICAgIC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAgIHZp
cnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQmVs
b3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFBy
ZXNlcnZlczNEKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91
bmRzKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9v
bCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29sKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCkgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93RGVidWdCb3JkZXIoYm9vbCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFNob3dSZXBhaW50Q291bnRlcihib29sKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZShJbWFnZSopIGNvbnN0
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3Jt
TGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNz
TGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIo
R3JhcGhpY3NMYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3Bs
YXkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05l
ZWRzRGlzcGxheSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2Fs
ZUZhY3RvckNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3Np
dGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBm
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkgT1ZFUlJJREU7Ci0jaWYgRU5B
QkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBhZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5p
bWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91YmxlKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKSBPVkVSUklERTsKLQotICAgIEZsb2F0
UG9pbnQgY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKTsKLSAgICB2b2lkIGNvbXB1dGVQ
aXhlbEFsaWdubWVudChGbG9hdFBvaW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiwgRmxvYXRQb2lu
dDNEJiBhbmNob3JQb2ludCwgRmxvYXRTaXplJiBhbGlnbm1lbnRPZmZzZXQpOwotCi0gICAgdm9p
ZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQm
KTsKLQotICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwotCi0gICAgV2ViS2l0OjpDb29yZGlu
YXRlZExheWVySUQgaWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJv
b2wgaXNGaXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0KLQotICAgIEludFJl
Y3QgY292ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYWluQmFja2luZ1N0b3JlID8gbV9tYWlu
QmFja2luZ1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJSZWN0
KCkpIDogSW50UmVjdCgpOyB9Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAg
IHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0
b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlv
bigpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRl
bnRzUmVjdCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9y
ZVZpc2libGVSZWN0KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdT
dG9yZUJhY2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gQ29vcmRpbmF0
ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlE
LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
V2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBJbnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgT1ZFUlJJREU7Ci0K
LSAgICB2b2lkIHNldENvb3JkaW5hdG9yKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Q2xpZW50Kik7Ci0KLSAgICB2b2lkIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci0g
ICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBib29sIGhhc1BlbmRpbmdWaXNpYmxl
Q2hhbmdlcygpOwotCi1wcml2YXRlOgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGVu
dW0gUGVuZGluZ0NhbnZhc09wZXJhdGlvbiB7Ci0gICAgICAgIE5vbmUgPSAweDAwLAotICAgICAg
ICBDcmVhdGVDYW52YXMgPSAweDAxLAotICAgICAgICBEZXN0cm95Q2FudmFzID0gMHgwMiwKLSAg
ICAgICAgU3luY0NhbnZhcyA9IDB4MDQsCi0gICAgICAgIENyZWF0ZUFuZFN5bmNDYW52YXMgPSBD
cmVhdGVDYW52YXMgfCBTeW5jQ2FudmFzLAotICAgICAgICBSZWNyZWF0ZUNhbnZhcyA9IENyZWF0
ZUFuZFN5bmNDYW52YXMgfCBEZXN0cm95Q2FudmFzCi0gICAgfTsKLQotICAgIHZvaWQgc3luY0Nh
bnZhcygpOwotICAgIHZvaWQgZGVzdHJveUNhbnZhc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBjcmVh
dGVDYW52YXNJZk5lZWRlZCgpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVidWdC
b3JkZXIoY29uc3QgQ29sb3ImLCBmbG9hdCB3aWR0aCkgT1ZFUlJJREU7Ci0KLSAgICBib29sIGZp
eGVkVG9WaWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9Ci0KLSAg
ICB2b2lkIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB2b2lkIGRpZENoYW5nZUFuaW1hdGlv
bnMoKTsKLSAgICB2b2lkIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VD
aGlsZHJlbigpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRpZENoYW5nZUZp
bHRlcnMoKTsKLSNlbmRpZgotICAgIHZvaWQgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7Ci0KLSAg
ICB2b2lkIHN5bmNMYXllclN0YXRlKCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwotICAg
IHZvaWQgc3luY0NoaWxkcmVuKCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQg
c3luY0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHZvaWQgc3luY0ltYWdlQmFja2luZygpOwotICAg
IHZvaWQgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICB2b2lkIHVwZGF0ZUNv
bnRlbnRCdWZmZXJzKCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwotICAgIHZv
aWQgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBDb29yZGluYXRlZElt
YWdlQmFja2luZzo6SG9zdAotICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNpYmxlKCkg
T1ZFUlJJREU7Ci0gICAgYm9vbCBzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkgY29uc3Q7Ci0gICAg
Ym9vbCBzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0Owot
ICAgIGJvb2wgc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwotICAgIHZv
aWQgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotCi0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVWaXNp
YmxlUmVjdCgpOwotICAgIGZsb2F0IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKTsKLQotICAgIHZv
aWQgYW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyPiopOwotCi0gICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVySUQgbV9pZDsKLSAgICBXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIEdyYXBoaWNzTGF5ZXJU
cmFuc2Zvcm0gbV9sYXllclRyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2Nh
Y2hlZEludmVyc2VUcmFuc2Zvcm07Ci0gICAgRmxvYXRTaXplIG1fcGl4ZWxBbGlnbm1lbnRPZmZz
ZXQ7Ci0gICAgRmxvYXRTaXplIG1fYWRqdXN0ZWRTaXplOwotICAgIEZsb2F0UG9pbnQgbV9hZGp1
c3RlZFBvc2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBtX2lzUHVyZ2luZzsKLSNlbmRpZgotICAgIGJvb2wg
bV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdDogMTsKLSAgICBib29sIG1fc2hvdWxkU3luY0xheWVy
U3RhdGU6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKLSAgICBib29sIG1f
c2hvdWxkU3luY0ZpbHRlcnM6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmc6
IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNBbmltYXRpb25zOiAxOwotICAgIGJvb2wgbV9maXhl
ZFRvVmlld3BvcnQgOiAxOwotICAgIGJvb2wgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1l
bnQgOiAxOwotICAgIGJvb2wgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50IDogMTsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBib29sIG1faXNWYWxpZENhbnZhcyA6IDE7Ci0g
ICAgdW5zaWduZWQgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIDogMzsKLSNlbmRpZgotCi0gICAg
V2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fY29vcmRpbmF0b3I7Ci0g
ICAgT3duUHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAgT3du
UHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotCi0gICAgUmVm
UHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKLSAgICBOYXRpdmVJbWFnZVB0ciBtX2NvbXBv
c2l0ZWROYXRpdmVJbWFnZVB0cjsKLSAgICBSZWZQdHI8V2ViS2l0OjpDb29yZGluYXRlZEltYWdl
QmFja2luZz4gbV9jb29yZGluYXRlZEltYWdlQmFja2luZzsKLQotICAgIFBsYXRmb3JtTGF5ZXIq
IG1fY2FudmFzUGxhdGZvcm1MYXllcjsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBJ
bnRTaXplIG1fY2FudmFzU2l6ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiBtX2NhbnZhc1Rv
a2VuOwotI2VuZGlmCi0gICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiBtX2FuaW1h
dGlvblN0YXJ0ZWRUaW1lcjsKLSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBtX2FuaW1hdGlv
bnM7Ci0gICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZTsKLX07Ci0KLUNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ciopOwotCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9I
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFj
a2luZy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDMxNDkzMjVjYTVhNzZk
Yzk1YjQ3NTJjZDZlZDJmZjliNmE2ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0g
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1Db29yZGluYXRlZEltYWdl
QmFja2luZ0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKEltYWdlKiBpbWFnZSkKLXsKLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBr
ZWVwcyBhIFJlZlB0cjxJbWFnZT4gbWVtYmVyLCBzbyB0aGUgc2FtZSBJbWFnZSBwb2ludGVyIGNh
biBub3QgcmVmZXIgdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgdW50aWwgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcgcmVsZWFzZXMgdGhlIG1lbWJlci4KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lEPihpbWFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29v
cmRpbmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZEltYWdlQmFja2luZyhjbGllbnQsIGltYWdlKSk7Ci19
Ci0KLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29y
ZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKLSAgICA6IG1fY29vcmRp
bmF0b3IoY2xpZW50KQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1faWQoZ2V0Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKLSAgICAsIG1fY2xlYXJDb250ZW50
c1RpbWVyKHRoaXMsICZDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVy
RmlyZWQpCi0gICAgLCBtX2lzRGlydHkoZmFsc2UpCi0gICAgLCBtX2lzVmlzaWJsZShmYWxzZSkK
LXsKLSAgICAvLyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBk
aXJlY3RseSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgotICAgIC8vIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTAxNDI2Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQoKSk7
Ci19Ci0KLUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmco
KQotewotfQotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KEhvc3QqIGhv
c3QpCi17Ci0gICAgQVNTRVJUKCFtX2hvc3RzLmNvbnRhaW5zKGhvc3QpKTsKLSAgICBtX2hvc3Rz
LmFwcGVuZChob3N0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3Zl
SG9zdChIb3N0KiBob3N0KQotewotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1faG9zdHMuZmluZCho
b3N0KTsKLSAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwotICAgIG1faG9zdHMucmVt
b3ZlKHBvc2l0aW9uKTsKLQotICAgIGlmIChtX2hvc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9j
b29yZGluYXRvci0+cmVtb3ZlSW1hZ2VCYWNraW5nKGlkKCkpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjptYXJrRGlydHkoKQotewotICAgIG1faXNEaXJ0eSA9IHRydWU7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSgpCi17Ci0gICAgcmVsZWFz
ZVN1cmZhY2VJZk5lZWRlZCgpOwotCi0gICAgYm9vbCBjaGFuZ2VkVG9WaXNpYmxlOwotICAgIHVw
ZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChjaGFuZ2VkVG9WaXNpYmxlKTsKLSAgICBpZiAoIW1faXNW
aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNoYW5nZWRUb1Zpc2libGUpIHsK
LSAgICAgICAgaWYgKCFtX2lzRGlydHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
aWYgKG1fbmF0aXZlSW1hZ2VQdHIgPT0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSkgewotICAgICAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZh
Y2U6OmNyZWF0ZShtX2ltYWdlLT5zaXplKCksIG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhh
KCkgPyBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEgOiBDb29yZGluYXRlZFN1cmZh
Y2U6Ok5vRmxhZ3MpOwotICAgIGlmICghbV9zdXJmYWNlKSB7Ci0gICAgICAgIG1faXNEaXJ0eSA9
IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByZWN0KEludFBv
aW50Ojp6ZXJvKCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gY29udGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwotICAg
IGNvbnRleHQtPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBy
ZWN0LCByZWN0KTsKLQotICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZSgpOwotCi0gICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWls
cywgdHJ5IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2Nv
b3JkaW5hdG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKLSAgICBtX2lz
RGlydHkgPSAhc3VjY2VzczsKLX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVs
ZWFzZVN1cmZhY2VJZk5lZWRlZCgpCi17Ci0gICAgLy8gV2UgbXVzdCBrZWVwIG1fc3VyZmFjZSB1
bnRpbCBVSSBQcm9jZXNzIHJlYWRzIG1fc3VyZmFjZS4KLSAgICAvLyBJZiBtX3N1cmZhY2UgZXhp
c3RzLCBpdCB3YXMgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgdXBkYXRlLgotICAgIG1fc3VyZmFj
ZS5jbGVhcigpOwotfQotCi1zdGF0aWMgY29uc3QgZG91YmxlIGNsZWFyQ29udGVudHNUaW1lcklu
dGVydmFsID0gMzsKLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJp
bGl0eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpCi17Ci0gICAgYm9vbCBwcmV2aW91
c0lzVmlzaWJsZSA9IG1faXNWaXNpYmxlOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faG9zdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
aWYgKG1faG9zdHNbaV0tPmltYWdlQmFja2luZ1Zpc2libGUoKSkgewotICAgICAgICAgICAgbV9p
c1Zpc2libGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBib29sIGNoYW5nZWRUb0ludmlzaWJsZSA9IHByZXZpb3VzSXNWaXNpYmxlICYmICFtX2lz
VmlzaWJsZTsKLSAgICBpZiAoY2hhbmdlZFRvSW52aXNpYmxlKSB7Ci0gICAgICAgIEFTU0VSVCgh
bV9jbGVhckNvbnRlbnRzVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgICAgIG1fY2xlYXJDb250ZW50
c1RpbWVyLnN0YXJ0T25lU2hvdChjbGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCk7Ci0gICAgfQot
Ci0gICAgY2hhbmdlZFRvVmlzaWJsZSA9ICFwcmV2aW91c0lzVmlzaWJsZSAmJiBtX2lzVmlzaWJs
ZTsKLQotICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX2NsZWFyQ29udGVudHNUaW1lci5pc0FjdGl2
ZSgpKSB7Ci0gICAgICAgIG1fY2xlYXJDb250ZW50c1RpbWVyLnN0b3AoKTsKLSAgICAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgdGhlIHRleHR1cmUgaWYgd2UgZGlkbid0IHJlbW92ZSB0
aGUgdGV4dHVyZS4KLSAgICAgICAgY2hhbmdlZFRvVmlzaWJsZSA9IGZhbHNlOwotICAgIH0KLX0K
LQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQo
V2ViQ29yZTo6VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKLXsKLSAgICBtX2Nvb3Jk
aW5hdG9yLT5jbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGlkKCkpOwotfQotCi19Ci0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRiMmEwMmViODJkZjI3ZDkxMGY1
YTljY2IwYTcwY2U3NDM0ZjQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBDb29yZGluYXRlZEltYWdlQmFj
a2luZ19oCi0jZGVmaW5lIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKLQotI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgotI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gewotcHVibGljOgotICAgIGNsYXNzIENvb3JkaW5hdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAw
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFn
ZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgIH07Ci0KLSAgICBj
bGFzcyBIb3N0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tp
bmdWaXNpYmxlKCkgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJbWFnZT4pOwotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7Ci0KLSAg
ICBzdGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKFdlYkNvcmU6OkltYWdlKik7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIHZvaWQgYWRkSG9zdChIb3N0Kik7Ci0g
ICAgdm9pZCByZW1vdmVIb3N0KEhvc3QqKTsKLQotICAgIC8vIFdoZW4gYSBuZXcgaW1hZ2UgaXMg
dXBkYXRlZCBvciBhbiBhbmltYXRlZCBnaWYgaXMgcHJvZ3Jlc3NlZCwgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyIGNhbGxzIG1hcmtEaXJ0eSgpLgotICAgIHZvaWQgbWFya0RpcnR5KCk7Ci0KLSAg
ICAvLyBDcmVhdGUsIHJlbW92ZSBvciB1cGRhdGUgaXRzIGJhY2tpbmcuCi0gICAgdm9pZCB1cGRh
dGUoKTsKLQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRv
ciosIFBhc3NSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+KTsKLQotICAgIHZvaWQgcmVsZWFzZVN1cmZh
Y2VJZk5lZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNo
YW5nZWRUb1Zpc2libGUpOwotICAgIHZvaWQgY2xlYXJDb250ZW50c1RpbWVyRmlyZWQoV2ViQ29y
ZTo6VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+Kik7Ci0KLSAgICBDb29yZGluYXRvciog
bV9jb29yZGluYXRvcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IG1faW1hZ2U7Ci0gICAg
V2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZVB0cjsKLSAgICBDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIG1faWQ7Ci0gICAgVmVjdG9yPEhvc3QqPiBtX2hvc3RzOwotCi0gICAg
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwotCi0gICAgV2ViQ29yZTo6VGlt
ZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IG1fY2xlYXJDb250ZW50c1RpbWVyOwotCi0gICAg
Ym9vbCBtX2lzRGlydHk7Ci0gICAgYm9vbCBtX2lzVmlzaWJsZTsKLQotfTsKLQotfQotI2VuZGlm
Ci0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZ19ICmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCAx
YTRhOTk3OTI4MTU0YzY1Zjg2ZTdiZmMxYjhjNTQ1ZTJkYjVlYmFjLi5lOGE1OTMyZjhlMmJmYzJl
YjQ5ZWMyZGJhMGFkODRjM2VhZWQzOTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDEyICszMSwxMCBA
QAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgogCiAjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlN1cmZhY2VV
cGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtNTAs
NiArNDgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5n
cy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBv
cmFyeUNoYW5nZS5oPgogCkBAIC03MDgsMTMgKzcwNywxMyBAQCBib29sIExheWVyVHJlZUhvc3Q6
OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5
ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKK3ZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRh
dGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKIHsKICAgICBtX3Nob3Vs
ZFN5bmNGcmFtZSA9IHRydWU7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJ
RCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHRpbGVSZWN0KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0
ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmIHRpbGVSZWN0KQogewogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKICAgICBt
X3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpV
cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuaAppbmRleCBiZDY2ZTRhNzBjMjJjMzY3MjUzMzhhOTJmZDBjZjc2OTAzNmQ0NjM2Li43
Mjk3ZWVkODFlMDVhMmVlMGYwMDVlZWEzZGY4MTg4NWZlYzNmMmI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjIs
MzAgKzIyLDMyIEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKLSNpbmNsdWRl
ICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdl
QmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXll
clRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZh
Y3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogI2luY2x1ZGUgIldlYkN1c3Rv
bUZpbHRlclByb2dyYW1Qcm94eS5oIgogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNz
IENvb3JkaW5hdGVkU3VyZmFjZTsKLWNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlOwog
CiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpD
b29yZGluYXRvcgotICAgICwgcHVibGljIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMg
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgLCBwdWJsaWMg
V2ViQ29yZTo6VXBkYXRlQXRsYXNDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyRmFjdG9yeQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZp
bHRlclByb2dyYW1Qcm94eUNsaWVudApAQCAtNzcsMTIgKzc5LDEyIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNl
OyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VT
Y2FsZUZhY3RvckNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6
OkltYWdlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJ
bWFnZSopIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5n
ZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50
UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFj
ZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQs
IGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5
ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRG
cmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKQEAgLTkwLDI1
ICs5MiwyNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkq
IGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3lu
Y0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5m
byYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lk
IHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRl
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRM
YXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6
Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXll
cklEPiYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
OwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmls
dGVycyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgogI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0
Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFz
KFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7
CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0
ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFp
bnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGludCkgT1ZFUlJJREU7CiAgICAg
dmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKIAotICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMy
X3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCBQYXNzT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJf
dCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogICAgIC8vIFVwZGF0ZUF0bGFzQ2xp
ZW50Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQs
IFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQpAQCAtMTE2LDcgKzExOCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBPVkVS
UklERTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRl
Q29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1
cmZhY2U6OkZsYWdzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRl
ZFN1cmZhY2U+IGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CiAKIHByb3RlY3RlZDoKICAg
ICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSopOwpAQCAtMTMwLDEw
ICsxMzIsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3Rvcigp
IGNvbnN0IE9WRVJSSURFOwogCiAgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3Jk
aW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNr
aW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVu
dHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJh
Y2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwogCiAgICAgdm9pZCBmbHVzaFBl
bmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKQEAgLTE4MCwxMSArMTgyLDExIEBAIHByaXZh
dGU6CiAgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXll
cjsKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gbV9y
ZWdpc3RlcmVkTGF5ZXJzOwotICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJz
VG9DcmVhdGU7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0
ZTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBWZWN0b3I8
V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvQ3JlYXRlOworICAgIFZlY3Rv
cjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CiAgICAg
SW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFVwZGF0
ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKKyAgICBWZWN0b3I8T3duUHRyPFdlYkNvcmU6OlVw
ZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
ICAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVy
UHJvZ3JhbXM7CkBAIC0yMTEsOCArMjEzLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fYW5pbWF0
aW9uc0xvY2tlZDsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYKKyNl
bmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNlbmRpZiAvLyBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
VGlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMGI1NjYyNmU4MWYxMGIx
ODc2MmI5OGYzNjU4MDRmOGUzMjYxNjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9S
RSkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tp
bmdTdG9yZUNsaWVudC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNl
IFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxl
SUQgPSAwOwotCi1Db29yZGluYXRlZFRpbGU6OkNvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRp
bGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBj
b25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkK
LSAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCi0gICAgLCBtX2Nv
b3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCi0gICAgLCBtX3JlY3QodGlsZWRCYWNraW5nU3RvcmUt
PnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCi0gICAgLCBtX0lEKEludmFs
aWRDb29yZGluYXRlZFRpbGVJRCkKLSAgICAsIG1fZGlydHlSZWN0KG1fcmVjdCkKLXsKLX0KLQot
Q29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRUaWxlKCkKLXsKLSAgICBpZiAobV9JRCAhPSBJ
bnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlKG1f
SUQpOwotfQotCi1ib29sIENvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxl
OjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBJbnRSZWN0IHRp
bGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOwotICAgIGlmICh0
aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXJ0eVJl
Y3QudW5pdGUodGlsZURpcnR5UmVjdCk7Ci19Ci0KLVZlY3RvcjxJbnRSZWN0PiBDb29yZGluYXRl
ZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQotewotICAgIGlmICghaXNEaXJ0eSgpKQotICAgICAg
ICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7Ci0KLSAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRh
dGVJbmZvOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1f
Y2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZv
LmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7Ci0gICAgaWYgKCFncmFwaGljc0Nv
bnRleHQpCi0gICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKLSAgICBncmFwaGljc0Nv
bnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKLSAg
ICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5j
b250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOwot
ICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50
KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50
cyhtX2RpcnR5UmVjdCkpOwotCi0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0eVJl
Y3Q7Ci0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3Qu
eSgpKTsKLSAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+
Y29udGVudHNTY2FsZSgpOwotICAgIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0KLSAgICBz
dGF0aWMgdWludDMyX3QgaWQgPSAxOwotICAgIGlmIChtX0lEID09IEludmFsaWRDb29yZGluYXRl
ZFRpbGVJRCkgewotICAgICAgICBtX0lEID0gaWQrKzsKLSAgICAgICAgLy8gV2UgbWF5IGdldCBh
biBpbnZhbGlkIElEIGR1ZSB0byB3cmFwLWFyb3VuZCBvbiBvdmVyZmxvdy4KLSAgICAgICAgaWYg
KG1fSUQgPT0gSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEKQotICAgICAgICAgICAgbV9JRCA9IGlk
Kys7Ci0gICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVj
dCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LT51cGRhdGVUaWxlKG1fSUQsIHVwZGF0
ZUluZm8sIG1fcmVjdCk7Ci0KLSAgICBWZWN0b3I8SW50UmVjdD4gdXBkYXRlZFJlY3RzOwotICAg
IHVwZGF0ZWRSZWN0cy5hcHBlbmQobV9kaXJ0eVJlY3QpOwotICAgIG1fZGlydHlSZWN0ID0gSW50
UmVjdCgpOwotICAgIHJldHVybiB1cGRhdGVkUmVjdHM7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRU
aWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQoKQotewotICAgIC8vIEhhbmRsZWQgYnkgdGlsZWRC
YWNraW5nU3RvcmVQYWludEVuZC4KLX0KLQotYm9vbCBDb29yZGluYXRlZFRpbGU6OmlzUmVhZHlU
b1BhaW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRU
aWxlSUQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpwYWludChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZFRpbGU6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAg
IG1fcmVjdCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOwotICAgIG1fZGly
dHlSZWN0ID0gbV9yZWN0OwotfQotCi1Db29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRl
ZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGll
bnQoY2xpZW50KQotewotfQotCi1QYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IENvb3JkaW5hdGVk
VGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVk
QmFja2luZ1N0b3JlLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRp
bmF0ZSkKLXsKLSAgICByZXR1cm4gQ29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRp
bGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRU
aWxlQmFja2VuZDo6cGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJL
aXQKLQotI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRUaWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmUxNWNjNzcyYjUzMWVhMWE0YTczNDFjMWQwNDZiNjUwOGY2Y2NmYy4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIENvb3JkaW5hdGVkVGlsZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkVGlsZV9oCi0KLSNpZiBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQotI2luY2x1ZGUgIlRpbGUuaCIKLSNpbmNsdWRlICJU
aWxlZEJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIldlYkNvcmUvSW50UmVjdC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIFRpbGVkQmFja2luZ1N0
b3JlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQ2xp
ZW50OwotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci0KLWNsYXNzIENvb3JkaW5hdGVkVGlsZSA6
IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxU
aWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQsIFdlYkNvcmU6OlRpbGVk
QmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNv
b3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFRpbGUoY2xpZW50LCB0
aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUpKTsgfQotICAgIH5Db29yZGluYXRlZFRp
bGUoKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHVw
ZGF0ZUJhY2tCdWZmZXIoKTsKLSAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwotICAg
IGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIGNvbnN0IENv
b3JkaW5hdGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KLSAg
ICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9
Ci0gICAgdm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi1wcml2YXRlOgot
ICAgIENvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqLCBXZWJDb3JlOjpUaWxl
ZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKLQotICAgIENvb3JkaW5hdGVkVGls
ZUNsaWVudCogbV9jbGllbnQ7Ci0gICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIG1fdGls
ZWRCYWNraW5nU3RvcmU7Ci0gICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5hdGU7Ci0gICAgV2ViQ29y
ZTo6SW50UmVjdCBtX3JlY3Q7Ci0KLSAgICB1aW50MzJfdCBtX0lEOwotICAgIFdlYkNvcmU6Oklu
dFJlY3QgbV9kaXJ0eVJlY3Q7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1f
bG9jYWxCdWZmZXI7Ci19OwotCi1jbGFzcyBDb29yZGluYXRlZFRpbGVDbGllbnQgewotcHVibGlj
OgotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkVGlsZUNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8m
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVU
aWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90
IHRpbGVJRCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgdWludDMy
X3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwotfTsKLQotY2xhc3MgQ29vcmRp
bmF0ZWRUaWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tl
bmQgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2lu
Z1N0b3JlQmFja2VuZD4gY3JlYXRlKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KSB7IHJl
dHVybiBhZG9wdFB0cihuZXcgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChjbGllbnQpKTsgfQotICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tp
bmdTdG9yZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsKLSAgICB2b2lkIHBh
aW50Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRUaWxl
QmFja2VuZChDb29yZGluYXRlZFRpbGVDbGllbnQqKTsKLSAgICBDb29yZGluYXRlZFRpbGVDbGll
bnQqIG1fY2xpZW50OwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRUaWxlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQ4MmQzMmZjNmZmYzEwMmNmNmQ0YTY0M2Y1YzMyODc4NGQ2YjU3MWMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0
IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVXBkYXRlQXRsYXM6OlVw
ZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24sIENvb3Jk
aW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAg
LCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKLXsKLSAgICBzdGF0aWMgdWludDMyX3QgbmV4dElE
ID0gMDsKLSAgICBtX0lEID0gKytuZXh0SUQ7Ci0gICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2Vy
T2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOwotICAgIG1fc3VyZmFjZSA9IENv
b3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGZsYWdzKTsKLQotICAgIC8vIEZJWE1FOiBD
dXJyZW50bHksIGlmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIFVwZGF0ZUF0bGFzIGdpdmVz
IHVwIGRyYXdpbmcgYW55dGhpbmcgaW1wbGljaXRseS4KLSAgICBpZiAoIW1fY2xpZW50LT5jcmVh
dGVVcGRhdGVBdGxhcyhtX0lELCBtX3N1cmZhY2UpKQotICAgICAgICBtX3N1cmZhY2UuY2xlYXIo
KTsKLX0KLQotVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCi17Ci0gICAgaWYgKG1fc3VyZmFj
ZSkKLSAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOwotfQotCi12b2lk
IFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYXJlYUFs
bG9jYXRvcikgewotICAgICAgICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2VuZXJh
bEFyZWFBbGxvY2F0b3Ioc2l6ZSgpKSk7Ci0gICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWlu
aW11bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVXBkYXRl
QXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKLXsKLSAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsK
LX0KLQotUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50
aW5nT25BdmFpbGFibGVCdWZmZXIodWludDMyX3QmIGF0bGFzSUQsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUsIEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgbV9pbmFjdGl2aXR5SW5TZWNv
bmRzID0gMDsKLSAgICBidWlsZExheW91dElmTmVlZGVkKCk7Ci0gICAgSW50UmVjdCByZWN0ID0g
bV9hcmVhQWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKTsKLQotICAgIC8vIE5vIGF2YWlsYWJsZSBi
dWZmZXIgd2FzIGZvdW5kLCByZXR1cm5pbmcgbnVsbC4KLSAgICBpZiAocmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKLQotICAgIGlm
ICghbV9zdXJmYWNlKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+
KCk7Ci0KLSAgICBhdGxhc0lEID0gbV9JRDsKLQotICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRl
IGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgotICAgIG9mZnNldCA9IHJlY3QubG9j
YXRpb24oKTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBt
X3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKLQotICAgIGlmIChzdXBwb3J0
c0FscGhhKCkpIHsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50
UmVjdChJbnRQb2ludDo6emVybygpLCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNw
YWNlRGV2aWNlUkdCKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdyYXBoaWNz
Q29udGV4dC5yZWxlYXNlKCk7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L1VwZGF0ZUF0bGFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTg2M2I4NGQw
ZDhkYmFjY2JhZTM5YjEyZTIzNDE0ODMzODc2MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICsw
LDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5j
LgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFVwZGF0ZUF0bGFzX2gKLSNkZWZp
bmUgVXBkYXRlQXRsYXNfaAotCi0jaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgotI2luY2x1ZGUg
IkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dDsKLWNsYXNzIEludFBvaW50OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xh
c3MgVXBkYXRlQXRsYXNDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVV
cGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFj
ZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCkgPSAwOwotfTsKLQotY2xhc3MgVXBkYXRlQXRsYXMgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFVwZGF0ZUF0bGFzKTsKLXB1YmxpYzoKLSAgICBVcGRhdGVBdGxhcyhVcGRhdGVBdGxh
c0NsaWVudCosIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOwotICAg
IH5VcGRhdGVBdGxhcygpOwotCi0gICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgbnVs
bCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCi0gICAgUGFzc093blB0
cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZl
cih1aW50MzJfdCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6Oklu
dFBvaW50JiBvZmZzZXQpOwotICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKLSAgICBib29sIHN1
cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKTsg
fQotCi0gICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIWlzSW5Vc2UoKSk7Ci0gICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyAr
PSBzZWNvbmRzOwotICAgIH0KLSAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgY29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7Ci0gICAgICAg
IHJldHVybiBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2U7
Ci0gICAgfQotICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9jYXRv
cjsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwotCi1wcml2
YXRlOgotICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKLSAgICBPd25QdHI8R2VuZXJh
bEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKLSAg
ICB1aW50MzJfdCBtX0lEOwotfTsKLQotfQotI2VuZGlmCi0jZW5kaWYgLy8gVXBkYXRlQXRsYXNf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185722</attachid>
            <date>2013-01-31 02:14:52 -0800</date>
            <delta_ts>2013-01-31 20:37:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108149-20130131021216.patch</filename>
            <type>text/plain</type>
            <size>388280</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxMzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTY0MDhhODA5ZmRlYmNl
ZTdlODg3ZTNhMTJkYzc5MTI3MzNjZDE2Mi4uOTRhOGU1OTQ2NGNmYjE2OTk1ZWQxN2U5MTMyMWZm
MTlhMjZiNzk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0NiBAQAorMjAxMy0wMS0zMSAgSmFl
IEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5h
dGVkIEdyYXBoaWNzIDogTW92ZSBDb29yZGluYXRlZEdyYXBoaWNzIHJlbGF0ZWQgZmlsZXMgdG8g
V2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA4MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBtb3ZlcyBDb29yZGluYXRlZCBHcmFwaGljcyByZWxhdGVkIGNvZGUgdG8gV2Vi
Q29yZS4gVG8KKyAgICAgICAgaW1wbGVtZW50IFRocmVhZGVkIENvb3JkaW5hdGVkIEdyYXBoaWNz
LCBtb3N0IG9mIENvb3JkaWFudGVkIEdyYXBoaWNzCisgICAgICAgIGNvZGUgc2hvdWxkIGJlIHNo
YXJlZC4gVGhlcmVmb3JlLCB0aGV5IHNob3VsZCByZXNpZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9m
CisgICAgICAgIFdlYktpdDIuCisKKyAgICAgICAgV2hlbiBtb3ZpbmcgdG8gV2ViQ29yZSwgdHdv
IHJlbmFtaW5ncyBoYXZlIGJlZW4gZG9uZS4KKworICAgICAgICAxLiBSZW5hbWUgTGF5ZXJUcmVl
UmVuZGVyZXIgdG8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLgorCisgICAgICAgIDIuIFJlbmFt
ZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gdG8K
KyAgICAgICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBDb29yZGluYXRlZEN1
c3RvbUZpbHRlck9wZXJhdGlvbiwKKyAgICAgICAgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmg6CisgICAgICAgIChHcmFw
aGljc0xheWVyVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRv
ci5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0
b3I6OkFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6fkFy
ZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6ZXhwYW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkFyZWFBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFs
bG9jYXRvcjo6b3ZlcmhlYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6cm91
bmRBbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpH
ZW5lcmFsQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9j
YXRvcjo6fkdlbmVyYWxBcmVhQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxB
cmVhQWxsb2NhdG9yOjpmcmVlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFs
bG9jYXRvcjo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OmZpdHNXaXRoaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZUZyb21Ob2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Fy
ZWFBbGxvY2F0b3IuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6bmV4
dFBvd2VyT2ZUd28pOgorICAgICAgICAoQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3Jl
OjpBcmVhQWxsb2NhdG9yOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6
Om1pbmltdW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnNl
dE1pbmltdW1BbGxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6Om1h
cmdpbik6CisgICAgICAgIChXZWJDb3JlOjpBcmVhQWxsb2NhdG9yOjpzZXRNYXJnaW4pOgorICAg
ICAgICAoR2VuZXJhbEFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoTm9kZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0
b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVm
ZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNl
dEJhY2tCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnJlbW92ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OnJlbW92ZUFsbFRpbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjp1cGRhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjp0ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
OjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpw
YWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3Qm9yZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3UmVwYWludENvdW50ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNvbW1pdFRpbGVP
cGVyYXRpb25zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OkNvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZVRpbGU6OnNjYWxlKToKKyAgICAgICAgKENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OkNvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpy
ZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5o
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEN1c3RvbUZpbHRlck9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uOjpwcm9ncmFtSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb246OkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRD
dXN0b21GaWx0ZXJQcm9ncmFtLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJQcm9ncmFtLmguCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW06OkNvb3JkaW5h
dGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjp0b0Nvb3JkaW5hdGVkTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUxheWVyU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFu
Z2VGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
ZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6On5Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGRBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0pOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFByZXNlcnZlczNEKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0TWFza3NUb0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldERyYXdzQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0T3BhY2l0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRz
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzTmVlZHNEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50
Q291bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dENvbnRlbnRzVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldE1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcik6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlz
cGxheUluUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hD
b21wb3NpdGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3lu
Y0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c3luY0ZpbHRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c3luY0xheWVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21w
b3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmltYWdlQmFja2luZ1Zpc2libGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tp
bmdTdG9yZVBhaW50QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRSb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZWZmZWN0aXZlQ29udGVudHNTY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmFkanVzdENvbnRlbnRzU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZVBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVQYWludEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQ29u
dGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsYW1wVG9Db250ZW50c1JlY3RJZlJlY3RJ
c0luZmluaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRl
VGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0
ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1v
dmVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBk
YXRlQ29udGVudEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXRDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFzUGVuZGluZ1Zpc2li
bGVDaGFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZWdyYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1
dGVQaXhlbEFsaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGFz
QWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3Jtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZEFuaW1hdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhdXNlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3Zl
QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c3VzcGVuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpyZXN1bWVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQpOgorICAgICAg
ICAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0Rml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y292ZXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zml4ZWRUb1ZpZXdwb3J0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaXNwYXRjaE9uTWFpblRo
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpib3VuZGVkU2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6bGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6fkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnBhaW50VG9DdXJyZW50R0xDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6YW5pbWF0aW9uRnJhbWVSZWFkeSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlcXVlc3RBbmltYXRpb25GcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9HcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRD
b250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6dXBkYXRlVmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Nyb2xsUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVh
dGVDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpz
eW5jQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
ZGVzdHJveUNhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnNldExheWVyUmVwYWludENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyRmlsdGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dy
YW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxheWVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlbGV0ZUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0Um9v
dExheWVySUQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpw
cmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVk
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZXNldEJh
Y2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVRpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVJbWFnZUJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVJbWFnZUJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjbGVh
ckltYWdlQmFja2luZ0NvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6cmVtb3ZlSW1hZ2VCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVJlbGVhc2VkSW1hZ2VC
YWNraW5nc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpmbHVzaExheWVyQ2hhbmdlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbmRlck5leHRGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmVuc3VyZVJvb3RM
YXllcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnN5bmNS
ZW1vdGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6cHVyZ2VHTFJlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnB1cmdlQmFja2luZ1N0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1hdGlvbnNMb2NrZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXRhY2gpOgorICAgICAgICAo
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphcHBlbmRVcGRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRBY3RpdmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRCYWNrZ3JvdW5kQ29sb3Ip
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmguCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCk6CisgICAgICAg
IChDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUpOgorICAgICAgICAoVGlsZVVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OlRpbGVVcGRhdGU6OlRpbGVV
cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRE
cmF3c0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpsYXllckJ5SUQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpub3RpZnlBbmltYXRpb25TdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6bm90aWZ5Rmx1c2hSZXF1aXJlZCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmc6On5Db29yZGluYXRlZEltYWdlQmFja2luZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6YWRkSG9zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6bWFya0RpcnR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbGVhc2VTdXJmYWNlSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZVZpc2liaWxpdHlJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJD
b250ZW50c1RpbWVyRmlyZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmcpOgorICAgICAgICAoQ29vcmRpbmF0b3IpOgorICAgICAgICAoSG9zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZzo6aWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVy
SW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllckluZm8uaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm86OkNvb3JkaW5hdGVkTGF5ZXJJbmZvKToK
KyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJJbmZvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
U3VyZmFjZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZFN1cmZhY2U6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmguCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkU3VyZmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6On5Db29yZGluYXRlZFN1cmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpzdXBwb3J0c0FscGhhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmNw
cDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAuCisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZTo6Q29vcmRpbmF0ZWRUaWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZTo6fkNvb3JkaW5hdGVkVGlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGU6OmlzRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRUaWxlOjppbnZhbGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkVGlsZTo6dXBkYXRlQmFja0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRl
ZFRpbGU6OnN3YXBCYWNrQnVmZmVyVG9Gcm9udCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGlu
YXRlZFRpbGU6OmlzUmVhZHlUb1BhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVk
VGlsZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjpyZXNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Q29vcmRpbmF0ZWRU
aWxlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpj
cmVhdGVUaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OnBh
aW50Q2hlY2tlclBhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5o
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDb29yZGluYXRlZFRpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRUaWxlOjpjb29yZGluYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb3JkaW5h
dGVkVGlsZTo6cmVjdCk6CisgICAgICAgIChDb29yZGluYXRlZFRpbGVDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29vcmRpbmF0ZWRUaWxlQ2xpZW50Ojp+Q29vcmRpbmF0ZWRUaWxlQ2xpZW50
KToKKyAgICAgICAgKENvb3JkaW5hdGVkVGlsZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
Q29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVwZGF0ZUluZm8uaDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VVcGRhdGVJ
bmZvLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN1cmZhY2VVcGRhdGVJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvOjpTdXJmYWNlVXBkYXRlSW5mbyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0
bGFzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdl
YkNvcmU6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6VXBk
YXRlQXRsYXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRl
QXRsYXM6OmRpZFN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjpi
ZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRs
YXMuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVXBkYXRlQXRsYXNDbGllbnQpOgor
ICAgICAgICAoVXBkYXRlQXRsYXMpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OnNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OnN1cHBvcnRzQWxwaGEpOgorICAg
ICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmFkZFRpbWVJbmFjdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpVcGRhdGVBdGxhczo6aXNJbmFjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpVcGRh
dGVBdGxhczo6aXNJblVzZSk6CisKIDIwMTMtMDEtMzEgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gVHJhY2Ugbm90IG9ubHkgbWFqb3IgRE9NIEdD
cyBidXQgYWxzbyBtaW5vciBET00gR0NzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZDgzMTBjYjVkYTA2MmVjNDlk
YzlmZTQxMDhiNGExYmVmMmMyNmE5MC4uM2M0NDM4NTMwZGY0NmZlNmViNGMxOWU2M2EyN2FhY2Yy
ZmVlZGI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAxMy0wMS0zMSAgSmFlIEh5
dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVk
IEdyYXBoaWNzIDogTW92ZSBDb29yZGluYXRlZEdyYXBoaWNzIHJlbGF0ZWQgZmlsZXMgdG8gV2Vi
Q29yZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4
MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBtb3ZlcyBDb29yZGluYXRlZCBHcmFwaGljcyByZWxhdGVkIGNvZGUgdG8gV2ViQ29y
ZS4gVG8KKyAgICAgICAgaW1wbGVtZW50IFRocmVhZGVkIENvb3JkaW5hdGVkIEdyYXBoaWNzLCBt
b3N0IG9mIENvb3JkaWFudGVkIEdyYXBoaWNzCisgICAgICAgIGNvZGUgc2hvdWxkIGJlIHNoYXJl
ZC4gVGhlcmVmb3JlLCB0aGV5IHNob3VsZCByZXNpZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9mCisg
ICAgICAgIFdlYktpdDIuCisKKyAgICAgICAgV2hlbiBtb3ZpbmcgdG8gV2ViQ29yZSwgdHdvIHJl
bmFtaW5ncyBoYXZlIGJlZW4gZG9uZS4KKworICAgICAgICAxLiBSZW5hbWUgTGF5ZXJUcmVlUmVu
ZGVyZXIgdG8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLgorCisgICAgICAgIDIuIFJlbmFtZSBX
ZWJDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gdG8KKyAg
ICAgICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBDb29yZGluYXRlZEN1c3Rv
bUZpbHRlck9wZXJhdGlvbiwKKyAgICAgICAgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAg
KGhlYWRlcnNfZm9yX3R5cGUpOgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHA6CisgICAgICAgIChDb3JlSVBD
Ojo6OmRlY29kZSk6CisgICAgICAgICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaDoK
KyAgICAgICAgKEhhbmRsZSk6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6OmNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZSk6CisgICAgICAgIChFd2tWaWV3OjpkaXNwbGF5VGltZXJGaXJlZCk6Cisg
ICAgICAgIChFd2tWaWV3OjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwOgorICAgICAgICAoUVF1aWNrV2ViUGFnZVByaXZhdGU6
OnBhaW50KToKKyAgICAgICAgKFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAoUVJh
d1dlYlZpZXc6OnNldEFjdGl2ZSk6CisgICAgICAgIChRUmF3V2ViVmlldzo6Y29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKToKKyAgICAgICAgKFFSYXdXZWJWaWV3OjpwYWludCk6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdfcC5oOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6fkNvb3JkaW5hdGVkTGF5ZXJUcmVl
SG9zdFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpc3BhdGNoVXBkYXRlKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcik6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVy
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0
ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnJlbW92ZVVwZGF0ZUF0bGFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdl
YktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5
ZXJzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNl
dFJvb3RDb21wb3NpdGluZ0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
c2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSk6CisgICAgICAg
IChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDdXN0b21GaWx0
ZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OmRpZFJlbmRlckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVJbWFnZUJhY2tpbmcpOgorICAgICAgICAo
V2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
OjpyZW1vdmVJbWFnZUJhY2tpbmcpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6c2V0Q29udGVudHNTaXplKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2Vk
KToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldFZp
c2libGVDb250ZW50c1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNhbnZh
cyk6CisgICAgICAgIChXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzeW5j
Q2FudmFzKToKKyAgICAgICAgKFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmRlc3Ryb3lDYW52YXMpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94
eS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNl
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGll
bnRFZmwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50
RWZsOjpzZXRSZW5kZXJlckFjdGl2ZSk6CisgICAgICAgICogVUlQcm9jZXNzL3F0L1F0V2ViUGFn
ZVNHTm9kZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNvbnRlbnRzU0dOb2RlOjpDb250ZW50c1NH
Tm9kZSk6CisgICAgICAgIChXZWJLaXQ6OkNvbnRlbnRzU0dOb2RlOjpyZW5kZXIpOgorICAgICAg
ICAoV2ViS2l0OjpDb250ZW50c1NHTm9kZTo6fkNvbnRlbnRzU0dOb2RlKToKKyAgICAgICAgKFdl
YktpdDo6Q29udGVudHNTR05vZGU6OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSk6CisgICAgICAg
IChDb250ZW50c1NHTm9kZSk6CisgICAgICAgIChXZWJLaXQ6OlF0V2ViUGFnZVNHTm9kZTo6c2V0
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlU0dOb2RlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChRdFdlYlBhZ2VTR05vZGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlVGlsZSk6CisgICAgICAgIChX
ZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6dXBkYXRlVGlsZSk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdCk6CisKIDIwMTMtMDEtMzEgIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96
ZG55YWtvdkBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBSZXF1ZXN0TWFuYWdlckNs
aWVudEVmbCwgRG93bmxvYWRNYW5hZ2VyRWZsIGFuZCBDb250ZXh0SGlzdG9yeUNsaWVudEVmbCBz
aG91bGQgYmUgYmFzZWQgb24gQyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggODAzNjQ0Yjdh
ZTliMTQ2OWY0ZjA4NWE5YTM3YTdmMjExODZmMzllNi4uMDUyNjcwZmVmNTljM2NlOTUzM2NjNzVj
ZDI1ODY1ZDcxZjExMTZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTU1LDYgKzU1LDggQEAg
c2V0KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6eiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovbmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L29wZW50eXBlIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAi
CisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3JtcyIKICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcCIKQEAgLTE5ODcsNiArMTk4OSwxNCBA
QCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU3BvdExpZ2h0U291
cmNlLmNwcAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFB
bGxvY2F0b3IuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkU3VyZmFjZS5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRUaWxlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
ckJhY2tpbmdTdG9yZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggYzNiOGZjMDIwYzEyNmE2NGQ2MTlh
N2Q3MGJlYmJjOTdiZGJkZjIxZC4uMThkZmUxZTcwOWY2OGVjMmYwMDg3ZjE3YzY3YTE4ODg5M2My
YjMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yMjM5LDYgKzIyMzksMTggQEAgSEVBREVSUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dyYXBoaWNzU3VyZmFjZVRva2VuLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oIFwKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllci5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8u
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
U3VyZmFjZS5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRUaWxlLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9TdXJmYWNlVXBkYXRlSW5mby5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmggXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclBy
b2dyYW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0
dXJlTWFwcGVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlLmggXApAQCAtMjg3NCw2ICsyODg2LDE0IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L1BhdGhRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1BhdHRl
cm5RdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgXAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNw
cCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRTdXJmYWNlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkVGlsZS5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmgKaW5kZXggOGY3NWY1Zjg2NDNlMzlmMzNmNDViNmE0MTM0ZjY2NmRiMmRj
ODg2NS4uNjk0YjVhMzJkZTYxMmI0NzdhNzA1OWQwMjI5MGNjMDBiZjIwMmQyYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmgKQEAgLTg0LDcgKzg0LDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsK
ICNlbmRpZgogCi0gICAgLy8gRklYTUU6IEl0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciByZW1vdmlu
ZyBkZXBlbmRlbmN5IG9mIExheWVyVHJlZVJlbmRlcmVyIG9uIEdyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLgorICAgIC8vIEZJWE1FOiBJdCB3aWxsIGJlIHJlbW92ZWQgYWZ0ZXIgcmVtb3Zpbmcg
ZGVwZW5kZW5jeSBvZiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUgb24gR3JhcGhpY3NMYXllclRl
eHR1cmVNYXBwZXIuCiAgICAgdm9pZCBzZXRIYXNPd25CYWNraW5nU3RvcmUoYm9vbCBiKSB7IG1f
aGFzT3duQmFja2luZ1N0b3JlID0gYjsgfQogICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKFBhc3NS
ZWZQdHI8VGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZT4pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQXJlYUFsbG9jYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWY1NDE4NWI5OGU4YTcwOGE2ZDZmMWFi
MjA0NWQyYjEyMzQ4MzYwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcApAQCAtMCww
ICsxLDMzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNp
bmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXJlYUFs
bG9jYXRvcjo6QXJlYUFsbG9jYXRvcihjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXpl
KHNpemUpCisgICAgLCBtX21pbkFsbG9jKDEsIDEpCisgICAgLCBtX21hcmdpbigwLCAwKQorewor
fQorCitBcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQgQXJlYUFs
bG9jYXRvcjo6ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0gbV9z
aXplLmV4cGFuZGVkVG8oc2l6ZSk7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kQnko
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgKz0gc2l6ZTsKK30KKwordm9pZCBB
cmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IEludFJlY3QmKQoreworfQorCitpbnQgQXJlYUFs
bG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCitJbnRTaXpl
IEFyZWFBbGxvY2F0b3I6OnJvdW5kQWxsb2NhdGlvbihjb25zdCBJbnRTaXplJiBzaXplKSBjb25z
dAoreworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7Cisg
ICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBp
bnQgZXh0cmEgPSB3aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisg
ICAgICAgIHdpZHRoICs9IG1fbWluQWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0g
aGVpZ2h0ICUgbV9taW5BbGxvYy5oZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhl
aWdodCArPSBtX21pbkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7CisKKyAgICByZXR1cm4gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVh
QWxsb2NhdG9yKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBBcmVhQWxsb2NhdG9yKG5leHRQ
b3dlck9mVHdvKHNpemUpKQoreworICAgIG1fcm9vdCA9IG5ldyBOb2RlKCk7CisgICAgbV9yb290
LT5yZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
KyAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXplOworICAgIG1fcm9vdC0+cGFyZW50ID0g
MDsKKyAgICBtX3Jvb3QtPmxlZnQgPSAwOworICAgIG1fcm9vdC0+cmlnaHQgPSAwOworICAgIG1f
bm9kZUNvdW50ID0gMTsKKyAgICBzZXRNaW5pbXVtQWxsb2NhdGlvbihJbnRTaXplKDgsIDgpKTsK
K30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigpCit7Cisg
ICAgZnJlZU5vZGUobV9yb290KTsKK30KKwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJl
ZU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZSkgeworICAgICAgICBmcmVlTm9kZShu
b2RlLT5sZWZ0KTsKKyAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOworICAgIH0KKyAgICBk
ZWxldGUgbm9kZTsKK30KKwordm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKG5leHRQb3dlck9m
VHdvKHNpemUpKTsKKworICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6ZSkKKyAg
ICAgICAgcmV0dXJuOyAvLyBObyBjaGFuZ2UuCisKKyAgICBpZiAoIW1fcm9vdC0+bGVmdCAmJiBt
X3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7CisgICAgICAgIC8vIE5vIGFsbG9jYXRp
b25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCisgICAgICAg
IG1fcm9vdC0+cmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1cnJlbnQg
cm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCisgICAgTm9kZSogb2xkUm9vdCA9IG1fcm9vdDsKKyAg
ICBTcGxpdCBzcGxpdDsKKyAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhlaWdodCgp
KQorICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgIGVsc2UKKyAgICAgICAgc3BsaXQgPSBT
cGxpdE9uWTsKKworICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6ZSkgewor
ICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkpCisgICAg
ICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICBlbHNlIGlmIChtX3Jvb3QtPnJlY3Qu
aGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9u
WDsKKyAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKKyAgICAgICAgTm9kZSogcmln
aHQgPSBuZXcgTm9kZSgpOworICAgICAgICBtX25vZGVDb3VudCArPSAyOworICAgICAgICBtX3Jv
b3QtPnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcGFyZW50LT5wYXJlbnQgPSAwOworICAgICAg
ICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7CisgICAgICAgIHBhcmVudC0+cmlnaHQgPSByaWdodDsK
KyAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5zaXplKCk7CisgICAg
ICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7CisgICAgICAgIHJpZ2h0LT5sZWZ0ID0gMDsKKyAg
ICAgICAgcmlnaHQtPnJpZ2h0ID0gMDsKKyAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gbV9y
b290LT5yZWN0LnNpemUoKTsKKyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7CisgICAg
ICAgICAgICBwYXJlbnQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+
cmVjdC55KCksCisgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jv
b3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KG1f
cm9vdC0+cmVjdC54KCkgKyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwK
KyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdo
dCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9IEludFJl
Y3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBt
X3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpICogMik7CisgICAgICAg
ICAgICByaWdodC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0
LnkoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVj
dC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIHNw
bGl0ID0gKHNwbGl0ID09IFNwbGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7CisgICAgICAg
IG1fcm9vdCA9IHBhcmVudDsKKyAgICB9CisgICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IEludFNpemUmIHNpemUx
LCBjb25zdCBJbnRTaXplJiBzaXplMikKK3sKKyAgICByZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBz
aXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdodCgpOworfQorCitJ
bnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIEludFNpemUgcm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKKyAgICBy
b3VuZGVkID0gbmV4dFBvd2VyT2ZUd28ocm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgo
KSA8PSAwIHx8IHJvdW5kZWQud2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJv
dW5kZWQuaGVpZ2h0KCkgPD0gMCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgp
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxv
Y2F0ZUZyb21Ob2RlKHJvdW5kZWQsIG1fcm9vdCk7CisgICAgaWYgKHBvaW50LngoKSA+PSAwKQor
ICAgICAgICByZXR1cm4gSW50UmVjdChwb2ludCwgc2l6ZSk7CisgICAgcmV0dXJuIEludFJlY3Qo
KTsKK30KKworSW50UG9pbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgTm9kZSogbm9kZSkKK3sKKyAgICAvLyBGaW5kIHRoZSBiZXN0
IG5vZGUgdG8gaW5zZXJ0IGludG8sIHdoaWNoIHNob3VsZCBiZQorICAgIC8vIGEgbm9kZSB3aXRo
IHRoZSBsZWFzdCBhbW91bnQgb2YgdW51c2VkIHNwYWNlIHRoYXQgaXMKKyAgICAvLyBiaWcgZW5v
dWdoIHRvIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCBzaXplLgorICAgIHdoaWxlIChub2RlKSB7Cisg
ICAgICAgIC8vIEdvIGRvd24gYSBsZXZlbCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJp
Z2h0CisgICAgICAgIC8vIHN1Yi10cmVlIGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxv
Y2F0aW9uLgorICAgICAgICBOb2RlKiBsZWZ0ID0gbm9kZS0+bGVmdDsKKyAgICAgICAgTm9kZSog
cmlnaHQgPSBub2RlLT5yaWdodDsKKyAgICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXpl
LCBsZWZ0LT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0
aGluKHNpemUsIHJpZ2h0LT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVm
dC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCisgICAg
ICAgICAgICAgICAgICAgIHx8IGxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxh
cmdlc3RGcmVlLmhlaWdodCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0
RnJlZSB2YWx1ZXMgbWF5IGJlIGEgbGl0dGxlIG92ZXJzaXplZCwKKyAgICAgICAgICAgICAgICAg
ICAgLy8gc28gdHJ5IHRoZSBsZWZ0IHN1Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJl
ZS4KKyAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2Rl
KHNpemUsIGxlZnQpOworICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgbm9kZSA9IGxlZnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0
c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKQorICAgICAgICAgICAgbm9kZSA9IHJp
Z2h0OworICAgICAgICBlbHNlIGlmIChsZWZ0IHx8IHJpZ2h0KSB7CisgICAgICAgICAgICAvLyBO
ZWl0aGVyIHN1Yi1ub2RlIGhhcyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAg
ICAgICAgIHJldHVybiBJbnRQb2ludCgtMSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNX
aXRoaW4oc2l6ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBu
ZWVkIHRvIHNwbGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAg
U3BsaXQgc3BsaXQ7CisgICAgICAgICAgICBpZiAoZml0c1dpdGhpbihJbnRTaXplKHNpemUud2lk
dGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAg
ICAgICAgICAgICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBpbnZl
cnNlIG9mCisgICAgICAgICAgICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0
aW9uIHRvIHRyeSB0byBiYWxhbmNlCisgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQg
c3BhY2UgYXMgZnVydGhlciBzdWJkaXZpc2lvbnMgaGFwcGVuLgorICAgICAgICAgICAgICAgIGlm
IChub2RlLT5wYXJlbnQKKyAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0
LT5yZWN0LngoKSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2Rl
LT5wYXJlbnQpCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0
KCkpCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5o
ZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0
IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25Y
OworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAg
ICAgIC8vIFNwbGl0IGFsb25nIHRoZSBZIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxp
dCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBD
YW5ub3Qgc3BsaXQgZnVydGhlciAtIGFsbG9jYXRlIHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAg
ICBub2RlLT5sYXJnZXN0RnJlZSA9IEludFNpemUoMCwgMCk7CisgICAgICAgICAgICAgICAgdXBk
YXRlTGFyZ2VzdEZyZWUobm9kZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3Qu
bG9jYXRpb24oKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5v
ZGUsIHRoZW4gZ28gYXJvdW5kIGFnYWluIHVzaW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgorICAgICAg
ICAgICAgbm9kZSA9IHNwbGl0Tm9kZShub2RlLCBzcGxpdCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBDYW5ub3QgcG9zc2libHkgZml0IGludG8gdGhpcyBub2RlLgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEludFBvaW50KC0xLCAt
MSk7Cit9CisKK0dlbmVyYWxBcmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRv
cjo6c3BsaXROb2RlCisgICAgKE5vZGUqIG5vZGUsIFNwbGl0IHNwbGl0KQoreworICAgIE5vZGUq
IGxlZnQgPSBuZXcgTm9kZSgpOworICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICBt
X25vZGVDb3VudCArPSAyOworICAgIGxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgbGVmdC0+bGVm
dCA9IDA7CisgICAgbGVmdC0+cmlnaHQgPSAwOworICAgIHJpZ2h0LT5wYXJlbnQgPSBub2RlOwor
ICAgIHJpZ2h0LT5sZWZ0ID0gMDsKKyAgICByaWdodC0+cmlnaHQgPSAwOworICAgIG5vZGUtPmxl
ZnQgPSBsZWZ0OworICAgIG5vZGUtPnJpZ2h0ID0gcmlnaHQ7CisKKyAgICBpZiAoc3BsaXQgPT0g
U3BsaXRPblgpIHsKKyAgICAgICAgbGVmdC0+cmVjdCA9IEludFJlY3Qobm9kZS0+cmVjdC54KCks
IG5vZGUtPnJlY3QueSgpLAorICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9k
ZS0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gSW50UmVjdChsZWZ0LT5y
ZWN0Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRo
KCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZWZ0
LT5yZWN0ID0gSW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAg
ICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsKKyAgICAg
ICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBsZWZ0LT5yZWN0Lm1heFko
KSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAv
IDIpOworICAgIH0KKworICAgIGxlZnQtPmxhcmdlc3RGcmVlID0gbGVmdC0+cmVjdC5zaXplKCk7
CisgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6ZSgpOworICAgIG5vZGUt
Pmxhcmdlc3RGcmVlID0gcmlnaHQtPmxhcmdlc3RGcmVlOworICAgIHJldHVybiBsZWZ0OworfQor
Cit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0RnJlZShOb2RlKiBub2Rl
KQoreworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudCkpIHsKKyAgICAgICAgbm9kZS0+
bGFyZ2VzdEZyZWUgPSBJbnRTaXplKAorICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+
bGFyZ2VzdEZyZWUud2lkdGgoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkpLAor
ICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCksIG5v
ZGUtPnJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkKKyAgICAgICAgICAgICk7CisgICAgfQor
fQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IEludFJlY3QmIHJl
Y3QpCit7CisgICAgLy8gTG9jYXRlIHRoZSBub2RlIHRoYXQgY29udGFpbnMgdGhlIGFsbG9jYXRl
ZCByZWdpb24uCisgICAgTm9kZSogbm9kZSA9IG1fcm9vdDsKKyAgICBJbnRQb2ludCBwb2ludCA9
IHJlY3QubG9jYXRpb24oKTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+
bGVmdCAmJiBub2RlLT5sZWZ0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT5sZWZ0OworICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdodCAmJiBub2RlLT5y
aWdodC0+cmVjdC5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICBub2RlID0gbm9kZS0+cmln
aHQ7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsgLy8gUG9pbnQg
aXMgY29tcGxldGVseSBvdXRzaWRlIHRoZSB0cmVlLgorICAgIH0KKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJlZSBhbmQgdGhlbiB3
b3JrIHVwd2FyZHMgdGhyb3VnaCB0aGUgdHJlZQorICAgIC8vIHJlY29tYmluaW5nIGFuZCBkZWxl
dGluZyBub2RlcyB1bnRpbCB3ZSByZWFjaCBhIHNpYmxpbmcKKyAgICAvLyB0aGF0IGlzIHN0aWxs
IGFsbG9jYXRlZC4KKyAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgpOwor
ICAgIHdoaWxlIChub2RlLT5wYXJlbnQpIHsKKyAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVm
dCA9PSBub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5yaWdodC0+bGFyZ2Vz
dEZyZWUgIT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50
LT5sZWZ0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3Quc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5vZGUgPSBub2RlLT5w
YXJlbnQ7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOworICAgICAgICBmcmVlTm9kZShu
b2RlLT5yaWdodCk7CisgICAgICAgIG1fbm9kZUNvdW50IC09IDI7CisgICAgICAgIG5vZGUtPmxl
ZnQgPSAwOworICAgICAgICBub2RlLT5yaWdodCA9IDA7CisgICAgICAgIG5vZGUtPmxhcmdlc3RG
cmVlID0gbm9kZS0+cmVjdC5zaXplKCk7CisgICAgfQorCisgICAgLy8gTWFrZSB0aGUgcmVzdCBv
ZiBvdXIgYW5jZXN0b3JzIGhhdmUgdGhlIGNvcnJlY3QgImxhcmdlc3QgZnJlZSBzaXplIi4KKyAg
ICB1cGRhdGVMYXJnZXN0RnJlZShub2RlKTsKK30KKworaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9y
OjpvdmVyaGVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbm9kZUNvdW50ICogc2l6ZW9mKE5v
ZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40MTgwY2FlMjM3NzUwZjZmYTM0M2IwYmM3ZjJhOTMwOTM5MDhkMzJmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0FyZWFBbGxvY2F0b3IuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAorI2Rl
ZmluZSBBcmVhQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgaW50IG5leHRQb3dlck9m
VHdvKGludCBudW1iZXIpCit7CisgICAgLy8gVGhpcyBpcyBhIGZhc3QgdHJpY2sgdG8gZ2V0IG5l
eHRQb3dlck9mVHdvIGZvciBhbiBpbnRlZ2VyLgorICAgIC0tbnVtYmVyOworICAgIG51bWJlciB8
PSBudW1iZXIgPj4gMTsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDI7CisgICAgbnVtYmVyIHw9
IG51bWJlciA+PiA0OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gODsKKyAgICBudW1iZXIgfD0g
bnVtYmVyID4+IDE2OworICAgIG51bWJlcisrOworICAgIHJldHVybiBudW1iZXI7Cit9CisKK2lu
bGluZSBJbnRTaXplIG5leHRQb3dlck9mVHdvKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
cmV0dXJuIEludFNpemUobmV4dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwgbmV4dFBvd2VyT2ZU
d28oc2l6ZS5oZWlnaHQoKSkpOworfQorCitjbGFzcyBBcmVhQWxsb2NhdG9yIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFs
IH5BcmVhQWxsb2NhdG9yKCk7CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKworICAgIEludFNpemUgbWluaW11bUFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX21pbkFsbG9jOyB9CisgICAgdm9pZCBzZXRNaW5pbXVtQWxsb2NhdGlvbihjb25zdCBJbnRT
aXplJiBzaXplKSB7IG1fbWluQWxsb2MgPSBzaXplOyB9CisKKyAgICBJbnRTaXplIG1hcmdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9CisgICAgdm9pZCBzZXRNYXJnaW4oY29uc3QgSW50
U2l6ZSAmbWFyZ2luKSB7IG1fbWFyZ2luID0gbWFyZ2luOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhwYW5kKGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIGV4cGFuZEJ5KGNvbnN0IEludFNpemUm
KTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlKGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwg
aW50IG92ZXJoZWFkKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBJbnRTaXplIG1fc2l6ZTsK
KyAgICBJbnRTaXplIG1fbWluQWxsb2M7CisgICAgSW50U2l6ZSBtX21hcmdpbjsKKworICAgIElu
dFNpemUgcm91bmRBbGxvY2F0aW9uKGNvbnN0IEludFNpemUmKSBjb25zdDsKK307CisKK2NsYXNz
IEdlbmVyYWxBcmVhQWxsb2NhdG9yIDogcHVibGljIEFyZWFBbGxvY2F0b3IgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IEdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmKTsKKyAgICB2
aXJ0dWFsIH5HZW5lcmFsQXJlYUFsbG9jYXRvcigpOworCisgICAgdm9pZCBleHBhbmQoY29uc3Qg
SW50U2l6ZSYpOworICAgIEludFJlY3QgYWxsb2NhdGUoY29uc3QgSW50U2l6ZSYpOworICAgIHZv
aWQgcmVsZWFzZShjb25zdCBJbnRSZWN0Jik7CisgICAgaW50IG92ZXJoZWFkKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZW51bSBTcGxpdCB7IFNwbGl0T25YLCBTcGxpdE9uWSB9OworCisgICAg
c3RydWN0IE5vZGUgeworICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAgIEludFNpemUgbGFy
Z2VzdEZyZWU7CisgICAgICAgIE5vZGUqIHBhcmVudDsKKyAgICAgICAgTm9kZSogbGVmdDsKKyAg
ICAgICAgTm9kZSogcmlnaHQ7CisgICAgfTsKKworICAgIE5vZGUqIG1fcm9vdDsKKyAgICBpbnQg
bV9ub2RlQ291bnQ7CisKKyAgICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7CisgICAgSW50
UG9pbnQgYWxsb2NhdGVGcm9tTm9kZShjb25zdCBJbnRTaXplJiwgTm9kZSopOworICAgIE5vZGUq
IHNwbGl0Tm9kZShOb2RlKiwgU3BsaXQpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUxhcmdlc3RG
cmVlKE5vZGUqKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIEFyZWFBbGxvY2F0b3JfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTVkYTJiOGZiNWY0YThkOWQyYzk4NzllOTNhY2I4NWMwZjNjOWI4YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9j
b29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAKQEAgLTAsMCArMSwxODggQEAK
Ky8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWFwcGVyKQoreworICAgIGlmICghbV9zdXJmYWNlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBGbG9hdFJlY3QgdGlsZVJlY3QobV90aWxlUmVjdCk7CisgICAgdGlsZVJlY3Quc2NhbGUoMS4g
LyBtX3NjYWxlKTsKKyAgICBib29sIHNob3VsZFJlc2V0ID0gZmFsc2U7CisgICAgaWYgKHRpbGVS
ZWN0ICE9IHJlY3QoKSkgeworICAgICAgICBzZXRSZWN0KHRpbGVSZWN0KTsKKyAgICAgICAgc2hv
dWxkUmVzZXQgPSB0cnVlOworICAgIH0KKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVy
ZSA9IHRoaXMtPnRleHR1cmUoKTsKKyAgICBpZiAoIXRleHR1cmUpIHsKKyAgICAgICAgdGV4dHVy
ZSA9IHRleHR1cmVNYXBwZXItPmNyZWF0ZVRleHR1cmUoKTsKKyAgICAgICAgc2V0VGV4dHVyZSh0
ZXh0dXJlLmdldCgpKTsKKyAgICAgICAgc2hvdWxkUmVzZXQgPSB0cnVlOworICAgIH0KKworICAg
IEFTU0VSVCh0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLndpZHRoKCkgPj0gbV90aWxl
UmVjdC5zaXplKCkud2lkdGgoKSAmJiB0ZXh0dXJlTWFwcGVyLT5tYXhUZXh0dXJlU2l6ZSgpLmhl
aWdodCgpID49IG1fdGlsZVJlY3Quc2l6ZSgpLmhlaWdodCgpKTsKKyAgICBpZiAoc2hvdWxkUmVz
ZXQpCisgICAgICAgIHRleHR1cmUtPnJlc2V0KG1fdGlsZVJlY3Quc2l6ZSgpLCBtX3N1cmZhY2Ut
PnN1cHBvcnRzQWxwaGEoKSk7CisKKyAgICBtX3N1cmZhY2UtPmNvcHlUb1RleHR1cmUodGV4dHVy
ZSwgbV9zb3VyY2VSZWN0LCBtX3N1cmZhY2VPZmZzZXQpOworICAgIG1fc3VyZmFjZS5jbGVhcigp
OworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZTo6c2V0QmFja0J1ZmZlcihj
b25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
K3sKKyAgICBtX3NvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OworICAgIG1fdGlsZVJlY3QgPSB0aWxl
UmVjdDsKKyAgICBtX3N1cmZhY2VPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9zdXJmYWNlID0gYnVm
ZmVyOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGVUaWxlKHVpbnQz
Ml90IGlkLCBmbG9hdCBzY2FsZSkKK3sKKyAgICBtX3RpbGVzLmFkZChpZCwgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmVUaWxlKHNjYWxlKSk7CisgICAgbV9zY2FsZSA9IHNjYWxlOworfQorCit2b2lk
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpyZW1vdmVUaWxlKHVpbnQzMl90IGlkKQoreworICAg
IEFTU0VSVChtX3RpbGVzLmNvbnRhaW5zKGlkKSk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmFkZChp
ZCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZUFsbFRpbGVzKCkK
K3sKKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1f
dGlsZXMuZW5kKCk7CisgICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0
ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIG1f
dGlsZXNUb1JlbW92ZS5hZGQoaXQtPmtleSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OnVwZGF0ZVRpbGUodWludDMyX3QgaWQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4g
YmFja0J1ZmZlciwgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5maW5kKGlkKTsKKyAgICBB
U1NFUlQoaXQgIT0gbV90aWxlcy5lbmQoKSk7CisgICAgaXQtPnZhbHVlLnNldEJhY2tCdWZmZXIo
dGlsZVJlY3QsIHNvdXJjZVJlY3QsIGJhY2tCdWZmZXIsIG9mZnNldCk7Cit9CisKK1Bhc3NSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnRleHR1cmUoKSBjb25z
dAoreworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSA9IGl0LT52YWx1ZS50
ZXh0dXJlKCk7CisgICAgICAgIGlmICh0ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRleHR1
cmU7CisgICAgfQorCisgICAgcmV0dXJuIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4oKTsKK30K
Kwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6c2V0U2l6ZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit7CisgICAgbV9zaXplID0gc2l6ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTo6cGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcihWZWN0b3I8VGV4dHVyZU1hcHBlclRp
bGUqPiYgdGlsZXMsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1h
c2ssIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHRpbGVzLnNpemUoKTsgKytpKQorICAgICAgICB0aWxlc1tpXS0+cGFpbnQodGV4dHVyZU1hcHBl
ciwgdHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLCBjYWxjdWxhdGVFeHBvc2VkVGlsZUVkZ2VzKHJl
Y3QsIHRpbGVzW2ldLT5yZWN0KCkpKTsKK30KKworVHJhbnNmb3JtYXRpb25NYXRyaXggQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU6OmFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QpCit7CisgICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0
VG9SZWN0KHJlY3QoKSwgdGFyZ2V0UmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaykKK3sKKyAgICBp
ZiAobV90aWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIW1fc2l6
ZS5pc1plcm8oKSk7CisKKyAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiB0aWxlc1RvUGFp
bnQ7CisgICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gcHJldmlvdXNUaWxlc1RvUGFpbnQ7
CisKKyAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgZXZlcnkgdGltZSB3ZSBwYWludCwgaW4gY2Fz
ZSB0aGUgb3BhY2l0eSBoYXMgY2hhbmdlZC4KKyAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRp
bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgRmxvYXRSZWN0IGNvdmVy
ZWRSZWN0OworICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRv
ciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZSYgdGlsZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgaWYgKCF0
aWxlLnRleHR1cmUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0aWxl
LnNjYWxlKCkgPT0gbV9zY2FsZSkgeworICAgICAgICAgICAgdGlsZXNUb1BhaW50LmFwcGVuZCgm
dGlsZSk7CisgICAgICAgICAgICBjb3ZlcmVkUmVjdC51bml0ZSh0aWxlLnJlY3QoKSk7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9ubHkgc2hvdyB0aGUg
cHJldmlvdXMgdGlsZSBpZiB0aGUgb3BhY2l0eSBpcyBoaWdoLCBvdGhlcndpc2UgZWZmZWN0IGxv
b2tzIGxpa2UgYSBidWcuCisgICAgICAgIC8vIFdlIHNob3cgdGhlIHByZXZpb3VzLXNjYWxlIHRp
bGUgYW55d2F5IGlmIGl0IGRvZXNuJ3QgaW50ZXJzZWN0IHdpdGggYW55IGN1cnJlbnQtc2NhbGUg
dGlsZS4KKyAgICAgICAgaWYgKG9wYWNpdHkgPCAwLjk1ICYmIGNvdmVyZWRSZWN0LmludGVyc2Vj
dHModGlsZS5yZWN0KCkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcHJldmlv
dXNUaWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKKyAgICB9CisKKyAgICAvLyB0YXJnZXRSZWN0
IGlzIG9uIHRoZSBjb250ZW50cyBjb29yZGluYXRlIHN5c3RlbSwgc28gd2UgbXVzdCBjb21wYXJl
IHR3byByZWN0cyBvbiB0aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgLy8gU2Vl
IFRpbGVkQmFja2luZ1N0b3JlLgorICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJh
bnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3Qp
OworCisgICAgcGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcihwcmV2aW91c1RpbGVzVG9QYWludCwg
dGV4dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3QoKSk7
CisgICAgcGFpbnRUaWxlc1RvVGV4dHVyZU1hcHBlcih0aWxlc1RvUGFpbnQsIHRleHR1cmVNYXBw
ZXIsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLCByZWN0KCkpOworfQorCit2b2lk
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpkcmF3Qm9yZGVyKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgZmxvYXQgYm9yZGVyV2lkdGgsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSkKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9
IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKKyAgICBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5k
KCk7CisgICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRleHR1cmVNYXBw
ZXItPmRyYXdCb3JkZXIoYm9yZGVyQ29sb3IsIGJvcmRlcldpZHRoLCBpdC0+dmFsdWUucmVjdCgp
LCBhZGp1c3RlZFRyYW5zZm9ybSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6
OmRyYXdSZXBhaW50Q291bnRlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBpbnQgcmVw
YWludENvdW50LCBjb25zdCBDb2xvciYgYm9yZGVyQ29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3sKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3RlZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVz
dGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRSZWN0KTsKKyAgICBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIHRleHR1cmVNYXBwZXItPmRyYXdSZXBhaW50Q291
bnRlcihyZXBhaW50Q291bnQsIGJvcmRlckNvbG9yLCBpdC0+dmFsdWUucmVjdCgpLmxvY2F0aW9u
KCksIGFkanVzdGVkVHJhbnNmb3JtKTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZTo6Y29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlcikKK3sK
KyAgICBIYXNoU2V0PHVpbnQzMl90Pjo6aXRlcmF0b3IgdGlsZXNUb1JlbW92ZUVuZCA9IG1fdGls
ZXNUb1JlbW92ZS5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciBp
dCA9IG1fdGlsZXNUb1JlbW92ZS5iZWdpbigpOyBpdCAhPSB0aWxlc1RvUmVtb3ZlRW5kOyArK2l0
KQorICAgICAgICBtX3RpbGVzLnJlbW92ZSgqaXQpOworICAgIG1fdGlsZXNUb1JlbW92ZS5jbGVh
cigpOworCisgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciB0aWxl
c0VuZCA9IG1fdGlsZXMuZW5kKCk7CisgICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRp
bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSB0aWxlc0VuZDsgKytp
dCkKKyAgICAgICAgaXQtPnZhbHVlLnN3YXBCdWZmZXJzKHRleHR1cmVNYXBwZXIpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMzM2ZDcxZmM4ZjM1OGVlOGNiMTJmNWZmMGRlMGM3ZmY3ZjNhOTk3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKQEAgLTAsMCArMSw4NyBAQAor
LyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmVfaAorI2RlZmluZSBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgi
CisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDb29yZGluYXRlZFN1cmZhY2U7CisKK2NsYXNzIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlVGlsZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyVGlsZSB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlKGZsb2F0IHNjYWxlID0gMSkKKyAgICAg
ICAgOiBUZXh0dXJlTWFwcGVyVGlsZShGbG9hdFJlY3QoKSkKKyAgICAgICAgLCBtX3NjYWxlKHNj
YWxlKQorICAgIHsKKyAgICB9CisKKyAgICBpbmxpbmUgZmxvYXQgc2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3NjYWxlOyB9CisgICAgdm9pZCBzd2FwQnVmZmVycyhUZXh0dXJlTWFwcGVyKik7Cisg
ICAgdm9pZCBzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiwgUGFz
c1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGJ1ZmZlciwgY29uc3QgSW50UG9pbnQmKTsKKwor
cHJpdmF0ZToKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7CisgICAg
SW50UmVjdCBtX3NvdXJjZVJlY3Q7CisgICAgSW50UmVjdCBtX3RpbGVSZWN0OworICAgIEludFBv
aW50IG1fc3VyZmFjZU9mZnNldDsKKyAgICBmbG9hdCBtX3NjYWxlOworfTsKKworY2xhc3MgQ29v
cmRpbmF0ZWRCYWNraW5nU3RvcmUgOiBwdWJsaWMgVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZSB7
CitwdWJsaWM6CisgICAgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgZmxvYXQpOwor
ICAgIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpOworICAgIHZvaWQgcmVtb3ZlQWxs
VGlsZXMoKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50UmVjdCYsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiwgY29u
c3QgSW50UG9pbnQmKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlKTsgfQorICAgIHZvaWQgY29tbWl0VGlsZU9wZXJhdGlvbnMoVGV4dHVyZU1hcHBlciopOwor
ICAgIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gdGV4dHVyZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1hcFRleHR1cmUqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0JvcmRlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgQ29sb3ImLCBmbG9hdCBib3JkZXJXaWR0
aCwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXIqLCBp
bnQgcmVwYWludENvdW50LCBjb25zdCBDb2xvciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUoKQorICAgICAgICA6IG1fc2NhbGUoMS4pCisgICAgeyB9CisgICAgdm9p
ZCBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+Jiwg
VGV4dHVyZU1hcHBlciosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQsIEJpdG1h
cFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBh
ZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgRmxvYXRSZWN0
IHJlY3QoKSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBtX3Np
emUpOyB9CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlVGlsZT4gQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOworICAgIENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlVGlsZU1hcCBtX3RpbGVzOworICAgIEhhc2hTZXQ8dWludDMyX3Q+IG1f
dGlsZXNUb1JlbW92ZTsKKyAgICBGbG9hdFNpemUgbV9zaXplOworICAgIGZsb2F0IG1fc2NhbGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRl
ck9wZXJhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwMjFiMGI0OTZlYWNjNmJkYTJmZTZkNTA5ZWUzZjYz
Zjg4OTBkYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24u
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3Rl
bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgor
ICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb25faAorI2RlZmluZSBDb29yZGluYXRlZEN1
c3RvbUZpbHRlck9wZXJhdGlvbl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVk
ZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
VGhpcyBjbGFzcyBpcyBvbmx5IGFkZGluZyB0aGUgcHJvZ3JhbUlkIG9uIHRvcCBvZiBDdXN0b21G
aWx0ZXJPcGVyYXRpb24uIFRoZSBhcmd1bWVudCBkZWNvZGVyIGhhcyBubworLy8gY29udGV4dCwg
c28gd2UgY2Fubm90IHNlYXJjaCBpbiBvdXIgY2FjaGVkIEN1c3RvbUZpbHRlclByb2dyYW1zIHdo
aWxlIGRlY29kaW5nLiBJbiB0aGF0IGNhc2UKKy8vIGl0IHdpbGwganVzdCBzdG9yZSB0aGUgcHJv
Z3JhbUlkIGFuZCBubyBDdXN0b21GaWx0ZXJQcm9ncmFtIGluc3RhbmNlLiBUaGUgcmVjZWl2ZXIg
aXMgc3VwcG9zZWQgdG8KKy8vIGl0ZXJhdGUgb24gdGhpcyBzdHJ1Y3R1cmUgYW5kIGluamVjdCB0
aGUgcmlnaHQgQ3VzdG9tRmlsdGVyUHJvZ3JhbXMuCisKK2NsYXNzIENvb3JkaW5hdGVkQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEN1c3RvbUZpbHRlck9wZXJhdGlvbiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24+
IGNyZWF0ZShQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGludCBwcm9n
cmFtSUQsIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMs
IHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVz
aFR5cGUgbWVzaFR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3Jk
aW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHByb2dyYW0sIHByb2dyYW1JRCwgc29ydGVkUGFy
YW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoVHlwZSkpOworICAgIH0KKworICAg
IGludCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyYW1JRDsgfQorCitwcml2YXRl
OgorICAgIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSwgaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2ln
bmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKKyAgICAgICAg
OiBDdXN0b21GaWx0ZXJPcGVyYXRpb24ocHJvZ3JhbSwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJv
d3MsIG1lc2hDb2x1bW5zLCBtZXNoVHlwZSkKKyAgICAgICAgLCBtX3Byb2dyYW1JRChwcm9ncmFt
SUQpCisgICAgeworICAgIH0KKworICAgIGludCBtX3Byb2dyYW1JRDsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKKworI2VuZGlm
IC8vIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEN1c3RvbUZpbHRlclByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YTQ5YjFiZWE1ZGYyZGJhZTFjMTUzZDU0Mjc4MDNmZTU0MTE1OTU4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dy
YW1faAorI2RlZmluZSBDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW1faAorCisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVy
UHJvZ3JhbSA6IHB1YmxpYyBDdXN0b21GaWx0ZXJQcm9ncmFtIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShTdHJp
bmcgdmVydGV4U2hhZGVyU3RyaW5nLCBTdHJpbmcgbV9mcmFnbWVudFNoYWRlclN0cmluZywgQ3Vz
dG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUsIEN1c3RvbUZpbHRlclByb2dyYW1NaXhT
ZXR0aW5ncyBtaXhTZXR0aW5ncywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJv
Z3JhbSh2ZXJ0ZXhTaGFkZXJTdHJpbmcsIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcsIHByb2dyYW1U
eXBlLCBtaXhTZXR0aW5ncywgbWVzaFR5cGUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNMb2FkZWQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtJiBvKSBjb25zdCBPVkVS
UklERQorICAgIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIHRoZSAhPSBvcGVyYXRvciBiZWNh
dXNlIHRoYXQgd291bGQgcmVjdXJzaXZlbHkgY2FsbCB0aGlzIG1ldGhvZC4KKyAgICAgICAgaWYg
KCFDdXN0b21GaWx0ZXJQcm9ncmFtOjpvcGVyYXRvcj09KG8pKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY2FzdCBpcyB1Z2x5LCBidXQgQ29v
cmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtIGlzIHRoZSBzaW5nbGUgaW1wbGVtZW50YXRpb24g
b2YgQ3VzdG9tRmlsdGVyUHJvZ3JhbSBvbiBVSSBQcm9jZXNzLgorICAgICAgICBjb25zdCBDb29y
ZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0qIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ29v
cmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtKj4oJm8pOworICAgICAgICByZXR1cm4gbV92ZXJ0
ZXhTaGFkZXJTdHJpbmcgPT0gb3RoZXItPnZlcnRleFNoYWRlclN0cmluZygpICYmIG1fZnJhZ21l
bnRTaGFkZXJTdHJpbmcgPT0gb3RoZXItPmZyYWdtZW50U2hhZGVyU3RyaW5nKCk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBTdHJpbmcgdmVydGV4U2hhZGVyU3RyaW5nKCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7IH0KKyAgICB2aXJ0dWFs
IFN0cmluZyBmcmFnbWVudFNoYWRlclN0cmluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
ZnJhZ21lbnRTaGFkZXJTdHJpbmc7IH0KKworICAgIHZpcnR1YWwgdm9pZCB3aWxsSGF2ZUNsaWVu
dHMoKSBPVkVSUklERSB7IG5vdGlmeUNsaWVudHMoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZW1vdmVMYXN0Q2xpZW50KCkgT1ZFUlJJREUgeyB9CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0
ZWRDdXN0b21GaWx0ZXJQcm9ncmFtKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0cmluZyBm
cmFnbWVudFNoYWRlclN0cmluZywgQ3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUs
IEN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5ncywgQ3VzdG9tRmlsdGVy
TWVzaFR5cGUgbWVzaFR5cGUpCisgICAgICAgIDogQ3VzdG9tRmlsdGVyUHJvZ3JhbShwcm9ncmFt
VHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKQorICAgICAgICAsIG1fdmVydGV4U2hhZGVyU3Ry
aW5nKHZlcnRleFNoYWRlclN0cmluZykKKyAgICAgICAgLCBtX2ZyYWdtZW50U2hhZGVyU3RyaW5n
KGZyYWdtZW50U2hhZGVyU3RyaW5nKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV92ZXJ0
ZXhTaGFkZXJTdHJpbmc7CisgICAgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmc7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIEVOQUJMRShDU1NfU0hBREVSUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM3MzZmMjYwNGMwYzEwNDM5OTk1
N2I5OGEyNTI1ZWU3ZGJjZGQ5YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyLmNwcApAQCAtMCwwICsxLDEwNTYgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgQ29weXJpZ2h0IChDKSAyMDEy
IENvbXBhbnkgMTAwLCBJbmMuCisgQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCisKKyNpbmNsdWRlICJDb29yZGluYXRlZFRpbGUu
aCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5
Q2hhbmdlLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCB0b0Nvb3JkaW5hdGVk
TGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1cm4gbGF5ZXIgPyB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmlkKCkgOiAwOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpCit7CisgICAgbV9zaG91
bGRTeW5jTGF5ZXJTdGF0ZSA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGll
bnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmRpZENoYW5nZUFuaW1hdGlvbnMoKQoreworICAgIG1fc2hvdWxkU3luY0Fu
aW1hdGlvbnMgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5v
dGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpkaWRDaGFuZ2VDaGlsZHJlbigpCit7CisgICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0
cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVx
dWlyZWQodGhpcyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVycygpCit7CisgICAgbV9zaG91bGRTeW5j
RmlsdGVycyA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90
aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6ZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNJ
bWFnZUJhY2tpbmcgPSB0cnVlOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCkt
Pm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpCit7CisgICAgbV9zaG91bGRVcGRh
dGVWaXNpYmxlUmVjdCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJl
bigpLnNpemUoKTsgKytpKQorICAgICAgICB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihjaGls
ZHJlbigpW2ldKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKKyAgICBpZiAocmVwbGlj
YUxheWVyKCkpCisgICAgICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXll
cigpKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUdlb21ldHJ5KCkKK3sKKyAgICBkaWRDaGFuZ2VMYXll
clN0YXRlKCk7CisgICAgc2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKK30KKworQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXll
ckNsaWVudCogY2xpZW50KQorICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCisjaWZuZGVmIE5E
RUJVRworICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fc2hvdWxkVXBk
YXRlVmlzaWJsZVJlY3QodHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0xheWVyU3RhdGUodHJ1ZSkK
KyAgICAsIG1fc2hvdWxkU3luY0NoaWxkcmVuKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNGaWx0
ZXJzKHRydWUpCisgICAgLCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcodHJ1ZSkKKyAgICAsIG1f
c2hvdWxkU3luY0FuaW1hdGlvbnModHJ1ZSkKKyAgICAsIG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNl
KQorICAgICwgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQoZmFsc2UpCisgICAgLCBt
X3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQoZmFsc2UpCisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgLCBtX2lzVmFsaWRDYW52YXMoZmFsc2UpCisgICAgLCBtX3BlbmRpbmdDYW52
YXNPcGVyYXRpb24oTm9uZSkKKyNlbmRpZgorICAgICwgbV9jb29yZGluYXRvcigwKQorICAgICwg
bV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIoMCkKKyAgICAsIG1fY2FudmFzUGxhdGZvcm1MYXll
cigwKQorICAgICwgbV9hbmltYXRpb25TdGFydGVkVGltZXIodGhpcywgJkNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCit7CisgICAgc3RhdGljIENv
b3JkaW5hdGVkTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7CisgICAgbV9pZCA9IG5leHRMYXllcklE
Kys7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6fkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcigpCit7CisgICAgaWYgKG1fY29vcmRpbmF0b3IpIHsKKyAgICAgICAgcHVyZ2VCYWNraW5n
U3RvcmVzKCk7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPmRldGFjaExheWVyKHRoaXMpOworICAg
IH0KKyAgICBBU1NFUlQoIW1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgIW1fbWFpbkJhY2tp
bmdTdG9yZSk7CisgICAgd2lsbEJlRGVzdHJveWVkKCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBj
aGlsZHJlbikKK3sKKyAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hp
bGRyZW4pOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkaWRDaGFu
Z2VDaGlsZHJlbigpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgR3JhcGhp
Y3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NM
YXllciogbGF5ZXIsIGludCBpbmRleCkKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEF0
SW5kZXgobGF5ZXIsIGluZGV4KTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiBs
YXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVyOjphZGRD
aGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xh
eWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKK3sKKyAgICBHcmFwaGljc0xheWVy
OjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsKKyAgICBkaWRDaGFuZ2VDaGlsZHJlbigp
OworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKEdyYXBo
aWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVyKiBuZXdDaGlsZCkKK3sKKyAgICBib29s
IG9rID0gR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxkKG9sZENoaWxkLCBuZXdDaGlsZCk7Cisg
ICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVu
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZW1vdmVGcm9tUGFyZW50KCkKK3sKKyAgICBpZiAoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KiBwYXJlbnRMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKSkKKyAg
ICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxkcmVuKCk7CisgICAgR3JhcGhpY3NMYXll
cjo6cmVtb3ZlRnJvbVBhcmVudCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcCkKK3sKKyAgICBpZiAocG9zaXRpb24o
KSA9PSBwKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlv
bihwKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJiBwKQoreworICAg
IGlmIChhbmNob3JQb2ludCgpID09IHApCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldEFuY2hvclBvaW50KHApOworICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKK3sKKyAgICBpZiAodGhpcy0+c2l6ZSgpID09IHNpemUpCisgICAgICAgIHJldHVybjsK
KworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6ZSk7CisKKyAgICBpZiAobWFza0xheWVy
KCkpCisgICAgICAgIG1hc2tMYXllcigpLT5zZXRTaXplKHNpemUpOworICAgIGRpZENoYW5nZUdl
b21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgaWYgKHRyYW5zZm9ybSgp
ID09IHQpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9y
bSh0KTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHQpCit7CisgICAgaWYgKGNoaWxkcmVuVHJhbnNmb3JtKCkgPT0gdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0odCk7CisgICAg
ZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldFByZXNlcnZlczNEKGJvb2wgYikKK3sKKyAgICBpZiAocHJlc2VydmVzM0QoKSA9PSBiKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsK
KyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIGIpCit7CisgICAgaWYgKG1hc2tzVG9Cb3VuZHMo
KSA9PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0Jv
dW5kcyhiKTsKKyAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJvb2wgYikKK3sKKyAgICBpZiAoZHJhd3ND
b250ZW50KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5ZXI6OnNldERy
YXdzQ29udGVudChiKTsKKworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShib29sIGIpCit7Cisg
ICAgaWYgKGNvbnRlbnRzQXJlVmlzaWJsZSgpID09IGIpCisgICAgICAgIHJldHVybjsKKyAgICBH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUoYik7CisgICAgaWYgKG1hc2tMYXllcigp
KQorICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0Q29udGVudHNWaXNpYmxlKGIpOworCisgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKQoreworICAgIGlmIChjb250ZW50c09wYXF1ZSgpID09
IGIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAg
ICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWIpOworICAgIEdyYXBoaWNz
TGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGIpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0
eShib29sIGIpCit7CisgICAgaWYgKGJhY2tmYWNlVmlzaWJpbGl0eSgpID09IGIpCisgICAgICAg
IHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShiKTsK
KyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpCit7CisgICAgaWYgKHRoaXMtPm9wYWNp
dHkoKSA9PSBvcGFjaXR5KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpz
ZXRPcGFjaXR5KG9wYWNpdHkpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0
JiByKQoreworICAgIGlmIChjb250ZW50c1JlY3QoKSA9PSByKQorICAgICAgICByZXR1cm47CisK
KyAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1JlY3Qocik7CisgICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNOZWVkc0Rpc3BsYXkoKQoreworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIGlmICht
X2NhbnZhc1BsYXRmb3JtTGF5ZXIpCisgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiB8
PSBTeW5jQ2FudmFzOworI2VuZGlmCisKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVu
dCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworCisgICAgYWRkUmVwYWludFJlY3QoY29u
dGVudHNSZWN0KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29u
dGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKQoreworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpIHsKKyAgICAg
ICAgQVNTRVJUKG1fY2FudmFzVG9rZW4uaXNWYWxpZCgpKTsKKyAgICAgICAgaWYgKCFwbGF0Zm9y
bUxheWVyKSB7CisgICAgICAgICAgICBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gfD0gRGVzdHJv
eUNhbnZhczsKKyAgICAgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+Q3JlYXRl
Q2FudmFzOworICAgICAgICB9ICBlbHNlIGlmICgobV9jYW52YXNTaXplICE9IHBsYXRmb3JtTGF5
ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCkpIHx8IChtX2NhbnZhc1Rva2VuICE9IHBsYXRmb3JtTGF5
ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCkpKSB7CisgICAgICAgICAgICAvLyBtX2NhbnZhc1Rv
a2VuIGNhbiBiZSBkaWZmZXJlbnQgdG8gcGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9r
ZW4oKSwgZXZlbiBpZiBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgZXF1YWxzIHBsYXRmb3JtTGF5ZXIu
CisgICAgICAgICAgICBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gfD0gUmVjcmVhdGVDYW52YXM7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocGxhdGZvcm1MYXllcikKKyAg
ICAgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBDcmVhdGVBbmRTeW5jQ2FudmFz
OworICAgIH0KKworICAgIG1fY2FudmFzUGxhdGZvcm1MYXllciA9IHBsYXRmb3JtTGF5ZXI7Cisg
ICAgLy8gbV9jYW52YXNUb2tlbiBpcyB1cGRhdGVkIG9ubHkgaGVyZS4gSW4gZGV0YWlsLCB3aGVu
IEdyYXBoaWNzQ29udGV4dDNEIGlzIGNoYW5nZWQgb3IgcmVzaGFwZWQsIG1fY2FudmFzVG9rZW4g
aXMgY2hhbmdlZCBhbmQgc2V0Q29udGVudHNUb0NhbnZhcygpIGlzIGFsd2F5cyBjYWxsZWQuCisg
ICAgbV9jYW52YXNTaXplID0gbV9jYW52YXNQbGF0Zm9ybUxheWVyID8gbV9jYW52YXNQbGF0Zm9y
bUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpIDogSW50U2l6ZSgpOworICAgIG1fY2FudmFzVG9r
ZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBo
aWNzU3VyZmFjZVRva2VuKCkgOiBHcmFwaGljc1N1cmZhY2VUb2tlbigpOworICAgIEFTU0VSVCgh
KCFtX2NhbnZhc1Rva2VuLmlzVmFsaWQoKSAmJiBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpKTsKKwor
ICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQo
dGhpcyk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwbGF0Zm9ybUxheWVyKTsKKyNlbmRpZgor
fQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgbmV3RmlsdGVycykKK3sKKyAg
ICBpZiAoZmlsdGVycygpID09IG5ld0ZpbHRlcnMpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRpZENoYW5nZUZpbHRlcnMoKTsKKyAgICByZXR1cm4gR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVy
cyhuZXdGaWx0ZXJzKTsKK30KKyNlbmRpZgorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGlm
IChtX2xheWVySW5mby5zb2xpZENvbG9yID09IGNvbG9yKQorICAgICAgICByZXR1cm47CisgICAg
bV9sYXllckluZm8uc29saWRDb2xvciA9IGNvbG9yOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRl
cihib29sIHNob3cpCit7CisgICAgaWYgKGlzU2hvd2luZ0RlYnVnQm9yZGVyKCkgPT0gc2hvdykK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVy
KHNob3cpOworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291bnRlcihib29sIHNob3cpCit7CisgICAg
aWYgKGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgPT0gc2hvdykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKHNob3cpOworICAgIGRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2UpCit7CisgICAgTmF0aXZlSW1hZ2VQdHIg
bmV3TmF0aXZlSW1hZ2VQdHIgPSBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpIDogMDsKKyAgICBpZiAobmV3TmF0aXZlSW1hZ2VQdHIpIHsKKyAgICAgICAgLy8gVGhp
cyBjb2RlIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgcG9pbnRlciBlcXVhbGl0eSBvbiBhIE5h
dGl2ZUltYWdlUHRyIGlzIGEgdmFsaWQgd2F5IHRvIHRlbGwgaWYgdGhlIGltYWdlIGlzIGNoYW5n
ZWQuCisgICAgICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBpcyB0cnVlIGluIFF0LCBHVEsgYW5kIEVG
TC4KKyAgICAgICAgaWYgKG5ld05hdGl2ZUltYWdlUHRyID09IG1fY29tcG9zaXRlZE5hdGl2ZUlt
YWdlUHRyKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY29tcG9zaXRlZEltYWdl
ID0gaW1hZ2U7CisgICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gbmV3TmF0aXZl
SW1hZ2VQdHI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSAwOwor
ICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0ciA9IDA7CisgICAgfQorCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGltYWdlKTsKKyAgICBkaWRDaGFuZ2VJbWFn
ZUJhY2tpbmcoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tM
YXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBpZiAobGF5ZXIgPT0gbWFza0xheWVy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihs
YXllcik7CisKKyAgICBpZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+
c2V0U2l6ZShzaXplKCkpOworICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUoY29udGVudHNB
cmVWaXNpYmxlKCkpOworICAgIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogY29vcmRpbmF0ZWRM
YXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKTsKKyAgICBjb29yZGluYXRl
ZExheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgp
OworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkRGlyZWN0bHlDb21w
b3NpdGVJbWFnZShJbWFnZSogaW1hZ2UpIGNvbnN0Cit7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1h
Z2UtPmlzQml0bWFwSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZW51bSB7
IE1heERpbWVuc3Rpb25Gb3JEaXJlY3RDb21wb3NpdGluZyA9IDIwMDAgfTsKKyAgICBpZiAoaW1h
Z2UtPndpZHRoKCkgPiBNYXhEaW1lbnN0aW9uRm9yRGlyZWN0Q29tcG9zaXRpbmcgfHwgaW1hZ2Ut
PmhlaWdodCgpID4gTWF4RGltZW5zdGlvbkZvckRpcmVjdENvbXBvc2l0aW5nKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQor
eworICAgIGlmIChsYXllciA9PSByZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIobGF5ZXIpOworICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dE5lZWRzRGlzcGxheSgpCit7CisgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIHNpemUoKSkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBp
ZiAobV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmludmFs
aWRhdGUoSW50UmVjdChyZWN0KSk7CisKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisKKyAg
ICBhZGRSZXBhaW50UmVjdChyZWN0KTsKK30KKworQ29vcmRpbmF0ZWRMYXllcklEIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lkOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoIW1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdM
YXllckNoYW5nZXMoKSkgeworICAgICAgICBpZiAoY2xpZW50KCkpCisgICAgICAgICAgICBjbGll
bnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIG1hc2sgPSB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCisgICAgICAgIG1hc2stPmZsdXNoQ29tcG9zaXRp
bmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKKworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIHJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIo
KSkpCisgICAgICAgIHJlcGxpY2EtPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9u
bHkoKTsKKworICAgIG1fY29vcmRpbmF0b3ItPnN5bmNGaXhlZExheWVycygpOworCisgICAgZmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ld
LT5mbHVzaENvbXBvc2l0aW5nU3RhdGUocmVjdCk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcio+KGxheWVy
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCit7
CisgICAgaWYgKCFtX3Nob3VsZFN5bmNDaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c2hvdWxkU3luY0NoaWxkcmVuID0gZmFsc2U7CisgICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4gY2hpbGRJRHM7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUo
KTsgKytpKQorICAgICAgICBjaGlsZElEcy5hcHBlbmQodG9Db29yZGluYXRlZExheWVySUQoY2hp
bGRyZW4oKVtpXSkpOworCisgICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9p
ZCwgY2hpbGRJRHMpOworfQorCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJzKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3lu
Y0ZpbHRlcnMpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFs
c2U7CisgICAgbV9jb29yZGluYXRvci0+c3luY0xheWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkp
OworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VC
YWNraW5nKCkKK3sKKyAgICBpZiAoIW1fc2hvdWxkU3luY0ltYWdlQmFja2luZykKKyAgICAgICAg
cmV0dXJuOworICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IGZhbHNlOworCisgICAgaWYg
KG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKSB7CisgICAgICAgIEFTU0VSVCghc2hvdWxkSGF2
ZUJhY2tpbmdTdG9yZSgpKTsKKyAgICAgICAgQVNTRVJUKG1fY29tcG9zaXRlZEltYWdlKTsKKwor
ICAgICAgICBib29sIGltYWdlSW5zdGFuY2VSZXBsYWNlZCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmcgJiYgKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmlkKCkgIT0gQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQobV9jb21wb3NpdGVkSW1h
Z2UuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGltYWdlSW5zdGFuY2VSZXBsYWNlZCkKKyAgICAgICAg
ICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOworCisgICAgICAgIGlmICghbV9jb29y
ZGluYXRlZEltYWdlQmFja2luZykgeworICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFj
a2luZyA9IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKG1fY29tcG9z
aXRlZEltYWdlLmdldCgpKTsKKyAgICAgICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmct
PmFkZEhvc3QodGhpcyk7CisgICAgICAgICAgICBtX2xheWVySW5mby5pbWFnZUlEID0gbV9jb29y
ZGluYXRlZEltYWdlQmFja2luZy0+aWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fY29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmctPm1hcmtEaXJ0eSgpOworICAgIH0gZWxzZQorICAgICAgICByZWxl
YXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKworICAgIC8vIHN5bmNJbWFnZUJhY2tpbmcoKSBj
aGFuZ2VkIG1fbGF5ZXJJbmZvLmltYWdlSUQuCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0xheWVyU3RhdGUoKQorewor
ICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsKKyAgICBtX2xheWVySW5mby5maXhlZFRvVmll
d3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKKworICAgIG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlz
aWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOworICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJh
bnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsKKyAgICBtX2xheWVySW5mby5jb250ZW50c09w
YXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNSZWN0ID0g
Y29udGVudHNSZWN0KCk7CisgICAgbV9sYXllckluZm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250
ZW50KCk7CisgICAgbV9sYXllckluZm8uY29udGVudHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNp
YmxlKCk7CisgICAgbV9sYXllckluZm8ubWFzayA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKG1hc2tM
YXllcigpKTsKKyAgICBtX2xheWVySW5mby5tYXNrc1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygp
OworICAgIG1fbGF5ZXJJbmZvLm9wYWNpdHkgPSBvcGFjaXR5KCk7CisgICAgbV9sYXllckluZm8u
cHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOworICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0
b0Nvb3JkaW5hdGVkTGF5ZXJJRChyZXBsaWNhTGF5ZXIoKSk7CisgICAgbV9sYXllckluZm8udHJh
bnNmb3JtID0gdHJhbnNmb3JtKCk7CisKKyAgICBtX2xheWVySW5mby5hbmNob3JQb2ludCA9IG1f
YWRqdXN0ZWRBbmNob3JQb2ludDsKKyAgICBtX2xheWVySW5mby5wb3MgPSBtX2FkanVzdGVkUG9z
aXRpb247CisgICAgbV9sYXllckluZm8uc2l6ZSA9IG1fYWRqdXN0ZWRTaXplOworCisgICAgbV9s
YXllckluZm8uc2hvd0RlYnVnQm9yZGVycyA9IGlzU2hvd2luZ0RlYnVnQm9yZGVyKCk7CisgICAg
aWYgKG1fbGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMpCisgICAgICAgIHVwZGF0ZURlYnVnSW5k
aWNhdG9ycygpOworICAgIG1fbGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2lu
Z1JlcGFpbnRDb3VudGVyKCk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZSht
X2lkLCBtX2xheWVySW5mbyk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29sb3IsIGZsb2F0IHdpZHRoKQoreworICAgIEFT
U0VSVChtX2xheWVySW5mby5zaG93RGVidWdCb3JkZXJzKTsKKyAgICBtX2xheWVySW5mby5kZWJ1
Z0JvcmRlckNvbG9yID0gY29sb3I7CisgICAgbV9sYXllckluZm8uZGVidWdCb3JkZXJXaWR0aCA9
IHdpZHRoOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlv
bnMoKQoreworICAgIGlmICghbV9zaG91bGRTeW5jQW5pbWF0aW9ucykKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9IGZhbHNlOworCisgICAgbV9jb29yZGlu
YXRvci0+c2V0TGF5ZXJBbmltYXRpb25zKG1faWQsIG1fYW5pbWF0aW9ucyk7Cit9CisKKyNpZiBV
U0UoR1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5j
Q2FudmFzKCkKK3sKKyAgICBkZXN0cm95Q2FudmFzSWZOZWVkZWQoKTsKKyAgICBjcmVhdGVDYW52
YXNJZk5lZWRlZCgpOworCisgICAgaWYgKCEobV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgU3lu
Y0NhbnZhcykpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlv
biAmPSB+U3luY0NhbnZhczsKKworICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxh
dGZvcm1MYXllcik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95
Q2FudmFzSWZOZWVkZWQoKQoreworICAgIGlmICghKG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAm
IERlc3Ryb3lDYW52YXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9pc1ZhbGlkQ2Fu
dmFzKSB7CisgICAgICAgIG1fY29vcmRpbmF0b3ItPmRlc3Ryb3lDYW52YXMobV9pZCk7CisgICAg
ICAgIG1faXNWYWxpZENhbnZhcyA9IGZhbHNlOworICAgIH0KKworICAgIG1fcGVuZGluZ0NhbnZh
c09wZXJhdGlvbiAmPSB+RGVzdHJveUNhbnZhczsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVkKCkKK3sKKyAgICBpZiAoIShtX3BlbmRpbmdD
YW52YXNPcGVyYXRpb24gJiBDcmVhdGVDYW52YXMpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQobV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKKyAgICBpZiAoIW1faXNWYWxpZENhbnZhcykg
eworICAgICAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0
Zm9ybUxheWVyKTsKKyAgICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gdHJ1ZTsKKyAgICB9CisKKyAg
ICBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJj0gfkNyZWF0ZUNhbnZhczsKK30KKyNlbmRpZgor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdM
YXllckNoYW5nZXMoKSk7CisKKyAgICAvLyBTZXRzIHRoZSB2YWx1ZXMuCisgICAgY29tcHV0ZVBp
eGVsQWxpZ25tZW50KG1fYWRqdXN0ZWRQb3NpdGlvbiwgbV9hZGp1c3RlZFNpemUsIG1fYWRqdXN0
ZWRBbmNob3JQb2ludCwgbV9waXhlbEFsaWdubWVudE9mZnNldCk7CisKKyAgICBzeW5jSW1hZ2VC
YWNraW5nKCk7CisgICAgc3luY0xheWVyU3RhdGUoKTsKKyAgICBzeW5jQW5pbWF0aW9ucygpOwor
ICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CisgICAgc3luY0NoaWxkcmVuKCk7
CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHN5bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAg
ICB1cGRhdGVDb250ZW50QnVmZmVycygpOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAg
IHN5bmNDYW52YXMoKTsKKyNlbmRpZgorfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6aW1hZ2VCYWNraW5nVmlzaWJsZSgpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcpOworICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCkuaW50
ZXJzZWN0cyhjb250ZW50c1JlY3QoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKQoreworICAgIGlmICghbV9jb29yZGlu
YXRlZEltYWdlQmFja2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKG1fY29vcmRp
bmF0b3IpOworICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPnJlbW92ZUhvc3QodGhpcyk7
CisgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy5jbGVhcigpOworICAgIG1fbGF5ZXJJbmZv
LmltYWdlSUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRDsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCit7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBp
c1Jvb3QpCit7CisgICAgbV9sYXllckluZm8uaXNSb290TGF5ZXIgPSBpc1Jvb3Q7CisgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0
cmFqZWN0b3J5VmVjdG9yKQoreworICAgIGlmICghbV9tYWluQmFja2luZ1N0b3JlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFRyYWplY3RvcnlWZWN0b3Io
dHJhamVjdG9yeVZlY3Rvcik7CisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRldmljZU9yUGFnZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpCit7CisgICAgaWYgKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkKKyAgICAg
ICAgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgPSB0cnVlOworfQorCitmbG9hdCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKQoreworICAg
IHJldHVybiBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkgPyAxIDogZGV2
aWNlU2NhbGVGYWN0b3IoKSAqIHBhZ2VTY2FsZUZhY3RvcigpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVudHNTY2FsZSgpCit7CisgICAgQVNTRVJUKHNo
b3VsZEhhdmVCYWNraW5nU3RvcmUoKSk7CisgICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwg
bV9tYWluQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNT
Y2FsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBu
ZXcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcgdGhlIGNvbnRlbnQsCisgICAgLy8gd2UgZG8g
bm90IHdhbnQgdG8gZHJvcCB0aGUgcHJldmlvdXMgb25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGlu
CisgICAgLy8gYnJpZWZseSBzZWVpbmcgZmxpY2tlcmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBi
ZSBkcm9wcGVkIGJlZm9yZQorICAgIC8vIHNvbWV0aGluZyByZXBsYWNlcyB0aGVtLgorICAgIG1f
cHJldmlvdXNCYWNraW5nU3RvcmUgPSBtX21haW5CYWNraW5nU3RvcmUucmVsZWFzZSgpOworCisg
ICAgLy8gTm8gcmVhc29uIHRvIHNhdmUgdGhlIHByZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5v
bi12aXNpYmxlIGFyZWFzLgorICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5v
blZpc2libGVUaWxlcygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlQmFja2luZ1N0b3JlKCkKK3sKKyAgICBtX21haW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihu
ZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRl
KHRoaXMpKSk7CisgICAgbV9tYWluQmFja2luZ1N0b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250
ZW50c09wYXF1ZSgpKTsKKyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUo
ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFp
bnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1cGRhdGVkUmVjdHMpCit7CisgICAgaWYgKGlz
U2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgJiYgIXVwZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCisgICAg
ICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyUmVwYWludENvdW50KGlkKCksIGluY3JlbWVudFJl
cGFpbnRDb3VudCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbigpCit7CisgICAgc2V0TmVlZHNWaXNp
YmxlUmVjdEFkanVzdG1lbnQoKTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgp
LT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworfQorCitJbnRSZWN0IENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKQoreworICAgIHJldHVy
biBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpOworfQorCitz
dGF0aWMgdm9pZCBjbGFtcFRvQ29udGVudHNSZWN0SWZSZWN0SXNJbmZpbml0ZShGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRzUmVjdCkKK3sKKyAgICBpZiAocmVjdC53aWR0
aCgpID49IExheW91dFVuaXQ6Om5lYXJseU1heCgpIHx8IHJlY3Qud2lkdGgoKSA8PSBMYXlvdXRV
bml0OjpuZWFybHlNaW4oKSkgeworICAgICAgICByZWN0LnNldFgoY29udGVudHNSZWN0LngoKSk7
CisgICAgICAgIHJlY3Quc2V0V2lkdGgoY29udGVudHNSZWN0LndpZHRoKCkpOworICAgIH0KKwor
ICAgIGlmIChyZWN0LmhlaWdodCgpID49IExheW91dFVuaXQ6Om5lYXJseU1heCgpIHx8IHJlY3Qu
aGVpZ2h0KCkgPD0gTGF5b3V0VW5pdDo6bmVhcmx5TWluKCkpIHsKKyAgICAgICAgcmVjdC5zZXRZ
KGNvbnRlbnRzUmVjdC55KCkpOworICAgICAgICByZWN0LnNldEhlaWdodChjb250ZW50c1JlY3Qu
aGVpZ2h0KCkpOworICAgIH0KK30KKworSW50UmVjdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKQoreworICAgIC8vIE5vbi1pbnZlcnRpYmxl
IGxheWVycyBhcmUgbm90IHZpc2libGUuCisgICAgaWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJp
bmVkKCkuaXNJbnZlcnRpYmxlKCkpCisgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisKKyAgICAv
LyBSZXR1cm4gYSBwcm9qZWN0aW9uIG9mIHRoZSB2aXNpYmxlIHJlY3QgKHN1cmZhY2UgY29vcmRp
bmF0ZXMpIG9udG8gdGhlIGxheWVyJ3MgcGxhbmUgKGxheWVyIGNvb3JkaW5hdGVzKS4KKyAgICAv
LyBUaGUgcmVzdWx0aW5nIHF1YWQgbWlnaHQgYmUgc3F1ZXdlZCBhbmQgdGhlIHZpc2libGUgcmVj
dCBpcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMgcXVhZCwKKyAgICAvLyBzbyBpdCBtaWdodCBz
cHJlYWQgZnVydGhlciB0aGFuIHRoZSByZWFsIHZpc2libGUgYXJlYSAoYW5kIHRoZW4gZXZlbiBt
b3JlIGFtcGxpZmllZCBieSB0aGUgY292ZXIgcmVjdCBtdWx0aXBsaWVyKS4KKyAgICBBU1NFUlQo
bV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtID09IG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5p
bnZlcnNlKCkpOworICAgIEZsb2F0UmVjdCByZWN0ID0gbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3Jt
LmNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQoRmxvYXRRdWFkKG1fY29vcmRpbmF0b3ItPnZp
c2libGVDb250ZW50c1JlY3QoKSkpOworICAgIGNsYW1wVG9Db250ZW50c1JlY3RJZlJlY3RJc0lu
ZmluaXRlKHJlY3QsIHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkpOworICAgIHJldHVy
biBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworfQorCitDb2xvciBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9yOjp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVu
dDsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IEludFNpemUmIHNpemUsIHVpbnQzMl90JiBh
dGxhcywgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Cisg
ICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7CisgICAg
cmV0dXJuIG1fY29vcmRpbmF0b3ItPmJlZ2luQ29udGVudFVwZGF0ZShzaXplLCBjb250ZW50c09w
YXF1ZSgpID8gQ29vcmRpbmF0ZWRTdXJmYWNlOjpOb0ZsYWdzIDogQ29vcmRpbmF0ZWRTdXJmYWNl
OjpTdXBwb3J0c0FscGhhLCBhdGxhcywgb2Zmc2V0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBk
YXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgQVNT
RVJUKG1fY29vcmRpbmF0b3IpOworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5n
TGF5ZXJDaGFuZ2VzKCkpOworICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGls
ZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjp1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8sIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQoreworICAgIEFTU0VSVCht
X2Nvb3JkaW5hdG9yKTsKKyAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVy
Q2hhbmdlcygpKTsKKyAgICBtX2Nvb3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwg
dXBkYXRlSW5mbywgdGlsZVJlY3QpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3IpOworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkg
fHwgbV9pc1B1cmdpbmcpOworICAgIG1fY29vcmRpbmF0b3ItPnJlbW92ZVRpbGUoaWQoKSwgdGls
ZUlEKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRC
dWZmZXJzKCkKK3sKKyAgICBpZiAoIXNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkgeworICAgICAg
ICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdT
dG9yZS5jbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fcGVuZGlu
Z0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50KSB7CisgICAgICAgIGFkanVzdENvbnRlbnRzU2NhbGUo
KTsKKyAgICAgICAgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgPSBmYWxzZTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1h
aW4gdGlsZWQgYmFja2luZyBzdG9yZSwgb25jZSB3ZQorICAgIC8vIGhhdmUgYSByZW1vdGUgY2xp
ZW50IGFuZCB3ZSBhcmUgcmVhZHkgdG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4K
KyAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSkKKyAgICAgICAgY3JlYXRlQmFja2luZ1N0b3Jl
KCk7CisKKyAgICBpZiAobV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50KSB7CisgICAgICAg
IG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCA9IGZhbHNlOworICAgICAgICBtX21haW5C
YWNraW5nU3RvcmUtPmNvdmVyV2l0aFRpbGVzSWZOZWVkZWQoKTsKKyAgICB9CisKKyAgICBtX21h
aW5CYWNraW5nU3RvcmUtPnVwZGF0ZVRpbGVCdWZmZXJzKCk7CisKKyAgICAvLyBUaGUgcHJldmlv
dXMgYmFja2luZyBzdG9yZSBpcyBrZXB0IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdl
ZW4KKyAgICAvLyByZW1vdmluZyB0aGUgZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBu
ZXcgb25lcy4gVGhlIGZpcnN0IHRpbWUKKyAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBw
YWludGVkIHdlIHJlbW92ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZS4KKyAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlLT52aXNpYmxlQXJlYUlzQ292ZXJlZCgpKQorICAgICAgICBtX3ByZXZp
b3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpwdXJnZUJhY2tpbmdTdG9yZXMoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBUZW1wb3Jh
cnlDaGFuZ2U8Ym9vbD4gdXBkYXRlTW9kZVByb3RlY3RvcihtX2lzUHVyZ2luZywgdHJ1ZSk7Cisj
ZW5kaWYKKyAgICBtX21haW5CYWNraW5nU3RvcmUuY2xlYXIoKTsKKyAgICBtX3ByZXZpb3VzQmFj
a2luZ1N0b3JlLmNsZWFyKCk7CisKKyAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsK
KworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldENvb3JkaW5hdG9yKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudCog
Y29vcmRpbmF0b3IpCit7CisgICAgbV9jb29yZGluYXRvciA9IGNvb3JkaW5hdG9yOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1l
bnQoKQoreworICAgIGlmIChzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpCisgICAgICAgIG1fcGVu
ZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCA9IHRydWU7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpoYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKQoreworICAgIGlmIChvcGFj
aXR5KCkgPCAwLjAxICYmICFtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShB
bmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAodG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoY2hpbGRyZW4oKVtpXSktPmhhc1BlbmRpbmdW
aXNpYmxlQ2hhbmdlcygpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ym9vbCBzaG91bGRTeW5jQ2FudmFzID0gZmFsc2U7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisgICAgc2hvdWxkU3luY0NhbnZhcyA9IG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIFN5bmND
YW52YXM7CisjZW5kaWYKKworICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSAmJiAhbV9z
aG91bGRTeW5jQ2hpbGRyZW4gJiYgIW1fc2hvdWxkU3luY0ZpbHRlcnMgJiYgIW1fc2hvdWxkU3lu
Y0ltYWdlQmFja2luZyAmJiAhbV9zaG91bGRTeW5jQW5pbWF0aW9ucyAmJiAhc2hvdWxkU3luY0Nh
bnZhcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0
b3JlVmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0
KCkpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJbnRlZ3JhbChmbG9hdCB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkgPT0gdmFsdWU7Cit9CisKK0Zsb2F0
UG9pbnQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSgpCit7CisgICAgRmxvYXRQb2ludCBvZmZzZXQ7CisgICAgZm9yIChjb25zdCBHcmFwaGlj
c0xheWVyKiBjdXJyTGF5ZXIgPSB0aGlzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXll
ci0+cGFyZW50KCkpCisgICAgICAgIG9mZnNldCArPSBjdXJyTGF5ZXItPnBvc2l0aW9uKCk7CisK
KyAgICByZXR1cm4gb2Zmc2V0OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Y29tcHV0ZVBpeGVsQWxpZ25tZW50KEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBGbG9hdFNpemUmIHNp
emUsIEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0
KQoreworICAgIGlmIChpc0ludGVncmFsKGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSkpIHsKKyAg
ICAgICAgcG9zaXRpb24gPSBtX3Bvc2l0aW9uOworICAgICAgICBzaXplID0gbV9zaXplOworICAg
ICAgICBhbmNob3JQb2ludCA9IG1fYW5jaG9yUG9pbnQ7CisgICAgICAgIGFsaWdubWVudE9mZnNl
dCA9IEZsb2F0U2l6ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRmxvYXRQb2lu
dCBwb3NpdGlvblJlbGF0aXZlVG9CYXNlID0gY29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2Uo
KTsKKworICAgIEZsb2F0UmVjdCBiYXNlUmVsYXRpdmVCb3VuZHMocG9zaXRpb25SZWxhdGl2ZVRv
QmFzZSwgbV9zaXplKTsKKyAgICBGbG9hdFJlY3Qgc2NhbGVkQm91bmRzID0gYmFzZVJlbGF0aXZl
Qm91bmRzOworCisgICAgLy8gU2NhbGUgYnkgdGhlIGVmZmVjdGl2ZSBzY2FsZSBmYWN0b3IgdG8g
Y29tcHV0ZSB0aGUgc2NyZWVuLXJlbGF0aXZlIGJvdW5kcy4KKyAgICBzY2FsZWRCb3VuZHMuc2Nh
bGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKKworICAgIC8vIFJvdW5kIHRvIGludGVnZXIg
Ym91bmRhcmllcy4KKyAgICAvLyBOT1RFOiBXaGVuIHVzaW5nIGVuY2xvc2luZ0ludFJlY3QgKGFz
IG1hYykgaXQgd2lsbCBoYXZlIGRpZmZlcmVudCBzaXplcyBkZXBlbmRpbmcgb24gcG9zaXRpb24u
CisgICAgRmxvYXRSZWN0IGFsaWduZWRCb3VuZHMgPSByb3VuZGVkSW50UmVjdChzY2FsZWRCb3Vu
ZHMpOworCisgICAgLy8gQ29udmVydCBiYWNrIHRvIGxheWVyIGNvb3JkaW5hdGVzLgorICAgIGFs
aWduZWRCb3VuZHMuc2NhbGUoMSAvIGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7CisKKyAgICAv
LyBDb252ZXJ0IGJhY2sgdG8gbGF5ZXIgY29vcmRpbmF0ZXMuCisgICAgYWxpZ25tZW50T2Zmc2V0
ID0gYmFzZVJlbGF0aXZlQm91bmRzLmxvY2F0aW9uKCkgLSBhbGlnbmVkQm91bmRzLmxvY2F0aW9u
KCk7CisKKyAgICBwb3NpdGlvbiA9IG1fcG9zaXRpb24gLSBhbGlnbm1lbnRPZmZzZXQ7CisgICAg
c2l6ZSA9IGFsaWduZWRCb3VuZHMuc2l6ZSgpOworCisgICAgLy8gTm93IHdlIGhhdmUgdG8gY29t
cHV0ZSBhIG5ldyBhbmNob3IgcG9pbnQgd2hpY2ggY29tcGVuc2F0ZXMgZm9yIHJvdW5kaW5nLgor
ICAgIGZsb2F0IGFuY2hvclBvaW50WCA9IG1fYW5jaG9yUG9pbnQueCgpOworICAgIGZsb2F0IGFu
Y2hvclBvaW50WSA9IG1fYW5jaG9yUG9pbnQueSgpOworCisgICAgaWYgKGFsaWduZWRCb3VuZHMu
d2lkdGgoKSkKKyAgICAgICAgYW5jaG9yUG9pbnRYID0gKGJhc2VSZWxhdGl2ZUJvdW5kcy53aWR0
aCgpICogYW5jaG9yUG9pbnRYICsgYWxpZ25tZW50T2Zmc2V0LndpZHRoKCkpIC8gYWxpZ25lZEJv
dW5kcy53aWR0aCgpOworCisgICAgaWYgKGFsaWduZWRCb3VuZHMuaGVpZ2h0KCkpCisgICAgICAg
IGFuY2hvclBvaW50WSA9IChiYXNlUmVsYXRpdmVCb3VuZHMuaGVpZ2h0KCkgKiBhbmNob3JQb2lu
dFkgKyBhbGlnbm1lbnRPZmZzZXQuaGVpZ2h0KCkpIC8gYWxpZ25lZEJvdW5kcy5oZWlnaHQoKTsK
KworICAgIGFuY2hvclBvaW50ID0gRmxvYXRQb2ludDNEKGFuY2hvclBvaW50WCwgYW5jaG9yUG9p
bnRZLCBtX2FuY2hvclBvaW50LnooKSAqIGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKSk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxl
UmVjdCgpCit7CisgICAgLy8gV2hlbiB3ZSBoYXZlIGEgdHJhbnNmb3JtIGFuaW1hdGlvbiwgd2Ug
bmVlZCB0byB1cGRhdGUgdmlzaWJsZSByZWN0IGV2ZXJ5IGZyYW1lIHRvIGFkanVzdCB0aGUgdmlz
aWJsZSByZWN0IG9mIGEgYmFja2luZyBzdG9yZS4KKyAgICBib29sIGhhc0FjdGl2ZVRyYW5zZm9y
bUFuaW1hdGlvbiA9IHNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCk7
CisgICAgaWYgKCFtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ICYmICFoYXNBY3RpdmVUcmFuc2Zv
cm1BbmltYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkVXBkYXRlVmlzaWJs
ZVJlY3QgPSBmYWxzZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyZW50VHJhbnNmb3Jt
ID0gdHJhbnNmb3JtKCk7CisgICAgaWYgKGhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbikKKyAg
ICAgICAgY2xpZW50KCktPmdldEN1cnJlbnRUcmFuc2Zvcm0odGhpcywgY3VycmVudFRyYW5zZm9y
bSk7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRMb2NhbFRyYW5zZm9ybShjdXJyZW50VHJhbnNm
b3JtKTsKKworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0QW5jaG9yUG9pbnQobV9hZGp1c3RlZEFu
Y2hvclBvaW50KTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLnNldFBvc2l0aW9uKG1fYWRqdXN0ZWRQ
b3NpdGlvbik7CisgICAgbV9sYXllclRyYW5zZm9ybS5zZXRTaXplKG1fYWRqdXN0ZWRTaXplKTsK
KworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0RmxhdHRlbmluZyghcHJlc2VydmVzM0QoKSk7Cisg
ICAgbV9sYXllclRyYW5zZm9ybS5zZXRDaGlsZHJlblRyYW5zZm9ybShjaGlsZHJlblRyYW5zZm9y
bSgpKTsKKyAgICBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVUcmFuc2Zvcm1zKHBhcmVudCgpID8g
dG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5tX2xheWVyVHJhbnNmb3JtLmNv
bWJpbmVkRm9yQ2hpbGRyZW4oKSA6IFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworCisgICAgbV9j
YWNoZWRJbnZlcnNlVHJhbnNmb3JtID0gbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVy
c2UoKTsKKworICAgIC8vIFRoZSBjb21iaW5lZCB0cmFuc2Zvcm0gd2lsbCBiZSB1c2VkIGluIHRp
bGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QuCisgICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVz
dG1lbnQoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZEhhdmVC
YWNraW5nU3RvcmUoKSBjb25zdAoreworICAgIHJldHVybiBkcmF3c0NvbnRlbnQoKSAmJiBjb250
ZW50c0FyZVZpc2libGUoKSAmJiAhbV9zaXplLmlzRW1wdHkoKTsKK30KKworYm9vbCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0
aW9uKCkgY29uc3QKK3sKKyAgICBpZiAobV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNP
ZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+c2VsZk9yQW5jZXN0
b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKQorewor
ICAgIGlmIChtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRlZFBy
b3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAo
IW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0FmZmluZSgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPnNlbGZPckFuY2Vz
dG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0
LCBjb25zdCBJbnRTaXplJiBib3hTaXplLCBjb25zdCBBbmltYXRpb24qIGFuaW0sIGNvbnN0IFN0
cmluZyYga2V5ZnJhbWVzTmFtZSwgZG91YmxlIGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQpCit7
CisgICAgQVNTRVJUKCFrZXlmcmFtZXNOYW1lLmlzRW1wdHkoKSk7CisKKyAgICBpZiAoIWFuaW0g
fHwgYW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkgfHwgdmFsdWVMaXN0LnNpemUoKSA8IDIg
fHwgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zv
cm0gJiYgdmFsdWVMaXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKKyAg
ICBib29sIGlnbm9yZWRIYXNCaWdSb3RhdGlvbjsKKworICAgIGlmICh2YWx1ZUxpc3QucHJvcGVy
dHkoKSA9PSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKQorICAgICAgICBsaXN0c01h
dGNoID0gdmFsaWRhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlTGlzdCwgaWdub3JlZEhhc0Jp
Z1JvdGF0aW9uKSA+PSAwOworCisgICAgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lID0gV1RGOjpj
dXJyZW50VGltZSgpIC0gZGVsYXlBc05lZ2F0aXZlVGltZU9mZnNldDsKKyAgICBtX2FuaW1hdGlv
bnMuYWRkKEdyYXBoaWNzTGF5ZXJBbmltYXRpb24oa2V5ZnJhbWVzTmFtZSwgdmFsdWVMaXN0LCBi
b3hTaXplLCBhbmltLCBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUsIGxpc3RzTWF0Y2gpKTsKKyAg
ICBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lci5zdGFydE9uZVNob3QoMCk7CisgICAgZGlkQ2hhbmdl
QW5pbWF0aW9ucygpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6cGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBk
b3VibGUgdGltZSkKK3sKKyAgICBtX2FuaW1hdGlvbnMucGF1c2UoYW5pbWF0aW9uTmFtZSwgdGlt
ZSk7CisgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6cmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkK
K3sKKyAgICBtX2FuaW1hdGlvbnMucmVtb3ZlKGFuaW1hdGlvbk5hbWUpOworICAgIGRpZENoYW5n
ZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN1c3Bl
bmRBbmltYXRpb25zKGRvdWJsZSB0aW1lKQoreworICAgIG1fYW5pbWF0aW9ucy5zdXNwZW5kKHRp
bWUpOworICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIG1fYW5pbWF0aW9ucy5yZXN1
bWUoKTsKKyAgICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI+KikKK3sKKyAgICBjbGllbnQoKS0+bm90aWZ5QW5pbWF0aW9uU3RhcnRl
ZCh0aGlzLCBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUpOworfQorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NTUxZDM1MTFhZGE2NDRlYmY3MzJiZWY2MmU4NmFkOWQ4N2YxYTIwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0wLDAgKzEsMjY4IEBACisvKgorIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcl9oCisjZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCisKKyNpbmNsdWRlICJD
b29yZGluYXRlZEltYWdlQmFja2luZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZv
LmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCisjaW5jbHVkZSAiRmxvYXRQb2ludDNE
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJB
bmltYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgor
I2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3Rv
cmVDbGllbnQuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZVRva2VuLmgiCisjZW5k
aWYKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjsKK2NsYXNzIEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zOworCitjbGFzcyBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgYm9vbCBp
c0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgY29uc3QgPSAwOworCisgICAgLy8gQ29vcmRpbmF0ZWRU
aWxlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVj
dCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlEKSA9IDA7CisKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxlQ29u
dGVudHNSZWN0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29yZGluYXRl
ZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoSW1hZ2UqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3Qg
Q29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckNo
aWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mKSA9IDA7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYp
ID0gMDsKKyNlbmRpZgorI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZpcnR1YWwgdm9p
ZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgUGxhdGZvcm1M
YXllciopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExh
eWVySUQpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVwYWludENv
dW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgR3JhcGhpY3NMYXllckFu
aW1hdGlvbnMmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMo
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250
ZW50VXBkYXRlKGNvbnN0IEludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50
MzJfdCYgYXRsYXNJRCwgSW50UG9pbnQmKSA9IDA7Cit9OworCitjbGFzcyBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllcgorICAgICwgcHVibGljIFRpbGVkQmFj
a2luZ1N0b3JlQ2xpZW50CisgICAgLCBwdWJsaWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Okhv
c3QKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZFRpbGVDbGllbnQgeworcHVibGljOgorICAgIGV4
cGxpY2l0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50Kik7Cisg
ICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCk7CisKKyAgICAvLyBSZWltcGxl
bWVudGF0aW9ucyBmcm9tIEdyYXBoaWNzTGF5ZXIuaC4KKyAgICB2aXJ0dWFsIGJvb2wgc2V0Q2hp
bGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIGFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiwgaW50KSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciop
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIq
LCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHJlcGxhY2VDaGls
ZChHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVGcm9tUGFyZW50KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFBv
c2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzZXJ2ZXMzRChib29sKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5kcyhib29sKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCkgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
dm9pZCBzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldE9wYWNpdHkoZmxvYXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250
ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1RvSW1hZ2UoSW1hZ2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29u
dGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNo
b3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoSW1hZ2UqKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdyYXBoaWNzTGF5ZXIqKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkgT1ZFUlJJREU7Cisg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBGbG9hdFJlY3QmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkg
T1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRpbmdTdGF0ZShjb25zdCBG
bG9hdFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0
YXRlRm9yVGhpc0xheWVyT25seSgpIE9WRVJSSURFOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
KyAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgT1ZF
UlJJREU7CisjZW5kaWYKKyAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZy
YW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0
cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Vz
cGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBy
ZXN1bWVBbmltYXRpb25zKCkgT1ZFUlJJREU7CisKKyAgICBGbG9hdFBvaW50IGNvbXB1dGVQb3Np
dGlvblJlbGF0aXZlVG9CYXNlKCk7CisgICAgdm9pZCBjb21wdXRlUGl4ZWxBbGlnbm1lbnQoRmxv
YXRQb2ludCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYsIEZsb2F0UG9pbnQzRCYgYW5jaG9yUG9pbnQs
IEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KTsKKworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRl
bnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50Jik7CisKKyAgICB2b2lkIHNl
dFJvb3RMYXllcihib29sKTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBpZCgpIGNvbnN0Owor
CisgICAgdm9pZCBzZXRGaXhlZFRvVmlld3BvcnQoYm9vbCBpc0ZpeGVkKSB7IG1fZml4ZWRUb1Zp
ZXdwb3J0ID0gaXNGaXhlZDsgfQorCisgICAgSW50UmVjdCBjb3ZlclJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX21haW5CYWNraW5nU3RvcmUgPyBtX21haW5CYWNraW5nU3RvcmUtPm1hcFRvQ29udGVu
dHMobV9tYWluQmFja2luZ1N0b3JlLT5jb3ZlclJlY3QoKSkgOiBJbnRSZWN0KCk7IH0KKworICAg
IC8vIFRpbGVkQmFja2luZ1N0b3JlQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRCZWdpbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tp
bmdTdG9yZVBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8
SW50UmVjdD4mIHBhaW50ZWRBcmVhKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRC
YWNraW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlQ29udGVudHNSZWN0KCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBJbnRSZWN0IHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIENvbG9yIHRpbGVkQmFja2luZ1N0b3JlQmFja2dyb3VuZENvbG9yKCkgY29u
c3QgT1ZFUlJJREU7CisKKyAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKKyAgICB2aXJ0dWFs
IHZvaWQgY3JlYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZv
JiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxl
KHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0
JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlE
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdp
bkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2lu
dCYpIE9WRVJSSURFOworCisgICAgdm9pZCBzZXRDb29yZGluYXRvcihDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJDbGllbnQqKTsKKworICAgIHZvaWQgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1l
bnQoKTsKKyAgICB2b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworICAgIGJvb2wgaGFzUGVuZGlu
Z1Zpc2libGVDaGFuZ2VzKCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0Up
CisgICAgZW51bSBQZW5kaW5nQ2FudmFzT3BlcmF0aW9uIHsKKyAgICAgICAgTm9uZSA9IDB4MDAs
CisgICAgICAgIENyZWF0ZUNhbnZhcyA9IDB4MDEsCisgICAgICAgIERlc3Ryb3lDYW52YXMgPSAw
eDAyLAorICAgICAgICBTeW5jQ2FudmFzID0gMHgwNCwKKyAgICAgICAgQ3JlYXRlQW5kU3luY0Nh
bnZhcyA9IENyZWF0ZUNhbnZhcyB8IFN5bmNDYW52YXMsCisgICAgICAgIFJlY3JlYXRlQ2FudmFz
ID0gQ3JlYXRlQW5kU3luY0NhbnZhcyB8IERlc3Ryb3lDYW52YXMKKyAgICB9OworCisgICAgdm9p
ZCBzeW5jQ2FudmFzKCk7CisgICAgdm9pZCBkZXN0cm95Q2FudmFzSWZOZWVkZWQoKTsKKyAgICB2
b2lkIGNyZWF0ZUNhbnZhc0lmTmVlZGVkKCk7CisjZW5kaWYKKworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYsIGZsb2F0IHdpZHRoKSBPVkVSUklERTsKKworICAg
IGJvb2wgZml4ZWRUb1ZpZXdwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9maXhlZFRvVmlld3BvcnQ7
IH0KKworICAgIHZvaWQgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworICAgIHZvaWQgZGlkQ2hhbmdl
QW5pbWF0aW9ucygpOworICAgIHZvaWQgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKKyAgICB2b2lkIGRp
ZENoYW5nZUNoaWxkcmVuKCk7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZvaWQgZGlk
Q2hhbmdlRmlsdGVycygpOworI2VuZGlmCisgICAgdm9pZCBkaWRDaGFuZ2VJbWFnZUJhY2tpbmco
KTsKKworICAgIHZvaWQgc3luY0xheWVyU3RhdGUoKTsKKyAgICB2b2lkIHN5bmNBbmltYXRpb25z
KCk7CisgICAgdm9pZCBzeW5jQ2hpbGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisg
ICAgdm9pZCBzeW5jRmlsdGVycygpOworI2VuZGlmCisgICAgdm9pZCBzeW5jSW1hZ2VCYWNraW5n
KCk7CisgICAgdm9pZCBjb21wdXRlVHJhbnNmb3JtZWRWaXNpYmxlUmVjdCgpOworICAgIHZvaWQg
dXBkYXRlQ29udGVudEJ1ZmZlcnMoKTsKKworICAgIHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlKCk7
CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKKworICAgIC8vIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjpIb3N0CisgICAgdmlydHVhbCBib29sIGltYWdlQmFja2luZ1Zp
c2libGUoKSBPVkVSUklERTsKKyAgICBib29sIHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSBjb25z
dDsKKyAgICBib29sIHNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKCkg
Y29uc3Q7CisgICAgYm9vbCBzZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCk7
CisgICAgdm9pZCBhZGp1c3RDb250ZW50c1NjYWxlKCk7CisKKyAgICB2b2lkIHNldFNob3VsZFVw
ZGF0ZVZpc2libGVSZWN0KCk7CisgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOwor
CisgICAgdm9pZCBhbmltYXRpb25TdGFydGVkVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI+Kik7CisKKyAgICBDb29yZGluYXRlZExheWVySUQgbV9pZDsKKyAgICBDb29y
ZGluYXRlZExheWVySW5mbyBtX2xheWVySW5mbzsKKyAgICBHcmFwaGljc0xheWVyVHJhbnNmb3Jt
IG1fbGF5ZXJUcmFuc2Zvcm07CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jYWNoZWRJbnZl
cnNlVHJhbnNmb3JtOworICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0OworICAg
IEZsb2F0U2l6ZSBtX2FkanVzdGVkU2l6ZTsKKyAgICBGbG9hdFBvaW50IG1fYWRqdXN0ZWRQb3Np
dGlvbjsKKyAgICBGbG9hdFBvaW50M0QgbV9hZGp1c3RlZEFuY2hvclBvaW50OworCisjaWZuZGVm
IE5ERUJVRworICAgIGJvb2wgbV9pc1B1cmdpbmc7CisjZW5kaWYKKyAgICBib29sIG1fc2hvdWxk
VXBkYXRlVmlzaWJsZVJlY3Q6IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0YXRlOiAx
OworICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5
bmNGaWx0ZXJzOiAxOworICAgIGJvb2wgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nOiAxOworICAg
IGJvb2wgbV9zaG91bGRTeW5jQW5pbWF0aW9uczogMTsKKyAgICBib29sIG1fZml4ZWRUb1ZpZXdw
b3J0IDogMTsKKyAgICBib29sIG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50IDogMTsK
KyAgICBib29sIG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCA6IDE7CisjaWYgVVNFKEdS
QVBISUNTX1NVUkZBQ0UpCisgICAgYm9vbCBtX2lzVmFsaWRDYW52YXMgOiAxOworICAgIHVuc2ln
bmVkIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiA6IDM7CisjZW5kaWYKKworICAgIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllckNsaWVudCogbV9jb29yZGluYXRvcjsKKyAgICBPd25QdHI8VGlsZWRC
YWNraW5nU3RvcmU+IG1fbWFpbkJhY2tpbmdTdG9yZTsKKyAgICBPd25QdHI8VGlsZWRCYWNraW5n
U3RvcmU+IG1fcHJldmlvdXNCYWNraW5nU3RvcmU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IG1fY29t
cG9zaXRlZEltYWdlOworICAgIE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdl
UHRyOworICAgIFJlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gbV9jb29yZGluYXRlZElt
YWdlQmFja2luZzsKKworICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2FudmFzUGxhdGZvcm1MYXllcjsK
KyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBJbnRTaXplIG1fY2FudmFzU2l6ZTsKKyAg
ICBHcmFwaGljc1N1cmZhY2VUb2tlbiBtX2NhbnZhc1Rva2VuOworI2VuZGlmCisgICAgVGltZXI8
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcjsKKyAgICBH
cmFwaGljc0xheWVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CisgICAgZG91YmxlIG1fbGFzdEFu
aW1hdGlvblN0YXJ0VGltZTsKK307CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8g
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIxNWZiMzYxM2I5
MDdiNmIxZDlmNWU4OTExOWRiYjI2NDRmNDU5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuY3BwCkBAIC0wLDAgKzEsNjk4IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXll
ci5oIgorI2luY2x1ZGUgPE9wZW5HTFNoaW1zLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQor
I2luY2x1ZGUgIkNvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
ZGlzcGF0Y2hPbk1haW5UaHJlYWQoY29uc3QgRnVuY3Rpb248dm9pZCgpPiYgZnVuY3Rpb24pCit7
CisgICAgaWYgKGlzTWFpblRocmVhZCgpKQorICAgICAgICBmdW5jdGlvbigpOworICAgIGVsc2UK
KyAgICAgICAgY2FsbE9uTWFpblRocmVhZChmdW5jdGlvbik7Cit9CisKK3N0YXRpYyBGbG9hdFBv
aW50IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlv
biwgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlQ29udGVudFJlY3QsIGNvbnN0IEZsb2F0U2l6ZSYg
Y29udGVudFNpemUpCit7CisgICAgZmxvYXQgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptYXgoc2Ny
b2xsUG9zaXRpb24ueCgpLCAwLjBmKTsKKyAgICBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1pbihz
Y3JvbGxQb3NpdGlvblgsIGNvbnRlbnRTaXplLndpZHRoKCkgLSB2aXNpYmxlQ29udGVudFJlY3Qu
d2lkdGgoKSk7CisKKyAgICBmbG9hdCBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1heChzY3JvbGxQ
b3NpdGlvbi55KCksIDAuMGYpOworICAgIHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWluKHNjcm9s
bFBvc2l0aW9uWSwgY29udGVudFNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlQ29udGVudFJlY3QuaGVp
Z2h0KCkpOworICAgIHJldHVybiBGbG9hdFBvaW50KHNjcm9sbFBvc2l0aW9uWCwgc2Nyb2xsUG9z
aXRpb25ZKTsKK30KKworc3RhdGljIGJvb2wgbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVybiBsYXllci0+ZHJhd3NDb250ZW50KCkg
JiYgbGF5ZXItPmNvbnRlbnRzQXJlVmlzaWJsZSgpICYmICFsYXllci0+c2l6ZSgpLmlzRW1wdHko
KTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUoQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVu
dChjbGllbnQpCisgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQorICAgICwgbV9yb290TGF5ZXJJRChJ
bnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKQorICAgICwgbV9hbmltYXRpb25zTG9ja2VkKGZhbHNl
KQorI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAgICAsIG1fYW5pbWF0aW9u
RnJhbWVSZXF1ZXN0ZWQoZmFsc2UpCisjZW5kaWYKKyAgICAsIG1fYmFja2dyb3VuZENvbG9yKENv
bG9yOjp3aGl0ZSkKKyAgICAsIG1fc2V0RHJhd3NCYWNrZ3JvdW5kKGZhbHNlKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6fkNv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBGbG9hdFJlY3QmIGNsaXBSZWN0LCBUZXh0
dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3MpCit7CisgICAgaWYgKCFtX3RleHR1cmVN
YXBwZXIpIHsKKyAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRl
KFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgICAgICBzdGF0aWNfY2FzdDxUZXh0dXJl
TWFwcGVyR0wqPihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpLT5zZXRFbmFibGVFZGdlRGlzdGFuY2VB
bnRpYWxpYXNpbmcodHJ1ZSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+
YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVNYXBwZXI6Ok9wZW5HTE1vZGUpOworICAgIHN5
bmNSZW1vdGVDb250ZW50KCk7CisKKyAgICBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7
CisgICAgR3JhcGhpY3NMYXllciogY3VycmVudFJvb3RMYXllciA9IHJvb3RMYXllcigpOworICAg
IGlmICghY3VycmVudFJvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dHVyZU1h
cHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVyZU1hcHBlckxheWVyKGN1cnJlbnRSb290TGF5ZXIp
OworCisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF5ZXItPnNldFRl
eHR1cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKKyAgICBpZiAoIW1fYW5pbWF0aW9u
c0xvY2tlZCkKKyAgICAgICAgbGF5ZXItPmFwcGx5QW5pbWF0aW9uc1JlY3Vyc2l2ZWx5KCk7Cisg
ICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKFBhaW50RmxhZ3MpOworICAgIG1fdGV4
dHVyZU1hcHBlci0+YmVnaW5DbGlwKFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNsaXBSZWN0KTsK
KworICAgIGlmIChtX3NldERyYXdzQmFja2dyb3VuZCkgeworICAgICAgICBSR0JBMzIgcmdiYSA9
IG1ha2VSR0JBMzJGcm9tRmxvYXRzKG1fYmFja2dyb3VuZENvbG9yLnJlZCgpLAorICAgICAgICAg
ICAgbV9iYWNrZ3JvdW5kQ29sb3IuZ3JlZW4oKSwgbV9iYWNrZ3JvdW5kQ29sb3IuYmx1ZSgpLAor
ICAgICAgICAgICAgbV9iYWNrZ3JvdW5kQ29sb3IuYWxwaGEoKSAqIG9wYWNpdHkpOworICAgICAg
ICBtX3RleHR1cmVNYXBwZXItPmRyYXdTb2xpZENvbG9yKGNsaXBSZWN0LCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCBDb2xvcihyZ2JhKSk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRSb290TGF5
ZXItPm9wYWNpdHkoKSAhPSBvcGFjaXR5IHx8IGN1cnJlbnRSb290TGF5ZXItPnRyYW5zZm9ybSgp
ICE9IG1hdHJpeCkgeworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRPcGFjaXR5KG9wYWNp
dHkpOworICAgICAgICBjdXJyZW50Um9vdExheWVyLT5zZXRUcmFuc2Zvcm0obWF0cml4KTsKKyAg
ICAgICAgY3VycmVudFJvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOworICAgIH0KKworICAgIGxheWVyLT5wYWludCgpOworICAgIG1fdGV4dHVyZU1hcHBl
ci0+ZW5kQ2xpcCgpOworICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKworICAg
IGlmIChsYXllci0+ZGVzY2VuZGFudHNPclNlbGZIYXZlUnVubmluZ0FuaW1hdGlvbnMoKSkKKyAg
ICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
Ojp1cGRhdGVWaWV3cG9ydCwgdGhpcykpOworCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQorICAgIGlmIChtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKSB7CisgICAgICAgIG1f
YW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQgPSBmYWxzZTsKKyAgICAgICAgZGlzcGF0Y2hPbk1haW5U
aHJlYWQoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphbmltYXRpb25GcmFtZVJlYWR5
LCB0aGlzKSk7CisgICAgfQorI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YW5pbWF0aW9uRnJhbWVS
ZWFkeSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5hbmltYXRpb25GcmFtZVJlYWR5KCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKQoreworICAgIG1f
YW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQgPSB0cnVlOworfQorI2VuZGlmCisKKyNpZiBQTEFURk9S
TShRVCkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwYWludFRvR3JhcGhpY3NDb250
ZXh0KFFQYWludGVyKiBwYWludGVyKQorI2VsaWYgVVNFKENBSVJPKQordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoY2Fpcm9fdCogcGFpbnRlcikK
KyNlbmRpZgoreworICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVN
YXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoKTsKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFw
cGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsK
KyAgICBzeW5jUmVtb3RlQ29udGVudCgpOworICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIg
PSB0b1RleHR1cmVNYXBwZXJMYXllcihyb290TGF5ZXIoKSk7CisKKyAgICBpZiAoIWxheWVyKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBh
aW50ZXIpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGlj
c0NvbnRleHQpOworICAgIG1fdGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOworCisgICAg
aWYgKG1fc2V0RHJhd3NCYWNrZ3JvdW5kKQorICAgICAgICBtX3RleHR1cmVNYXBwZXItPmRyYXdT
b2xpZENvbG9yKGdyYXBoaWNzQ29udGV4dC5jbGlwQm91bmRzKCksIFRyYW5zZm9ybWF0aW9uTWF0
cml4KCksIG1fYmFja2dyb3VuZENvbG9yKTsKKworICAgIGxheWVyLT5wYWludCgpOworICAgIG1f
dGV4dHVyZU1hcHBlci0+ZW5kUGFpbnRpbmcoKTsKKyAgICBtX3RleHR1cmVNYXBwZXItPnNldEdy
YXBoaWNzQ29udGV4dCgwKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNl
dENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRzU2l6ZSkKK3sKKyAgICBtX2Nv
bnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCA9IHJlY3Q7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjp1cGRhdGVWaWV3cG9ydCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT51cGRhdGVWaWV3cG9y
dCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6YWRqdXN0UG9zaXRpb25G
b3JGaXhlZExheWVycygpCit7CisgICAgaWYgKG1fZml4ZWRMYXllcnMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBGaXhlZCBsYXllciBwb3NpdGlvbnMgYXJlIHVwZGF0ZWQg
YnkgdGhlIHdlYiBwcm9jZXNzIHdoZW4gd2UgdXBkYXRlIHRoZSB2aXNpYmxlIGNvbnRlbnRzIHJl
Y3QgLyBzY3JvbGwgcG9zaXRpb24uCisgICAgLy8gSWYgd2Ugd2FudCB0aG9zZSBsYXllcnMgdG8g
Zm9sbG93IGFjY3VyYXRlbHkgdGhlIHZpZXdwb3J0IHdoZW4gd2UgbW92ZSBiZXR3ZWVuIHRoZSB3
ZWIgcHJvY2VzcyB1cGRhdGVzLCB3ZSBoYXZlIHRvIG9mZnNldAorICAgIC8vIHRoZW0gYnkgdGhl
IGRlbHRhIGJldHdlZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBwb3NpdGlvbiBvZiB0
aGUgdmlld3BvcnQgdXNlZCBmb3IgdGhlIGxhc3QgbGF5b3V0LgorICAgIEZsb2F0UG9pbnQgc2Ny
b2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNSZWN0
LmxvY2F0aW9uKCksIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOworICAg
IEZsb2F0UG9pbnQgcmVuZGVyZWRTY3JvbGxQb3NpdGlvbiA9IGJvdW5kZWRTY3JvbGxQb3NpdGlv
bihtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiwgbV92aXNpYmxlQ29udGVudHNSZWN0
LCBtX2NvbnRlbnRzU2l6ZSk7CisgICAgRmxvYXRTaXplIGRlbHRhID0gc2Nyb2xsUG9zaXRpb24g
LSByZW5kZXJlZFNjcm9sbFBvc2l0aW9uOworCisgICAgTGF5ZXJSYXdQdHJNYXA6Oml0ZXJhdG9y
IGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7CisgICAgZm9yIChMYXllclJhd1B0ck1hcDo6aXRl
cmF0b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAg
ICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnZhbHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25EZWx0
YUlmTmVlZGVkKGRlbHRhKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRp
ZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQoreworICAg
IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IHBvc2l0aW9uOworfQor
CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYsIFBh
c3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlKQoreworICAgIEFTU0VSVChtX3RleHR1
cmVNYXBwZXIpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAg
ICBBU1NFUlQoIW1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKTsKKworICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY2FudmFzQmFja2luZ1N0b3Jl
KFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7CisgICAgbV9zdXJm
YWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQsIGNhbnZhc0JhY2tpbmdTdG9yZSk7CisKKyAgICBjYW52
YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNzU3VyZmFjZShzdXJmYWNlKTsKKyAgICBsYXllci0+
c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQoKSk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBp
ZCwgdWludDMyX3QgZnJvbnRCdWZmZXIpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7
CisgICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKTsKKworICAg
IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQmFja2luZ1N0
b3Jlcy5maW5kKGlkKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3Rv
cmU+IGNhbnZhc0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKworICAgIGNhbnZhc0JhY2tpbmdT
dG9yZS0+c3dhcEJ1ZmZlcnNJZk5lZWRlZChmcm9udEJ1ZmZlcik7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkK
K3sKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKKyAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyQnlJRChpZCk7CisgICAgQVNTRVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29u
dGFpbnMoaWQpKTsKKworICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGlkKTsKKyAg
ICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKDApOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVy
SUQgaWQsIGludCB2YWx1ZSkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJ
RChpZCk7CisgICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldFJlcGFp
bnRDb3VudCh2YWx1ZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRM
YXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5h
dGVkTGF5ZXJJRD4mIGNoaWxkSURzKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJCeUlEKGlkKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NMYXllcio+IGNoaWxkcmVuOworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElEcy5zaXplKCk7ICsraSkgeworICAgICAgICBD
b29yZGluYXRlZExheWVySUQgY2hpbGRJRCA9IGNoaWxkSURzW2ldOworICAgICAgICBHcmFwaGlj
c0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGlsZElEKTsKKyAgICAgICAgY2hpbGRyZW4uYXBw
ZW5kKGNoaWxkKTsKKyAgICB9CisgICAgbGF5ZXItPnNldENoaWxkcmVuKGNoaWxkcmVuKTsKK30K
KworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiBmaWx0ZXJzKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlE
KGlkKTsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBpbmplY3RDYWNoZWRDdXN0b21G
aWx0ZXJQcm9ncmFtcyhmaWx0ZXJzKTsKKyNlbmRpZgorICAgIGxheWVyLT5zZXRGaWx0ZXJzKGZp
bHRlcnMpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6aW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykgY29uc3QKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRmlsdGVyT3BlcmF0aW9u
KiBvcGVyYXRpb24gPSBmaWx0ZXJzLm9wZXJhdGlvbnMoKS5hdChpKS5nZXQoKTsKKyAgICAgICAg
aWYgKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6Q1VT
VE9NKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ29vcmRpbmF0ZWRDdXN0b21G
aWx0ZXJPcGVyYXRpb24qIGN1c3RvbU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PENvb3JkaW5hdGVk
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKKyAgICAgICAgQVNTRVJUKCFjdXN0
b21PcGVyYXRpb24tPnByb2dyYW0oKSk7CisgICAgICAgIEN1c3RvbUZpbHRlclByb2dyYW1NYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmZpbmQoY3VzdG9t
T3BlcmF0aW9uLT5wcm9ncmFtSUQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fY3VzdG9t
RmlsdGVyUHJvZ3JhbXMuZW5kKCkpOworICAgICAgICBjdXN0b21PcGVyYXRpb24tPnNldFByb2dy
YW0oaXRlci0+dmFsdWUuZ2V0KCkpOworICAgIH0KK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21G
aWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8pCit7CisgICAgQVNTRVJUKCFtX2N1c3RvbUZp
bHRlclByb2dyYW1zLmNvbnRhaW5zKGlkKSk7CisgICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5z
ZXQoaWQsIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHByb2dyYW1JbmZv
LnZlcnRleFNoYWRlclN0cmluZygpLCBwcm9ncmFtSW5mby5mcmFnbWVudFNoYWRlclN0cmluZygp
LCBwcm9ncmFtSW5mby5wcm9ncmFtVHlwZSgpLCBwcm9ncmFtSW5mby5taXhTZXR0aW5ncygpLCBw
cm9ncmFtSW5mby5tZXNoVHlwZSgpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKK3sKKyAgICBDdXN0b21GaWx0
ZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdGVyID0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5maW5k
KGlkKTsKKyAgICBBU1NFUlQoaXRlciAhPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmVuZCgpKTsK
KyAgICBpZiAobV90ZXh0dXJlTWFwcGVyKQorICAgICAgICBtX3RleHR1cmVNYXBwZXItPnJlbW92
ZUNhY2hlZEN1c3RvbUZpbHRlclByb2dyYW0oaXRlci0+dmFsdWUuZ2V0KCkpOworICAgIG1fY3Vz
dG9tRmlsdGVyUHJvZ3JhbXMucmVtb3ZlKGl0ZXIpOworfQorI2VuZGlmIC8vIEVOQUJMRShDU1Nf
U0hBREVSUykKKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyU3RhdGUo
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgbGF5ZXJJ
bmZvKQoreworICAgIEFTU0VSVChtX3Jvb3RMYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExh
eWVySUQpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKworICAg
IGxheWVyLT5zZXRSZXBsaWNhdGVkQnlMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllcklu
Zm8ucmVwbGljYSkpOworICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlz
dHMobGF5ZXJJbmZvLm1hc2spKTsKKworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllcklu
Zm8uYW5jaG9yUG9pbnQpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsK
KyAgICBsYXllci0+c2V0U2l6ZShsYXllckluZm8uc2l6ZSk7CisKKyAgICBsYXllci0+c2V0VHJh
bnNmb3JtKGxheWVySW5mby50cmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5z
Zm9ybShsYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOworICAgIGxheWVyLT5zZXRCYWNrZmFj
ZVZpc2liaWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7CisgICAgbGF5ZXItPnNldENv
bnRlbnRzT3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7CisgICAgbGF5ZXItPnNldENv
bnRlbnRzUmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKKyAgICBsYXllci0+c2V0Q29udGVu
dHNUb1NvbGlkQ29sb3IobGF5ZXJJbmZvLnNvbGlkQ29sb3IpOworICAgIGxheWVyLT5zZXREcmF3
c0NvbnRlbnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7CisgICAgbGF5ZXItPnNldENvbnRlbnRz
VmlzaWJsZShsYXllckluZm8uY29udGVudHNWaXNpYmxlKTsKKyAgICB0b0dyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhlZFRv
Vmlld3BvcnQpOworICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5ZXJJbmZvLnNob3dE
ZWJ1Z0JvcmRlcnMpOworICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlcihsYXllckluZm8uZGVidWdC
b3JkZXJDb2xvciwgbGF5ZXJJbmZvLmRlYnVnQm9yZGVyV2lkdGgpOworICAgIGxheWVyLT5zZXRT
aG93UmVwYWludENvdW50ZXIobGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlcik7CisKKyAgICBp
ZiAobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCkKKyAgICAgICAgbV9maXhlZExheWVycy5hZGQo
aWQsIGxheWVyKTsKKyAgICBlbHNlCisgICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsK
KworICAgIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUlE
KTsKKyAgICBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7CisKKyAgICAvLyBOZXZl
ciBtYWtlIHRoZSByb290IGxheWVyIGNsaXAuCisgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
bGF5ZXJJbmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7
CisgICAgbGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOworICAgIGxheWVyLT5z
ZXRQcmVzZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOworfQorCitHcmFwaGljc0xheWVy
KiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmdldExheWVyQnlJRElmRXhpc3RzKENvb3JkaW5h
dGVkTGF5ZXJJRCBpZCkKK3sKKyAgICByZXR1cm4gKGlkICE9IEludmFsaWRDb29yZGluYXRlZExh
eWVySUQpID8gbGF5ZXJCeUlEKGlkKSA6IDA7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpjcmVhdGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlk
cykKK3sKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgaWRzLnNpemUoKTsgKytp
bmRleCkKKyAgICAgICAgY3JlYXRlTGF5ZXIoaWRzW2luZGV4XSk7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcihDb29yZGluYXRlZExheWVySUQgaWQpCit7
CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG5ld0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKDAgLyogZmFjdG9yeSAqLywgdGhpcyk7CisgICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1h
cHBlcihuZXdMYXllci5nZXQoKSktPnNldEhhc093bkJhY2tpbmdTdG9yZShmYWxzZSk7CisgICAg
bV9sYXllcnMuYWRkKGlkLCBuZXdMYXllci5yZWxlYXNlKCkpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExh
eWVySUQ+JiBsYXllcklEcykKK3sKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
bGF5ZXJJRHMuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICBkZWxldGVMYXllcihsYXllcklEc1tp
bmRleF0pOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXIo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQpCit7CisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+
IGxheWVyID0gbV9sYXllcnMudGFrZShsYXllcklEKTsKKyAgICBBU1NFUlQobGF5ZXIpOworCisg
ICAgbV9iYWNraW5nU3RvcmVzLnJlbW92ZShsYXllci5nZXQoKSk7CisgICAgbV9maXhlZExheWVy
cy5yZW1vdmUobGF5ZXJJRCk7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgbV9zdXJm
YWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5ZXJJRCk7CisjZW5kaWYKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RMYXllcklEKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklEKQoreworICAgIEFTU0VSVChsYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVy
SUQpOworICAgIEFTU0VSVChtX3Jvb3RMYXllcklEID09IEludmFsaWRDb29yZGluYXRlZExheWVy
SUQpOworCisgICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7CisKKyAgICBHcmFwaGljc0xheWVy
KiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBBU1NFUlQobV9yb290TGF5ZXItPmNo
aWxkcmVuKCkuaXNFbXB0eSgpKTsKKyAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobGF5ZXIpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHJlcGFyZUNvbnRlbnRCYWNraW5n
U3RvcmUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBpZiAoIWxheWVyU2hv
dWxkSGF2ZUJhY2tpbmdTdG9yZShncmFwaGljc0xheWVyKSkgeworICAgICAgICByZW1vdmVCYWNr
aW5nU3RvcmVJZk5lZWRlZChncmFwaGljc0xheWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGdyYXBoaWNzTGF5ZXIpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBpZiAobV9iYWNraW5nU3RvcmVz
LmNvbnRhaW5zKGdyYXBoaWNzTGF5ZXIpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29yZGluYXRlZEJhY2tpbmdT
dG9yZTo6Y3JlYXRlKCkpOworICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShncmFwaGljc0xheWVy
LT5zaXplKCkpOworICAgIG1fYmFja2luZ1N0b3Jlcy5hZGQoZ3JhcGhpY3NMYXllciwgYmFja2lu
Z1N0b3JlKTsKKyAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGdyYXBoaWNzTGF5ZXIp
LT5zZXRCYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGdy
YXBoaWNzTGF5ZXIpCit7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNr
aW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMudGFrZShncmFwaGljc0xheWVyKTsKKyAgICBpZiAo
IWJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdG9HcmFwaGljc0xheWVyVGV4
dHVyZU1hcHBlcihncmFwaGljc0xheWVyKS0+c2V0QmFja2luZ1N0b3JlKDApOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNp
emUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKK3sKKyAgICBSZWZQdHI8Q29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQoZ3JhcGhp
Y3NMYXllcik7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZSk7CisgICAgYmFja2luZ1N0b3JlLT5z
ZXRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJf
dCB0aWxlSUQsIGZsb2F0IHNjYWxlKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJCeUlEKGxheWVySUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFj
a2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7CisgICAgQVNTRVJUKGJhY2tp
bmdTdG9yZSk7CisgICAgYmFja2luZ1N0b3JlLT5jcmVhdGVUaWxlKHRpbGVJRCwgc2NhbGUpOwor
ICAgIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKGxheWVyKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCkKK3sKKyAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxh
eWVyQnlJRChsYXllcklEKTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOworICAgIGlmICghYmFja2lu
Z1N0b3JlKQorICAgICAgICByZXR1cm47CisKKyAgICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUo
dGlsZUlEKTsKKyAgICByZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Cisg
ICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlVGlsZShDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJiB1cGRh
dGUpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Cisg
ICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tp
bmdTdG9yZXMuZ2V0KGxheWVyKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKworICAgIFN1
cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5hdGxhc0lEKTsK
KyAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7CisKKyAgICBiYWNraW5nU3RvcmUt
PnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRpbGVSZWN0LCBp
dC0+dmFsdWUsIHVwZGF0ZS5vZmZzZXQpOworICAgIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5
ZXJTaXplKGxheWVyKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRk
KGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVh
dGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4gc3VyZmFjZSkKK3sKKyAgICBBU1NFUlQoIW1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJ
RCkpOworICAgIG1fc3VyZmFjZXMuYWRkKGF0bGFzSUQsIHN1cmZhY2UpOworfQorCit2b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJ
RCkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lEKSk7CisgICAgbV9z
dXJmYWNlcy5yZW1vdmUoYXRsYXNJRCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlE
KQoreworICAgIEFTU0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAg
ICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOworICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJ
RCwgYmFja2luZ1N0b3JlLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjp1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFn
ZUlELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gc3VyZmFjZSkKK3sKKyAgICBBU1NF
UlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKKyAgICBJbWFnZUJhY2tpbmdN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7CisgICAgUmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7CisK
KyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBpcyByZWFsaXplZCB0byBDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZSB3aXRoIG9ubHkgb25lIHRpbGUgaW4gVUkgUHJvY2Vzcy4KKyAgICBiYWNr
aW5nU3RvcmUtPmNyZWF0ZVRpbGUoMSAvKiBpZCAqLywgMSAvKiBzY2FsZSAqLyk7CisgICAgSW50
UmVjdCByZWN0KEludFBvaW50Ojp6ZXJvKCksIHN1cmZhY2UtPnNpemUoKSk7CisgICAgLy8gU2Vl
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZSgp
CisgICAgQVNTRVJUKDIwMDAgPj0gc3RkOjptYXgocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgp
KSk7CisgICAgYmFja2luZ1N0b3JlLT5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKKyAgICBiYWNraW5n
U3RvcmUtPnVwZGF0ZVRpbGUoMSAvKiBpZCAqLywgcmVjdCwgcmVjdCwgc3VyZmFjZSwgcmVjdC5s
b2NhdGlvbigpKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQo
YmFja2luZ1N0b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNsZWFy
SW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQor
eworICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIElt
YWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlE
KTsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0
LT52YWx1ZTsKKyAgICBiYWNraW5nU3RvcmUtPnJlbW92ZUFsbFRpbGVzKCk7CisgICAgbV9iYWNr
aW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBBU1NFUlQobV9pbWFnZUJhY2tpbmdzLmNv
bnRhaW5zKGltYWdlSUQpKTsKKworICAgIC8vIFdlIGRvbid0IHdhbnQgVGV4dHVyZU1hcHBlckxh
eWVyIHJlZmVycyBhIGRhbmdsaW5nIHBvaW50ZXIuCisgICAgbV9yZWxlYXNlZEltYWdlQmFja2lu
Z3MuYXBwZW5kKG1faW1hZ2VCYWNraW5ncy50YWtlKGltYWdlSUQpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoR3JhcGhpY3NM
YXllciogbGF5ZXIsIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKK3sKKyAgICBp
ZiAoaW1hZ2VJRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgeworICAgICAg
ICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKDApOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChp
bWFnZUlEKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9pbWFnZUJhY2tpbmdzLmVuZCgpKTsKKyAgICBs
YXllci0+c2V0Q29udGVudHNUb01lZGlhKGl0LT52YWx1ZS5nZXQoKSk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVSZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRl
ZCgpCit7CisgICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuY2xlYXIoKTsKK30KKwordm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRp
b25zKCkKK3sKKyAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6
aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgpOwor
ICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0ZXJh
dG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPmNvbW1pdFRpbGVPcGVyYXRpb25zKG1fdGV4dHVy
ZU1hcHBlci5nZXQoKSk7CisKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMu
Y2xlYXIoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJD
aGFuZ2VzKCkKK3sKKyAgICBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiA9IG1fcGVu
ZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKKworICAgIC8vIFNpbmNlIHRoZSBm
cmFtZSBoYXMgbm93IGJlZW4gcmVuZGVyZWQsIHdlIGNhbiBzYWZlbHkgdW5sb2NrIHRoZSBhbmlt
YXRpb25zIHVudGlsIHRoZSBuZXh0IGxheW91dC4KKyAgICBzZXRBbmltYXRpb25zTG9ja2VkKGZh
bHNlKTsKKworICAgIG1fcm9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUoRmxvYXRSZWN0
KCkpOworICAgIGNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7CisgICAgcmVt
b3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKKworICAgIC8vIFRoZSBwZW5kaW5n
IHRpbGVzIHN0YXRlIGlzIG9uIGl0cyB3YXkgZm9yIHRoZSBzY3JlZW4sIHRlbGwgdGhlIHdlYiBw
cm9jZXNzIHRvIHJlbmRlciB0aGUgbmV4dCBvbmUuCisgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQo
YmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMpKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbmRlck5leHRGcmFtZSgpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+cmVuZGVyTmV4dEZyYW1lKCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjplbnN1cmVSb290TGF5ZXIoKQor
eworICAgIGlmIChtX3Jvb3RMYXllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCAvKiBmYWN0b3J5ICovLCB0aGlzKTsKKyAgICBt
X3Jvb3RMYXllci0+c2V0TWFza3NUb0JvdW5kcyhmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNl
dERyYXdzQ29udGVudChmYWxzZSk7CisgICAgbV9yb290TGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgwLCAwLCAwKSk7CisKKyAgICAvLyBUaGUgcm9vdCBsYXllciBzaG91bGQgbm90
IGhhdmUgemVybyBzaXplLCBvciBpdCB3b3VsZCBiZSBvcHRpbWl6ZWQgb3V0LgorICAgIG1fcm9v
dExheWVyLT5zZXRTaXplKEZsb2F0U2l6ZSgxLjAsIDEuMCkpOworCisgICAgQVNTRVJUKG1fdGV4
dHVyZU1hcHBlcik7CisgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIobV9yb290TGF5ZXIuZ2V0KCkp
LT5zZXRUZXh0dXJlTWFwcGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jUmVtb3RlQ29udGVudCgpCit7CisgICAgLy8gV2Ug
ZW5xdWV1ZSBtZXNzYWdlcyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSBy
ZXF1aXJlIGFuIGFjdGl2ZSBHTCBjb250ZXh0LgorICAgIGVuc3VyZVJvb3RMYXllcigpOworCisg
ICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiByZW5kZXJRdWV1ZTsKKyAgICBib29sIGNhbGxl
ZE9uTWFpblRocmVhZCA9IFdURjo6aXNNYWluVGhyZWFkKCk7CisgICAgaWYgKCFjYWxsZWRPbk1h
aW5UaHJlYWQpCisgICAgICAgIG1fcmVuZGVyUXVldWVNdXRleC5sb2NrKCk7CisgICAgcmVuZGVy
UXVldWUuc3dhcChtX3JlbmRlclF1ZXVlKTsKKyAgICBpZiAoIWNhbGxlZE9uTWFpblRocmVhZCkK
KyAgICAgICAgbV9yZW5kZXJRdWV1ZU11dGV4LnVubG9jaygpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCByZW5kZXJRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAgcmVuZGVyUXVldWVb
aV0oKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlR0xSZXNvdXJj
ZXMoKQoreworICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOworICAgIG1fcmVsZWFzZWRJbWFn
ZUJhY2tpbmdzLmNsZWFyKCk7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgbV9zdXJm
YWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOworI2VuZGlmCisgICAgbV9zdXJmYWNlcy5jbGVhcigp
OworCisgICAgbV9yb290TGF5ZXIuY2xlYXIoKTsKKyAgICBtX3Jvb3RMYXllcklEID0gSW52YWxp
ZENvb3JkaW5hdGVkTGF5ZXJJRDsKKyAgICBtX2xheWVycy5jbGVhcigpOworICAgIG1fZml4ZWRM
YXllcnMuY2xlYXIoKTsKKyAgICBtX3RleHR1cmVNYXBwZXIuY2xlYXIoKTsKKyAgICBtX2JhY2tp
bmdTdG9yZXMuY2xlYXIoKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMu
Y2xlYXIoKTsKKworICAgIHNldEFjdGl2ZShmYWxzZSk7CisgICAgZGlzcGF0Y2hPbk1haW5UaHJl
YWQoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwdXJnZUJhY2tpbmdTdG9yZXMsIHRo
aXMpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlQmFja2luZ1N0
b3JlcygpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+cHVyZ2VCYWNr
aW5nU3RvcmVzKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXll
ckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyYgYW5pbWF0aW9ucykKK3sKKyAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciog
bGF5ZXIgPSB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyQnlJRChpZCkpOworI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlv
bnMuYW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEtleWZyYW1lVmFs
dWVMaXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFt
ZXMoKTsKKyAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVy
dHlXZWJraXRGaWx0ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0
IEZpbHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZp
bHRlckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKKyAgICAgICAgICAgIGluamVj
dENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7CisgICAg
ICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBsYXllci0+c2V0QW5pbWF0aW9ucyhhbmltYXRpb25z
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1hdGlvbnNMb2Nr
ZWQoYm9vbCBsb2NrZWQpCit7CisgICAgbV9hbmltYXRpb25zTG9ja2VkID0gbG9ja2VkOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGV0YWNoKCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIG1fY2xpZW50ID0gMDsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5j
dGlvbikKK3sKKyAgICBpZiAoIW1faXNBY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVyUXVl
dWVNdXRleCk7CisgICAgbV9yZW5kZXJRdWV1ZS5hcHBlbmQoZnVuY3Rpb24pOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAg
IGlmIChtX2lzQWN0aXZlID09IGFjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSGF2
ZSB0byBjbGVhciByZW5kZXIgcXVldWUgaW4gYm90aCBjYXNlcy4KKyAgICAvLyBJZiB0aGVyZSBh
cmUgc29tZSB1cGRhdGVzIGluIHF1ZXVlIGR1cmluZyBhY3RpdmF0aW9uIHRoZW4gdGhvc2UgdXBk
YXRlcyBhcmUgZnJvbSBwcmV2aW91cyBpbnN0YW5jZSBvZiBwYWludCBub2RlCisgICAgLy8gYW5k
IGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSBuZXdseSBjcmVhdGVkIGluc3RhbmNlLgorICAgIG1f
cmVuZGVyUXVldWUuY2xlYXIoKTsKKyAgICBtX2lzQWN0aXZlID0gYWN0aXZlOworICAgIGlmICht
X2lzQWN0aXZlKQorICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnJlbmRlck5leHRGcmFtZSwgdGhpcykpOworfQorCit2b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK3sKKyAgICBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzA0MWRiYzEwYzU0MGZiNzBiZDFiMWY2OTYwYThjZTdiYjlmMDljMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVfaAorI2RlZmlu
ZSBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBbmltYXRpb24uaCIKKyNp
bmNsdWRlICJHcmFwaGljc1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOworY2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87CitjbGFzcyBDdXN0b21G
aWx0ZXJQcm9ncmFtOworY2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm87CitjbGFzcyBUZXh0
dXJlTWFwcGVyTGF5ZXI7CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCB7
CitwdWJsaWM6CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgPSAwOworI2VuZGlmCisgICAgdmlydHVhbCB2
b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaWV3cG9ydCgpID0gMDsKK307
CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+LCBwdWJsaWMgR3JhcGhpY3NMYXllckNs
aWVudCB7CitwdWJsaWM6CisgICAgc3RydWN0IFRpbGVVcGRhdGUgeworICAgICAgICBJbnRSZWN0
IHNvdXJjZVJlY3Q7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3Q7CisgICAgICAgIHVpbnQzMl90
IGF0bGFzSUQ7CisgICAgICAgIEludFBvaW50IG9mZnNldDsKKyAgICAgICAgVGlsZVVwZGF0ZShj
b25zdCBJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHRpbGUsIHVpbnQzMl90IGF0bGFz
LCBjb25zdCBJbnRQb2ludCYgbmV3T2Zmc2V0KQorICAgICAgICAgICAgOiBzb3VyY2VSZWN0KHNv
dXJjZSkKKyAgICAgICAgICAgICwgdGlsZVJlY3QodGlsZSkKKyAgICAgICAgICAgICwgYXRsYXNJ
RChhdGxhcykKKyAgICAgICAgICAgICwgb2Zmc2V0KG5ld09mZnNldCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgfTsKKyAgICBleHBsaWNpdCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50Kik7CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKCk7CisgICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBGbG9hdFJlY3QmLCBUZXh0dXJlTWFw
cGVyOjpQYWludEZsYWdzID0gMCk7CisjaWYgUExBVEZPUk0oUVQpCisgICAgdm9pZCBwYWludFRv
R3JhcGhpY3NDb250ZXh0KFFQYWludGVyKik7CisjZWxpZiBVU0UoQ0FJUk8pCisgICAgdm9pZCBw
YWludFRvR3JhcGhpY3NDb250ZXh0KGNhaXJvX3QqKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0Q29u
dGVudHNTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRz
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkK
KyAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IEludFNpemUm
LCBQYXNzUmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4pOworICAgIHZvaWQgc3luY0NhbnZhcyhDb29y
ZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsKKyAgICB2b2lkIGRlc3Ryb3lD
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyNlbmRpZgorICAgIHZvaWQgc2V0TGF5ZXJSZXBh
aW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOworCisgICAgdm9pZCBkZXRh
Y2goKTsKKyAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisK
KyAgICAvLyBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8g
dXNlIGJlbG93IHR3byBtZXRob2RzLCBiZWNhdXNlIHR3byBtZXRob2RzIGFjY2VzcyBtZW1iZXJz
IHRoYXQgdGhlIG1haW4gdGhyZWFkIG1hbmFnZXMuIFNlZSBtX2NsaWVudC4KKyAgICAvLyBDdXJy
ZW50bHksIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSgpIGxvY2tzIHRoZSBtYWluIHRo
cmVhZCBiZWZvcmUgY2FsbGluZyBib3RoIG1ldGhvZHMuCisgICAgdm9pZCBwdXJnZUdMUmVzb3Vy
Y2VzKCk7CisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisKKyAgICB2b2lkIGNyZWF0ZUxheWVy
cyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgZGVsZXRlTGF5
ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7CisgICAgdm9pZCBzZXRSb290
TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOworICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJlbihD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Cisg
ICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0
ZWRMYXllckluZm8mKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBzZXRMYXll
ckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJik7Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgdm9pZCBpbmplY3RDYWNoZWRDdXN0
b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdDsK
KyAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBDdXN0b21G
aWx0ZXJQcm9ncmFtSW5mbyYpOworICAgIHZvaWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShp
bnQgaWQpOworI2VuZGlmCisKKyAgICB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklE
LCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNjYWxlKTsKKyAgICB2b2lkIHJlbW92ZVRpbGUoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQpOworICAgIHZvaWQgdXBkYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwor
ICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+KTsKKyAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90
IGF0bGFzSUQpOworICAgIHZvaWQgZmx1c2hMYXllckNoYW5nZXMoKTsKKyAgICB2b2lkIGNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHVwZGF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkU3VyZmFjZT4pOworICAgIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEKTsKKyAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgdm9p
ZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOworICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9y
KGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBlbmFibGUp
IHsgbV9zZXREcmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KKworI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKKyAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xheWVycy5jb250YWlucyhpZCkp
OworICAgICAgICBBU1NFUlQoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAg
ICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOworICAgIH0KKyAgICBHcmFwaGljc0xheWVyKiBn
ZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQpOworICAgIEdyYXBoaWNzTGF5
ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdldCgpOyB9CisKKyAgICB2b2lk
IHN5bmNSZW1vdGVDb250ZW50KCk7CisgICAgdm9pZCBhZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5
ZXJzKCk7CisKKyAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIEdyYXBoaWNzTGF5ZXJDbGll
bnQuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhp
Y3NMYXllciosIGRvdWJsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWly
ZWQoY29uc3QgR3JhcGhpY3NMYXllciopIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBHcmFwaGljc0xheWVy
UGFpbnRpbmdQaGFzZSwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFIHsgfQorCisgICAgdm9pZCBk
aXNwYXRjaE9uTWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7CisgICAgdm9pZCB1
cGRhdGVWaWV3cG9ydCgpOworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKKyAg
ICB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKKyNlbmRpZgorICAgIHZvaWQgcmVuZGVyTmV4
dEZyYW1lKCk7CisgICAgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKKworICAgIHZvaWQgY3Jl
YXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICB2b2lkIGRlbGV0ZUxheWVyKENvb3Jk
aW5hdGVkTGF5ZXJJRCk7CisKKyAgICB2b2lkIGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIoR3Jh
cGhpY3NMYXllciosIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgcmVtb3Zl
UmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZOZWVkZWQoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RMYXll
cigpOworICAgIHZvaWQgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKKwor
ICAgIHZvaWQgcHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciopOworICAg
IHZvaWQgY3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoR3JhcGhpY3NMYXllciopOworICAgIHZv
aWQgcmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoR3JhcGhpY3NMYXllciopOworICAgIHZvaWQg
cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoR3JhcGhpY3NMYXllciopOworCisgICAg
RmxvYXRTaXplIG1fY29udGVudHNTaXplOworICAgIEZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50
c1JlY3Q7CisKKyAgICAvLyBSZW5kZXIgcXVldWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1h
aW4gdGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9kZSBjYWxsIHN0YWNrIQorICAgIFZlY3RvcjxGdW5j
dGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1ZTsKKyAgICBNdXRleCBtX3JlbmRlclF1ZXVlTXV0
ZXg7CisKKyAgICBPd25QdHI8VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOworCisgICAg
dHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZT4gPiBJbWFnZUJhY2tpbmdNYXA7CisgICAgSW1hZ2VCYWNraW5nTWFw
IG1faW1hZ2VCYWNraW5nczsKKyAgICBWZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlPiA+IG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzOworCisgICAgdHlwZWRlZiBIYXNoTWFwPEdy
YXBoaWNzTGF5ZXIqLCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gQmFja2luZ1N0
b3JlTWFwOworICAgIEJhY2tpbmdTdG9yZU1hcCBtX2JhY2tpbmdTdG9yZXM7CisKKyAgICBIYXNo
U2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2JhY2tpbmdTdG9yZXNXaXRo
UGVuZGluZ0J1ZmZlcnM7CisKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICB0eXBlZGVm
IEhhc2hNYXA8Q29vcmRpbmF0ZWRMYXllcklELCBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKKyAgICBTdXJmYWNlQmFja2lu
Z1N0b3JlTWFwIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXM7CisjZW5kaWYKKworICAgIHR5cGVkZWYg
SGFzaE1hcDx1aW50MzJfdCAvKiBhdGxhc0lEICovLCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiA+IFN1cmZhY2VNYXA7CisgICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VzOworCisgICAgLy8gQmVs
b3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9ubHkgdGhlIG1haW4gdGhyZWFkLiBUaGUg
cGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gYWNjZXNzIGJvdGgg
bWVtYmVycy4KKyAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQqIG1fY2xpZW50Owor
ICAgIGJvb2wgbV9pc0FjdGl2ZTsKKworICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RM
YXllcjsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVySUQsIE93blB0cjxH
cmFwaGljc0xheWVyPiA+IExheWVyTWFwOworICAgIExheWVyTWFwIG1fbGF5ZXJzOworICAgIHR5
cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVySUQsIEdyYXBoaWNzTGF5ZXIqPiBMYXllclJh
d1B0ck1hcDsKKyAgICBMYXllclJhd1B0ck1hcCBtX2ZpeGVkTGF5ZXJzOworICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCBtX3Jvb3RMYXllcklEOworICAgIEZsb2F0UG9pbnQgbV9yZW5kZXJlZENvbnRl
bnRzU2Nyb2xsUG9zaXRpb247CisgICAgRmxvYXRQb2ludCBtX3BlbmRpbmdSZW5kZXJlZENvbnRl
bnRzU2Nyb2xsUG9zaXRpb247CisgICAgYm9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7CisjaWYgRU5B
QkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIGJvb2wgbV9hbmltYXRpb25GcmFtZVJl
cXVlc3RlZDsKKyNlbmRpZgorICAgIENvbG9yIG1fYmFja2dyb3VuZENvbG9yOworICAgIGJvb2wg
bV9zZXREcmF3c0JhY2tncm91bmQ7CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEN1c3RvbUZpbHRlclByb2dyYW0+ID4gQ3VzdG9tRmls
dGVyUHJvZ3JhbU1hcDsKKyAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwIG1fY3VzdG9tRmlsdGVy
UHJvZ3JhbXM7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZV9oCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY5MjQ4Mjg3NWQ1Y2ZjMjFkYjZiYjBk
NmYyMDBlMWQ5OWM1YjIwZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5j
cHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAx
MDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKEltYWdlKiBpbWFnZSkK
K3sKKyAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBrZWVwcyBhIFJlZlB0cjxJbWFnZT4g
bWVtYmVyLCBzbyB0aGUgc2FtZSBJbWFnZSBwb2ludGVyIGNhbiBub3QgcmVmZXIgdHdvIGRpZmZl
cmVudCBpbnN0YW5jZXMgdW50aWwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgcmVsZWFzZXMgdGhl
IG1lbWJlci4KKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEPihpbWFnZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0b3IqIGNsaWVudCwgUGFz
c1JlZlB0cjxJbWFnZT4gaW1hZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGlu
YXRlZEltYWdlQmFja2luZyhjbGllbnQsIGltYWdlKSk7Cit9CisKK0Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciogY2xpZW50LCBQYXNz
UmVmUHRyPEltYWdlPiBpbWFnZSkKKyAgICA6IG1fY29vcmRpbmF0b3IoY2xpZW50KQorICAgICwg
bV9pbWFnZShpbWFnZSkKKyAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCht
X2ltYWdlLmdldCgpKSkKKyAgICAsIG1fY2xlYXJDb250ZW50c1RpbWVyKHRoaXMsICZDb29yZGlu
YXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQpCisgICAgLCBtX2lzRGly
dHkoZmFsc2UpCisgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKK3sKKyAgICAvLyBGSVhNRTogV2Ug
d291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBkaXJlY3RseSBpbnRvIGEgR3JhcGhp
Y3NTdXJmYWNlLgorICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAxNDI2CisKKyAgICBtX2Nv
b3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQoKSk7Cit9CisKK0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKQoreworfQorCit2b2lkIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KEhvc3QqIGhvc3QpCit7CisgICAgQVNTRVJUKCFt
X2hvc3RzLmNvbnRhaW5zKGhvc3QpKTsKKyAgICBtX2hvc3RzLmFwcGVuZChob3N0KTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdChIb3N0KiBob3N0KQorewor
ICAgIHNpemVfdCBwb3NpdGlvbiA9IG1faG9zdHMuZmluZChob3N0KTsKKyAgICBBU1NFUlQocG9z
aXRpb24gIT0gbm90Rm91bmQpOworICAgIG1faG9zdHMucmVtb3ZlKHBvc2l0aW9uKTsKKworICAg
IGlmIChtX2hvc3RzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb29yZGluYXRvci0+cmVtb3ZlSW1h
Z2VCYWNraW5nKGlkKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjptYXJr
RGlydHkoKQoreworICAgIG1faXNEaXJ0eSA9IHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc6OnVwZGF0ZSgpCit7CisgICAgcmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgpOwor
CisgICAgYm9vbCBjaGFuZ2VkVG9WaXNpYmxlOworICAgIHVwZGF0ZVZpc2liaWxpdHlJZk5lZWRl
ZChjaGFuZ2VkVG9WaXNpYmxlKTsKKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIWNoYW5nZWRUb1Zpc2libGUpIHsKKyAgICAgICAgaWYgKCFtX2lzRGly
dHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKG1fbmF0aXZlSW1hZ2VQdHIg
PT0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkgeworICAgICAgICAgICAg
bV9pc0RpcnR5ID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShtX2ltYWdlLT5z
aXplKCksIG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBDb29yZGluYXRlZFN1cmZh
Y2U6OlN1cHBvcnRzQWxwaGEgOiBDb29yZGluYXRlZFN1cmZhY2U6Ok5vRmxhZ3MpOworICAgIGlm
ICghbV9zdXJmYWNlKSB7CisgICAgICAgIG1faXNEaXJ0eSA9IGZhbHNlOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSW50UmVjdCByZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW1hZ2Ut
PnNpemUoKSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dCA9IG1fc3VyZmFj
ZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZSht
X2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZWN0LCByZWN0KTsKKworICAgIG1f
bmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwor
CisgICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgdHJ5IGFnYWluIGluIHRoZSBu
ZXh0IHVwZGF0ZS4KKyAgICBib29sIHN1Y2Nlc3MgPSBtX2Nvb3JkaW5hdG9yLT51cGRhdGVJbWFn
ZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKKyAgICBtX2lzRGlydHkgPSAhc3VjY2VzczsKK30K
Kwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgp
Cit7CisgICAgLy8gV2UgbXVzdCBrZWVwIG1fc3VyZmFjZSB1bnRpbCBVSSBQcm9jZXNzIHJlYWRz
IG1fc3VyZmFjZS4KKyAgICAvLyBJZiBtX3N1cmZhY2UgZXhpc3RzLCBpdCB3YXMgY3JlYXRlZCBp
biB0aGUgcHJldmlvdXMgdXBkYXRlLgorICAgIG1fc3VyZmFjZS5jbGVhcigpOworfQorCitzdGF0
aWMgY29uc3QgZG91YmxlIGNsZWFyQ29udGVudHNUaW1lckludGVydmFsID0gMzsKKwordm9pZCBD
b29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNo
YW5nZWRUb1Zpc2libGUpCit7CisgICAgYm9vbCBwcmV2aW91c0lzVmlzaWJsZSA9IG1faXNWaXNp
YmxlOworCisgICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1faG9zdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1faG9zdHNbaV0tPmltYWdl
QmFja2luZ1Zpc2libGUoKSkgeworICAgICAgICAgICAgbV9pc1Zpc2libGUgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoYW5nZWRUb0lu
dmlzaWJsZSA9IHByZXZpb3VzSXNWaXNpYmxlICYmICFtX2lzVmlzaWJsZTsKKyAgICBpZiAoY2hh
bmdlZFRvSW52aXNpYmxlKSB7CisgICAgICAgIEFTU0VSVCghbV9jbGVhckNvbnRlbnRzVGltZXIu
aXNBY3RpdmUoKSk7CisgICAgICAgIG1fY2xlYXJDb250ZW50c1RpbWVyLnN0YXJ0T25lU2hvdChj
bGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCk7CisgICAgfQorCisgICAgY2hhbmdlZFRvVmlzaWJs
ZSA9ICFwcmV2aW91c0lzVmlzaWJsZSAmJiBtX2lzVmlzaWJsZTsKKworICAgIGlmIChtX2lzVmlz
aWJsZSAmJiBtX2NsZWFyQ29udGVudHNUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIG1fY2xl
YXJDb250ZW50c1RpbWVyLnN0b3AoKTsKKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB1cGRh
dGUgdGhlIHRleHR1cmUgaWYgd2UgZGlkbid0IHJlbW92ZSB0aGUgdGV4dHVyZS4KKyAgICAgICAg
Y2hhbmdlZFRvVmlzaWJsZSA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBDb29yZGluYXRlZElt
YWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc+KikKK3sKKyAgICBtX2Nvb3JkaW5hdG9yLT5jbGVhckltYWdlQmFja2luZ0NvbnRl
bnRzKGlkKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWI1YjU3YTZlY2IxMDFlZjc1YjI5MTkxYjU3NTA3YmVkZGEyZjc2NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRl
ZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworCisjaWZuZGVmIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKKyNkZWZpbmUgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRT
dXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nIDogcHVibGljIFJl
ZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IHsKK3B1YmxpYzoKKyAgICBjbGFzcyBD
b29yZGluYXRvciB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKKyAgICAgICAgdmlydHVh
bCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBQYXNz
UmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNs
ZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpID0gMDsKKyAgICB9OworCisgICAgY2xhc3MgSG9zdCB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgpID0gMDsKKyAgICB9Owor
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShD
b29yZGluYXRvciosIFBhc3NSZWZQdHI8SW1hZ2U+KTsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRl
ZEltYWdlQmFja2luZygpOworCisgICAgc3RhdGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQg
Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChJbWFnZSopOworICAgIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisKKyAgICB2b2lkIGFkZEhv
c3QoSG9zdCopOworICAgIHZvaWQgcmVtb3ZlSG9zdChIb3N0Kik7CisKKyAgICAvLyBXaGVuIGEg
bmV3IGltYWdlIGlzIHVwZGF0ZWQgb3IgYW4gYW5pbWF0ZWQgZ2lmIGlzIHByb2dyZXNzZWQsIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllciBjYWxscyBtYXJrRGlydHkoKS4KKyAgICB2b2lkIG1hcmtE
aXJ0eSgpOworCisgICAgLy8gQ3JlYXRlLCByZW1vdmUgb3IgdXBkYXRlIGl0cyBiYWNraW5nLgor
ICAgIHZvaWQgdXBkYXRlKCk7CisKK3ByaXZhdGU6CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0b3IqLCBQYXNzUmVmUHRyPEltYWdlPik7CisKKyAgICB2b2lkIHJlbGVhc2VT
dXJmYWNlSWZOZWVkZWQoKTsKKyAgICB2b2lkIHVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29s
JiBjaGFuZ2VkVG9WaXNpYmxlKTsKKyAgICB2b2lkIGNsZWFyQ29udGVudHNUaW1lckZpcmVkKFRp
bWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopOworCisgICAgQ29vcmRpbmF0b3IqIG1fY29v
cmRpbmF0b3I7CisgICAgUmVmUHRyPEltYWdlPiBtX2ltYWdlOworICAgIE5hdGl2ZUltYWdlUHRy
IG1fbmF0aXZlSW1hZ2VQdHI7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBtX2lkOwor
ICAgIFZlY3RvcjxIb3N0Kj4gbV9ob3N0czsKKworICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZh
Y2U+IG1fc3VyZmFjZTsKKworICAgIFRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBtX2Ns
ZWFyQ29udGVudHNUaW1lcjsKKworICAgIGJvb2wgbV9pc0RpcnR5OworICAgIGJvb2wgbV9pc1Zp
c2libGU7CisKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZ19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjBmYTJhMTJlZDNmNDZjMDg0MjNiNGI5YzRkYzkxNjU2OWYwMzhiNzYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRMYXllckluZm8uaApAQCAtMCwwICsxLDg1IEBACisvKgorIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZExheWVySW5m
b19oCisjZGVmaW5lIENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRl
ZiB1aW50MzJfdCBDb29yZGluYXRlZExheWVySUQ7CitlbnVtIHsgSW52YWxpZENvb3JkaW5hdGVk
TGF5ZXJJRCA9IDAgfTsKKwordHlwZWRlZiB1aW50NjRfdCBDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEOworZW51bSB7IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEID0gMCB9OworCisv
LyBOT1RFOiBDb29yZGluYXRlZExheWVySW5mbyBzaG91bGQgb25seSB1c2UgUE9EIHR5cGVzLCBh
cyB0byBtYWtlIHNlcmlhbGl6YXRpb24gZmFzdGVyLgorc3RydWN0IENvb3JkaW5hdGVkTGF5ZXJJ
bmZvIHsKKyAgICBDb29yZGluYXRlZExheWVySW5mbygpCisgICAgICAgIDogcmVwbGljYShJbnZh
bGlkQ29vcmRpbmF0ZWRMYXllcklEKQorICAgICAgICAsIG1hc2soSW52YWxpZENvb3JkaW5hdGVk
TGF5ZXJJRCkKKyAgICAgICAgLCBpbWFnZUlEKEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEKQorICAgICAgICAsIG9wYWNpdHkoMCkKKyAgICAgICAgLCBkZWJ1Z0JvcmRlcldpZHRoKDAp
CisgICAgICAgICwgZmxhZ3MoMCkgeyB9CisKKyAgICBDb29yZGluYXRlZExheWVySUQgcmVwbGlj
YTsKKyAgICBDb29yZGluYXRlZExheWVySUQgbWFzazsKKyAgICBDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQ7CisKKyAgICBGbG9hdFBvaW50IHBvczsKKyAgICBGbG9hdFBvaW50M0Qg
YW5jaG9yUG9pbnQ7CisgICAgRmxvYXRTaXplIHNpemU7CisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3Jt
OworICAgIEludFJlY3QgY29udGVudHNSZWN0OworICAgIGZsb2F0IG9wYWNpdHk7CisgICAgQ29s
b3Igc29saWRDb2xvcjsKKyAgICBDb2xvciBkZWJ1Z0JvcmRlckNvbG9yOworICAgIGZsb2F0IGRl
YnVnQm9yZGVyV2lkdGg7CisKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsKKyAgICAgICAgICAgIGJvb2wgZHJhd3NDb250
ZW50IDogMTsKKyAgICAgICAgICAgIGJvb2wgY29udGVudHNWaXNpYmxlIDogMTsKKyAgICAgICAg
ICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDogMTsKKyAgICAgICAgICAgIGJvb2wgbWFza3NUb0Jv
dW5kcyA6IDE7CisgICAgICAgICAgICBib29sIHByZXNlcnZlczNEIDogMTsKKyAgICAgICAgICAg
IGJvb2wgaXNSb290TGF5ZXI6IDE7CisgICAgICAgICAgICBib29sIGZpeGVkVG9WaWV3cG9ydCA6
IDE7CisgICAgICAgICAgICBib29sIHNob3dEZWJ1Z0JvcmRlcnMgOiAxOworICAgICAgICAgICAg
Ym9vbCBzaG93UmVwYWludENvdW50ZXIgOiAxOworICAgICAgICB9OworICAgICAgICB1bnNpZ25l
ZCBmbGFnczsKKyAgICB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRMYXll
ckluZm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mOWE5NDIzNzI3NDM1YTQ1ODRkNzViZDAwMzhhYjM2ZDcxZjBhMzZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRTdXJmYWNlLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ29vcmRpbmF0ZWRTdXJmYWNlOjpGYWN0b3J5KiBDb29yZGluYXRlZFN1
cmZhY2U6OnNfZmFjdG9yeSA9IDA7CisKK3ZvaWQgQ29vcmRpbmF0ZWRTdXJmYWNlOjpzZXRGYWN0
b3J5KENvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSBmYWN0b3J5KQoreworICAgIHNfZmFjdG9y
eSA9IGZhY3Rvcnk7Cit9CisKK1Bhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBDb29yZGlu
YXRlZFN1cmZhY2U6OmNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKK3sK
KyAgICBBU1NFUlQoc19mYWN0b3J5KTsKKyAgICByZXR1cm4gc19mYWN0b3J5KHNpemUsIGZsYWdz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFj
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMwNzdjM2MwOWM0YWIwNjdmZmI5ODY2NmI0MGY2MDc1OTc4NWU1ZDYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisKKyBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRTdXJmYWNlX2gKKyNkZWZpbmUg
Q29vcmRpbmF0ZWRTdXJmYWNlX2gKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBCaXRtYXBUZXh0dXJlOworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworCitjbGFzcyBDb29yZGluYXRlZFN1cmZhY2UgOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRTdXJmYWNlPiB7CitwdWJsaWM6CisgICAgZW51bSBG
bGFnIHsKKyAgICAgICAgTm9GbGFncyA9IDAsCisgICAgICAgIFN1cHBvcnRzQWxwaGEgPSAxIDw8
IDAsCisgICAgfTsKKyAgICB0eXBlZGVmIHVuc2lnbmVkIEZsYWdzOworCisgICAgdHlwZWRlZiBQ
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gRmFjdG9yeShjb25zdCBJbnRTaXplJiwgRmxh
Z3MpOworICAgIHN0YXRpYyB2b2lkIHNldEZhY3RvcnkoRmFjdG9yeSk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYsIEZsYWdz
KTsKKworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkU3VyZmFjZSgpIHsgfQorCisgICAgYm9vbCBz
dXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gZmxhZ3MoKSAmIFN1cHBvcnRzQWxwaGE7IH0K
KyAgICB2aXJ0dWFsIEludFNpemUgc2l6ZSgpIGNvbnN0ID0gMDsKKworICAgIC8vIENyZWF0ZSBh
IGdyYXBoaWNzIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCB0byBwYWludCBpbnRvIHRoZSBiYWNr
aW5nIHN0b3JlLgorICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0
ZUdyYXBoaWNzQ29udGV4dChjb25zdCBJbnRSZWN0JikgPSAwOworCisjaWYgVVNFKFRFWFRVUkVf
TUFQUEVSKQorICAgIHZpcnR1YWwgdm9pZCBjb3B5VG9UZXh0dXJlKFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4sIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50UG9pbnQmIHNvdXJjZU9m
ZnNldCkgPSAwOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIEZsYWdzIGZsYWdz
KCkgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIHN0YXRpYyBDb29yZGluYXRlZFN1cmZhY2U6
OkZhY3RvcnkqIHNfZmFjdG9yeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBDb29yZGluYXRlZFN1
cmZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZjlkMzRlNjA1YjBlMmIyNTI2OGJhYTY2YzQ4MDVkYmVmYTIwOTMxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5jcHAKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZFRpbGUuaCIKKworI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQorCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJTdXJm
YWNlVXBkYXRlSW5mby5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlQ2xpZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IEludmFsaWRDb29y
ZGluYXRlZFRpbGVJRCA9IDA7CisKK0Nvb3JkaW5hdGVkVGlsZTo6Q29vcmRpbmF0ZWRUaWxlKENv
b3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50LCBUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNr
aW5nU3RvcmUsIGNvbnN0IENvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQorICAgIDogbV9jbGll
bnQoY2xpZW50KQorICAgICwgbV90aWxlZEJhY2tpbmdTdG9yZSh0aWxlZEJhY2tpbmdTdG9yZSkK
KyAgICAsIG1fY29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkKKyAgICAsIG1fcmVjdCh0aWxlZEJh
Y2tpbmdTdG9yZS0+dGlsZVJlY3RGb3JDb29yZGluYXRlKHRpbGVDb29yZGluYXRlKSkKKyAgICAs
IG1fSUQoSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEKQorICAgICwgbV9kaXJ0eVJlY3QobV9yZWN0
KQoreworfQorCitDb29yZGluYXRlZFRpbGU6On5Db29yZGluYXRlZFRpbGUoKQoreworICAgIGlm
IChtX0lEICE9IEludmFsaWRDb29yZGluYXRlZFRpbGVJRCkKKyAgICAgICAgbV9jbGllbnQtPnJl
bW92ZVRpbGUobV9JRCk7Cit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRUaWxlOjppc0RpcnR5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gIW1fZGlydHlSZWN0LmlzRW1wdHkoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZFRpbGU6OmludmFsaWRhdGUoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQoreworICAg
IEludFJlY3QgdGlsZURpcnR5UmVjdCA9IGludGVyc2VjdGlvbihkaXJ0eVJlY3QsIG1fcmVjdCk7
CisgICAgaWYgKHRpbGVEaXJ0eVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2RpcnR5UmVjdC51bml0ZSh0aWxlRGlydHlSZWN0KTsKK30KKworVmVjdG9yPEludFJlY3Q+
IENvb3JkaW5hdGVkVGlsZTo6dXBkYXRlQmFja0J1ZmZlcigpCit7CisgICAgaWYgKCFpc0RpcnR5
KCkpCisgICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKKworICAgIFN1cmZhY2VVcGRh
dGVJbmZvIHVwZGF0ZUluZm87CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3ND
b250ZXh0ID0gbV9jbGllbnQtPmJlZ2luQ29udGVudFVwZGF0ZShtX2RpcnR5UmVjdC5zaXplKCks
IHVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlSW5mby5zdXJmYWNlT2Zmc2V0KTsKKyAgICBpZiAo
IWdyYXBoaWNzQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxJbnRSZWN0PigpOworICAg
IGdyYXBoaWNzQ29udGV4dC0+dHJhbnNsYXRlKC1tX2RpcnR5UmVjdC54KCksIC1tX2RpcnR5UmVj
dC55KCkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2NhbGUoRmxvYXRTaXplKG1fdGlsZWRCYWNr
aW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNT
Y2FsZSgpKSk7CisgICAgbV90aWxlZEJhY2tpbmdTdG9yZS0+Y2xpZW50KCktPnRpbGVkQmFja2lu
Z1N0b3JlUGFpbnQoZ3JhcGhpY3NDb250ZXh0LmdldCgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5t
YXBUb0NvbnRlbnRzKG1fZGlydHlSZWN0KSk7CisKKyAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3Qg
PSBtX2RpcnR5UmVjdDsKKyAgICB1cGRhdGVJbmZvLnVwZGF0ZVJlY3QubW92ZSgtbV9yZWN0Lngo
KSwgLW1fcmVjdC55KCkpOworICAgIHVwZGF0ZUluZm8uc2NhbGVGYWN0b3IgPSBtX3RpbGVkQmFj
a2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlbGVhc2Uo
KTsKKworICAgIHN0YXRpYyB1aW50MzJfdCBpZCA9IDE7CisgICAgaWYgKG1fSUQgPT0gSW52YWxp
ZENvb3JkaW5hdGVkVGlsZUlEKSB7CisgICAgICAgIG1fSUQgPSBpZCsrOworICAgICAgICAvLyBX
ZSBtYXkgZ2V0IGFuIGludmFsaWQgSUQgZHVlIHRvIHdyYXAtYXJvdW5kIG9uIG92ZXJmbG93Lgor
ICAgICAgICBpZiAobV9JRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCisgICAgICAgICAg
ICBtX0lEID0gaWQrKzsKKyAgICAgICAgbV9jbGllbnQtPmNyZWF0ZVRpbGUobV9JRCwgdXBkYXRl
SW5mbywgbV9yZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVRpbGUo
bV9JRCwgdXBkYXRlSW5mbywgbV9yZWN0KTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiB1cGRhdGVk
UmVjdHM7CisgICAgdXBkYXRlZFJlY3RzLmFwcGVuZChtX2RpcnR5UmVjdCk7CisgICAgbV9kaXJ0
eVJlY3QgPSBJbnRSZWN0KCk7CisgICAgcmV0dXJuIHVwZGF0ZWRSZWN0czsKK30KKwordm9pZCBD
b29yZGluYXRlZFRpbGU6OnN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpCit7CisgICAgLy8gSGFuZGxl
ZCBieSB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kLgorfQorCitib29sIENvb3JkaW5hdGVkVGls
ZTo6aXNSZWFkeVRvUGFpbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX0lEICE9IEludmFsaWRD
b29yZGluYXRlZFRpbGVJRDsKK30KKwordm9pZCBDb29yZGluYXRlZFRpbGU6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIENvb3JkaW5hdGVkVGlsZTo6cmVzaXplKGNvbnN0IEludFNpemUmIG5ld1Np
emUpCit7CisgICAgbV9yZWN0ID0gSW50UmVjdChtX3JlY3QubG9jYXRpb24oKSwgbmV3U2l6ZSk7
CisgICAgbV9kaXJ0eVJlY3QgPSBtX3JlY3Q7Cit9CisKK0Nvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6
OkNvb3JkaW5hdGVkVGlsZUJhY2tlbmQoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQpCisg
ICAgOiBtX2NsaWVudChjbGllbnQpCit7Cit9CisKK1Bhc3NSZWZQdHI8VGlsZT4gQ29vcmRpbmF0
ZWRUaWxlQmFja2VuZDo6Y3JlYXRlVGlsZShUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5n
U3RvcmUsIGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKQoreworICAgIHJl
dHVybiBDb29yZGluYXRlZFRpbGU6OmNyZWF0ZShtX2NsaWVudCwgdGlsZWRCYWNraW5nU3RvcmUs
IHRpbGVDb29yZGluYXRlKTsKK30KKwordm9pZCBDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpwYWlu
dENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkVGlsZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJlOTliZmRhZmVmNDkxZGFkM2EzNmZmYzViMjNmNDQ0N2RiZWU0NWYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRUaWxlLmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZFRpbGVfaAorI2RlZmluZSBDb29yZGluYXRlZFRp
bGVfaAorCisjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVkQmFja2luZ1N0b3JlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50OworY2xh
c3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBTdXJmYWNlVXBkYXRlSW5mbzsKK2NsYXNzIFRpbGVkQmFj
a2luZ1N0b3JlOworCitjbGFzcyBDb29yZGluYXRlZFRpbGUgOiBwdWJsaWMgVGlsZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZT4gY3JlYXRlKENvb3JkaW5hdGVkVGlsZUNs
aWVudCogY2xpZW50LCBUaWxlZEJhY2tpbmdTdG9yZSogdGlsZWRCYWNraW5nU3RvcmUsIGNvbnN0
IENvb3JkaW5hdGUmIHRpbGVDb29yZGluYXRlKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRp
bmF0ZWRUaWxlKGNsaWVudCwgdGlsZWRCYWNraW5nU3RvcmUsIHRpbGVDb29yZGluYXRlKSk7IH0K
KyAgICB+Q29vcmRpbmF0ZWRUaWxlKCk7CisKKyAgICBib29sIGlzRGlydHkoKSBjb25zdDsKKyAg
ICB2b2lkIGludmFsaWRhdGUoY29uc3QgSW50UmVjdCYpOworICAgIFZlY3RvcjxJbnRSZWN0PiB1
cGRhdGVCYWNrQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQmFja0J1ZmZlclRvRnJvbnQoKTsKKyAg
ICBib29sIGlzUmVhZHlUb1BhaW50KCkgY29uc3Q7CisgICAgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBjb25zdCBDb29yZGluYXRlJiBjb29yZGlu
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9jb29yZGluYXRlOyB9CisgICAgY29uc3QgSW50UmVjdCYg
cmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorICAgIHZvaWQgcmVzaXplKGNvbnN0IElu
dFNpemUmKTsKKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZFRpbGUoQ29vcmRpbmF0ZWRUaWxl
Q2xpZW50KiwgVGlsZWRCYWNraW5nU3RvcmUqLCBjb25zdCBDb29yZGluYXRlJik7CisKKyAgICBD
b29yZGluYXRlZFRpbGVDbGllbnQqIG1fY2xpZW50OworICAgIFRpbGVkQmFja2luZ1N0b3JlKiBt
X3RpbGVkQmFja2luZ1N0b3JlOworICAgIENvb3JkaW5hdGUgbV9jb29yZGluYXRlOworICAgIElu
dFJlY3QgbV9yZWN0OworCisgICAgdWludDMyX3QgbV9JRDsKKyAgICBJbnRSZWN0IG1fZGlydHlS
ZWN0OworCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiBtX2xvY2FsQnVmZmVyOworfTsKKworY2xh
c3MgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5Db29yZGlu
YXRlZFRpbGVDbGllbnQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZSh1aW50MzJf
dCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZh
Y2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYsIHVpbnQzMl90
JiBhdGxhc0lELCBJbnRQb2ludCYpID0gMDsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkVGlsZUJh
Y2tlbmQgOiBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQ+IGNyZWF0ZShDb29yZGlu
YXRlZFRpbGVDbGllbnQqIGNsaWVudCkgeyByZXR1cm4gYWRvcHRQdHIobmV3IENvb3JkaW5hdGVk
VGlsZUJhY2tlbmQoY2xpZW50KSk7IH0KKyAgICBQYXNzUmVmUHRyPFRpbGU+IGNyZWF0ZVRpbGUo
VGlsZWRCYWNraW5nU3RvcmUqLCBjb25zdCBUaWxlOjpDb29yZGluYXRlJik7CisgICAgdm9pZCBw
YWludENoZWNrZXJQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOwor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkVGlsZUJhY2tlbmQoQ29vcmRpbmF0
ZWRUaWxlQ2xpZW50Kik7CisgICAgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBtX2NsaWVudDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5H
X1NUT1JFKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRUaWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBk
YXRlSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmFiMzg0YTExZWFhNWVhMjU0
MDgxM2M3MDI1ZTVmYzhjMTdkMzkxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5o
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFN1cmZhY2VVcGRhdGVJbmZvX2gKKyNkZWZpbmUgU3VyZmFjZVVwZGF0ZUluZm9f
aAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZvIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJm
YWNlVXBkYXRlSW5mbyk7CisKK3B1YmxpYzoKKyAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQor
CisgICAgLy8gVGhlIHJlY3QgdG8gYmUgdXBkYXRlZC4KKyAgICBJbnRSZWN0IHVwZGF0ZVJlY3Q7
CisKKyAgICAvLyBUaGUgcGFnZSBzY2FsZSBmYWN0b3IgdXNlZCB0byByZW5kZXIgdGhpcyB1cGRh
dGUuCisgICAgZmxvYXQgc2NhbGVGYWN0b3I7CisKKyAgICAvLyBUaGUgaWQgb2YgdGhlIHVwZGF0
ZSBhdGxhcyBpbmNsdWRpbmcgdGhlIHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBk
YXRlcy4KKyAgICB1aW50MzJfdCBhdGxhc0lEOworCisgICAgLy8gVGhlIG9mZnNldCBpbiB0aGUg
Yml0bWFwIHdoZXJlIHRoZSByZW5kZXJlZCBjb250ZW50cyBhcmUuCisgICAgSW50UG9pbnQgc3Vy
ZmFjZU9mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2VuZGlmIC8vIFN1cmZhY2VVcGRhdGVJbmZvX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2NGYwNjg3
MTA4MmI1OGZjYmQ4M2EwZWYzMTQ1MGJlNDgwMDg0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRs
YXMuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENvcHlyaWdodCAoQykgMjAx
MiBDb21wYW55IDEwMCwgSW5jLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1VwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCogY2xpZW50
LCBpbnQgZGltZW5zaW9uLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzIGZsYWdzKQorICAgIDog
bV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pbmFjdGl2aXR5SW5TZWNvbmRzKDApCit7CisgICAg
c3RhdGljIHVpbnQzMl90IG5leHRJRCA9IDA7CisgICAgbV9JRCA9ICsrbmV4dElEOworICAgIElu
dFNpemUgc2l6ZSA9IG5leHRQb3dlck9mVHdvKEludFNpemUoZGltZW5zaW9uLCBkaW1lbnNpb24p
KTsKKyAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShzaXplLCBmbGFn
cyk7CisKKyAgICAvLyBGSVhNRTogQ3VycmVudGx5LCBpZiBzZW5kaW5nIHRoZSBtZXNzYWdlIGZh
aWxzLCBVcGRhdGVBdGxhcyBnaXZlcyB1cCBkcmF3aW5nIGFueXRoaW5nIGltcGxpY2l0bHkuCisg
ICAgaWYgKCFtX2NsaWVudC0+Y3JlYXRlVXBkYXRlQXRsYXMobV9JRCwgbV9zdXJmYWNlKSkKKyAg
ICAgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK1VwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMo
KQoreworICAgIGlmIChtX3N1cmZhY2UpCisgICAgICAgIG1fY2xpZW50LT5yZW1vdmVVcGRhdGVB
dGxhcyhtX0lEKTsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgp
Cit7CisgICAgaWYgKCFtX2FyZWFBbGxvY2F0b3IpIHsKKyAgICAgICAgbV9hcmVhQWxsb2NhdG9y
ID0gYWRvcHRQdHIobmV3IEdlbmVyYWxBcmVhQWxsb2NhdG9yKHNpemUoKSkpOworICAgICAgICBt
X2FyZWFBbGxvY2F0b3ItPnNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMyKSk7Cisg
ICAgfQorfQorCit2b2lkIFVwZGF0ZUF0bGFzOjpkaWRTd2FwQnVmZmVycygpCit7CisgICAgbV9h
cmVhQWxsb2NhdG9yLmNsZWFyKCk7Cit9CisKK1Bhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBV
cGRhdGVBdGxhczo6YmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVpbnQzMl90JiBhdGxh
c0lELCBjb25zdCBJbnRTaXplJiBzaXplLCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1faW5h
Y3Rpdml0eUluU2Vjb25kcyA9IDA7CisgICAgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworICAgIElu
dFJlY3QgcmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZSk7CisKKyAgICAvLyBO
byBhdmFpbGFibGUgYnVmZmVyIHdhcyBmb3VuZCwgcmV0dXJuaW5nIG51bGwuCisgICAgaWYgKHJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+
KCk7CisKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8R3Jh
cGhpY3NDb250ZXh0PigpOworCisgICAgYXRsYXNJRCA9IG1fSUQ7CisKKyAgICAvLyBGSVhNRTog
VXNlIHRyaS1zdGF0ZSBidWZmZXJzLCB0byBhbGxvdyBmYXN0ZXIgdXBkYXRlcy4KKyAgICBvZmZz
ZXQgPSByZWN0LmxvY2F0aW9uKCk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhp
Y3NDb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGljc0NvbnRleHQocmVjdCk7CisKKyAg
ICBpZiAoc3VwcG9ydHNBbHBoYSgpKSB7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgICAgICBncmFwaGljc0NvbnRleHQt
PmZpbGxSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc2l6ZSksIENvbG9yOjp0cmFuc3Bh
cmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZU92ZXIpOworICAgIH0KKworICAgIHJl
dHVybiBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0
bGFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvVXBkYXRlQXRsYXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OGE2YmY4NDRhNDkwZjdmZDJjMzlhMDQyNGUz
MzBmZGRiMTZkNzhiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisK
KyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVXBkYXRlQXRsYXNfaAorI2RlZmluZSBV
cGRhdGVBdGxhc19oCisKKyNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7CitjbGFzcyBJbnRQb2ludDsKKworY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOworfTsKKworY2xhc3MgVXBk
YXRlQXRsYXMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKK3B1Ymxp
YzoKKyAgICBVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIENv
b3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOworICAgIH5VcGRhdGVBdGxhcygpOworCisgICAgaW5s
aW5lIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9CisK
KyAgICAvLyBSZXR1cm5zIGEgbnVsbCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBi
dWZmZXIuCisgICAgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdPbkF2
YWlsYWJsZUJ1ZmZlcih1aW50MzJfdCYgYXRsYXNJRCwgY29uc3QgSW50U2l6ZSYsIEludFBvaW50
JiBvZmZzZXQpOworICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKKyAgICBib29sIHN1cHBvcnRz
QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKTsgfQorCisg
ICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCisgICAgeworICAgICAgICBB
U1NFUlQoIWlzSW5Vc2UoKSk7CisgICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyArPSBzZWNv
bmRzOworICAgIH0KKyAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
Y29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7CisgICAgICAgIHJldHVy
biBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2U7CisgICAg
fQorICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9jYXRvcjsgfQor
Citwcml2YXRlOgorICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOworCitwcml2YXRlOgor
ICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8R2VuZXJhbEFyZWFB
bGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBtX3N1cmZhY2U7CisgICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKKyAgICB1aW50
MzJfdCBtX0lEOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKyNlbmRpZiAvLyBVcGRhdGVBdGxhc19oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CmluZGV4IDhmZGRhMzc2Nzg2YjBjNDhiNDU4YTA2ZGEwMWEzNzA0NDRjZjhhYzEuLmQy
Yjk5YTI0Zjc0YWE0NzJlNTM1YjA2MzdjMDFkNWM5MGFiNTgyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC0yMjQsNyArMjI0LDYgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFNoYXJlZC9B
UEkvYy9XS1VzZXJDb250ZW50VVJMUGF0dGVybi5jcHAKIAogICAgIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKLSAgICBTaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuY3BwCiAgICAgU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAogICAgIFNoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5jcHAKIApA
QCAtMzUyLDkgKzM1MSw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQXV0
aGVudGljYXRpb24vV2ViQ3JlZGVudGlhbC5jcHAKICAgICBVSVByb2Nlc3MvQXV0aGVudGljYXRp
b24vV2ViUHJvdGVjdGlvblNwYWNlLmNwcAogCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3BwCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCi0gICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCiAKICAgICBVSVBy
b2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuY3BwCiAgICAgVUlQcm9jZXNzL0Rvd25sb2Fk
cy9Eb3dubG9hZFByb3h5TWFwLmNwcApAQCAtNTA1LDEyICs1MDIsNyBAQCBzZXQoV2ViS2l0Ml9T
T1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKIAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCi0gICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3Bw
Ci0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCiApCiAKIHNldChXZWJL
aXQyX01FU1NBR0VTX0lOX0ZJTEVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRz
L3dlYmtpdDIvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL3dlYmtpdDIvbWVz
c2FnZXMucHkKaW5kZXggZmFiYWVjNDYwYmZlOWU4MTRjNjg2NTQ1MjE2YWY5NDMxMjVkNWRkOC4u
NWZiODBiNDMyMGYzZTJjODAxZDYwNWYyNWVmZTE4YjQwMDU5YWY3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJL
aXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQpAQCAtMzcxLDYgKzM3MSw3IEBAIGRlZiBo
ZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgIHNwZWNpYWxfY2FzZXMgPSB7CiAgICAgICAgICdX
VEY6OlN0cmluZyc6IFsnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddLAogICAgICAgICAnV2ViQ29y
ZTo6Q29tcG9zaXRpb25VbmRlcmxpbmUnOiBbJzxXZWJDb3JlL0VkaXRvci5oPiddLAorICAgICAg
ICAnV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEJzogWyc8V2ViQ29yZS9Db29yZGluYXRlZExh
eWVySW5mby5oPiddLAogICAgICAgICAnV2ViQ29yZTo6R3JhbW1hckRldGFpbCc6IFsnPFdlYkNv
cmUvVGV4dENoZWNrZXJDbGllbnQuaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zJzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyQW5pbWF0aW9uLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdCc6IFsnPFdlYkNvcmUvR3JhcGhpY3NM
YXllci5oPiddLApAQCAtMzc5LDcgKzM4MCw2IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUp
OgogICAgICAgICAnV2ViQ29yZTo6UGx1Z2luSW5mbyc6IFsnPFdlYkNvcmUvUGx1Z2luRGF0YS5o
PiddLAogICAgICAgICAnV2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0JzogWyc8V2ViQ29yZS9U
ZXh0Q2hlY2tlckNsaWVudC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1
dGVzJzogWyc8V2ViQ29yZS9WaWV3cG9ydEFyZ3VtZW50cy5oPiddLAotICAgICAgICAnV2ViS2l0
OjpDb29yZGluYXRlZExheWVySUQnOiBbJyJDb29yZGluYXRlZExheWVySW5mby5oIiddLAogICAg
ICAgICAnV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2Rlcic6IFtdLAogICAg
ICAgICAnV2ViS2l0OjpXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAgICAgICAg
ICdXZWJLaXQ6OldlYkdlc3R1cmVFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdy
YXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAppbmRleCBl
NWFiMzQ1ODZmNDc0MzcxODFiN2M0MzUyMWM0ZTA3YjA0YjBiZjQyLi5jMzM3MWQyYzA4NGUwNTJk
ZWRjZjY0ZWZmNGJkMTQ3NTAwZTliNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKQEAgLTI5LDExICsyOSwxMCBAQAogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oIgogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCi0j
aW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0FuaW1hdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ29sb3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXJBbmltYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uLmg+CkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Sb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ta2V3VHJhbnNmb3JtT3BlcmF0aW9uLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlVXBkYXRlSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VGltaW5nRnVuY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KQEAg
LTU0LDkgKzU0LDkgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1
ZGUgIldlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRl
clByb2dyYW0uaCIKICNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtUHJveHkuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0N1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9DdXN0b21GaWx0ZXJDb25zdGFudHMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRl
ck51bWJlclBhcmFtZXRlci5oPgpAQCAtNzMsNyArNzMsOSBAQAogI2VuZGlmCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCkBAIC0zMjksNyArMzMx
LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnM+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgU2hhZGVycyBhcmUgYWxyZWFk
eSB2YWxpZGF0ZWQsIHNvIHdlIGp1c3QgdXNlIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiBmb3Ig
dHJhbnNwb3J0YXRpb24uCi0gICAgICAgICAgICBmaWx0ZXIgPSBXZWJDdXN0b21GaWx0ZXJPcGVy
YXRpb246OmNyZWF0ZSgwLCBwcm9ncmFtSUQsIHBhcmFtZXRlcnMsIG1lc2hSb3dzLCBtZXNoQ29s
dW1ucywgbWVzaFR5cGUpOworICAgICAgICAgICAgZmlsdGVyID0gQ29vcmRpbmF0ZWRDdXN0b21G
aWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgwLCBwcm9ncmFtSUQsIHBhcmFtZXRlcnMsIG1lc2hSb3dz
LCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuaAppbmRleCAwYjVlMTRjYzE3OTk2ZTY1ZDk0NmFmZGI5MmExNGE4YmYyZWJmY2ZjLi4y
YWVmYzY1NzRmZjNlYTQxMTEzZmMxZTQyYzAxOTE4ZjQyNDFiZjY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaApAQCAtMzIsMTEgKzMy
LDEzIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87CiBjbGFzcyBGbG9hdFBvaW50M0Q7CiBjbGFzcyBH
cmFwaGljc0xheWVyQW5pbWF0aW9uOwogY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CiBj
bGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnM7Citz
dHJ1Y3QgQ29vcmRpbmF0ZWRMYXllckluZm87CiBzdHJ1Y3QgTGVuZ3RoOwogCiAjaWYgRU5BQkxF
KENTU19GSUxURVJTKQpAQCAtNTIsMTEgKzU0LDYgQEAgc3RydWN0IEdyYXBoaWNzU3VyZmFjZVRv
a2VuOwogI2VuZGlmCiB9CiAKLW5hbWVzcGFjZSBXZWJLaXQgewotc3RydWN0IENvb3JkaW5hdGVk
TGF5ZXJJbmZvOwotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci19Ci0KIG5hbWVzcGFjZSBDb3Jl
SVBDIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBv
aW50M0Q+IHsKQEAgLTExMCwxNCArMTA3LDE0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4+IHsKIH07CiAjZW5kaWYKIAotdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5ZXJJbmZv
PiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYktp
dDo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyYpOwordGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbz4geworICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySW5mbyYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29k
ZXIqLCBXZWJDb3JlOjpDb29yZGluYXRlZExheWVySW5mbyYpOwogfTsKIAotdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYktpdDo6U3VyZmFjZVVw
ZGF0ZUluZm8mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2Vi
S2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYpOwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbz4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyYpOworICAg
IHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllcklu
Zm8uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkTGF5ZXJJbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNWZiYjY2YTgw
MjU4MWI0OGM5MDNkNDhiNWUxODM5ODRjMTNlNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllckluZm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAg
QEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENvb3Jk
aW5hdGVkTGF5ZXJJbmZvX2gKLSNkZWZpbmUgQ29vcmRpbmF0ZWRMYXllckluZm9faAotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXR5cGVkZWYgdWludDMyX3QgQ29vcmRpbmF0ZWRMYXllcklEOwotZW51bSB7IEludmFs
aWRDb29yZGluYXRlZExheWVySUQgPSAwIH07Ci0KLXR5cGVkZWYgdWludDY0X3QgQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRDsKLWVudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCA9IDAgfTsKLQotLy8gTk9URTogQ29vcmRpbmF0ZWRMYXllckluZm8gc2hvdWxkIG9ubHkgdXNl
IFBPRCB0eXBlcywgYXMgdG8gbWFrZSBzZXJpYWxpemF0aW9uIGZhc3Rlci4KLXN0cnVjdCBDb29y
ZGluYXRlZExheWVySW5mbyB7Ci0gICAgQ29vcmRpbmF0ZWRMYXllckluZm8oKQotICAgICAgICA6
IHJlcGxpY2EoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAgICAgICAgLCBtYXNrKEludmFs
aWRDb29yZGluYXRlZExheWVySUQpCi0gICAgICAgICwgaW1hZ2VJRChJbnZhbGlkQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCkKLSAgICAgICAgLCBvcGFjaXR5KDApCi0gICAgICAgICwgZGVidWdC
b3JkZXJXaWR0aCgwKQotICAgICAgICAsIGZsYWdzKDApIHsgfQotCi0gICAgQ29vcmRpbmF0ZWRM
YXllcklEIHJlcGxpY2E7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIG1hc2s7Ci0gICAgQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEOwotCi0gICAgV2ViQ29yZTo6RmxvYXRQb2ludCBw
b3M7Ci0gICAgV2ViQ29yZTo6RmxvYXRQb2ludDNEIGFuY2hvclBvaW50OwotICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBzaXplOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybTsKLSAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZHJlblRyYW5zZm9y
bTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNvbnRlbnRzUmVjdDsKLSAgICBmbG9hdCBvcGFjaXR5
OwotICAgIFdlYkNvcmU6OkNvbG9yIHNvbGlkQ29sb3I7Ci0gICAgV2ViQ29yZTo6Q29sb3IgZGVi
dWdCb3JkZXJDb2xvcjsKLSAgICBmbG9hdCBkZWJ1Z0JvcmRlcldpZHRoOwotCi0gICAgdW5pb24g
ewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgYm9vbCBjb250ZW50c09wYXF1ZSA6IDE7
Ci0gICAgICAgICAgICBib29sIGRyYXdzQ29udGVudCA6IDE7Ci0gICAgICAgICAgICBib29sIGNv
bnRlbnRzVmlzaWJsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGJhY2tmYWNlVmlzaWJsZSA6IDE7
Ci0gICAgICAgICAgICBib29sIG1hc2tzVG9Cb3VuZHMgOiAxOwotICAgICAgICAgICAgYm9vbCBw
cmVzZXJ2ZXMzRCA6IDE7Ci0gICAgICAgICAgICBib29sIGlzUm9vdExheWVyOiAxOwotICAgICAg
ICAgICAgYm9vbCBmaXhlZFRvVmlld3BvcnQgOiAxOwotICAgICAgICAgICAgYm9vbCBzaG93RGVi
dWdCb3JkZXJzIDogMTsKLSAgICAgICAgICAgIGJvb2wgc2hvd1JlcGFpbnRDb3VudGVyIDogMTsK
LSAgICAgICAgfTsKLSAgICAgICAgdW5zaWduZWQgZmxhZ3M7Ci0gICAgfTsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2VuZGlmIC8vIENvb3JkaW5h
dGVkTGF5ZXJJbmZvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4NmEyZDU1YTc2ZTkwNjE3OTJlZmM5NjY5Yzc0ZDg4NjI4MTBl
YTg1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUNvb3Jk
aW5hdGVkU3VyZmFjZTo6RmFjdG9yeSogQ29vcmRpbmF0ZWRTdXJmYWNlOjpzX2ZhY3RvcnkgPSAw
OwotCi12b2lkIENvb3JkaW5hdGVkU3VyZmFjZTo6c2V0RmFjdG9yeShDb29yZGluYXRlZFN1cmZh
Y2U6OkZhY3RvcnkgZmFjdG9yeSkKLXsKLSAgICBzX2ZhY3RvcnkgPSBmYWN0b3J5OwotfQotCi1Q
YXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUo
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSwgRmxhZ3MgZmxhZ3MpCi17Ci0gICAgQVNTRVJU
KHNfZmFjdG9yeSk7Ci0gICAgcmV0dXJuIHNfZmFjdG9yeShzaXplLCBmbGFncyk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMzRiMTdjZWQxOTliMzdiZjQ0NGYzNzkzZjEwNGI4NWQzOTdkMjE4Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZhY2UuaAorKysgL2Rldi9udWxsCkBA
IC0xLDcxICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55
IDEwMCwgSW5jLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIENvb3JkaW5hdGVk
U3VyZmFjZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkU3VyZmFjZV9oCi0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQml0bWFw
VGV4dHVyZTsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxDb29yZGluYXRlZFN1cmZhY2U+IHsKLXB1YmxpYzoKLSAgICBlbnVtIEZsYWcgewotICAgICAg
ICBOb0ZsYWdzID0gMCwKLSAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDEgPDwgMCwKLSAgICB9Owot
ICAgIHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7Ci0KLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBGYWN0b3J5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncyk7
Ci0gICAgc3RhdGljIHZvaWQgc2V0RmFjdG9yeShGYWN0b3J5KTsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
RmxhZ3MpOwotCi0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRTdXJmYWNlKCkgeyB9Ci0KLSAgICBi
b29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVybiBmbGFncygpICYgU3VwcG9ydHNBbHBo
YTsgfQotICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgPSAwOwotCi0g
ICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhaW50
IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0KGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSA9IDA7Ci0KLSNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0gICAgdmlydHVhbCB2b2lk
IGNvcHlUb1RleHR1cmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgc291cmNl
T2Zmc2V0KSA9IDA7Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgRmxhZ3MgZmxh
Z3MoKSBjb25zdCA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIENvb3JkaW5hdGVkU3VyZmFj
ZTo6RmFjdG9yeSogc19mYWN0b3J5OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZgotI2VuZGlmIC8vIENvb3JkaW5hdGVkU3VyZmFjZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUlu
Zm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcyODlmY2RmMGZmYjlmZWUwNmUw
NDQxOTg0ODMxNzBmODMyZmIyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9TdXJm
YWNlVXBkYXRlSW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgU3VyZmFjZVVwZGF0ZUluZm9f
aAotI2RlZmluZSBTdXJmYWNlVXBkYXRlSW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFN1cmZhY2VVcGRhdGVJ
bmZvIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdXJmYWNlVXBkYXRlSW5mbyk7Ci0KLXB1
YmxpYzoKLSAgICBTdXJmYWNlVXBkYXRlSW5mbygpIHsgfQotCi0gICAgLy8gVGhlIHJlY3QgdG8g
YmUgdXBkYXRlZC4KLSAgICBXZWJDb3JlOjpJbnRSZWN0IHVwZGF0ZVJlY3Q7Ci0KLSAgICAvLyBU
aGUgcGFnZSBzY2FsZSBmYWN0b3IgdXNlZCB0byByZW5kZXIgdGhpcyB1cGRhdGUuCi0gICAgZmxv
YXQgc2NhbGVGYWN0b3I7Ci0KLSAgICAvLyBUaGUgaWQgb2YgdGhlIHVwZGF0ZSBhdGxhcyBpbmNs
dWRpbmcgdGhlIHNoYXJlYWJsZSBiaXRtYXAgY29udGFpbmluZyB0aGUgdXBkYXRlcy4KLSAgICB1
aW50MzJfdCBhdGxhc0lEOwotCi0gICAgLy8gVGhlIG9mZnNldCBpbiB0aGUgYml0bWFwIHdoZXJl
IHRoZSByZW5kZXJlZCBjb250ZW50cyBhcmUuCi0gICAgV2ViQ29yZTo6SW50UG9pbnQgc3VyZmFj
ZU9mZnNldDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotCi0jZW5kaWYgLy8gU3VyZmFjZVVwZGF0ZUluZm9faApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ29v
cmRpbmF0ZWRTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAppbmRleCBiODI4YWFkODE3NDU0MmVkZDM3YjE4
ZTM3ZjI2Y2RjOTRhYjgwOWYwLi4xNGE3YzAwNzg1NDkwNzRkMDM1NzliZDQ5ZWZkZDI4YmU0YTVm
ZDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29v
cmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaApAQCAtMjIsOCArMjIsOCBA
QAogI2RlZmluZSBXZWJDb29yZGluYXRlZFN1cmZhY2VfaAogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgogI2luY2x1ZGUgIlNo
YXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRTdXJmYWNlLmg+
CiAKICNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKICNpbmNsdWRlICJHcmFwaGljc1N1cmZhY2Uu
aCIKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotY2xhc3MgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlIDogcHVibGljIENvb3JkaW5h
dGVkU3VyZmFjZSB7CitjbGFzcyBXZWJDb29yZGluYXRlZFN1cmZhY2UgOiBwdWJsaWMgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRTdXJmYWNlIHsKIHB1YmxpYzoKICAgICBjbGFzcyBIYW5kbGUgewogICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIYW5kbGUpOwpAQCAtNTcsNyArNTcsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuIG1fZ3JhcGhpY3NTdXJm
YWNlVG9rZW47CiAjZW5kaWYKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3NpemU7Ci0gICAg
ICAgIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgbV9mbGFnczsKKyAgICAgICAgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyBtX2ZsYWdzOwogICAgIH07CiAKICAgICAvLyBDcmVh
dGUgYSBuZXcgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLCBhbmQgYWxsb2NhdGUgZWl0aGVyIGEgR3Jh
cGhpY3NTdXJmYWNlIG9yIGEgU2hhcmVhYmxlQml0bWFwIGFzIGJhY2tpbmcuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0
ZXJPcGVyYXRpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA0YmYyNzdhNzBlNmVhZWFlNzNiZmUzMjA4MThjNzY0ZTA0MDUwNTUzLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IK
LSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCi0jZGVmaW5lIFdlYkN1c3RvbUZpbHRlck9wZXJh
dGlvbl9oCi0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gVGhpcyBjbGFzcyBpcyBv
bmx5IGFkZGluZyB0aGUgcHJvZ3JhbUlkIG9uIHRvcCBvZiBDdXN0b21GaWx0ZXJPcGVyYXRpb24u
IFRoZSBhcmd1bWVudCBkZWNvZGVyIGhhcyBubwotLy8gY29udGV4dCwgc28gd2UgY2Fubm90IHNl
YXJjaCBpbiBvdXIgY2FjaGVkIEN1c3RvbUZpbHRlclByb2dyYW1zIHdoaWxlIGRlY29kaW5nLiBJ
biB0aGF0IGNhc2UKLS8vIGl0IHdpbGwganVzdCBzdG9yZSB0aGUgcHJvZ3JhbUlkIGFuZCBubyBD
dXN0b21GaWx0ZXJQcm9ncmFtIGluc3RhbmNlLiBUaGUgcmVjZWl2ZXIgaXMgc3VwcG9zZWQgdG8K
LS8vIGl0ZXJhdGUgb24gdGhpcyBzdHJ1Y3R1cmUgYW5kIGluamVjdCB0aGUgcmlnaHQgQ3VzdG9t
RmlsdGVyUHJvZ3JhbXMuCi0KLWNsYXNzIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiA6IHB1Ymxp
YyBDdXN0b21GaWx0ZXJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UHJvZ3JhbT4gcHJvZ3JhbSwgaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1l
c2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHByb2dyYW0sIHBy
b2dyYW1JRCwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoVHlw
ZSkpOwotICAgIH0KLQotICAgIGludCBwcm9ncmFtSUQoKSBjb25zdCB7IHJldHVybiBtX3Byb2dy
YW1JRDsgfQotCi1wcml2YXRlOgotICAgIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbihQYXNzUmVm
UHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0sIGludCBwcm9ncmFtSUQsIGNvbnN0IEN1
c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHNvcnRlZFBhcmFtZXRlcnMsIHVuc2lnbmVkIG1lc2hS
b3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUp
Ci0gICAgICAgIDogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKHByb2dyYW0sIHNvcnRlZFBhcmFtZXRl
cnMsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaFR5cGUpCi0gICAgICAgICwgbV9wcm9ncmFt
SUQocHJvZ3JhbUlEKQotICAgIHsKLSAgICB9Ci0KLSAgICBpbnQgbV9wcm9ncmFtSUQ7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NIQURFUlMp
Ci0KLSNlbmRpZiAvLyBDdXN0b21GaWx0ZXJPcGVyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWFhZGQ2ZmVk
NzljYzQ4YjNjZTU5NDhlMDZmNzQ2ZjM3Nzc1Y2ZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL1dlYkN1c3RvbUZpbHRlclByb2dyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJDdXN0b21GaWx0ZXJQcm9ncmFt
X2gKLSNkZWZpbmUgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCi0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpICYmIEVOQUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlIDxXZWJDb3JlL0N1
c3RvbUZpbHRlckNvbnN0YW50cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbSA6IHB1YmxpYyBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDdXN0b21GaWx0ZXJQcm9ncmFtPiBjcmVhdGUoU3RyaW5n
IHZlcnRleFNoYWRlclN0cmluZywgU3RyaW5nIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcsIFdlYkNv
cmU6OkN1c3RvbUZpbHRlclByb2dyYW1UeXBlIHByb2dyYW1UeXBlLCBXZWJDb3JlOjpDdXN0b21G
aWx0ZXJQcm9ncmFtTWl4U2V0dGluZ3MgbWl4U2V0dGluZ3MsIFdlYkNvcmU6OkN1c3RvbUZpbHRl
ck1lc2hUeXBlIG1lc2hUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJDdXN0b21GaWx0ZXJQcm9ncmFtKHZlcnRleFNoYWRlclN0cmluZywgbV9mcmFnbWVudFNoYWRl
clN0cmluZywgcHJvZ3JhbVR5cGUsIG1peFNldHRpbmdzLCBtZXNoVHlwZSkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEN1c3RvbUZpbHRlclByb2dy
YW0mIG8pIGNvbnN0IE9WRVJSSURFCi0gICAgewotICAgICAgICAvLyBXZSBkb24ndCB1c2UgdGhl
ICE9IG9wZXJhdG9yIGJlY2F1c2UgdGhhdCB3b3VsZCByZWN1cnNpdmVseSBjYWxsIHRoaXMgbWV0
aG9kLgotICAgICAgICBpZiAoIUN1c3RvbUZpbHRlclByb2dyYW06Om9wZXJhdG9yPT0obykpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjYXN0
IGlzIHVnbHksIGJ1dCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtIGlzIHRoZSBzaW5nbGUgaW1wbGVt
ZW50YXRpb24gb2YgQ3VzdG9tRmlsdGVyUHJvZ3JhbSBvbiBVSSBQcm9jZXNzLgotICAgICAgICBj
b25zdCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtKiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0IFdl
YkN1c3RvbUZpbHRlclByb2dyYW0qPigmbyk7Ci0gICAgICAgIHJldHVybiBtX3ZlcnRleFNoYWRl
clN0cmluZyA9PSBvdGhlci0+dmVydGV4U2hhZGVyU3RyaW5nKCkgJiYgbV9mcmFnbWVudFNoYWRl
clN0cmluZyA9PSBvdGhlci0+ZnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsKLSAgICB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICB2aXJ0dWFsIFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcoKSBjb25zdCBPVkVS
UklERSB7IHJldHVybiBtX3ZlcnRleFNoYWRlclN0cmluZzsgfQotICAgIHZpcnR1YWwgU3RyaW5n
IGZyYWdtZW50U2hhZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9mcmFnbWVu
dFNoYWRlclN0cmluZzsgfQotCi0gICAgdmlydHVhbCB2b2lkIHdpbGxIYXZlQ2xpZW50cygpIE9W
RVJSSURFIHsgbm90aWZ5Q2xpZW50cygpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUxh
c3RDbGllbnQoKSBPVkVSUklERSB7IH0KLQotcHJpdmF0ZToKLSAgICBXZWJDdXN0b21GaWx0ZXJQ
cm9ncmFtKFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcsIFN0cmluZyBmcmFnbWVudFNoYWRlclN0
cmluZywgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUsIFdlYkNv
cmU6OkN1c3RvbUZpbHRlclByb2dyYW1NaXhTZXR0aW5ncyBtaXhTZXR0aW5ncywgV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5cGUpCi0gICAgICAgIDogV2ViQ29yZTo6Q3VzdG9t
RmlsdGVyUHJvZ3JhbShwcm9ncmFtVHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKQotICAgICAg
ICAsIG1fdmVydGV4U2hhZGVyU3RyaW5nKHZlcnRleFNoYWRlclN0cmluZykKLSAgICAgICAgLCBt
X2ZyYWdtZW50U2hhZGVyU3RyaW5nKGZyYWdtZW50U2hhZGVyU3RyaW5nKQotICAgIHsKLSAgICB9
Ci0KLSAgICBTdHJpbmcgbV92ZXJ0ZXhTaGFkZXJTdHJpbmc7Ci0gICAgU3RyaW5nIG1fZnJhZ21l
bnRTaGFkZXJTdHJpbmc7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgRU5BQkxFKENTU19TSEFERVJTKQotCi0jZW5k
aWYgLy8gV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9UYXJnZXQucHJpIGIvU291cmNlL1dlYktpdDIvVGFyZ2V0LnByaQppbmRleCBiZmQxNGM2NGRj
M2Q1YzE5YTg0OWJmMTUxZDUyMmVkNDQ5NmYyYmVkLi5iZWRjYTNhZWU1NDIwOWNmYjE2ZDFhOTc0
OTlhNDFlMTFmNWU3ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKQEAgLTEzOSwxMSArMTM5LDcgQEAgSEVBREVS
UyArPSBcCiAgICAgU2hhcmVkL1dlYlVSTFJlc3BvbnNlLmggXAogICAgIFNoYXJlZC9XZWJVc2Vy
Q29udGVudFVSTFBhdHRlcm4uaCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmggXAotICAgIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmggXAotICAgIFNoYXJlZC9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5oIFwKLSAgICBTaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuaCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OZXRz
Y2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUFJlbW90
ZU9iamVjdE1hcC5oIFwKICAgICBTaGFyZWQvUGx1Z2lucy9OUElkZW50aWZpZXJEYXRhLmggXApA
QCAtMjE2LDkgKzIxMiw3IEBAIEhFQURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNh
dGlvbi9XZWJQcm90ZWN0aW9uU3BhY2UuaCBcCiAgICAgVUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5o
IFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHkuaCBcCi0gICAgVUlQcm9j
ZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBcCiAgICAg
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkuaCBcCi0gICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVy
ZXIuaCBcCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5oIFwKICAgICBVSVBy
b2Nlc3MvRHJhd2luZ0FyZWFQcm94eS5oIFwKICAgICBVSVByb2Nlc3MvRHJhd2luZ0FyZWFQcm94
eUltcGwuaCBcCkBAIC0zNzQsMTIgKzM2OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuaCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2
ZW50RGlzcGF0Y2hlci5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
aCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9j
YXRvci5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBcCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggXAot
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGls
ZS5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVB
dGxhcy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5o
IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZU92ZXJsYXkuaCBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmggXApAQCAtNTE3LDcgKzUwNiw2IEBAIFNPVVJDRVMg
Kz0gXAogICAgIFNoYXJlZC9XZWJVUkxSZXNwb25zZS5jcHAgXAogICAgIFNoYXJlZC9XZWJXaGVl
bEV2ZW50LmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBcCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmNwcCBcCiAgICAgU2hhcmVkL3F0L0Fy
Z3VtZW50Q29kZXJzUXQuY3BwIFwKQEAgLTU4MSw5ICs1NjksNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBVSVByb2Nlc3MvQXV0aGVudGljYXRpb24vV2ViUHJvdGVjdGlvblNwYWNlLmNwcCBcCiAgICAg
VUlQcm9jZXNzL0JhY2tpbmdTdG9yZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9xdC9CYWNraW5nU3Rv
cmVRdC5jcHAgXAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwIFwKLSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0
ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9EZWZhdWx0
VW5kb0NvbnRyb2xsZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJv
eHkuY3BwIFwKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlNYXAuY3BwIFwK
QEAgLTc2NSwxMiArNzUxLDcgQEAgU09VUkNFUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0VuY29kZXJBZGFwdGVyLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0
Y2hlci5jcHAgXAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgXAot
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3Iu
Y3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIuY3BwIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgXAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAg
XAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
VGlsZS5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1Vw
ZGF0ZUF0bGFzLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL1RhcEhpZ2hsaWdodENvbnRy
b2xsZXIuY3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvTGF5ZXJUcmVlSG9zdC5jcHAgXAog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5jcHAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCA1YmI0NDY0NzdjYmQyNTc1ZjU2
ZDBjYzkzZGVhMDIxMWY3MjFhOTAzLi5hYTM1MGY0ZjBkZGUyZWIzZWJlODU4YTAyYzI4NjYzYWY5
ZDYzOWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNw
cApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkZpbmRDbGllbnRFZmwuaCIKICNpbmNsdWRl
ICJGb3JtQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRob2RDb250ZXh0RWZsLmgiCi0j
aW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50QmFzZS5o
IgogI2luY2x1ZGUgIlBhZ2VDbGllbnREZWZhdWx0SW1wbC5oIgogI2luY2x1ZGUgIlBhZ2VDbGll
bnRMZWdhY3lJbXBsLmgiCkBAIC02Miw2ICs2MSw3IEBACiAjaW5jbHVkZSA8RWNvcmVfWC5oPgog
I2luY2x1ZGUgPEVkamUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0N1cnNvci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tJbWFnZUNhaXJvLmg+CiAK
QEAgLTM2Miw3ICszNjIsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gRXdrVmlldzo6dHJhbnNmb3JtVG9T
Y3JlZW4oKSBjb25zdAogfQogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotTGF5ZXJU
cmVlUmVuZGVyZXIqIEV3a1ZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkKK0Nvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSogRXdrVmlldzo6Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkKIHsKICAgICBE
cmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IHBhZ2UoKS0+ZHJhd2luZ0FyZWEoKTsKICAg
ICBpZiAoIWRyYXdpbmdBcmVhKQpAQCAtMzcyLDcgKzM3Miw3IEBAIExheWVyVHJlZVJlbmRlcmVy
KiBFd2tWaWV3OjpsYXllclRyZWVSZW5kZXJlcigpCiAgICAgaWYgKCFjb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gY29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHktPmxheWVyVHJlZVJlbmRlcmVyKCk7CisgICAgcmV0dXJuIGNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LT5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsK
IH0KICNlbmRpZgogCkBAIC0zOTQsMTQgKzM5NCwxNCBAQCB2b2lkIEV3a1ZpZXc6OmRpc3BsYXlU
aW1lckZpcmVkKFRpbWVyPEV3a1ZpZXc+KikKICAgICAvLyBXZSBhcmUgc3VwcG9zZWQgdG8gY2xp
cCB0byB0aGUgYWN0dWFsIHZpZXdwb3J0LCBub3RoaW5nIGxlc3MuCiAgICAgSW50UmVjdCB2aWV3
cG9ydChzZC0+dmlldy54LCBzZC0+dmlldy55LCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKIAot
ICAgIExheWVyVHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxheWVyVHJlZVJlbmRlcmVyKCk7Ci0g
ICAgaWYgKCFyZW5kZXJlcikKKyAgICBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0g
Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CisgICAgaWYgKCFzY2VuZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcmVuZGVyZXItPnNldEFjdGl2ZSh0cnVlKTsKLSAgICByZW5kZXJlci0+c2V0
RHJhd3NCYWNrZ3JvdW5kKG1fc2V0RHJhd3NCYWNrZ3JvdW5kKTsKKyAgICBzY2VuZS0+c2V0QWN0
aXZlKHRydWUpOworICAgIHNjZW5lLT5zZXREcmF3c0JhY2tncm91bmQobV9zZXREcmF3c0JhY2tn
cm91bmQpOwogICAgIGlmIChtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCkgewotICAgICAgICByZW5k
ZXJlci0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQodHJhbnNmb3JtVG9TY2VuZSgpLnRvVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgLyogb3BhY2l0eSAqLyAxLCB2aWV3cG9ydCk7CisgICAgICAgIHNj
ZW5lLT5wYWludFRvQ3VycmVudEdMQ29udGV4dCh0cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCAvKiBvcGFjaXR5ICovIDEsIHZpZXdwb3J0KTsKICAgICAgICAgLy8g
c2QtPmltYWdlIGlzIHRpZWQgdG8gYSBuYXRpdmUgc3VyZmFjZS4gVGhlIG5hdGl2ZSBzdXJmYWNl
IGlzIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlcywKICAgICAgICAgLy8gc28gd2UgbmVlZCB0
byBhY2NvdW50IGZvciB0aGUgdmlld3BvcnQgcG9zaXRpb24gd2hlbiBjYWxsaW5nIGV2YXNfb2Jq
ZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZC4KICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0
YV91cGRhdGVfYWRkKHNkLT5pbWFnZSwgdmlld3BvcnQueCgpLCB2aWV3cG9ydC55KCksIHZpZXdw
b3J0LndpZHRoKCksIHZpZXdwb3J0LmhlaWdodCgpKTsKQEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lk
IEV3a1ZpZXc6OmRpc3BsYXlUaW1lckZpcmVkKFRpbWVyPEV3a1ZpZXc+KikKICAgICAgICAgY2Fp
cm9fdHJhbnNsYXRlKGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgLSBwYWdlUG9zaXRpb24oKS54KCks
IC0gcGFnZVBvc2l0aW9uKCkueSgpKTsKICAgICAgICAgY2Fpcm9fc2NhbGUoZ3JhcGhpY3NDb250
ZXh0LmdldCgpLCBwYWdlU2NhbGVGYWN0b3IoKSwgcGFnZVNjYWxlRmFjdG9yKCkpOwogICAgICAg
ICBjYWlyb19zY2FsZShncmFwaGljc0NvbnRleHQuZ2V0KCksIGRldmljZVNjYWxlRmFjdG9yKCks
IGRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICByZW5kZXJlci0+cGFpbnRUb0dyYXBoaWNz
Q29udGV4dChncmFwaGljc0NvbnRleHQuZ2V0KCkpOworICAgICAgICBzY2VuZS0+cGFpbnRUb0dy
YXBoaWNzQ29udGV4dChncmFwaGljc0NvbnRleHQuZ2V0KCkpOwogICAgICAgICBldmFzX29iamVj
dF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2QtPmltYWdlLCAwLCAwLCB2aWV3cG9ydC53aWR0aCgp
LCB2aWV3cG9ydC5oZWlnaHQoKSk7CiAgICAgfQogI2VuZGlmCkBAIC02OTUsNyArNjk1LDcgQEAg
Ym9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiAK
IGJvb2wgRXdrVmlldzo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCiB7Ci0gICAg
bGF5ZXJUcmVlUmVuZGVyZXIoKS0+c2V0QWN0aXZlKHRydWUpOworICAgIGNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSgpLT5zZXRBY3RpdmUodHJ1ZSk7CiAKICAgICBpZiAoIW1faXNIYXJkd2FyZUFj
Y2VsZXJhdGVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCAzN2E4ZDFiZGJiYmFjODAxZGY5YjUxYTI3ZjY2ZDI4
ZTE0NmViNzZiLi45OWNlOGVkYjRiMWEwM2Y5YmE1YjE3ZDNiNzg4MGZkNzUzZmY4NzI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCkBAIC02OCwxMCArNjgs
NiBAQCBjbGFzcyBXZWJQb3B1cE1lbnVQcm94eUVmbDsKICNpZiBFTkFCTEUoVklCUkFUSU9OKQog
Y2xhc3MgVmlicmF0aW9uQ2xpZW50RWZsOwogI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKLSNlbmRpZgogfQogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC03OSw2ICs3NSw5IEBAIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNs
YXNzIENvbG9yOwogY2xhc3MgQ3Vyc29yOwogY2xhc3MgSW50U2l6ZTsKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCitjbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU7CisjZW5kaWYK
IH0KIAogY2xhc3MgRXdrQ29udGV4dDsKQEAgLTIxOSw3ICsyMTgsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZGlzcGxheVRpbWVyRmlyZWQoV2ViQ29yZTo6VGltZXI8RXdrVmlldz4qKTsKIAogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVy
KiBsYXllclRyZWVSZW5kZXJlcigpOworICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAjZW5kaWYKIAogICAgIHZvaWQgaW5m
b3JtSWNvbkNoYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9xdC9xcXVpY2t3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXF1aWNrd2VicGFnZS5jcHAKaW5kZXggZmEwMTNhZjUzNzY4MGE0MmIzOTM5ZjdjMjhlZjcwOGE2
ZWZkYTBjZC4uMjA3NjFlMmY5NTc4ODk1ZDhkMDZhMzA0NjhiYzFmNzliYWZiZDE4NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCkBA
IC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSAicXF1aWNrd2VicGFnZV9wLmgiCiAKICNpbmNsdWRl
ICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJl
bmRlcmVyLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAi
UXRXZWJQYWdlU0dOb2RlLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAg
LTMxLDYgKzMwLDcgQEAKICNpbmNsdWRlICJxcXVpY2t3ZWJ2aWV3X3AuaCIKICNpbmNsdWRlICJx
d2Via2l0dGVzdF9wLmgiCiAjaW5jbHVkZSA8UVF1aWNrV2luZG93PgorI2luY2x1ZGUgPFdlYkNv
cmUvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKQEAgLTcxLDggKzcxLDggQEAgdm9pZCBRUXVpY2tXZWJQYWdlUHJpdmF0ZTo6cGFpbnQoUVBh
aW50ZXIqIHBhaW50ZXIpCiAgICAgaWYgKCF3ZWJQYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgp
LT5sYXllclRyZWVSZW5kZXJlcigpKQotICAgICAgICBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eSgpLT5sYXllclRyZWVSZW5kZXJlcigpLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KHBhaW50
ZXIpOworICAgIGlmIChjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5jb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUoKSkKKyAgICAgICAgY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHko
KS0+Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCktPnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFp
bnRlcik7CiB9CiAKIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBRUXVpY2tXZWJQYWdl
UHJpdmF0ZTo6Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKQpAQCAtODgsNyArODgsNyBA
QCBRU0dOb2RlKiBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoUVNHTm9kZSogb2xkTm9k
ZSwgVXBkYXRlUGFpbnROb2RlRGF0YSopCiAgICAgaWYgKCFkLT53ZWJQYWdlUHJveHktPmRyYXdp
bmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBvbGROb2RlOwogCi0gICAgTGF5ZXJUcmVlUmVuZGVy
ZXIqIHJlbmRlcmVyID0gZC0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+bGF5ZXJU
cmVlUmVuZGVyZXIoKTsKKyAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNj
ZW5lID0gZC0+Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKS0+Y29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lKCk7CiAKICAgICBRdFdlYlBhZ2VTR05vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxR
dFdlYlBhZ2VTR05vZGUqPihvbGROb2RlKTsKIApAQCAtMTA1LDcgKzEwNSw3IEBAIFFTR05vZGUq
IFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQ
YWludE5vZGVEYXRhKikKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIG5vZGUgPSBuZXcgUXRXZWJQ
YWdlU0dOb2RlOwogCi0gICAgbm9kZS0+c2V0UmVuZGVyZXIocmVuZGVyZXIpOworICAgIG5vZGUt
PnNldENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShzY2VuZSk7CiAKICAgICBub2RlLT5zZXRTY2Fs
ZShkLT5jb250ZW50c1NjYWxlKTsKICAgICBub2RlLT5zZXREZXZpY2VQaXhlbFJhdGlvKHdpbmRv
dy0+ZGV2aWNlUGl4ZWxSYXRpbygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAppbmRleCAzNjFmNzRkYWI4NTFhZDg5OGVkMzlk
Mjc3YTdhNmY0NzliMjU5NzMxLi5kMzQ4MWVhMDE2MmE1M2QzZDA4ODNlN2Q2MzBjMzJmMzQ3MDNh
MWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3
d2Vidmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJh
d3dlYnZpZXcuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHkuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJEcmF3aW5n
QXJlYVByb3h5SW1wbC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVk
ZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZl
bnQuaCIKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzUsNiArMzQsNyBAQAogI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCiAjaW5jbHVk
ZSAicXJhd3dlYnZpZXdfcF9wLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBo
aWNzU2NlbmUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL3FyYXd3ZWJ2aWV3X3AuaD4KIAogdm9pZCBR
UmF3V2ViVmlld1ByaXZhdGU6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIFFSYXdXZWJW
aWV3OjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCiB7CiAgICAgZC0+bV9hY3RpdmUgPSBhY3RpdmU7
CiAgICAgZC0+bV93ZWJQYWdlUHJveHktPnZpZXdTdGF0ZURpZENoYW5nZShXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6Vmlld1dpbmRvd0lzQWN0aXZlKTsKLSAgICBsYXllclRyZWVSZW5kZXJlcigpLT5z
ZXRBY3RpdmUoYWN0aXZlKTsKKyAgICBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKS0+c2V0QWN0
aXZlKGFjdGl2ZSk7CiB9CiAKIFFTaXplIFFSYXdXZWJWaWV3OjpzaXplKCkgY29uc3QKQEAgLTM2
Myw3ICszNjMsNyBAQCBXS1BhZ2VSZWYgUVJhd1dlYlZpZXc6OnBhZ2VSZWYoKQogICAgIHJldHVy
biB0b0FQSShkLT5tX3dlYlBhZ2VQcm94eS5nZXQoKSk7CiB9CiAKLVdlYktpdDo6TGF5ZXJUcmVl
UmVuZGVyZXIqIFFSYXdXZWJWaWV3OjpsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0CitXZWJDb3Jl
OjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIFFSYXdXZWJWaWV3Ojpjb29yZGluYXRlZEdyYXBo
aWNzU2NlbmUoKSBjb25zdAogewogICAgIFdlYktpdDo6RHJhd2luZ0FyZWFQcm94eSogZHJhd2lu
Z0FyZWEgPSBkLT5tX3dlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKTsKICAgICBpZiAoIWRyYXdp
bmdBcmVhKQpAQCAtMzcxLDIwICszNzEsMjAgQEAgV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciog
UVJhd1dlYlZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QKICAgICBXZWJLaXQ6OkNvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA9
IGRyYXdpbmdBcmVhLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOwogICAgIGlmICgh
Y29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsK
KyAgICByZXR1cm4gY29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHktPmNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSgpOwogfQogCiB2b2lkIFFSYXdXZWJWaWV3OjpwYWludChjb25zdCBRTWF0cml4
NHg0JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIHBhaW50RmxhZ3MpCiB7Ci0g
ICAgV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBsYXllclRyZWVSZW5kZXJl
cigpOwotICAgIGlmICghcmVuZGVyZXIpCisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKiBzY2VuZSA9IGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOworICAgIGlmICghc2Nl
bmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJlbmRlcmVyLT5zZXRBY3RpdmUodHJ1ZSk7Cisg
ICAgc2NlbmUtPnNldEFjdGl2ZSh0cnVlKTsKIAogICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
KDAsIDAsIGQtPm1fc2l6ZS53aWR0aCgpLCBkLT5tX3NpemUuaGVpZ2h0KCkpOwogCi0gICAgcmVu
ZGVyZXItPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5zZm9ybSwgb3BhY2l0eSwgdHJhbnNm
b3JtLm1hcFJlY3QocmVjdCksIHBhaW50RmxhZ3MpOworICAgIHNjZW5lLT5wYWludFRvQ3VycmVu
dEdMQ29udGV4dCh0cmFuc2Zvcm0sIG9wYWNpdHksIHRyYW5zZm9ybS5tYXBSZWN0KHJlY3QpLCBw
YWludEZsYWdzKTsKIH0KIAogdm9pZCBRUmF3V2ViVmlldzo6c2VuZEtleUV2ZW50KFFLZXlFdmVu
dCogZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jh
dy9xcmF3d2Vidmlld19wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9x
cmF3d2Vidmlld19wLmgKaW5kZXggMDE1ODE1YWQ4YzcwYTlkZTA1ZDgxYmE2YTYzMDIxMGI3MjJj
ZjdmNC4uNGFlM2U1ZTUzZWFjMzYwMTRmYjgwNTdmNDk1MGZhYWY1ZmMyYzI1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdfcC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3AuaApA
QCAtNDcsOCArNDcsOCBAQCBRVF9FTkRfTkFNRVNQQUNFCiAKIGNsYXNzIFFSYXdXZWJWaWV3UHJp
dmF0ZTsKIAotbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTsKIH0KIAog
Y2xhc3MgUVJhd1dlYlZpZXdDbGllbnQgewpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNlbmRUb3VjaEV2ZW50KFFUb3VjaEV2ZW50Kik7CiAKIHByaXZhdGU6Ci0gICAgV2Vi
S2l0OjpMYXllclRyZWVSZW5kZXJlciogbGF5ZXJUcmVlUmVuZGVyZXIoKSBjb25zdDsKKyAgICBX
ZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZSgpIGNvbnN0OwogCiAgICAgUVJhd1dlYlZpZXdQcml2YXRlKiBkOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
QmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzgzOGJiMGRiMjBkODc0MzRjOGE0MzFhNGYwNGY0ZmQ4NmE2NjBmYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1
ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdm9pZCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXIqIHRleHR1cmVNYXBwZXIpCi17Ci0gICAgaWYgKCFtX3N1cmZhY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEZsb2F0UmVjdCB0aWxlUmVjdChtX3RpbGVSZWN0KTsKLSAgICB0aWxlUmVj
dC5zY2FsZSgxLiAvIG1fc2NhbGUpOwotICAgIGJvb2wgc2hvdWxkUmVzZXQgPSBmYWxzZTsKLSAg
ICBpZiAodGlsZVJlY3QgIT0gcmVjdCgpKSB7Ci0gICAgICAgIHNldFJlY3QodGlsZVJlY3QpOwot
ICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0gICAgfQotICAgIFJlZlB0cjxCaXRtYXBUZXh0
dXJlPiB0ZXh0dXJlID0gdGhpcy0+dGV4dHVyZSgpOwotICAgIGlmICghdGV4dHVyZSkgewotICAg
ICAgICB0ZXh0dXJlID0gdGV4dHVyZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOwotICAgICAgICBz
ZXRUZXh0dXJlKHRleHR1cmUuZ2V0KCkpOwotICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkud2lkdGgo
KSA+PSBtX3RpbGVSZWN0LnNpemUoKS53aWR0aCgpICYmIHRleHR1cmVNYXBwZXItPm1heFRleHR1
cmVTaXplKCkuaGVpZ2h0KCkgPj0gbV90aWxlUmVjdC5zaXplKCkuaGVpZ2h0KCkpOwotICAgIGlm
IChzaG91bGRSZXNldCkKLSAgICAgICAgdGV4dHVyZS0+cmVzZXQobV90aWxlUmVjdC5zaXplKCks
IG1fc3VyZmFjZS0+c3VwcG9ydHNBbHBoYSgpKTsKLQotICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4
dHVyZSh0ZXh0dXJlLCBtX3NvdXJjZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7Ci0gICAgbV9zdXJm
YWNlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzZXRC
YWNrQnVmZmVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2lu
dCYgb2Zmc2V0KQotewotICAgIG1fc291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgbV90aWxl
UmVjdCA9IHRpbGVSZWN0OwotICAgIG1fc3VyZmFjZU9mZnNldCA9IG9mZnNldDsKLSAgICBtX3N1
cmZhY2UgPSBidWZmZXI7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0
ZVRpbGUodWludDMyX3QgaWQsIGZsb2F0IHNjYWxlKQotewotICAgIG1fdGlsZXMuYWRkKGlkLCBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUoc2NhbGUpKTsKLSAgICBtX3NjYWxlID0gc2NhbGU7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUodWludDMyX3Qg
aWQpCi17Ci0gICAgQVNTRVJUKG1fdGlsZXMuY29udGFpbnMoaWQpKTsKLSAgICBtX3RpbGVzVG9S
ZW1vdmUuYWRkKGlkKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3Zl
QWxsVGlsZXMoKQotewotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgbV90aWxlc1RvUmVtb3ZlLmFkZChpdC0+a2V5KTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZTo6dXBkYXRlVGlsZSh1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPiBiYWNrQnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQo
aWQpOwotICAgIEFTU0VSVChpdCAhPSBtX3RpbGVzLmVuZCgpKTsKLSAgICBpdC0+dmFsdWUuc2V0
QmFja0J1ZmZlcih0aWxlUmVjdCwgc291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKLX0K
LQotUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4
dHVyZSgpIGNvbnN0Ci17Ci0gICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0g
aXQtPnZhbHVlLnRleHR1cmUoKTsKLSAgICAgICAgaWYgKHRleHR1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gdGV4dHVyZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPigpOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBzaXplOwotfQotCi12
b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKFZl
Y3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+JiB0aWxlcywgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0
eSwgQml0bWFwVGV4dHVyZSogbWFzaywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRpbGVzW2ld
LT5wYWludCh0ZXh0dXJlTWFwcGVyLCB0cmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIGNhbGN1bGF0
ZUV4cG9zZWRUaWxlRWRnZXMocmVjdCwgdGlsZXNbaV0tPnJlY3QoKSkpOwotfQotCi1UcmFuc2Zv
cm1hdGlvbk1hdHJpeCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1G
b3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkKLXsKLSAgICByZXR1cm4gVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QocmVjdCgpLCB0YXJnZXRSZWN0KTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0
dXJlKiBtYXNrKQotewotICAgIGlmIChtX3RpbGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVCghbV9zaXplLmlzWmVybygpKTsKLQotICAgIFZlY3RvcjxUZXh0dXJlTWFw
cGVyVGlsZSo+IHRpbGVzVG9QYWludDsKLSAgICBWZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiBw
cmV2aW91c1RpbGVzVG9QYWludDsKLQotICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0
aW1lIHdlIHBhaW50LCBpbiBjYXNlIHRoZSBvcGFjaXR5IGhhcyBjaGFuZ2VkLgotICAgIENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsK
LSAgICBGbG9hdFJlY3QgY292ZXJlZFJlY3Q7Ci0gICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdT
dG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZh
bHVlOwotICAgICAgICBpZiAoIXRpbGUudGV4dHVyZSgpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKHRpbGUuc2NhbGUoKSA9PSBtX3NjYWxlKSB7Ci0gICAgICAgICAgICB0
aWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKLSAgICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRl
KHRpbGUucmVjdCgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gs
IG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBhIGJ1Zy4KLSAgICAgICAgLy8gV2Ugc2hvdyB0
aGUgcHJldmlvdXMtc2NhbGUgdGlsZSBhbnl3YXkgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0
aCBhbnkgY3VycmVudC1zY2FsZSB0aWxlLgotICAgICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYg
Y292ZXJlZFJlY3QuaW50ZXJzZWN0cyh0aWxlLnJlY3QoKSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBwcmV2aW91c1RpbGVzVG9QYWludC5hcHBlbmQoJnRpbGUpOwotICAgIH0K
LQotICAgIC8vIHRhcmdldFJlY3QgaXMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVt
LCBzbyB3ZSBtdXN0IGNvbXBhcmUgdHdvIHJlY3RzIG9uIHRoZSBjb250ZW50cyBjb29yZGluYXRl
IHN5c3RlbS4KLSAgICAvLyBTZWUgVGlsZWRCYWNraW5nU3RvcmUuCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBhZGp1c3RlZFRyYW5zZm9y
bUZvclJlY3QodGFyZ2V0UmVjdCk7Ci0KLSAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHBy
ZXZpb3VzVGlsZXNUb1BhaW50LCB0ZXh0dXJlTWFwcGVyLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3Bh
Y2l0eSwgbWFzaywgcmVjdCgpKTsKLSAgICBwYWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHRpbGVz
VG9QYWludCwgdGV4dHVyZU1hcHBlciwgYWRqdXN0ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ss
IHJlY3QoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIo
VGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBm
bG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0
KHRhcmdldFJlY3QpOwotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0
b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd0JvcmRlcihib3JkZXJDb2xvciwgYm9yZGVyV2lk
dGgsIGl0LT52YWx1ZS5yZWN0KCksIGFkanVzdGVkVHJhbnNmb3JtKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFpbnRDb3VudGVyKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYXBwZXIsIGludCByZXBhaW50Q291bnQsIGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
dHJhbnNmb3JtKQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3Jt
ID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOwotICAg
IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5l
bmQoKTsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdGV4dHVyZU1h
cHBlci0+ZHJhd1JlcGFpbnRDb3VudGVyKHJlcGFpbnRDb3VudCwgYm9yZGVyQ29sb3IsIGl0LT52
YWx1ZS5yZWN0KCkubG9jYXRpb24oKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOwotfQotCi12b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVy
KiB0ZXh0dXJlTWFwcGVyKQotewotICAgIEhhc2hTZXQ8dWludDMyX3Q+OjppdGVyYXRvciB0aWxl
c1RvUmVtb3ZlRW5kID0gbV90aWxlc1RvUmVtb3ZlLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDx1
aW50MzJfdD46Oml0ZXJhdG9yIGl0ID0gbV90aWxlc1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IHRp
bGVzVG9SZW1vdmVFbmQ7ICsraXQpCi0gICAgICAgIG1fdGlsZXMucmVtb3ZlKCppdCk7Ci0gICAg
bV90aWxlc1RvUmVtb3ZlLmNsZWFyKCk7Ci0KLSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRp
bGVNYXA6Oml0ZXJhdG9yIHRpbGVzRW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3IgKENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7
IGl0ICE9IHRpbGVzRW5kOyArK2l0KQotICAgICAgICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4
dHVyZU1hcHBlcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYTgxMjBlOWUzODIyNWY2NDA5NTQ2MDgzNjhmNDkyNDM0N2Q4MzRmYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCisr
KyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVfaAotI2RlZmluZSBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0KLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJh
Y2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFj
ZTsKLQotY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlIDogcHVibGljIFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJUaWxlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQotICAgICAgICA6IFRleHR1cmVNYXBwZXJU
aWxlKFdlYkNvcmU6OkZsb2F0UmVjdCgpKQotICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCi0gICAg
ewotICAgIH0KLQotICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGU7IH0KLSAgICB2b2lkIHN3YXBCdWZmZXJzKFdlYkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAg
ICB2b2lkIHNldEJhY2tCdWZmZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOwotCi1wcml2YXRlOgotICAgIFJlZlB0cjxDb29yZGluYXRl
ZFN1cmZhY2U+IG1fc3VyZmFjZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fc291cmNlUmVjdDsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdGlsZVJlY3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQg
bV9zdXJmYWNlT2Zmc2V0OwotICAgIGZsb2F0IG1fc2NhbGU7Ci19OwotCi1jbGFzcyBDb29yZGlu
YXRlZEJhY2tpbmdTdG9yZSA6IHB1YmxpYyBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlIHsKLXB1YmxpYzoKLSAgICB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBmbG9h
dCk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCk7Ci0gICAgdm9pZCByZW1v
dmVBbGxUaWxlcygpOwotICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgUGFzc1JlZlB0cjxD
b29yZGluYXRlZFN1cmZhY2U+LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUpOyB9Ci0gICAgdm9pZCBjb21taXRU
aWxlT3BlcmF0aW9ucyhXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKik7Ci0gICAgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaXpl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4
dHVyZU1hcHBlcihXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZSopOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Qm9yZGVyKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXIqLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRo
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVwYWludENvdW50ZXIo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlciosIGludCByZXBhaW50Q291bnQsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKLQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZSgpCi0gICAgICAgIDogbV9zY2FsZSgxLikKLSAgICB7IH0KLSAgICB2b2lkIHBh
aW50VGlsZXNUb1RleHR1cmVNYXBwZXIoVmVjdG9yPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJUaWxl
Kj4mLCBXZWJDb3JlOjpUZXh0dXJlTWFwcGVyKiwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRp
b25NYXRyaXgmLCBmbG9hdCwgV2ViQ29yZTo6Qml0bWFwVGV4dHVyZSosIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYpOwotICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVk
VHJhbnNmb3JtRm9yUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKLSAgICBXZWJDb3Jl
OjpGbG9hdFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkZsb2F0UmVjdChXZWJD
b3JlOjpGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KLQotICAgIHR5cGVkZWYgSGFzaE1h
cDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlPiBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZVRpbGVNYXA7Ci0gICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwIG1fdGls
ZXM7Ci0gICAgSGFzaFNldDx1aW50MzJfdD4gbV90aWxlc1RvUmVtb3ZlOwotICAgIFdlYkNvcmU6
OkZsb2F0U2l6ZSBtX3NpemU7Ci0gICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYktpdAotI2VuZGlmCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5j
cHAKaW5kZXggMGNjMzQyOTk1OTZhMTFkNWM1OTNmZDE4Mjc4ZjUwZjRiN2MyZDRjYy4uOTg2NDkz
YzMyZmY4NDYyOGEzZTBiMGViYjNhMDUxYjc0MTU5Mzc1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcApAQCAtMjIsMTMgKzIyLDEz
IEBACiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogI2luY2x1ZGUgIkNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgiCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5o
IgogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdE1lc3NhZ2VzLmgiCi0jaW5jbHVk
ZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VVcGRh
dGVJbmZvLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAjaW5jbHVkZSAiQ3VzdG9tRmls
dGVyUHJvZ3JhbUluZm8uaCIKQEAgLTQwLDEzICs0MCwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5KERyYXdpbmdBcmVhUHJveHkqIGRyYXdpbmdBcmVhUHJveHkpCiAgICAgOiBt
X2RyYXdpbmdBcmVhUHJveHkoZHJhd2luZ0FyZWFQcm94eSkKLSAgICAsIG1fcmVuZGVyZXIoYWRv
cHRSZWYobmV3IExheWVyVHJlZVJlbmRlcmVyKHRoaXMpKSkKKyAgICAsIG1fc2NlbmUoYWRvcHRS
ZWYobmV3IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSh0aGlzKSkpCiB7CiB9CiAKIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp+Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoKQog
ewotICAgIG1fcmVuZGVyZXItPmRldGFjaCgpOworICAgIG1fc2NlbmUtPmRldGFjaCgpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCkBA
IC01Niw4MSArNTYsODEgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6dXBk
YXRlVmlld3BvcnQoKQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaXNw
YXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKIHsKLSAgICBtX3Jl
bmRlcmVyLT5hcHBlbmRVcGRhdGUoZnVuY3Rpb24pOworICAgIG1fc2NlbmUtPmFwcGVuZFVwZGF0
ZShmdW5jdGlvbik7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNy
ZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGls
ZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViS2l0OjpTdXJm
YWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OmNyZWF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
UmVuZGVyZXI6OmNyZWF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJRCwg
dXBkYXRlSW5mby5zY2FsZUZhY3RvcikpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwg
dGlsZUlELCB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yKSk7CiAgICAgdXBkYXRlVGlsZUZvckxheWVy
KGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pOwogfQogCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8pCit2b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvKQogewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVUaWxlLCBtX3JlbmRlcmVyLmdldCgp
LCBsYXllcklELCB0aWxlSUQsIExheWVyVHJlZVJlbmRlcmVyOjpUaWxlVXBkYXRlKHVwZGF0ZUlu
Zm8udXBkYXRlUmVjdCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8uYXRsYXNJRCwgdXBkYXRlSW5mby5z
dXJmYWNlT2Zmc2V0KSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6dXBkYXRlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCBD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0
LCB0aWxlUmVjdCwgdXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQp
KSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlbW92ZVRpbGVG
b3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKQogewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlLCBt
X3JlbmRlcmVyLmdldCgpLCBsYXllcklELCB0aWxlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZVRpbGUsIG1fc2NlbmUuZ2V0KCks
IGxheWVySUQsIHRpbGVJRCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGlu
YXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQo
JkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVVcGRhdGVBdGxhcywgbV9yZW5kZXJlci5nZXQoKSwg
YXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOworICAgIGRp
c3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y3JlYXRlVXBkYXRl
QXRsYXMsIG1fc2NlbmUuZ2V0KCksIGF0bGFzSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3Jl
YXRlKGhhbmRsZSkpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVXBkYXRlQXRsYXMsIG1fcmVuZGVyZXIu
Z2V0KCksIGF0bGFzSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnJlbW92ZVVwZGF0ZUF0bGFzLCBtX3NjZW5lLmdldCgpLCBhdGxhc0lEKSk7
CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUNvbXBvc2l0
aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCiB7Ci0gICAg
ZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUxheWVycywgbV9y
ZW5kZXJlci5nZXQoKSwgaWRzKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlkcykpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZWxldGVDb21wb3NpdGluZ0xh
eWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQogewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVMYXllcnMsIG1fcmVuZGVy
ZXIuZ2V0KCksIGlkcykpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6ZGVsZXRlTGF5ZXJzLCBtX3NjZW5lLmdldCgpLCBpZHMpKTsKIH0KIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Um9vdENvbXBvc2l0aW5nTGF5ZXIo
Q29vcmRpbmF0ZWRMYXllcklEIGlkKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRCwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFJvb3RM
YXllcklELCBtX3NjZW5lLmdldCgpLCBpZCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdFByb3h5OjpzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgaW5mbykKIHsKLSAgICBkaXNwYXRjaFVw
ZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJTdGF0ZSwgbV9yZW5kZXJlci5n
ZXQoKSwgaWQsIGluZm8pKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnNldExheWVyU3RhdGUsIG1fc2NlbmUuZ2V0KCksIGlkLCBpbmZvKSk7CiB9
CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbXBvc2l0aW5nTGF5
ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+JiBjaGlsZHJlbikKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6c2V0TGF5ZXJDaGlsZHJlbiwgbV9yZW5kZXJlci5nZXQoKSwgaWQsIGNoaWxk
cmVuKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5l
OjpzZXRMYXllckNoaWxkcmVuLCBtX3NjZW5lLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKIH0KIAog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHk6OnNldENvbXBvc2l0aW5nTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgZmlsdGVycykpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6c2V0TGF5ZXJGaWx0ZXJzLCBtX3NjZW5lLmdldCgpLCBpZCwgZmlsdGVycykpOwog
fQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCkKIHsKLSAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlQ3VzdG9tRmls
dGVyUHJvZ3JhbSwgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0s
IG1fc2NlbmUuZ2V0KCksIGlkKSk7CiB9Ci12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQordm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1
c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKIHsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9y
ZW5kZXJlci5nZXQoKSwgaWQsIHByb2dyYW1JbmZvKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtLCBt
X3NjZW5lLmdldCgpLCBpZCwgcHJvZ3JhbUluZm8pKTsKIH0KICNlbmRpZgogCi12b2lkIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGNvdmVyZWRSZWN0
KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6ZGlkUmVuZGVyRnJhbWUoY29u
c3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmVkUmVjdCkKIHsK
LSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNo
YW5nZXMsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OmZsdXNoTGF5ZXJDaGFuZ2VzLCBtX3NjZW5lLmdldCgpKSk7
CiAgICAgdXBkYXRlVmlld3BvcnQoKTsKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAg
ICBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+ZGlkUmVuZGVyRnJhbWUoY29udGVudHNTaXpl
LCBjb3ZlcmVkUmVjdCk7CkBAIC0xNDIsNDMgKzE0Miw0MyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBj
b250ZQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVJbWFnZUJh
Y2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQogewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJbWFnZUJhY2tpbmcsIG1fcmVu
ZGVyZXIuZ2V0KCksIGltYWdlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1h
Z2VJRCkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlELCBjb25zdCBXZWJD
b29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSYgaGFuZGxlKQogewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVJbWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIu
Z2V0KCksIGltYWdlSUQsIFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKGhhbmRsZSkpKTsK
KyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0
ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCwgV2ViQ29vcmRpbmF0ZWRTdXJm
YWNlOjpjcmVhdGUoaGFuZGxlKSkpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dFByb3h5OjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQgaW1hZ2VJRCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJl
cjo6Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkp
OworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y2xl
YXJJbWFnZUJhY2tpbmdDb250ZW50cywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwogfQogCiB2
b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVJbWFnZUJhY2tpbmcsIG1fcmVuZGVyZXIuZ2V0
KCksIGltYWdlSUQpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnJlbW92ZUltYWdlQmFja2luZywgbV9zY2VuZS5nZXQoKSwgaW1hZ2VJRCkpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRDb250ZW50c1NpemUo
Y29uc3QgRmxvYXRTaXplJiBjb250ZW50c1NpemUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZSwgbV9yZW5kZXJlci5nZXQoKSwg
Y29udGVudHNTaXplKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzZXRDb250ZW50c1NpemUsIG1fc2NlbmUuZ2V0KCksIGNvbnRlbnRzU2l6ZSkp
OwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRMYXllckFuaW1h
dGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9u
cyYgYW5pbWF0aW9ucykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6c2V0TGF5ZXJBbmltYXRpb25zLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgYW5pbWF0aW9u
cykpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
c2V0TGF5ZXJBbmltYXRpb25zLCBtX3NjZW5lLmdldCgpLCBpZCwgYW5pbWF0aW9ucykpOwogfQog
CiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRBbmltYXRpb25zTG9ja2Vk
KGJvb2wgbG9ja2VkKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRBbmltYXRpb25zTG9ja2VkLCBtX3JlbmRlcmVyLmdldCgpLCBsb2NrZWQpKTsKKyAg
ICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldEFuaW1h
dGlvbnNMb2NrZWQsIG1fc2NlbmUuZ2V0KCksIGxvY2tlZCkpOwogfQogCiB2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRQb2ludCYgdHJhamVjdG9yeVZlY3RvcikKIHsKICAgICAv
LyBJbmZvcm0gdGhlIHJlbmRlcmVyIHRvIGFkanVzdCB2aWV3cG9ydC1maXhlZCBsYXllcnMuCi0g
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFZpc2libGVDb250
ZW50c1JlY3QsIG1fcmVuZGVyZXIuZ2V0KCksIHJlY3QpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldFZpc2libGVDb250ZW50c1JlY3QsIG1f
c2NlbmUuZ2V0KCksIHJlY3QpKTsKIAogICAgIGlmIChyZWN0ID09IG1fbGFzdFNlbnRWaXNpYmxl
UmVjdCAmJiB0cmFqZWN0b3J5VmVjdG9yID09IG1fbGFzdFNlbnRUcmFqZWN0b3J5VmVjdG9yKQog
ICAgICAgICByZXR1cm47CkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eTo6cmVuZGVyTmV4dEZyYW1lKCkKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZXF1ZXN0
QW5pbWF0aW9uRnJhbWUoKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJl
bmRlcmVyOjpyZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIG1fcmVuZGVyZXIuZ2V0KCkpKTsKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlcXVlc3RBbmlt
YXRpb25GcmFtZSwgbV9zY2VuZS5nZXQoKSkpOwogICAgIHVwZGF0ZVZpZXdwb3J0KCk7CiB9CiAK
QEAgLTIwOCwzMCArMjA4LDMwIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikK
IHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hhbmdl
U2Nyb2xsUG9zaXRpb24sIG1fcmVuZGVyZXIuZ2V0KCksIHBvc2l0aW9uKSk7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaWRDaGFuZ2VTY3JvbGxQ
b3NpdGlvbiwgbV9zY2VuZS5nZXQoKSwgcG9zaXRpb24pKTsKIH0KIAogI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgSW50U2l6ZSYgY2FudmFzU2l6ZSwgY29u
c3QgR3JhcGhpY3NTdXJmYWNlVG9rZW4mIHRva2VuKQogewogICAgIEdyYXBoaWNzU3VyZmFjZTo6
RmxhZ3Mgc3VyZmFjZUZsYWdzID0gR3JhcGhpY3NTdXJmYWNlOjpTdXBwb3J0c1RleHR1cmVUYXJn
ZXQgfCBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzU2hhcmluZzsKLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgp
LCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJmYWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3Vy
ZmFjZUZsYWdzLCB0b2tlbikpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZUNhbnZhcywgbV9zY2VuZS5nZXQoKSwgaWQsIGNhbnZhc1Np
emUsIEdyYXBoaWNzU3VyZmFjZTo6Y3JlYXRlKGNhbnZhc1NpemUsIHN1cmZhY2VGbGFncywgdG9r
ZW4pKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKIHsKLSAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c3luY0NhbnZhcywgbV9yZW5k
ZXJlci5nZXQoKSwgaWQsIGZyb250QnVmZmVyKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzeW5jQ2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCwg
ZnJvbnRCdWZmZXIpKTsKIH0KIAogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6
ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OmRlc3Ryb3lDYW52YXMsIG1fcmVuZGVyZXIuZ2V0
KCksIGlkKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpkZXN0cm95Q2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCkpOwogfQogI2VuZGlmCiAKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyUmVwYWludENvdW50KENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50IHZhbHVlKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclJlcGFpbnRDb3VudCwgbV9yZW5kZXJlci5n
ZXQoKSwgaWQsIHZhbHVlKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpzZXRMYXllclJlcGFpbnRDb3VudCwgbV9zY2VuZS5nZXQoKSwgaWQsIHZh
bHVlKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnB1cmdlQmFj
a2luZ1N0b3JlcygpCkBAIC0yMzksOSArMjM5LDkgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKICAgICBtX2RyYXdpbmdBcmVhUHJveHkt
PnBhZ2UoKS0+cHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhv
c3Q6OlB1cmdlQmFja2luZ1N0b3JlcygpLCBtX2RyYXdpbmdBcmVhUHJveHktPnBhZ2UoKS0+cGFn
ZUlEKCkpOwogfQogCi12b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQordm9pZCBDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eTo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0QmFj
a2dyb3VuZENvbG9yLCBtX3JlbmRlcmVyLmdldCgpLCBjb2xvcikpOworICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QmFja2dyb3VuZENvbG9yLCBt
X3NjZW5lLmdldCgpLCBjb2xvcikpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaAppbmRleCBiZDBhM2VlNDA3MDJiZDIzZjc4NmEz
OTUwMTJhODYyNjlhYjljMTI5Li4yNGIzNDc3MGFjMDgzYzM1YTU1NDAzMDRlMDkwYTA1MjU4ZWY1
N2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5LmgKQEAgLTI0LDEyICsyNCwxMCBAQAogCiAjaW5jbHVkZSAiQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAi
Q29vcmRpbmF0ZWRMYXllckluZm8uaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCi0j
aW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKLSNpbmNs
dWRlICJTdXJmYWNlVXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvb3JkaW5hdGVkU3VyZmFj
ZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4K
QEAgLTQyLDU4ICs0MCw2MCBAQAogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQorbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87Ci1jbGFzcyBMYXllclRyZWVSZW5kZXJlcjsK
K2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOworfQogCi1jbGFzcyBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSA6IHB1YmxpYyBMYXllclRyZWVSZW5kZXJlckNsaWVudCB7CituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgOiBwdWJsaWMg
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHkoRHJhd2luZ0FyZWFQcm94eSopOwotICAgIH5Db29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eSgpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKENvb3JkaW5h
dGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKTsKLSAgICB2b2lkIHNldENv
bXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+Jik7CisgICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkoKTsKKyAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShXZWJDb3JlOjpD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7
CisgICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOwog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHNldENvbXBvc2l0aW5nTGF5ZXJGaWx0
ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYp
OworICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAgICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFt
KGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKICAgICB2
b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKICNlbmRpZgotICAgIHZvaWQg
Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4m
KTsKLSAgICB2b2lkIGRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGlu
YXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGlu
YXRlZExheWVySUQpOworICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVj
dG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIGRlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7
CisgICAgdm9pZCBzZXRSb290Q29tcG9zaXRpbmdMYXllcihXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySUQpOwogICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYpOwogICAgIHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKTsKICAg
ICB2b2lkIGRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRzU2l6
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpOwotICAgIHZvaWQgY3JlYXRl
VGlsZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHVw
ZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJik7Ci0gICAgdm9p
ZCByZW1vdmVUaWxlRm9yTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQp
OworICAgIHZvaWQgY3JlYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHVwZGF0ZVRpbGVGb3JMYXllcihXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgdm9pZCBy
ZW1vdmVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQpOwogICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgY29u
c3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKICAgICB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFu
ZGxlJik7Ci0gICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQpOwotICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKFdlYkNv
cmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6SGFuZGxlJik7CisgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKFdlYkNvcmU6
OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5n
KFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOwogICAgIHZvaWQgZGlkUmVjZWl2
ZUNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5TWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9u
KiwgQ29yZUlQQzo6TWVzc2FnZURlY29kZXImKTsKICAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBv
c2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKICNpZiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VU
b2tlbiYpOwotICAgIHZvaWQgc3luY0NhbnZhcyhDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IGZyb250QnVmZmVyKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
KTsKKyAgICB2b2lkIGNyZWF0ZUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2VUb2tl
biYpOworICAgIHZvaWQgc3luY0NhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVp
bnQzMl90IGZyb250QnVmZmVyKTsKKyAgICB2b2lkIGRlc3Ryb3lDYW52YXMoV2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklEKTsKICNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQo
Q29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOwotICAgIExheWVyVHJlZVJlbmRlcmVyKiBs
YXllclRyZWVSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXIuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7CisgICAgdm9pZCBzZXRMYXllclJlcGFpbnRD
b3VudChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGludCB2YWx1ZSk7CisgICAgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKSBj
b25zdCB7IHJldHVybiBtX3NjZW5lLmdldCgpOyB9CisgICAgdm9pZCBzZXRMYXllckFuaW1hdGlv
bnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xh
eWVyQW5pbWF0aW9ucyYpOwogICAgIHZvaWQgc2V0QW5pbWF0aW9uc0xvY2tlZChib29sKTsKICNp
ZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCiAgICAgdm9pZCByZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoKTsKICNlbmRpZgogICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdl
YkNvcmU6OkNvbG9yJik7CiAKLSAgICAvLyBMYXllclRyZWVSZW5kZXJlckNsaWVudCBNZXRob2Rz
LgorICAgIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCBNZXRob2RzLgogI2lmIEVO
QUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9u
RnJhbWVSZWFkeSgpIE9WRVJSSURFOwogI2VuZGlmCkBAIC0xMDUsMTMgKzEwNSwxMyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBkaXNwYXRjaFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7
CiAKICAgICBEcmF3aW5nQXJlYVByb3h5KiBtX2RyYXdpbmdBcmVhUHJveHk7Ci0gICAgUmVmUHRy
PExheWVyVHJlZVJlbmRlcmVyPiBtX3JlbmRlcmVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU+IG1fc2NlbmU7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1f
bGFzdFNlbnRWaXNpYmxlUmVjdDsKICAgICBXZWJDb3JlOjpGbG9hdFBvaW50IG1fbGFzdFNlbnRU
cmFqZWN0b3J5VmVjdG9yOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKLSNlbmRp
ZgorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIAogI2VuZGlmIC8vIENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KaW5kZXggZTNlNzhi
MzBiMDE5MjU1M2IwNmM2OTI4OTI4YjBhNmIzM2Q2ZDZhZS4uMjFkYzI2MzQ1MDNjY2RlODc5MDYy
ZDc5MzIzYzZiYmFiZTRmNzJlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4KQEAgLTE5LDcgKzE5LDcg
QEAKIAogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKIG1lc3NhZ2VzIC0+IENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5IExlZ2FjeVJlY2VpdmVyIHsKLSAgICBTZXRDb21wb3NpdGlu
Z0xheWVyU3RhdGUodWludDMyX3QgaWQsIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5
ZXJJbmZvKQorICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50MzJfdCBpZCwgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllckluZm8gbGF5ZXJJbmZvKQogICAgIFNldENvbXBvc2l0aW5nTGF5
ZXJDaGlsZHJlbih1aW50MzJfdCBpZCwgVmVjdG9yPHVpbnQzMl90PiBjaGlsZHJlbikKICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgU2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnModWludDMy
X3QgaWQsIFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMgZmlsdGVycykKQEAgLTMxLDggKzMxLDgg
QEAgbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkgTGVnYWN5UmVjZWl2
ZXIgewogICAgIFNldFJvb3RDb21wb3NpdGluZ0xheWVyKHVpbnQzMl90IGlkKQogICAgIENyZWF0
ZUNvbXBvc2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQogICAgIERlbGV0ZUNvbXBv
c2l0aW5nTGF5ZXJzKFZlY3Rvcjx1aW50MzJfdD4gaWRzKQotICAgIENyZWF0ZVRpbGVGb3JMYXll
cih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGls
ZVJlY3QsIFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKLSAgICBVcGRhdGVU
aWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJ
bnRSZWN0IHRpbGVSZWN0LCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUluZm8pCisg
ICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
V2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8gdXBk
YXRlSW5mbykKKyAgICBVcGRhdGVUaWxlRm9yTGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBk
YXRlSW5mbyB1cGRhdGVJbmZvKQogICAgIFJlbW92ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXll
cklELCB1aW50MzJfdCB0aWxlSUQpCiAgICAgQ3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRs
YXNJRCwgV2ViS2l0OjpXZWJDb29yZGluYXRlZFN1cmZhY2U6OkhhbmRsZSBoYW5kbGUpCiAgICAg
UmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBmYTk2M2E3ODU3
ODIzMDBiZWJmY2YyZGM4MzgxMTg2NGE4YTFkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2OTggKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gICAgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAw
LCBJbmMuCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKLQotI2luY2x1ZGUgIkNv
b3JkaW5hdGVkQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuaCIKLSNpbmNsdWRlICJNZXNzYWdlSUQuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJHTC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJMYXllci5oIgotI2luY2x1
ZGUgIlVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlIDxPcGVuR0xTaGltcy5oPgotI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCi0jaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKLSNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJPcGVy
YXRpb24uaCIKLSNpbmNsdWRlICJXZWJDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCi0jZW5kaWYKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpkaXNwYXRjaE9uTWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lk
KCk+JiBmdW5jdGlvbikKLXsKLSAgICBpZiAoaXNNYWluVGhyZWFkKCkpCi0gICAgICAgIGZ1bmN0
aW9uKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKGZ1bmN0aW9uKTsKLX0K
LQotc3RhdGljIEZsb2F0UG9pbnQgYm91bmRlZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwg
Y29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6ZSkKLXsKLSAgICBmbG9hdCBzY3JvbGxQb3NpdGlv
blggPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlvbi54KCksIDAuMGYpOwotICAgIHNjcm9sbFBvc2l0
aW9uWCA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0aW9uWCwgY29udGVudFNpemUud2lkdGgoKSAtIHZp
c2libGVDb250ZW50UmVjdC53aWR0aCgpKTsKLQotICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWSA9
IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLnkoKSwgMC4wZik7Ci0gICAgc2Nyb2xsUG9zaXRpb25Z
ID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25ZLCBjb250ZW50U2l6ZS5oZWlnaHQoKSAtIHZpc2li
bGVDb250ZW50UmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoc2Nyb2xsUG9z
aXRpb25YLCBzY3JvbGxQb3NpdGlvblkpOwotfQotCi1zdGF0aWMgYm9vbCBsYXllclNob3VsZEhh
dmVCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIGxheWVy
LT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+Y29udGVudHNBcmVWaXNpYmxlKCkgJiYgIWxheWVy
LT5zaXplKCkuaXNFbXB0eSgpOwotfQotCi1MYXllclRyZWVSZW5kZXJlcjo6TGF5ZXJUcmVlUmVu
ZGVyZXIoTGF5ZXJUcmVlUmVuZGVyZXJDbGllbnQqIGNsaWVudCkKLSAgICA6IG1fY2xpZW50KGNs
aWVudCkKLSAgICAsIG1faXNBY3RpdmUoZmFsc2UpCi0gICAgLCBtX3Jvb3RMYXllcklEKEludmFs
aWRDb29yZGluYXRlZExheWVySUQpCi0gICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCi0j
aWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgICwgbV9hbmltYXRpb25GcmFt
ZVJlcXVlc3RlZChmYWxzZSkKLSNlbmRpZgotICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6
OndoaXRlKQotICAgICwgbV9zZXREcmF3c0JhY2tncm91bmQoZmFsc2UpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLX0KLQotTGF5ZXJUcmVlUmVuZGVyZXI6On5MYXllclRyZWVSZW5k
ZXJlcigpCi17Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9DdXJyZW50R0xD
b250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QsIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3MgUGFp
bnRGbGFncykKLXsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikgewotICAgICAgICBtX3RleHR1
cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9k
ZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KG1fdGV4dHVyZU1hcHBl
ci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyh0cnVlKTsKLSAgICB9
Ci0KLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25Nb2RlKCkgPT0gVGV4
dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7Ci0gICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKLQotICAg
IGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKLSAgICBHcmFwaGljc0xheWVyKiBjdXJy
ZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7Ci0gICAgaWYgKCFjdXJyZW50Um9vdExheWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0
dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7Ci0KLSAgICBpZiAoIWxheWVyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBlcihtX3RleHR1cmVNYXBw
ZXIuZ2V0KCkpOwotICAgIGlmICghbV9hbmltYXRpb25zTG9ja2VkKQotICAgICAgICBsYXllci0+
YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJlZ2lu
UGFpbnRpbmcoUGFpbnRGbGFncyk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpbkNsaXAoVHJh
bnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOwotCi0gICAgaWYgKG1fc2V0RHJhd3NCYWNr
Z3JvdW5kKSB7Ci0gICAgICAgIFJHQkEzMiByZ2JhID0gbWFrZVJHQkEzMkZyb21GbG9hdHMobV9i
YWNrZ3JvdW5kQ29sb3IucmVkKCksCi0gICAgICAgICAgICBtX2JhY2tncm91bmRDb2xvci5ncmVl
bigpLCBtX2JhY2tncm91bmRDb2xvci5ibHVlKCksCi0gICAgICAgICAgICBtX2JhY2tncm91bmRD
b2xvci5hbHBoYSgpICogb3BhY2l0eSk7Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1Nv
bGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIENvbG9yKHJnYmEpKTsK
LSAgICB9Ci0KLSAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0eSgpICE9IG9wYWNpdHkg
fHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4KSB7Ci0gICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgICAgIGN1cnJlbnRSb290
TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOwotICAgICAgICBjdXJyZW50Um9vdExheWVyLT5m
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Ci0gICAgfQotCi0gICAgbGF5
ZXItPnBhaW50KCk7Ci0gICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlwKCk7Ci0gICAgbV90ZXh0
dXJlTWFwcGVyLT5lbmRQYWludGluZygpOwotCi0gICAgaWYgKGxheWVyLT5kZXNjZW5kYW50c09y
U2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQotICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVh
ZChiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQsIHRoaXMpKTsKLQotI2lm
IEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICBpZiAobV9hbmltYXRpb25GcmFt
ZVJlcXVlc3RlZCkgewotICAgICAgICBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkID0gZmFsc2U7
Ci0gICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjph
bmltYXRpb25GcmFtZVJlYWR5LCB0aGlzKSk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLSNpZiBFTkFC
TEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjphbmlt
YXRpb25GcmFtZVJlYWR5KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
IChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKLX0K
LQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkKLXsKLSAg
ICBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkID0gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpwYWludFRvR3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxh
dGZvcm1HcmFwaGljc0NvbnRleHQgcGFpbnRlcikKLXsKLSAgICBpZiAoIW1fdGV4dHVyZU1hcHBl
cikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyID0gVGV4dHVyZU1hcHBlcjo6Y3JlYXRlKCk7Ci0g
ICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlci0+YWNjZWxlcmF0aW9uTW9kZSgpID09IFRleHR1cmVN
YXBwZXI6OlNvZnR3YXJlTW9kZSk7Ci0gICAgc3luY1JlbW90ZUNvbnRlbnQoKTsKLSAgICBUZXh0
dXJlTWFwcGVyTGF5ZXIqIGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIocm9vdExheWVyKCkp
OwotCi0gICAgaWYgKCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dChwYWludGVyKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldEdy
YXBoaWNzQ29udGV4dCgmZ3JhcGhpY3NDb250ZXh0KTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmJl
Z2luUGFpbnRpbmcoKTsKLQotICAgIGlmIChtX3NldERyYXdzQmFja2dyb3VuZCkKLSAgICAgICAg
bV90ZXh0dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihncmFwaGljc0NvbnRleHQuY2xpcEJvdW5k
cygpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBtX2JhY2tncm91bmRDb2xvcik7Ci0KLSAgICBs
YXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Ci0gICAg
bV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoMCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGNv
bnRlbnRzU2l6ZSkKLXsKLSAgICBtX2NvbnRlbnRzU2l6ZSA9IGNvbnRlbnRzU2l6ZTsKLX0KLQot
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgbV92aXNpYmxlQ29udGVudHNSZWN0ID0gcmVjdDsKLX0KLQot
dm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVmlld3BvcnQoKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+dXBk
YXRlVmlld3BvcnQoKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YWRqdXN0UG9zaXRp
b25Gb3JGaXhlZExheWVycygpCi17Ci0gICAgaWYgKG1fZml4ZWRMYXllcnMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaXhlZCBsYXllciBwb3NpdGlvbnMgYXJlIHVwZGF0
ZWQgYnkgdGhlIHdlYiBwcm9jZXNzIHdoZW4gd2UgdXBkYXRlIHRoZSB2aXNpYmxlIGNvbnRlbnRz
IHJlY3QgLyBzY3JvbGwgcG9zaXRpb24uCi0gICAgLy8gSWYgd2Ugd2FudCB0aG9zZSBsYXllcnMg
dG8gZm9sbG93IGFjY3VyYXRlbHkgdGhlIHZpZXdwb3J0IHdoZW4gd2UgbW92ZSBiZXR3ZWVuIHRo
ZSB3ZWIgcHJvY2VzcyB1cGRhdGVzLCB3ZSBoYXZlIHRvIG9mZnNldAotICAgIC8vIHRoZW0gYnkg
dGhlIGRlbHRhIGJldHdlZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIHRoZSBwb3NpdGlvbiBv
ZiB0aGUgdmlld3BvcnQgdXNlZCBmb3IgdGhlIGxhc3QgbGF5b3V0LgotICAgIEZsb2F0UG9pbnQg
c2Nyb2xsUG9zaXRpb24gPSBib3VuZGVkU2Nyb2xsUG9zaXRpb24obV92aXNpYmxlQ29udGVudHNS
ZWN0LmxvY2F0aW9uKCksIG1fdmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9jb250ZW50c1NpemUpOwot
ICAgIEZsb2F0UG9pbnQgcmVuZGVyZWRTY3JvbGxQb3NpdGlvbiA9IGJvdW5kZWRTY3JvbGxQb3Np
dGlvbihtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbiwgbV92aXNpYmxlQ29udGVudHNS
ZWN0LCBtX2NvbnRlbnRzU2l6ZSk7Ci0gICAgRmxvYXRTaXplIGRlbHRhID0gc2Nyb2xsUG9zaXRp
b24gLSByZW5kZXJlZFNjcm9sbFBvc2l0aW9uOwotCi0gICAgTGF5ZXJSYXdQdHJNYXA6Oml0ZXJh
dG9yIGVuZCA9IG1fZml4ZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChMYXllclJhd1B0ck1hcDo6
aXRlcmF0b3IgaXQgPSBtX2ZpeGVkTGF5ZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgdG9UZXh0dXJlTWFwcGVyTGF5ZXIoaXQtPnZhbHVlKS0+c2V0U2Nyb2xsUG9zaXRpb25E
ZWx0YUlmTmVlZGVkKGRlbHRhKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGlkQ2hh
bmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCi17Ci0gICAgbV9w
ZW5kaW5nUmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Ci19Ci0KLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUNh
bnZhcyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBQYXNz
UmVmUHRyPEdyYXBoaWNzU3VyZmFjZT4gc3VyZmFjZSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJl
TWFwcGVyKTsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0gICAg
QVNTRVJUKCFtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNvbnRhaW5zKGlkKSk7Ci0KLSAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZhc0JhY2tpbmdTdG9yZShU
ZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCkpOwotICAgIG1fc3VyZmFj
ZUJhY2tpbmdTdG9yZXMuc2V0KGlkLCBjYW52YXNCYWNraW5nU3RvcmUpOwotCi0gICAgY2FudmFz
QmFja2luZ1N0b3JlLT5zZXRHcmFwaGljc1N1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgbGF5ZXItPnNl
dENvbnRlbnRzVG9NZWRpYShjYW52YXNCYWNraW5nU3RvcmUuZ2V0KCkpOwotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgdWludDMy
X3QgZnJvbnRCdWZmZXIpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgQVNT
RVJUKG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMoaWQpKTsKLQotICAgIFN1cmZhY2VC
YWNraW5nU3RvcmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5maW5k
KGlkKTsKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclN1cmZhY2VCYWNraW5nU3RvcmU+IGNhbnZh
c0JhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLQotICAgIGNhbnZhc0JhY2tpbmdTdG9yZS0+c3dh
cEJ1ZmZlcnNJZk5lZWRlZChmcm9udEJ1ZmZlcik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQotewotICAgIEFTU0VSVCht
X3RleHR1cmVNYXBwZXIpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlk
KTsKLSAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOwotCi0g
ICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUoaWQpOwotICAgIGxheWVyLT5zZXRDb250
ZW50c1RvTWVkaWEoMCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0
TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBpbnQgdmFsdWUpCi17Ci0g
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIHRvR3JhcGhpY3NM
YXllclRleHR1cmVNYXBwZXIobGF5ZXIpLT5zZXRSZXBhaW50Q291bnQodmFsdWUpOwotfQotCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxkSURzKQotewotICAg
IEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLSAgICBWZWN0b3I8R3JhcGhp
Y3NMYXllcio+IGNoaWxkcmVuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZElE
cy5zaXplKCk7ICsraSkgewotICAgICAgICBDb29yZGluYXRlZExheWVySUQgY2hpbGRJRCA9IGNo
aWxkSURzW2ldOwotICAgICAgICBHcmFwaGljc0xheWVyKiBjaGlsZCA9IGxheWVyQnlJRChjaGls
ZElEKTsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAgICB9Ci0gICAgbGF5ZXIt
PnNldENoaWxkcmVuKGNoaWxkcmVuKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLXZv
aWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQg
aWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCi17Ci0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAg
IGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKGZpbHRlcnMpOwotI2VuZGlmCi0gICAg
bGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDU1Nf
U0hBREVSUykKLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmluamVjdENhY2hlZEN1c3RvbUZpbHRl
clByb2dyYW1zKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0Ci17Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZp
bHRlck9wZXJhdGlvbiogb3BlcmF0aW9uID0gZmlsdGVycy5vcGVyYXRpb25zKCkuYXQoaSkuZ2V0
KCk7Ci0gICAgICAgIGlmIChvcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSAhPSBGaWx0ZXJP
cGVyYXRpb246OkNVU1RPTSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFdlYkN1
c3RvbUZpbHRlck9wZXJhdGlvbiogY3VzdG9tT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uKj4ob3BlcmF0aW9uKTsKLSAgICAgICAgQVNTRVJUKCFjdXN0b21P
cGVyYXRpb24tPnByb2dyYW0oKSk7Ci0gICAgICAgIEN1c3RvbUZpbHRlclByb2dyYW1NYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmZpbmQoY3VzdG9tT3Bl
cmF0aW9uLT5wcm9ncmFtSUQoKSk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IG1fY3VzdG9tRmls
dGVyUHJvZ3JhbXMuZW5kKCkpOwotICAgICAgICBjdXN0b21PcGVyYXRpb24tPnNldFByb2dyYW0o
aXRlci0+dmFsdWUuZ2V0KCkpOwotICAgIH0KLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IFdlYkNvcmU6OkN1c3RvbUZp
bHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbykKLXsKLSAgICBBU1NFUlQoIW1fY3VzdG9tRmls
dGVyUHJvZ3JhbXMuY29udGFpbnMoaWQpKTsKLSAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnNl
dChpZCwgV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6Y3JlYXRlKHByb2dyYW1JbmZvLnZlcnRleFNo
YWRlclN0cmluZygpLCBwcm9ncmFtSW5mby5mcmFnbWVudFNoYWRlclN0cmluZygpLCBwcm9ncmFt
SW5mby5wcm9ncmFtVHlwZSgpLCBwcm9ncmFtSW5mby5taXhTZXR0aW5ncygpLCBwcm9ncmFtSW5m
by5tZXNoVHlwZSgpKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZUN1c3Rv
bUZpbHRlclByb2dyYW0oaW50IGlkKQotewotICAgIEN1c3RvbUZpbHRlclByb2dyYW1NYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmZpbmQoaWQpOwotICAgIEFTU0VS
VChpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCkpOwotICAgIGlmIChtX3RleHR1
cmVNYXBwZXIpCi0gICAgICAgIG1fdGV4dHVyZU1hcHBlci0+cmVtb3ZlQ2FjaGVkQ3VzdG9tRmls
dGVyUHJvZ3JhbShpdGVyLT52YWx1ZS5nZXQoKSk7Ci0gICAgbV9jdXN0b21GaWx0ZXJQcm9ncmFt
cy5yZW1vdmUoaXRlcik7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQotCi12b2lk
IExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwg
Y29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mIGxheWVySW5mbykKLXsKLSAgICBBU1NFUlQobV9y
b290TGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICBHcmFwaGljc0xh
eWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0KLSAgICBsYXllci0+c2V0UmVwbGljYXRlZEJ5
TGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5ZXJJbmZvLnJlcGxpY2EpKTsKLSAgICBsYXll
ci0+c2V0TWFza0xheWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVySW5mby5tYXNrKSk7Ci0K
LSAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQobGF5ZXJJbmZvLmFuY2hvclBvaW50KTsKLSAgICBs
YXllci0+c2V0UG9zaXRpb24obGF5ZXJJbmZvLnBvcyk7Ci0gICAgbGF5ZXItPnNldFNpemUobGF5
ZXJJbmZvLnNpemUpOwotCi0gICAgbGF5ZXItPnNldFRyYW5zZm9ybShsYXllckluZm8udHJhbnNm
b3JtKTsKLSAgICBsYXllci0+c2V0Q2hpbGRyZW5UcmFuc2Zvcm0obGF5ZXJJbmZvLmNoaWxkcmVu
VHJhbnNmb3JtKTsKLSAgICBsYXllci0+c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGxheWVySW5mby5i
YWNrZmFjZVZpc2libGUpOwotICAgIGxheWVyLT5zZXRDb250ZW50c09wYXF1ZShsYXllckluZm8u
Y29udGVudHNPcGFxdWUpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1JlY3QobGF5ZXJJbmZvLmNv
bnRlbnRzUmVjdCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9Tb2xpZENvbG9yKGxheWVySW5m
by5zb2xpZENvbG9yKTsKLSAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGxheWVySW5mby5kcmF3
c0NvbnRlbnQpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1Zpc2libGUobGF5ZXJJbmZvLmNvbnRl
bnRzVmlzaWJsZSk7Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNl
dEZpeGVkVG9WaWV3cG9ydChsYXllckluZm8uZml4ZWRUb1ZpZXdwb3J0KTsKLSAgICBsYXllci0+
c2V0U2hvd0RlYnVnQm9yZGVyKGxheWVySW5mby5zaG93RGVidWdCb3JkZXJzKTsKLSAgICBsYXll
ci0+c2V0RGVidWdCb3JkZXIobGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29sb3IsIGxheWVySW5mby5k
ZWJ1Z0JvcmRlcldpZHRoKTsKLSAgICBsYXllci0+c2V0U2hvd1JlcGFpbnRDb3VudGVyKGxheWVy
SW5mby5zaG93UmVwYWludENvdW50ZXIpOwotCi0gICAgaWYgKGxheWVySW5mby5maXhlZFRvVmll
d3BvcnQpCi0gICAgICAgIG1fZml4ZWRMYXllcnMuYWRkKGlkLCBsYXllcik7Ci0gICAgZWxzZQot
ICAgICAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShpZCk7Ci0KLSAgICBhc3NpZ25JbWFnZUJhY2tp
bmdUb0xheWVyKGxheWVyLCBsYXllckluZm8uaW1hZ2VJRCk7Ci0gICAgcHJlcGFyZUNvbnRlbnRC
YWNraW5nU3RvcmUobGF5ZXIpOwotCi0gICAgLy8gTmV2ZXIgbWFrZSB0aGUgcm9vdCBsYXllciBj
bGlwLgotICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKGxheWVySW5mby5pc1Jvb3RMYXllciA/
IGZhbHNlIDogbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMpOwotICAgIGxheWVyLT5zZXRPcGFjaXR5
KGxheWVySW5mby5vcGFjaXR5KTsKLSAgICBsYXllci0+c2V0UHJlc2VydmVzM0QobGF5ZXJJbmZv
LnByZXNlcnZlczNEKTsKLX0KLQotR3JhcGhpY3NMYXllciogTGF5ZXJUcmVlUmVuZGVyZXI6Omdl
dExheWVyQnlJRElmRXhpc3RzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKLXsKLSAgICByZXR1cm4g
KGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpID8gbGF5ZXJCeUlEKGlkKSA6IDA7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29v
cmRpbmF0ZWRMYXllcklEPiYgaWRzKQotewotICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBpZHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICBjcmVhdGVMYXllcihpZHNbaW5kZXhd
KTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRM
YXllcklEIGlkKQotewotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBuZXdMYXll
ciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZhY3RvcnkgKi8sIHRoaXMpOwotICAgIHRv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobmV3TGF5ZXIuZ2V0KCkpLT5zZXRIYXNPd25CYWNr
aW5nU3RvcmUoZmFsc2UpOwotICAgIG1fbGF5ZXJzLmFkZChpZCwgbmV3TGF5ZXIucmVsZWFzZSgp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGVsZXRlTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBsYXllcklEcykKLXsKLSAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgbGF5ZXJJRHMuc2l6ZSgpOyArK2luZGV4KQotICAgICAgICBkZWxldGVM
YXllcihsYXllcklEc1tpbmRleF0pOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZWxl
dGVMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCkKLXsKLSAgICBPd25QdHI8R3JhcGhp
Y3NMYXllcj4gbGF5ZXIgPSBtX2xheWVycy50YWtlKGxheWVySUQpOwotICAgIEFTU0VSVChsYXll
cik7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKLSAgICBtX2Zp
eGVkTGF5ZXJzLnJlbW92ZShsYXllcklEKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAg
ICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShsYXllcklEKTsKLSNlbmRpZgotfQotCi12
b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRSb290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQg
bGF5ZXJJRCkKLXsKLSAgICBBU1NFUlQobGF5ZXJJRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXll
cklEKTsKLSAgICBBU1NFUlQobV9yb290TGF5ZXJJRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXll
cklEKTsKLQotICAgIG1fcm9vdExheWVySUQgPSBsYXllcklEOwotCi0gICAgR3JhcGhpY3NMYXll
ciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgQVNTRVJUKG1fcm9vdExheWVyLT5j
aGlsZHJlbigpLmlzRW1wdHkoKSk7Ci0gICAgbV9yb290TGF5ZXItPmFkZENoaWxkKGxheWVyKTsK
LX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cHJlcGFyZUNvbnRlbnRCYWNraW5nU3RvcmUo
R3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllcikKLXsKLSAgICBpZiAoIWxheWVyU2hvdWxkSGF2
ZUJhY2tpbmdTdG9yZShncmFwaGljc0xheWVyKSkgewotICAgICAgICByZW1vdmVCYWNraW5nU3Rv
cmVJZk5lZWRlZChncmFwaGljc0xheWVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGdyYXBoaWNzTGF5ZXIpOwotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVy
KiBncmFwaGljc0xheWVyKQotewotICAgIGlmIChtX2JhY2tpbmdTdG9yZXMuY29udGFpbnMoZ3Jh
cGhpY3NMYXllcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUo
KSk7Ci0gICAgYmFja2luZ1N0b3JlLT5zZXRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKSk7Ci0g
ICAgbV9iYWNraW5nU3RvcmVzLmFkZChncmFwaGljc0xheWVyLCBiYWNraW5nU3RvcmUpOwotICAg
IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllciktPnNldEJhY2tpbmdT
dG9yZShiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVC
YWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAg
IFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5n
U3RvcmVzLnRha2UoZ3JhcGhpY3NMYXllcik7Ci0gICAgaWYgKCFiYWNraW5nU3RvcmUpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NM
YXllciktPnNldEJhY2tpbmdTdG9yZSgwKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NM
YXllcikKLXsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9y
ZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQoZ3JhcGhpY3NMYXllcik7Ci0gICAgQVNTRVJUKGJhY2tp
bmdTdG9yZSk7Ci0gICAgYmFja2luZ1N0b3JlLT5zZXRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUo
KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRM
YXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgZmxvYXQgc2NhbGUpCi17Ci0gICAgR3Jh
cGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxh
eWVyKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLSAgICBiYWNraW5nU3RvcmUtPmNyZWF0
ZVRpbGUodGlsZUlELCBzY2FsZSk7Ci0gICAgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNp
emUobGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVUaWxlKENvb3Jk
aW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCi17Ci0gICAgR3JhcGhpY3NM
YXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsK
LSAgICBpZiAoIWJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYmFja2luZ1N0
b3JlLT5yZW1vdmVUaWxlKHRpbGVJRCk7Ci0gICAgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXll
clNpemUobGF5ZXIpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQo
YmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6dXBkYXRlVGlsZShD
b29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBk
YXRlJiB1cGRhdGUpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5
ZXJJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKLSAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsK
LQotICAgIFN1cmZhY2VNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdXJmYWNlcy5maW5kKHVwZGF0ZS5h
dGxhc0lEKTsKLSAgICBBU1NFUlQoaXQgIT0gbV9zdXJmYWNlcy5lbmQoKSk7Ci0KLSAgICBiYWNr
aW5nU3RvcmUtPnVwZGF0ZVRpbGUodGlsZUlELCB1cGRhdGUuc291cmNlUmVjdCwgdXBkYXRlLnRp
bGVSZWN0LCBpdC0+dmFsdWUsIHVwZGF0ZS5vZmZzZXQpOwotICAgIHJlc2V0QmFja2luZ1N0b3Jl
U2l6ZVRvTGF5ZXJTaXplKGxheWVyKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRT
dXJmYWNlPiBzdXJmYWNlKQotewotICAgIEFTU0VSVCghbV9zdXJmYWNlcy5jb250YWlucyhhdGxh
c0lEKSk7Ci0gICAgbV9zdXJmYWNlcy5hZGQoYXRsYXNJRCwgc3VyZmFjZSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpCi17
Ci0gICAgQVNTRVJUKG1fc3VyZmFjZXMuY29udGFpbnMoYXRsYXNJRCkpOwotICAgIG1fc3VyZmFj
ZXMucmVtb3ZlKGF0bGFzSUQpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVJ
bWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIEFT
U0VSVCghbV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBSZWZQdHI8Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZShDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKCkpOwotICAgIG1faW1hZ2VCYWNraW5ncy5hZGQoaW1hZ2VJRCwgYmFja2luZ1N0
b3JlLnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnVwZGF0ZUltYWdl
QmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQotewotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3Mu
Y29udGFpbnMoaW1hZ2VJRCkpOwotICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0b3IgaXQgPSBt
X2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKLQotICAgIC8vIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlIHdpdGgg
b25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgotICAgIGJhY2tpbmdTdG9yZS0+Y3JlYXRlVGls
ZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsKLSAgICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgc3VyZmFjZS0+c2l6ZSgpKTsKLSAgICAvLyBTZWUgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKCkKLSAgICBBU1NFUlQoMjAwMCA+
PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICBiYWNraW5nU3Rv
cmUtPnNldFNpemUocmVjdC5zaXplKCkpOwotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSgx
IC8qIGlkICovLCByZWN0LCByZWN0LCBzdXJmYWNlLCByZWN0LmxvY2F0aW9uKCkpOwotCi0gICAg
bV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQot
Ci12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBBU1NFUlQobV9pbWFnZUJhY2tp
bmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBpdC0+dmFsdWU7Ci0gICAgYmFja2luZ1N0b3Jl
LT5yZW1vdmVBbGxUaWxlcygpOwotICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVy
cy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3Zl
SW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRCkKLXsKLSAgICBB
U1NFUlQobV9pbWFnZUJhY2tpbmdzLmNvbnRhaW5zKGltYWdlSUQpKTsKLQotICAgIC8vIFdlIGRv
bid0IHdhbnQgVGV4dHVyZU1hcHBlckxheWVyIHJlZmVycyBhIGRhbmdsaW5nIHBvaW50ZXIuCi0g
ICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuYXBwZW5kKG1faW1hZ2VCYWNraW5ncy50YWtlKGlt
YWdlSUQpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6YXNzaWduSW1hZ2VCYWNraW5n
VG9MYXllcihHcmFwaGljc0xheWVyKiBsYXllciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQotewotICAgIGlmIChpbWFnZUlEID09IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSB7Ci0gICAgICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoMCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgSW1hZ2VCYWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1h
Z2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX2ltYWdlQmFja2lu
Z3MuZW5kKCkpOwotICAgIGxheWVyLT5zZXRDb250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tp
bmdzSWZOZWVkZWQoKQotewotICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Ci19
Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNvbW1pdFBlbmRpbmdCYWNraW5nU3RvcmVPcGVy
YXRpb25zKCkKLXsKLSAgICBIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4g
Pjo6aXRlcmF0b3IgZW5kID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmVuZCgp
OwotICAgIGZvciAoSGFzaFNldDxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID46Oml0
ZXJhdG9yIGl0ID0gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmNvbW1pdFRpbGVPcGVyYXRpb25zKG1fdGV4
dHVyZU1hcHBlci5nZXQoKSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZl
cnMuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Zmx1c2hMYXllckNoYW5n
ZXMoKQotewotICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gbV9wZW5kaW5n
UmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOwotCi0gICAgLy8gU2luY2UgdGhlIGZyYW1l
IGhhcyBub3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlv
bnMgdW50aWwgdGhlIG5leHQgbGF5b3V0LgotICAgIHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2Up
OwotCi0gICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7
Ci0gICAgY29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKLSAgICByZW1vdmVS
ZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOwotCi0gICAgLy8gVGhlIHBlbmRpbmcgdGls
ZXMgc3RhdGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nl
c3MgdG8gcmVuZGVyIHRoZSBuZXh0IG9uZS4KLSAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5k
KCZMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Ci19Ci0KLXZvaWQg
TGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRlck5leHRGcmFtZSgpCi17Ci0gICAgaWYgKG1fY2xpZW50
KQotICAgICAgICBtX2NsaWVudC0+cmVuZGVyTmV4dEZyYW1lKCk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmVuc3VyZVJvb3RMYXllcigpCi17Ci0gICAgaWYgKG1fcm9vdExheWVyKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0
ZSgwIC8qIGZhY3RvcnkgKi8sIHRoaXMpOwotICAgIG1fcm9vdExheWVyLT5zZXRNYXNrc1RvQm91
bmRzKGZhbHNlKTsKLSAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKLSAg
ICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKDAsIDAsIDApKTsKLQot
ICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJvIHNpemUsIG9yIGl0IHdv
dWxkIGJlIG9wdGltaXplZCBvdXQuCi0gICAgbV9yb290TGF5ZXItPnNldFNpemUoRmxvYXRTaXpl
KDEuMCwgMS4wKSk7Ci0KLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKLSAgICB0b1RleHR1
cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1cmVNYXBwZXIobV90ZXh0
dXJlTWFwcGVyLmdldCgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c3luY1JlbW90
ZUNvbnRlbnQoKQotewotICAgIC8vIFdlIGVucXVldWUgbWVzc2FnZXMgYW5kIGV4ZWN1dGUgdGhl
bSBkdXJpbmcgcGFpbnQsIGFzIHRoZXkgcmVxdWlyZSBhbiBhY3RpdmUgR0wgY29udGV4dC4KLSAg
ICBlbnN1cmVSb290TGF5ZXIoKTsKLQotICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gcmVu
ZGVyUXVldWU7Ci0gICAgYm9vbCBjYWxsZWRPbk1haW5UaHJlYWQgPSBXVEY6OmlzTWFpblRocmVh
ZCgpOwotICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFkKQotICAgICAgICBtX3JlbmRlclF1ZXVl
TXV0ZXgubG9jaygpOwotICAgIHJlbmRlclF1ZXVlLnN3YXAobV9yZW5kZXJRdWV1ZSk7Ci0gICAg
aWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCi0gICAgICAgIG1fcmVuZGVyUXVldWVNdXRleC51bmxv
Y2soKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVuZGVyUXVldWUuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIHJlbmRlclF1ZXVlW2ldKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVy
ZXI6OnB1cmdlR0xSZXNvdXJjZXMoKQotewotICAgIG1faW1hZ2VCYWNraW5ncy5jbGVhcigpOwot
ICAgIG1fcmVsZWFzZWRJbWFnZUJhY2tpbmdzLmNsZWFyKCk7Ci0jaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCi0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jbGVhcigpOwotI2VuZGlmCi0gICAg
bV9zdXJmYWNlcy5jbGVhcigpOwotCi0gICAgbV9yb290TGF5ZXIuY2xlYXIoKTsKLSAgICBtX3Jv
b3RMYXllcklEID0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRDsKLSAgICBtX2xheWVycy5jbGVh
cigpOwotICAgIG1fZml4ZWRMYXllcnMuY2xlYXIoKTsKLSAgICBtX3RleHR1cmVNYXBwZXIuY2xl
YXIoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXMuY2xlYXIoKTsKLSAgICBtX2JhY2tpbmdTdG9yZXNX
aXRoUGVuZGluZ0J1ZmZlcnMuY2xlYXIoKTsKLQotICAgIHNldEFjdGl2ZShmYWxzZSk7Ci0gICAg
ZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnB1cmdlQmFja2lu
Z1N0b3JlcywgdGhpcykpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwdXJnZUJhY2tp
bmdTdG9yZXMoKQotewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPnB1cmdl
QmFja2luZ1N0b3JlcygpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFu
aW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0
aW9ucyYgYW5pbWF0aW9ucykKLXsKLSAgICBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlciogbGF5
ZXIgPSB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyQnlJRChpZCkpOwotI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMu
YW5pbWF0aW9ucygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWVM
aXN0JiBrZXlmcmFtZXMgPSBhbmltYXRpb25zLmFuaW1hdGlvbnMoKS5hdChpKS5rZXlmcmFtZXMo
KTsKLSAgICAgICAgaWYgKGtleWZyYW1lcy5wcm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlX
ZWJraXRGaWx0ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBrZXlmcmFtZXMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IEZp
bHRlckFuaW1hdGlvblZhbHVlKiBmaWx0ZXJWYWx1ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEZpbHRl
ckFuaW1hdGlvblZhbHVlKj4oa2V5ZnJhbWVzLmF0KGkpKTsKLSAgICAgICAgICAgIGluamVjdENh
Y2hlZEN1c3RvbUZpbHRlclByb2dyYW1zKCpmaWx0ZXJWYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZW5kaWYKLSAgICBsYXllci0+c2V0QW5pbWF0aW9ucyhhbmltYXRpb25zKTsK
LX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxv
Y2tlZCkKLXsKLSAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSBsb2NrZWQ7Ci19Ci0KLXZvaWQgTGF5
ZXJUcmVlUmVuZGVyZXI6OmRldGFjaCgpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
LSAgICBtX2NsaWVudCA9IDA7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmFwcGVuZFVw
ZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKLXsKLSAgICBpZiAoIW1faXNB
Y3RpdmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcmVuZGVyUXVldWVNdXRleCk7Ci0gICAgbV9yZW5kZXJR
dWV1ZS5hcHBlbmQoZnVuY3Rpb24pOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRB
Y3RpdmUoYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKG1faXNBY3RpdmUgPT0gYWN0aXZlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBIYXZlIHRvIGNsZWFyIHJlbmRlciBxdWV1ZSBpbiBib3Ro
IGNhc2VzLgotICAgIC8vIElmIHRoZXJlIGFyZSBzb21lIHVwZGF0ZXMgaW4gcXVldWUgZHVyaW5n
IGFjdGl2YXRpb24gdGhlbiB0aG9zZSB1cGRhdGVzIGFyZSBmcm9tIHByZXZpb3VzIGluc3RhbmNl
IG9mIHBhaW50IG5vZGUKLSAgICAvLyBhbmQgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIG5ld2x5
IGNyZWF0ZWQgaW5zdGFuY2UuCi0gICAgbV9yZW5kZXJRdWV1ZS5jbGVhcigpOwotICAgIG1faXNB
Y3RpdmUgPSBhY3RpdmU7Ci0gICAgaWYgKG1faXNBY3RpdmUpCi0gICAgICAgIGRpc3BhdGNoT25N
YWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRoaXMp
KTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0QmFja2dyb3VuZENvbG9yKGNvbnN0
IFdlYkNvcmU6OkNvbG9yJiBjb2xvcikKLXsKLSAgICBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9y
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBkMTM4MWUzM2M2Y2VlYTFiZWY3Y2FkNTZiNGJlNWU4ZTgxODJmZGIy
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyMzAgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2lm
bmRlZiBMYXllclRyZWVSZW5kZXJlcl9oCi0jZGVmaW5lIExheWVyVHJlZVJlbmRlcmVyX2gKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIK
LSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVk
U3VyZmFjZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyQmFja2luZ1N0b3JlLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzU3Vy
ZmFjZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
SW50U2l6ZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUnVuTG9vcC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEN1c3RvbUZpbHRl
clByb2dyYW07Ci1jbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbzsKLWNsYXNzIFRleHR1cmVN
YXBwZXJMYXllcjsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlOwotY2xhc3MgQ29vcmRpbmF0ZWRMYXllckluZm87Ci0KLWNsYXNzIExheWVy
VHJlZVJlbmRlcmVyQ2xpZW50IHsKLXB1YmxpYzoKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKSA9IDA7Ci0j
ZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlld3BvcnQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJlbmRlck5leHRGcmFtZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNr
aW5nU3RvcmVzKCkgPSAwOwotfTsKLQotY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8TGF5ZXJUcmVlUmVuZGVyZXI+LCBwdWJsaWMgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgc3RydWN0IFRpbGVVcGRhdGUgewot
ICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHNvdXJjZVJlY3Q7Ci0gICAgICAgIFdlYkNvcmU6Oklu
dFJlY3QgdGlsZVJlY3Q7Ci0gICAgICAgIHVpbnQzMl90IGF0bGFzSUQ7Ci0gICAgICAgIFdlYkNv
cmU6OkludFBvaW50IG9mZnNldDsKLSAgICAgICAgVGlsZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBzb3VyY2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGUsIHVpbnQzMl90IGF0
bGFzLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbmV3T2Zmc2V0KQotICAgICAgICAgICAgOiBz
b3VyY2VSZWN0KHNvdXJjZSkKLSAgICAgICAgICAgICwgdGlsZVJlY3QodGlsZSkKLSAgICAgICAg
ICAgICwgYXRsYXNJRChhdGxhcykKLSAgICAgICAgICAgICwgb2Zmc2V0KG5ld09mZnNldCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0gICAgfTsKLSAgICBleHBsaWNpdCBMYXllclRyZWVSZW5kZXJl
cihMYXllclRyZWVSZW5kZXJlckNsaWVudCopOwotICAgIHZpcnR1YWwgfkxheWVyVHJlZVJlbmRl
cmVyKCk7Ci0gICAgdm9pZCBwYWludFRvQ3VycmVudEdMQ29udGV4dChjb25zdCBXZWJDb3JlOjpU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyOjpQYWludEZsYWdzID0gMCk7Ci0gICAgdm9pZCBwYWludFRv
R3JhcGhpY3NDb250ZXh0KEJhY2tpbmdTdG9yZTo6UGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwot
ICAgIHZvaWQgc2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpOwotICAg
IHZvaWQgc2V0VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsK
LSAgICB2b2lkIGRpZENoYW5nZVNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmIHBvc2l0aW9uKTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB2b2lkIGNyZWF0
ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBQYXNz
UmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZT4pOwotICAgIHZvaWQgc3luY0NhbnZhcyhD
b29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IGZyb250QnVmZmVyKTsKLSAgICB2b2lkIGRlc3Ry
b3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSNlbmRpZgotICAgIHZvaWQgc2V0TGF5ZXJS
ZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQgdmFsdWUpOwotCi0gICAgdm9pZCBk
ZXRhY2goKTsKLSAgICB2b2lkIGFwcGVuZFVwZGF0ZShjb25zdCBGdW5jdGlvbjx2b2lkKCk+Jik7
Ci0KLSAgICAvLyBUaGUgcGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQg
dG8gdXNlIGJlbG93IHR3byBtZXRob2RzLCBiZWNhdXNlIHR3byBtZXRob2RzIGFjY2VzcyBtZW1i
ZXJzIHRoYXQgdGhlIG1haW4gdGhyZWFkIG1hbmFnZXMuIFNlZSBtX2NsaWVudC4KLSAgICAvLyBD
dXJyZW50bHksIFFRdWlja1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZSgpIGxvY2tzIHRoZSBtYWlu
IHRocmVhZCBiZWZvcmUgY2FsbGluZyBib3RoIG1ldGhvZHMuCi0gICAgdm9pZCBwdXJnZUdMUmVz
b3VyY2VzKCk7Ci0gICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUxh
eWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgZGVsZXRl
TGF5ZXJzKGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdm9pZCBzZXRS
b290TGF5ZXJJRChDb29yZGluYXRlZExheWVySUQpOwotICAgIHZvaWQgc2V0TGF5ZXJDaGlsZHJl
bihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7
Ci0gICAgdm9pZCBzZXRMYXllclN0YXRlKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgQ29vcmRp
bmF0ZWRMYXllckluZm8mKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBzZXRM
YXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zJik7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdm9pZCBpbmpl
Y3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKSBjb25zdDsKLSAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0o
aW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwotICAgIHZv
aWQgcmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpOwotI2VuZGlmCi0KLSAgICB2b2lk
IGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGZsb2F0IHNj
YWxlKTsKLSAgICB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQpOwotICAgIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgVGlsZVVwZGF0ZSYpOwotICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMo
dWludDMyX3QgYXRsYXNJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKLSAgICB2
b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwotICAgIHZvaWQgZmx1c2hM
YXllckNoYW5nZXMoKTsKLSAgICB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pOwotICAgIHZvaWQg
Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAg
ICB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKTsKLSAg
ICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Ci0gICAgdm9pZCBzZXRBbmltYXRpb25zTG9j
a2VkKGJvb2wpOwotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKGNvbnN0IFdlYkNvcmU6OkNv
bG9yJik7Ci0gICAgdm9pZCBzZXREcmF3c0JhY2tncm91bmQoYm9vbCBlbmFibGUpIHsgbV9zZXRE
cmF3c0JhY2tncm91bmQgPSBlbmFibGU7IH0KLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRSkKLSAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbGF5ZXJCeUlEKENvb3JkaW5hdGVk
TGF5ZXJJRCBpZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xheWVycy5jb250YWlucyhpZCkp
OwotICAgICAgICBBU1NFUlQoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0gICAg
ICAgIHJldHVybiBtX2xheWVycy5nZXQoaWQpOwotICAgIH0KLSAgICBXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiBnZXRMYXllckJ5SURJZkV4aXN0cyhDb29yZGluYXRlZExheWVySUQpOwotICAgIFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fcm9vdExheWVyLmdl
dCgpOyB9Ci0KLSAgICB2b2lkIHN5bmNSZW1vdGVDb250ZW50KCk7Ci0gICAgdm9pZCBhZGp1c3RQ
b3NpdGlvbkZvckZpeGVkTGF5ZXJzKCk7Ci0KLSAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9t
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciopIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludENvbnRlbnRzKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIE9W
RVJSSURFIHsgfQotCi0gICAgdm9pZCBkaXNwYXRjaE9uTWFpblRocmVhZChjb25zdCBGdW5jdGlv
bjx2b2lkKCk+Jik7Ci0gICAgdm9pZCB1cGRhdGVWaWV3cG9ydCgpOwotI2lmIEVOQUJMRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRSkKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKLSNl
bmRpZgotICAgIHZvaWQgcmVuZGVyTmV4dEZyYW1lKCk7Ci0gICAgdm9pZCBwdXJnZUJhY2tpbmdT
dG9yZXMoKTsKLQotICAgIHZvaWQgY3JlYXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAg
ICB2b2lkIGRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0KLSAgICB2b2lkIGFzc2ln
bkltYWdlQmFja2luZ1RvTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQpOwotICAgIHZvaWQgcmVtb3ZlUmVsZWFzZWRJbWFnZUJhY2tpbmdzSWZO
ZWVkZWQoKTsKLSAgICB2b2lkIGVuc3VyZVJvb3RMYXllcigpOwotICAgIHZvaWQgY29tbWl0UGVu
ZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKLQotICAgIHZvaWQgcHJlcGFyZUNvbnRlbnRC
YWNraW5nU3RvcmUoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgY3JlYXRlQmFj
a2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZvaWQgcmVt
b3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwotICAgIHZv
aWQgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciopOwotCi0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fY29udGVudHNTaXplOwotICAgIFdlYkNv
cmU6OkZsb2F0UmVjdCBtX3Zpc2libGVDb250ZW50c1JlY3Q7Ci0KLSAgICAvLyBSZW5kZXIgcXVl
dWUgY2FuIGJlIGFjY2Vzc2VkIG9ueSBmcm9tIG1haW4gdGhyZWFkIG9yIHVwZGF0ZVBhaW50Tm9k
ZSBjYWxsIHN0YWNrIQotICAgIFZlY3RvcjxGdW5jdGlvbjx2b2lkKCk+ID4gbV9yZW5kZXJRdWV1
ZTsKLSAgICBNdXRleCBtX3JlbmRlclF1ZXVlTXV0ZXg7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6
VGV4dHVyZU1hcHBlcj4gbV90ZXh0dXJlTWFwcGVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4g
PiBJbWFnZUJhY2tpbmdNYXA7Ci0gICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsK
LSAgICBWZWN0b3I8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fcmVsZWFzZWRJ
bWFnZUJhY2tpbmdzOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqLCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gQmFja2luZ1N0b3JlTWFwOwot
ICAgIEJhY2tpbmdTdG9yZU1hcCBtX2JhY2tpbmdTdG9yZXM7Ci0KLSAgICBIYXNoU2V0PFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnM7Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICB0eXBlZGVmIEhhc2hNYXA8
Q29vcmRpbmF0ZWRMYXllcklELCBSZWZQdHI8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclN1cmZhY2VC
YWNraW5nU3RvcmU+ID4gU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDsKLSAgICBTdXJmYWNlQmFja2lu
Z1N0b3JlTWFwIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXM7Ci0jZW5kaWYKLQotICAgIHR5cGVkZWYg
SGFzaE1hcDx1aW50MzJfdCAvKiBhdGxhc0lEICovLCBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiA+IFN1cmZhY2VNYXA7Ci0gICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VzOwotCi0gICAgLy8gQmVs
b3cgdHdvIG1lbWJlcnMgYXJlIGFjY2Vzc2VkIGJ5IG9ubHkgdGhlIG1haW4gdGhyZWFkLiBUaGUg
cGFpbnRpbmcgdGhyZWFkIG11c3QgbG9jayB0aGUgbWFpbiB0aHJlYWQgdG8gYWNjZXNzIGJvdGgg
bWVtYmVycy4KLSAgICBMYXllclRyZWVSZW5kZXJlckNsaWVudCogbV9jbGllbnQ7Ci0gICAgYm9v
bCBtX2lzQWN0aXZlOwotCi0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9v
dExheWVyOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgT3duUHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+ID4gTGF5ZXJNYXA7Ci0gICAgTGF5ZXJNYXAgbV9sYXll
cnM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcio+IExheWVyUmF3UHRyTWFwOwotICAgIExheWVyUmF3UHRyTWFwIG1fZml4ZWRM
YXllcnM7Ci0gICAgQ29vcmRpbmF0ZWRMYXllcklEIG1fcm9vdExheWVySUQ7Ci0gICAgV2ViQ29y
ZTo6RmxvYXRQb2ludCBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsKLSAgICBXZWJD
b3JlOjpGbG9hdFBvaW50IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlvbjsK
LSAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJ
T05fRlJBTUUpCi0gICAgYm9vbCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkOwotI2VuZGlmCi0g
ICAgV2ViQ29yZTo6Q29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0gICAgYm9vbCBtX3NldERyYXdz
QmFja2dyb3VuZDsKLQotI2lmIEVOQUJMRShDU1NfU0hBREVSUykKLSAgICB0eXBlZGVmIEhhc2hN
YXA8aW50LCBSZWZQdHI8V2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gPiBDdXN0b21GaWx0
ZXJQcm9ncmFtTWFwOwotICAgIEN1c3RvbUZpbHRlclByb2dyYW1NYXAgbV9jdXN0b21GaWx0ZXJQ
cm9ncmFtczsKLSNlbmRpZgotfTsKLQotfTsKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLQotI2VuZGlmIC8vIExheWVyVHJlZVJlbmRlcmVyX2gKLQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZUNsaWVudEJhc2UuY3BwCmluZGV4IDJlZmRiZDBl
MTM5ZWIwMDg4NWY5MWFlZjliMjhjOTAzYmZkYzFjM2QuLjUxMTU0YmM4MzdjOWZhYzM0OTViYjQz
NmQ2NGE5YTU5ZTNhMGNmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvUGFnZUNsaWVudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
UGFnZUNsaWVudEJhc2UuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiRHJhd2luZ0Fy
ZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJFd2tWaWV3LmgiCiAjaW5jbHVkZSAiSW5wdXRNZXRo
b2RDb250ZXh0RWZsLmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRl
ICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNw
cAppbmRleCBmMTFkMDhkZDA5OWM4M2IwZWM4YjdjNWFlZDA5ZWQ2NGFkY2NlMTZjLi5kNDBkYTEw
MmRkYWJmNzgxN2FkM2IwOTkyNTczZmQyMGI4ZDczMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNs
aWVudEVmbC5jcHAKQEAgLTMwLDkgKzMwLDkgQEAKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmgiCiAjaW5jbHVkZSAiRXdrVmlldy5oIgotI2luY2x1ZGUgIkxheWVy
VHJlZVJlbmRlcmVyLmgiCiAjaW5jbHVkZSAiUGFnZVZpZXdwb3J0Q29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTU2
LDcgKzU2LDcgQEAgRHJhd2luZ0FyZWFQcm94eSogUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVu
dEVmbDo6ZHJhd2luZ0FyZWEoKSBjb25zdAogCiB2b2lkIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRFZmw6OnNldFJlbmRlcmVyQWN0aXZlKGJvb2wgYWN0aXZlKQogewotICAgIGRyYXdpbmdB
cmVhKCktPmNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPmxheWVyVHJlZVJlbmRlcmVy
KCktPnNldEFjdGl2ZShhY3RpdmUpOworICAgIGRyYXdpbmdBcmVhKCktPmNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5KCktPmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpLT5zZXRBY3RpdmUo
YWN0aXZlKTsKIH0KIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsOjp1cGRh
dGVWaWV3cG9ydFNpemUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0
L1F0V2ViUGFnZVNHTm9kZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQ
YWdlU0dOb2RlLmNwcAppbmRleCBmNTM2YzQyMTc2NWYyYjY2NjZjNjMwZDMxYmEzMzQyOGE5NTY5
NzI5Li4wMDJkMDA1MDdhNGRhNjJiZjRjOGQ0OWU1MzNlMzEwNGM3YTEyNjcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmNwcApAQCAtMjEsMTEg
KzIxLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUXRXZWJQYWdlU0dOb2Rl
LmgiCiAKLSNpbmNsdWRlICJMYXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgPFF0R3VpL1FQ
b2x5Z29uRj4KICNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0l0ZW0+CiAjaW5jbHVkZSA8UXRRdWlj
ay9RUXVpY2tXaW5kb3c+CiAjaW5jbHVkZSA8UXRRdWljay9RU0dTaW1wbGVSZWN0Tm9kZT4KKyNp
bmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDxwcml2YXRlL3FzZ3JlbmRl
cm5vZGVfcC5oPgogCkBAIC0zNSwxMCArMzUsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIENvbnRlbnRzU0dOb2RlIDogcHVibGljIFFTR1JlbmRlck5vZGUgewogcHVibGljOgotICAg
IENvbnRlbnRzU0dOb2RlKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVyKQot
ICAgICAgICA6IG1fcmVuZGVyZXIocmVuZGVyZXIpCisgICAgQ29udGVudHNTR05vZGUoUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHNjZW5lKQorICAgICAgICA6IG1fc2NlbmUo
c2NlbmUpCiAgICAgewotICAgICAgICBsYXllclRyZWVSZW5kZXJlcigpLT5zZXRBY3RpdmUodHJ1
ZSk7CisgICAgICAgIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpLT5zZXRBY3RpdmUodHJ1ZSk7
CiAgICAgfQogCiAgICAgdmlydHVhbCBTdGF0ZUZsYWdzIGNoYW5nZWRTdGF0ZXMoKQpAQCAtNjIs
MTIgKzYyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBtaXJyb3JlZCA9IHByb2plY3Rpb24g
JiYgKCpwcm9qZWN0aW9uKSgwLCAwKSAqICgqcHJvamVjdGlvbikoMSwgMSkgLSAoKnByb2plY3Rp
b24pKDAsIDEpICogKCpwcm9qZWN0aW9uKSgxLCAwKSA+IDA7CiAKICAgICAgICAgLy8gRklYTUU6
IFN1cHBvcnQgbm9uLXJlY3Rhbmd1bGFyIGNsaXBwaW5ncy4KLSAgICAgICAgbGF5ZXJUcmVlUmVu
ZGVyZXIoKS0+cGFpbnRUb0N1cnJlbnRHTENvbnRleHQocmVuZGVyTWF0cml4LCBpbmhlcml0ZWRP
cGFjaXR5KCksIGNsaXBSZWN0KCksIG1pcnJvcmVkID8gVGV4dHVyZU1hcHBlcjo6UGFpbnRpbmdN
aXJyb3JlZCA6IDApOworICAgICAgICBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKS0+cGFpbnRU
b0N1cnJlbnRHTENvbnRleHQocmVuZGVyTWF0cml4LCBpbmhlcml0ZWRPcGFjaXR5KCksIGNsaXBS
ZWN0KCksIG1pcnJvcmVkID8gVGV4dHVyZU1hcHBlcjo6UGFpbnRpbmdNaXJyb3JlZCA6IDApOwog
ICAgIH0KIAogICAgIH5Db250ZW50c1NHTm9kZSgpCiAgICAgewotICAgICAgICBsYXllclRyZWVS
ZW5kZXJlcigpLT5wdXJnZUdMUmVzb3VyY2VzKCk7CisgICAgICAgIGNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZSgpLT5wdXJnZUdMUmVzb3VyY2VzKCk7CiAgICAgfQogCiAgICAgY29uc3QgUXRXZWJQ
YWdlU0dOb2RlKiBwYWdlTm9kZSgpIGNvbnN0CkBAIC03Nyw3ICs3Nyw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHBhcmVudDsKICAgICB9CiAKLSAgICBMYXllclRyZWVSZW5kZXJlciogbGF5
ZXJUcmVlUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyLmdldCgpOyB9CisgICAg
V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUoKSBjb25zdCB7IHJldHVybiBtX3NjZW5lLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgUVJl
Y3RGIGNsaXBSZWN0KCkgY29uc3QKQEAgLTEyNiw3ICsxMjYsNyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gcmVzdWx0UmVjdDsKICAgICB9CiAKLSAgICBSZWZQdHI8TGF5ZXJUcmVlUmVuZGVy
ZXI+IG1fcmVuZGVyZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZT4gbV9zY2VuZTsKIH07CiAKIFF0V2ViUGFnZVNHTm9kZTo6UXRXZWJQYWdlU0dOb2RlKCkK
QEAgLTE1MCwxMyArMTUwLDEzIEBAIHZvaWQgUXRXZWJQYWdlU0dOb2RlOjpzZXRTY2FsZShmbG9h
dCBzY2FsZSkKICAgICBzZXRNYXRyaXgobWF0cml4KTsKIH0KIAotdm9pZCBRdFdlYlBhZ2VTR05v
ZGU6OnNldFJlbmRlcmVyKFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+IHJlbmRlcmVyKQor
dm9pZCBRdFdlYlBhZ2VTR05vZGU6OnNldENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShQYXNzUmVm
UHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZT4gc2NlbmUpCiB7Ci0gICAgaWYg
KG1fY29udGVudHNOb2RlICYmIG1fY29udGVudHNOb2RlLT5sYXllclRyZWVSZW5kZXJlcigpID09
IHJlbmRlcmVyKQorICAgIGlmIChtX2NvbnRlbnRzTm9kZSAmJiBtX2NvbnRlbnRzTm9kZS0+Y29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkgPT0gc2NlbmUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGRlbGV0ZSBtX2NvbnRlbnRzTm9kZTsKLSAgICBtX2NvbnRlbnRzTm9kZSA9IG5ldyBDb250ZW50
c1NHTm9kZShyZW5kZXJlcik7CisgICAgbV9jb250ZW50c05vZGUgPSBuZXcgQ29udGVudHNTR05v
ZGUoc2NlbmUpOwogICAgIC8vIFRoaXMgc2V0cyB0aGUgcGFyZW50IG5vZGUgb2YgdGhlIGNvbnRl
bnQgdG8gUXRXZWJQYWdlU0dOb2RlLgogICAgIGFwcGVuZENoaWxkTm9kZShtX2NvbnRlbnRzTm9k
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdl
U0dOb2RlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgK
aW5kZXggMWJjYzI4ZTQzOTkwMmY1OWZkYzg0OWQ0MDc2ODZlMTUwMzgxODhiMi4uNzdhZDgxYjZm
YzI1ZDZjODY3MWFkMTk2ZGQxMWY0OGE4MDljZmNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaApAQCAtMjksMTcgKzI5LDIwIEBAIGNsYXNzIFFR
dWlja0l0ZW07CiBjbGFzcyBRU0dTaW1wbGVSZWN0Tm9kZTsKIFFUX0VORF9OQU1FU1BBQ0UKIAor
bmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOworfQor
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29udGVudHNTR05vZGU7Ci1jbGFzcyBMYXll
clRyZWVSZW5kZXJlcjsKIAogY2xhc3MgUXRXZWJQYWdlU0dOb2RlIDogcHVibGljIFFTR1RyYW5z
Zm9ybU5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgUXRXZWJQYWdlU0dOb2RlKCk7CiAgICAg
ICAgIHZvaWQgc2V0QmFja2dyb3VuZChjb25zdCBRUmVjdEYmLCBjb25zdCBRQ29sb3ImKTsKICAg
ICAgICAgdm9pZCBzZXRTY2FsZShmbG9hdCk7Ci0gICAgICAgIHZvaWQgc2V0UmVuZGVyZXIoUGFz
c1JlZlB0cjxMYXllclRyZWVSZW5kZXJlcj4pOworICAgICAgICB2b2lkIHNldENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZShQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZT4pOwogICAgICAgICBxcmVhbCBkZXZpY2VQaXhlbFJhdGlvKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXZpY2VQaXhlbFJhdGlvOyB9CiAgICAgICAgIHZvaWQgc2V0RGV2aWNlUGl4ZWxSYXRpbyhxcmVh
bCBkZXZpY2VQaXhlbFJhdGlvKSB7IG1fZGV2aWNlUGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0
aW87IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JlZmNkYWM4NTIwMTJjZmU5M2M4N2E1YTkzMjFh
ODFkNzUzNTg0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9B
cmVhQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMzNSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIkFyZWFBbGxvY2F0
b3IuaCIKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUFyZWFBbGxvY2F0b3I6OkFyZWFBbGxvY2F0
b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fc2l6ZShzaXplKQotICAg
ICwgbV9taW5BbGxvYygxLCAxKQotICAgICwgbV9tYXJnaW4oMCwgMCkKLXsKLX0KLQotQXJlYUFs
bG9jYXRvcjo6fkFyZWFBbGxvY2F0b3IoKQotewotfQotCi12b2lkIEFyZWFBbGxvY2F0b3I6OmV4
cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSA9IG1fc2l6
ZS5leHBhbmRlZFRvKHNpemUpOwotfQotCi12b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgbV9zaXplICs9IHNpemU7Ci19Ci0K
LXZvaWQgQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikKLXsK
LX0KLQotaW50IEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLQotV2ViQ29yZTo6SW50U2l6ZSBBcmVhQWxsb2NhdG9yOjpyb3VuZEFsbG9jYXRpb24o
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAgICBpbnQgd2lkdGggPSBz
aXplLndpZHRoKCkgKyBtX21hcmdpbi53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBzaXplLmhl
aWdodCgpICsgbV9tYXJnaW4uaGVpZ2h0KCk7Ci0gICAgaW50IGV4dHJhID0gd2lkdGggJSBtX21p
bkFsbG9jLndpZHRoKCk7Ci0gICAgaWYgKGV4dHJhKQotICAgICAgICB3aWR0aCArPSBtX21pbkFs
bG9jLndpZHRoKCkgLSBleHRyYTsKLSAgICBleHRyYSA9IGhlaWdodCAlIG1fbWluQWxsb2MuaGVp
Z2h0KCk7Ci0gICAgaWYgKGV4dHJhKQotICAgICAgICBoZWlnaHQgKz0gbV9taW5BbGxvYy5oZWln
aHQoKSAtIGV4dHJhOwotCi0gICAgcmV0dXJuIFdlYkNvcmU6OkludFNpemUod2lkdGgsIGhlaWdo
dCk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9jYXRvcihjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotICAgIDogQXJlYUFsbG9jYXRvcihXZWJDb3JlOjpu
ZXh0UG93ZXJPZlR3byhzaXplKSkKLXsKLSAgICBtX3Jvb3QgPSBuZXcgTm9kZSgpOwotICAgIG1f
cm9vdC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSk7Ci0gICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKLSAgICBtX3Jv
b3QtPnBhcmVudCA9IDA7Ci0gICAgbV9yb290LT5sZWZ0ID0gMDsKLSAgICBtX3Jvb3QtPnJpZ2h0
ID0gMDsKLSAgICBtX25vZGVDb3VudCA9IDE7Ci0gICAgc2V0TWluaW11bUFsbG9jYXRpb24oV2Vi
Q29yZTo6SW50U2l6ZSg4LCA4KSk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjp+R2VuZXJh
bEFyZWFBbGxvY2F0b3IoKQotewotICAgIGZyZWVOb2RlKG1fcm9vdCk7Ci19Ci0KLXZvaWQgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmZyZWVOb2RlKE5vZGUqIG5vZGUpCi17Ci0gICAgaWYgKG5vZGUp
IHsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUt
PnJpZ2h0KTsKLSAgICB9Ci0gICAgZGVsZXRlIG5vZGU7Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFB
bGxvY2F0b3I6OmV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIEFy
ZWFBbGxvY2F0b3I6OmV4cGFuZChXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhzaXplKSk7Ci0KLSAg
ICBpZiAobV9yb290LT5yZWN0LnNpemUoKSA9PSBtX3NpemUpCi0gICAgICAgIHJldHVybjsgLy8g
Tm8gY2hhbmdlLgotCi0gICAgaWYgKCFtX3Jvb3QtPmxlZnQgJiYgbV9yb290LT5sYXJnZXN0RnJl
ZS53aWR0aCgpID4gMCkgewotICAgICAgICAvLyBObyBhbGxvY2F0aW9ucyBoYXZlIG9jY3VycmVk
LCBzbyBqdXN0IGFkanVzdCB0aGUgcm9vdCBzaXplLgotICAgICAgICBtX3Jvb3QtPnJlY3QgPSBX
ZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwot
ICAgICAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXplOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gQWRkIGV4dHJhIG5vZGVzIGFib3ZlIHRoZSBjdXJyZW50IHJvb3QgdG8g
ZXhwYW5kIHRoZSB0cmVlLgotICAgIE5vZGUqIG9sZFJvb3QgPSBtX3Jvb3Q7Ci0gICAgU3BsaXQg
c3BsaXQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpID49IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICBlbHNlCi0gICAgICAgIHNwbGl0ID0gU3BsaXRPblk7
Ci0KLSAgICB3aGlsZSAobV9yb290LT5yZWN0LnNpemUoKSAhPSBtX3NpemUpIHsKLSAgICAgICAg
aWYgKG1fcm9vdC0+cmVjdC53aWR0aCgpID09IG1fc2l6ZS53aWR0aCgpKQotICAgICAgICAgICAg
c3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgZWxzZSBpZiAobV9yb290LT5yZWN0LmhlaWdodCgp
ID09IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAg
ICAgIE5vZGUqIHBhcmVudCA9IG5ldyBOb2RlKCk7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbmV3
IE5vZGUoKTsKLSAgICAgICAgbV9ub2RlQ291bnQgKz0gMjsKLSAgICAgICAgbV9yb290LT5wYXJl
bnQgPSBwYXJlbnQ7Ci0gICAgICAgIHBhcmVudC0+cGFyZW50ID0gMDsKLSAgICAgICAgcGFyZW50
LT5sZWZ0ID0gbV9yb290OwotICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gcmlnaHQ7Ci0gICAgICAg
IHBhcmVudC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Quc2l6ZSgpOwotICAgICAgICByaWdo
dC0+cGFyZW50ID0gcGFyZW50OwotICAgICAgICByaWdodC0+bGVmdCA9IDA7Ci0gICAgICAgIHJp
Z2h0LT5yaWdodCA9IDA7Ci0gICAgICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVj
dC5zaXplKCk7Ci0gICAgICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgewotICAgICAgICAgICAg
cGFyZW50LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3Qt
PnJlY3QueSgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpICogMiwgbV9y
b290LT5yZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6
SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpICsgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+
cmVjdC55KCksCi0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+
cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJlbnQtPnJl
Y3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCks
Ci0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWln
aHQoKSAqIDIpOwotICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KG1f
cm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCkgKyBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwK
LSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdo
dCgpKTsKLSAgICAgICAgfQotICAgICAgICBzcGxpdCA9IChzcGxpdCA9PSBTcGxpdE9uWCA/IFNw
bGl0T25ZIDogU3BsaXRPblgpOwotICAgICAgICBtX3Jvb3QgPSBwYXJlbnQ7Ci0gICAgfQotICAg
IHVwZGF0ZUxhcmdlc3RGcmVlKG9sZFJvb3QpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgZml0
c1dpdGhpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplMSwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgc2l6ZTIpCi17Ci0gICAgcmV0dXJuIHNpemUxLndpZHRoKCkgPD0gc2l6ZTIud2lkdGgo
KSAmJiBzaXplMS5oZWlnaHQoKSA8PSBzaXplMi5oZWlnaHQoKTsKLX0KLQotV2ViQ29yZTo6SW50
UmVjdCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2l6ZSkKLXsKLSAgICBXZWJDb3JlOjpJbnRTaXplIHJvdW5kZWQgPSByb3VuZEFsbG9jYXRp
b24oc2l6ZSk7Ci0gICAgcm91bmRlZCA9IFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKHJvdW5kZWQp
OwotICAgIGlmIChyb3VuZGVkLndpZHRoKCkgPD0gMCB8fCByb3VuZGVkLndpZHRoKCkgPiBtX3Np
emUud2lkdGgoKQotICAgICAgICB8fCByb3VuZGVkLmhlaWdodCgpIDw9IDAgfHwgcm91bmRlZC5o
ZWlnaHQoKSA+IG1fc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkludFJl
Y3QoKTsKLQotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShy
b3VuZGVkLCBtX3Jvb3QpOwotICAgIGlmIChwb2ludC54KCkgPj0gMCkKLSAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OkludFJlY3QocG9pbnQsIHNpemUpOwotICAgIHJldHVybiBXZWJDb3JlOjpJbnRS
ZWN0KCk7Ci19Ci0KLVdlYkNvcmU6OkludFBvaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxv
Y2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIE5vZGUqIG5vZGUpCi17
Ci0gICAgLy8gRmluZCB0aGUgYmVzdCBub2RlIHRvIGluc2VydCBpbnRvLCB3aGljaCBzaG91bGQg
YmUKLSAgICAvLyBhIG5vZGUgd2l0aCB0aGUgbGVhc3QgYW1vdW50IG9mIHVudXNlZCBzcGFjZSB0
aGF0IGlzCi0gICAgLy8gYmlnIGVub3VnaCB0byBjb250YWluIHRoZSByZXF1ZXN0ZWQgc2l6ZS4K
LSAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAvLyBHbyBkb3duIGEgbGV2ZWwgYW5kIGRldGVy
bWluZSBpZiB0aGUgbGVmdCBvciByaWdodAotICAgICAgICAvLyBzdWItdHJlZSBjb250YWlucyB0
aGUgYmVzdCBjaGFuY2Ugb2YgYWxsb2NhdGlvbi4KLSAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUt
PmxlZnQ7Ci0gICAgICAgIE5vZGUqIHJpZ2h0ID0gbm9kZS0+cmlnaHQ7Ci0gICAgICAgIGlmIChs
ZWZ0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgbGVmdC0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAg
ICBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCkgPCByaWdodC0+bGFy
Z2VzdEZyZWUud2lkdGgoKQotICAgICAgICAgICAgICAgICAgICB8fCBsZWZ0LT5sYXJnZXN0RnJl
ZS5oZWlnaHQoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBUaGUgbGFyZ2VzdEZyZWUgdmFsdWVzIG1heSBiZSBhIGxpdHRsZSBvdmVyc2l6
ZWQsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIHRyeSB0aGUgbGVmdCBzdWItdHJlZSBhbmQg
dGhlbiB0aGUgcmlnaHQgc3ViLXRyZWUuCi0gICAgICAgICAgICAgICAgICAgIFdlYkNvcmU6Oklu
dFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShzaXplLCBsZWZ0KTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHBvaW50LngoKSA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHBvaW50OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVGcm9tTm9kZShz
aXplLCByaWdodCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5vZGUgPSBy
aWdodDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG5vZGUgPSBsZWZ0Owot
ICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdl
c3RGcmVlKSkKLSAgICAgICAgICAgIG5vZGUgPSByaWdodDsKLSAgICAgICAgZWxzZSBpZiAobGVm
dCB8fCByaWdodCkgewotICAgICAgICAgICAgLy8gTmVpdGhlciBzdWItbm9kZSBoYXMgZW5vdWdo
IHNwYWNlIHRvIGFsbG9jYXRlIGZyb20uCi0gICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6SW50
UG9pbnQoLTEsIC0xKTsKLSAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKHNpemUsIG5vZGUt
Pmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBzcGxpdCB0aGlz
IG5vZGUgaW50byBzbWFsbGVyIHBpZWNlcz8KLSAgICAgICAgICAgIFNwbGl0IHNwbGl0OwotICAg
ICAgICAgICAgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndpZHRoKCkgKiAy
LCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAg
ICAgIC8vIFNwbGl0IGluIGVpdGhlciBkaXJlY3Rpb246IGNob29zZSB0aGUgaW52ZXJzZSBvZgot
ICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgbm9kZSdzIHNwbGl0IGRpcmVjdGlvbiB0byB0
cnkgdG8gYmFsYW5jZQotICAgICAgICAgICAgICAgIC8vIG91dCB0aGUgd2FzdGVkIHNwYWNlIGFz
IGZ1cnRoZXIgc3ViZGl2aXNpb25zIGhhcHBlbi4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+
cGFyZW50Ci0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC54
KCkgPT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC54KCkpCi0gICAgICAgICAgICAgICAgICAg
IHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cGFyZW50
KQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPnJlY3Qud2lkdGgoKSA+PSBub2RlLT5yZWN0LmhlaWdodCgpKQotICAg
ICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUu
aGVpZ2h0KCkpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBTcGxp
dCBhbG9uZyB0aGUgWCBkaXJlY3Rpb24uCi0gICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9u
WDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihXZWJDb3JlOjpJbnRTaXplKHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBTcGxpdCBhbG9uZyB0aGUgWSBkaXJlY3Rpb24uCi0gICAgICAgICAg
ICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gQ2Fubm90IHNwbGl0IGZ1cnRoZXIgLSBhbGxvY2F0ZSB0aGlzIG5vZGUuCi0gICAg
ICAgICAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBXZWJDb3JlOjpJbnRTaXplKDAsIDApOwot
ICAgICAgICAgICAgICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOwotICAgICAgICAgICAgICAg
IHJldHVybiBub2RlLT5yZWN0LmxvY2F0aW9uKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8vIFNwbGl0IHRoZSBub2RlLCB0aGVuIGdvIGFyb3VuZCBhZ2FpbiB1c2luZyB0aGUgbGVm
dCBzdWItdHJlZS4KLSAgICAgICAgICAgIG5vZGUgPSBzcGxpdE5vZGUobm9kZSwgc3BsaXQpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gQ2Fubm90IHBvc3NpYmx5IGZpdCBpbnRv
IHRoaXMgbm9kZS4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBXZWJDb3JlOjpJbnRQb2ludCgtMSwgLTEpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRv
cjo6Tm9kZSogR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnNwbGl0Tm9kZQotICAgIChOb2RlKiBub2Rl
LCBTcGxpdCBzcGxpdCkKLXsKLSAgICBOb2RlKiBsZWZ0ID0gbmV3IE5vZGUoKTsKLSAgICBOb2Rl
KiByaWdodCA9IG5ldyBOb2RlKCk7Ci0gICAgbV9ub2RlQ291bnQgKz0gMjsKLSAgICBsZWZ0LT5w
YXJlbnQgPSBub2RlOwotICAgIGxlZnQtPmxlZnQgPSAwOwotICAgIGxlZnQtPnJpZ2h0ID0gMDsK
LSAgICByaWdodC0+cGFyZW50ID0gbm9kZTsKLSAgICByaWdodC0+bGVmdCA9IDA7Ci0gICAgcmln
aHQtPnJpZ2h0ID0gMDsKLSAgICBub2RlLT5sZWZ0ID0gbGVmdDsKLSAgICBub2RlLT5yaWdodCA9
IHJpZ2h0OwotCi0gICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAgIGxlZnQtPnJl
Y3QgPSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKLSAg
ICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOwot
ICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobGVmdC0+cmVjdC5tYXhYKCks
IG5vZGUtPnJlY3QueSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9k
ZS0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGVmdC0+cmVjdCA9IFdl
YkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIG5vZGUtPnJlY3QueSgpLAotICAgICAgICAg
ICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgICAg
IHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbGVmdC0+cmVj
dC5tYXhZKCksCi0gICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUtPnJlY3QuaGVp
Z2h0KCkgLyAyKTsKLSAgICB9Ci0KLSAgICBsZWZ0LT5sYXJnZXN0RnJlZSA9IGxlZnQtPnJlY3Qu
c2l6ZSgpOwotICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5yZWN0LnNpemUoKTsKLSAg
ICBub2RlLT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5sYXJnZXN0RnJlZTsKLSAgICByZXR1cm4gbGVm
dDsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6dXBkYXRlTGFyZ2VzdEZyZWUoTm9k
ZSogbm9kZSkKLXsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT5wYXJlbnQpKSB7Ci0gICAgICAg
IG5vZGUtPmxhcmdlc3RGcmVlID0gV2ViQ29yZTo6SW50U2l6ZSgKLSAgICAgICAgICAgIHN0ZDo6
bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCksIG5vZGUtPnJpZ2h0LT5sYXJnZXN0
RnJlZS53aWR0aCgpKSwKLSAgICAgICAgICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RG
cmVlLmhlaWdodCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpCi0gICAgICAg
ICAgICApOwotICAgIH0KLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6cmVsZWFzZShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQotewotICAgIC8vIExvY2F0ZSB0aGUgbm9kZSB0
aGF0IGNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLgotICAgIE5vZGUqIG5vZGUgPSBtX3Jv
b3Q7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAg
d2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+cmVj
dC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+bGVmdDsKLSAgICAg
ICAgZWxzZSBpZiAobm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29udGFpbnMocG9p
bnQpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSB0
aGUgdHJlZS4KLSAgICB9Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBNYXJrIHRoZSBub2RlIGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRocm91Z2ggdGhl
IHRyZWUKLSAgICAvLyByZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50aWwgd2UgcmVh
Y2ggYSBzaWJsaW5nCi0gICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCi0gICAgbm9kZS0+
bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKLSAgICB3aGlsZSAobm9kZS0+cGFyZW50
KSB7Ci0gICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgewotICAgICAgICAg
ICAgaWYgKG5vZGUtPnBhcmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+
cmlnaHQtPnJlY3Quc2l6ZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZyZWUgIT0g
bm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OwotICAgICAgICBmcmVlTm9k
ZShub2RlLT5sZWZ0KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAgICAgICBt
X25vZGVDb3VudCAtPSAyOwotICAgICAgICBub2RlLT5sZWZ0ID0gMDsKLSAgICAgICAgbm9kZS0+
cmlnaHQgPSAwOwotICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJlY3Quc2l6ZSgp
OwotICAgIH0KLQotICAgIC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2VzdG9ycyBoYXZlIHRo
ZSBjb3JyZWN0ICJsYXJnZXN0IGZyZWUgc2l6ZSIuCi0gICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9k
ZSk7Ci19Ci0KLWludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAotewot
ICAgIHJldHVybiBtX25vZGVDb3VudCAqIHNpemVvZihOb2RlKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UKLQotI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFB
bGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTY1NmJiOGFlMTAwNjg4YTM0NjYyNmU0ZDMzMzNjNjBiOWU4OTM4Ny4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoK
LSAqLwotCi0jaWZuZGVmIEFyZWFBbGxvY2F0b3JfaAotI2RlZmluZSBBcmVhQWxsb2NhdG9yX2gK
LQotI2luY2x1ZGUgPEludFBvaW50Lmg+Ci0jaW5jbHVkZSA8SW50UmVjdC5oPgotI2luY2x1ZGUg
PEludFNpemUuaD4KLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotaW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQotewotICAg
IC8vIFRoaXMgaXMgYSBmYXN0IHRyaWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50
ZWdlci4KLSAgICAtLW51bWJlcjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7Ci0gICAgbnVt
YmVyIHw9IG51bWJlciA+PiAyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsKLSAgICBudW1i
ZXIgfD0gbnVtYmVyID4+IDg7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsKLSAgICBudW1i
ZXIrKzsKLSAgICByZXR1cm4gbnVtYmVyOwotfQotCi1pbmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJP
ZlR3byhjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIHJldHVybiBJbnRTaXplKG5leHRQb3dl
ck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkpKTsKLX0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIEFy
ZWFBbGxvY2F0b3IgewotcHVibGljOgotICAgIGV4cGxpY2l0IEFyZWFBbGxvY2F0b3IoY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZpcnR1YWwgfkFyZWFBbGxvY2F0b3IoKTsKLQotICAg
IFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAg
V2ViQ29yZTo6SW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWlu
QWxsb2M7IH0KLSAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9uKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpIHsgbV9taW5BbGxvYyA9IHNpemU7IH0KLQotICAgIFdlYkNvcmU6OkludFNp
emUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KLSAgICB2b2lkIHNldE1hcmdp
bihjb25zdCBXZWJDb3JlOjpJbnRTaXplICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAg
IHZvaWQgZXhwYW5kQnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi0gICAgdmlydHVhbCBX
ZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotCi0gICAg
dmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIFdlYkNvcmU6
OkludFNpemUgbV9zaXplOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9taW5BbGxvYzsKLSAgICBX
ZWJDb3JlOjpJbnRTaXplIG1fbWFyZ2luOwotCi0gICAgV2ViQ29yZTo6SW50U2l6ZSByb3VuZEFs
bG9jYXRpb24oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIGNvbnN0OwotfTsKLQotY2xhc3MgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3IgOiBwdWJsaWMgQXJlYUFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwot
ICAgIHZpcnR1YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7Ci0KLSAgICB2b2lkIGV4cGFuZChj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBhbGxvY2F0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdm9pZCByZWxlYXNlKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKTsKLSAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBl
bnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07Ci0KLSAgICBzdHJ1Y3QgTm9kZSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsKLSAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBs
YXJnZXN0RnJlZTsKLSAgICAgICAgTm9kZSogcGFyZW50OwotICAgICAgICBOb2RlKiBsZWZ0Owot
ICAgICAgICBOb2RlKiByaWdodDsKLSAgICB9OwotCi0gICAgTm9kZSogbV9yb290OwotICAgIGlu
dCBtX25vZGVDb3VudDsKLQotICAgIHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUqKTsKLSAgICBX
ZWJDb3JlOjpJbnRQb2ludCBhbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
LCBOb2RlKik7Ci0gICAgTm9kZSogc3BsaXROb2RlKE5vZGUqLCBTcGxpdCk7Ci0gICAgc3RhdGlj
IHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSopOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBB
cmVhQWxsb2NhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
M2Q3OGIxOGYxYjA4Nzk4ZTY1YTU5MThhNGYyMDQyMDNhZjEwMDU0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDYxICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gQ29weXJpZ2h0IChD
KSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0gQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5j
bHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgiCi0KLSNpbmNsdWRlICJCYWNraW5nU3Rv
cmUuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eU1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0jaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCi0jaW5jbHVkZSAiUGFn
ZS5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAi
V2ViUGFnZS5oIgotI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaWZuZGVmIE5ERUJVRwotI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2Uu
aD4KLSNlbmRpZgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgQ29vcmRpbmF0ZWRM
YXllcklEIHRvQ29vcmRpbmF0ZWRMYXllcklEKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAg
IHJldHVybiBsYXllciA/IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGxheWVyKS0+aWQoKSA6
IDA7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VMYXllclN0
YXRlKCkKLXsKLSAgICBtX3Nob3VsZFN5bmNMYXllclN0YXRlID0gdHJ1ZTsKLSAgICBpZiAoY2xp
ZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlQW5pbWF0aW9ucygpCi17
Ci0gICAgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQot
ICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUNoaWxkcmVuKCkKLXsKLSAgICBtX3No
b3VsZFN5bmNDaGlsZHJlbiA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGll
bnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0KLQotI2lmIEVOQUJMRShDU1NfRklM
VEVSUykKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VGaWx0ZXJzKCkK
LXsKLSAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gdHJ1ZTsKLSAgICBpZiAoY2xpZW50KCkpCi0g
ICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwotfQotI2VuZGlmCi0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKQot
ewotICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgp
KQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkK
LXsKLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHRvQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVj
dCgpOwotICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdG9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIocmVwbGljYUxheWVyKCkpLT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlR2VvbWV0cnkoKQot
ewotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBzZXRTaG91bGRVcGRhdGVWaXNpYmxl
UmVjdCgpOwotfQotCi1Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBjbGllbnQpCi0gICAgOiBHcmFwaGljc0xheWVy
KGNsaWVudCkKLSNpZm5kZWYgTkRFQlVHCi0gICAgLCBtX2lzUHVyZ2luZyhmYWxzZSkKLSNlbmRp
ZgotICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCh0cnVlKQotICAgICwgbV9zaG91bGRT
eW5jTGF5ZXJTdGF0ZSh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKLSAg
ICAsIG1fc2hvdWxkU3luY0ZpbHRlcnModHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0ltYWdlQmFj
a2luZyh0cnVlKQotICAgICwgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyh0cnVlKQotICAgICwgbV9m
aXhlZFRvVmlld3BvcnQoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0
bWVudChmYWxzZSkKLSAgICAsIG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudChmYWxzZSkK
LSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICAsIG1faXNWYWxpZENhbnZhcyhmYWxzZSkK
LSAgICAsIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbihOb25lKQotI2VuZGlmCi0gICAgLCBtX2Nv
b3JkaW5hdG9yKDApCi0gICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQotICAgICwg
bV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCi0gICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcih0
aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFydGVkVGltZXJGaXJl
ZCkKLXsKLSAgICBzdGF0aWMgQ29vcmRpbmF0ZWRMYXllcklEIG5leHRMYXllcklEID0gMTsKLSAg
ICBtX2lkID0gbmV4dExheWVySUQrKzsKLX0KLQotQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp+
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCkKLXsKLSAgICBpZiAobV9jb29yZGluYXRvcikgewot
ICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICAgICAgbV9jb29yZGluYXRvci0+ZGV0
YWNoTGF5ZXIodGhpcyk7Ci0gICAgfQotICAgIEFTU0VSVCghbV9jb29yZGluYXRlZEltYWdlQmFj
a2luZyAmJiAhbV9tYWluQmFja2luZ1N0b3JlKTsKLSAgICB3aWxsQmVEZXN0cm95ZWQoKTsKLX0K
LQotYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3Rv
cjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQotewotICAgIGJvb2wgb2sgPSBHcmFwaGljc0xh
eWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBs
YXllcikKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZChsYXllcik7Ci0gICAgZGlkQ2hh
bmdlQ2hpbGRyZW4oKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENo
aWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXllciwgaW50IGluZGV4KQotewotICAgIEdyYXBo
aWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXllciwgaW5kZXgpOwotICAgIGRpZENoYW5nZUNo
aWxkcmVuKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZEFi
b3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQotewotICAg
IEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUobGF5ZXIsIHNpYmxpbmcpOwotICAgIGRpZENo
YW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRD
aGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQot
ewotICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQmVsb3cobGF5ZXIsIHNpYmxpbmcpOwotICAg
IGRpZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciogb2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5l
d0NoaWxkKQotewotICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xk
Q2hpbGQsIG5ld0NoaWxkKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZyb21QYXJlbnQoKQotewotICAgIGlmIChDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHBhcmVudExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIocGFyZW50KCkpKQotICAgICAgICBwYXJlbnRMYXllci0+ZGlkQ2hhbmdlQ2hpbGRyZW4o
KTsKLSAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQot
ewotICAgIGlmIChwb3NpdGlvbigpID09IHApCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzTGF5ZXI6OnNldFBvc2l0aW9uKHApOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9h
dFBvaW50M0QmIHApCi17Ci0gICAgaWYgKGFuY2hvclBvaW50KCkgPT0gcCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQocCk7Ci0gICAgZGlkQ2hh
bmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlmICh0aGlzLT5zaXplKCkgPT0gc2l6
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsK
LQotICAgIGlmIChtYXNrTGF5ZXIoKSkKLSAgICAgICAgbWFza0xheWVyKCktPnNldFNpemUoc2l6
ZSk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsK
LSAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhp
Y3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKLXsKLSAgICBpZiAoY2hpbGRyZW5UcmFuc2Zvcm0o
KSA9PSB0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJl
blRyYW5zZm9ybSh0KTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UHJlc2VydmVzM0QoYm9vbCBiKQotewotICAgIGlmIChw
cmVzZXJ2ZXMzRCgpID09IGIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6
OnNldFByZXNlcnZlczNEKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGJvb2wgYikKLXsKLSAg
ICBpZiAobWFza3NUb0JvdW5kcygpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGlj
c0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGIpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBi
KQotewotICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAg
R3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGIpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNW
aXNpYmxlKGJvb2wgYikKLXsKLSAgICBpZiAoY29udGVudHNBcmVWaXNpYmxlKCkgPT0gYikKLSAg
ICAgICAgcmV0dXJuOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVmlzaWJsZShiKTsK
LSAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zZXRDb250ZW50c1Zp
c2libGUoYik7Ci0KLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c09wYXF1ZShib29sIGIpCi17Ci0gICAgaWYg
KGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtX21haW5C
YWNraW5nU3RvcmUpCi0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBo
YSghYik7Ci0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYik7Ci0gICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikKLXsKLSAgICBpZiAoYmFja2ZhY2VWaXNpYmls
aXR5KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0QmFj
a2ZhY2VWaXNpYmlsaXR5KGIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKLXsK
LSAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9wYWNpdHkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHkob3BhY2l0eSk7Ci0gICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChy
KTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlzcGxheSgpCi17Ci0jaWYgVVNFKEdSQVBISUNT
X1NVUkZBQ0UpCi0gICAgaWYgKG1fY2FudmFzUGxhdGZvcm1MYXllcikKLSAgICAgICAgbV9wZW5k
aW5nQ2FudmFzT3BlcmF0aW9uIHw9IFN5bmNDYW52YXM7Ci0jZW5kaWYKLQotICAgIGlmIChjbGll
bnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Ci0KLSAg
ICBhZGRSZXBhaW50UmVjdChjb250ZW50c1JlY3QoKSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIpCi17Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgaWYgKG1fY2FudmFzUGxh
dGZvcm1MYXllcikgewotICAgICAgICBBU1NFUlQobV9jYW52YXNUb2tlbi5pc1ZhbGlkKCkpOwot
ICAgICAgICBpZiAoIXBsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgICAgIG1fcGVuZGluZ0NhbnZh
c09wZXJhdGlvbiB8PSBEZXN0cm95Q2FudmFzOwotICAgICAgICAgICAgbV9wZW5kaW5nQ2FudmFz
T3BlcmF0aW9uICY9IH5DcmVhdGVDYW52YXM7Ci0gICAgICAgIH0gIGVsc2UgaWYgKChtX2NhbnZh
c1NpemUgIT0gcGxhdGZvcm1MYXllci0+cGxhdGZvcm1MYXllclNpemUoKSkgfHwgKG1fY2FudmFz
VG9rZW4gIT0gcGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSkpIHsKLSAgICAg
ICAgICAgIC8vIG1fY2FudmFzVG9rZW4gY2FuIGJlIGRpZmZlcmVudCB0byBwbGF0Zm9ybUxheWVy
LT5ncmFwaGljc1N1cmZhY2VUb2tlbigpLCBldmVuIGlmIG1fY2FudmFzUGxhdGZvcm1MYXllciBl
cXVhbHMgcGxhdGZvcm1MYXllci4KLSAgICAgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlv
biB8PSBSZWNyZWF0ZUNhbnZhczsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChwbGF0Zm9ybUxheWVyKQotICAgICAgICAgICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIHw9
IENyZWF0ZUFuZFN5bmNDYW52YXM7Ci0gICAgfQotCi0gICAgbV9jYW52YXNQbGF0Zm9ybUxheWVy
ID0gcGxhdGZvcm1MYXllcjsKLSAgICAvLyBtX2NhbnZhc1Rva2VuIGlzIHVwZGF0ZWQgb25seSBo
ZXJlLiBJbiBkZXRhaWwsIHdoZW4gR3JhcGhpY3NDb250ZXh0M0QgaXMgY2hhbmdlZCBvciByZXNo
YXBlZCwgbV9jYW52YXNUb2tlbiBpcyBjaGFuZ2VkIGFuZCBzZXRDb250ZW50c1RvQ2FudmFzKCkg
aXMgYWx3YXlzIGNhbGxlZC4KLSAgICBtX2NhbnZhc1NpemUgPSBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCkgOiBJbnRTaXpl
KCk7Ci0gICAgbV9jYW52YXNUb2tlbiA9IG1fY2FudmFzUGxhdGZvcm1MYXllciA/IG1fY2FudmFz
UGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSA6IEdyYXBoaWNzU3VyZmFjZVRv
a2VuKCk7Ci0gICAgQVNTRVJUKCEoIW1fY2FudmFzVG9rZW4uaXNWYWxpZCgpICYmIG1fY2FudmFz
UGxhdGZvcm1MYXllcikpOwotCi0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+
bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBsYXRm
b3JtTGF5ZXIpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1ib29sIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBuZXdGaWx0ZXJzKQotewotICAgIGlmIChmaWx0ZXJzKCkgPT0gbmV3RmlsdGVycykKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgZGlkQ2hhbmdlRmlsdGVycygpOwotICAgIHJldHVybiBHcmFw
aGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRlcnMpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgaWYgKG1fbGF5ZXJJbmZvLnNvbGlkQ29sb3IgPT0gY29sb3IpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2xheWVySW5mby5zb2xpZENvbG9yID0gY29sb3I7Ci0gICAg
ZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wgc2hvdykKLXsKLSAgICBpZiAoaXNTaG93aW5nRGVi
dWdCb3JkZXIoKSA9PSBzaG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVy
OjpzZXRTaG93RGVidWdCb3JkZXIoc2hvdyk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVy
KGJvb2wgc2hvdykKLXsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSA9PSBzaG93
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93UmVwYWludENv
dW50ZXIoc2hvdyk7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKLXsK
LSAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJbWFnZVB0ciA9IGltYWdlID8gaW1hZ2UtPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAwOwotICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0
cikgewotICAgICAgICAvLyBUaGlzIGNvZGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBwb2lu
dGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1hZ2VQdHIgaXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBp
ZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KLSAgICAgICAgLy8gVGhpcyBhc3N1bXB0aW9uIGlzIHRy
dWUgaW4gUXQsIEdUSyBhbmQgRUZMLgotICAgICAgICBpZiAobmV3TmF0aXZlSW1hZ2VQdHIgPT0g
bV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbV9jb21wb3NpdGVkSW1hZ2UgPSBpbWFnZTsKLSAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZl
SW1hZ2VQdHIgPSBuZXdOYXRpdmVJbWFnZVB0cjsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2Nv
bXBvc2l0ZWRJbWFnZSA9IDA7Ci0gICAgICAgIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0g
MDsKLSAgICB9Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2Up
OwotICAgIGRpZENoYW5nZUltYWdlQmFja2luZygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIGlm
IChsYXllciA9PSBtYXNrTGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0TWFza0xheWVyKGxheWVyKTsKLQotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGxheWVyLT5zZXRTaXplKHNpemUoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRl
bnRzVmlzaWJsZShjb250ZW50c0FyZVZpc2libGUoKSk7Ci0gICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyKiBjb29yZGluYXRlZExheWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5
ZXIpOwotICAgIGNvb3JkaW5hdGVkTGF5ZXItPmRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICBk
aWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKEltYWdlKiBpbWFnZSkgY29uc3QKLXsKLSAg
ICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRtYXBJbWFnZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBlbnVtIHsga01heERpbWVuc3Rpb25Gb3JEaXJlY3RDb21wb3NpdGluZyA9
IDIwMDAgfTsKLSAgICBpZiAoaW1hZ2UtPndpZHRoKCkgPiBrTWF4RGltZW5zdGlvbkZvckRpcmVj
dENvbXBvc2l0aW5nIHx8IGltYWdlLT5oZWlnaHQoKSA+IGtNYXhEaW1lbnN0aW9uRm9yRGlyZWN0
Q29tcG9zaXRpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIo
R3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgaWYgKGxheWVyID09IHJlcGxpY2FMYXllcigp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRSZXBsaWNhdGVkQnlM
YXllcihsYXllcik7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5KCkKLXsKLSAgICBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCi0gICAgICAgIG1f
bWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRSZWN0KHJlY3QpKTsKLQotICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKLQotICAgIGFkZFJlcGFpbnRSZWN0KHJlY3QpOwotfQotCi1Db29y
ZGluYXRlZExheWVySUQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1faWQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVz
aENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmICghbV9j
b29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKSB7Ci0gICAgICAgIGlmIChjbGll
bnQoKSkKLSAgICAgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciogbWFzayA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKG1hc2tMYXllcigpKSkKLSAgICAg
ICAgbWFzay0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAg
aWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogcmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKLSAgICAgICAgcmVwbGljYS0+Zmx1c2hDb21wb3Np
dGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOwotCi0gICAgbV9jb29yZGluYXRvci0+c3luY0Zp
eGVkTGF5ZXJzKCk7Ci0KLSAgICBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5
KCk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIGNoaWxkcmVuKClbaV0tPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShyZWN0KTsKLX0K
LQotQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyKj4obGF5ZXIpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c3luY0NoaWxkcmVuKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0NoaWxkcmVuKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jQ2hpbGRyZW4gPSBmYWxzZTsKLSAgICBW
ZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZElEczsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGNoaWxkSURzLmFwcGVuZCh0
b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigpW2ldKSk7Ci0KLSAgICBtX2Nvb3JkaW5hdG9y
LT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElEcyk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0ZpbHRlcnMoKQot
ewotICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
c2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKLSAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJG
aWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcoKQotewotICAgIGlmICghbV9zaG91bGRTeW5j
SW1hZ2VCYWNraW5nKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jSW1hZ2VCYWNr
aW5nID0gZmFsc2U7Ci0KLSAgICBpZiAobV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpIHsKLSAg
ICAgICAgQVNTRVJUKCFzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkpOwotICAgICAgICBBU1NFUlQo
bV9jb21wb3NpdGVkSW1hZ2UpOwotCi0gICAgICAgIGJvb2wgaW1hZ2VJbnN0YW5jZVJlcGxhY2Vk
ID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZyAmJiAobV9jb29yZGluYXRlZEltYWdlQmFja2lu
Zy0+aWQoKSAhPSBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRChtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSkpOwotICAgICAgICBpZiAoaW1hZ2VJbnN0
YW5jZVJlcGxhY2VkKQotICAgICAgICAgICAgcmVsZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7
Ci0KLSAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKSB7Ci0gICAgICAgICAg
ICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nID0gbV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VC
YWNraW5nSWZOZWVkZWQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpOwotICAgICAgICAgICAgbV9j
b29yZGluYXRlZEltYWdlQmFja2luZy0+YWRkSG9zdCh0aGlzKTsKLSAgICAgICAgICAgIG1fbGF5
ZXJJbmZvLmltYWdlSUQgPSBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLT5pZCgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+bWFya0RpcnR5KCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwotCi0gICAg
Ly8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9sYXllckluZm8uaW1hZ2VJRC4KLSAgICBk
aWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzeW5jTGF5ZXJTdGF0ZSgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IGZhbHNlOwotICAg
IG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZpeGVkVG9WaWV3cG9ydCgpOwotCi0gICAg
bV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFja2ZhY2VWaXNpYmlsaXR5KCk7Ci0gICAg
bV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBjaGlsZHJlblRyYW5zZm9ybSgpOwotICAg
IG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29udGVudHNPcGFxdWUoKTsKLSAgICBtX2xh
eWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1JlY3QoKTsKLSAgICBtX2xheWVySW5mby5k
cmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKLSAgICBtX2xheWVySW5mby5jb250ZW50c1Zp
c2libGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKLSAgICBtX2xheWVySW5mby5tYXNrID0gdG9D
b29yZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwotICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9C
b3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7Ci0gICAgbV9sYXllckluZm8ub3BhY2l0eSA9IG9wYWNp
dHkoKTsKLSAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMzRCA9IHByZXNlcnZlczNEKCk7Ci0gICAg
bV9sYXllckluZm8ucmVwbGljYSA9IHRvQ29vcmRpbmF0ZWRMYXllcklEKHJlcGxpY2FMYXllcigp
KTsKLSAgICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0cmFuc2Zvcm0oKTsKLQotICAgIG1fbGF5
ZXJJbmZvLmFuY2hvclBvaW50ID0gbV9hZGp1c3RlZEFuY2hvclBvaW50OwotICAgIG1fbGF5ZXJJ
bmZvLnBvcyA9IG1fYWRqdXN0ZWRQb3NpdGlvbjsKLSAgICBtX2xheWVySW5mby5zaXplID0gbV9h
ZGp1c3RlZFNpemU7Ci0KLSAgICBtX2xheWVySW5mby5zaG93RGVidWdCb3JkZXJzID0gaXNTaG93
aW5nRGVidWdCb3JkZXIoKTsKLSAgICBpZiAobV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycykK
LSAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7Ci0gICAgbV9sYXllckluZm8uc2hvd1Jl
cGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENvdW50ZXIoKTsKLQotICAgIG1fY29vcmRp
bmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5ZXJJbmZvKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9yZGVyKGNvbnN0IENvbG9yJiBjb2xvciwg
ZmxvYXQgd2lkdGgpCi17Ci0gICAgQVNTRVJUKG1fbGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMp
OwotICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29sb3IgPSBjb2xvcjsKLSAgICBtX2xheWVy
SW5mby5kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNBbmlt
YXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFN5bmNBbmltYXRpb25zID0g
ZmFsc2U7Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5zZXRMYXllckFuaW1hdGlvbnMobV9pZCwgbV9h
bmltYXRpb25zKTsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQotewotICAgIGRlc3Ryb3lDYW52YXNJZk5l
ZWRlZCgpOwotICAgIGNyZWF0ZUNhbnZhc0lmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIShtX3BlbmRp
bmdDYW52YXNPcGVyYXRpb24gJiBTeW5jQ2FudmFzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5TeW5jQ2FudmFzOwotCi0gICAgaWYgKCFtX2lz
VmFsaWRDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29vcmRpbmF0b3ItPnN5bmND
YW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCEobV9w
ZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgRGVzdHJveUNhbnZhcykpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2lzVmFsaWRDYW52YXMpIHsKLSAgICAgICAgbV9jb29yZGluYXRvci0+ZGVz
dHJveUNhbnZhcyhtX2lkKTsKLSAgICAgICAgbV9pc1ZhbGlkQ2FudmFzID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5EZXN0cm95Q2FudmFzOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQot
ewotICAgIGlmICghKG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIENyZWF0ZUNhbnZhcykpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwotICAg
IGlmICghbV9pc1ZhbGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNh
bnZhcyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpOwotICAgICAgICBtX2lzVmFsaWRDYW52
YXMgPSB0cnVlOwotICAgIH0KLQotICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+Q3Jl
YXRlQ2FudmFzOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpm
bHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkKLXsKLSAgICBBU1NFUlQobV9j
b29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLQotICAgIC8vIFNldHMgdGhl
IHZhbHVlcy4KLSAgICBjb21wdXRlUGl4ZWxBbGlnbm1lbnQobV9hZGp1c3RlZFBvc2l0aW9uLCBt
X2FkanVzdGVkU2l6ZSwgbV9hZGp1c3RlZEFuY2hvclBvaW50LCBtX3BpeGVsQWxpZ25tZW50T2Zm
c2V0KTsKLQotICAgIHN5bmNJbWFnZUJhY2tpbmcoKTsKLSAgICBzeW5jTGF5ZXJTdGF0ZSgpOwot
ICAgIHN5bmNBbmltYXRpb25zKCk7Ci0gICAgY29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3Qo
KTsKLSAgICBzeW5jQ2hpbGRyZW4oKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgc3lu
Y0ZpbHRlcnMoKTsKLSNlbmRpZgotICAgIHVwZGF0ZUNvbnRlbnRCdWZmZXJzKCk7Ci0jaWYgVVNF
KEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgc3luY0NhbnZhcygpOwotI2VuZGlmCi19Ci0KLWJvb2wg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJhY2tpbmdWaXNpYmxlKCkKLXsKLSAgICBB
U1NFUlQobV9jb29yZGluYXRlZEltYWdlQmFja2luZyk7Ci0gICAgcmV0dXJuIHRpbGVkQmFja2lu
Z1N0b3JlVmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKGNvbnRlbnRzUmVjdCgpKTsKLX0KLQotdm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgp
Ci17Ci0gICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgbV9jb29yZGluYXRlZEltYWdlQmFj
a2luZy0+cmVtb3ZlSG9zdCh0aGlzKTsKLSAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNs
ZWFyKCk7Ci0gICAgbV9sYXllckluZm8uaW1hZ2VJRCA9IEludmFsaWRDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVQYWludEJlZ2luKCkKLXsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKLXsKLSAgICBtX2xheWVySW5mby5pc1Jvb3RM
YXllciA9IGlzUm9vdDsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0KLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVj
dG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpCi17Ci0gICAgaWYgKCFtX21h
aW5CYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS0+c2V0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5VmVjdG9yKTsKLSAgICBzZXROZWVkc1Zp
c2libGVSZWN0QWRqdXN0bWVudCgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKLXsKLSAgICBpZiAoc2hvdWxkSGF2
ZUJhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVu
dCA9IHRydWU7Ci19Ci0KLWZsb2F0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZWZmZWN0aXZl
Q29udGVudHNTY2FsZSgpCi17Ci0gICAgcmV0dXJuIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmlu
ZVRyYW5zZm9ybXMoKSA/IDEgOiBkZXZpY2VTY2FsZUZhY3RvcigpICogcGFnZVNjYWxlRmFjdG9y
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGp1c3RDb250ZW50c1Nj
YWxlKCkKLXsKLSAgICBBU1NFUlQoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKTsKLSAgICBpZiAo
IW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUo
KSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5nIHN0b3JlIGFuZCBwYWludGluZyB0aGUg
Y29udGVudCwKLSAgICAvLyB3ZSBkbyBub3Qgd2FudCB0byBkcm9wIHRoZSBwcmV2aW91cyBvbmUg
YXMgdGhhdCBtaWdodCByZXN1bHQgaW4KLSAgICAvLyBicmllZmx5IHNlZWluZyBmbGlja2VyaW5n
IGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQgYmVmb3JlCi0gICAgLy8gc29tZXRoaW5n
IHJlcGxhY2VzIHRoZW0uCi0gICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tp
bmdTdG9yZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBObyByZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlv
dXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUgYXJlYXMuCi0gICAgbV9wcmV2aW91c0Jh
Y2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCk7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5nU3RvcmUoKQotewotICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJhY2tpbmdTdG9yZSh0aGlzLCBDb29yZGlu
YXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsKLSAgICBtX21haW5CYWNraW5nU3RvcmUt
PnNldFN1cHBvcnRzQWxwaGEoIWNvbnRlbnRzT3BhcXVlKCkpOwotICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS0+c2V0Q29udGVudHNTY2FsZShlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgcGFpbnRHcmFwaGljc0xheWVyQ29u
dGVudHMoKmNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25zdCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0
ZWRSZWN0cykKLXsKLSAgICBpZiAoaXNTaG93aW5nUmVwYWludENvdW50ZXIoKSAmJiAhdXBkYXRl
ZFJlY3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJSZXBhaW50
Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50KCkpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9u
KCkKLXsKLSAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAgIGlmIChjbGll
bnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Ci19Ci0K
LUludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp0aWxlZEJhY2tpbmdTdG9yZUNvbnRl
bnRzUmVjdCgpCi17Ci0gICAgcmV0dXJuIEludFJlY3QoMCwgMCwgc2l6ZSgpLndpZHRoKCksIHNp
emUoKS5oZWlnaHQoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsYW1wVG9Db250ZW50c1JlY3RJZlJl
Y3RJc0luZmluaXRlKEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgY29udGVudHNSZWN0
KQotewotICAgIGlmIChyZWN0LndpZHRoKCkgPj0gTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkgfHwg
cmVjdC53aWR0aCgpIDw9IExheW91dFVuaXQ6Om5lYXJseU1pbigpKSB7Ci0gICAgICAgIHJlY3Qu
c2V0WChjb250ZW50c1JlY3QueCgpKTsKLSAgICAgICAgcmVjdC5zZXRXaWR0aChjb250ZW50c1Jl
Y3Qud2lkdGgoKSk7Ci0gICAgfQotCi0gICAgaWYgKHJlY3QuaGVpZ2h0KCkgPj0gTGF5b3V0VW5p
dDo6bmVhcmx5TWF4KCkgfHwgcmVjdC5oZWlnaHQoKSA8PSBMYXlvdXRVbml0OjpuZWFybHlNaW4o
KSkgewotICAgICAgICByZWN0LnNldFkoY29udGVudHNSZWN0LnkoKSk7Ci0gICAgICAgIHJlY3Qu
c2V0SGVpZ2h0KGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7Ci0gICAgfQotfQotCi1JbnRSZWN0IENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpCi17
Ci0gICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFyZSBub3QgdmlzaWJsZS4KLSAgICBpZiAo
IW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKLQotICAgIC8vIFJldHVybiBhIHByb2plY3Rpb24gb2YgdGhlIHZpc2li
bGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250byB0aGUgbGF5ZXIncyBwbGFuZSAobGF5
ZXIgY29vcmRpbmF0ZXMpLgotICAgIC8vIFRoZSByZXN1bHRpbmcgcXVhZCBtaWdodCBiZSBzcXVl
d2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBib3VuZGluZyBib3ggb2YgdGhpcyBxdWFk
LAotICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0aGVyIHRoYW4gdGhlIHJlYWwgdmlzaWJs
ZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlmaWVkIGJ5IHRoZSBjb3ZlciByZWN0IG11
bHRpcGxpZXIpLgotICAgIEFTU0VSVChtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0gPT0gbV9sYXll
clRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKSk7Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBt
X2NhY2hlZEludmVyc2VUcmFuc2Zvcm0uY2xhbXBlZEJvdW5kc09mUHJvamVjdGVkUXVhZChGbG9h
dFF1YWQobV9jb29yZGluYXRvci0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpKSk7Ci0gICAgY2xhbXBU
b0NvbnRlbnRzUmVjdElmUmVjdElzSW5maW5pdGUocmVjdCwgdGlsZWRCYWNraW5nU3RvcmVDb250
ZW50c1JlY3QoKSk7Ci0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QocmVjdCk7Ci19Ci0KLUNv
bG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBjb250ZW50c09wYXF1ZSgpID8gQ29sb3I6Ondo
aXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OwotfQotCi1QYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4
dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzLCBJbnRQb2ludCYgb2Zmc2V0KQotewotICAgIEFT
U0VSVChtX2Nvb3JkaW5hdG9yKTsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGlu
Z0xheWVyQ2hhbmdlcygpKTsKLSAgICByZXR1cm4gbV9jb29yZGluYXRvci0+YmVnaW5Db250ZW50
VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyBDb29yZGluYXRlZFN1cmZhY2U6Ok5vRmxh
Z3MgOiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEsIGF0bGFzLCBvZmZzZXQpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlVGlsZSh1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAg
QVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgbV9j
b29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0ZUluZm8sIHRpbGVSZWN0
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZVRpbGUodWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgSW50
UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwotICAgIEFTU0VS
VChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAgIG1fY29vcmRp
bmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxlUmVjdCk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVUaWxlKHVpbnQzMl90IHRp
bGVJRCkKLXsKLSAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgQVNTRVJUKG1fY29vcmRp
bmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVyZ2luZyk7Ci0gICAgbV9j
b29yZGluYXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQotewotICAgIGlmICghc2hv
dWxkSGF2ZUJhY2tpbmdTdG9yZSgpKSB7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVh
cigpOwotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQp
IHsKLSAgICAgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOwotICAgICAgICBtX3BlbmRpbmdDb250
ZW50c1NjYWxlQWRqdXN0bWVudCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFRoaXMgaXMgdGhl
IG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBiYWNraW5nIHN0b3JlLCBv
bmNlIHdlCi0gICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdlIGFyZSByZWFkeSB0byBz
ZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgotICAgIGlmICghbV9tYWluQmFja2luZ1N0
b3JlKQotICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgIGlmIChtX3BlbmRpbmdW
aXNpYmxlUmVjdEFkanVzdG1lbnQpIHsKLSAgICAgICAgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1
c3RtZW50ID0gZmFsc2U7Ci0gICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJXaXRoVGls
ZXNJZk5lZWRlZCgpOwotICAgIH0KLQotICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+dXBkYXRlVGls
ZUJ1ZmZlcnMoKTsKLQotICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlIGlzIGtlcHQg
YXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgotICAgIC8vIHJlbW92aW5nIHRoZSBl
eGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBUaGUgZmlyc3QgdGltZQot
ICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2UgcmVtb3ZlIHRoZSBwcmV2
aW91cyBiYWNraW5nIHN0b3JlLgotICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUtPnZpc2libGVB
cmVhSXNDb3ZlcmVkKCkpCi0gICAgICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdlQmFja2luZ1N0b3Jlcygp
Ci17Ci0jaWZuZGVmIE5ERUJVRwotICAgIFRlbXBvcmFyeUNoYW5nZTxib29sPiB1cGRhdGVNb2Rl
UHJvdGVjdG9yKG1faXNQdXJnaW5nLCB0cnVlKTsKLSNlbmRpZgotICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS5jbGVhcigpOwotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUuY2xlYXIoKTsKLQotICAg
IHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0
ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29vcmRpbmF0b3Io
V2ViS2l0OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIGNvb3JkaW5hdG9yKQotewot
ICAgIG1fY29vcmRpbmF0b3IgPSBjb29yZGluYXRvcjsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXI6OnNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCkKLXsKLSAgICBpZiAo
c2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQotICAgICAgICBtX3BlbmRpbmdWaXNpYmxlUmVjdEFk
anVzdG1lbnQgPSB0cnVlOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aGFz
UGVuZGluZ1Zpc2libGVDaGFuZ2VzKCkKLXsKLSAgICBpZiAob3BhY2l0eSgpIDwgMC4wMSAmJiAh
bV9hbmltYXRpb25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eU9w
YWNpdHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0pLT5oYXNQZW5kaW5nVmlzaWJsZUNoYW5nZXMoKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJvb2wgc2hvdWxkU3luY0Nh
bnZhcyA9IGZhbHNlOwotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHNob3VsZFN5bmND
YW52YXMgPSBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBTeW5jQ2FudmFzOwotI2VuZGlmCi0K
LSAgICBpZiAoIW1fc2hvdWxkU3luY0xheWVyU3RhdGUgJiYgIW1fc2hvdWxkU3luY0NoaWxkcmVu
ICYmICFtX3Nob3VsZFN5bmNGaWx0ZXJzICYmICFtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcgJiYg
IW1fc2hvdWxkU3luY0FuaW1hdGlvbnMgJiYgIXNob3VsZFN5bmNDYW52YXMpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0aWxlZEJhY2tpbmdTdG9yZVZpc2libGVSZWN0KCku
aW50ZXJzZWN0cyh0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpKTsKLX0KLQotc3RhdGlj
IGlubGluZSBib29sIGlzSW50ZWdyYWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4odmFsdWUpID09IHZhbHVlOwotfQotCi1GbG9hdFBvaW50IENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKQotewotICAgIEZs
b2F0UG9pbnQgb2Zmc2V0OwotICAgIGZvciAoY29uc3QgR3JhcGhpY3NMYXllciogY3VyckxheWVy
ID0gdGhpczsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPnBhcmVudCgpKQotICAg
ICAgICBvZmZzZXQgKz0gY3VyckxheWVyLT5wb3NpdGlvbigpOwotCi0gICAgcmV0dXJuIG9mZnNl
dDsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQaXhlbEFsaWdu
bWVudChGbG9hdFBvaW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiBzaXplLCBGbG9hdFBvaW50M0Qm
IGFuY2hvclBvaW50LCBGbG9hdFNpemUmIGFsaWdubWVudE9mZnNldCkKLXsKLSAgICBpZiAoaXNJ
bnRlZ3JhbChlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpKSB7Ci0gICAgICAgIHBvc2l0aW9uID0g
bV9wb3NpdGlvbjsKLSAgICAgICAgc2l6ZSA9IG1fc2l6ZTsKLSAgICAgICAgYW5jaG9yUG9pbnQg
PSBtX2FuY2hvclBvaW50OwotICAgICAgICBhbGlnbm1lbnRPZmZzZXQgPSBGbG9hdFNpemUoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZsb2F0UG9pbnQgcG9zaXRpb25SZWxhdGl2
ZVRvQmFzZSA9IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCk7Ci0KLSAgICBGbG9hdFJl
Y3QgYmFzZVJlbGF0aXZlQm91bmRzKHBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UsIG1fc2l6ZSk7Ci0g
ICAgRmxvYXRSZWN0IHNjYWxlZEJvdW5kcyA9IGJhc2VSZWxhdGl2ZUJvdW5kczsKLQotICAgIC8v
IFNjYWxlIGJ5IHRoZSBlZmZlY3RpdmUgc2NhbGUgZmFjdG9yIHRvIGNvbXB1dGUgdGhlIHNjcmVl
bi1yZWxhdGl2ZSBib3VuZHMuCi0gICAgc2NhbGVkQm91bmRzLnNjYWxlKGVmZmVjdGl2ZUNvbnRl
bnRzU2NhbGUoKSk7Ci0KLSAgICAvLyBSb3VuZCB0byBpbnRlZ2VyIGJvdW5kYXJpZXMuCi0gICAg
Ly8gTk9URTogV2hlbiB1c2luZyBlbmNsb3NpbmdJbnRSZWN0IChhcyBtYWMpIGl0IHdpbGwgaGF2
ZSBkaWZmZXJlbnQgc2l6ZXMgZGVwZW5kaW5nIG9uIHBvc2l0aW9uLgotICAgIEZsb2F0UmVjdCBh
bGlnbmVkQm91bmRzID0gcm91bmRlZEludFJlY3Qoc2NhbGVkQm91bmRzKTsKLQotICAgIC8vIENv
bnZlcnQgYmFjayB0byBsYXllciBjb29yZGluYXRlcy4KLSAgICBhbGlnbmVkQm91bmRzLnNjYWxl
KDEgLyBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotCi0gICAgLy8gQ29udmVydCBiYWNrIHRv
IGxheWVyIGNvb3JkaW5hdGVzLgotICAgIGFsaWdubWVudE9mZnNldCA9IGJhc2VSZWxhdGl2ZUJv
dW5kcy5sb2NhdGlvbigpIC0gYWxpZ25lZEJvdW5kcy5sb2NhdGlvbigpOwotCi0gICAgcG9zaXRp
b24gPSBtX3Bvc2l0aW9uIC0gYWxpZ25tZW50T2Zmc2V0OwotICAgIHNpemUgPSBhbGlnbmVkQm91
bmRzLnNpemUoKTsKLQotICAgIC8vIE5vdyB3ZSBoYXZlIHRvIGNvbXB1dGUgYSBuZXcgYW5jaG9y
IHBvaW50IHdoaWNoIGNvbXBlbnNhdGVzIGZvciByb3VuZGluZy4KLSAgICBmbG9hdCBhbmNob3JQ
b2ludFggPSBtX2FuY2hvclBvaW50LngoKTsKLSAgICBmbG9hdCBhbmNob3JQb2ludFkgPSBtX2Fu
Y2hvclBvaW50LnkoKTsKLQotICAgIGlmIChhbGlnbmVkQm91bmRzLndpZHRoKCkpCi0gICAgICAg
IGFuY2hvclBvaW50WCA9IChiYXNlUmVsYXRpdmVCb3VuZHMud2lkdGgoKSAqIGFuY2hvclBvaW50
WCArIGFsaWdubWVudE9mZnNldC53aWR0aCgpKSAvIGFsaWduZWRCb3VuZHMud2lkdGgoKTsKLQot
ICAgIGlmIChhbGlnbmVkQm91bmRzLmhlaWdodCgpKQotICAgICAgICBhbmNob3JQb2ludFkgPSAo
YmFzZVJlbGF0aXZlQm91bmRzLmhlaWdodCgpICogYW5jaG9yUG9pbnRZICsgYWxpZ25tZW50T2Zm
c2V0LmhlaWdodCgpKSAvIGFsaWduZWRCb3VuZHMuaGVpZ2h0KCk7Ci0KLSAgICBhbmNob3JQb2lu
dCA9IEZsb2F0UG9pbnQzRChhbmNob3JQb2ludFgsIGFuY2hvclBvaW50WSwgbV9hbmNob3JQb2lu
dC56KCkgKiBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKQotewotICAgIC8v
IFdoZW4gd2UgaGF2ZSBhIHRyYW5zZm9ybSBhbmltYXRpb24sIHdlIG5lZWQgdG8gdXBkYXRlIHZp
c2libGUgcmVjdCBldmVyeSBmcmFtZSB0byBhZGp1c3QgdGhlIHZpc2libGUgcmVjdCBvZiBhIGJh
Y2tpbmcgc3RvcmUuCi0gICAgYm9vbCBoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24gPSBzZWxm
T3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpOwotICAgIGlmICghbV9zaG91
bGRVcGRhdGVWaXNpYmxlUmVjdCAmJiAhaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVSZWN0ID0gZmFsc2U7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VycmVudFRyYW5zZm9ybSA9IHRyYW5zZm9ybSgpOwot
ICAgIGlmIChoYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgIGNsaWVudCgpLT5n
ZXRDdXJyZW50VHJhbnNmb3JtKHRoaXMsIGN1cnJlbnRUcmFuc2Zvcm0pOwotICAgIG1fbGF5ZXJU
cmFuc2Zvcm0uc2V0TG9jYWxUcmFuc2Zvcm0oY3VycmVudFRyYW5zZm9ybSk7Ci0KLSAgICBtX2xh
eWVyVHJhbnNmb3JtLnNldEFuY2hvclBvaW50KG1fYWRqdXN0ZWRBbmNob3JQb2ludCk7Ci0gICAg
bV9sYXllclRyYW5zZm9ybS5zZXRQb3NpdGlvbihtX2FkanVzdGVkUG9zaXRpb24pOwotICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uc2V0U2l6ZShtX2FkanVzdGVkU2l6ZSk7Ci0KLSAgICBtX2xheWVyVHJh
bnNmb3JtLnNldEZsYXR0ZW5pbmcoIXByZXNlcnZlczNEKCkpOwotICAgIG1fbGF5ZXJUcmFuc2Zv
cm0uc2V0Q2hpbGRyZW5UcmFuc2Zvcm0oY2hpbGRyZW5UcmFuc2Zvcm0oKSk7Ci0gICAgbV9sYXll
clRyYW5zZm9ybS5jb21iaW5lVHJhbnNmb3JtcyhwYXJlbnQoKSA/IHRvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKHBhcmVudCgpKS0+bV9sYXllclRyYW5zZm9ybS5jb21iaW5lZEZvckNoaWxkcmVu
KCkgOiBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpKTsKLQotICAgIG1fY2FjaGVkSW52ZXJzZVRyYW5z
Zm9ybSA9IG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCk7Ci0KLSAgICAvLyBU
aGUgY29tYmluZWQgdHJhbnNmb3JtIHdpbGwgYmUgdXNlZCBpbiB0aWxlZEJhY2tpbmdTdG9yZVZp
c2libGVSZWN0LgotICAgIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci19Ci0KLWJv
b2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZHJhd3NDb250ZW50KCkgJiYgY29udGVudHNBcmVWaXNpYmxlKCkg
JiYgIW1fc2l6ZS5pc0VtcHR5KCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJv
cGVydHlXZWJraXRUcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgh
cGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPnNlbGZPckFuY2VzdG9ySGFzQWN0aXZlVHJhbnNm
b3JtQW5pbWF0aW9uKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZWxm
T3JBbmNlc3RvckhhdmVOb25BZmZpbmVUcmFuc2Zvcm1zKCkKLXsKLSAgICBpZiAobV9hbmltYXRp
b25zLmhhc0FjdGl2ZUFuaW1hdGlvbnNPZlR5cGUoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFtX2xheWVyVHJhbnNmb3Jt
LmNvbWJpbmVkKCkuaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAo
IXBhcmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdG9Db29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5zZWxmT3JBbmNlc3RvckhhdmVOb25BZmZpbmVU
cmFuc2Zvcm1zKCk7Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgSW50U2l6ZSYg
Ym94U2l6ZSwgY29uc3QgQW5pbWF0aW9uKiBhbmltLCBjb25zdCBTdHJpbmcmIGtleWZyYW1lc05h
bWUsIGRvdWJsZSBkZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0KQotewotICAgIEFTU0VSVCgha2V5
ZnJhbWVzTmFtZS5pc0VtcHR5KCkpOwotCi0gICAgaWYgKCFhbmltIHx8IGFuaW0tPmlzRW1wdHlP
clplcm9EdXJhdGlvbigpIHx8IHZhbHVlTGlzdC5zaXplKCkgPCAyIHx8ICh2YWx1ZUxpc3QucHJv
cGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtICYmIHZhbHVlTGlzdC5w
cm9wZXJ0eSgpICE9IEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYm9vbCBsaXN0c01hdGNoID0gZmFsc2U7Ci0gICAgYm9vbCBpZ25vcmVkSGFz
QmlnUm90YXRpb247Ci0KLSAgICBpZiAodmFsdWVMaXN0LnByb3BlcnR5KCkgPT0gQW5pbWF0ZWRQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkKLSAgICAgICAgbGlzdHNNYXRjaCA9IHZhbGlkYXRlVHJh
bnNmb3JtT3BlcmF0aW9ucyh2YWx1ZUxpc3QsIGlnbm9yZWRIYXNCaWdSb3RhdGlvbikgPj0gMDsK
LQotICAgIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSA9IFdURjo6Y3VycmVudFRpbWUoKSAtIGRl
bGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQ7Ci0gICAgbV9hbmltYXRpb25zLmFkZChHcmFwaGljc0xh
eWVyQW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgYW5pbSwgbV9s
YXN0QW5pbWF0aW9uU3RhcnRUaW1lLCBsaXN0c01hdGNoKSk7Ci0gICAgbV9hbmltYXRpb25TdGFy
dGVkVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnBhdXNl
QW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHRpbWUpCi17Ci0g
ICAgbV9hbmltYXRpb25zLnBhdXNlKGFuaW1hdGlvbk5hbWUsIHRpbWUpOwotICAgIGRpZENoYW5n
ZUFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92
ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCi17Ci0gICAgbV9hbmltYXRp
b25zLnJlbW92ZShhbmltYXRpb25OYW1lKTsKLSAgICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7Ci19
Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzdXNwZW5kQW5pbWF0aW9ucyhkb3Vi
bGUgdGltZSkKLXsKLSAgICBtX2FuaW1hdGlvbnMuc3VzcGVuZCh0aW1lKTsKLSAgICBkaWRDaGFu
Z2VBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXN1
bWVBbmltYXRpb25zKCkKLXsKLSAgICBtX2FuaW1hdGlvbnMucmVzdW1lKCk7Ci0gICAgZGlkQ2hh
bmdlQW5pbWF0aW9ucygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5p
bWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiop
Ci17Ci0gICAgY2xpZW50KCktPm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgbV9sYXN0QW5p
bWF0aW9uU3RhcnRUaW1lKTsKLX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZGNmZWViMDJkZWQ4OWFiOTA3NTc5MzQwMzNmMGM3N2JjM2NlYzI0OC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3NSArMCwwIEBACi0vKgotIENvcHlyaWdo
dCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
LQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotCi0jaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcl9oCi0jZGVmaW5lIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9oCi0KLSNpbmNsdWRlICJD
b29yZGluYXRlZEltYWdlQmFja2luZy5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZv
LmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludDNE
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJB
bmltYXRpb24uaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5n
U3RvcmUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1
ZGUgIldlYlByb2Nlc3MuaCIKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzU3VyZmFjZVRva2VuLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxXZWJDb3Jl
L1J1bkxvb3AuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI7Ci1jbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKLX0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBj
b25zdCA9IDA7Ci0KLSAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQKLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlE
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJf
dCB0aWxlSUQpID0gMDsKLQotICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHZpc2libGVD
b250ZW50c1JlY3QoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFn
ZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c3luY0xheWVyQ2hpbGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRp
bmF0ZWRMYXllcklEPiYpID0gMDsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVh
bCB2b2lkIHN5bmNMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zJikgPSAwOwotI2VuZGlmCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZB
Q0UpCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNhbnZhcyhDb29yZGluYXRlZExheWVySUQsIFdl
YkNvcmU6OlBsYXRmb3JtTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMo
Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAwOwotI2VuZGlm
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXll
cklELCBpbnQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygp
ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBi
ZWdpbkNvbnRlbnRVcGRhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIENvb3JkaW5hdGVkU3Vy
ZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxhc0lELCBXZWJDb3JlOjpJbnRQb2ludCYpID0gMDsK
LX07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIKLSAgICAsIHB1YmxpYyBUaWxlZEJhY2tpbmdT
dG9yZUNsaWVudAotICAgICwgcHVibGljIFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6
Okhvc3QKLSAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkVGlsZUNsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJD
bGllbnQqKTsKLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoKTsKLQotICAg
IC8vIFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllci5oLgotICAgIHZpcnR1YWwg
Ym9vbCBzZXRDaGlsZHJlbihjb25zdCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFw
aGljc0xheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQmVsb3coR3Jh
cGhpY3NMYXllciosIEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wg
cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0U2l6ZShjb25zdCBGbG9hdFNpemUmKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZl
czNEKGJvb2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJv
b2wpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29sKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNPcGFxdWUoYm9vbCkgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eShmbG9hdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHNldENvbnRlbnRzVG9JbWFnZShJbWFnZSopIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRDb250ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRTaG93RGVidWdCb3JkZXIoYm9vbCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFNob3dSZXBhaW50Q291bnRlcihib29sKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIGJvb2wgc2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZShJbWFnZSopIGNvbnN0IE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIq
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIq
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhp
Y3NMYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlz
cGxheSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3Rv
ckNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0
YXRlKGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBmbHVzaENv
bXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCkgT1ZFUlJJREU7Ci0jaWYgRU5BQkxFKENT
U19GSUxURVJTKQotICAgIHZpcnR1YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmKSBPVkVSUklERTsKLSNlbmRpZgotICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9u
KiwgY29uc3QgU3RyaW5nJiwgZG91YmxlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgcGF1
c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiwgZG91YmxlKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhkb3VibGUgdGltZSkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKSBPVkVSUklERTsKLQotICAgIEZsb2F0UG9pbnQg
Y29tcHV0ZVBvc2l0aW9uUmVsYXRpdmVUb0Jhc2UoKTsKLSAgICB2b2lkIGNvbXB1dGVQaXhlbEFs
aWdubWVudChGbG9hdFBvaW50JiBwb3NpdGlvbiwgRmxvYXRTaXplJiwgRmxvYXRQb2ludDNEJiBh
bmNob3JQb2ludCwgRmxvYXRTaXplJiBhbGlnbm1lbnRPZmZzZXQpOwotCi0gICAgdm9pZCBzZXRW
aXNpYmxlQ29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKLQot
ICAgIHZvaWQgc2V0Um9vdExheWVyKGJvb2wpOwotCi0gICAgV2ViS2l0OjpDb29yZGluYXRlZExh
eWVySUQgaWQoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0Rml4ZWRUb1ZpZXdwb3J0KGJvb2wgaXNG
aXhlZCkgeyBtX2ZpeGVkVG9WaWV3cG9ydCA9IGlzRml4ZWQ7IH0KLQotICAgIEludFJlY3QgY292
ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9tYWluQmFja2luZ1N0b3JlID8gbV9tYWluQmFja2lu
Z1N0b3JlLT5tYXBUb0NvbnRlbnRzKG1fbWFpbkJhY2tpbmdTdG9yZS0+Y292ZXJSZWN0KCkpIDog
SW50UmVjdCgpOyB9Ci0KLSAgICAvLyBUaWxlZEJhY2tpbmdTdG9yZUNsaWVudAotICAgIHZpcnR1
YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50QmVnaW4oKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJ
bnRSZWN0JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFp
bnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiBwYWludGVkQXJlYSkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVhdGlvbigpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVj
dCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlZEJhY2tpbmdTdG9yZVZpc2li
bGVSZWN0KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBDb2xvciB0aWxlZEJhY2tpbmdTdG9yZUJh
Y2tncm91bmRDb2xvcigpIGNvbnN0IE9WRVJSSURFOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRUaWxl
Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25z
dCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViS2l0
OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBJ
bnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgT1ZFUlJJREU7Ci0KLSAgICB2
b2lkIHNldENvb3JkaW5hdG9yKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50
Kik7Ci0KLSAgICB2b2lkIHNldE5lZWRzVmlzaWJsZVJlY3RBZGp1c3RtZW50KCk7Ci0gICAgdm9p
ZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKLSAgICBib29sIGhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdl
cygpOwotCi1wcml2YXRlOgotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGVudW0gUGVu
ZGluZ0NhbnZhc09wZXJhdGlvbiB7Ci0gICAgICAgIE5vbmUgPSAweDAwLAotICAgICAgICBDcmVh
dGVDYW52YXMgPSAweDAxLAotICAgICAgICBEZXN0cm95Q2FudmFzID0gMHgwMiwKLSAgICAgICAg
U3luY0NhbnZhcyA9IDB4MDQsCi0gICAgICAgIENyZWF0ZUFuZFN5bmNDYW52YXMgPSBDcmVhdGVD
YW52YXMgfCBTeW5jQ2FudmFzLAotICAgICAgICBSZWNyZWF0ZUNhbnZhcyA9IENyZWF0ZUFuZFN5
bmNDYW52YXMgfCBEZXN0cm95Q2FudmFzCi0gICAgfTsKLQotICAgIHZvaWQgc3luY0NhbnZhcygp
OwotICAgIHZvaWQgZGVzdHJveUNhbnZhc0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBjcmVhdGVDYW52
YXNJZk5lZWRlZCgpOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0RGVidWdCb3JkZXIo
Y29uc3QgQ29sb3ImLCBmbG9hdCB3aWR0aCkgT1ZFUlJJREU7Ci0KLSAgICBib29sIGZpeGVkVG9W
aWV3cG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fZml4ZWRUb1ZpZXdwb3J0OyB9Ci0KLSAgICB2b2lk
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLSAgICB2b2lkIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsK
LSAgICB2b2lkIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VDaGlsZHJl
bigpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRpZENoYW5nZUZpbHRlcnMo
KTsKLSNlbmRpZgotICAgIHZvaWQgZGlkQ2hhbmdlSW1hZ2VCYWNraW5nKCk7Ci0KLSAgICB2b2lk
IHN5bmNMYXllclN0YXRlKCk7Ci0gICAgdm9pZCBzeW5jQW5pbWF0aW9ucygpOwotICAgIHZvaWQg
c3luY0NoaWxkcmVuKCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgc3luY0Zp
bHRlcnMoKTsKLSNlbmRpZgotICAgIHZvaWQgc3luY0ltYWdlQmFja2luZygpOwotICAgIHZvaWQg
Y29tcHV0ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKLSAgICB2b2lkIHVwZGF0ZUNvbnRlbnRC
dWZmZXJzKCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUJhY2tpbmdTdG9yZSgpOwotICAgIHZvaWQgcmVs
ZWFzZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFj
a2luZzo6SG9zdAotICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNpYmxlKCkgT1ZFUlJJ
REU7Ci0gICAgYm9vbCBzaG91bGRIYXZlQmFja2luZ1N0b3JlKCkgY29uc3Q7Ci0gICAgYm9vbCBz
ZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbigpIGNvbnN0OwotICAgIGJv
b2wgc2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpOwotICAgIHZvaWQgYWRq
dXN0Q29udGVudHNTY2FsZSgpOwotCi0gICAgdm9pZCBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVj
dCgpOwotICAgIGZsb2F0IGVmZmVjdGl2ZUNvbnRlbnRzU2NhbGUoKTsKLQotICAgIHZvaWQgYW5p
bWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiop
OwotCi0gICAgV2ViS2l0OjpDb29yZGluYXRlZExheWVySUQgbV9pZDsKLSAgICBXZWJLaXQ6OkNv
b3JkaW5hdGVkTGF5ZXJJbmZvIG1fbGF5ZXJJbmZvOwotICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zv
cm0gbV9sYXllclRyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2NhY2hlZElu
dmVyc2VUcmFuc2Zvcm07Ci0gICAgRmxvYXRTaXplIG1fcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7Ci0g
ICAgRmxvYXRTaXplIG1fYWRqdXN0ZWRTaXplOwotICAgIEZsb2F0UG9pbnQgbV9hZGp1c3RlZFBv
c2l0aW9uOwotICAgIEZsb2F0UG9pbnQzRCBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7Ci0KLSNpZm5k
ZWYgTkRFQlVHCi0gICAgYm9vbCBtX2lzUHVyZ2luZzsKLSNlbmRpZgotICAgIGJvb2wgbV9zaG91
bGRVcGRhdGVWaXNpYmxlUmVjdDogMTsKLSAgICBib29sIG1fc2hvdWxkU3luY0xheWVyU3RhdGU6
IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKLSAgICBib29sIG1fc2hvdWxk
U3luY0ZpbHRlcnM6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmc6IDE7Ci0g
ICAgYm9vbCBtX3Nob3VsZFN5bmNBbmltYXRpb25zOiAxOwotICAgIGJvb2wgbV9maXhlZFRvVmll
d3BvcnQgOiAxOwotICAgIGJvb2wgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgOiAx
OwotICAgIGJvb2wgbV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50IDogMTsKLSNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBib29sIG1faXNWYWxpZENhbnZhcyA6IDE7Ci0gICAgdW5z
aWduZWQgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIDogMzsKLSNlbmRpZgotCi0gICAgV2ViS2l0
OjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJDbGllbnQqIG1fY29vcmRpbmF0b3I7Ci0gICAgT3du
UHRyPFRpbGVkQmFja2luZ1N0b3JlPiBtX21haW5CYWNraW5nU3RvcmU7Ci0gICAgT3duUHRyPFRp
bGVkQmFja2luZ1N0b3JlPiBtX3ByZXZpb3VzQmFja2luZ1N0b3JlOwotCi0gICAgUmVmUHRyPElt
YWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKLSAgICBOYXRpdmVJbWFnZVB0ciBtX2NvbXBvc2l0ZWRO
YXRpdmVJbWFnZVB0cjsKLSAgICBSZWZQdHI8V2ViS2l0OjpDb29yZGluYXRlZEltYWdlQmFja2lu
Zz4gbV9jb29yZGluYXRlZEltYWdlQmFja2luZzsKLQotICAgIFBsYXRmb3JtTGF5ZXIqIG1fY2Fu
dmFzUGxhdGZvcm1MYXllcjsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBJbnRTaXpl
IG1fY2FudmFzU2l6ZTsKLSAgICBHcmFwaGljc1N1cmZhY2VUb2tlbiBtX2NhbnZhc1Rva2VuOwot
I2VuZGlmCi0gICAgVGltZXI8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyPiBtX2FuaW1hdGlvblN0
YXJ0ZWRUaW1lcjsKLSAgICBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7Ci0g
ICAgZG91YmxlIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZTsKLX07Ci0KLUNvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopOwot
Ci19Ci0jZW5kaWYKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcl9ICmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwNDMxNDkzMjVjYTVhNzZkYzk1YjQ3
NTJjZDZlZDJmZjliNmE2ZjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1Db29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KEltYWdlKiBpbWFnZSkKLXsKLSAgICAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZyBrZWVwcyBh
IFJlZlB0cjxJbWFnZT4gbWVtYmVyLCBzbyB0aGUgc2FtZSBJbWFnZSBwb2ludGVyIGNhbiBub3Qg
cmVmZXIgdHdvIGRpZmZlcmVudCBpbnN0YW5jZXMgdW50aWwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcgcmVsZWFzZXMgdGhlIG1lbWJlci4KLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEPihpbWFnZSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjcmVhdGUoQ29vcmRpbmF0
b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDb29yZGluYXRlZEltYWdlQmFja2luZyhjbGllbnQsIGltYWdlKSk7Ci19Ci0KLUNv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRv
ciogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBpbWFnZSkKLSAgICA6IG1fY29vcmRpbmF0b3Io
Y2xpZW50KQotICAgICwgbV9pbWFnZShpbWFnZSkKLSAgICAsIG1faWQoZ2V0Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRChtX2ltYWdlLmdldCgpKSkKLSAgICAsIG1fY2xlYXJDb250ZW50c1RpbWVy
KHRoaXMsICZDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQp
Ci0gICAgLCBtX2lzRGlydHkoZmFsc2UpCi0gICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKLXsKLSAg
ICAvLyBGSVhNRTogV2Ugd291bGQgbmVlZCB0byBkZWNvZGUgYSBzbWFsbCBpbWFnZSBkaXJlY3Rs
eSBpbnRvIGEgR3JhcGhpY3NTdXJmYWNlLgotICAgIC8vIGh0dHA6Ly93ZWJraXQub3JnL2IvMTAx
NDI2Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5jcmVhdGVJbWFnZUJhY2tpbmcoaWQoKSk7Ci19Ci0K
LUNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp+Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoKQotewot
fQotCi12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjphZGRIb3N0KEhvc3QqIGhvc3QpCi17
Ci0gICAgQVNTRVJUKCFtX2hvc3RzLmNvbnRhaW5zKGhvc3QpKTsKLSAgICBtX2hvc3RzLmFwcGVu
ZChob3N0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVtb3ZlSG9zdChI
b3N0KiBob3N0KQotewotICAgIHNpemVfdCBwb3NpdGlvbiA9IG1faG9zdHMuZmluZChob3N0KTsK
LSAgICBBU1NFUlQocG9zaXRpb24gIT0gbm90Rm91bmQpOwotICAgIG1faG9zdHMucmVtb3ZlKHBv
c2l0aW9uKTsKLQotICAgIGlmIChtX2hvc3RzLmlzRW1wdHkoKSkKLSAgICAgICAgbV9jb29yZGlu
YXRvci0+cmVtb3ZlSW1hZ2VCYWNraW5nKGlkKCkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nOjptYXJrRGlydHkoKQotewotICAgIG1faXNEaXJ0eSA9IHRydWU7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZSgpCi17Ci0gICAgcmVsZWFzZVN1cmZh
Y2VJZk5lZWRlZCgpOwotCi0gICAgYm9vbCBjaGFuZ2VkVG9WaXNpYmxlOwotICAgIHVwZGF0ZVZp
c2liaWxpdHlJZk5lZWRlZChjaGFuZ2VkVG9WaXNpYmxlKTsKLSAgICBpZiAoIW1faXNWaXNpYmxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWNoYW5nZWRUb1Zpc2libGUpIHsKLSAgICAg
ICAgaWYgKCFtX2lzRGlydHkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1f
bmF0aXZlSW1hZ2VQdHIgPT0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkg
ewotICAgICAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3N1cmZhY2UgPSBDb29yZGluYXRlZFN1cmZhY2U6OmNy
ZWF0ZShtX2ltYWdlLT5zaXplKCksIG1faW1hZ2UtPmN1cnJlbnRGcmFtZUhhc0FscGhhKCkgPyBD
b29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRzQWxwaGEgOiBDb29yZGluYXRlZFN1cmZhY2U6Ok5v
RmxhZ3MpOwotICAgIGlmICghbV9zdXJmYWNlKSB7Ci0gICAgICAgIG1faXNEaXJ0eSA9IGZhbHNl
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSW50UmVjdCByZWN0KEludFBvaW50Ojp6
ZXJvKCksIG1faW1hZ2UtPnNpemUoKSk7Ci0gICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY29u
dGV4dCA9IG1fc3VyZmFjZS0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KHJlY3QpOwotICAgIGNvbnRl
eHQtPmRyYXdJbWFnZShtX2ltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCByZWN0LCBy
ZWN0KTsKLQotICAgIG1fbmF0aXZlSW1hZ2VQdHIgPSBtX2ltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwotCi0gICAgLy8gSWYgc2VuZGluZyB0aGUgbWVzc2FnZSBmYWlscywgdHJ5
IGFnYWluIGluIHRoZSBuZXh0IHVwZGF0ZS4KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2Nvb3JkaW5h
dG9yLT51cGRhdGVJbWFnZUJhY2tpbmcoaWQoKSwgbV9zdXJmYWNlKTsKLSAgICBtX2lzRGlydHkg
PSAhc3VjY2VzczsKLX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6cmVsZWFzZVN1
cmZhY2VJZk5lZWRlZCgpCi17Ci0gICAgLy8gV2UgbXVzdCBrZWVwIG1fc3VyZmFjZSB1bnRpbCBV
SSBQcm9jZXNzIHJlYWRzIG1fc3VyZmFjZS4KLSAgICAvLyBJZiBtX3N1cmZhY2UgZXhpc3RzLCBp
dCB3YXMgY3JlYXRlZCBpbiB0aGUgcHJldmlvdXMgdXBkYXRlLgotICAgIG1fc3VyZmFjZS5jbGVh
cigpOwotfQotCi1zdGF0aWMgY29uc3QgZG91YmxlIGNsZWFyQ29udGVudHNUaW1lckludGVydmFs
ID0gMzsKLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBkYXRlVmlzaWJpbGl0eUlm
TmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2libGUpCi17Ci0gICAgYm9vbCBwcmV2aW91c0lzVmlz
aWJsZSA9IG1faXNWaXNpYmxlOwotCi0gICAgbV9pc1Zpc2libGUgPSBmYWxzZTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1faG9zdHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
aG9zdHNbaV0tPmltYWdlQmFja2luZ1Zpc2libGUoKSkgewotICAgICAgICAgICAgbV9pc1Zpc2li
bGUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBi
b29sIGNoYW5nZWRUb0ludmlzaWJsZSA9IHByZXZpb3VzSXNWaXNpYmxlICYmICFtX2lzVmlzaWJs
ZTsKLSAgICBpZiAoY2hhbmdlZFRvSW52aXNpYmxlKSB7Ci0gICAgICAgIEFTU0VSVCghbV9jbGVh
ckNvbnRlbnRzVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAgICAgIG1fY2xlYXJDb250ZW50c1RpbWVy
LnN0YXJ0T25lU2hvdChjbGVhckNvbnRlbnRzVGltZXJJbnRlcnZhbCk7Ci0gICAgfQotCi0gICAg
Y2hhbmdlZFRvVmlzaWJsZSA9ICFwcmV2aW91c0lzVmlzaWJsZSAmJiBtX2lzVmlzaWJsZTsKLQot
ICAgIGlmIChtX2lzVmlzaWJsZSAmJiBtX2NsZWFyQ29udGVudHNUaW1lci5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIG1fY2xlYXJDb250ZW50c1RpbWVyLnN0b3AoKTsKLSAgICAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byB1cGRhdGUgdGhlIHRleHR1cmUgaWYgd2UgZGlkbid0IHJlbW92ZSB0aGUgdGV4
dHVyZS4KLSAgICAgICAgY2hhbmdlZFRvVmlzaWJsZSA9IGZhbHNlOwotICAgIH0KLX0KLQotdm9p
ZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y2xlYXJDb250ZW50c1RpbWVyRmlyZWQoV2ViQ29y
ZTo6VGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+KikKLXsKLSAgICBtX2Nvb3JkaW5hdG9y
LT5jbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKGlkKCkpOwotfQotCi19Ci0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWRiMmEwMmViODJkZjI3ZDkxMGY1YTljY2Iw
YTcwY2U3NDM0ZjQxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBDb29yZGluYXRlZEltYWdlQmFja2luZ19o
Ci0jZGVmaW5lIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKLQotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVySW5mby5oIgotI2luY2x1ZGUg
IkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGluYXRlZEltYWdlQmFja2luZz4gewot
cHVibGljOgotICAgIGNsYXNzIENvb3JkaW5hdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkg
PSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgPSAwOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJbWFnZUJhY2tp
bmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgIH07Ci0KLSAgICBjbGFzcyBI
b3N0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpbWFnZUJhY2tpbmdWaXNp
YmxlKCkgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZElt
YWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdG9yKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJbWFn
ZT4pOwotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7Ci0KLSAgICBzdGF0
aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KFdlYkNvcmU6OkltYWdlKik7Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faWQ7IH0KLQotICAgIHZvaWQgYWRkSG9zdChIb3N0Kik7Ci0gICAgdm9p
ZCByZW1vdmVIb3N0KEhvc3QqKTsKLQotICAgIC8vIFdoZW4gYSBuZXcgaW1hZ2UgaXMgdXBkYXRl
ZCBvciBhbiBhbmltYXRlZCBnaWYgaXMgcHJvZ3Jlc3NlZCwgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyIGNhbGxzIG1hcmtEaXJ0eSgpLgotICAgIHZvaWQgbWFya0RpcnR5KCk7Ci0KLSAgICAvLyBD
cmVhdGUsIHJlbW92ZSBvciB1cGRhdGUgaXRzIGJhY2tpbmcuCi0gICAgdm9pZCB1cGRhdGUoKTsK
LQotcHJpdmF0ZToKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvciosIFBh
c3NSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+KTsKLQotICAgIHZvaWQgcmVsZWFzZVN1cmZhY2VJZk5l
ZWRlZCgpOwotICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRU
b1Zpc2libGUpOwotICAgIHZvaWQgY2xlYXJDb250ZW50c1RpbWVyRmlyZWQoV2ViQ29yZTo6VGlt
ZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+Kik7Ci0KLSAgICBDb29yZGluYXRvciogbV9jb29y
ZGluYXRvcjsKLSAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IG1faW1hZ2U7Ci0gICAgV2ViQ29y
ZTo6TmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZVB0cjsKLSAgICBDb29yZGluYXRlZEltYWdl
QmFja2luZ0lEIG1faWQ7Ci0gICAgVmVjdG9yPEhvc3QqPiBtX2hvc3RzOwotCi0gICAgUmVmUHRy
PENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwotCi0gICAgV2ViQ29yZTo6VGltZXI8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmc+IG1fY2xlYXJDb250ZW50c1RpbWVyOwotCi0gICAgYm9vbCBt
X2lzRGlydHk7Ci0gICAgYm9vbCBtX2lzVmlzaWJsZTsKLQotfTsKLQotfQotI2VuZGlmCi0KLSNl
bmRpZiAvLyBDb29yZGluYXRlZEltYWdlQmFja2luZ19ICmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAppbmRleCAxYTRhOTk3
OTI4MTU0YzY1Zjg2ZTdiZmMxYjhjNTQ1ZTJkYjVlYmFjLi5lOGE1OTMyZjhlMmJmYzJlYjQ5ZWMy
ZGJhMGFkODRjM2VhZWQzOTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMxLDEyICszMSwxMCBAQAogI2lu
Y2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgogCiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VJRC5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJ
bmZvLmgiCiAjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtNTAsNiArNDgs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1RleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNo
YW5nZS5oPgogCkBAIC03MDgsMTMgKzcwNywxMyBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBv
cnRzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJ
bmZvLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZv
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlUmVjdCkKIHsKICAgICBtX3Nob3VsZFN5bmNG
cmFtZSA9IHRydWU7CiAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6Q3JlYXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGls
ZVJlY3QsIHVwZGF0ZUluZm8pKTsKIH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIHRpbGVSZWN0KQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUo
Q29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29y
ZTo6U3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHRpbGVSZWN0KQogewogICAgIG1fc2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKICAgICBtX3dlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVU
aWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3Qu
aAppbmRleCBiZDY2ZTRhNzBjMjJjMzY3MjUzMzhhOTJmZDBjZjc2OTAzNmQ0NjM2Li43Mjk3ZWVk
ODFlMDVhMmVlMGYwMDVlZWEzZGY4MTg4NWZlYzNmMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjIsMzAgKzIy
LDMyIEBACiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKLSNpbmNsdWRlICJDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2lu
Zy5oIgogI2luY2x1ZGUgIkxheWVyVHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVI
b3N0LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NMYXllckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3Rvcnku
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0
ci5oPgogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eS5oIgogI2VuZGlmCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENv
b3JkaW5hdGVkU3VyZmFjZTsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIENvb3Jk
aW5hdGVkU3VyZmFjZTsKLWNsYXNzIFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlOwogCiBjbGFz
cyBDb29yZGluYXRlZExheWVyVHJlZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllckNsaWVudAotICAgICwgcHVibGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGlu
YXRvcgotICAgICwgcHVibGljIFVwZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29y
ZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCisgICAgLCBwdWJsaWMgV2ViQ29y
ZTo6VXBkYXRlQXRsYXNDbGllbnQKICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVy
RmFjdG9yeQogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZpbHRlclBy
b2dyYW1Qcm94eUNsaWVudApAQCAtNzcsMTIgKzc5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgcGF1c2VSZW5kZXJpbmcoKSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHJlc3VtZVJlbmRlcmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hl
ZHVsZUxheWVyRmx1c2goKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZh
Y3RvckNoYW5nZWQoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdl
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSop
IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlEKTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGlu
YXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRpbGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0
IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlEKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxl
Q29udGVudHNSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgp
OwogICAgIHZpcnR1YWwgdm9pZCBwdXJnZUJhY2tpbmdTdG9yZXMoKTsKQEAgLTkwLDI1ICs5Miwy
NSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVy
VHJlZUhvc3RNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVj
b2RlciYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBo
aWNzTGF5ZXJGYWN0b3J5KCkgT1ZFUlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVy
U3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOwot
ICAgIHZpcnR1YWwgdm9pZCBzeW5jTGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExh
eWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJBbmltYXRpb25zJik7CisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklu
Zm8mKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0
ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhD
b29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQsIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgogI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxh
eWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0
ZWRMYXllcklEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNv
cmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURF
OworICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95Q2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CiAjZW5k
aWYKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXll
cklELCBpbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRDb3Vu
dChXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGludCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIGRldGFjaExheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwog
ICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXllcnMoKTsKIAotICAgIHZpcnR1YWwgUGFzc093
blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0
bGFzSUQsIFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRs
YXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKTsKIAogICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0g
ICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNy
ZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FKQpAQCAtMTE2LDcgKzExOCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwg
dm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBPVkVSUklERTsK
IAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlQ29vcmRp
bmF0ZWRTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6
OkZsYWdzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZh
Y2U+IGNyZWF0ZUNvb3JkaW5hdGVkU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2Vi
Q29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlOjpGbGFncyk7CiAKIHByb3RlY3RlZDoKICAgICBleHBs
aWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3QoV2ViUGFnZSopOwpAQCAtMTMwLDEwICsxMzIs
MTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0
IE9WRVJSSURFOwogCiAgICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9y
Ci0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nSUQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmco
V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpD
b29yZGluYXRlZFN1cmZhY2U+KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFn
ZUJhY2tpbmdDb250ZW50cyhXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwogCiAgICAgdm9pZCBmbHVzaFBlbmRpbmdJ
bWFnZUJhY2tpbmdDaGFuZ2VzKCk7CiAKQEAgLTE4MCwxMSArMTgyLDExIEBAIHByaXZhdGU6CiAg
ICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKIAog
ICAgIEhhc2hTZXQ8V2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3Rl
cmVkTGF5ZXJzOwotICAgIFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVh
dGU7Ci0gICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6Q29vcmRpbmF0ZWRMYXllcklEPiBtX2xheWVyc1RvQ3JlYXRlOworICAgIFZlY3RvcjxXZWJD
b3JlOjpDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxXZWJDb3Jl
OjpDb29yZGluYXRlZEltYWdlQmFja2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CiAgICAgSW1hZ2VC
YWNraW5nTWFwIG1faW1hZ2VCYWNraW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFz
PiA+IG1fdXBkYXRlQXRsYXNlczsKKyAgICBWZWN0b3I8T3duUHRyPFdlYkNvcmU6OlVwZGF0ZUF0
bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBI
YXNoU2V0PFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3Jh
bXM7CkBAIC0yMTEsOCArMjEzLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fYW5pbWF0aW9uc0xv
Y2tlZDsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYKKyNlbmRpZiAv
LyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAKICNlbmRpZiAvLyBDb29yZGluYXRlZExheWVy
VHJlZUhvc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMGI1NjYyNmU4MWYxMGIxODc2MmI5
OGYzNjU4MDRmOGUzMjYxNjcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRUaWxlLmgiCi0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0j
aW5jbHVkZSAiU3VyZmFjZVVwZGF0ZUluZm8uaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9y
ZUNsaWVudC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQgPSAw
OwotCi1Db29yZGluYXRlZFRpbGU6OkNvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGll
bnQqIGNsaWVudCwgVGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBD
b29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAs
IG1fdGlsZWRCYWNraW5nU3RvcmUodGlsZWRCYWNraW5nU3RvcmUpCi0gICAgLCBtX2Nvb3JkaW5h
dGUodGlsZUNvb3JkaW5hdGUpCi0gICAgLCBtX3JlY3QodGlsZWRCYWNraW5nU3RvcmUtPnRpbGVS
ZWN0Rm9yQ29vcmRpbmF0ZSh0aWxlQ29vcmRpbmF0ZSkpCi0gICAgLCBtX0lEKEludmFsaWRDb29y
ZGluYXRlZFRpbGVJRCkKLSAgICAsIG1fZGlydHlSZWN0KG1fcmVjdCkKLXsKLX0KLQotQ29vcmRp
bmF0ZWRUaWxlOjp+Q29vcmRpbmF0ZWRUaWxlKCkKLXsKLSAgICBpZiAobV9JRCAhPSBJbnZhbGlk
Q29vcmRpbmF0ZWRUaWxlSUQpCi0gICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlKG1fSUQpOwot
fQotCi1ib29sIENvb3JkaW5hdGVkVGlsZTo6aXNEaXJ0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICFtX2RpcnR5UmVjdC5pc0VtcHR5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlOjppbnZh
bGlkYXRlKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBJbnRSZWN0IHRpbGVEaXJ0
eVJlY3QgPSBpbnRlcnNlY3Rpb24oZGlydHlSZWN0LCBtX3JlY3QpOwotICAgIGlmICh0aWxlRGly
dHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXJ0eVJlY3QudW5p
dGUodGlsZURpcnR5UmVjdCk7Ci19Ci0KLVZlY3RvcjxJbnRSZWN0PiBDb29yZGluYXRlZFRpbGU6
OnVwZGF0ZUJhY2tCdWZmZXIoKQotewotICAgIGlmICghaXNEaXJ0eSgpKQotICAgICAgICByZXR1
cm4gVmVjdG9yPEludFJlY3Q+KCk7Ci0KLSAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZv
OwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50
LT5iZWdpbkNvbnRlbnRVcGRhdGUobV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLmF0bGFz
SUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCk7Ci0gICAgaWYgKCFncmFwaGljc0NvbnRleHQp
Ci0gICAgICAgIHJldHVybiBWZWN0b3I8SW50UmVjdD4oKTsKLSAgICBncmFwaGljc0NvbnRleHQt
PnRyYW5zbGF0ZSgtbV9kaXJ0eVJlY3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKLSAgICBncmFw
aGljc0NvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50
c1NjYWxlKCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOwotICAgIG1f
dGlsZWRCYWNraW5nU3RvcmUtPmNsaWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBo
aWNzQ29udGV4dC5nZXQoKSwgbV90aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2Rp
cnR5UmVjdCkpOwotCi0gICAgdXBkYXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7Ci0g
ICAgdXBkYXRlSW5mby51cGRhdGVSZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsK
LSAgICB1cGRhdGVJbmZvLnNjYWxlRmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVu
dHNTY2FsZSgpOwotICAgIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0KLSAgICBzdGF0aWMg
dWludDMyX3QgaWQgPSAxOwotICAgIGlmIChtX0lEID09IEludmFsaWRDb29yZGluYXRlZFRpbGVJ
RCkgewotICAgICAgICBtX0lEID0gaWQrKzsKLSAgICAgICAgLy8gV2UgbWF5IGdldCBhbiBpbnZh
bGlkIElEIGR1ZSB0byB3cmFwLWFyb3VuZCBvbiBvdmVyZmxvdy4KLSAgICAgICAgaWYgKG1fSUQg
PT0gSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEKQotICAgICAgICAgICAgbV9JRCA9IGlkKys7Ci0g
ICAgICAgIG1fY2xpZW50LT5jcmVhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1fY2xpZW50LT51cGRhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8s
IG1fcmVjdCk7Ci0KLSAgICBWZWN0b3I8SW50UmVjdD4gdXBkYXRlZFJlY3RzOwotICAgIHVwZGF0
ZWRSZWN0cy5hcHBlbmQobV9kaXJ0eVJlY3QpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgp
OwotICAgIHJldHVybiB1cGRhdGVkUmVjdHM7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpz
d2FwQmFja0J1ZmZlclRvRnJvbnQoKQotewotICAgIC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5n
U3RvcmVQYWludEVuZC4KLX0KLQotYm9vbCBDb29yZGluYXRlZFRpbGU6OmlzUmVhZHlUb1BhaW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQ7
Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0JikKLXsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZFRpbGU6OnJlc2l6ZShjb25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIG1fcmVj
dCA9IEludFJlY3QobV9yZWN0LmxvY2F0aW9uKCksIG5ld1NpemUpOwotICAgIG1fZGlydHlSZWN0
ID0gbV9yZWN0OwotfQotCi1Db29yZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRlZFRpbGVC
YWNrZW5kKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xp
ZW50KQotewotfQotCi1QYXNzUmVmUHRyPFdlYkNvcmU6OlRpbGU+IENvb3JkaW5hdGVkVGlsZUJh
Y2tlbmQ6OmNyZWF0ZVRpbGUoV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2lu
Z1N0b3JlLCBjb25zdCBXZWJDb3JlOjpUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkK
LXsKLSAgICByZXR1cm4gQ29vcmRpbmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFj
a2luZ1N0b3JlLCB0aWxlQ29vcmRpbmF0ZSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlQmFj
a2VuZDo6cGFpbnRDaGVja2VyUGF0dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRU
aWxlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZFRpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUx
NWNjNzcyYjUzMWVhMWE0YTczNDFjMWQwNDZiNjUwOGY2Y2NmYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBv
cmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENv
b3JkaW5hdGVkVGlsZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkVGlsZV9oCi0KLSNpZiBVU0UoVElM
RURfQkFDS0lOR19TVE9SRSkKLQotI2luY2x1ZGUgIlRpbGUuaCIKLSNpbmNsdWRlICJUaWxlZEJh
Y2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIldlYkNvcmUvSW50UmVjdC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlOwot
fQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50Owot
Y2xhc3MgU3VyZmFjZVVwZGF0ZUluZm87Ci0KLWNsYXNzIENvb3JkaW5hdGVkVGlsZSA6IHB1Ymxp
YyBXZWJDb3JlOjpUaWxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaWxlPiBj
cmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQsIFdlYkNvcmU6OlRpbGVkQmFja2lu
Z1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5h
dGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFRpbGUoY2xpZW50LCB0aWxlZEJh
Y2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUpKTsgfQotICAgIH5Db29yZGluYXRlZFRpbGUoKTsK
LQotICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHVwZGF0ZUJh
Y2tCdWZmZXIoKTsKLSAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwotICAgIGJvb2wg
aXNSZWFkeVRvUGFpbnQoKSBjb25zdDsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIGNvbnN0IENvb3JkaW5h
dGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KLSAgICBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAg
dm9pZCByZXNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotCi1wcml2YXRlOgotICAgIENv
b3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqLCBXZWJDb3JlOjpUaWxlZEJhY2tp
bmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKLQotICAgIENvb3JkaW5hdGVkVGlsZUNsaWVu
dCogbV9jbGllbnQ7Ci0gICAgV2ViQ29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIG1fdGlsZWRCYWNr
aW5nU3RvcmU7Ci0gICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5hdGU7Ci0gICAgV2ViQ29yZTo6SW50
UmVjdCBtX3JlY3Q7Ci0KLSAgICB1aW50MzJfdCBtX0lEOwotICAgIFdlYkNvcmU6OkludFJlY3Qg
bV9kaXJ0eVJlY3Q7Ci0KLSAgICBPd25QdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1fbG9jYWxC
dWZmZXI7Ci19OwotCi1jbGFzcyBDb29yZGluYXRlZFRpbGVDbGllbnQgewotcHVibGljOgotICAg
IHZpcnR1YWwgfkNvb3JkaW5hdGVkVGlsZUNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJ
RCkgPSAwOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgdWludDMyX3QmIGF0
bGFzSUQsIFdlYkNvcmU6OkludFBvaW50JikgPSAwOwotfTsKLQotY2xhc3MgQ29vcmRpbmF0ZWRU
aWxlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewot
cHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3Jl
QmFja2VuZD4gY3JlYXRlKENvb3JkaW5hdGVkVGlsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChjbGllbnQpKTsgfQotICAgIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6VGlsZT4gY3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9y
ZSosIGNvbnN0IFdlYkNvcmU6OlRpbGU6OkNvb3JkaW5hdGUmKTsKLSAgICB2b2lkIHBhaW50Q2hl
Y2tlclBhdHRlcm4oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRUaWxlQmFja2Vu
ZChDb29yZGluYXRlZFRpbGVDbGllbnQqKTsKLSAgICBDb29yZGluYXRlZFRpbGVDbGllbnQqIG1f
Y2xpZW50OwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShU
SUxFRF9CQUNLSU5HX1NUT1JFKQotCi0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRUaWxlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQ4MmQzMmZjNmZmYzEwMmNmNmQ0YTY0M2Y1YzMyODc4NGQ2YjU3MWMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAy
MDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0
bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVk
U3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2lu
YWN0aXZpdHlJblNlY29uZHMoMCkKLXsKLSAgICBzdGF0aWMgdWludDMyX3QgbmV4dElEID0gMDsK
LSAgICBtX0lEID0gKytuZXh0SUQ7Ci0gICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28o
SW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOwotICAgIG1fc3VyZmFjZSA9IENvb3JkaW5h
dGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGZsYWdzKTsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50
bHksIGlmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIFVwZGF0ZUF0bGFzIGdpdmVzIHVwIGRy
YXdpbmcgYW55dGhpbmcgaW1wbGljaXRseS4KLSAgICBpZiAoIW1fY2xpZW50LT5jcmVhdGVVcGRh
dGVBdGxhcyhtX0lELCBtX3N1cmZhY2UpKQotICAgICAgICBtX3N1cmZhY2UuY2xlYXIoKTsKLX0K
LQotVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCi17Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAg
ICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOwotfQotCi12b2lkIFVwZGF0
ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYXJlYUFsbG9jYXRv
cikgewotICAgICAgICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2VuZXJhbEFyZWFB
bGxvY2F0b3Ioc2l6ZSgpKSk7Ci0gICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWluaW11bUFs
bG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVXBkYXRlQXRsYXM6
OmRpZFN3YXBCdWZmZXJzKCkKLXsKLSAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsKLX0KLQot
UGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25B
dmFpbGFibGVCdWZmZXIodWludDMyX3QmIGF0bGFzSUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNpemUsIEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzID0g
MDsKLSAgICBidWlsZExheW91dElmTmVlZGVkKCk7Ci0gICAgSW50UmVjdCByZWN0ID0gbV9hcmVh
QWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKTsKLQotICAgIC8vIE5vIGF2YWlsYWJsZSBidWZmZXIg
d2FzIGZvdW5kLCByZXR1cm5pbmcgbnVsbC4KLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKLQotICAgIGlmICghbV9z
dXJmYWNlKQotICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0K
LSAgICBhdGxhc0lEID0gbV9JRDsKLQotICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZl
cnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgotICAgIG9mZnNldCA9IHJlY3QubG9jYXRpb24o
KTsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX3N1cmZh
Y2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKLQotICAgIGlmIChzdXBwb3J0c0FscGhh
KCkpIHsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlQ29weSk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2
aWNlUkdCKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4
dC5yZWxlYXNlKCk7Ci19Ci0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0
ZUF0bGFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTg2M2I4NGQwZDhkYmFj
Y2JhZTM5YjEyZTIzNDE0ODMzODc2MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAK
LS8qCi0gQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotCi0g
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIFVwZGF0ZUF0bGFzX2gKLSNkZWZpbmUgVXBk
YXRlQXRsYXNfaAotCi0jaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkNvb3Jk
aW5hdGVkU3VyZmFjZS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKLWNsYXNzIEludFBvaW50OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVXBk
YXRlQXRsYXNDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVB
dGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkg
PSAwOwotfTsKLQotY2xhc3MgVXBkYXRlQXRsYXMgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFVwZGF0ZUF0bGFzKTsKLXB1YmxpYzoKLSAgICBVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVu
dCosIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOwotICAgIH5VcGRh
dGVBdGxhcygpOwotCi0gICAgaW5saW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3VyZmFjZS0+c2l6ZSgpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgbnVsbCBwb2lu
dGVyIG9mIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBidWZmZXIuCi0gICAgUGFzc093blB0cjxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcih1aW50
MzJfdCYgYXRsYXNJRCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50
JiBvZmZzZXQpOwotICAgIHZvaWQgZGlkU3dhcEJ1ZmZlcnMoKTsKLSAgICBib29sIHN1cHBvcnRz
QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKTsgfQotCi0g
ICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCi0gICAgewotICAgICAgICBB
U1NFUlQoIWlzSW5Vc2UoKSk7Ci0gICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyArPSBzZWNv
bmRzOwotICAgIH0KLSAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
Y29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7Ci0gICAgICAgIHJldHVy
biBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2U7Ci0gICAg
fQotICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9jYXRvcjsgfQot
Ci1wcml2YXRlOgotICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwotCi1wcml2YXRlOgot
ICAgIFVwZGF0ZUF0bGFzQ2xpZW50KiBtX2NsaWVudDsKLSAgICBPd25QdHI8R2VuZXJhbEFyZWFB
bGxvY2F0b3I+IG1fYXJlYUFsbG9jYXRvcjsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNl
PiBtX3N1cmZhY2U7Ci0gICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKLSAgICB1aW50
MzJfdCBtX0lEOwotfTsKLQotfQotI2VuZGlmCi0jZW5kaWYgLy8gVXBkYXRlQXRsYXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185922</attachid>
            <date>2013-01-31 20:37:21 -0800</date>
            <delta_ts>2013-01-31 23:34:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108149-20130131203449.patch</filename>
            <type>text/plain</type>
            <size>367796</size>
            <attacher name="Jae Hyun Park">jaepark</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTljMWM2ZTczMWQzYTk1
ZGUxNzEwZjk0YzlhNjVhOWM0YmQzN2JkYi4uNTIyM2M3MzBhMDBhNGYyOWEzN2JkYzExN2Q1NDU0
MzQzNGZhN2M2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTAxLTMxICBKYWUg
SHl1biBQYXJrICA8amFlLnBhcmtAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgQ29vcmRpbmF0
ZWQgR3JhcGhpY3MgOiBNb3ZlIENvb3JkaW5hdGVkR3JhcGhpY3MgcmVsYXRlZCBmaWxlcyB0byBX
ZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDgxNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIG1vdmVzIENvb3JkaW5hdGVkIEdyYXBoaWNzIHJlbGF0ZWQgY29kZSB0byBXZWJD
b3JlLiBUbworICAgICAgICBpbXBsZW1lbnQgVGhyZWFkZWQgQ29vcmRpbmF0ZWQgR3JhcGhpY3Ms
IG1vc3Qgb2YgQ29vcmRpYW50ZWQgR3JhcGhpY3MKKyAgICAgICAgY29kZSBzaG91bGQgYmUgc2hh
cmVkLiBUaGVyZWZvcmUsIHRoZXkgc2hvdWxkIHJlc2lkZSBpbiBXZWJDb3JlIGluc3RlYWQgb2YK
KyAgICAgICAgV2ViS2l0Mi4KKworICAgICAgICBXaGVuIG1vdmluZyB0byBXZWJDb3JlLCB0d28g
cmVuYW1pbmdzIGhhdmUgYmVlbiBkb25lLgorCisgICAgICAgIDEuIFJlbmFtZSBMYXllclRyZWVS
ZW5kZXJlciB0byBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUuCisKKyAgICAgICAgMi4gUmVuYW1l
IFdlYkN1c3RvbUZpbHRlclByb2dyYW0gYW5kIFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbiB0bwor
ICAgICAgICBDb29yZGluYXRlZEN1c3RvbUZpbHRlclByb2dyYW0gYW5kIENvb3JkaW5hdGVkQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLAorICAgICAgICByZXNwZWN0aXZlbHkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9BcmVhQWxsb2NhdG9yLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5o
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5jcHAuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9w
ZXJhdGlvbi5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xh
eWVyVHJlZVJlbmRlcmVyLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJl
ci5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZEltYWdlQmFja2luZy5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2lu
Zy5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29y
ZGluYXRlZExheWVySW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvU2hhcmVkL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllckluZm8uaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nv
b3JkaW5hdGVkU3VyZmFjZS5jcHAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkU3VyZmFjZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmguCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVk
VGlsZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUuY3BwLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkVGlsZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9TdXJmYWNlVXBkYXRlSW5mby5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvU3VyZmFjZVVwZGF0ZUluZm8uaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMu
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRs
YXMuaC4KKwogMjAxMy0wMS0zMSAgVmljdG9yIENhcmJ1bmUgIDx2Y2FyYnVuZUBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW1RyYWNrXSBDbG9zZWQgQ2FwdGlvbiBidXR0b24gc2hvdWxkbid0IGJl
IHZpc2libGUgaWYgYWxsIHRoZSB0cmFjayByZXNvdXJjZXMgaGF2ZSBmYWlsZWQgbG9hZGluZwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDQ1MzdkZjhmNjVhNGRjZWU5MWYwZTVmZTIyZGRjZGMwOTdhNmNhODUuLjEy
ODZlOTg0MmQ2MzZjYTNjNGRhM2RmZjBkNDYxODAyMTFmY2IxNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxMy0wMS0zMSAgSmFlIEh5dW4gUGFyayAgPGphZS5wYXJrQGNvbXBhbnkx
MDAubmV0PgorCisgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzIDogTW92ZSBDb29yZGluYXRl
ZEdyYXBoaWNzIHJlbGF0ZWQgZmlsZXMgdG8gV2ViQ29yZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBDb29yZGluYXRlZCBH
cmFwaGljcyByZWxhdGVkIGNvZGUgdG8gV2ViQ29yZS4gVG8KKyAgICAgICAgaW1wbGVtZW50IFRo
cmVhZGVkIENvb3JkaW5hdGVkIEdyYXBoaWNzLCBtb3N0IG9mIENvb3JkaWFudGVkIEdyYXBoaWNz
CisgICAgICAgIGNvZGUgc2hvdWxkIGJlIHNoYXJlZC4gVGhlcmVmb3JlLCB0aGV5IHNob3VsZCBy
ZXNpZGUgaW4gV2ViQ29yZSBpbnN0ZWFkIG9mCisgICAgICAgIFdlYktpdDIuCisKKyAgICAgICAg
V2hlbiBtb3ZpbmcgdG8gV2ViQ29yZSwgdHdvIHJlbmFtaW5ncyBoYXZlIGJlZW4gZG9uZS4KKwor
ICAgICAgICAxLiBSZW5hbWUgTGF5ZXJUcmVlUmVuZGVyZXIgdG8gQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lLgorCisgICAgICAgIDIuIFJlbmFtZSBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtIGFuZCBX
ZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24gdG8KKyAgICAgICAgQ29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJQcm9ncmFtIGFuZCBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbiwKKyAgICAgICAg
cmVzcGVjdGl2ZWx5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFNjcmlwdHMv
d2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAqIFNoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
OgorICAgICAgICAqIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVkU3Vy
ZmFjZS5oOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHA6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXcuY3BwOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3AuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHA6CisgICAgICAg
ICogVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
ZWZsL1BhZ2VDbGllbnRCYXNlLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3
cG9ydENvbnRyb2xsZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdl
YlBhZ2VTR05vZGUuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oOgorCiAyMDEzLTAx
LTMxICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CiAKICAgICAg
ICAgW1F0XVtXSzJdIEFub3RoZXIgYXR0ZW1wdCB0byBmaXggYnVpbGQgYWZ0ZXIgcmVjZW50IFdl
YktpdDIgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhZjI0OTQ1YTdhZmI2MDAwOTE0
NjdjODFjYTkwNGU0ZmZlNzkyNzE5Li4wZDcyY2EwZmRkYmM3ZmVlNTA4YWQ5NmEyZTEwY2RjYmZl
NGQ0OTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNTUsNiArNTUsOCBAQCBzZXQoV2ViQ29y
ZV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUi
CisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcCIKKyAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkIgogICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zIgogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wIgpAQCAtMTk4OCw2ICsxOTkwLDE0IEBAIHNldChXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9TcG90TGlnaHRTb3VyY2UuY3BwCiAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJm
YWNlLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZFRpbGUuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1Vw
ZGF0ZUF0bGFzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyQmFja2luZ1N0
b3JlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VC
dWZmZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBmODUwYWE3N2RlMDkxODVkYTUwYjBjOWE5ZDQzZDQz
N2VlYjQyNzQwLi5mYTg5M2E4MGJkMDBmMjRjZWFhOThjZjE3MThiOThiNWYyMzk5YjFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTIyNDEsNiArMjI0MSwxOCBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9zdXJmYWNlcy9HcmFwaGljc1N1cmZhY2UuaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNlVG9rZW4uaCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmggXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIFwK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZExheWVySW5mby5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmgg
XAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRp
bGUuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VV
cGRhdGVJbmZvLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9V
cGRhdGVBdGxhcy5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCBcCkBA
IC0yODc2LDYgKzI4ODgsMTQgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvUGF0aFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvUGF0dGVyblF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBcCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmUuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAgXAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZh
Y2UuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRUaWxlLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L1VwZGF0ZUF0bGFzLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNz
TGF5ZXJUZXh0dXJlTWFwcGVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckJhY2tpbmdTdG9yZS5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaAppbmRleCA4Zjc1ZjVmODY0M2UzOWYzM2Y0NWI2YTQxMzRmNjY2ZGIyZGM4ODY1Li42OTRi
NWEzMmRlNjEyYjQ3N2E3MDU5ZDAyMjkwY2MwMGJmMjAyZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhp
Y3NMYXllclRleHR1cmVNYXBwZXIuaApAQCAtODQsNyArODQsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIHNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOwogI2VuZGlmCiAK
LSAgICAvLyBGSVhNRTogSXQgd2lsbCBiZSByZW1vdmVkIGFmdGVyIHJlbW92aW5nIGRlcGVuZGVu
Y3kgb2YgTGF5ZXJUcmVlUmVuZGVyZXIgb24gR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuCisg
ICAgLy8gRklYTUU6IEl0IHdpbGwgYmUgcmVtb3ZlZCBhZnRlciByZW1vdmluZyBkZXBlbmRlbmN5
IG9mIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSBvbiBHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBl
ci4KICAgICB2b2lkIHNldEhhc093bkJhY2tpbmdTdG9yZShib29sIGIpIHsgbV9oYXNPd25CYWNr
aW5nU3RvcmUgPSBiOyB9CiAgICAgdm9pZCBzZXRCYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyQmFja2luZ1N0b3JlPik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxs
b2NhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZjU0MTg1Yjk4ZThhNzA4YTZkNmYxYWIyMDQ1ZDJiMTIz
NDgzNjAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsMzM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkFy
ZWFBbGxvY2F0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitBcmVhQWxsb2NhdG9yOjpB
cmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgOiBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fbWluQWxsb2MoMSwgMSkKKyAgICAsIG1fbWFyZ2luKDAsIDApCit7Cit9CisKK0FyZWFB
bGxvY2F0b3I6On5BcmVhQWxsb2NhdG9yKCkKK3sKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpl
eHBhbmQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBtX3NpemUgPSBtX3NpemUuZXhwYW5k
ZWRUbyhzaXplKTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpleHBhbmRCeShjb25zdCBJbnRT
aXplJiBzaXplKQoreworICAgIG1fc2l6ZSArPSBzaXplOworfQorCit2b2lkIEFyZWFBbGxvY2F0
b3I6OnJlbGVhc2UoY29uc3QgSW50UmVjdCYpCit7Cit9CisKK2ludCBBcmVhQWxsb2NhdG9yOjpv
dmVyaGVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFNpemUgQXJlYUFsbG9j
YXRvcjo6cm91bmRBbGxvY2F0aW9uKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAg
aW50IHdpZHRoID0gc2l6ZS53aWR0aCgpICsgbV9tYXJnaW4ud2lkdGgoKTsKKyAgICBpbnQgaGVp
Z2h0ID0gc2l6ZS5oZWlnaHQoKSArIG1fbWFyZ2luLmhlaWdodCgpOworICAgIGludCBleHRyYSA9
IHdpZHRoICUgbV9taW5BbGxvYy53aWR0aCgpOworICAgIGlmIChleHRyYSkKKyAgICAgICAgd2lk
dGggKz0gbV9taW5BbGxvYy53aWR0aCgpIC0gZXh0cmE7CisgICAgZXh0cmEgPSBoZWlnaHQgJSBt
X21pbkFsbG9jLmhlaWdodCgpOworICAgIGlmIChleHRyYSkKKyAgICAgICAgaGVpZ2h0ICs9IG1f
bWluQWxsb2MuaGVpZ2h0KCkgLSBleHRyYTsKKworICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpOworfQorCitHZW5lcmFsQXJlYUFsbG9jYXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0b3Io
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IEFyZWFBbGxvY2F0b3IobmV4dFBvd2VyT2ZUd28o
c2l6ZSkpCit7CisgICAgbV9yb290ID0gbmV3IE5vZGUoKTsKKyAgICBtX3Jvb3QtPnJlY3QgPSBJ
bnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgIG1fcm9v
dC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7CisgICAgbV9yb290LT5wYXJlbnQgPSAwOworICAgIG1f
cm9vdC0+bGVmdCA9IDA7CisgICAgbV9yb290LT5yaWdodCA9IDA7CisgICAgbV9ub2RlQ291bnQg
PSAxOworICAgIHNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoOCwgOCkpOworfQorCitHZW5l
cmFsQXJlYUFsbG9jYXRvcjo6fkdlbmVyYWxBcmVhQWxsb2NhdG9yKCkKK3sKKyAgICBmcmVlTm9k
ZShtX3Jvb3QpOworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9kZShOb2Rl
KiBub2RlKQoreworICAgIGlmIChub2RlKSB7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQp
OworICAgICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7CisgICAgfQorICAgIGRlbGV0ZSBub2Rl
OworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKK3sKKyAgICBBcmVhQWxsb2NhdG9yOjpleHBhbmQobmV4dFBvd2VyT2ZUd28oc2l6ZSkp
OworCisgICAgaWYgKG1fcm9vdC0+cmVjdC5zaXplKCkgPT0gbV9zaXplKQorICAgICAgICByZXR1
cm47IC8vIE5vIGNoYW5nZS4KKworICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9vdC0+bGFy
Z2VzdEZyZWUud2lkdGgoKSA+IDApIHsKKyAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBv
Y2N1cnJlZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KKyAgICAgICAgbV9yb290LT5y
ZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAg
ICAgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCByb290IHRvIGV4
cGFuZCB0aGUgdHJlZS4KKyAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OworICAgIFNwbGl0IHNw
bGl0OworICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAg
IHNwbGl0ID0gU3BsaXRPblg7CisgICAgZWxzZQorICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwor
CisgICAgd2hpbGUgKG1fcm9vdC0+cmVjdC5zaXplKCkgIT0gbV9zaXplKSB7CisgICAgICAgIGlm
IChtX3Jvb3QtPnJlY3Qud2lkdGgoKSA9PSBtX3NpemUud2lkdGgoKSkKKyAgICAgICAgICAgIHNw
bGl0ID0gU3BsaXRPblk7CisgICAgICAgIGVsc2UgaWYgKG1fcm9vdC0+cmVjdC5oZWlnaHQoKSA9
PSBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAg
ICBOb2RlKiBwYXJlbnQgPSBuZXcgTm9kZSgpOworICAgICAgICBOb2RlKiByaWdodCA9IG5ldyBO
b2RlKCk7CisgICAgICAgIG1fbm9kZUNvdW50ICs9IDI7CisgICAgICAgIG1fcm9vdC0+cGFyZW50
ID0gcGFyZW50OworICAgICAgICBwYXJlbnQtPnBhcmVudCA9IDA7CisgICAgICAgIHBhcmVudC0+
bGVmdCA9IG1fcm9vdDsKKyAgICAgICAgcGFyZW50LT5yaWdodCA9IHJpZ2h0OworICAgICAgICBw
YXJlbnQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKKyAgICAgICAgcmlnaHQt
PnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcmlnaHQtPmxlZnQgPSAwOworICAgICAgICByaWdo
dC0+cmlnaHQgPSAwOworICAgICAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Qu
c2l6ZSgpOworICAgICAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAgICAgICAgICAgIHBh
cmVudC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSwK
KyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSAqIDIsIG1fcm9vdC0+cmVjdC5o
ZWlnaHQoKSk7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0
LngoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAg
ICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGFyZW50LT5yZWN0ID0gSW50UmVjdChtX3Jvb3Qt
PnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVj
dC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgKiAyKTsKKyAgICAgICAgICAgIHJpZ2h0
LT5yZWN0ID0gSW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpICsgbV9y
b290LT5yZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCks
IG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIH0KKyAgICAgICAgc3BsaXQgPSAoc3Bs
aXQgPT0gU3BsaXRPblggPyBTcGxpdE9uWSA6IFNwbGl0T25YKTsKKyAgICAgICAgbV9yb290ID0g
cGFyZW50OworICAgIH0KKyAgICB1cGRhdGVMYXJnZXN0RnJlZShvbGRSb290KTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIGZpdHNXaXRoaW4oY29uc3QgSW50U2l6ZSYgc2l6ZTEsIGNvbnN0IElu
dFNpemUmIHNpemUyKQoreworICAgIHJldHVybiBzaXplMS53aWR0aCgpIDw9IHNpemUyLndpZHRo
KCkgJiYgc2l6ZTEuaGVpZ2h0KCkgPD0gc2l6ZTIuaGVpZ2h0KCk7Cit9CisKK0ludFJlY3QgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
SW50U2l6ZSByb3VuZGVkID0gcm91bmRBbGxvY2F0aW9uKHNpemUpOworICAgIHJvdW5kZWQgPSBu
ZXh0UG93ZXJPZlR3byhyb3VuZGVkKTsKKyAgICBpZiAocm91bmRlZC53aWR0aCgpIDw9IDAgfHwg
cm91bmRlZC53aWR0aCgpID4gbV9zaXplLndpZHRoKCkKKyAgICAgICAgfHwgcm91bmRlZC5oZWln
aHQoKSA8PSAwIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5v
ZGUocm91bmRlZCwgbV9yb290KTsKKyAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KHBvaW50LCBzaXplKTsKKyAgICByZXR1cm4gSW50UmVjdCgpOworfQorCitJ
bnRQb2ludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGVGcm9tTm9kZShjb25zdCBJbnRT
aXplJiBzaXplLCBOb2RlKiBub2RlKQoreworICAgIC8vIEZpbmQgdGhlIGJlc3Qgbm9kZSB0byBp
bnNlcnQgaW50bywgd2hpY2ggc2hvdWxkIGJlCisgICAgLy8gYSBub2RlIHdpdGggdGhlIGxlYXN0
IGFtb3VudCBvZiB1bnVzZWQgc3BhY2UgdGhhdCBpcworICAgIC8vIGJpZyBlbm91Z2ggdG8gY29u
dGFpbiB0aGUgcmVxdWVzdGVkIHNpemUuCisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgLy8g
R28gZG93biBhIGxldmVsIGFuZCBkZXRlcm1pbmUgaWYgdGhlIGxlZnQgb3IgcmlnaHQKKyAgICAg
ICAgLy8gc3ViLXRyZWUgY29udGFpbnMgdGhlIGJlc3QgY2hhbmNlIG9mIGFsbG9jYXRpb24uCisg
ICAgICAgIE5vZGUqIGxlZnQgPSBub2RlLT5sZWZ0OworICAgICAgICBOb2RlKiByaWdodCA9IG5v
ZGUtPnJpZ2h0OworICAgICAgICBpZiAobGVmdCAmJiBmaXRzV2l0aGluKHNpemUsIGxlZnQtPmxh
cmdlc3RGcmVlKSkgeworICAgICAgICAgICAgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwg
cmlnaHQtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5sYXJnZXN0
RnJlZS53aWR0aCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLndpZHRoKCkKKyAgICAgICAgICAgICAg
ICAgICAgfHwgbGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkgPCByaWdodC0+bGFyZ2VzdEZyZWUu
aGVpZ2h0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhcmdlc3RGcmVlIHZhbHVl
cyBtYXkgYmUgYSBsaXR0bGUgb3ZlcnNpemVkLAorICAgICAgICAgICAgICAgICAgICAvLyBzbyB0
cnkgdGhlIGxlZnQgc3ViLXRyZWUgYW5kIHRoZW4gdGhlIHJpZ2h0IHN1Yi10cmVlLgorICAgICAg
ICAgICAgICAgICAgICBJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5vZGUoc2l6ZSwgbGVm
dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gMCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlRnJvbU5vZGUoc2l6ZSwgcmlnaHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBub2RlID0gcmlnaHQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBub2RlID0gbGVmdDsKKyAgICAgICAgfSBlbHNlIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNp
emUsIHJpZ2h0LT5sYXJnZXN0RnJlZSkpCisgICAgICAgICAgICBub2RlID0gcmlnaHQ7CisgICAg
ICAgIGVsc2UgaWYgKGxlZnQgfHwgcmlnaHQpIHsKKyAgICAgICAgICAgIC8vIE5laXRoZXIgc3Vi
LW5vZGUgaGFzIGVub3VnaCBzcGFjZSB0byBhbGxvY2F0ZSBmcm9tLgorICAgICAgICAgICAgcmV0
dXJuIEludFBvaW50KC0xLCAtMSk7CisgICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihzaXpl
LCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgIC8vIERvIHdlIG5lZWQgdG8gc3Bs
aXQgdGhpcyBub2RlIGludG8gc21hbGxlciBwaWVjZXM/CisgICAgICAgICAgICBTcGxpdCBzcGxp
dDsKKyAgICAgICAgICAgIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwg
c2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBTcGxpdCBpbiBlaXRoZXIgZGlyZWN0aW9uOiBjaG9vc2UgdGhlIGludmVyc2Ugb2YKKyAg
ICAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUncyBzcGxpdCBkaXJlY3Rpb24gdG8gdHJ5
IHRvIGJhbGFuY2UKKyAgICAgICAgICAgICAgICAvLyBvdXQgdGhlIHdhc3RlZCBzcGFjZSBhcyBm
dXJ0aGVyIHN1YmRpdmlzaW9ucyBoYXBwZW4uCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBh
cmVudAorICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5wYXJlbnQtPmxlZnQtPnJlY3QueCgp
ID09IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3QueCgpKQorICAgICAgICAgICAgICAgICAgICBz
cGxpdCA9IFNwbGl0T25YOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnBhcmVudCkK
KyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChub2RlLT5yZWN0LndpZHRoKCkgPj0gbm9kZS0+cmVjdC5oZWlnaHQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGZpdHNXaXRoaW4oSW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBzaXplLmhlaWdodCgpKSwg
bm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3BsaXQgYWxvbmcgdGhl
IFggZGlyZWN0aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oSW50U2l6ZShzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3Bs
aXQgYWxvbmcgdGhlIFkgZGlyZWN0aW9uLgorICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRP
blk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIENhbm5vdCBzcGxp
dCBmdXJ0aGVyIC0gYWxsb2NhdGUgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgIG5vZGUtPmxh
cmdlc3RGcmVlID0gSW50U2l6ZSgwLCAwKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVMYXJnZXN0
RnJlZShub2RlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS0+cmVjdC5sb2NhdGlvbigp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTcGxpdCB0aGUgbm9kZSwgdGhlbiBn
byBhcm91bmQgYWdhaW4gdXNpbmcgdGhlIGxlZnQgc3ViLXRyZWUuCisgICAgICAgICAgICBub2Rl
ID0gc3BsaXROb2RlKG5vZGUsIHNwbGl0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIENhbm5vdCBwb3NzaWJseSBmaXQgaW50byB0aGlzIG5vZGUuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gSW50UG9pbnQoLTEsIC0xKTsKK30KKwor
R2VuZXJhbEFyZWFBbGxvY2F0b3I6Ok5vZGUqIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5v
ZGUKKyAgICAoTm9kZSogbm9kZSwgU3BsaXQgc3BsaXQpCit7CisgICAgTm9kZSogbGVmdCA9IG5l
dyBOb2RlKCk7CisgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOworICAgIG1fbm9kZUNvdW50
ICs9IDI7CisgICAgbGVmdC0+cGFyZW50ID0gbm9kZTsKKyAgICBsZWZ0LT5sZWZ0ID0gMDsKKyAg
ICBsZWZ0LT5yaWdodCA9IDA7CisgICAgcmlnaHQtPnBhcmVudCA9IG5vZGU7CisgICAgcmlnaHQt
PmxlZnQgPSAwOworICAgIHJpZ2h0LT5yaWdodCA9IDA7CisgICAgbm9kZS0+bGVmdCA9IGxlZnQ7
CisgICAgbm9kZS0+cmlnaHQgPSByaWdodDsKKworICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkg
eworICAgICAgICBsZWZ0LT5yZWN0ID0gSW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVj
dC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0Lmhl
aWdodCgpKTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KGxlZnQtPnJlY3QubWF4WCgp
LCBub2RlLT5yZWN0LnkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5v
ZGUtPnJlY3QuaGVpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxlZnQtPnJlY3QgPSBJ
bnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKKyAgICAgICAgICAgIG5vZGUt
PnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOworICAgICAgICByaWdodC0+
cmVjdCA9IEludFJlY3Qobm9kZS0+cmVjdC54KCksIGxlZnQtPnJlY3QubWF4WSgpLAorICAgICAg
ICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7CisgICAg
fQorCisgICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5yZWN0LnNpemUoKTsKKyAgICByaWdo
dC0+bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7CisgICAgbm9kZS0+bGFyZ2VzdEZy
ZWUgPSByaWdodC0+bGFyZ2VzdEZyZWU7CisgICAgcmV0dXJuIGxlZnQ7Cit9CisKK3ZvaWQgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqIG5vZGUpCit7CisgICAg
d2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgeworICAgICAgICBub2RlLT5sYXJnZXN0RnJl
ZSA9IEludFNpemUoCisgICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJl
ZS53aWR0aCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKSksCisgICAgICAgICAg
ICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSwgbm9kZS0+cmlnaHQt
Pmxhcmdlc3RGcmVlLmhlaWdodCgpKQorICAgICAgICAgICAgKTsKKyAgICB9Cit9CisKK3ZvaWQg
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICAvLyBMb2NhdGUgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4K
KyAgICBOb2RlKiBub2RlID0gbV9yb290OworICAgIEludFBvaW50IHBvaW50ID0gcmVjdC5sb2Nh
dGlvbigpOworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIGlmIChub2RlLT5sZWZ0ICYmIG5v
ZGUtPmxlZnQtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PmxlZnQ7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT5yZWN0
LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKKyAgICAg
ICAgZWxzZSBpZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2ludCBpcyBjb21wbGV0
ZWx5IG91dHNpZGUgdGhlIHRyZWUuCisgICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVuIHdvcmsgdXB3YXJk
cyB0aHJvdWdoIHRoZSB0cmVlCisgICAgLy8gcmVjb21iaW5pbmcgYW5kIGRlbGV0aW5nIG5vZGVz
IHVudGlsIHdlIHJlYWNoIGEgc2libGluZworICAgIC8vIHRoYXQgaXMgc3RpbGwgYWxsb2NhdGVk
LgorICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7CisgICAgd2hpbGUg
KG5vZGUtPnBhcmVudCkgeworICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0ID09IG5vZGUp
IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJnZXN0RnJlZSAhPSBu
b2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQtPmxh
cmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKKyAg
ICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0
KTsKKyAgICAgICAgbV9ub2RlQ291bnQgLT0gMjsKKyAgICAgICAgbm9kZS0+bGVmdCA9IDA7Cisg
ICAgICAgIG5vZGUtPnJpZ2h0ID0gMDsKKyAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2Rl
LT5yZWN0LnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHRoZSByZXN0IG9mIG91ciBhbmNl
c3RvcnMgaGF2ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBmcmVlIHNpemUiLgorICAgIHVwZGF0ZUxh
cmdlc3RGcmVlKG5vZGUpOworfQorCitpbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQx
ODBjYWUyMzc3NTBmNmZhMzQzYjBiYzdmMmE5MzA5MzkwOGQzMmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJl
YUFsbG9jYXRvci5oCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgQXJlYUFsbG9jYXRvcl9oCisjZGVmaW5lIEFyZWFB
bGxvY2F0b3JfaAorCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51
bWJlcikKK3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZU
d28gZm9yIGFuIGludGVnZXIuCisgICAgLS1udW1iZXI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+
PiAxOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+
IDQ7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OworICAgIG51bWJlciB8PSBudW1iZXIgPj4g
MTY7CisgICAgbnVtYmVyKys7CisgICAgcmV0dXJuIG51bWJlcjsKK30KKworaW5saW5lIEludFNp
emUgbmV4dFBvd2VyT2ZUd28oY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50
U2l6ZShuZXh0UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhl
aWdodCgpKSk7Cit9CisKK2NsYXNzIEFyZWFBbGxvY2F0b3IgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgfkFyZWFBbGxv
Y2F0b3IoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQor
CisgICAgSW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxs
b2M7IH0KKyAgICB2b2lkIHNldE1pbmltdW1BbGxvY2F0aW9uKGNvbnN0IEludFNpemUmIHNpemUp
IHsgbV9taW5BbGxvYyA9IHNpemU7IH0KKworICAgIEludFNpemUgbWFyZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXJnaW47IH0KKyAgICB2b2lkIHNldE1hcmdpbihjb25zdCBJbnRTaXplICZtYXJn
aW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0KKworICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29u
c3QgSW50U2l6ZSYpOworICAgIHZvaWQgZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYpOworCisgICAg
dmlydHVhbCBJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IEludFNpemUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2UoY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBpbnQgb3Zlcmhl
YWQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEludFNpemUgbV9zaXplOworICAgIEludFNp
emUgbV9taW5BbGxvYzsKKyAgICBJbnRTaXplIG1fbWFyZ2luOworCisgICAgSW50U2l6ZSByb3Vu
ZEFsbG9jYXRpb24oY29uc3QgSW50U2l6ZSYpIGNvbnN0OworfTsKKworY2xhc3MgR2VuZXJhbEFy
ZWFBbGxvY2F0b3IgOiBwdWJsaWMgQXJlYUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgfkdl
bmVyYWxBcmVhQWxsb2NhdG9yKCk7CisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBJbnRTaXplJik7
CisgICAgSW50UmVjdCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCByZWxlYXNl
KGNvbnN0IEludFJlY3QmKTsKKyAgICBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBlbnVtIFNwbGl0IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07CisKKyAgICBzdHJ1Y3QgTm9k
ZSB7CisgICAgICAgIEludFJlY3QgcmVjdDsKKyAgICAgICAgSW50U2l6ZSBsYXJnZXN0RnJlZTsK
KyAgICAgICAgTm9kZSogcGFyZW50OworICAgICAgICBOb2RlKiBsZWZ0OworICAgICAgICBOb2Rl
KiByaWdodDsKKyAgICB9OworCisgICAgTm9kZSogbV9yb290OworICAgIGludCBtX25vZGVDb3Vu
dDsKKworICAgIHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUqKTsKKyAgICBJbnRQb2ludCBhbGxv
Y2F0ZUZyb21Ob2RlKGNvbnN0IEludFNpemUmLCBOb2RlKik7CisgICAgTm9kZSogc3BsaXROb2Rl
KE5vZGUqLCBTcGxpdCk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSop
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQXJlYUFsbG9jYXRvcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NWRhMmI4ZmI1ZjRhOGQ5ZDJjOTg3OWU5M2FjYjg1YzBmM2M5YjhiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVk
L0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyBDb3B5
cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCisjaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlckdMLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZVRpbGU6OnN3YXBCdWZmZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIp
Cit7CisgICAgaWYgKCFtX3N1cmZhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZsb2F0UmVj
dCB0aWxlUmVjdChtX3RpbGVSZWN0KTsKKyAgICB0aWxlUmVjdC5zY2FsZSgxLiAvIG1fc2NhbGUp
OworICAgIGJvb2wgc2hvdWxkUmVzZXQgPSBmYWxzZTsKKyAgICBpZiAodGlsZVJlY3QgIT0gcmVj
dCgpKSB7CisgICAgICAgIHNldFJlY3QodGlsZVJlY3QpOworICAgICAgICBzaG91bGRSZXNldCA9
IHRydWU7CisgICAgfQorICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gdGhpcy0+
dGV4dHVyZSgpOworICAgIGlmICghdGV4dHVyZSkgeworICAgICAgICB0ZXh0dXJlID0gdGV4dHVy
ZU1hcHBlci0+Y3JlYXRlVGV4dHVyZSgpOworICAgICAgICBzZXRUZXh0dXJlKHRleHR1cmUuZ2V0
KCkpOworICAgICAgICBzaG91bGRSZXNldCA9IHRydWU7CisgICAgfQorCisgICAgQVNTRVJUKHRl
eHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkud2lkdGgoKSA+PSBtX3RpbGVSZWN0LnNpemUo
KS53aWR0aCgpICYmIHRleHR1cmVNYXBwZXItPm1heFRleHR1cmVTaXplKCkuaGVpZ2h0KCkgPj0g
bV90aWxlUmVjdC5zaXplKCkuaGVpZ2h0KCkpOworICAgIGlmIChzaG91bGRSZXNldCkKKyAgICAg
ICAgdGV4dHVyZS0+cmVzZXQobV90aWxlUmVjdC5zaXplKCksIG1fc3VyZmFjZS0+c3VwcG9ydHNB
bHBoYSgpKTsKKworICAgIG1fc3VyZmFjZS0+Y29weVRvVGV4dHVyZSh0ZXh0dXJlLCBtX3NvdXJj
ZVJlY3QsIG1fc3VyZmFjZU9mZnNldCk7CisgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK3Zv
aWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlOjpzZXRCYWNrQnVmZmVyKGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBQYXNzUmVmUHRyPENvb3Jk
aW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIG1f
c291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7CisgICAgbV90aWxlUmVjdCA9IHRpbGVSZWN0OworICAg
IG1fc3VyZmFjZU9mZnNldCA9IG9mZnNldDsKKyAgICBtX3N1cmZhY2UgPSBidWZmZXI7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OmNyZWF0ZVRpbGUodWludDMyX3QgaWQsIGZs
b2F0IHNjYWxlKQoreworICAgIG1fdGlsZXMuYWRkKGlkLCBDb29yZGluYXRlZEJhY2tpbmdTdG9y
ZVRpbGUoc2NhbGUpKTsKKyAgICBtX3NjYWxlID0gc2NhbGU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OnJlbW92ZVRpbGUodWludDMyX3QgaWQpCit7CisgICAgQVNTRVJUKG1f
dGlsZXMuY29udGFpbnMoaWQpKTsKKyAgICBtX3RpbGVzVG9SZW1vdmUuYWRkKGlkKTsKK30KKwor
dm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlQWxsVGlsZXMoKQoreworICAgIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQo
KTsKKyAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgbV90aWxlc1RvUmVt
b3ZlLmFkZChpdC0+a2V5KTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dXBk
YXRlVGlsZSh1aW50MzJfdCBpZCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgdGlsZVJlY3QsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBiYWNrQnVmZmVy
LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
VGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmZpbmQoaWQpOworICAgIEFTU0VSVChpdCAh
PSBtX3RpbGVzLmVuZCgpKTsKKyAgICBpdC0+dmFsdWUuc2V0QmFja0J1ZmZlcih0aWxlUmVjdCwg
c291cmNlUmVjdCwgYmFja0J1ZmZlciwgb2Zmc2V0KTsKK30KKworUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6dGV4dHVyZSgpIGNvbnN0Cit7CisgICAg
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3Rp
bGVzLmVuZCgpOworICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlID0gaXQtPnZhbHVlLnRleHR1cmUoKTsK
KyAgICAgICAgaWYgKHRleHR1cmUpCisgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTsKKyAgICB9
CisKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPigpOworfQorCit2b2lkIENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjpzZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3sK
KyAgICBtX3NpemUgPSBzaXplOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpw
YWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+JiB0aWxl
cywgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSogbWFzaywgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIHRpbGVzW2ldLT5wYWludCh0ZXh0dXJlTWFwcGVyLCB0cmFuc2Zv
cm0sIG9wYWNpdHksIG1hc2ssIGNhbGN1bGF0ZUV4cG9zZWRUaWxlRWRnZXMocmVjdCwgdGlsZXNb
aV0tPnJlY3QoKSkpOworfQorCitUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDb29yZGluYXRlZEJhY2tp
bmdTdG9yZTo6YWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0
UmVjdCkKK3sKKyAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJlY3RUb1JlY3QocmVj
dCgpLCB0YXJnZXRSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6cGFp
bnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
LCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJlKiBtYXNrKQoreworICAgIGlmIChtX3RpbGVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghbV9zaXplLmlzWmVybygp
KTsKKworICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHRpbGVzVG9QYWludDsKKyAgICBW
ZWN0b3I8VGV4dHVyZU1hcHBlclRpbGUqPiBwcmV2aW91c1RpbGVzVG9QYWludDsKKworICAgIC8v
IFdlIGhhdmUgdG8gZG8gdGhpcyBldmVyeSB0aW1lIHdlIHBhaW50LCBpbiBjYXNlIHRoZSBvcGFj
aXR5IGhhcyBjaGFuZ2VkLgorICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRl
cmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBGbG9hdFJlY3QgY292ZXJlZFJlY3Q7Cisg
ICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90
aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlJiB0aWxlID0gaXQtPnZhbHVlOworICAgICAgICBpZiAoIXRpbGUudGV4dHVy
ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHRpbGUuc2NhbGUoKSA9
PSBtX3NjYWxlKSB7CisgICAgICAgICAgICB0aWxlc1RvUGFpbnQuYXBwZW5kKCZ0aWxlKTsKKyAg
ICAgICAgICAgIGNvdmVyZWRSZWN0LnVuaXRlKHRpbGUucmVjdCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT25seSBzaG93IHRoZSBwcmV2aW91cyB0
aWxlIGlmIHRoZSBvcGFjaXR5IGlzIGhpZ2gsIG90aGVyd2lzZSBlZmZlY3QgbG9va3MgbGlrZSBh
IGJ1Zy4KKyAgICAgICAgLy8gV2Ugc2hvdyB0aGUgcHJldmlvdXMtc2NhbGUgdGlsZSBhbnl3YXkg
aWYgaXQgZG9lc24ndCBpbnRlcnNlY3Qgd2l0aCBhbnkgY3VycmVudC1zY2FsZSB0aWxlLgorICAg
ICAgICBpZiAob3BhY2l0eSA8IDAuOTUgJiYgY292ZXJlZFJlY3QuaW50ZXJzZWN0cyh0aWxlLnJl
Y3QoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBwcmV2aW91c1RpbGVzVG9Q
YWludC5hcHBlbmQoJnRpbGUpOworICAgIH0KKworICAgIC8vIHRhcmdldFJlY3QgaXMgb24gdGhl
IGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLCBzbyB3ZSBtdXN0IGNvbXBhcmUgdHdvIHJlY3Rz
IG9uIHRoZSBjb250ZW50cyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAvLyBTZWUgVGlsZWRCYWNr
aW5nU3RvcmUuCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0
cmFuc2Zvcm0gKiBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7CisKKyAgICBw
YWludFRpbGVzVG9UZXh0dXJlTWFwcGVyKHByZXZpb3VzVGlsZXNUb1BhaW50LCB0ZXh0dXJlTWFw
cGVyLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywgcmVjdCgpKTsKKyAgICBwYWlu
dFRpbGVzVG9UZXh0dXJlTWFwcGVyKHRpbGVzVG9QYWludCwgdGV4dHVyZU1hcHBlciwgYWRqdXN0
ZWRUcmFuc2Zvcm0sIG9wYWNpdHksIG1hc2ssIHJlY3QoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmU6OmRyYXdCb3JkZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwg
Y29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBmbG9hdCBib3JkZXJXaWR0aCwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQor
eworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3Jt
ICogYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0KHRhcmdldFJlY3QpOworICAgIENvb3JkaW5hdGVk
QmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBm
b3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd0Jv
cmRlcihib3JkZXJDb2xvciwgYm9yZGVyV2lkdGgsIGl0LT52YWx1ZS5yZWN0KCksIGFkanVzdGVk
VHJhbnNmb3JtKTsKK30KKwordm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6ZHJhd1JlcGFp
bnRDb3VudGVyKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIGludCByZXBhaW50Q291bnQs
IGNvbnN0IENvbG9yJiBib3JkZXJDb2xvciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQoreworICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGFkanVzdGVkVHJhbnNmb3JtID0gdHJhbnNmb3JtICogYWRqdXN0ZWRUcmFuc2Zv
cm1Gb3JSZWN0KHRhcmdldFJlY3QpOworICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1h
cDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKKyAgICBmb3IgKENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKKyAgICAgICAgdGV4dHVyZU1hcHBlci0+ZHJhd1JlcGFpbnRDb3VudGVyKHJlcGFp
bnRDb3VudCwgYm9yZGVyQ29sb3IsIGl0LT52YWx1ZS5yZWN0KCkubG9jYXRpb24oKSwgYWRqdXN0
ZWRUcmFuc2Zvcm0pOworfQorCit2b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjb21taXRU
aWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyKQoreworICAgIEhhc2hT
ZXQ8dWludDMyX3Q+OjppdGVyYXRvciB0aWxlc1RvUmVtb3ZlRW5kID0gbV90aWxlc1RvUmVtb3Zl
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDx1aW50MzJfdD46Oml0ZXJhdG9yIGl0ID0gbV90aWxl
c1RvUmVtb3ZlLmJlZ2luKCk7IGl0ICE9IHRpbGVzVG9SZW1vdmVFbmQ7ICsraXQpCisgICAgICAg
IG1fdGlsZXMucmVtb3ZlKCppdCk7CisgICAgbV90aWxlc1RvUmVtb3ZlLmNsZWFyKCk7CisKKyAg
ICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6Oml0ZXJhdG9yIHRpbGVzRW5kID0gbV90
aWxlcy5lbmQoKTsKKyAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IHRpbGVzRW5kOyArK2l0KQorICAgICAg
ICBpdC0+dmFsdWUuc3dhcEJ1ZmZlcnModGV4dHVyZU1hcHBlcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUzMzZkNzFmYzhmMzU4ZWU4Y2IxMmY1ZmYwZGUwYzdmZjdmM2E5OTcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaApAQCAtMCwwICsxLDg3IEBACisvKgorIENvcHly
aWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZV9oCisjZGVmaW5lIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKKworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENvb3JkaW5hdGVkU3VyZmFjZTsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
IDogcHVibGljIFRleHR1cmVNYXBwZXJUaWxlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUoZmxvYXQgc2NhbGUgPSAxKQorICAgICAgICA6IFRleHR1
cmVNYXBwZXJUaWxlKEZsb2F0UmVjdCgpKQorICAgICAgICAsIG1fc2NhbGUoc2NhbGUpCisgICAg
eworICAgIH0KKworICAgIGlubGluZSBmbG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nh
bGU7IH0KKyAgICB2b2lkIHN3YXBCdWZmZXJzKFRleHR1cmVNYXBwZXIqKTsKKyAgICB2b2lkIHNl
dEJhY2tCdWZmZXIoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmLCBQYXNzUmVmUHRyPENv
b3JkaW5hdGVkU3VyZmFjZT4gYnVmZmVyLCBjb25zdCBJbnRQb2ludCYpOworCitwcml2YXRlOgor
ICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAgICBJbnRSZWN0IG1f
c291cmNlUmVjdDsKKyAgICBJbnRSZWN0IG1fdGlsZVJlY3Q7CisgICAgSW50UG9pbnQgbV9zdXJm
YWNlT2Zmc2V0OworICAgIGZsb2F0IG1fc2NhbGU7Cit9OworCitjbGFzcyBDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZSA6IHB1YmxpYyBUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlIHsKK3B1YmxpYzoK
KyAgICB2b2lkIGNyZWF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBmbG9hdCk7CisgICAgdm9pZCBy
ZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCByZW1vdmVBbGxUaWxlcygpOwor
ICAgIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IEludFJlY3QmLCBjb25z
dCBJbnRSZWN0JiwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+LCBjb25zdCBJbnRQb2lu
dCYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUpOyB9Cisg
ICAgdm9pZCBjb21taXRUaWxlT3BlcmF0aW9ucyhUZXh0dXJlTWFwcGVyKik7CisgICAgUGFzc1Jl
ZlB0cjxCaXRtYXBUZXh0dXJlPiB0ZXh0dXJlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCwgQml0bWFwVGV4dHVyZSopOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Qm9yZGVy
KFRleHR1cmVNYXBwZXIqLCBjb25zdCBDb2xvciYsIGZsb2F0IGJvcmRlcldpZHRoLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoVGV4dHVyZU1hcHBlciosIGludCByZXBhaW50
Q291bnQsIGNvbnN0IENvbG9yJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmKSBPVkVSUklERTsKKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZEJhY2tpbmdT
dG9yZSgpCisgICAgICAgIDogbV9zY2FsZSgxLikKKyAgICB7IH0KKyAgICB2b2lkIHBhaW50VGls
ZXNUb1RleHR1cmVNYXBwZXIoVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4mLCBUZXh0dXJlTWFw
cGVyKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgQml0bWFwVGV4dHVyZSos
IGNvbnN0IEZsb2F0UmVjdCYpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGFkanVzdGVkVHJh
bnNmb3JtRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICBGbG9hdFJlY3QgcmVjdCgpIGNv
bnN0IHsgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIG1fc2l6ZSk7IH0KKwor
ICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50MzJfdCwgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxl
PiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA7CisgICAgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmVUaWxlTWFwIG1fdGlsZXM7CisgICAgSGFzaFNldDx1aW50MzJfdD4gbV90aWxlc1RvUmVt
b3ZlOworICAgIEZsb2F0U2l6ZSBtX3NpemU7CisgICAgZmxvYXQgbV9zY2FsZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjAyMWIwYjQ5NmVhY2M2YmRhMmZlNmQ1MDllZTNmNjNmODg5MGRjMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbi5oCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisg
KiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb29yZGluYXRl
ZEN1c3RvbUZpbHRlck9wZXJhdGlvbl9oCisjZGVmaW5lIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uX2gKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21G
aWx0ZXJPcGVyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGNsYXNz
IGlzIG9ubHkgYWRkaW5nIHRoZSBwcm9ncmFtSWQgb24gdG9wIG9mIEN1c3RvbUZpbHRlck9wZXJh
dGlvbi4gVGhlIGFyZ3VtZW50IGRlY29kZXIgaGFzIG5vCisvLyBjb250ZXh0LCBzbyB3ZSBjYW5u
b3Qgc2VhcmNoIGluIG91ciBjYWNoZWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbXMgd2hpbGUgZGVjb2Rp
bmcuIEluIHRoYXQgY2FzZQorLy8gaXQgd2lsbCBqdXN0IHN0b3JlIHRoZSBwcm9ncmFtSWQgYW5k
IG5vIEN1c3RvbUZpbHRlclByb2dyYW0gaW5zdGFuY2UuIFRoZSByZWNlaXZlciBpcyBzdXBwb3Nl
ZCB0bworLy8gaXRlcmF0ZSBvbiB0aGlzIHN0cnVjdHVyZSBhbmQgaW5qZWN0IHRoZSByaWdodCBD
dXN0b21GaWx0ZXJQcm9ncmFtcy4KKworY2xhc3MgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVy
YXRpb24gOiBwdWJsaWMgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbj4gY3JlYXRlKFBh
c3NSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSwgaW50IHByb2dyYW1JRCwgY29u
c3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQg
bWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNo
VHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRDdXN0
b21GaWx0ZXJPcGVyYXRpb24ocHJvZ3JhbSwgcHJvZ3JhbUlELCBzb3J0ZWRQYXJhbWV0ZXJzLCBt
ZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBlKSk7CisgICAgfQorCisgICAgaW50IHByb2dy
YW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3JhbUlEOyB9CisKK3ByaXZhdGU6CisgICAgQ29v
cmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24oUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQcm9n
cmFtPiBwcm9ncmFtLCBpbnQgcHJvZ3JhbUlELCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0JiBzb3J0ZWRQYXJhbWV0ZXJzLCB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENv
bHVtbnMsIEN1c3RvbUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQorICAgICAgICA6IEN1c3RvbUZp
bHRlck9wZXJhdGlvbihwcm9ncmFtLCBzb3J0ZWRQYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENv
bHVtbnMsIG1lc2hUeXBlKQorICAgICAgICAsIG1fcHJvZ3JhbUlEKHByb2dyYW1JRCkKKyAgICB7
CisgICAgfQorCisgICAgaW50IG1fcHJvZ3JhbUlEOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQorCisjZW5kaWYgLy8gQ29vcmRp
bmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL0Nvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZh
NDliMWJlYTVkZjJkYmFlMWMxNTNkNTQyNzgwM2ZlNTQxMTU5NTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCisjZGVm
aW5lIENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbV9oCisKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpICYmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtIDog
cHVibGljIEN1c3RvbUZpbHRlclByb2dyYW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbT4gY3JlYXRlKFN0cmluZyB2ZXJ0ZXhT
aGFkZXJTdHJpbmcsIFN0cmluZyBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nLCBDdXN0b21GaWx0ZXJQ
cm9ncmFtVHlwZSBwcm9ncmFtVHlwZSwgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1peFNldHRpbmdzIG1p
eFNldHRpbmdzLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtKHZlcnRl
eFNoYWRlclN0cmluZywgbV9mcmFnbWVudFNoYWRlclN0cmluZywgcHJvZ3JhbVR5cGUsIG1peFNl
dHRpbmdzLCBtZXNoVHlwZSkpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRlZCgp
IGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW0mIG8pIGNvbnN0IE9WRVJSSURFCisgICAg
eworICAgICAgICAvLyBXZSBkb24ndCB1c2UgdGhlICE9IG9wZXJhdG9yIGJlY2F1c2UgdGhhdCB3
b3VsZCByZWN1cnNpdmVseSBjYWxsIHRoaXMgbWV0aG9kLgorICAgICAgICBpZiAoIUN1c3RvbUZp
bHRlclByb2dyYW06Om9wZXJhdG9yPT0obykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjYXN0IGlzIHVnbHksIGJ1dCBDb29yZGluYXRlZEN1
c3RvbUZpbHRlclByb2dyYW0gaXMgdGhlIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBvZiBDdXN0b21G
aWx0ZXJQcm9ncmFtIG9uIFVJIFByb2Nlc3MuCisgICAgICAgIGNvbnN0IENvb3JkaW5hdGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbSogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBDb29yZGluYXRlZEN1
c3RvbUZpbHRlclByb2dyYW0qPigmbyk7CisgICAgICAgIHJldHVybiBtX3ZlcnRleFNoYWRlclN0
cmluZyA9PSBvdGhlci0+dmVydGV4U2hhZGVyU3RyaW5nKCkgJiYgbV9mcmFnbWVudFNoYWRlclN0
cmluZyA9PSBvdGhlci0+ZnJhZ21lbnRTaGFkZXJTdHJpbmcoKTsKKyAgICB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIFN0cmluZyB2ZXJ0ZXhTaGFkZXJTdHJpbmcoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBtX3ZlcnRleFNoYWRlclN0cmluZzsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGZy
YWdtZW50U2hhZGVyU3RyaW5nKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9mcmFnbWVudFNo
YWRlclN0cmluZzsgfQorCisgICAgdmlydHVhbCB2b2lkIHdpbGxIYXZlQ2xpZW50cygpIE9WRVJS
SURFIHsgbm90aWZ5Q2xpZW50cygpOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZUxhc3RD
bGllbnQoKSBPVkVSUklERSB7IH0KKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZEN1c3RvbUZp
bHRlclByb2dyYW0oU3RyaW5nIHZlcnRleFNoYWRlclN0cmluZywgU3RyaW5nIGZyYWdtZW50U2hh
ZGVyU3RyaW5nLCBDdXN0b21GaWx0ZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlwZSwgQ3VzdG9tRmls
dGVyUHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBt
ZXNoVHlwZSkKKyAgICAgICAgOiBDdXN0b21GaWx0ZXJQcm9ncmFtKHByb2dyYW1UeXBlLCBtaXhT
ZXR0aW5ncywgbWVzaFR5cGUpCisgICAgICAgICwgbV92ZXJ0ZXhTaGFkZXJTdHJpbmcodmVydGV4
U2hhZGVyU3RyaW5nKQorICAgICAgICAsIG1fZnJhZ21lbnRTaGFkZXJTdHJpbmcoZnJhZ21lbnRT
aGFkZXJTdHJpbmcpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyBtX3ZlcnRleFNoYWRlclN0
cmluZzsKKyAgICBTdHJpbmcgbV9mcmFnbWVudFNoYWRlclN0cmluZzsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
RU5BQkxFKENTU19TSEFERVJTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJQ
cm9ncmFtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzczNmYyNjA0YzBjMTA0Mzk5OTU3Yjk4YTI1MjVl
ZTdkYmNkZDliYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBA
IC0wLDAgKzEsMTA1NiBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAx
MDAsIEluYy4KKyBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIuaCIKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgorI2luY2x1
ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllci5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaWZuZGVmIE5ERUJVRworI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4K
KyNlbmRpZgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgQ29vcmRpbmF0ZWRMYXllcklEIHRvQ29vcmRpbmF0ZWRMYXllcklEKEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQoreworICAgIHJldHVybiBsYXllciA/IHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKGxheWVyKS0+aWQoKSA6IDA7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyOjpkaWRDaGFuZ2VMYXllclN0YXRlKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNMYXll
clN0YXRlID0gdHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3Rp
ZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6ZGlkQ2hhbmdlQW5pbWF0aW9ucygpCit7CisgICAgbV9zaG91bGRTeW5jQW5pbWF0aW9ucyA9
IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hS
ZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENo
YW5nZUNoaWxkcmVuKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNDaGlsZHJlbiA9IHRydWU7CisgICAg
aWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlz
KTsKK30KKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpkaWRDaGFuZ2VGaWx0ZXJzKCkKK3sKKyAgICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0g
dHJ1ZTsKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJl
cXVpcmVkKHRoaXMpOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKQoreworICAgIG1fc2hvdWxkU3luY0ltYWdlQmFja2lu
ZyA9IHRydWU7CisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1
c2hSZXF1aXJlZCh0aGlzKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dFNob3VsZFVwZGF0ZVZpc2libGVSZWN0KCkKK3sKKyAgICBtX3Nob3VsZFVwZGF0ZVZpc2libGVS
ZWN0ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgp
OyArK2kpCisgICAgICAgIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKGNoaWxkcmVuKClbaV0p
LT5zZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkK
KyAgICAgICAgdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocmVwbGljYUxheWVyKCkpLT5zZXRT
aG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6ZGlkQ2hhbmdlR2VvbWV0cnkoKQoreworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsK
KyAgICBzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVjdCgpOworfQorCitDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyQ2xpZW50KiBj
bGllbnQpCisgICAgOiBHcmFwaGljc0xheWVyKGNsaWVudCkKKyNpZm5kZWYgTkRFQlVHCisgICAg
LCBtX2lzUHVyZ2luZyhmYWxzZSkKKyNlbmRpZgorICAgICwgbV9zaG91bGRVcGRhdGVWaXNpYmxl
UmVjdCh0cnVlKQorICAgICwgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSh0cnVlKQorICAgICwgbV9z
aG91bGRTeW5jQ2hpbGRyZW4odHJ1ZSkKKyAgICAsIG1fc2hvdWxkU3luY0ZpbHRlcnModHJ1ZSkK
KyAgICAsIG1fc2hvdWxkU3luY0ltYWdlQmFja2luZyh0cnVlKQorICAgICwgbV9zaG91bGRTeW5j
QW5pbWF0aW9ucyh0cnVlKQorICAgICwgbV9maXhlZFRvVmlld3BvcnQoZmFsc2UpCisgICAgLCBt
X3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudChmYWxzZSkKKyAgICAsIG1fcGVuZGluZ1Zp
c2libGVSZWN0QWRqdXN0bWVudChmYWxzZSkKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAg
ICAsIG1faXNWYWxpZENhbnZhcyhmYWxzZSkKKyAgICAsIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlv
bihOb25lKQorI2VuZGlmCisgICAgLCBtX2Nvb3JkaW5hdG9yKDApCisgICAgLCBtX2NvbXBvc2l0
ZWROYXRpdmVJbWFnZVB0cigwKQorICAgICwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKDApCisgICAg
LCBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjphbmltYXRpb25TdGFydGVkVGltZXJGaXJlZCkKK3sKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRM
YXllcklEIG5leHRMYXllcklEID0gMTsKKyAgICBtX2lkID0gbmV4dExheWVySUQrKzsKK30KKwor
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCkKK3sK
KyAgICBpZiAobV9jb29yZGluYXRvcikgeworICAgICAgICBwdXJnZUJhY2tpbmdTdG9yZXMoKTsK
KyAgICAgICAgbV9jb29yZGluYXRvci0+ZGV0YWNoTGF5ZXIodGhpcyk7CisgICAgfQorICAgIEFT
U0VSVCghbV9jb29yZGluYXRlZEltYWdlQmFja2luZyAmJiAhbV9tYWluQmFja2luZ1N0b3JlKTsK
KyAgICB3aWxsQmVEZXN0cm95ZWQoKTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldENoaWxkcmVuKGNvbnN0IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkcmVuKQor
eworICAgIGJvb2wgb2sgPSBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjaGlsZHJlbik7Cisg
ICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRpZENoYW5nZUNoaWxkcmVu
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjphZGRDaGlsZChHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyOjph
ZGRDaGlsZChsYXllcik7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiBsYXll
ciwgaW50IGluZGV4KQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQXRJbmRleChsYXll
ciwgaW5kZXgpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBHcmFw
aGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxkQWJvdmUo
bGF5ZXIsIHNpYmxpbmcpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KEdyYXBoaWNzTGF5ZXIqIGxheWVy
LCBHcmFwaGljc0xheWVyKiBzaWJsaW5nKQoreworICAgIEdyYXBoaWNzTGF5ZXI6OmFkZENoaWxk
QmVsb3cobGF5ZXIsIHNpYmxpbmcpOworICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Cit9CisKK2Jv
b2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXBsYWNlQ2hpbGQoR3JhcGhpY3NMYXllciog
b2xkQ2hpbGQsIEdyYXBoaWNzTGF5ZXIqIG5ld0NoaWxkKQoreworICAgIGJvb2wgb2sgPSBHcmFw
aGljc0xheWVyOjpyZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIG5ld0NoaWxkKTsKKyAgICBpZiAoIW9r
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbW92ZUZy
b21QYXJlbnQoKQoreworICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHBhcmVudExh
eWVyID0gdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpKQorICAgICAgICBwYXJl
bnRMYXllci0+ZGlkQ2hhbmdlQ2hpbGRyZW4oKTsKKyAgICBHcmFwaGljc0xheWVyOjpyZW1vdmVG
cm9tUGFyZW50KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRQb3Np
dGlvbihjb25zdCBGbG9hdFBvaW50JiBwKQoreworICAgIGlmIChwb3NpdGlvbigpID09IHApCisg
ICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFBvc2l0aW9uKHApOworICAg
IGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRBbmNob3JQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApCit7CisgICAgaWYgKGFuY2hv
clBvaW50KCkgPT0gcCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0
QW5jaG9yUG9pbnQocCk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplKQorewor
ICAgIGlmICh0aGlzLT5zaXplKCkgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3Jh
cGhpY3NMYXllcjo6c2V0U2l6ZShzaXplKTsKKworICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAg
ICAgbWFza0xheWVyKCktPnNldFNpemUoc2l6ZSk7CisgICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsK
K30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICBpZiAodHJhbnNmb3JtKCkgPT0gdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0VHJhbnNmb3JtKHQpOworICAg
IGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sK
KyAgICBpZiAoY2hpbGRyZW5UcmFuc2Zvcm0oKSA9PSB0KQorICAgICAgICByZXR1cm47CisKKyAg
ICBHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlblRyYW5zZm9ybSh0KTsKKyAgICBkaWRDaGFuZ2VH
ZW9tZXRyeSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UHJlc2Vy
dmVzM0QoYm9vbCBiKQoreworICAgIGlmIChwcmVzZXJ2ZXMzRCgpID09IGIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGIpOworICAgIGRpZENo
YW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRN
YXNrc1RvQm91bmRzKGJvb2wgYikKK3sKKyAgICBpZiAobWFza3NUb0JvdW5kcygpID09IGIpCisg
ICAgICAgIHJldHVybjsKKyAgICBHcmFwaGljc0xheWVyOjpzZXRNYXNrc1RvQm91bmRzKGIpOwor
ICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyOjpzZXREcmF3c0NvbnRlbnQoYm9vbCBiKQoreworICAgIGlmIChkcmF3c0NvbnRlbnQoKSA9
PSBiKQorICAgICAgICByZXR1cm47CisgICAgR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50
KGIpOworCisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNWaXNpYmxlKGJvb2wgYikKK3sKKyAgICBpZiAoY29u
dGVudHNBcmVWaXNpYmxlKCkgPT0gYikKKyAgICAgICAgcmV0dXJuOworICAgIEdyYXBoaWNzTGF5
ZXI6OnNldENvbnRlbnRzVmlzaWJsZShiKTsKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAg
IG1hc2tMYXllcigpLT5zZXRDb250ZW50c1Zpc2libGUoYik7CisKKyAgICBkaWRDaGFuZ2VMYXll
clN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50
c09wYXF1ZShib29sIGIpCit7CisgICAgaWYgKGNvbnRlbnRzT3BhcXVlKCkgPT0gYikKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS0+c2V0U3VwcG9ydHNBbHBoYSghYik7CisgICAgR3JhcGhpY3NMYXllcjo6c2V0
Q29udGVudHNPcGFxdWUoYik7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGJvb2wgYikK
K3sKKyAgICBpZiAoYmFja2ZhY2VWaXNpYmlsaXR5KCkgPT0gYikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3JhcGhpY3NMYXllcjo6c2V0QmFja2ZhY2VWaXNpYmlsaXR5KGIpOworICAgIGRpZENo
YW5nZUxheWVyU3RhdGUoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNl
dE9wYWNpdHkoZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBpZiAodGhpcy0+b3BhY2l0eSgpID09IG9w
YWNpdHkpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBoaWNzTGF5ZXI6OnNldE9wYWNpdHko
b3BhY2l0eSk7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgaWYgKGNvbnRlbnRzUmVjdCgpID09IHIpCisgICAgICAgIHJldHVybjsKKworICAgIEdyYXBo
aWNzTGF5ZXI6OnNldENvbnRlbnRzUmVjdChyKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c05lZWRzRGlz
cGxheSgpCit7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgaWYgKG1fY2FudmFzUGxh
dGZvcm1MYXllcikKKyAgICAgICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIHw9IFN5bmNDYW52
YXM7CisjZW5kaWYKKworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlm
eUZsdXNoUmVxdWlyZWQodGhpcyk7CisKKyAgICBhZGRSZXBhaW50UmVjdChjb250ZW50c1JlY3Qo
KSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1RvQ2Fu
dmFzKFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit7CisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisgICAgaWYgKG1fY2FudmFzUGxhdGZvcm1MYXllcikgeworICAgICAgICBBU1NFUlQo
bV9jYW52YXNUb2tlbi5pc1ZhbGlkKCkpOworICAgICAgICBpZiAoIXBsYXRmb3JtTGF5ZXIpIHsK
KyAgICAgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBEZXN0cm95Q2FudmFzOwor
ICAgICAgICAgICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5DcmVhdGVDYW52YXM7Cisg
ICAgICAgIH0gIGVsc2UgaWYgKChtX2NhbnZhc1NpemUgIT0gcGxhdGZvcm1MYXllci0+cGxhdGZv
cm1MYXllclNpemUoKSkgfHwgKG1fY2FudmFzVG9rZW4gIT0gcGxhdGZvcm1MYXllci0+Z3JhcGhp
Y3NTdXJmYWNlVG9rZW4oKSkpIHsKKyAgICAgICAgICAgIC8vIG1fY2FudmFzVG9rZW4gY2FuIGJl
IGRpZmZlcmVudCB0byBwbGF0Zm9ybUxheWVyLT5ncmFwaGljc1N1cmZhY2VUb2tlbigpLCBldmVu
IGlmIG1fY2FudmFzUGxhdGZvcm1MYXllciBlcXVhbHMgcGxhdGZvcm1MYXllci4KKyAgICAgICAg
ICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBSZWNyZWF0ZUNhbnZhczsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChwbGF0Zm9ybUxheWVyKQorICAgICAgICAgICAg
bV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uIHw9IENyZWF0ZUFuZFN5bmNDYW52YXM7CisgICAgfQor
CisgICAgbV9jYW52YXNQbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1MYXllcjsKKyAgICAvLyBtX2Nh
bnZhc1Rva2VuIGlzIHVwZGF0ZWQgb25seSBoZXJlLiBJbiBkZXRhaWwsIHdoZW4gR3JhcGhpY3ND
b250ZXh0M0QgaXMgY2hhbmdlZCBvciByZXNoYXBlZCwgbV9jYW52YXNUb2tlbiBpcyBjaGFuZ2Vk
IGFuZCBzZXRDb250ZW50c1RvQ2FudmFzKCkgaXMgYWx3YXlzIGNhbGxlZC4KKyAgICBtX2NhbnZh
c1NpemUgPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPyBtX2NhbnZhc1BsYXRmb3JtTGF5ZXItPnBs
YXRmb3JtTGF5ZXJTaXplKCkgOiBJbnRTaXplKCk7CisgICAgbV9jYW52YXNUb2tlbiA9IG1fY2Fu
dmFzUGxhdGZvcm1MYXllciA/IG1fY2FudmFzUGxhdGZvcm1MYXllci0+Z3JhcGhpY3NTdXJmYWNl
VG9rZW4oKSA6IEdyYXBoaWNzU3VyZmFjZVRva2VuKCk7CisgICAgQVNTRVJUKCEoIW1fY2FudmFz
VG9rZW4uaXNWYWxpZCgpICYmIG1fY2FudmFzUGxhdGZvcm1MYXllcikpOworCisgICAgaWYgKGNs
aWVudCgpKQorICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHBsYXRmb3JtTGF5ZXIpOworI2VuZGlmCit9CisKKyNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Rmls
dGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBuZXdGaWx0ZXJzKQoreworICAgIGlmIChmaWx0
ZXJzKCkgPT0gbmV3RmlsdGVycykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGlkQ2hhbmdl
RmlsdGVycygpOworICAgIHJldHVybiBHcmFwaGljc0xheWVyOjpzZXRGaWx0ZXJzKG5ld0ZpbHRl
cnMpOworfQorI2VuZGlmCisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDb250
ZW50c1RvU29saWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKG1fbGF5ZXJJ
bmZvLnNvbGlkQ29sb3IgPT0gY29sb3IpCisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVySW5m
by5zb2xpZENvbG9yID0gY29sb3I7CisgICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wgc2hv
dykKK3sKKyAgICBpZiAoaXNTaG93aW5nRGVidWdCb3JkZXIoKSA9PSBzaG93KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHcmFwaGljc0xheWVyOjpzZXRTaG93RGVidWdCb3JkZXIoc2hvdyk7Cisg
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2V0U2hvd1JlcGFpbnRDb3VudGVyKGJvb2wgc2hvdykKK3sKKyAgICBpZiAoaXNTaG93
aW5nUmVwYWludENvdW50ZXIoKSA9PSBzaG93KQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFw
aGljc0xheWVyOjpzZXRTaG93UmVwYWludENvdW50ZXIoc2hvdyk7CisgICAgZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVu
dHNUb0ltYWdlKEltYWdlKiBpbWFnZSkKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBuZXdOYXRpdmVJ
bWFnZVB0ciA9IGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgOiAw
OworICAgIGlmIChuZXdOYXRpdmVJbWFnZVB0cikgeworICAgICAgICAvLyBUaGlzIGNvZGUgbWFr
ZXMgdGhlIGFzc3VtcHRpb24gdGhhdCBwb2ludGVyIGVxdWFsaXR5IG9uIGEgTmF0aXZlSW1hZ2VQ
dHIgaXMgYSB2YWxpZCB3YXkgdG8gdGVsbCBpZiB0aGUgaW1hZ2UgaXMgY2hhbmdlZC4KKyAgICAg
ICAgLy8gVGhpcyBhc3N1bXB0aW9uIGlzIHRydWUgaW4gUXQsIEdUSyBhbmQgRUZMLgorICAgICAg
ICBpZiAobmV3TmF0aXZlSW1hZ2VQdHIgPT0gbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9jb21wb3NpdGVkSW1hZ2UgPSBpbWFnZTsK
KyAgICAgICAgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIgPSBuZXdOYXRpdmVJbWFnZVB0cjsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2NvbXBvc2l0ZWRJbWFnZSA9IDA7CisgICAgICAgIG1f
Y29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyID0gMDsKKyAgICB9CisKKyAgICBHcmFwaGljc0xheWVy
OjpzZXRDb250ZW50c1RvSW1hZ2UoaW1hZ2UpOworICAgIGRpZENoYW5nZUltYWdlQmFja2luZygp
OworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKEdyYXBo
aWNzTGF5ZXIqIGxheWVyKQoreworICAgIGlmIChsYXllciA9PSBtYXNrTGF5ZXIoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3JhcGhpY3NMYXllcjo6c2V0TWFza0xheWVyKGxheWVyKTsKKwor
ICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGxheWVyLT5zZXRTaXplKHNp
emUoKSk7CisgICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJsZShjb250ZW50c0FyZVZpc2libGUo
KSk7CisgICAgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBjb29yZGluYXRlZExheWVyID0gdG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIobGF5ZXIpOworICAgIGNvb3JkaW5hdGVkTGF5ZXItPmRp
ZENoYW5nZUxheWVyU3RhdGUoKTsKKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK2Jv
b2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdl
KEltYWdlKiBpbWFnZSkgY29uc3QKK3sKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+aXNCaXRt
YXBJbWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlbnVtIHsgTWF4RGltZW5z
dGlvbkZvckRpcmVjdENvbXBvc2l0aW5nID0gMjAwMCB9OworICAgIGlmIChpbWFnZS0+d2lkdGgo
KSA+IE1heERpbWVuc3Rpb25Gb3JEaXJlY3RDb21wb3NpdGluZyB8fCBpbWFnZS0+aGVpZ2h0KCkg
PiBNYXhEaW1lbnN0aW9uRm9yRGlyZWN0Q29tcG9zaXRpbmcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCit7CisgICAgaWYg
KGxheWVyID09IHJlcGxpY2FMYXllcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBHcmFwaGlj
c0xheWVyOjpzZXRSZXBsaWNhdGVkQnlMYXllcihsYXllcik7CisgICAgZGlkQ2hhbmdlTGF5ZXJT
dGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNw
bGF5KCkKK3sKKyAgICBzZXROZWVkc0Rpc3BsYXlJblJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSgpKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVk
c0Rpc3BsYXlJblJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChtX21haW5C
YWNraW5nU3RvcmUpCisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+aW52YWxpZGF0ZShJbnRS
ZWN0KHJlY3QpKTsKKworICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKKworICAgIGFkZFJlcGFp
bnRSZWN0KHJlY3QpOworfQorCitDb29yZGluYXRlZExheWVySUQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjppZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faWQ7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGlmICghbV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdl
cygpKSB7CisgICAgICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgICAgIGNsaWVudCgpLT5ub3Rp
ZnlGbHVzaFJlcXVpcmVkKHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogbWFzayA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xh
eWVyKG1hc2tMYXllcigpKSkKKyAgICAgICAgbWFzay0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9y
VGhpc0xheWVyT25seSgpOworCisgICAgaWYgKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogcmVw
bGljYSA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKSkKKyAgICAg
ICAgcmVwbGljYS0+Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworCisg
ICAgbV9jb29yZGluYXRvci0+c3luY0ZpeGVkTGF5ZXJzKCk7CisKKyAgICBmbHVzaENvbXBvc2l0
aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoaWxkcmVuKClbaV0tPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZShyZWN0KTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiB0b0Nv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKK3sKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4obGF5ZXIpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3luY0NoaWxkcmVuKCkKK3sKKyAgICBpZiAo
IW1fc2hvdWxkU3luY0NoaWxkcmVuKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5j
Q2hpbGRyZW4gPSBmYWxzZTsKKyAgICBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiBjaGlsZElE
czsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGNoaWxkSURzLmFwcGVuZCh0b0Nvb3JkaW5hdGVkTGF5ZXJJRChjaGlsZHJlbigpW2ld
KSk7CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJDaGlsZHJlbihtX2lkLCBjaGlsZElE
cyk7Cit9CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCit2b2lkIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c3luY0ZpbHRlcnMoKQoreworICAgIGlmICghbV9zaG91bGRTeW5jRmlsdGVycykK
KyAgICAgICAgcmV0dXJuOworICAgIG1fc2hvdWxkU3luY0ZpbHRlcnMgPSBmYWxzZTsKKyAgICBt
X2Nvb3JkaW5hdG9yLT5zeW5jTGF5ZXJGaWx0ZXJzKG1faWQsIGZpbHRlcnMoKSk7Cit9CisjZW5k
aWYKKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNJbWFnZUJhY2tpbmcoKQor
eworICAgIGlmICghbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nID0gZmFsc2U7CisKKyAgICBpZiAobV9jb21wb3Np
dGVkTmF0aXZlSW1hZ2VQdHIpIHsKKyAgICAgICAgQVNTRVJUKCFzaG91bGRIYXZlQmFja2luZ1N0
b3JlKCkpOworICAgICAgICBBU1NFUlQobV9jb21wb3NpdGVkSW1hZ2UpOworCisgICAgICAgIGJv
b2wgaW1hZ2VJbnN0YW5jZVJlcGxhY2VkID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZyAmJiAo
bV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+aWQoKSAhPSBDb29yZGluYXRlZEltYWdlQmFja2lu
Zzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRChtX2NvbXBvc2l0ZWRJbWFnZS5nZXQoKSkp
OworICAgICAgICBpZiAoaW1hZ2VJbnN0YW5jZVJlcGxhY2VkKQorICAgICAgICAgICAgcmVsZWFz
ZUltYWdlQmFja2luZ0lmTmVlZGVkKCk7CisKKyAgICAgICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nKSB7CisgICAgICAgICAgICBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nID0gbV9j
b29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQobV9jb21wb3NpdGVkSW1hZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+YWRkSG9zdCh0
aGlzKTsKKyAgICAgICAgICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBtX2Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLT5pZCgpOworICAgICAgICB9CisKKyAgICAgICAgbV9jb29yZGluYXRlZEltYWdl
QmFja2luZy0+bWFya0RpcnR5KCk7CisgICAgfSBlbHNlCisgICAgICAgIHJlbGVhc2VJbWFnZUJh
Y2tpbmdJZk5lZWRlZCgpOworCisgICAgLy8gc3luY0ltYWdlQmFja2luZygpIGNoYW5nZWQgbV9s
YXllckluZm8uaW1hZ2VJRC4KKyAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jTGF5ZXJTdGF0ZSgpCit7CisgICAgaWYgKCFt
X3Nob3VsZFN5bmNMYXllclN0YXRlKQorICAgICAgICByZXR1cm47CisgICAgbV9zaG91bGRTeW5j
TGF5ZXJTdGF0ZSA9IGZhbHNlOworICAgIG1fbGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCA9IGZp
eGVkVG9WaWV3cG9ydCgpOworCisgICAgbV9sYXllckluZm8uYmFja2ZhY2VWaXNpYmxlID0gYmFj
a2ZhY2VWaXNpYmlsaXR5KCk7CisgICAgbV9sYXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0gPSBj
aGlsZHJlblRyYW5zZm9ybSgpOworICAgIG1fbGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlID0gY29u
dGVudHNPcGFxdWUoKTsKKyAgICBtX2xheWVySW5mby5jb250ZW50c1JlY3QgPSBjb250ZW50c1Jl
Y3QoKTsKKyAgICBtX2xheWVySW5mby5kcmF3c0NvbnRlbnQgPSBkcmF3c0NvbnRlbnQoKTsKKyAg
ICBtX2xheWVySW5mby5jb250ZW50c1Zpc2libGUgPSBjb250ZW50c0FyZVZpc2libGUoKTsKKyAg
ICBtX2xheWVySW5mby5tYXNrID0gdG9Db29yZGluYXRlZExheWVySUQobWFza0xheWVyKCkpOwor
ICAgIG1fbGF5ZXJJbmZvLm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzKCk7CisgICAgbV9s
YXllckluZm8ub3BhY2l0eSA9IG9wYWNpdHkoKTsKKyAgICBtX2xheWVySW5mby5wcmVzZXJ2ZXMz
RCA9IHByZXNlcnZlczNEKCk7CisgICAgbV9sYXllckluZm8ucmVwbGljYSA9IHRvQ29vcmRpbmF0
ZWRMYXllcklEKHJlcGxpY2FMYXllcigpKTsKKyAgICBtX2xheWVySW5mby50cmFuc2Zvcm0gPSB0
cmFuc2Zvcm0oKTsKKworICAgIG1fbGF5ZXJJbmZvLmFuY2hvclBvaW50ID0gbV9hZGp1c3RlZEFu
Y2hvclBvaW50OworICAgIG1fbGF5ZXJJbmZvLnBvcyA9IG1fYWRqdXN0ZWRQb3NpdGlvbjsKKyAg
ICBtX2xheWVySW5mby5zaXplID0gbV9hZGp1c3RlZFNpemU7CisKKyAgICBtX2xheWVySW5mby5z
aG93RGVidWdCb3JkZXJzID0gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsKKyAgICBpZiAobV9sYXll
ckluZm8uc2hvd0RlYnVnQm9yZGVycykKKyAgICAgICAgdXBkYXRlRGVidWdJbmRpY2F0b3JzKCk7
CisgICAgbV9sYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyID0gaXNTaG93aW5nUmVwYWludENv
dW50ZXIoKTsKKworICAgIG1fY29vcmRpbmF0b3ItPnN5bmNMYXllclN0YXRlKG1faWQsIG1fbGF5
ZXJJbmZvKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldERlYnVnQm9y
ZGVyKGNvbnN0IENvbG9yJiBjb2xvciwgZmxvYXQgd2lkdGgpCit7CisgICAgQVNTRVJUKG1fbGF5
ZXJJbmZvLnNob3dEZWJ1Z0JvcmRlcnMpOworICAgIG1fbGF5ZXJJbmZvLmRlYnVnQm9yZGVyQ29s
b3IgPSBjb2xvcjsKKyAgICBtX2xheWVySW5mby5kZWJ1Z0JvcmRlcldpZHRoID0gd2lkdGg7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQW5pbWF0aW9ucygpCit7Cisg
ICAgaWYgKCFtX3Nob3VsZFN5bmNBbmltYXRpb25zKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3Nob3VsZFN5bmNBbmltYXRpb25zID0gZmFsc2U7CisKKyAgICBtX2Nvb3JkaW5hdG9yLT5zZXRM
YXllckFuaW1hdGlvbnMobV9pZCwgbV9hbmltYXRpb25zKTsKK30KKworI2lmIFVTRShHUkFQSElD
U19TVVJGQUNFKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNDYW52YXMoKQor
eworICAgIGRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpOworICAgIGNyZWF0ZUNhbnZhc0lmTmVlZGVk
KCk7CisKKyAgICBpZiAoIShtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBTeW5jQ2FudmFzKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICY9IH5TeW5j
Q2FudmFzOworCisgICAgaWYgKCFtX2lzVmFsaWRDYW52YXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY29vcmRpbmF0b3ItPnN5bmNDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVy
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRlc3Ryb3lDYW52YXNJZk5l
ZWRlZCgpCit7CisgICAgaWYgKCEobV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgRGVzdHJveUNh
bnZhcykpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2lzVmFsaWRDYW52YXMpIHsKKyAg
ICAgICAgbV9jb29yZGluYXRvci0+ZGVzdHJveUNhbnZhcyhtX2lkKTsKKyAgICAgICAgbV9pc1Zh
bGlkQ2FudmFzID0gZmFsc2U7CisgICAgfQorCisgICAgbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9u
ICY9IH5EZXN0cm95Q2FudmFzOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Y3JlYXRlQ2FudmFzSWZOZWVkZWQoKQoreworICAgIGlmICghKG1fcGVuZGluZ0NhbnZhc09wZXJh
dGlvbiAmIENyZWF0ZUNhbnZhcykpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIpOworICAgIGlmICghbV9pc1ZhbGlkQ2FudmFzKSB7CisgICAgICAg
IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUNhbnZhcyhtX2lkLCBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIp
OworICAgICAgICBtX2lzVmFsaWRDYW52YXMgPSB0cnVlOworICAgIH0KKworICAgIG1fcGVuZGlu
Z0NhbnZhc09wZXJhdGlvbiAmPSB+Q3JlYXRlQ2FudmFzOworfQorI2VuZGlmCisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJP
bmx5KCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdl
cygpKTsKKworICAgIC8vIFNldHMgdGhlIHZhbHVlcy4KKyAgICBjb21wdXRlUGl4ZWxBbGlnbm1l
bnQobV9hZGp1c3RlZFBvc2l0aW9uLCBtX2FkanVzdGVkU2l6ZSwgbV9hZGp1c3RlZEFuY2hvclBv
aW50LCBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0KTsKKworICAgIHN5bmNJbWFnZUJhY2tpbmcoKTsK
KyAgICBzeW5jTGF5ZXJTdGF0ZSgpOworICAgIHN5bmNBbmltYXRpb25zKCk7CisgICAgY29tcHV0
ZVRyYW5zZm9ybWVkVmlzaWJsZVJlY3QoKTsKKyAgICBzeW5jQ2hpbGRyZW4oKTsKKyNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCisgICAgc3luY0ZpbHRlcnMoKTsKKyNlbmRpZgorICAgIHVwZGF0ZUNv
bnRlbnRCdWZmZXJzKCk7CisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgc3luY0NhbnZh
cygpOworI2VuZGlmCit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjppbWFnZUJh
Y2tpbmdWaXNpYmxlKCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRlZEltYWdlQmFja2luZyk7
CisgICAgcmV0dXJuIHRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3QoKS5pbnRlcnNlY3RzKGNv
bnRlbnRzUmVjdCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnJlbGVh
c2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpCit7CisgICAgaWYgKCFtX2Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobV9jb29yZGluYXRvcik7Cisg
ICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+cmVtb3ZlSG9zdCh0aGlzKTsKKyAgICBtX2Nv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNsZWFyKCk7CisgICAgbV9sYXllckluZm8uaW1hZ2VJRCA9
IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkKK3sKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJvb3RMYXllcihib29sIGlzUm9vdCkKK3sK
KyAgICBtX2xheWVySW5mby5pc1Jvb3RMYXllciA9IGlzUm9vdDsKKyAgICBkaWRDaGFuZ2VMYXll
clN0YXRlKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRWaXNpYmxl
Q29udGVudFJlY3RUcmFqZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmIHRyYWplY3RvcnlW
ZWN0b3IpCit7CisgICAgaWYgKCFtX21haW5CYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0VHJhamVjdG9yeVZlY3Rvcih0cmFqZWN0b3J5
VmVjdG9yKTsKKyAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2Vk
KCkKK3sKKyAgICBpZiAoc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKQorICAgICAgICBtX3BlbmRp
bmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCA9IHRydWU7Cit9CisKK2Zsb2F0IENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6ZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpCit7CisgICAgcmV0dXJuIHNl
bGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKSA/IDEgOiBkZXZpY2VTY2FsZUZh
Y3RvcigpICogcGFnZVNjYWxlRmFjdG9yKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjphZGp1c3RDb250ZW50c1NjYWxlKCkKK3sKKyAgICBBU1NFUlQoc2hvdWxkSGF2ZUJh
Y2tpbmdTdG9yZSgpKTsKKyAgICBpZiAoIW1fbWFpbkJhY2tpbmdTdG9yZSB8fCBtX21haW5CYWNr
aW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSA9PSBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIEJldHdlZW4gY3JlYXRpbmcgdGhlIG5ldyBiYWNraW5n
IHN0b3JlIGFuZCBwYWludGluZyB0aGUgY29udGVudCwKKyAgICAvLyB3ZSBkbyBub3Qgd2FudCB0
byBkcm9wIHRoZSBwcmV2aW91cyBvbmUgYXMgdGhhdCBtaWdodCByZXN1bHQgaW4KKyAgICAvLyBi
cmllZmx5IHNlZWluZyBmbGlja2VyaW5nIGFzIHRoZSBvbGQgdGlsZXMgbWF5IGJlIGRyb3BwZWQg
YmVmb3JlCisgICAgLy8gc29tZXRoaW5nIHJlcGxhY2VzIHRoZW0uCisgICAgbV9wcmV2aW91c0Jh
Y2tpbmdTdG9yZSA9IG1fbWFpbkJhY2tpbmdTdG9yZS5yZWxlYXNlKCk7CisKKyAgICAvLyBObyBy
ZWFzb24gdG8gc2F2ZSB0aGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBmb3Igbm9uLXZpc2libGUg
YXJlYXMuCisgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsTm9uVmlzaWJsZVRp
bGVzKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjcmVhdGVCYWNraW5n
U3RvcmUoKQoreworICAgIG1fbWFpbkJhY2tpbmdTdG9yZSA9IGFkb3B0UHRyKG5ldyBUaWxlZEJh
Y2tpbmdTdG9yZSh0aGlzLCBDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpjcmVhdGUodGhpcykpKTsK
KyAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1cHBvcnRzQWxwaGEoIWNvbnRlbnRzT3BhcXVl
KCkpOworICAgIG1fbWFpbkJhY2tpbmdTdG9yZS0+c2V0Q29udGVudHNTY2FsZShlZmZlY3RpdmVD
b250ZW50c1NjYWxlKCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVQYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoKmNvbnRleHQsIHJlY3QpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVQYWludEVuZChjb25z
dCBWZWN0b3I8SW50UmVjdD4mIHVwZGF0ZWRSZWN0cykKK3sKKyAgICBpZiAoaXNTaG93aW5nUmVw
YWludENvdW50ZXIoKSAmJiAhdXBkYXRlZFJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9jb29y
ZGluYXRvci0+c2V0TGF5ZXJSZXBhaW50Q291bnQoaWQoKSwgaW5jcmVtZW50UmVwYWludENvdW50
KCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3Rv
cmVIYXNQZW5kaW5nVGlsZUNyZWF0aW9uKCkKK3sKKyAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRq
dXN0bWVudCgpOworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50KCktPm5vdGlmeUZs
dXNoUmVxdWlyZWQodGhpcyk7Cit9CisKK0ludFJlY3QgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
Ojp0aWxlZEJhY2tpbmdTdG9yZUNvbnRlbnRzUmVjdCgpCit7CisgICAgcmV0dXJuIEludFJlY3Qo
MCwgMCwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSk7Cit9CisKK3N0YXRpYyB2b2lk
IGNsYW1wVG9Db250ZW50c1JlY3RJZlJlY3RJc0luZmluaXRlKEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgSW50UmVjdCYgY29udGVudHNSZWN0KQoreworICAgIGlmIChyZWN0LndpZHRoKCkgPj0gTGF5
b3V0VW5pdDo6bmVhcmx5TWF4KCkgfHwgcmVjdC53aWR0aCgpIDw9IExheW91dFVuaXQ6Om5lYXJs
eU1pbigpKSB7CisgICAgICAgIHJlY3Quc2V0WChjb250ZW50c1JlY3QueCgpKTsKKyAgICAgICAg
cmVjdC5zZXRXaWR0aChjb250ZW50c1JlY3Qud2lkdGgoKSk7CisgICAgfQorCisgICAgaWYgKHJl
Y3QuaGVpZ2h0KCkgPj0gTGF5b3V0VW5pdDo6bmVhcmx5TWF4KCkgfHwgcmVjdC5oZWlnaHQoKSA8
PSBMYXlvdXRVbml0OjpuZWFybHlNaW4oKSkgeworICAgICAgICByZWN0LnNldFkoY29udGVudHNS
ZWN0LnkoKSk7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7
CisgICAgfQorfQorCitJbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNr
aW5nU3RvcmVWaXNpYmxlUmVjdCgpCit7CisgICAgLy8gTm9uLWludmVydGlibGUgbGF5ZXJzIGFy
ZSBub3QgdmlzaWJsZS4KKyAgICBpZiAoIW1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pc0lu
dmVydGlibGUoKSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIC8vIFJldHVybiBh
IHByb2plY3Rpb24gb2YgdGhlIHZpc2libGUgcmVjdCAoc3VyZmFjZSBjb29yZGluYXRlcykgb250
byB0aGUgbGF5ZXIncyBwbGFuZSAobGF5ZXIgY29vcmRpbmF0ZXMpLgorICAgIC8vIFRoZSByZXN1
bHRpbmcgcXVhZCBtaWdodCBiZSBzcXVld2VkIGFuZCB0aGUgdmlzaWJsZSByZWN0IGlzIHRoZSBi
b3VuZGluZyBib3ggb2YgdGhpcyBxdWFkLAorICAgIC8vIHNvIGl0IG1pZ2h0IHNwcmVhZCBmdXJ0
aGVyIHRoYW4gdGhlIHJlYWwgdmlzaWJsZSBhcmVhIChhbmQgdGhlbiBldmVuIG1vcmUgYW1wbGlm
aWVkIGJ5IHRoZSBjb3ZlciByZWN0IG11bHRpcGxpZXIpLgorICAgIEFTU0VSVChtX2NhY2hlZElu
dmVyc2VUcmFuc2Zvcm0gPT0gbV9sYXllclRyYW5zZm9ybS5jb21iaW5lZCgpLmludmVyc2UoKSk7
CisgICAgRmxvYXRSZWN0IHJlY3QgPSBtX2NhY2hlZEludmVyc2VUcmFuc2Zvcm0uY2xhbXBlZEJv
dW5kc09mUHJvamVjdGVkUXVhZChGbG9hdFF1YWQobV9jb29yZGluYXRvci0+dmlzaWJsZUNvbnRl
bnRzUmVjdCgpKSk7CisgICAgY2xhbXBUb0NvbnRlbnRzUmVjdElmUmVjdElzSW5maW5pdGUocmVj
dCwgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSk7CisgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QocmVjdCk7Cit9CisKK0NvbG9yIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGls
ZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBjb250
ZW50c09wYXF1ZSgpID8gQ29sb3I6OndoaXRlIDogQ29sb3I6OnRyYW5zcGFyZW50OworfQorCitQ
YXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpiZWdp
bkNvbnRlbnRVcGRhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzLCBJbnRQ
b2ludCYgb2Zmc2V0KQoreworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKKyAgICBBU1NFUlQo
bV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKKyAgICByZXR1cm4gbV9j
b29yZGluYXRvci0+YmVnaW5Db250ZW50VXBkYXRlKHNpemUsIGNvbnRlbnRzT3BhcXVlKCkgPyBD
b29yZGluYXRlZFN1cmZhY2U6Ok5vRmxhZ3MgOiBDb29yZGluYXRlZFN1cmZhY2U6OlN1cHBvcnRz
QWxwaGEsIGF0bGFzLCBvZmZzZXQpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Y3JlYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKK3sKKyAgICBBU1NFUlQobV9jb29y
ZGluYXRvcik7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5n
ZXMoKSk7CisgICAgbV9jb29yZGluYXRvci0+Y3JlYXRlVGlsZShpZCgpLCB0aWxlSUQsIHVwZGF0
ZUluZm8sIHRpbGVSZWN0KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVw
ZGF0ZVRpbGUodWludDMyX3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRl
SW5mbywgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit7CisgICAgQVNTRVJUKG1fY29vcmRpbmF0
b3IpOworICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkp
OworICAgIG1fY29vcmRpbmF0b3ItPnVwZGF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZv
LCB0aWxlUmVjdCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVU
aWxlKHVpbnQzMl90IHRpbGVJRCkKK3sKKyAgICBBU1NFUlQobV9jb29yZGluYXRvcik7CisgICAg
QVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSB8fCBtX2lzUHVy
Z2luZyk7CisgICAgbV9jb29yZGluYXRvci0+cmVtb3ZlVGlsZShpZCgpLCB0aWxlSUQpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dXBkYXRlQ29udGVudEJ1ZmZlcnMoKQor
eworICAgIGlmICghc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKSB7CisgICAgICAgIG1fbWFpbkJh
Y2tpbmdTdG9yZS5jbGVhcigpOworICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFy
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9wZW5kaW5nQ29udGVudHNT
Y2FsZUFkanVzdG1lbnQpIHsKKyAgICAgICAgYWRqdXN0Q29udGVudHNTY2FsZSgpOworICAgICAg
ICBtX3BlbmRpbmdDb250ZW50c1NjYWxlQWRqdXN0bWVudCA9IGZhbHNlOworICAgIH0KKworICAg
IC8vIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2UgKHJlKWNyZWF0ZSB0aGUgbWFpbiB0aWxlZCBi
YWNraW5nIHN0b3JlLCBvbmNlIHdlCisgICAgLy8gaGF2ZSBhIHJlbW90ZSBjbGllbnQgYW5kIHdl
IGFyZSByZWFkeSB0byBzZW5kIG91ciBkYXRhIHRvIHRoZSBVSSBwcm9jZXNzLgorICAgIGlmICgh
bV9tYWluQmFja2luZ1N0b3JlKQorICAgICAgICBjcmVhdGVCYWNraW5nU3RvcmUoKTsKKworICAg
IGlmIChtX3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQpIHsKKyAgICAgICAgbV9wZW5kaW5n
VmlzaWJsZVJlY3RBZGp1c3RtZW50ID0gZmFsc2U7CisgICAgICAgIG1fbWFpbkJhY2tpbmdTdG9y
ZS0+Y292ZXJXaXRoVGlsZXNJZk5lZWRlZCgpOworICAgIH0KKworICAgIG1fbWFpbkJhY2tpbmdT
dG9yZS0+dXBkYXRlVGlsZUJ1ZmZlcnMoKTsKKworICAgIC8vIFRoZSBwcmV2aW91cyBiYWNraW5n
IHN0b3JlIGlzIGtlcHQgYXJvdW5kIHRvIGF2b2lkIGZsaWNrZXJpbmcgYmV0d2VlbgorICAgIC8v
IHJlbW92aW5nIHRoZSBleGlzdGluZyB0aWxlcyBhbmQgcGFpbnRpbmcgdGhlIG5ldyBvbmVzLiBU
aGUgZmlyc3QgdGltZQorICAgIC8vIHRoZSB2aXNpYmxlUmVjdCBpcyBmdWxsIHBhaW50ZWQgd2Ug
cmVtb3ZlIHRoZSBwcmV2aW91cyBiYWNraW5nIHN0b3JlLgorICAgIGlmIChtX21haW5CYWNraW5n
U3RvcmUtPnZpc2libGVBcmVhSXNDb3ZlcmVkKCkpCisgICAgICAgIG1fcHJldmlvdXNCYWNraW5n
U3RvcmUuY2xlYXIoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnB1cmdl
QmFja2luZ1N0b3JlcygpCit7CisjaWZuZGVmIE5ERUJVRworICAgIFRlbXBvcmFyeUNoYW5nZTxi
b29sPiB1cGRhdGVNb2RlUHJvdGVjdG9yKG1faXNQdXJnaW5nLCB0cnVlKTsKKyNlbmRpZgorICAg
IG1fbWFpbkJhY2tpbmdTdG9yZS5jbGVhcigpOworICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUu
Y2xlYXIoKTsKKworICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOworCisgICAgZGlk
Q2hhbmdlTGF5ZXJTdGF0ZSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2V0Q29vcmRpbmF0b3IoQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBjb29yZGluYXRv
cikKK3sKKyAgICBtX2Nvb3JkaW5hdG9yID0gY29vcmRpbmF0b3I7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpCit7Cisg
ICAgaWYgKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkKKyAgICAgICAgbV9wZW5kaW5nVmlzaWJs
ZVJlY3RBZGp1c3RtZW50ID0gdHJ1ZTsKK30KKworYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6Omhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygpCit7CisgICAgaWYgKG9wYWNpdHkoKSA8IDAu
MDEgJiYgIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJv
cGVydHlPcGFjaXR5KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICh0b0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbigpW2ldKS0+aGFzUGVuZGluZ1Zpc2libGVDaGFu
Z2VzKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHNob3Vs
ZFN5bmNDYW52YXMgPSBmYWxzZTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBzaG91
bGRTeW5jQ2FudmFzID0gbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgU3luY0NhbnZhczsKKyNl
bmRpZgorCisgICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlICYmICFtX3Nob3VsZFN5bmND
aGlsZHJlbiAmJiAhbV9zaG91bGRTeW5jRmlsdGVycyAmJiAhbV9zaG91bGRTeW5jSW1hZ2VCYWNr
aW5nICYmICFtX3Nob3VsZFN5bmNBbmltYXRpb25zICYmICFzaG91bGRTeW5jQ2FudmFzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxl
UmVjdCgpLmludGVyc2VjdHModGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ludGVncmFsKGZsb2F0IHZhbHVlKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSA9PSB2YWx1ZTsKK30KKworRmxvYXRQb2ludCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCkKK3sK
KyAgICBGbG9hdFBvaW50IG9mZnNldDsKKyAgICBmb3IgKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGN1
cnJMYXllciA9IHRoaXM7IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5wYXJlbnQo
KSkKKyAgICAgICAgb2Zmc2V0ICs9IGN1cnJMYXllci0+cG9zaXRpb24oKTsKKworICAgIHJldHVy
biBvZmZzZXQ7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUGl4
ZWxBbGlnbm1lbnQoRmxvYXRQb2ludCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRQ
b2ludDNEJiBhbmNob3JQb2ludCwgRmxvYXRTaXplJiBhbGlnbm1lbnRPZmZzZXQpCit7CisgICAg
aWYgKGlzSW50ZWdyYWwoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKSkgeworICAgICAgICBwb3Np
dGlvbiA9IG1fcG9zaXRpb247CisgICAgICAgIHNpemUgPSBtX3NpemU7CisgICAgICAgIGFuY2hv
clBvaW50ID0gbV9hbmNob3JQb2ludDsKKyAgICAgICAgYWxpZ25tZW50T2Zmc2V0ID0gRmxvYXRT
aXplKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9u
UmVsYXRpdmVUb0Jhc2UgPSBjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZSgpOworCisgICAg
RmxvYXRSZWN0IGJhc2VSZWxhdGl2ZUJvdW5kcyhwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBtX3Np
emUpOworICAgIEZsb2F0UmVjdCBzY2FsZWRCb3VuZHMgPSBiYXNlUmVsYXRpdmVCb3VuZHM7CisK
KyAgICAvLyBTY2FsZSBieSB0aGUgZWZmZWN0aXZlIHNjYWxlIGZhY3RvciB0byBjb21wdXRlIHRo
ZSBzY3JlZW4tcmVsYXRpdmUgYm91bmRzLgorICAgIHNjYWxlZEJvdW5kcy5zY2FsZShlZmZlY3Rp
dmVDb250ZW50c1NjYWxlKCkpOworCisgICAgLy8gUm91bmQgdG8gaW50ZWdlciBib3VuZGFyaWVz
LgorICAgIC8vIE5PVEU6IFdoZW4gdXNpbmcgZW5jbG9zaW5nSW50UmVjdCAoYXMgbWFjKSBpdCB3
aWxsIGhhdmUgZGlmZmVyZW50IHNpemVzIGRlcGVuZGluZyBvbiBwb3NpdGlvbi4KKyAgICBGbG9h
dFJlY3QgYWxpZ25lZEJvdW5kcyA9IHJvdW5kZWRJbnRSZWN0KHNjYWxlZEJvdW5kcyk7CisKKyAg
ICAvLyBDb252ZXJ0IGJhY2sgdG8gbGF5ZXIgY29vcmRpbmF0ZXMuCisgICAgYWxpZ25lZEJvdW5k
cy5zY2FsZSgxIC8gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKKworICAgIC8vIENvbnZlcnQg
YmFjayB0byBsYXllciBjb29yZGluYXRlcy4KKyAgICBhbGlnbm1lbnRPZmZzZXQgPSBiYXNlUmVs
YXRpdmVCb3VuZHMubG9jYXRpb24oKSAtIGFsaWduZWRCb3VuZHMubG9jYXRpb24oKTsKKworICAg
IHBvc2l0aW9uID0gbV9wb3NpdGlvbiAtIGFsaWdubWVudE9mZnNldDsKKyAgICBzaXplID0gYWxp
Z25lZEJvdW5kcy5zaXplKCk7CisKKyAgICAvLyBOb3cgd2UgaGF2ZSB0byBjb21wdXRlIGEgbmV3
IGFuY2hvciBwb2ludCB3aGljaCBjb21wZW5zYXRlcyBmb3Igcm91bmRpbmcuCisgICAgZmxvYXQg
YW5jaG9yUG9pbnRYID0gbV9hbmNob3JQb2ludC54KCk7CisgICAgZmxvYXQgYW5jaG9yUG9pbnRZ
ID0gbV9hbmNob3JQb2ludC55KCk7CisKKyAgICBpZiAoYWxpZ25lZEJvdW5kcy53aWR0aCgpKQor
ICAgICAgICBhbmNob3JQb2ludFggPSAoYmFzZVJlbGF0aXZlQm91bmRzLndpZHRoKCkgKiBhbmNo
b3JQb2ludFggKyBhbGlnbm1lbnRPZmZzZXQud2lkdGgoKSkgLyBhbGlnbmVkQm91bmRzLndpZHRo
KCk7CisKKyAgICBpZiAoYWxpZ25lZEJvdW5kcy5oZWlnaHQoKSkKKyAgICAgICAgYW5jaG9yUG9p
bnRZID0gKGJhc2VSZWxhdGl2ZUJvdW5kcy5oZWlnaHQoKSAqIGFuY2hvclBvaW50WSArIGFsaWdu
bWVudE9mZnNldC5oZWlnaHQoKSkgLyBhbGlnbmVkQm91bmRzLmhlaWdodCgpOworCisgICAgYW5j
aG9yUG9pbnQgPSBGbG9hdFBvaW50M0QoYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFksIG1fYW5j
aG9yUG9pbnQueigpICogZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKK30KKwordm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCkKK3sK
KyAgICAvLyBXaGVuIHdlIGhhdmUgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uLCB3ZSBuZWVkIHRvIHVw
ZGF0ZSB2aXNpYmxlIHJlY3QgZXZlcnkgZnJhbWUgdG8gYWRqdXN0IHRoZSB2aXNpYmxlIHJlY3Qg
b2YgYSBiYWNraW5nIHN0b3JlLgorICAgIGJvb2wgaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9u
ID0gc2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKTsKKyAgICBpZiAo
IW1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgJiYgIWhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlv
bikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IGZh
bHNlOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJlbnRUcmFuc2Zvcm0gPSB0cmFuc2Zv
cm0oKTsKKyAgICBpZiAoaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKQorICAgICAgICBjbGll
bnQoKS0+Z2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLCBjdXJyZW50VHJhbnNmb3JtKTsKKyAgICBt
X2xheWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0pOworCisg
ICAgbV9sYXllclRyYW5zZm9ybS5zZXRBbmNob3JQb2ludChtX2FkanVzdGVkQW5jaG9yUG9pbnQp
OworICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0UG9zaXRpb24obV9hZGp1c3RlZFBvc2l0aW9uKTsK
KyAgICBtX2xheWVyVHJhbnNmb3JtLnNldFNpemUobV9hZGp1c3RlZFNpemUpOworCisgICAgbV9s
YXllclRyYW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFwcmVzZXJ2ZXMzRCgpKTsKKyAgICBtX2xheWVy
VHJhbnNmb3JtLnNldENoaWxkcmVuVHJhbnNmb3JtKGNoaWxkcmVuVHJhbnNmb3JtKCkpOworICAg
IG1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZVRyYW5zZm9ybXMocGFyZW50KCkgPyB0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihwYXJlbnQoKSktPm1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWRGb3JD
aGlsZHJlbigpIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7CisKKyAgICBtX2NhY2hlZEludmVy
c2VUcmFuc2Zvcm0gPSBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpOworCisg
ICAgLy8gVGhlIGNvbWJpbmVkIHRyYW5zZm9ybSB3aWxsIGJlIHVzZWQgaW4gdGlsZWRCYWNraW5n
U3RvcmVWaXNpYmxlUmVjdC4KKyAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwor
fQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2ZUJhY2tpbmdTdG9y
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRyYXdzQ29udGVudCgpICYmIGNvbnRlbnRzQXJlVmlz
aWJsZSgpICYmICFtX3NpemUuaXNFbXB0eSgpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllcjo6c2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25z
dAoreworICAgIGlmIChtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmlt
YXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdG9D
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5zZWxmT3JBbmNlc3Rvckhhc0FjdGl2
ZVRyYW5zZm9ybUFuaW1hdGlvbigpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpCit7CisgICAgaWYgKG1f
YW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlXZWJr
aXRUcmFuc2Zvcm0pKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9sYXllclRy
YW5zZm9ybS5jb21iaW5lZCgpLmlzQWZmaW5lKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+c2VsZk9yQW5jZXN0b3JIYXZlTm9u
QWZmaW5lVHJhbnNmb3JtcygpOworfQorCitib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
YWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IElu
dFNpemUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3RyaW5nJiBrZXlm
cmFtZXNOYW1lLCBkb3VibGUgZGVsYXlBc05lZ2F0aXZlVGltZU9mZnNldCkKK3sKKyAgICBBU1NF
UlQoIWtleWZyYW1lc05hbWUuaXNFbXB0eSgpKTsKKworICAgIGlmICghYW5pbSB8fCBhbmltLT5p
c0VtcHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMiB8fCAodmFsdWVM
aXN0LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSAmJiB2YWx1
ZUxpc3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAgIGJvb2wgaWdu
b3JlZEhhc0JpZ1JvdGF0aW9uOworCisgICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFu
aW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCisgICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxp
ZGF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVMaXN0LCBpZ25vcmVkSGFzQmlnUm90YXRpb24p
ID49IDA7CisKKyAgICBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1l
KCkgLSBkZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0OworICAgIG1fYW5pbWF0aW9ucy5hZGQoR3Jh
cGhpY3NMYXllckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFu
aW0sIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSwgbGlzdHNNYXRjaCkpOworICAgIG1fYW5pbWF0
aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICBkaWRDaGFuZ2VBbmltYXRpb25z
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1l
KQoreworICAgIG1fYW5pbWF0aW9ucy5wYXVzZShhbmltYXRpb25OYW1lLCB0aW1lKTsKKyAgICBk
aWRDaGFuZ2VBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OjpyZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQoreworICAgIG1f
YW5pbWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uTmFtZSk7CisgICAgZGlkQ2hhbmdlQW5pbWF0aW9u
cygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3VzcGVuZEFuaW1hdGlv
bnMoZG91YmxlIHRpbWUpCit7CisgICAgbV9hbmltYXRpb25zLnN1c3BlbmQodGltZSk7CisgICAg
ZGlkQ2hhbmdlQW5pbWF0aW9ucygpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgbV9hbmltYXRpb25zLnJlc3VtZSgpOworICAg
IGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcj4qKQoreworICAgIGNsaWVudCgpLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRoaXMsIG1f
bGFzdEFuaW1hdGlvblN0YXJ0VGltZSk7Cit9Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5k
aWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3Jk
aW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1NTFkMzUxMWFk
YTY0NGViZjczMmJlZjYyZTg2YWQ5ZDg3ZjFhMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmgKQEAgLTAsMCArMSwyNjggQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKKyNk
ZWZpbmUgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyX2gKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nLmgiCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNs
dWRlICJDb29yZGluYXRlZFRpbGUuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAi
VGlsZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5o
IgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaWYgVVNFKEdSQVBISUNTX1NV
UkZBQ0UpCisjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlVG9rZW4uaCIKKyNlbmRpZgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
OworY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7CisKK2NsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBib29sIGlzRmx1c2hpbmdM
YXllckNoYW5nZXMoKSBjb25zdCA9IDA7CisKKyAgICAvLyBDb29yZGluYXRlZFRpbGVDbGllbnQK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3Qg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0
aWxlSUQpID0gMDsKKworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHZpc2libGVDb250ZW50c1JlY3Qo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nPiBjcmVhdGVJbWFnZUJhY2tpbmdJZk5lZWRlZChJbWFnZSopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRl
ZExheWVySW5mbyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyQ2hpbGRyZW4oQ29v
cmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpID0gMDsK
KyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdmlydHVhbCB2b2lkIHN5bmNMYXllckZpbHRl
cnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgPSAwOworI2Vu
ZGlmCisjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUNh
bnZhcyhDb29yZGluYXRlZExheWVySUQsIFBsYXRmb3JtTGF5ZXIqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBQbGF0Zm9ybUxheWVyKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCkgPSAw
OworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRp
bmF0ZWRMYXllcklELCBpbnQpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllckFuaW1h
dGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYp
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hMYXllcihDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN5bmNGaXhlZExheWVycygpID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUo
Y29uc3QgSW50U2l6ZSYsIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MsIHVpbnQzMl90JiBhdGxh
c0lELCBJbnRQb2ludCYpID0gMDsKK307CisKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCisgICAgLCBwdWJsaWMgVGlsZWRCYWNraW5nU3RvcmVD
bGllbnQKKyAgICAsIHB1YmxpYyBDb29yZGluYXRlZEltYWdlQmFja2luZzo6SG9zdAorICAgICwg
cHVibGljIENvb3JkaW5hdGVkVGlsZUNsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFs
IH5Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoKTsKKworICAgIC8vIFJlaW1wbGVtZW50YXRpb25z
IGZyb20gR3JhcGhpY3NMYXllci5oLgorICAgIHZpcnR1YWwgYm9vbCBzZXRDaGlsZHJlbihjb25z
dCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hp
bGRBdEluZGV4KEdyYXBoaWNzTGF5ZXIqLCBpbnQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZEFib3ZlKEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7
CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQmVsb3coR3JhcGhpY3NMYXllciosIEdyYXBoaWNz
TGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcmVwbGFjZUNoaWxkKEdyYXBoaWNz
TGF5ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZUZyb21QYXJlbnQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9zaXRpb24oY29u
c3QgRmxvYXRQb2ludCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRBbmNob3JQb2lu
dChjb25zdCBGbG9hdFBvaW50M0QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2l6
ZShjb25zdCBGbG9hdFNpemUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldENoaWxkcmVuVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZF
UlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFByZXNlcnZlczNEKGJvb2wpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNrc1RvQm91bmRzKGJvb2wpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBzZXREcmF3c0NvbnRlbnQoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHNldENvbnRlbnRzVmlzaWJsZShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGVudHNPcGFxdWUoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldEJh
Y2tmYWNlVmlzaWJpbGl0eShib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0T3Bh
Y2l0eShmbG9hdCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzUmVjdChj
b25zdCBJbnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzVG9J
bWFnZShJbWFnZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1RvU29s
aWRDb2xvcihjb25zdCBDb2xvciYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93
RGVidWdCb3JkZXIoYm9vbCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHNldFNob3dSZXBh
aW50Q291bnRlcihib29sKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGlyZWN0
bHlDb21wb3NpdGVJbWFnZShJbWFnZSopIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1RvQ2FudmFzKFBsYXRmb3JtTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFza0xheWVyKEdyYXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVwbGljYXRlZEJ5TGF5ZXIoR3JhcGhpY3NMYXllciopIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c05lZWRzRGlzcGxheSgpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYp
IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCkgT1ZFUlJJREU7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIHZpcnR1
YWwgYm9vbCBzZXRGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSBPVkVSUklERTsKKyNl
bmRpZgorICAgIHZpcnR1YWwgYm9vbCBhZGRBbmltYXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxp
c3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiwgZG91
YmxlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3Ry
aW5nJiwgZG91YmxlKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kQW5pbWF0
aW9ucyhkb3VibGUgdGltZSkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoKSBPVkVSUklERTsKKworICAgIEZsb2F0UG9pbnQgY29tcHV0ZVBvc2l0aW9uUmVsYXRp
dmVUb0Jhc2UoKTsKKyAgICB2b2lkIGNvbXB1dGVQaXhlbEFsaWdubWVudChGbG9hdFBvaW50JiBw
b3NpdGlvbiwgRmxvYXRTaXplJiwgRmxvYXRQb2ludDNEJiBhbmNob3JQb2ludCwgRmxvYXRTaXpl
JiBhbGlnbm1lbnRPZmZzZXQpOworCisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudFJlY3RUcmFq
ZWN0b3J5VmVjdG9yKGNvbnN0IEZsb2F0UG9pbnQmKTsKKworICAgIHZvaWQgc2V0Um9vdExheWVy
KGJvb2wpOworCisgICAgQ29vcmRpbmF0ZWRMYXllcklEIGlkKCkgY29uc3Q7CisKKyAgICB2b2lk
IHNldEZpeGVkVG9WaWV3cG9ydChib29sIGlzRml4ZWQpIHsgbV9maXhlZFRvVmlld3BvcnQgPSBp
c0ZpeGVkOyB9CisKKyAgICBJbnRSZWN0IGNvdmVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFp
bkJhY2tpbmdTdG9yZSA/IG1fbWFpbkJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX21haW5C
YWNraW5nU3RvcmUtPmNvdmVyUmVjdCgpKSA6IEludFJlY3QoKTsgfQorCisgICAgLy8gVGlsZWRC
YWNraW5nU3RvcmVDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWlu
dEJlZ2luKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFp
bnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYg
cGFpbnRlZEFyZWEpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9y
ZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24oKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIEludFJlY3Qg
dGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIElu
dFJlY3QgdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVjdCgpIE9WRVJSSURFOworICAgIHZpcnR1
YWwgQ29sb3IgdGlsZWRCYWNraW5nU3RvcmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklE
RTsKKworICAgIC8vIENvb3JkaW5hdGVkVGlsZUNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJ
bnRSZWN0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUodWludDMyX3Qg
dGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVGlsZSh1aW50MzJfdCB0aWxlSUQpIE9WRVJSSURF
OworICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVw
ZGF0ZShjb25zdCBJbnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIEludFBvaW50JikgT1ZFUlJJ
REU7CisKKyAgICB2b2lkIHNldENvb3JkaW5hdG9yKENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCopOworCisgICAgdm9pZCBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOworICAg
IHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7CisgICAgYm9vbCBoYXNQZW5kaW5nVmlzaWJsZUNo
YW5nZXMoKTsKKworcHJpdmF0ZToKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBlbnVt
IFBlbmRpbmdDYW52YXNPcGVyYXRpb24geworICAgICAgICBOb25lID0gMHgwMCwKKyAgICAgICAg
Q3JlYXRlQ2FudmFzID0gMHgwMSwKKyAgICAgICAgRGVzdHJveUNhbnZhcyA9IDB4MDIsCisgICAg
ICAgIFN5bmNDYW52YXMgPSAweDA0LAorICAgICAgICBDcmVhdGVBbmRTeW5jQ2FudmFzID0gQ3Jl
YXRlQ2FudmFzIHwgU3luY0NhbnZhcywKKyAgICAgICAgUmVjcmVhdGVDYW52YXMgPSBDcmVhdGVB
bmRTeW5jQ2FudmFzIHwgRGVzdHJveUNhbnZhcworICAgIH07CisKKyAgICB2b2lkIHN5bmNDYW52
YXMoKTsKKyAgICB2b2lkIGRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpOworICAgIHZvaWQgY3JlYXRl
Q2FudmFzSWZOZWVkZWQoKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCB2b2lkIHNldERlYnVnQm9y
ZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgd2lkdGgpIE9WRVJSSURFOworCisgICAgYm9vbCBmaXhl
ZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQorCisgICAg
dm9pZCBkaWRDaGFuZ2VMYXllclN0YXRlKCk7CisgICAgdm9pZCBkaWRDaGFuZ2VBbmltYXRpb25z
KCk7CisgICAgdm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgpOworICAgIHZvaWQgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgdm9pZCBkaWRDaGFuZ2VGaWx0
ZXJzKCk7CisjZW5kaWYKKyAgICB2b2lkIGRpZENoYW5nZUltYWdlQmFja2luZygpOworCisgICAg
dm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOworICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKKyAgICB2
b2lkIHN5bmNDaGlsZHJlbigpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHN5
bmNGaWx0ZXJzKCk7CisjZW5kaWYKKyAgICB2b2lkIHN5bmNJbWFnZUJhY2tpbmcoKTsKKyAgICB2
b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7CisgICAgdm9pZCB1cGRhdGVDb250
ZW50QnVmZmVycygpOworCisgICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKKyAgICB2b2lk
IHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOworCisgICAgLy8gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6Okhvc3QKKyAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgpIE9W
RVJSSURFOworICAgIGJvb2wgc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0OworICAgIGJv
b2wgc2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdDsKKyAg
ICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKKyAgICB2b2lk
IGFkanVzdENvbnRlbnRzU2NhbGUoKTsKKworICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJs
ZVJlY3QoKTsKKyAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7CisKKyAgICB2b2lk
IGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cj4qKTsKKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX2lkOworICAgIENvb3JkaW5hdGVkTGF5
ZXJJbmZvIG1fbGF5ZXJJbmZvOworICAgIEdyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0gbV9sYXllclRy
YW5zZm9ybTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2NhY2hlZEludmVyc2VUcmFuc2Zv
cm07CisgICAgRmxvYXRTaXplIG1fcGl4ZWxBbGlnbm1lbnRPZmZzZXQ7CisgICAgRmxvYXRTaXpl
IG1fYWRqdXN0ZWRTaXplOworICAgIEZsb2F0UG9pbnQgbV9hZGp1c3RlZFBvc2l0aW9uOworICAg
IEZsb2F0UG9pbnQzRCBtX2FkanVzdGVkQW5jaG9yUG9pbnQ7CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgYm9vbCBtX2lzUHVyZ2luZzsKKyNlbmRpZgorICAgIGJvb2wgbV9zaG91bGRVcGRhdGVWaXNp
YmxlUmVjdDogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0xheWVyU3RhdGU6IDE7CisgICAgYm9v
bCBtX3Nob3VsZFN5bmNDaGlsZHJlbjogMTsKKyAgICBib29sIG1fc2hvdWxkU3luY0ZpbHRlcnM6
IDE7CisgICAgYm9vbCBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmc6IDE7CisgICAgYm9vbCBtX3No
b3VsZFN5bmNBbmltYXRpb25zOiAxOworICAgIGJvb2wgbV9maXhlZFRvVmlld3BvcnQgOiAxOwor
ICAgIGJvb2wgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVzdG1lbnQgOiAxOworICAgIGJvb2wg
bV9wZW5kaW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50IDogMTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VS
RkFDRSkKKyAgICBib29sIG1faXNWYWxpZENhbnZhcyA6IDE7CisgICAgdW5zaWduZWQgbV9wZW5k
aW5nQ2FudmFzT3BlcmF0aW9uIDogMzsKKyNlbmRpZgorCisgICAgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50KiBtX2Nvb3JkaW5hdG9yOworICAgIE93blB0cjxUaWxlZEJhY2tpbmdTdG9y
ZT4gbV9tYWluQmFja2luZ1N0b3JlOworICAgIE93blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9w
cmV2aW91c0JhY2tpbmdTdG9yZTsKKworICAgIFJlZlB0cjxJbWFnZT4gbV9jb21wb3NpdGVkSW1h
Z2U7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHI7CisgICAg
UmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBtX2Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OworCisgICAgUGxhdGZvcm1MYXllciogbV9jYW52YXNQbGF0Zm9ybUxheWVyOworI2lmIFVTRShH
UkFQSElDU19TVVJGQUNFKQorICAgIEludFNpemUgbV9jYW52YXNTaXplOworICAgIEdyYXBoaWNz
U3VyZmFjZVRva2VuIG1fY2FudmFzVG9rZW47CisjZW5kaWYKKyAgICBUaW1lcjxDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI+IG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyOworICAgIEdyYXBoaWNzTGF5
ZXJBbmltYXRpb25zIG1fYW5pbWF0aW9uczsKKyAgICBkb3VibGUgbV9sYXN0QW5pbWF0aW9uU3Rh
cnRUaW1lOworfTsKKworQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiB0b0Nvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllcihHcmFwaGljc0xheWVyKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNl
bmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjE1ZmIzNjEzYjkwN2I2YjFkOWY1
ZTg5MTE5ZGJiMjY0NGY0NTk0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZS5jcHAKQEAgLTAsMCArMSw2OTggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDEyIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICAgIENvcHlyaWdodCAo
QykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZS5oIgorCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCisjaW5j
bHVkZSA8T3BlbkdMU2hpbXMuaD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisjaW5jbHVkZSAi
Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDb29yZGluYXRl
ZEN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtLmgi
CisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkaXNwYXRjaE9u
TWFpblRocmVhZChjb25zdCBGdW5jdGlvbjx2b2lkKCk+JiBmdW5jdGlvbikKK3sKKyAgICBpZiAo
aXNNYWluVGhyZWFkKCkpCisgICAgICAgIGZ1bmN0aW9uKCk7CisgICAgZWxzZQorICAgICAgICBj
YWxsT25NYWluVGhyZWFkKGZ1bmN0aW9uKTsKK30KKworc3RhdGljIEZsb2F0UG9pbnQgYm91bmRl
ZFNjcm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHZpc2libGVDb250ZW50UmVjdCwgY29uc3QgRmxvYXRTaXplJiBjb250ZW50U2l6
ZSkKK3sKKyAgICBmbG9hdCBzY3JvbGxQb3NpdGlvblggPSBzdGQ6Om1heChzY3JvbGxQb3NpdGlv
bi54KCksIDAuMGYpOworICAgIHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWluKHNjcm9sbFBvc2l0
aW9uWCwgY29udGVudFNpemUud2lkdGgoKSAtIHZpc2libGVDb250ZW50UmVjdC53aWR0aCgpKTsK
KworICAgIGZsb2F0IHNjcm9sbFBvc2l0aW9uWSA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLnko
KSwgMC4wZik7CisgICAgc2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25Z
LCBjb250ZW50U2l6ZS5oZWlnaHQoKSAtIHZpc2libGVDb250ZW50UmVjdC5oZWlnaHQoKSk7Cisg
ICAgcmV0dXJuIEZsb2F0UG9pbnQoc2Nyb2xsUG9zaXRpb25YLCBzY3JvbGxQb3NpdGlvblkpOwor
fQorCitzdGF0aWMgYm9vbCBsYXllclNob3VsZEhhdmVCYWNraW5nU3RvcmUoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT5kcmF3c0NvbnRlbnQoKSAmJiBsYXllci0+
Y29udGVudHNBcmVWaXNpYmxlKCkgJiYgIWxheWVyLT5zaXplKCkuaXNFbXB0eSgpOworfQorCitD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmVDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkK
KyAgICAsIG1faXNBY3RpdmUoZmFsc2UpCisgICAgLCBtX3Jvb3RMYXllcklEKEludmFsaWRDb29y
ZGluYXRlZExheWVySUQpCisgICAgLCBtX2FuaW1hdGlvbnNMb2NrZWQoZmFsc2UpCisjaWYgRU5B
QkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgICwgbV9hbmltYXRpb25GcmFtZVJlcXVl
c3RlZChmYWxzZSkKKyNlbmRpZgorICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRl
KQorICAgICwgbV9zZXREcmF3c0JhY2tncm91bmQoZmFsc2UpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKK30KKworQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp+Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKCkKK3sKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHksIGNvbnN0IEZsb2F0UmVjdCYgY2xpcFJlY3QsIFRleHR1cmVNYXBwZXI6
OlBhaW50RmxhZ3MgUGFpbnRGbGFncykKK3sKKyAgICBpZiAoIW1fdGV4dHVyZU1hcHBlcikgewor
ICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFwcGVyOjpjcmVhdGUoVGV4dHVyZU1h
cHBlcjo6T3BlbkdMTW9kZSk7CisgICAgICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+
KG1fdGV4dHVyZU1hcHBlci5nZXQoKSktPnNldEVuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2lu
Zyh0cnVlKTsKKyAgICB9CisKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRp
b25Nb2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6T3BlbkdMTW9kZSk7CisgICAgc3luY1JlbW90ZUNv
bnRlbnQoKTsKKworICAgIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKKyAgICBHcmFw
aGljc0xheWVyKiBjdXJyZW50Um9vdExheWVyID0gcm9vdExheWVyKCk7CisgICAgaWYgKCFjdXJy
ZW50Um9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBUZXh0dXJlTWFwcGVyTGF5ZXIq
IGxheWVyID0gdG9UZXh0dXJlTWFwcGVyTGF5ZXIoY3VycmVudFJvb3RMYXllcik7CisKKyAgICBp
ZiAoIWxheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBsYXllci0+c2V0VGV4dHVyZU1hcHBl
cihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOworICAgIGlmICghbV9hbmltYXRpb25zTG9ja2VkKQor
ICAgICAgICBsYXllci0+YXBwbHlBbmltYXRpb25zUmVjdXJzaXZlbHkoKTsKKyAgICBtX3RleHR1
cmVNYXBwZXItPmJlZ2luUGFpbnRpbmcoUGFpbnRGbGFncyk7CisgICAgbV90ZXh0dXJlTWFwcGVy
LT5iZWdpbkNsaXAoVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2xpcFJlY3QpOworCisgICAgaWYg
KG1fc2V0RHJhd3NCYWNrZ3JvdW5kKSB7CisgICAgICAgIFJHQkEzMiByZ2JhID0gbWFrZVJHQkEz
MkZyb21GbG9hdHMobV9iYWNrZ3JvdW5kQ29sb3IucmVkKCksCisgICAgICAgICAgICBtX2JhY2tn
cm91bmRDb2xvci5ncmVlbigpLCBtX2JhY2tncm91bmRDb2xvci5ibHVlKCksCisgICAgICAgICAg
ICBtX2JhY2tncm91bmRDb2xvci5hbHBoYSgpICogb3BhY2l0eSk7CisgICAgICAgIG1fdGV4dHVy
ZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3IoY2xpcFJlY3QsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCks
IENvbG9yKHJnYmEpKTsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudFJvb3RMYXllci0+b3BhY2l0
eSgpICE9IG9wYWNpdHkgfHwgY3VycmVudFJvb3RMYXllci0+dHJhbnNmb3JtKCkgIT0gbWF0cml4
KSB7CisgICAgICAgIGN1cnJlbnRSb290TGF5ZXItPnNldE9wYWNpdHkob3BhY2l0eSk7CisgICAg
ICAgIGN1cnJlbnRSb290TGF5ZXItPnNldFRyYW5zZm9ybShtYXRyaXgpOworICAgICAgICBjdXJy
ZW50Um9vdExheWVyLT5mbHVzaENvbXBvc2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7Cisg
ICAgfQorCisgICAgbGF5ZXItPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRDbGlw
KCk7CisgICAgbV90ZXh0dXJlTWFwcGVyLT5lbmRQYWludGluZygpOworCisgICAgaWYgKGxheWVy
LT5kZXNjZW5kYW50c09yU2VsZkhhdmVSdW5uaW5nQW5pbWF0aW9ucygpKQorICAgICAgICBkaXNw
YXRjaE9uTWFpblRocmVhZChiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVwZGF0ZVZp
ZXdwb3J0LCB0aGlzKSk7CisKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisg
ICAgaWYgKG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQpIHsKKyAgICAgICAgbV9hbmltYXRpb25G
cmFtZVJlcXVlc3RlZCA9IGZhbHNlOworICAgICAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5k
KCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmFuaW1hdGlvbkZyYW1lUmVhZHksIHRoaXMpKTsK
KyAgICB9CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphbmltYXRpb25GcmFtZVJlYWR5KCkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
bV9jbGllbnQtPmFuaW1hdGlvbkZyYW1lUmVhZHkoKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnJlcXVlc3RBbmltYXRpb25GcmFtZSgpCit7CisgICAgbV9hbmltYXRpb25G
cmFtZVJlcXVlc3RlZCA9IHRydWU7Cit9CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKQordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnBhaW50VG9HcmFwaGljc0NvbnRleHQoUVBhaW50
ZXIqIHBhaW50ZXIpCisjZWxpZiBVU0UoQ0FJUk8pCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6cGFpbnRUb0dyYXBoaWNzQ29udGV4dChjYWlyb190KiBwYWludGVyKQorI2VuZGlmCit7
CisgICAgaWYgKCFtX3RleHR1cmVNYXBwZXIpCisgICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRl
eHR1cmVNYXBwZXI6OmNyZWF0ZSgpOworICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2Vs
ZXJhdGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpTb2Z0d2FyZU1vZGUpOworICAgIHN5bmNS
ZW1vdGVDb250ZW50KCk7CisgICAgVGV4dHVyZU1hcHBlckxheWVyKiBsYXllciA9IHRvVGV4dHVy
ZU1hcHBlckxheWVyKHJvb3RMYXllcigpKTsKKworICAgIGlmICghbGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQocGFpbnRlcik7Cisg
ICAgbV90ZXh0dXJlTWFwcGVyLT5zZXRHcmFwaGljc0NvbnRleHQoJmdyYXBoaWNzQ29udGV4dCk7
CisgICAgbV90ZXh0dXJlTWFwcGVyLT5iZWdpblBhaW50aW5nKCk7CisKKyAgICBpZiAobV9zZXRE
cmF3c0JhY2tncm91bmQpCisgICAgICAgIG1fdGV4dHVyZU1hcHBlci0+ZHJhd1NvbGlkQ29sb3Io
Z3JhcGhpY3NDb250ZXh0LmNsaXBCb3VuZHMoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgbV9i
YWNrZ3JvdW5kQ29sb3IpOworCisgICAgbGF5ZXItPnBhaW50KCk7CisgICAgbV90ZXh0dXJlTWFw
cGVyLT5lbmRQYWludGluZygpOworICAgIG1fdGV4dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250
ZXh0KDApOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0Q29udGVudHNT
aXplKGNvbnN0IEZsb2F0U2l6ZSYgY29udGVudHNTaXplKQoreworICAgIG1fY29udGVudHNTaXpl
ID0gY29udGVudHNTaXplOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0
VmlzaWJsZUNvbnRlbnRzUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgbV92aXNp
YmxlQ29udGVudHNSZWN0ID0gcmVjdDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmU6OnVwZGF0ZVZpZXdwb3J0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVZpZXdwb3J0KCk7Cit9CisK
K3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5
ZXJzKCkKK3sKKyAgICBpZiAobV9maXhlZExheWVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEZpeGVkIGxheWVyIHBvc2l0aW9ucyBhcmUgdXBkYXRlZCBieSB0aGUgd2Vi
IHByb2Nlc3Mgd2hlbiB3ZSB1cGRhdGUgdGhlIHZpc2libGUgY29udGVudHMgcmVjdCAvIHNjcm9s
bCBwb3NpdGlvbi4KKyAgICAvLyBJZiB3ZSB3YW50IHRob3NlIGxheWVycyB0byBmb2xsb3cgYWNj
dXJhdGVseSB0aGUgdmlld3BvcnQgd2hlbiB3ZSBtb3ZlIGJldHdlZW4gdGhlIHdlYiBwcm9jZXNz
IHVwZGF0ZXMsIHdlIGhhdmUgdG8gb2Zmc2V0CisgICAgLy8gdGhlbSBieSB0aGUgZGVsdGEgYmV0
d2VlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aWV3cG9y
dCB1c2VkIGZvciB0aGUgbGFzdCBsYXlvdXQuCisgICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlv
biA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbihtX3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24o
KSwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBtX2NvbnRlbnRzU2l6ZSk7CisgICAgRmxvYXRQb2lu
dCByZW5kZXJlZFNjcm9sbFBvc2l0aW9uID0gYm91bmRlZFNjcm9sbFBvc2l0aW9uKG1fcmVuZGVy
ZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uLCBtX3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVu
dHNTaXplKTsKKyAgICBGbG9hdFNpemUgZGVsdGEgPSBzY3JvbGxQb3NpdGlvbiAtIHJlbmRlcmVk
U2Nyb2xsUG9zaXRpb247CisKKyAgICBMYXllclJhd1B0ck1hcDo6aXRlcmF0b3IgZW5kID0gbV9m
aXhlZExheWVycy5lbmQoKTsKKyAgICBmb3IgKExheWVyUmF3UHRyTWFwOjppdGVyYXRvciBpdCA9
IG1fZml4ZWRMYXllcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICB0b1RleHR1
cmVNYXBwZXJMYXllcihpdC0+dmFsdWUpLT5zZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQo
ZGVsdGEpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6ZGlkQ2hhbmdlU2Ny
b2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgbV9wZW5kaW5n
UmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gcG9zaXRpb247Cit9CisKKyNpZiBVU0Uo
R1JBUEhJQ1NfU1VSRkFDRSkKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVD
YW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBJbnRTaXplJiwgUGFzc1JlZlB0cjxH
cmFwaGljc1N1cmZhY2U+IHN1cmZhY2UpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7
CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworICAgIEFTU0VSVCgh
bV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOworCisgICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlPiBjYW52YXNCYWNraW5nU3RvcmUoVGV4dHVyZU1h
cHBlclN1cmZhY2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgpKTsKKyAgICBtX3N1cmZhY2VCYWNraW5n
U3RvcmVzLnNldChpZCwgY2FudmFzQmFja2luZ1N0b3JlKTsKKworICAgIGNhbnZhc0JhY2tpbmdT
dG9yZS0+c2V0R3JhcGhpY3NTdXJmYWNlKHN1cmZhY2UpOworICAgIGxheWVyLT5zZXRDb250ZW50
c1RvTWVkaWEoY2FudmFzQmFja2luZ1N0b3JlLmdldCgpKTsKK30KKwordm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmU6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCB1aW50MzJf
dCBmcm9udEJ1ZmZlcikKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyKTsKKyAgICBBU1NF
UlQobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkpOworCisgICAgU3VyZmFjZUJh
Y2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmZpbmQo
aWQpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY2FudmFz
QmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOworCisgICAgY2FudmFzQmFja2luZ1N0b3JlLT5zd2Fw
QnVmZmVyc0lmTmVlZGVkKGZyb250QnVmZmVyKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQoreworICAgIEFT
U0VSVChtX3RleHR1cmVNYXBwZXIpOworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJC
eUlEKGlkKTsKKyAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkp
OworCisgICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5yZW1vdmUoaWQpOworICAgIGxheWVyLT5z
ZXRDb250ZW50c1RvTWVkaWEoMCk7Cit9CisjZW5kaWYKKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgaW50
IHZhbHVlKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKKyAg
ICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKGxheWVyKS0+c2V0UmVwYWludENvdW50KHZh
bHVlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRy
ZW4oQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYgY2hpbGRJRHMpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQp
OworICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7CisgICAgICAgIENvb3JkaW5hdGVk
TGF5ZXJJRCBjaGlsZElEID0gY2hpbGRJRHNbaV07CisgICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNo
aWxkID0gbGF5ZXJCeUlEKGNoaWxkSUQpOworICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQp
OworICAgIH0KKyAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOworfQorCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVy
RmlsdGVycyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZp
bHRlcnMpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworCisj
aWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dy
YW1zKGZpbHRlcnMpOworI2VuZGlmCisgICAgbGF5ZXItPnNldEZpbHRlcnMoZmlsdGVycyk7Cit9
CisjZW5kaWYKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjppbmplY3RDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtcyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmaWx0ZXJzKSBjb25zdAoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZmlsdGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBGaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlv
biA9IGZpbHRlcnMub3BlcmF0aW9ucygpLmF0KGkpLmdldCgpOworICAgICAgICBpZiAob3BlcmF0
aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkgIT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJh
dGlvbiogY3VzdG9tT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q29vcmRpbmF0ZWRDdXN0b21GaWx0
ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgICAgICBBU1NFUlQoIWN1c3RvbU9wZXJhdGlv
bi0+cHJvZ3JhbSgpKTsKKyAgICAgICAgQ3VzdG9tRmlsdGVyUHJvZ3JhbU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZmluZChjdXN0b21PcGVyYXRpb24t
PnByb2dyYW1JRCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9n
cmFtcy5lbmQoKSk7CisgICAgICAgIGN1c3RvbU9wZXJhdGlvbi0+c2V0UHJvZ3JhbShpdGVyLT52
YWx1ZS5nZXQoKSk7CisgICAgfQorfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y3JlYXRlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dy
YW1JbmZvJiBwcm9ncmFtSW5mbykKK3sKKyAgICBBU1NFUlQoIW1fY3VzdG9tRmlsdGVyUHJvZ3Jh
bXMuY29udGFpbnMoaWQpKTsKKyAgICBtX2N1c3RvbUZpbHRlclByb2dyYW1zLnNldChpZCwgQ29v
cmRpbmF0ZWRDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUocHJvZ3JhbUluZm8udmVydGV4U2hh
ZGVyU3RyaW5nKCksIHByb2dyYW1JbmZvLmZyYWdtZW50U2hhZGVyU3RyaW5nKCksIHByb2dyYW1J
bmZvLnByb2dyYW1UeXBlKCksIHByb2dyYW1JbmZvLm1peFNldHRpbmdzKCksIHByb2dyYW1JbmZv
Lm1lc2hUeXBlKCkpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbW92
ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQoreworICAgIEN1c3RvbUZpbHRlclByb2dyYW1N
YXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2N1c3RvbUZpbHRlclByb2dyYW1zLmZpbmQoaWQpOworICAg
IEFTU0VSVChpdGVyICE9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZW5kKCkpOworICAgIGlmICht
X3RleHR1cmVNYXBwZXIpCisgICAgICAgIG1fdGV4dHVyZU1hcHBlci0+cmVtb3ZlQ2FjaGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbShpdGVyLT52YWx1ZS5nZXQoKSk7CisgICAgbV9jdXN0b21GaWx0ZXJQ
cm9ncmFtcy5yZW1vdmUoaXRlcik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0TGF5ZXJTdGF0ZShDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IENvb3JkaW5hdGVkTGF5ZXJJbmZvJiBsYXllckluZm8pCit7Cisg
ICAgQVNTRVJUKG1fcm9vdExheWVySUQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7Cisg
ICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOworCisgICAgbGF5ZXItPnNl
dFJlcGxpY2F0ZWRCeUxheWVyKGdldExheWVyQnlJRElmRXhpc3RzKGxheWVySW5mby5yZXBsaWNh
KSk7CisgICAgbGF5ZXItPnNldE1hc2tMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllcklu
Zm8ubWFzaykpOworCisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KGxheWVySW5mby5hbmNob3JQ
b2ludCk7CisgICAgbGF5ZXItPnNldFBvc2l0aW9uKGxheWVySW5mby5wb3MpOworICAgIGxheWVy
LT5zZXRTaXplKGxheWVySW5mby5zaXplKTsKKworICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0obGF5
ZXJJbmZvLnRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldENoaWxkcmVuVHJhbnNmb3JtKGxheWVy
SW5mby5jaGlsZHJlblRyYW5zZm9ybSk7CisgICAgbGF5ZXItPnNldEJhY2tmYWNlVmlzaWJpbGl0
eShsYXllckluZm8uYmFja2ZhY2VWaXNpYmxlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNPcGFx
dWUobGF5ZXJJbmZvLmNvbnRlbnRzT3BhcXVlKTsKKyAgICBsYXllci0+c2V0Q29udGVudHNSZWN0
KGxheWVySW5mby5jb250ZW50c1JlY3QpOworICAgIGxheWVyLT5zZXRDb250ZW50c1RvU29saWRD
b2xvcihsYXllckluZm8uc29saWRDb2xvcik7CisgICAgbGF5ZXItPnNldERyYXdzQ29udGVudChs
YXllckluZm8uZHJhd3NDb250ZW50KTsKKyAgICBsYXllci0+c2V0Q29udGVudHNWaXNpYmxlKGxh
eWVySW5mby5jb250ZW50c1Zpc2libGUpOworICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBw
ZXIobGF5ZXIpLT5zZXRGaXhlZFRvVmlld3BvcnQobGF5ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCk7
CisgICAgbGF5ZXItPnNldFNob3dEZWJ1Z0JvcmRlcihsYXllckluZm8uc2hvd0RlYnVnQm9yZGVy
cyk7CisgICAgbGF5ZXItPnNldERlYnVnQm9yZGVyKGxheWVySW5mby5kZWJ1Z0JvcmRlckNvbG9y
LCBsYXllckluZm8uZGVidWdCb3JkZXJXaWR0aCk7CisgICAgbGF5ZXItPnNldFNob3dSZXBhaW50
Q291bnRlcihsYXllckluZm8uc2hvd1JlcGFpbnRDb3VudGVyKTsKKworICAgIGlmIChsYXllcklu
Zm8uZml4ZWRUb1ZpZXdwb3J0KQorICAgICAgICBtX2ZpeGVkTGF5ZXJzLmFkZChpZCwgbGF5ZXIp
OworICAgIGVsc2UKKyAgICAgICAgbV9maXhlZExheWVycy5yZW1vdmUoaWQpOworCisgICAgYXNz
aWduSW1hZ2VCYWNraW5nVG9MYXllcihsYXllciwgbGF5ZXJJbmZvLmltYWdlSUQpOworICAgIHBy
ZXBhcmVDb250ZW50QmFja2luZ1N0b3JlKGxheWVyKTsKKworICAgIC8vIE5ldmVyIG1ha2UgdGhl
IHJvb3QgbGF5ZXIgY2xpcC4KKyAgICBsYXllci0+c2V0TWFza3NUb0JvdW5kcyhsYXllckluZm8u
aXNSb290TGF5ZXIgPyBmYWxzZSA6IGxheWVySW5mby5tYXNrc1RvQm91bmRzKTsKKyAgICBsYXll
ci0+c2V0T3BhY2l0eShsYXllckluZm8ub3BhY2l0eSk7CisgICAgbGF5ZXItPnNldFByZXNlcnZl
czNEKGxheWVySW5mby5wcmVzZXJ2ZXMzRCk7Cit9CisKK0dyYXBoaWNzTGF5ZXIqIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZTo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklE
IGlkKQoreworICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkgPyBs
YXllckJ5SUQoaWQpIDogMDsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNy
ZWF0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYgaWRzKQoreworICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBpZHMuc2l6ZSgpOyArK2luZGV4KQorICAg
ICAgICBjcmVhdGVMYXllcihpZHNbaW5kZXhdKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OmNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCkKK3sKKyAgICBPd25Q
dHI8R3JhcGhpY3NMYXllcj4gbmV3TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCAvKiBm
YWN0b3J5ICovLCB0aGlzKTsKKyAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKG5ld0xh
eWVyLmdldCgpKS0+c2V0SGFzT3duQmFja2luZ1N0b3JlKGZhbHNlKTsKKyAgICBtX2xheWVycy5h
ZGQoaWQsIG5ld0xheWVyLnJlbGVhc2UoKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lOjpkZWxldGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxh
eWVySURzKQoreworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBsYXllcklEcy5z
aXplKCk7ICsraW5kZXgpCisgICAgICAgIGRlbGV0ZUxheWVyKGxheWVySURzW2luZGV4XSk7Cit9
CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxldGVMYXllcihDb29yZGluYXRl
ZExheWVySUQgbGF5ZXJJRCkKK3sKKyAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbGF5ZXIgPSBt
X2xheWVycy50YWtlKGxheWVySUQpOworICAgIEFTU0VSVChsYXllcik7CisKKyAgICBtX2JhY2tp
bmdTdG9yZXMucmVtb3ZlKGxheWVyLmdldCgpKTsKKyAgICBtX2ZpeGVkTGF5ZXJzLnJlbW92ZShs
YXllcklEKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBtX3N1cmZhY2VCYWNraW5n
U3RvcmVzLnJlbW92ZShsYXllcklEKTsKKyNlbmRpZgorfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6c2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQpCit7
CisgICAgQVNTRVJUKGxheWVySUQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAg
QVNTRVJUKG1fcm9vdExheWVySUQgPT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCk7CisKKyAg
ICBtX3Jvb3RMYXllcklEID0gbGF5ZXJJRDsKKworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0g
bGF5ZXJCeUlEKGxheWVySUQpOworICAgIEFTU0VSVChtX3Jvb3RMYXllci0+Y2hpbGRyZW4oKS5p
c0VtcHR5KCkpOworICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZChsYXllcik7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShHcmFw
aGljc0xheWVyKiBncmFwaGljc0xheWVyKQoreworICAgIGlmICghbGF5ZXJTaG91bGRIYXZlQmFj
a2luZ1N0b3JlKGdyYXBoaWNzTGF5ZXIpKSB7CisgICAgICAgIHJlbW92ZUJhY2tpbmdTdG9yZUlm
TmVlZGVkKGdyYXBoaWNzTGF5ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY3Jl
YXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoZ3JhcGhpY3NMYXllcik7Cit9CisKK3ZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVCYWNraW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyKQoreworICAgIGlmIChtX2JhY2tpbmdTdG9yZXMuY29udGFpbnMo
Z3JhcGhpY3NMYXllcikpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxDb29yZGluYXRl
ZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpjcmVh
dGUoKSk7CisgICAgYmFja2luZ1N0b3JlLT5zZXRTaXplKGdyYXBoaWNzTGF5ZXItPnNpemUoKSk7
CisgICAgbV9iYWNraW5nU3RvcmVzLmFkZChncmFwaGljc0xheWVyLCBiYWNraW5nU3RvcmUpOwor
ICAgIHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIoZ3JhcGhpY3NMYXllciktPnNldEJhY2tp
bmdTdG9yZShiYWNraW5nU3RvcmUpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6cmVtb3ZlQmFja2luZ1N0b3JlSWZOZWVkZWQoR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXll
cikKK3sKKyAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9
IG1fYmFja2luZ1N0b3Jlcy50YWtlKGdyYXBoaWNzTGF5ZXIpOworICAgIGlmICghYmFja2luZ1N0
b3JlKQorICAgICAgICByZXR1cm47CisKKyAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVy
KGdyYXBoaWNzTGF5ZXIpLT5zZXRCYWNraW5nU3RvcmUoMCk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpyZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyKQoreworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChncmFwaGljc0xheWVyKTsK
KyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKKyAgICBiYWNraW5nU3RvcmUtPnNldFNpemUoZ3Jh
cGhpY3NMYXllci0+c2l6ZSgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwg
ZmxvYXQgc2NhbGUpCit7CisgICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQobGF5
ZXJJRCk7CisgICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUg
PSBtX2JhY2tpbmdTdG9yZXMuZ2V0KGxheWVyKTsKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsK
KyAgICBiYWNraW5nU3RvcmUtPmNyZWF0ZVRpbGUodGlsZUlELCBzY2FsZSk7CisgICAgcmVzZXRC
YWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlEKQoreworICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGxh
eWVySUQpOworICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
ID0gbV9iYWNraW5nU3RvcmVzLmdldChsYXllcik7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlVGlsZSh0aWxlSUQpOwor
ICAgIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKGxheWVyKTsKKyAgICBtX2JhY2tp
bmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBs
YXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKK3sKKyAg
ICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKKyAgICBSZWZQdHI8
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5n
ZXQobGF5ZXIpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOworCisgICAgU3VyZmFjZU1hcDo6
aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VzLmZpbmQodXBkYXRlLmF0bGFzSUQpOworICAgIEFTU0VS
VChpdCAhPSBtX3N1cmZhY2VzLmVuZCgpKTsKKworICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGls
ZSh0aWxlSUQsIHVwZGF0ZS5zb3VyY2VSZWN0LCB1cGRhdGUudGlsZVJlY3QsIGl0LT52YWx1ZSwg
dXBkYXRlLm9mZnNldCk7CisgICAgcmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5
ZXIpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0
b3JlKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJm
YWNlKQoreworICAgIEFTU0VSVCghbV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lEKSk7CisgICAg
bV9zdXJmYWNlcy5hZGQoYXRsYXNJRCwgc3VyZmFjZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lOjpyZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKQoreworICAg
IEFTU0VSVChtX3N1cmZhY2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKKyAgICBtX3N1cmZhY2VzLnJl
bW92ZShhdGxhc0lEKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmNyZWF0
ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAg
QVNTRVJUKCFtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIFJlZlB0cjxD
b29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpjcmVhdGUoKSk7CisgICAgbV9pbWFnZUJhY2tpbmdzLmFkZChpbWFnZUlELCBiYWNraW5n
U3RvcmUucmVsZWFzZSgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnVw
ZGF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIFBhc3NS
ZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBzdXJmYWNlKQoreworICAgIEFTU0VSVChtX2ltYWdl
QmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOworICAgIEltYWdlQmFja2luZ01hcDo6aXRlcmF0
b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKKyAgICBSZWZQdHI8Q29vcmRp
bmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsKKworICAgIC8vIENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nIGlzIHJlYWxpemVkIHRvIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlIHdpdGggb25seSBvbmUgdGlsZSBpbiBVSSBQcm9jZXNzLgorICAgIGJhY2tpbmdTdG9yZS0+
Y3JlYXRlVGlsZSgxIC8qIGlkICovLCAxIC8qIHNjYWxlICovKTsKKyAgICBJbnRSZWN0IHJlY3Qo
SW50UG9pbnQ6Onplcm8oKSwgc3VyZmFjZS0+c2l6ZSgpKTsKKyAgICAvLyBTZWUgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzaG91bGREaXJlY3RseUNvbXBvc2l0ZUltYWdlKCkKKyAgICBBU1NF
UlQoMjAwMCA+PSBzdGQ6Om1heChyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKKyAgICBi
YWNraW5nU3RvcmUtPnNldFNpemUocmVjdC5zaXplKCkpOworICAgIGJhY2tpbmdTdG9yZS0+dXBk
YXRlVGlsZSgxIC8qIGlkICovLCByZWN0LCByZWN0LCBzdXJmYWNlLCByZWN0LmxvY2F0aW9uKCkp
OworCisgICAgbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3Rv
cmUpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Y2xlYXJJbWFnZUJhY2tp
bmdDb250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCit7CisgICAgQVNT
RVJUKG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7CisgICAgSW1hZ2VCYWNraW5n
TWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOworICAgIFJl
ZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwor
ICAgIGJhY2tpbmdTdG9yZS0+cmVtb3ZlQWxsVGlsZXMoKTsKKyAgICBtX2JhY2tpbmdTdG9yZXNX
aXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJhY2tpbmdTdG9yZSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCBpbWFnZUlEKQoreworICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1h
Z2VJRCkpOworCisgICAgLy8gV2UgZG9uJ3Qgd2FudCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVmZXJz
IGEgZGFuZ2xpbmcgcG9pbnRlci4KKyAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQo
bV9pbWFnZUJhY2tpbmdzLnRha2UoaW1hZ2VJRCkpOworfQorCit2b2lkIENvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZTo6YXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiBsYXll
ciwgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQoreworICAgIGlmIChpbWFnZUlE
ID09IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSB7CisgICAgICAgIGxheWVyLT5z
ZXRDb250ZW50c1RvTWVkaWEoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSW1hZ2VC
YWNraW5nTWFwOjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwor
ICAgIEFTU0VSVChpdCAhPSBtX2ltYWdlQmFja2luZ3MuZW5kKCkpOworICAgIGxheWVyLT5zZXRD
b250ZW50c1RvTWVkaWEoaXQtPnZhbHVlLmdldCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCkKK3sKKyAg
ICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5jbGVhcigpOworfQorCit2b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKQorewor
ICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBl
bmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuZW5kKCk7CisgICAgZm9yIChI
YXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBt
X2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAoKml0KS0+Y29tbWl0VGlsZU9wZXJhdGlvbnMobV90ZXh0dXJlTWFwcGVyLmdl
dCgpKTsKKworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwor
fQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6Zmx1c2hMYXllckNoYW5nZXMoKQor
eworICAgIG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uID0gbV9wZW5kaW5nUmVuZGVy
ZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uOworCisgICAgLy8gU2luY2UgdGhlIGZyYW1lIGhhcyBu
b3cgYmVlbiByZW5kZXJlZCwgd2UgY2FuIHNhZmVseSB1bmxvY2sgdGhlIGFuaW1hdGlvbnMgdW50
aWwgdGhlIG5leHQgbGF5b3V0LgorICAgIHNldEFuaW1hdGlvbnNMb2NrZWQoZmFsc2UpOworCisg
ICAgbV9yb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZShGbG9hdFJlY3QoKSk7CisgICAg
Y29tbWl0UGVuZGluZ0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKTsKKyAgICByZW1vdmVSZWxlYXNl
ZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpOworCisgICAgLy8gVGhlIHBlbmRpbmcgdGlsZXMgc3Rh
dGUgaXMgb24gaXRzIHdheSBmb3IgdGhlIHNjcmVlbiwgdGVsbCB0aGUgd2ViIHByb2Nlc3MgdG8g
cmVuZGVyIHRoZSBuZXh0IG9uZS4KKyAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZDb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmU6OnJlbmRlck5leHRGcmFtZSwgdGhpcykpOworfQorCit2b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVuZGVyTmV4dEZyYW1lKCkKK3sKKyAgICBpZiAo
bV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5yZW5kZXJOZXh0RnJhbWUoKTsKK30KKwordm9p
ZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmVuc3VyZVJvb3RMYXllcigpCit7CisgICAgaWYg
KG1fcm9vdExheWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jvb3RMYXllciA9IEdyYXBo
aWNzTGF5ZXI6OmNyZWF0ZSgwIC8qIGZhY3RvcnkgKi8sIHRoaXMpOworICAgIG1fcm9vdExheWVy
LT5zZXRNYXNrc1RvQm91bmRzKGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250
ZW50KGZhbHNlKTsKKyAgICBtX3Jvb3RMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNE
KDAsIDAsIDApKTsKKworICAgIC8vIFRoZSByb290IGxheWVyIHNob3VsZCBub3QgaGF2ZSB6ZXJv
IHNpemUsIG9yIGl0IHdvdWxkIGJlIG9wdGltaXplZCBvdXQuCisgICAgbV9yb290TGF5ZXItPnNl
dFNpemUoRmxvYXRTaXplKDEuMCwgMS4wKSk7CisKKyAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVy
KTsKKyAgICB0b1RleHR1cmVNYXBwZXJMYXllcihtX3Jvb3RMYXllci5nZXQoKSktPnNldFRleHR1
cmVNYXBwZXIobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKK30KKwordm9pZCBDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OnN5bmNSZW1vdGVDb250ZW50KCkKK3sKKyAgICAvLyBXZSBlbnF1ZXVlIG1l
c3NhZ2VzIGFuZCBleGVjdXRlIHRoZW0gZHVyaW5nIHBhaW50LCBhcyB0aGV5IHJlcXVpcmUgYW4g
YWN0aXZlIEdMIGNvbnRleHQuCisgICAgZW5zdXJlUm9vdExheWVyKCk7CisKKyAgICBWZWN0b3I8
RnVuY3Rpb248dm9pZCgpPiA+IHJlbmRlclF1ZXVlOworICAgIGJvb2wgY2FsbGVkT25NYWluVGhy
ZWFkID0gV1RGOjppc01haW5UaHJlYWQoKTsKKyAgICBpZiAoIWNhbGxlZE9uTWFpblRocmVhZCkK
KyAgICAgICAgbV9yZW5kZXJRdWV1ZU11dGV4LmxvY2soKTsKKyAgICByZW5kZXJRdWV1ZS5zd2Fw
KG1fcmVuZGVyUXVldWUpOworICAgIGlmICghY2FsbGVkT25NYWluVGhyZWFkKQorICAgICAgICBt
X3JlbmRlclF1ZXVlTXV0ZXgudW5sb2NrKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJlbmRlclF1ZXVlLnNpemUoKTsgKytpKQorICAgICAgICByZW5kZXJRdWV1ZVtpXSgpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VHTFJlc291cmNlcygpCit7Cisg
ICAgbV9pbWFnZUJhY2tpbmdzLmNsZWFyKCk7CisgICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3Mu
Y2xlYXIoKTsKKyNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKKyAgICBtX3N1cmZhY2VCYWNraW5n
U3RvcmVzLmNsZWFyKCk7CisjZW5kaWYKKyAgICBtX3N1cmZhY2VzLmNsZWFyKCk7CisKKyAgICBt
X3Jvb3RMYXllci5jbGVhcigpOworICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlkQ29vcmRpbmF0
ZWRMYXllcklEOworICAgIG1fbGF5ZXJzLmNsZWFyKCk7CisgICAgbV9maXhlZExheWVycy5jbGVh
cigpOworICAgIG1fdGV4dHVyZU1hcHBlci5jbGVhcigpOworICAgIG1fYmFja2luZ1N0b3Jlcy5j
bGVhcigpOworICAgIG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwor
CisgICAgc2V0QWN0aXZlKGZhbHNlKTsKKyAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnB1cmdlQmFja2luZ1N0b3JlcywgdGhpcykpOworfQor
Cit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKK3sK
KyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5wdXJnZUJhY2tpbmdTdG9yZXMo
KTsKK30KKwordm9pZCBDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQW5pbWF0aW9u
cyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBh
bmltYXRpb25zKQoreworICAgIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyKiBsYXllciA9IHRv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXJCeUlEKGlkKSk7CisjaWYgRU5BQkxFKENT
U19TSEFERVJTKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbWF0aW9ucy5hbmltYXRp
b25zKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtl
eWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygpLmF0KGkpLmtleWZyYW1lcygpOworICAg
ICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZp
bHRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsg
aiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgY29uc3QgRmlsdGVyQW5p
bWF0aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0
aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOworICAgICAgICAgICAgaW5qZWN0Q2FjaGVkQ3Vz
dG9tRmlsdGVyUHJvZ3JhbXMoKmZpbHRlclZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAg
IH0KKyNlbmRpZgorICAgIGxheWVyLT5zZXRBbmltYXRpb25zKGFuaW1hdGlvbnMpOworfQorCit2
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QW5pbWF0aW9uc0xvY2tlZChib29sIGxv
Y2tlZCkKK3sKKyAgICBtX2FuaW1hdGlvbnNMb2NrZWQgPSBsb2NrZWQ7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZXRhY2goKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgbV9jbGllbnQgPSAwOworfQorCit2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6YXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQorewor
ICAgIGlmICghbV9pc0FjdGl2ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9yZW5kZXJRdWV1ZU11dGV4KTsK
KyAgICBtX3JlbmRlclF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Cit9CisKK3ZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lOjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgaWYgKG1faXNB
Y3RpdmUgPT0gYWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBIYXZlIHRvIGNsZWFy
IHJlbmRlciBxdWV1ZSBpbiBib3RoIGNhc2VzLgorICAgIC8vIElmIHRoZXJlIGFyZSBzb21lIHVw
ZGF0ZXMgaW4gcXVldWUgZHVyaW5nIGFjdGl2YXRpb24gdGhlbiB0aG9zZSB1cGRhdGVzIGFyZSBm
cm9tIHByZXZpb3VzIGluc3RhbmNlIG9mIHBhaW50IG5vZGUKKyAgICAvLyBhbmQgY2Fubm90IGJl
IGFwcGxpZWQgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgaW5zdGFuY2UuCisgICAgbV9yZW5kZXJRdWV1
ZS5jbGVhcigpOworICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7CisgICAgaWYgKG1faXNBY3RpdmUp
CisgICAgICAgIGRpc3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6cmVuZGVyTmV4dEZyYW1lLCB0aGlzKSk7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRHcmFw
aGljc1NjZW5lOjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAg
IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmFi
MTY2MmQxYWM1YzQyM2ZkNTAxMGIwMWNkN2U0MDYzNjkzMzgzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3Jk
aW5hdGVkR3JhcGhpY3NTY2VuZS5oCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICAgIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisq
LworCisjaWZuZGVmIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZV9oCisjZGVmaW5lIENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZV9oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5j
bHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZh
Y2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xh
eWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU7CitjbGFzcyBDb29yZGluYXRlZExheWVySW5mbzsKK2NsYXNzIEN1c3RvbUZpbHRlclByb2dy
YW07CitjbGFzcyBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbzsKK2NsYXNzIFRleHR1cmVNYXBwZXJM
YXllcjsKKworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzU2NlbmVDbGllbnQoKSB7IH0KKyNpZiBF
TkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlv
bkZyYW1lUmVhZHkoKSA9IDA7CisjZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgcHVyZ2VCYWNraW5n
U3RvcmVzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCkgPSAwOworfTsKKworY2xhc3MgQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZT4sIHB1YmxpYyBHcmFwaGljc0xheWVyQ2xpZW50IHsKK3B1YmxpYzoK
KyAgICBzdHJ1Y3QgVGlsZVVwZGF0ZSB7CisgICAgICAgIEludFJlY3Qgc291cmNlUmVjdDsKKyAg
ICAgICAgSW50UmVjdCB0aWxlUmVjdDsKKyAgICAgICAgdWludDMyX3QgYXRsYXNJRDsKKyAgICAg
ICAgSW50UG9pbnQgb2Zmc2V0OworICAgICAgICBUaWxlVXBkYXRlKGNvbnN0IEludFJlY3QmIHNv
dXJjZSwgY29uc3QgSW50UmVjdCYgdGlsZSwgdWludDMyX3QgYXRsYXMsIGNvbnN0IEludFBvaW50
JiBuZXdPZmZzZXQpCisgICAgICAgICAgICA6IHNvdXJjZVJlY3Qoc291cmNlKQorICAgICAgICAg
ICAgLCB0aWxlUmVjdCh0aWxlKQorICAgICAgICAgICAgLCBhdGxhc0lEKGF0bGFzKQorICAgICAg
ICAgICAgLCBvZmZzZXQobmV3T2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9Owor
ICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZShDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmVDbGllbnQqKTsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsK
KyAgICB2b2lkIHBhaW50VG9DdXJyZW50R0xDb250ZXh0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQsIGNvbnN0IEZsb2F0UmVjdCYsIFRleHR1cmVNYXBwZXI6OlBhaW50RmxhZ3Mg
PSAwKTsKKyNpZiBQTEFURk9STShRVCkKKyAgICB2b2lkIHBhaW50VG9HcmFwaGljc0NvbnRleHQo
UVBhaW50ZXIqKTsKKyNlbGlmIFVTRShDQUlSTykKKyAgICB2b2lkIHBhaW50VG9HcmFwaGljc0Nv
bnRleHQoY2Fpcm9fdCopOworI2VuZGlmCisgICAgdm9pZCBzZXRDb250ZW50c1NpemUoY29uc3Qg
RmxvYXRTaXplJik7CisgICAgdm9pZCBzZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24pOworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHZvaWQgY3JlYXRl
Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgSW50U2l6ZSYsIFBhc3NSZWZQdHI8R3Jh
cGhpY3NTdXJmYWNlPik7CisgICAgdm9pZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwg
dWludDMyX3QgZnJvbnRCdWZmZXIpOworICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRl
ZExheWVySUQpOworI2VuZGlmCisgICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGlu
YXRlZExheWVySUQsIGludCB2YWx1ZSk7CisKKyAgICB2b2lkIGRldGFjaCgpOworICAgIHZvaWQg
YXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKworICAgIC8vIFRoZSBwYWlu
dGluZyB0aHJlYWQgbXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byB1c2UgYmVsb3cgdHdvIG1l
dGhvZHMsIGJlY2F1c2UgdHdvIG1ldGhvZHMgYWNjZXNzIG1lbWJlcnMgdGhhdCB0aGUgbWFpbiB0
aHJlYWQgbWFuYWdlcy4gU2VlIG1fY2xpZW50LgorICAgIC8vIEN1cnJlbnRseSwgUVF1aWNrV2Vi
UGFnZTo6dXBkYXRlUGFpbnROb2RlKCkgbG9ja3MgdGhlIG1haW4gdGhyZWFkIGJlZm9yZSBjYWxs
aW5nIGJvdGggbWV0aG9kcy4KKyAgICB2b2lkIHB1cmdlR0xSZXNvdXJjZXMoKTsKKyAgICB2b2lk
IHNldEFjdGl2ZShib29sKTsKKworICAgIHZvaWQgY3JlYXRlTGF5ZXJzKGNvbnN0IFZlY3RvcjxD
b29yZGluYXRlZExheWVySUQ+Jik7CisgICAgdm9pZCBkZWxldGVMYXllcnMoY29uc3QgVmVjdG9y
PENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIHNldFJvb3RMYXllcklEKENvb3JkaW5h
dGVkTGF5ZXJJRCk7CisgICAgdm9pZCBzZXRMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIHNldExheWVy
U3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOwor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICB2b2lkIHNldExheWVyRmlsdGVycyhDb29yZGlu
YXRlZExheWVySUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKKyNlbmRpZgorI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICB2b2lkIGluamVjdENhY2hlZEN1c3RvbUZpbHRlclByb2dyYW1z
KGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpIGNvbnN0OworICAgIHZvaWQgY3JlYXRl
Q3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZv
Jik7CisgICAgdm9pZCByZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCk7CisjZW5kaWYK
KworICAgIHZvaWQgY3JlYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJ
RCwgZmxvYXQgc2NhbGUpOworICAgIHZvaWQgcmVtb3ZlVGlsZShDb29yZGluYXRlZExheWVySUQs
IHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCB1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJ
RCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBUaWxlVXBkYXRlJik7CisgICAgdm9pZCBjcmVhdGVV
cGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFj
ZT4pOworICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCk7CisgICAg
dm9pZCBmbHVzaExheWVyQ2hhbmdlcygpOworICAgIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpOworICAgIHZvaWQgdXBkYXRlSW1hZ2VCYWNraW5nKENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7
CisgICAgdm9pZCBjbGVhckltYWdlQmFja2luZ0NvbnRlbnRzKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nSUQpOworICAgIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwg
Y29uc3QgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMmKTsKKyAgICB2b2lkIHNldEFuaW1hdGlvbnNM
b2NrZWQoYm9vbCk7CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImKTsK
KyAgICB2b2lkIHNldERyYXdzQmFja2dyb3VuZChib29sIGVuYWJsZSkgeyBtX3NldERyYXdzQmFj
a2dyb3VuZCA9IGVuYWJsZTsgfQorCisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1F
KQorICAgIHZvaWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCk7CisjZW5kaWYKKworcHJpdmF0ZToK
KyAgICBHcmFwaGljc0xheWVyKiBsYXllckJ5SUQoQ29vcmRpbmF0ZWRMYXllcklEIGlkKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fbGF5ZXJzLmNvbnRhaW5zKGlkKSk7CisgICAgICAgIEFTU0VS
VChpZCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKTsKKyAgICAgICAgcmV0dXJuIG1fbGF5
ZXJzLmdldChpZCk7CisgICAgfQorICAgIEdyYXBoaWNzTGF5ZXIqIGdldExheWVyQnlJRElmRXhp
c3RzKENvb3JkaW5hdGVkTGF5ZXJJRCk7CisgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkg
eyByZXR1cm4gbV9yb290TGF5ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc3luY1JlbW90ZUNvbnRl
bnQoKTsKKyAgICB2b2lkIGFkanVzdFBvc2l0aW9uRm9yRml4ZWRMYXllcnMoKTsKKworICAgIC8v
IFJlaW1wbGVtZW50YXRpb25zIGZyb20gR3JhcGhpY3NMYXllckNsaWVudC4KKyAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91Ymxl
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGlj
c0xheWVyKikgeyB9CisgICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHMoY29uc3QgR3JhcGhp
Y3NMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBj
b25zdCBJbnRSZWN0JikgT1ZFUlJJREUgeyB9CisKKyAgICB2b2lkIGRpc3BhdGNoT25NYWluVGhy
ZWFkKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKKyAgICB2b2lkIHVwZGF0ZVZpZXdwb3J0KCk7
CisjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQorICAgIHZvaWQgYW5pbWF0aW9u
RnJhbWVSZWFkeSgpOworI2VuZGlmCisgICAgdm9pZCByZW5kZXJOZXh0RnJhbWUoKTsKKyAgICB2
b2lkIHB1cmdlQmFja2luZ1N0b3JlcygpOworCisgICAgdm9pZCBjcmVhdGVMYXllcihDb29yZGlu
YXRlZExheWVySUQpOworICAgIHZvaWQgZGVsZXRlTGF5ZXIoQ29vcmRpbmF0ZWRMYXllcklEKTsK
KworICAgIHZvaWQgYXNzaWduSW1hZ2VCYWNraW5nVG9MYXllcihHcmFwaGljc0xheWVyKiwgQ29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVSZWxlYXNlZEltYWdlQmFj
a2luZ3NJZk5lZWRlZCgpOworICAgIHZvaWQgZW5zdXJlUm9vdExheWVyKCk7CisgICAgdm9pZCBj
b21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9ucygpOworCisgICAgdm9pZCBwcmVwYXJl
Q29udGVudEJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCBjcmVhdGVCYWNr
aW5nU3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCByZW1vdmVCYWNraW5n
U3RvcmVJZk5lZWRlZChHcmFwaGljc0xheWVyKik7CisgICAgdm9pZCByZXNldEJhY2tpbmdTdG9y
ZVNpemVUb0xheWVyU2l6ZShHcmFwaGljc0xheWVyKik7CisKKyAgICBGbG9hdFNpemUgbV9jb250
ZW50c1NpemU7CisgICAgRmxvYXRSZWN0IG1fdmlzaWJsZUNvbnRlbnRzUmVjdDsKKworICAgIC8v
IFJlbmRlciBxdWV1ZSBjYW4gYmUgYWNjZXNzZWQgb255IGZyb20gbWFpbiB0aHJlYWQgb3IgdXBk
YXRlUGFpbnROb2RlIGNhbGwgc3RhY2shCisgICAgVmVjdG9yPEZ1bmN0aW9uPHZvaWQoKT4gPiBt
X3JlbmRlclF1ZXVlOworICAgIE11dGV4IG1fcmVuZGVyUXVldWVNdXRleDsKKworICAgIE93blB0
cjxUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
PiA+IEltYWdlQmFja2luZ01hcDsKKyAgICBJbWFnZUJhY2tpbmdNYXAgbV9pbWFnZUJhY2tpbmdz
OworICAgIFZlY3RvcjxSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9yZWxlYXNl
ZEltYWdlQmFja2luZ3M7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NMYXllciosIFJl
ZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBCYWNraW5nU3RvcmVNYXA7CisgICAgQmFj
a2luZ1N0b3JlTWFwIG1fYmFja2luZ1N0b3JlczsKKworICAgIEhhc2hTZXQ8UmVmUHRyPENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlPiA+IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVyczsK
KworI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQorICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGlu
YXRlZExheWVySUQsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gPiBT
dXJmYWNlQmFja2luZ1N0b3JlTWFwOworICAgIFN1cmZhY2VCYWNraW5nU3RvcmVNYXAgbV9zdXJm
YWNlQmFja2luZ1N0b3JlczsKKyNlbmRpZgorCisgICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQzMl90
IC8qIGF0bGFzSUQgKi8sIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+ID4gU3VyZmFjZU1hcDsK
KyAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZXM7CisKKyAgICAvLyBCZWxvdyB0d28gbWVtYmVycyBh
cmUgYWNjZXNzZWQgYnkgb25seSB0aGUgbWFpbiB0aHJlYWQuIFRoZSBwYWludGluZyB0aHJlYWQg
bXVzdCBsb2NrIHRoZSBtYWluIHRocmVhZCB0byBhY2Nlc3MgYm90aCBtZW1iZXJzLgorICAgIENv
b3JkaW5hdGVkR3JhcGhpY3NTY2VuZUNsaWVudCogbV9jbGllbnQ7CisgICAgYm9vbCBtX2lzQWN0
aXZlOworCisgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworCisgICAgdHlw
ZWRlZiBIYXNoTWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgT3duUHRyPEdyYXBoaWNzTGF5ZXI+ID4g
TGF5ZXJNYXA7CisgICAgTGF5ZXJNYXAgbV9sYXllcnM7CisgICAgdHlwZWRlZiBIYXNoTWFwPENv
b3JkaW5hdGVkTGF5ZXJJRCwgR3JhcGhpY3NMYXllcio+IExheWVyUmF3UHRyTWFwOworICAgIExh
eWVyUmF3UHRyTWFwIG1fZml4ZWRMYXllcnM7CisgICAgQ29vcmRpbmF0ZWRMYXllcklEIG1fcm9v
dExheWVySUQ7CisgICAgRmxvYXRQb2ludCBtX3JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlv
bjsKKyAgICBGbG9hdFBvaW50IG1fcGVuZGluZ1JlbmRlcmVkQ29udGVudHNTY3JvbGxQb3NpdGlv
bjsKKyAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKKyNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCisgICAgYm9vbCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkOworI2VuZGlm
CisgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CisgICAgYm9vbCBtX3NldERyYXdzQmFja2dy
b3VuZDsKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50
LCBSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gPiBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwOwor
ICAgIEN1c3RvbUZpbHRlclByb2dyYW1NYXAgbV9jdXN0b21GaWx0ZXJQcm9ncmFtczsKKyNlbmRp
ZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lX2gKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29v
cmRpbmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mNjkyNDgyODc1ZDVjZmMyMWRiNmJiMGQ2ZjIwMGUxZDk5YzViMjBm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcApAQCAtMCwwICsxLDE2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Omdl
dENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQoSW1hZ2UqIGltYWdlKQoreworICAgIC8vIENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nIGtlZXBzIGEgUmVmUHRyPEltYWdlPiBtZW1iZXIsIHNvIHRoZSBz
YW1lIEltYWdlIHBvaW50ZXIgY2FuIG5vdCByZWZlciB0d28gZGlmZmVyZW50IGluc3RhbmNlcyB1
bnRpbCBDb29yZGluYXRlZEltYWdlQmFja2luZyByZWxlYXNlcyB0aGUgbWVtYmVyLgorICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ+KGltYWdlKTsK
K30KKworUGFzc1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6OmNyZWF0ZShDb29yZGluYXRvciogY2xpZW50LCBQYXNzUmVmUHRyPEltYWdlPiBp
bWFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
KGNsaWVudCwgaW1hZ2UpKTsKK30KKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nKENvb3JkaW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGlt
YWdlKQorICAgIDogbV9jb29yZGluYXRvcihjbGllbnQpCisgICAgLCBtX2ltYWdlKGltYWdlKQor
ICAgICwgbV9pZChnZXRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKG1faW1hZ2UuZ2V0KCkpKQor
ICAgICwgbV9jbGVhckNvbnRlbnRzVGltZXIodGhpcywgJkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
OjpjbGVhckNvbnRlbnRzVGltZXJGaXJlZCkKKyAgICAsIG1faXNEaXJ0eShmYWxzZSkKKyAgICAs
IG1faXNWaXNpYmxlKGZhbHNlKQoreworICAgIC8vIEZJWE1FOiBXZSB3b3VsZCBuZWVkIHRvIGRl
Y29kZSBhIHNtYWxsIGltYWdlIGRpcmVjdGx5IGludG8gYSBHcmFwaGljc1N1cmZhY2UuCisgICAg
Ly8gaHR0cDovL3dlYmtpdC5vcmcvYi8xMDE0MjYKKworICAgIG1fY29vcmRpbmF0b3ItPmNyZWF0
ZUltYWdlQmFja2luZyhpZCgpKTsKK30KKworQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6On5Db29y
ZGluYXRlZEltYWdlQmFja2luZygpCit7Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OmFkZEhvc3QoSG9zdCogaG9zdCkKK3sKKyAgICBBU1NFUlQoIW1faG9zdHMuY29udGFpbnMo
aG9zdCkpOworICAgIG1faG9zdHMuYXBwZW5kKGhvc3QpOworfQorCit2b2lkIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nOjpyZW1vdmVIb3N0KEhvc3QqIGhvc3QpCit7CisgICAgc2l6ZV90IHBvc2l0
aW9uID0gbV9ob3N0cy5maW5kKGhvc3QpOworICAgIEFTU0VSVChwb3NpdGlvbiAhPSBub3RGb3Vu
ZCk7CisgICAgbV9ob3N0cy5yZW1vdmUocG9zaXRpb24pOworCisgICAgaWYgKG1faG9zdHMuaXNF
bXB0eSgpKQorICAgICAgICBtX2Nvb3JkaW5hdG9yLT5yZW1vdmVJbWFnZUJhY2tpbmcoaWQoKSk7
Cit9CisKK3ZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6Om1hcmtEaXJ0eSgpCit7CisgICAg
bV9pc0RpcnR5ID0gdHJ1ZTsKK30KKwordm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6dXBk
YXRlKCkKK3sKKyAgICByZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCk7CisKKyAgICBib29sIGNoYW5n
ZWRUb1Zpc2libGU7CisgICAgdXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGNoYW5nZWRUb1Zpc2li
bGUpOworICAgIGlmICghbV9pc1Zpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
Y2hhbmdlZFRvVmlzaWJsZSkgeworICAgICAgICBpZiAoIW1faXNEaXJ0eSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAobV9uYXRpdmVJbWFnZVB0ciA9PSBtX2ltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpKSB7CisgICAgICAgICAgICBtX2lzRGlydHkgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fc3VyZmFj
ZSA9IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKG1faW1hZ2UtPnNpemUoKSwgbV9pbWFnZS0+
Y3VycmVudEZyYW1lSGFzQWxwaGEoKSA/IENvb3JkaW5hdGVkU3VyZmFjZTo6U3VwcG9ydHNBbHBo
YSA6IENvb3JkaW5hdGVkU3VyZmFjZTo6Tm9GbGFncyk7CisgICAgaWYgKCFtX3N1cmZhY2UpIHsK
KyAgICAgICAgbV9pc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBJbnRSZWN0IHJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9pbWFnZS0+c2l6ZSgpKTsKKyAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0ID0gbV9zdXJmYWNlLT5jcmVhdGVHcmFwaGlj
c0NvbnRleHQocmVjdCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlKG1faW1hZ2UuZ2V0KCksIENv
bG9yU3BhY2VEZXZpY2VSR0IsIHJlY3QsIHJlY3QpOworCisgICAgbV9uYXRpdmVJbWFnZVB0ciA9
IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisKKyAgICAvLyBJZiBzZW5k
aW5nIHRoZSBtZXNzYWdlIGZhaWxzLCB0cnkgYWdhaW4gaW4gdGhlIG5leHQgdXBkYXRlLgorICAg
IGJvb2wgc3VjY2VzcyA9IG1fY29vcmRpbmF0b3ItPnVwZGF0ZUltYWdlQmFja2luZyhpZCgpLCBt
X3N1cmZhY2UpOworICAgIG1faXNEaXJ0eSA9ICFzdWNjZXNzOworfQorCit2b2lkIENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nOjpyZWxlYXNlU3VyZmFjZUlmTmVlZGVkKCkKK3sKKyAgICAvLyBXZSBt
dXN0IGtlZXAgbV9zdXJmYWNlIHVudGlsIFVJIFByb2Nlc3MgcmVhZHMgbV9zdXJmYWNlLgorICAg
IC8vIElmIG1fc3VyZmFjZSBleGlzdHMsIGl0IHdhcyBjcmVhdGVkIGluIHRoZSBwcmV2aW91cyB1
cGRhdGUuCisgICAgbV9zdXJmYWNlLmNsZWFyKCk7Cit9CisKK3N0YXRpYyBjb25zdCBkb3VibGUg
Y2xlYXJDb250ZW50c1RpbWVySW50ZXJ2YWwgPSAzOworCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nOjp1cGRhdGVWaXNpYmlsaXR5SWZOZWVkZWQoYm9vbCYgY2hhbmdlZFRvVmlzaWJsZSkK
K3sKKyAgICBib29sIHByZXZpb3VzSXNWaXNpYmxlID0gbV9pc1Zpc2libGU7CisKKyAgICBtX2lz
VmlzaWJsZSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ob3N0cy5zaXpl
KCk7ICsraSkgeworICAgICAgICBpZiAobV9ob3N0c1tpXS0+aW1hZ2VCYWNraW5nVmlzaWJsZSgp
KSB7CisgICAgICAgICAgICBtX2lzVmlzaWJsZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hhbmdlZFRvSW52aXNpYmxlID0gcHJldmlv
dXNJc1Zpc2libGUgJiYgIW1faXNWaXNpYmxlOworICAgIGlmIChjaGFuZ2VkVG9JbnZpc2libGUp
IHsKKyAgICAgICAgQVNTRVJUKCFtX2NsZWFyQ29udGVudHNUaW1lci5pc0FjdGl2ZSgpKTsKKyAg
ICAgICAgbV9jbGVhckNvbnRlbnRzVGltZXIuc3RhcnRPbmVTaG90KGNsZWFyQ29udGVudHNUaW1l
ckludGVydmFsKTsKKyAgICB9CisKKyAgICBjaGFuZ2VkVG9WaXNpYmxlID0gIXByZXZpb3VzSXNW
aXNpYmxlICYmIG1faXNWaXNpYmxlOworCisgICAgaWYgKG1faXNWaXNpYmxlICYmIG1fY2xlYXJD
b250ZW50c1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV9jbGVhckNvbnRlbnRzVGltZXIu
c3RvcCgpOworICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHVwZGF0ZSB0aGUgdGV4dHVyZSBp
ZiB3ZSBkaWRuJ3QgcmVtb3ZlIHRoZSB0ZXh0dXJlLgorICAgICAgICBjaGFuZ2VkVG9WaXNpYmxl
ID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpjbGVh
ckNvbnRlbnRzVGltZXJGaXJlZChUaW1lcjxDb29yZGluYXRlZEltYWdlQmFja2luZz4qKQorewor
ICAgIG1fY29vcmRpbmF0b3ItPmNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoaWQoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjViNTdhNmVjYjEw
MWVmNzViMjkxOTFiNTc1MDdiZWRkYTJmNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nLmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBD
b21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5k
ZWYgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfaAorI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFj
a2luZ19oCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRMYXllckluZm8uaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKyNpbmNs
dWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgOiBwdWJsaWMgUmVmQ291bnRlZDxDb29yZGlu
YXRlZEltYWdlQmFja2luZz4geworcHVibGljOgorICAgIGNsYXNzIENvb3JkaW5hdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1h
Z2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRTdXJmYWNlPikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdD
b250ZW50cyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSA9IDA7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwor
ICAgIH07CisKKyAgICBjbGFzcyBIb3N0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
Ym9vbCBpbWFnZUJhY2tpbmdWaXNpYmxlKCkgPSAwOworICAgIH07CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDb29yZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlKENvb3JkaW5hdG9yKiwgUGFz
c1JlZlB0cjxJbWFnZT4pOworICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCk7
CisKKyAgICBzdGF0aWMgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBnZXRDb29yZGluYXRlZElt
YWdlQmFja2luZ0lEKEltYWdlKik7CisgICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKworICAgIHZvaWQgYWRkSG9zdChIb3N0Kik7CisgICAg
dm9pZCByZW1vdmVIb3N0KEhvc3QqKTsKKworICAgIC8vIFdoZW4gYSBuZXcgaW1hZ2UgaXMgdXBk
YXRlZCBvciBhbiBhbmltYXRlZCBnaWYgaXMgcHJvZ3Jlc3NlZCwgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyIGNhbGxzIG1hcmtEaXJ0eSgpLgorICAgIHZvaWQgbWFya0RpcnR5KCk7CisKKyAgICAv
LyBDcmVhdGUsIHJlbW92ZSBvciB1cGRhdGUgaXRzIGJhY2tpbmcuCisgICAgdm9pZCB1cGRhdGUo
KTsKKworcHJpdmF0ZToKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZyhDb29yZGluYXRvcios
IFBhc3NSZWZQdHI8SW1hZ2U+KTsKKworICAgIHZvaWQgcmVsZWFzZVN1cmZhY2VJZk5lZWRlZCgp
OworICAgIHZvaWQgdXBkYXRlVmlzaWJpbGl0eUlmTmVlZGVkKGJvb2wmIGNoYW5nZWRUb1Zpc2li
bGUpOworICAgIHZvaWQgY2xlYXJDb250ZW50c1RpbWVyRmlyZWQoVGltZXI8Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmc+Kik7CisKKyAgICBDb29yZGluYXRvciogbV9jb29yZGluYXRvcjsKKyAgICBS
ZWZQdHI8SW1hZ2U+IG1faW1hZ2U7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9uYXRpdmVJbWFnZVB0
cjsKKyAgICBDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIG1faWQ7CisgICAgVmVjdG9yPEhvc3Qq
PiBtX2hvc3RzOworCisgICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJmYWNlOwor
CisgICAgVGltZXI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IG1fY2xlYXJDb250ZW50c1RpbWVy
OworCisgICAgYm9vbCBtX2lzRGlydHk7CisgICAgYm9vbCBtX2lzVmlzaWJsZTsKKworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKworI2VuZGlmIC8vIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZExheWVySW5mby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGZhMmExMmVk
M2Y0NmMwODQyM2I0YjljNGRjOTE2NTY5ZjAzOGI3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRl
ZExheWVySW5mby5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgQ29weXJpZ2h0IChDKSAyMDEwIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIENvb3JkaW5hdGVkTGF5ZXJJbmZvX2gKKyNkZWZpbmUgQ29v
cmRpbmF0ZWRMYXllckluZm9faAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGbG9h
dFNpemUuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25N
YXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVmIHVpbnQzMl90IENvb3Jk
aW5hdGVkTGF5ZXJJRDsKK2VudW0geyBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEID0gMCB9Owor
Cit0eXBlZGVmIHVpbnQ2NF90IENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQ7CitlbnVtIHsgSW52
YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgPSAwIH07CisKKy8vIE5PVEU6IENvb3JkaW5h
dGVkTGF5ZXJJbmZvIHNob3VsZCBvbmx5IHVzZSBQT0QgdHlwZXMsIGFzIHRvIG1ha2Ugc2VyaWFs
aXphdGlvbiBmYXN0ZXIuCitzdHJ1Y3QgQ29vcmRpbmF0ZWRMYXllckluZm8geworICAgIENvb3Jk
aW5hdGVkTGF5ZXJJbmZvKCkKKyAgICAgICAgOiByZXBsaWNhKEludmFsaWRDb29yZGluYXRlZExh
eWVySUQpCisgICAgICAgICwgbWFzayhJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEKQorICAgICAg
ICAsIGltYWdlSUQoSW52YWxpZENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpCisgICAgICAgICwg
b3BhY2l0eSgwKQorICAgICAgICAsIGRlYnVnQm9yZGVyV2lkdGgoMCkKKyAgICAgICAgLCBmbGFn
cygwKSB7IH0KKworICAgIENvb3JkaW5hdGVkTGF5ZXJJRCByZXBsaWNhOworICAgIENvb3JkaW5h
dGVkTGF5ZXJJRCBtYXNrOworICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJRDsK
KworICAgIEZsb2F0UG9pbnQgcG9zOworICAgIEZsb2F0UG9pbnQzRCBhbmNob3JQb2ludDsKKyAg
ICBGbG9hdFNpemUgc2l6ZTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Cisg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRyZW5UcmFuc2Zvcm07CisgICAgSW50UmVjdCBj
b250ZW50c1JlY3Q7CisgICAgZmxvYXQgb3BhY2l0eTsKKyAgICBDb2xvciBzb2xpZENvbG9yOwor
ICAgIENvbG9yIGRlYnVnQm9yZGVyQ29sb3I7CisgICAgZmxvYXQgZGVidWdCb3JkZXJXaWR0aDsK
KworICAgIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIGJvb2wgY29udGVu
dHNPcGFxdWUgOiAxOworICAgICAgICAgICAgYm9vbCBkcmF3c0NvbnRlbnQgOiAxOworICAgICAg
ICAgICAgYm9vbCBjb250ZW50c1Zpc2libGUgOiAxOworICAgICAgICAgICAgYm9vbCBiYWNrZmFj
ZVZpc2libGUgOiAxOworICAgICAgICAgICAgYm9vbCBtYXNrc1RvQm91bmRzIDogMTsKKyAgICAg
ICAgICAgIGJvb2wgcHJlc2VydmVzM0QgOiAxOworICAgICAgICAgICAgYm9vbCBpc1Jvb3RMYXll
cjogMTsKKyAgICAgICAgICAgIGJvb2wgZml4ZWRUb1ZpZXdwb3J0IDogMTsKKyAgICAgICAgICAg
IGJvb2wgc2hvd0RlYnVnQm9yZGVycyA6IDE7CisgICAgICAgICAgICBib29sIHNob3dSZXBhaW50
Q291bnRlciA6IDE7CisgICAgICAgIH07CisgICAgICAgIHVuc2lnbmVkIGZsYWdzOworICAgIH07
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDb29yZGluYXRlZExheWVySW5mb19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFN1cmZhY2UuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5
YTk0MjM3Mjc0MzVhNDU4NGQ3NWJkMDAzOGFiMzZkNzFmMGEzNmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRTdXJmYWNlLmNwcApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
b29yZGluYXRlZFN1cmZhY2U6OkZhY3RvcnkqIENvb3JkaW5hdGVkU3VyZmFjZTo6c19mYWN0b3J5
ID0gMDsKKwordm9pZCBDb29yZGluYXRlZFN1cmZhY2U6OnNldEZhY3RvcnkoQ29vcmRpbmF0ZWRT
dXJmYWNlOjpGYWN0b3J5IGZhY3RvcnkpCit7CisgICAgc19mYWN0b3J5ID0gZmFjdG9yeTsKK30K
KworUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3Jl
YXRlKGNvbnN0IEludFNpemUmIHNpemUsIEZsYWdzIGZsYWdzKQoreworICAgIEFTU0VSVChzX2Zh
Y3RvcnkpOworICAgIHJldHVybiBzX2ZhY3Rvcnkoc2l6ZSwgZmxhZ3MpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRTdXJmYWNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzA3N2MzYzA5YzRhYjA2N2ZmYjk4NjY2YjQwZjYwNzU5Nzg1ZTVkNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9D
b29yZGluYXRlZFN1cmZhY2UuaApAQCAtMCwwICsxLDY4IEBACisvKgorIENvcHlyaWdodCAoQykg
MjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5
cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KKworIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBDb29yZGluYXRlZFN1cmZhY2VfaAorI2RlZmluZSBDb29yZGluYXRlZFN1cmZh
Y2VfaAorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEJpdG1hcFRleHR1cmU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisK
K2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxD
b29yZGluYXRlZFN1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBlbnVtIEZsYWcgeworICAgICAgICBO
b0ZsYWdzID0gMCwKKyAgICAgICAgU3VwcG9ydHNBbHBoYSA9IDEgPDwgMCwKKyAgICB9OworICAg
IHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7CisKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8Q29vcmRp
bmF0ZWRTdXJmYWNlPiBGYWN0b3J5KGNvbnN0IEludFNpemUmLCBGbGFncyk7CisgICAgc3RhdGlj
IHZvaWQgc2V0RmFjdG9yeShGYWN0b3J5KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDb29yZGlu
YXRlZFN1cmZhY2U+IGNyZWF0ZShjb25zdCBJbnRTaXplJiwgRmxhZ3MpOworCisgICAgdmlydHVh
bCB+Q29vcmRpbmF0ZWRTdXJmYWNlKCkgeyB9CisKKyAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBj
b25zdCB7IHJldHVybiBmbGFncygpICYgU3VwcG9ydHNBbHBoYTsgfQorICAgIHZpcnR1YWwgSW50
U2l6ZSBzaXplKCkgY29uc3QgPSAwOworCisgICAgLy8gQ3JlYXRlIGEgZ3JhcGhpY3MgY29udGV4
dCB0aGF0IGNhbiBiZSB1c2VkIHRvIHBhaW50IGludG8gdGhlIGJhY2tpbmcgc3RvcmUuCisgICAg
dmlydHVhbCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlR3JhcGhpY3NDb250ZXh0
KGNvbnN0IEludFJlY3QmKSA9IDA7CisKKyNpZiBVU0UoVEVYVFVSRV9NQVBQRVIpCisgICAgdmly
dHVhbCB2b2lkIGNvcHlUb1RleHR1cmUoUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiwgY29uc3Qg
SW50UmVjdCYgdGFyZ2V0LCBjb25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0KSA9IDA7CisjZW5k
aWYKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRmxhZ3MgZmxhZ3MoKSBjb25zdCA9IDA7CisK
K3ByaXZhdGU6CisgICAgc3RhdGljIENvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSogc19mYWN0
b3J5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorI2VuZGlmIC8vIENvb3JkaW5hdGVkU3VyZmFjZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRUaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmOWQzNGU2
MDViMGUyYjI1MjY4YmFhNjZjNDgwNWRiZWZhMjA5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0
ZWRUaWxlLmNwcApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgorCisjaWYg
VVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgi
CisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgSW52YWxpZENvb3JkaW5hdGVkVGlsZUlEID0g
MDsKKworQ29vcmRpbmF0ZWRUaWxlOjpDb29yZGluYXRlZFRpbGUoQ29vcmRpbmF0ZWRUaWxlQ2xp
ZW50KiBjbGllbnQsIFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3Qg
Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCisgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAg
LCBtX3RpbGVkQmFja2luZ1N0b3JlKHRpbGVkQmFja2luZ1N0b3JlKQorICAgICwgbV9jb29yZGlu
YXRlKHRpbGVDb29yZGluYXRlKQorICAgICwgbV9yZWN0KHRpbGVkQmFja2luZ1N0b3JlLT50aWxl
UmVjdEZvckNvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpKQorICAgICwgbV9JRChJbnZhbGlkQ29v
cmRpbmF0ZWRUaWxlSUQpCisgICAgLCBtX2RpcnR5UmVjdChtX3JlY3QpCit7Cit9CisKK0Nvb3Jk
aW5hdGVkVGlsZTo6fkNvb3JkaW5hdGVkVGlsZSgpCit7CisgICAgaWYgKG1fSUQgIT0gSW52YWxp
ZENvb3JkaW5hdGVkVGlsZUlEKQorICAgICAgICBtX2NsaWVudC0+cmVtb3ZlVGlsZShtX0lEKTsK
K30KKworYm9vbCBDb29yZGluYXRlZFRpbGU6OmlzRGlydHkoKSBjb25zdAoreworICAgIHJldHVy
biAhbV9kaXJ0eVJlY3QuaXNFbXB0eSgpOworfQorCit2b2lkIENvb3JkaW5hdGVkVGlsZTo6aW52
YWxpZGF0ZShjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgSW50UmVjdCB0aWxlRGly
dHlSZWN0ID0gaW50ZXJzZWN0aW9uKGRpcnR5UmVjdCwgbV9yZWN0KTsKKyAgICBpZiAodGlsZURp
cnR5UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGlydHlSZWN0LnVu
aXRlKHRpbGVEaXJ0eVJlY3QpOworfQorCitWZWN0b3I8SW50UmVjdD4gQ29vcmRpbmF0ZWRUaWxl
Ojp1cGRhdGVCYWNrQnVmZmVyKCkKK3sKKyAgICBpZiAoIWlzRGlydHkoKSkKKyAgICAgICAgcmV0
dXJuIFZlY3RvcjxJbnRSZWN0PigpOworCisgICAgU3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5m
bzsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX2NsaWVu
dC0+YmVnaW5Db250ZW50VXBkYXRlKG1fZGlydHlSZWN0LnNpemUoKSwgdXBkYXRlSW5mby5hdGxh
c0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpOworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0
KQorICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7CisgICAgZ3JhcGhpY3NDb250ZXh0
LT50cmFuc2xhdGUoLW1fZGlydHlSZWN0LngoKSwgLW1fZGlydHlSZWN0LnkoKSk7CisgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zY2FsZShGbG9hdFNpemUobV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVu
dHNTY2FsZSgpLCBtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCkpKTsKKyAgICBt
X3RpbGVkQmFja2luZ1N0b3JlLT5jbGllbnQoKS0+dGlsZWRCYWNraW5nU3RvcmVQYWludChncmFw
aGljc0NvbnRleHQuZ2V0KCksIG1fdGlsZWRCYWNraW5nU3RvcmUtPm1hcFRvQ29udGVudHMobV9k
aXJ0eVJlY3QpKTsKKworICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdCA9IG1fZGlydHlSZWN0Owor
ICAgIHVwZGF0ZUluZm8udXBkYXRlUmVjdC5tb3ZlKC1tX3JlY3QueCgpLCAtbV9yZWN0LnkoKSk7
CisgICAgdXBkYXRlSW5mby5zY2FsZUZhY3RvciA9IG1fdGlsZWRCYWNraW5nU3RvcmUtPmNvbnRl
bnRzU2NhbGUoKTsKKyAgICBncmFwaGljc0NvbnRleHQucmVsZWFzZSgpOworCisgICAgc3RhdGlj
IHVpbnQzMl90IGlkID0gMTsKKyAgICBpZiAobV9JRCA9PSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxl
SUQpIHsKKyAgICAgICAgbV9JRCA9IGlkKys7CisgICAgICAgIC8vIFdlIG1heSBnZXQgYW4gaW52
YWxpZCBJRCBkdWUgdG8gd3JhcC1hcm91bmQgb24gb3ZlcmZsb3cuCisgICAgICAgIGlmIChtX0lE
ID09IEludmFsaWRDb29yZGluYXRlZFRpbGVJRCkKKyAgICAgICAgICAgIG1fSUQgPSBpZCsrOwor
ICAgICAgICBtX2NsaWVudC0+Y3JlYXRlVGlsZShtX0lELCB1cGRhdGVJbmZvLCBtX3JlY3QpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX2NsaWVudC0+dXBkYXRlVGlsZShtX0lELCB1cGRhdGVJbmZv
LCBtX3JlY3QpOworCisgICAgVmVjdG9yPEludFJlY3Q+IHVwZGF0ZWRSZWN0czsKKyAgICB1cGRh
dGVkUmVjdHMuYXBwZW5kKG1fZGlydHlSZWN0KTsKKyAgICBtX2RpcnR5UmVjdCA9IEludFJlY3Qo
KTsKKyAgICByZXR1cm4gdXBkYXRlZFJlY3RzOworfQorCit2b2lkIENvb3JkaW5hdGVkVGlsZTo6
c3dhcEJhY2tCdWZmZXJUb0Zyb250KCkKK3sKKyAgICAvLyBIYW5kbGVkIGJ5IHRpbGVkQmFja2lu
Z1N0b3JlUGFpbnRFbmQuCit9CisKK2Jvb2wgQ29vcmRpbmF0ZWRUaWxlOjppc1JlYWR5VG9QYWlu
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fSUQgIT0gSW52YWxpZENvb3JkaW5hdGVkVGlsZUlE
OworfQorCit2b2lkIENvb3JkaW5hdGVkVGlsZTo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ29v
cmRpbmF0ZWRUaWxlOjpyZXNpemUoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBtX3Jl
Y3QgPSBJbnRSZWN0KG1fcmVjdC5sb2NhdGlvbigpLCBuZXdTaXplKTsKKyAgICBtX2RpcnR5UmVj
dCA9IG1fcmVjdDsKK30KKworQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6Q29vcmRpbmF0ZWRUaWxl
QmFja2VuZChDb29yZGluYXRlZFRpbGVDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNs
aWVudCkKK3sKK30KKworUGFzc1JlZlB0cjxUaWxlPiBDb29yZGluYXRlZFRpbGVCYWNrZW5kOjpj
cmVhdGVUaWxlKFRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgVGls
ZTo6Q29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpCit7CisgICAgcmV0dXJuIENvb3JkaW5hdGVk
VGlsZTo6Y3JlYXRlKG1fY2xpZW50LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUp
OworfQorCit2b2lkIENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OnBhaW50Q2hlY2tlclBhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikKK3sKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRUaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRUaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmU5OWJmZGFmZWY0
OTFkYWQzYTM2ZmZjNWIyM2Y0NDQ3ZGJlZTQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZFRp
bGUuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENvb3JkaW5hdGVkVGlsZV9oCisjZGVmaW5lIENvb3JkaW5hdGVkVGlsZV9oCisKKyNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJU
aWxlLmgiCisjaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDb29yZGluYXRlZFRpbGVDbGllbnQ7CitjbGFzcyBJbWFnZUJ1ZmZlcjsK
K2NsYXNzIFN1cmZhY2VVcGRhdGVJbmZvOworY2xhc3MgVGlsZWRCYWNraW5nU3RvcmU7CisKK2Ns
YXNzIENvb3JkaW5hdGVkVGlsZSA6IHB1YmxpYyBUaWxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxlQ2xpZW50KiBjbGllbnQsIFRp
bGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdTdG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGls
ZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29yZGluYXRlZFRpbGUoY2xpZW50
LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3JkaW5hdGUpKTsgfQorICAgIH5Db29yZGluYXRl
ZFRpbGUoKTsKKworICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0OworICAgIHZvaWQgaW52YWxpZGF0
ZShjb25zdCBJbnRSZWN0Jik7CisgICAgVmVjdG9yPEludFJlY3Q+IHVwZGF0ZUJhY2tCdWZmZXIo
KTsKKyAgICB2b2lkIHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOworICAgIGJvb2wgaXNSZWFkeVRv
UGFpbnQoKSBjb25zdDsKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IElu
dFJlY3QmKTsKKworICAgIGNvbnN0IENvb3JkaW5hdGUmIGNvb3JkaW5hdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Nvb3JkaW5hdGU7IH0KKyAgICBjb25zdCBJbnRSZWN0JiByZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWN0OyB9CisgICAgdm9pZCByZXNpemUoY29uc3QgSW50U2l6ZSYpOworCitwcml2
YXRlOgorICAgIENvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqLCBUaWxlZEJh
Y2tpbmdTdG9yZSosIGNvbnN0IENvb3JkaW5hdGUmKTsKKworICAgIENvb3JkaW5hdGVkVGlsZUNs
aWVudCogbV9jbGllbnQ7CisgICAgVGlsZWRCYWNraW5nU3RvcmUqIG1fdGlsZWRCYWNraW5nU3Rv
cmU7CisgICAgQ29vcmRpbmF0ZSBtX2Nvb3JkaW5hdGU7CisgICAgSW50UmVjdCBtX3JlY3Q7CisK
KyAgICB1aW50MzJfdCBtX0lEOworICAgIEludFJlY3QgbV9kaXJ0eVJlY3Q7CisKKyAgICBPd25Q
dHI8SW1hZ2VCdWZmZXI+IG1fbG9jYWxCdWZmZXI7Cit9OworCitjbGFzcyBDb29yZGluYXRlZFRp
bGVDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVkVGlsZUNsaWVudCgp
IHsgfQorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBj
b25zdCBJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90
IHRpbGVJRCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IGJl
Z2luQ29udGVudFVwZGF0ZShjb25zdCBJbnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIEludFBv
aW50JikgPSAwOworfTsKKworY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZCA6IHB1YmxpYyBU
aWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PFRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4gY3JlYXRlKENvb3JkaW5hdGVkVGlsZUNsaWVudCog
Y2xpZW50KSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChjbGll
bnQpKTsgfQorICAgIFBhc3NSZWZQdHI8VGlsZT4gY3JlYXRlVGlsZShUaWxlZEJhY2tpbmdTdG9y
ZSosIGNvbnN0IFRpbGU6OkNvb3JkaW5hdGUmKTsKKyAgICB2b2lkIHBhaW50Q2hlY2tlclBhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChDb29yZGluYXRlZFRpbGVDbGllbnQqKTsK
KyAgICBDb29yZGluYXRlZFRpbGVDbGllbnQqIG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCisKKyNlbmRp
ZiAvLyBDb29yZGluYXRlZFRpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvU3VyZmFjZVVw
ZGF0ZUluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YWIzODRhMTFlYWE1ZWEyNTQwODEzYzcwMjVlNWZjOGMx
N2QzOTEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1N1cmZhY2VVcGRhdGVJbmZvLmgKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU3VyZmFj
ZVVwZGF0ZUluZm9faAorI2RlZmluZSBTdXJmYWNlVXBkYXRlSW5mb19oCisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3VyZmFjZVVw
ZGF0ZUluZm8geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsK
KworcHVibGljOgorICAgIFN1cmZhY2VVcGRhdGVJbmZvKCkgeyB9CisKKyAgICAvLyBUaGUgcmVj
dCB0byBiZSB1cGRhdGVkLgorICAgIEludFJlY3QgdXBkYXRlUmVjdDsKKworICAgIC8vIFRoZSBw
YWdlIHNjYWxlIGZhY3RvciB1c2VkIHRvIHJlbmRlciB0aGlzIHVwZGF0ZS4KKyAgICBmbG9hdCBz
Y2FsZUZhY3RvcjsKKworICAgIC8vIFRoZSBpZCBvZiB0aGUgdXBkYXRlIGF0bGFzIGluY2x1ZGlu
ZyB0aGUgc2hhcmVhYmxlIGJpdG1hcCBjb250YWluaW5nIHRoZSB1cGRhdGVzLgorICAgIHVpbnQz
Ml90IGF0bGFzSUQ7CisKKyAgICAvLyBUaGUgb2Zmc2V0IGluIHRoZSBiaXRtYXAgd2hlcmUgdGhl
IHJlbmRlcmVkIGNvbnRlbnRzIGFyZS4KKyAgICBJbnRQb2ludCBzdXJmYWNlT2Zmc2V0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorCisjZW5kaWYgLy8gU3VyZmFjZVVwZGF0ZUluZm9faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0
bGFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9VcGRhdGVBdGxhcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzY0ZjA2ODcxMDgyYjU4ZmNiZDgzYTBl
ZjMxNDUwYmU0ODAwODQ4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKQEAgLTAsMCAr
MSw5NCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJ
bmMuCisKKyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJVcGRhdGVBdGxhcy5oIgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVXBkYXRlQXRs
YXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiBjbGllbnQsIGludCBkaW1lbnNpb24s
IENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3MpCisgICAgOiBtX2NsaWVudChjbGllbnQp
CisgICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkKK3sKKyAgICBzdGF0aWMgdWludDMyX3Qg
bmV4dElEID0gMDsKKyAgICBtX0lEID0gKytuZXh0SUQ7CisgICAgSW50U2l6ZSBzaXplID0gbmV4
dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRpbWVuc2lvbikpOworICAgIG1fc3VyZmFj
ZSA9IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGZsYWdzKTsKKworICAgIC8vIEZJ
WE1FOiBDdXJyZW50bHksIGlmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMsIFVwZGF0ZUF0bGFz
IGdpdmVzIHVwIGRyYXdpbmcgYW55dGhpbmcgaW1wbGljaXRseS4KKyAgICBpZiAoIW1fY2xpZW50
LT5jcmVhdGVVcGRhdGVBdGxhcyhtX0lELCBtX3N1cmZhY2UpKQorICAgICAgICBtX3N1cmZhY2Uu
Y2xlYXIoKTsKK30KKworVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCit7CisgICAgaWYgKG1f
c3VyZmFjZSkKKyAgICAgICAgbV9jbGllbnQtPnJlbW92ZVVwZGF0ZUF0bGFzKG1fSUQpOworfQor
Cit2b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1f
YXJlYUFsbG9jYXRvcikgeworICAgICAgICBtX2FyZWFBbGxvY2F0b3IgPSBhZG9wdFB0cihuZXcg
R2VuZXJhbEFyZWFBbGxvY2F0b3Ioc2l6ZSgpKSk7CisgICAgICAgIG1fYXJlYUFsbG9jYXRvci0+
c2V0TWluaW11bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKKyAgICB9Cit9CisKK3ZvaWQg
VXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKK3sKKyAgICBtX2FyZWFBbGxvY2F0b3IuY2xl
YXIoKTsKK30KKworUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdp
blBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIodWludDMyX3QmIGF0bGFzSUQsIGNvbnN0IEludFNp
emUmIHNpemUsIEludFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRz
ID0gMDsKKyAgICBidWlsZExheW91dElmTmVlZGVkKCk7CisgICAgSW50UmVjdCByZWN0ID0gbV9h
cmVhQWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKTsKKworICAgIC8vIE5vIGF2YWlsYWJsZSBidWZm
ZXIgd2FzIGZvdW5kLCByZXR1cm5pbmcgbnVsbC4KKyAgICBpZiAocmVjdC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dD4oKTsKKworICAgIGlmICgh
bV9zdXJmYWNlKQorICAgICAgICByZXR1cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7
CisKKyAgICBhdGxhc0lEID0gbV9JRDsKKworICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1
ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1cGRhdGVzLgorICAgIG9mZnNldCA9IHJlY3QubG9jYXRp
b24oKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX3N1
cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKKworICAgIGlmIChzdXBwb3J0c0Fs
cGhhKCkpIHsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24o
Q29tcG9zaXRlQ29weSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50UmVj
dChJbnRQb2ludDo6emVybygpLCBzaXplKSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNl
RGV2aWNlUkdCKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlU291cmNlT3Zlcik7CisgICAgfQorCisgICAgcmV0dXJuIGdyYXBoaWNzQ29u
dGV4dC5yZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ4YTZiZjg0NGE0OTBmN2ZkMmMzOWEwNDI0ZTMzMGZkZGIxNmQ3OGIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaApAQCAtMCwwICsxLDc4IEBACisvKgorIENvcHlyaWdo
dCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykK
KyBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KKworIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBVcGRhdGVBdGxhc19oCisjZGVmaW5lIFVwZGF0ZUF0bGFzX2gKKwor
I2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJDb29yZGluYXRlZFN1cmZhY2Uu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIElu
dFBvaW50OworCitjbGFzcyBVcGRhdGVBdGxhc0NsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVh
bCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRTdXJmYWNlPikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lEKSA9IDA7Cit9OworCitjbGFzcyBVcGRhdGVBdGxhcyB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoVXBkYXRlQXRsYXMpOworcHVibGljOgorICAgIFVwZGF0ZUF0
bGFzKFVwZGF0ZUF0bGFzQ2xpZW50KiwgaW50IGRpbWVuc2lvbiwgQ29vcmRpbmF0ZWRTdXJmYWNl
OjpGbGFncyk7CisgICAgflVwZGF0ZUF0bGFzKCk7CisKKyAgICBpbmxpbmUgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLT5zaXplKCk7IH0KKworICAgIC8vIFJldHVybnMg
YSBudWxsIHBvaW50ZXIgb2YgdGhlcmUgaXMgbm8gYXZhaWxhYmxlIGJ1ZmZlci4KKyAgICBQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYmVnaW5QYWludGluZ09uQXZhaWxhYmxlQnVmZmVyKHVp
bnQzMl90JiBhdGxhc0lELCBjb25zdCBJbnRTaXplJiwgSW50UG9pbnQmIG9mZnNldCk7CisgICAg
dm9pZCBkaWRTd2FwQnVmZmVycygpOworICAgIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3VyZmFjZS0+c3VwcG9ydHNBbHBoYSgpOyB9CisKKyAgICB2b2lkIGFkZFRpbWVJ
bmFjdGl2ZShkb3VibGUgc2Vjb25kcykKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNJblVzZSgp
KTsKKyAgICAgICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzICs9IHNlY29uZHM7CisgICAgfQorICAg
IGJvb2wgaXNJbmFjdGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdCBkb3VibGUgaW5h
Y3RpdmVTZWNvbmRzVG9sZXJhbmNlID0gMzsKKyAgICAgICAgcmV0dXJuIG1faW5hY3Rpdml0eUlu
U2Vjb25kcyA+IGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZTsKKyAgICB9CisgICAgYm9vbCBpc0lu
VXNlKCkgY29uc3QgeyByZXR1cm4gbV9hcmVhQWxsb2NhdG9yOyB9CisKK3ByaXZhdGU6CisgICAg
dm9pZCBidWlsZExheW91dElmTmVlZGVkKCk7CisKK3ByaXZhdGU6CisgICAgVXBkYXRlQXRsYXND
bGllbnQqIG1fY2xpZW50OworICAgIE93blB0cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVh
QWxsb2NhdG9yOworICAgIFJlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKKyAg
ICBkb3VibGUgbV9pbmFjdGl2aXR5SW5TZWNvbmRzOworICAgIHVpbnQzMl90IG1fSUQ7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQorI2VuZGlmIC8vIFVwZGF0ZUF0bGFzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKaW5kZXggYmEz
YjU2MjIxZWEzZmU3ODZlZjU2NWI0ODE2NjY0NDBkNmUwNTU0MC4uODUxZDA2NzgxZTJjZjU3NTJh
ZmJjNzcxYTNkNjYyOWI3ZjFhYjhlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQKQEAgLTIyMCw3ICsy
MjAsNiBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgU2hhcmVkL0FQSS9jL1dLVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmNwcAogCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmNwcAotICAgIFNoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFw
aGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2UuY3BwCiAgICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbVByb3h5LmNwcAogCkBAIC0zNDUsOSArMzQ0LDcg
QEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9XZWJD
cmVkZW50aWFsLmNwcAogICAgIFVJUHJvY2Vzcy9BdXRoZW50aWNhdGlvbi9XZWJQcm90ZWN0aW9u
U3BhY2UuY3BwCiAKLSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEJhY2tpbmdTdG9yZS5jcHAKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKLSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5jcHAKIAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMv
RG93bmxvYWRQcm94eS5jcHAKICAgICBVSVByb2Nlc3MvRG93bmxvYWRzL0Rvd25sb2FkUHJveHlN
YXAuY3BwCkBAIC00OTQsMTIgKzQ5MSw3IEBAIHNldChXZWJLaXQyX1NPVVJDRVMKICAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlVuZG9TdGVwLmNwcAogCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5jcHAKLSAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
Ci0gICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRU
aWxlLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKICkKIAogc2V0KFdlYktpdDJfTUVTU0FHRVNfSU5f
RklMRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdl
cy5weSBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQppbmRleCBm
YWJhZWM0NjBiZmU5ZTgxNGM2ODY1NDUyMTZhZjk0MzEyNWQ1ZGQ4Li41ZmI4MGI0MzIwZjNlMmM4
MDFkNjA1ZjI1ZWZlMThiNDAwNTlhZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TY3Jp
cHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdDIvU2NyaXB0cy93ZWJr
aXQyL21lc3NhZ2VzLnB5CkBAIC0zNzEsNiArMzcxLDcgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUo
dHlwZSk6CiAgICAgc3BlY2lhbF9jYXNlcyA9IHsKICAgICAgICAgJ1dURjo6U3RyaW5nJzogWyc8
d3RmL3RleHQvV1RGU3RyaW5nLmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpDb21wb3NpdGlvblVu
ZGVybGluZSc6IFsnPFdlYkNvcmUvRWRpdG9yLmg+J10sCisgICAgICAgICdXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQnOiBbJzxXZWJDb3JlL0Nvb3JkaW5hdGVkTGF5ZXJJbmZvLmg+J10sCiAg
ICAgICAgICdXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJzogWyc8V2ViQ29yZS9UZXh0Q2hlY2tlckNs
aWVudC5oPiddLAogICAgICAgICAnV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlvbnMnOiBb
JzxXZWJDb3JlL0dyYXBoaWNzTGF5ZXJBbmltYXRpb24uaD4nXSwKICAgICAgICAgJ1dlYkNvcmU6
OktleWZyYW1lVmFsdWVMaXN0JzogWyc8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+J10sCkBAIC0z
NzksNyArMzgwLDYgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdXZWJD
b3JlOjpQbHVnaW5JbmZvJzogWyc8V2ViQ29yZS9QbHVnaW5EYXRhLmg+J10sCiAgICAgICAgICdX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQnOiBbJzxXZWJDb3JlL1RleHRDaGVja2VyQ2xpZW50
Lmg+J10sCiAgICAgICAgICdXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMnOiBbJzxXZWJDb3Jl
L1ZpZXdwb3J0QXJndW1lbnRzLmg+J10sCi0gICAgICAgICdXZWJLaXQ6OkNvb3JkaW5hdGVkTGF5
ZXJJRCc6IFsnIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiJ10sCiAgICAgICAgICdXZWJLaXQ6Oklu
amVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyJzogW10sCiAgICAgICAgICdXZWJLaXQ6Oldl
YkNvbnRleHRVc2VyTWVzc2FnZUVuY29kZXInOiBbXSwKICAgICAgICAgJ1dlYktpdDo6V2ViR2Vz
dHVyZUV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENv
ZGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuY3BwCmluZGV4IGU1YWIzNDU4NmY0NzQzNzE4
MWI3YzQzNTIxYzRlMDdiMDRiMGJmNDIuLmMzMzcxZDJjMDg0ZTA1MmRlZGNmNjRlZmY0YmQxNDc1
MDBlOWI1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0Fy
Z3VtZW50Q29kZXJzLmNwcApAQCAtMjksMTEgKzI5LDEwIEBACiAjaW5jbHVkZSAiQ29vcmRpbmF0
ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKLSNpbmNsdWRlICJTdXJmYWNl
VXBkYXRlSW5mby5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0Zsb2F0UG9pbnQzRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlv
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24uaD4KQEAg
LTQ1LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1NrZXdUcmFuc2Zvcm1PcGVyYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1N1cmZhY2VVcGRhdGVJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UaW1pbmdGdW5jdGlvbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1RyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgpAQCAtNTQsOSArNTQsOSBAQAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0jaW5jbHVkZSAiV2ViQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiV2ViQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgogI2lu
Y2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
Q29vcmRpbmF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nv
b3JkaW5hdGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9t
RmlsdGVyQXJyYXlQYXJhbWV0ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0N1c3RvbUZpbHRlckNv
bnN0YW50cy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVy
Lmg+CkBAIC03Myw3ICs3Myw5IEBACiAjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKyNlbmRp
ZgogCiBuYW1lc3BhY2UgQ29yZUlQQyB7CiAKQEAgLTMyOSw3ICszMzEsNyBAQCBib29sIEFyZ3Vt
ZW50Q29kZXI8V2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucz46OmRlY29kZShBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50IHRoZSBTaGFkZXJzIGFyZSBhbHJlYWR5IHZhbGlkYXRlZCwgc28g
d2UganVzdCB1c2UgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIGZvciB0cmFuc3BvcnRhdGlvbi4K
LSAgICAgICAgICAgIGZpbHRlciA9IFdlYkN1c3RvbUZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAs
IHByb2dyYW1JRCwgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoVHlwZSk7
CisgICAgICAgICAgICBmaWx0ZXIgPSBDb29yZGluYXRlZEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6
Y3JlYXRlKDAsIHByb2dyYW1JRCwgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBt
ZXNoVHlwZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCmluZGV4IDBi
NWUxNGNjMTc5OTZlNjVkOTQ2YWZkYjkyYTE0YThiZjJlYmZjZmMuLjJhZWZjNjU3NGZmM2VhNDEx
MTNmYzFlNDJjMDE5MThmNDI0MWJmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3NBcmd1bWVudENvZGVycy5oCkBAIC0zMiwxMSArMzIsMTMgQEAKICNpbmNsdWRl
ICJBcmd1bWVudENvZGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBTdXJmYWNl
VXBkYXRlSW5mbzsKIGNsYXNzIEZsb2F0UG9pbnQzRDsKIGNsYXNzIEdyYXBoaWNzTGF5ZXJBbmlt
YXRpb247CiBjbGFzcyBHcmFwaGljc0xheWVyQW5pbWF0aW9uczsKIGNsYXNzIFRyYW5zZm9ybWF0
aW9uTWF0cml4OwogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uczsKK3N0cnVjdCBDb29yZGluYXRl
ZExheWVySW5mbzsKIHN0cnVjdCBMZW5ndGg7CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCkBA
IC01MiwxMSArNTQsNiBAQCBzdHJ1Y3QgR3JhcGhpY3NTdXJmYWNlVG9rZW47CiAjZW5kaWYKIH0K
IAotbmFtZXNwYWNlIFdlYktpdCB7Ci1zdHJ1Y3QgQ29vcmRpbmF0ZWRMYXllckluZm87Ci1jbGFz
cyBTdXJmYWNlVXBkYXRlSW5mbzsKLX0KLQogbmFtZXNwYWNlIENvcmVJUEMgewogCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewpAQCAtMTEw
LDE0ICsxMDcsMTQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpH
cmFwaGljc1N1cmZhY2VUb2tlbj4gewogfTsKICNlbmRpZgogCi10ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllckluZm8+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViS2l0OjpDb29yZGluYXRlZExh
eWVySW5mbyYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJL
aXQ6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZvPiB7CisgICAgc3RhdGljIHZvaWQgZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJbmZv
Jik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJbmZvJik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUo
QXJndW1lbnRFbmNvZGVyJiwgY29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAg
IHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJLaXQ6OlN1cmZhY2VVcGRh
dGVJbmZvJik7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlN1cmZh
Y2VVcGRhdGVJbmZvPiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciYs
IGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CisgICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVySW5mby5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllckluZm8uaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE1ZmJiNjZhODAyNTgxYjQ4YzkwM2Q0OGI1
ZTE4Mzk4NGMxM2U0Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRl
ZExheWVySW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSBDb3B5cmln
aHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMp
Ci0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRMYXllckluZm9f
aAotI2RlZmluZSBDb29yZGluYXRlZExheWVySW5mb19oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgot
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdHlwZWRlZiB1
aW50MzJfdCBDb29yZGluYXRlZExheWVySUQ7Ci1lbnVtIHsgSW52YWxpZENvb3JkaW5hdGVkTGF5
ZXJJRCA9IDAgfTsKLQotdHlwZWRlZiB1aW50NjRfdCBDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
OwotZW51bSB7IEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lEID0gMCB9OwotCi0vLyBO
T1RFOiBDb29yZGluYXRlZExheWVySW5mbyBzaG91bGQgb25seSB1c2UgUE9EIHR5cGVzLCBhcyB0
byBtYWtlIHNlcmlhbGl6YXRpb24gZmFzdGVyLgotc3RydWN0IENvb3JkaW5hdGVkTGF5ZXJJbmZv
IHsKLSAgICBDb29yZGluYXRlZExheWVySW5mbygpCi0gICAgICAgIDogcmVwbGljYShJbnZhbGlk
Q29vcmRpbmF0ZWRMYXllcklEKQotICAgICAgICAsIG1hc2soSW52YWxpZENvb3JkaW5hdGVkTGF5
ZXJJRCkKLSAgICAgICAgLCBpbWFnZUlEKEludmFsaWRDb29yZGluYXRlZEltYWdlQmFja2luZ0lE
KQotICAgICAgICAsIG9wYWNpdHkoMCkKLSAgICAgICAgLCBkZWJ1Z0JvcmRlcldpZHRoKDApCi0g
ICAgICAgICwgZmxhZ3MoMCkgeyB9Ci0KLSAgICBDb29yZGluYXRlZExheWVySUQgcmVwbGljYTsK
LSAgICBDb29yZGluYXRlZExheWVySUQgbWFzazsKLSAgICBDb29yZGluYXRlZEltYWdlQmFja2lu
Z0lEIGltYWdlSUQ7Ci0KLSAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHBvczsKLSAgICBXZWJDb3Jl
OjpGbG9hdFBvaW50M0QgYW5jaG9yUG9pbnQ7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIHNpemU7
Ci0gICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgIFdlYkNv
cmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkcmVuVHJhbnNmb3JtOwotICAgIFdlYkNvcmU6
OkludFJlY3QgY29udGVudHNSZWN0OwotICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAgV2ViQ29yZTo6
Q29sb3Igc29saWRDb2xvcjsKLSAgICBXZWJDb3JlOjpDb2xvciBkZWJ1Z0JvcmRlckNvbG9yOwot
ICAgIGZsb2F0IGRlYnVnQm9yZGVyV2lkdGg7Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHN0cnVj
dCB7Ci0gICAgICAgICAgICBib29sIGNvbnRlbnRzT3BhcXVlIDogMTsKLSAgICAgICAgICAgIGJv
b2wgZHJhd3NDb250ZW50IDogMTsKLSAgICAgICAgICAgIGJvb2wgY29udGVudHNWaXNpYmxlIDog
MTsKLSAgICAgICAgICAgIGJvb2wgYmFja2ZhY2VWaXNpYmxlIDogMTsKLSAgICAgICAgICAgIGJv
b2wgbWFza3NUb0JvdW5kcyA6IDE7Ci0gICAgICAgICAgICBib29sIHByZXNlcnZlczNEIDogMTsK
LSAgICAgICAgICAgIGJvb2wgaXNSb290TGF5ZXI6IDE7Ci0gICAgICAgICAgICBib29sIGZpeGVk
VG9WaWV3cG9ydCA6IDE7Ci0gICAgICAgICAgICBib29sIHNob3dEZWJ1Z0JvcmRlcnMgOiAxOwot
ICAgICAgICAgICAgYm9vbCBzaG93UmVwYWludENvdW50ZXIgOiAxOwotICAgICAgICB9OwotICAg
ICAgICB1bnNpZ25lZCBmbGFnczsKLSAgICB9OwotfTsKLQotfQotCi0jZW5kaWYgLy8gVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotCi0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRMYXllckluZm9faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29v
cmRpbmF0ZWRTdXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdy
YXBoaWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDg2YTJkNTVhNzZlOTA2MTc5MmVmYzk2NjljNzRkODg2MjgxMGVhODUuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRTdXJmYWNlLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQ29tcGFueSAxMDAs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQ29vcmRpbmF0ZWRTdXJmYWNlOjpG
YWN0b3J5KiBDb29yZGluYXRlZFN1cmZhY2U6OnNfZmFjdG9yeSA9IDA7Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRTdXJmYWNlOjpzZXRGYWN0b3J5KENvb3JkaW5hdGVkU3VyZmFjZTo6RmFjdG9yeSBmYWN0
b3J5KQotewotICAgIHNfZmFjdG9yeSA9IGZhY3Rvcnk7Ci19Ci0KLVBhc3NSZWZQdHI8Q29vcmRp
bmF0ZWRTdXJmYWNlPiBDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBzaXplLCBGbGFncyBmbGFncykKLXsKLSAgICBBU1NFUlQoc19mYWN0b3J5KTsKLSAg
ICByZXR1cm4gc19mYWN0b3J5KHNpemUsIGZsYWdzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1cmZh
Y2UuaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5h
dGVkU3VyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGIxN2NlZDE5OWIz
N2JmNDQ0ZjM3OTNmMTA0Yjg1ZDM5N2QyMThiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBo
aWNzL0Nvb3JkaW5hdGVkU3VyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAot
LyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRTdXJmYWNlX2gKLSNkZWZp
bmUgQ29vcmRpbmF0ZWRTdXJmYWNlX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBCaXRtYXBUZXh0dXJlOwotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRp
bmF0ZWRTdXJmYWNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvb3JkaW5hdGVkU3Vy
ZmFjZT4gewotcHVibGljOgotICAgIGVudW0gRmxhZyB7Ci0gICAgICAgIE5vRmxhZ3MgPSAwLAot
ICAgICAgICBTdXBwb3J0c0FscGhhID0gMSA8PCAwLAotICAgIH07Ci0gICAgdHlwZWRlZiB1bnNp
Z25lZCBGbGFnczsKLQotICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+
IEZhY3RvcnkoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIEZsYWdzKTsKLSAgICBzdGF0aWMgdm9p
ZCBzZXRGYWN0b3J5KEZhY3RvcnkpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvb3JkaW5hdGVk
U3VyZmFjZT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBGbGFncyk7Ci0KLSAgICB2
aXJ0dWFsIH5Db29yZGluYXRlZFN1cmZhY2UoKSB7IH0KLQotICAgIGJvb2wgc3VwcG9ydHNBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIGZsYWdzKCkgJiBTdXBwb3J0c0FscGhhOyB9Ci0gICAgdmlydHVh
bCBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgYSBn
cmFwaGljcyBjb250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFpbnQgaW50byB0aGUgYmFja2lu
ZyBzdG9yZS4KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PiBjcmVhdGVHcmFwaGljc0NvbnRleHQoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLQot
I2lmIFVTRShURVhUVVJFX01BUFBFUikKLSAgICB2aXJ0dWFsIHZvaWQgY29weVRvVGV4dHVyZShQ
YXNzUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRleHR1cmU+LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiB0YXJnZXQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzb3VyY2VPZmZzZXQpID0gMDsKLSNl
bmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBGbGFncyBmbGFncygpIGNvbnN0ID0gMDsK
LQotcHJpdmF0ZToKLSAgICBzdGF0aWMgQ29vcmRpbmF0ZWRTdXJmYWNlOjpGYWN0b3J5KiBzX2Zh
Y3Rvcnk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCi0jZW5kaWYgLy8g
Q29vcmRpbmF0ZWRTdXJmYWNlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VVcGRhdGVJbmZvLmggYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9TdXJmYWNlVXBkYXRlSW5mby5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyNzI4OWZjZGYwZmZiOWZlZTA2ZTA0NDE5ODQ4MzE3MGY4MzJm
YjI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VVcGRhdGVJbmZvLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBTdXJmYWNlVXBkYXRlSW5mb19oCi0jZGVmaW5lIFN1cmZh
Y2VVcGRhdGVJbmZvX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1
ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1u
YW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU3VyZmFjZVVwZGF0ZUluZm8gewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN1cmZhY2VVcGRhdGVJbmZvKTsKLQotcHVibGljOgotICAgIFN1cmZh
Y2VVcGRhdGVJbmZvKCkgeyB9Ci0KLSAgICAvLyBUaGUgcmVjdCB0byBiZSB1cGRhdGVkLgotICAg
IFdlYkNvcmU6OkludFJlY3QgdXBkYXRlUmVjdDsKLQotICAgIC8vIFRoZSBwYWdlIHNjYWxlIGZh
Y3RvciB1c2VkIHRvIHJlbmRlciB0aGlzIHVwZGF0ZS4KLSAgICBmbG9hdCBzY2FsZUZhY3RvcjsK
LQotICAgIC8vIFRoZSBpZCBvZiB0aGUgdXBkYXRlIGF0bGFzIGluY2x1ZGluZyB0aGUgc2hhcmVh
YmxlIGJpdG1hcCBjb250YWluaW5nIHRoZSB1cGRhdGVzLgotICAgIHVpbnQzMl90IGF0bGFzSUQ7
Ci0KLSAgICAvLyBUaGUgb2Zmc2V0IGluIHRoZSBiaXRtYXAgd2hlcmUgdGhlIHJlbmRlcmVkIGNv
bnRlbnRzIGFyZS4KLSAgICBXZWJDb3JlOjpJbnRQb2ludCBzdXJmYWNlT2Zmc2V0OwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0KLSNlbmRpZiAvLyBTdXJmYWNlVXBkYXRlSW5mb19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRlZFN1cmZhY2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5h
dGVkU3VyZmFjZS5oCmluZGV4IGI4MjhhYWQ4MTc0NTQyZWRkMzdiMThlMzdmMjZjZGM5NGFiODA5
ZjAuLjE0YTdjMDA3ODU0OTA3NGQwMzU3OWJkNDllZmRkMjhiZTRhNWZkOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5hdGVk
U3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNz
L1dlYkNvb3JkaW5hdGVkU3VyZmFjZS5oCkBAIC0yMiw4ICsyMiw4IEBACiAjZGVmaW5lIFdlYkNv
b3JkaW5hdGVkU3VyZmFjZV9oCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5j
bHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZFN1cmZhY2UuaD4KIAogI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQogI2luY2x1ZGUgIkdyYXBoaWNzU3VyZmFjZS5oIgpAQCAtMzYsNyArMzYs
NyBAQCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFz
cyBXZWJDb29yZGluYXRlZFN1cmZhY2UgOiBwdWJsaWMgQ29vcmRpbmF0ZWRTdXJmYWNlIHsKK2Ns
YXNzIFdlYkNvb3JkaW5hdGVkU3VyZmFjZSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGluYXRlZFN1
cmZhY2UgewogcHVibGljOgogICAgIGNsYXNzIEhhbmRsZSB7CiAgICAgICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEhhbmRsZSk7CkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NTdXJmYWNlVG9rZW4gbV9ncmFwaGljc1N1cmZhY2VUb2tlbjsKICNlbmRp
ZgogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKLSAgICAgICAgQ29vcmRpbmF0ZWRT
dXJmYWNlOjpGbGFncyBtX2ZsYWdzOworICAgICAgICBXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZh
Y2U6OkZsYWdzIG1fZmxhZ3M7CiAgICAgfTsKIAogICAgIC8vIENyZWF0ZSBhIG5ldyBXZWJDb29y
ZGluYXRlZFN1cmZhY2UsIGFuZCBhbGxvY2F0ZSBlaXRoZXIgYSBHcmFwaGljc1N1cmZhY2Ugb3Ig
YSBTaGFyZWFibGVCaXRtYXAgYXMgYmFja2luZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiZjI3N2E3MGU2ZWFl
YWU3M2JmZTMyMDgxOGM3NjRlMDQwNTA1NTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
ICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uX2gKLSNkZWZpbmUgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uX2gKLQotI2lmIEVO
QUJMRShDU1NfU0hBREVSUykKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGNsYXNzIGlzIG9ubHkgYWRkaW5nIHRoZSBw
cm9ncmFtSWQgb24gdG9wIG9mIEN1c3RvbUZpbHRlck9wZXJhdGlvbi4gVGhlIGFyZ3VtZW50IGRl
Y29kZXIgaGFzIG5vCi0vLyBjb250ZXh0LCBzbyB3ZSBjYW5ub3Qgc2VhcmNoIGluIG91ciBjYWNo
ZWQgQ3VzdG9tRmlsdGVyUHJvZ3JhbXMgd2hpbGUgZGVjb2RpbmcuIEluIHRoYXQgY2FzZQotLy8g
aXQgd2lsbCBqdXN0IHN0b3JlIHRoZSBwcm9ncmFtSWQgYW5kIG5vIEN1c3RvbUZpbHRlclByb2dy
YW0gaW5zdGFuY2UuIFRoZSByZWNlaXZlciBpcyBzdXBwb3NlZCB0bwotLy8gaXRlcmF0ZSBvbiB0
aGlzIHN0cnVjdHVyZSBhbmQgaW5qZWN0IHRoZSByaWdodCBDdXN0b21GaWx0ZXJQcm9ncmFtcy4K
LQotY2xhc3MgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uIDogcHVibGljIEN1c3RvbUZpbHRlck9w
ZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJQcm9ncmFtPiBwcm9ncmFt
LCBpbnQgcHJvZ3JhbUlELCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBzb3J0ZWRQ
YXJhbWV0ZXJzLCB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3Rv
bUZpbHRlck1lc2hUeXBlIG1lc2hUeXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24ocHJvZ3JhbSwgcHJvZ3JhbUlELCBzb3J0ZWRQ
YXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hUeXBlKSk7Ci0gICAgfQotCi0g
ICAgaW50IHByb2dyYW1JRCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3JhbUlEOyB9Ci0KLXByaXZh
dGU6Ci0gICAgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UHJvZ3JhbT4gcHJvZ3JhbSwgaW50IHByb2dyYW1JRCwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdCYgc29ydGVkUGFyYW1ldGVycywgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1l
c2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJNZXNoVHlwZSBtZXNoVHlwZSkKLSAgICAgICAgOiBDdXN0
b21GaWx0ZXJPcGVyYXRpb24ocHJvZ3JhbSwgc29ydGVkUGFyYW1ldGVycywgbWVzaFJvd3MsIG1l
c2hDb2x1bW5zLCBtZXNoVHlwZSkKLSAgICAgICAgLCBtX3Byb2dyYW1JRChwcm9ncmFtSUQpCi0g
ICAgewotICAgIH0KLQotICAgIGludCBtX3Byb2dyYW1JRDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykKLQotI2VuZGlmIC8vIEN1
c3RvbUZpbHRlck9wZXJhdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Q29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJQcm9ncmFtLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21GaWx0ZXJQcm9ncmFtLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYWFkZDZmZWQ3OWNjNDhiM2NlNTk0OGUw
NmY3NDZmMzc3NzVjZmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvV2ViQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFdlYkN1c3RvbUZpbHRlclByb2dyYW1faAotI2RlZmluZSBXZWJD
dXN0b21GaWx0ZXJQcm9ncmFtX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
RU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgPFdlYkNvcmUvQ3VzdG9tRmlsdGVyQ29uc3Rh
bnRzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9DdXN0b21GaWx0ZXJQcm9ncmFtLmg+Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtIDogcHVibGljIFdl
YkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW0gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkN1c3RvbUZpbHRlclByb2dyYW0+IGNyZWF0ZShTdHJpbmcgdmVydGV4U2hhZGVyU3Ry
aW5nLCBTdHJpbmcgbV9mcmFnbWVudFNoYWRlclN0cmluZywgV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UHJvZ3JhbVR5cGUgcHJvZ3JhbVR5cGUsIFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW1NaXhT
ZXR0aW5ncyBtaXhTZXR0aW5ncywgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyTWVzaFR5cGUgbWVzaFR5
cGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkN1c3RvbUZpbHRlclBy
b2dyYW0odmVydGV4U2hhZGVyU3RyaW5nLCBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nLCBwcm9ncmFt
VHlwZSwgbWl4U2V0dGluZ3MsIG1lc2hUeXBlKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29s
IGlzTG9hZGVkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbSYgbykgY29uc3QgT1ZF
UlJJREUKLSAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgIT0gb3BlcmF0b3IgYmVj
YXVzZSB0aGF0IHdvdWxkIHJlY3Vyc2l2ZWx5IGNhbGwgdGhpcyBtZXRob2QuCi0gICAgICAgIGlm
ICghQ3VzdG9tRmlsdGVyUHJvZ3JhbTo6b3BlcmF0b3I9PShvKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNhc3QgaXMgdWdseSwgYnV0IFdl
YkN1c3RvbUZpbHRlclByb2dyYW0gaXMgdGhlIHNpbmdsZSBpbXBsZW1lbnRhdGlvbiBvZiBDdXN0
b21GaWx0ZXJQcm9ncmFtIG9uIFVJIFByb2Nlc3MuCi0gICAgICAgIGNvbnN0IFdlYkN1c3RvbUZp
bHRlclByb2dyYW0qIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ3VzdG9tRmlsdGVyUHJv
Z3JhbSo+KCZvKTsKLSAgICAgICAgcmV0dXJuIG1fdmVydGV4U2hhZGVyU3RyaW5nID09IG90aGVy
LT52ZXJ0ZXhTaGFkZXJTdHJpbmcoKSAmJiBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nID09IG90aGVy
LT5mcmFnbWVudFNoYWRlclN0cmluZygpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgU3RyaW5nIHZlcnRleFNoYWRlclN0cmluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
dmVydGV4U2hhZGVyU3RyaW5nOyB9Ci0gICAgdmlydHVhbCBTdHJpbmcgZnJhZ21lbnRTaGFkZXJT
dHJpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ZyYWdtZW50U2hhZGVyU3RyaW5nOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbEhhdmVDbGllbnRzKCkgT1ZFUlJJREUgeyBub3RpZnlD
bGllbnRzKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlTGFzdENsaWVudCgpIE9WRVJS
SURFIHsgfQotCi1wcml2YXRlOgotICAgIFdlYkN1c3RvbUZpbHRlclByb2dyYW0oU3RyaW5nIHZl
cnRleFNoYWRlclN0cmluZywgU3RyaW5nIGZyYWdtZW50U2hhZGVyU3RyaW5nLCBXZWJDb3JlOjpD
dXN0b21GaWx0ZXJQcm9ncmFtVHlwZSBwcm9ncmFtVHlwZSwgV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UHJvZ3JhbU1peFNldHRpbmdzIG1peFNldHRpbmdzLCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJNZXNo
VHlwZSBtZXNoVHlwZSkKLSAgICAgICAgOiBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtKHBy
b2dyYW1UeXBlLCBtaXhTZXR0aW5ncywgbWVzaFR5cGUpCi0gICAgICAgICwgbV92ZXJ0ZXhTaGFk
ZXJTdHJpbmcodmVydGV4U2hhZGVyU3RyaW5nKQotICAgICAgICAsIG1fZnJhZ21lbnRTaGFkZXJT
dHJpbmcoZnJhZ21lbnRTaGFkZXJTdHJpbmcpCi0gICAgewotICAgIH0KLQotICAgIFN0cmluZyBt
X3ZlcnRleFNoYWRlclN0cmluZzsKLSAgICBTdHJpbmcgbV9mcmFnbWVudFNoYWRlclN0cmluZzsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKSAmJiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0KLSNlbmRpZiAvLyBXZWJDdXN0b21G
aWx0ZXJQcm9ncmFtX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkgYi9T
b3VyY2UvV2ViS2l0Mi9UYXJnZXQucHJpCmluZGV4IGZlZDU3ZDg1MmZhYTA3MTRhOGNhNTcxOGJj
ZjVlYzNjY2U2YWM2NDMuLjY1Y2E4MzQxZWRiNGJmOTIyMTAxMmQ3YTExYmM0NWFjYjcwYTU4NjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYktp
dDIvVGFyZ2V0LnByaQpAQCAtMTM1LDExICsxMzUsNyBAQCBIRUFERVJTICs9IFwKICAgICBTaGFy
ZWQvV2ViVVJMUmVzcG9uc2UuaCBcCiAgICAgU2hhcmVkL1dlYlVzZXJDb250ZW50VVJMUGF0dGVy
bi5oIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNz
QXJndW1lbnRDb2RlcnMuaCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRMYXllckluZm8uaCBcCi0gICAgU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRp
bmF0ZWRTdXJmYWNlLmggXAotICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1N1cmZhY2VV
cGRhdGVJbmZvLmggXAogICAgIFNoYXJlZC9Db29yZGluYXRlZEdyYXBoaWNzL1dlYkNvb3JkaW5h
dGVkU3VyZmFjZS5oIFwKLSAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21G
aWx0ZXJQcm9ncmFtLmggXAogICAgIFNoYXJlZC9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1
Z2luTW9kdWxlLmggXAogICAgIFNoYXJlZC9QbHVnaW5zL05QUmVtb3RlT2JqZWN0TWFwLmggXAog
ICAgIFNoYXJlZC9QbHVnaW5zL05QSWRlbnRpZmllckRhdGEuaCBcCkBAIC0yMTAsOSArMjA2LDcg
QEAgSEVBREVSUyArPSBcCiAgICAgVUlQcm9jZXNzL0F1dGhlbnRpY2F0aW9uL1dlYlByb3RlY3Rp
b25TcGFjZS5oIFwKICAgICBVSVByb2Nlc3MvQmFja2luZ1N0b3JlLmggXAogICAgIFVJUHJvY2Vz
cy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5oIFwKLSAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEJhY2tpbmdTdG9yZS5oIFwKICAgICBVSVByb2Nlc3MvQ29vcmRp
bmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5oIFwKLSAgICBVSVBy
b2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9MYXllclRyZWVSZW5kZXJlci5oIFwKICAgICBVSVBy
b2Nlc3MvRGVmYXVsdFVuZG9Db250cm9sbGVyLmggXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJl
YVByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9EcmF3aW5nQXJlYVByb3h5SW1wbC5oIFwKQEAgLTM2
MywxMiArMzU3LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdp
bmdBcmVhSW1wbC5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmgg
XAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5oIFwKLSAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmggXAotICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oIFwKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZEltYWdlQmFja2luZy5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaCBcCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggXAotICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmggXAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9UYXBIaWdobGlnaHRDb250cm9sbGVyLmggXAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9QYWdlT3ZlcmxheS5oIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29u
dGV4dE1lbnUuaCBcCkBAIC01MDMsNyArNDkyLDYgQEAgU09VUkNFUyArPSBcCiAgICAgU2hhcmVk
L1dlYlVSTFJlc3BvbnNlLmNwcCBcCiAgICAgU2hhcmVkL1dlYldoZWVsRXZlbnQuY3BwIFwKICAg
ICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzQXJndW1lbnRD
b2RlcnMuY3BwIFwKLSAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFN1
cmZhY2UuY3BwIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDb29yZGluYXRl
ZFN1cmZhY2UuY3BwIFwKICAgICBTaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy9XZWJDdXN0b21G
aWx0ZXJQcm9ncmFtUHJveHkuY3BwIFwKICAgICBTaGFyZWQvcXQvQXJndW1lbnRDb2RlcnNRdC5j
cHAgXApAQCAtNTY1LDkgKzU1Myw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9BdXRo
ZW50aWNhdGlvbi9XZWJQcm90ZWN0aW9uU3BhY2UuY3BwIFwKICAgICBVSVByb2Nlc3MvQmFja2lu
Z1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL3F0L0JhY2tpbmdTdG9yZVF0LmNwcCBcCi0gICAg
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3Bw
IFwKICAgICBVSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5jcHAgXAotICAgIFVJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVy
VHJlZVJlbmRlcmVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0RlZmF1bHRVbmRvQ29udHJvbGxlci5j
cHAgXAogICAgIFVJUHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eS5jcHAgXAogICAgIFVJ
UHJvY2Vzcy9Eb3dubG9hZHMvRG93bmxvYWRQcm94eU1hcC5jcHAgXApAQCAtNzQ0LDEyICs3MzAs
NyBAQCBTT1VSQ0VTICs9IFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRW5jb2RlckFkYXB0ZXIu
Y3BwIFwKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBcCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAgXAotICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAgXAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nLmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcCBcCi0gICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmNwcCBcCi0gICAg
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwIFwK
ICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvVGFwSGlnaGxpZ2h0Q29udHJvbGxlci5jcHAgXAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9MYXllclRyZWVIb3N0LmNwcCBcCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL1BhZ2VPdmVybGF5LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDViYjQ0NjQ3N2NiZDI1NzVmNTZkMGNjOTNkZWEwMjExZjcy
MWE5MDMuLmFhMzUwZjRmMGRkZTJlYjNlYmU4NThhMDJjMjg2NjNhZjlkNjM5ZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0yNyw3ICsyNyw2
IEBACiAjaW5jbHVkZSAiRmluZENsaWVudEVmbC5oIgogI2luY2x1ZGUgIkZvcm1DbGllbnRFZmwu
aCIKICNpbmNsdWRlICJJbnB1dE1ldGhvZENvbnRleHRFZmwuaCIKLSNpbmNsdWRlICJMYXllclRy
ZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRCYXNlLmgiCiAjaW5jbHVkZSAiUGFn
ZUNsaWVudERlZmF1bHRJbXBsLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudExlZ2FjeUltcGwuaCIK
QEAgLTYyLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxFY29yZV9YLmg+CiAjaW5jbHVkZSA8RWRqZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXNFZmwuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29y
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ltYWdlQ2Fpcm8uaD4KIApAQCAtMzYyLDcgKzM2Miw3
IEBAIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3Ojp0cmFuc2Zvcm1Ub1NjcmVlbigpIGNvbnN0CiB9
CiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi1MYXllclRyZWVSZW5kZXJlciogRXdr
Vmlldzo6bGF5ZXJUcmVlUmVuZGVyZXIoKQorQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBFd2tW
aWV3Ojpjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKQogewogICAgIERyYXdpbmdBcmVhUHJveHkq
IGRyYXdpbmdBcmVhID0gcGFnZSgpLT5kcmF3aW5nQXJlYSgpOwogICAgIGlmICghZHJhd2luZ0Fy
ZWEpCkBAIC0zNzIsNyArMzcyLDcgQEAgTGF5ZXJUcmVlUmVuZGVyZXIqIEV3a1ZpZXc6OmxheWVy
VHJlZVJlbmRlcmVyKCkKICAgICBpZiAoIWNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KQog
ICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQ
cm94eS0+bGF5ZXJUcmVlUmVuZGVyZXIoKTsKKyAgICByZXR1cm4gY29vcmRpbmF0ZWRMYXllclRy
ZWVIb3N0UHJveHktPmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOwogfQogI2VuZGlmCiAKQEAg
LTM5NCwxNCArMzk0LDE0IEBAIHZvaWQgRXdrVmlldzo6ZGlzcGxheVRpbWVyRmlyZWQoVGltZXI8
RXdrVmlldz4qKQogICAgIC8vIFdlIGFyZSBzdXBwb3NlZCB0byBjbGlwIHRvIHRoZSBhY3R1YWwg
dmlld3BvcnQsIG5vdGhpbmcgbGVzcy4KICAgICBJbnRSZWN0IHZpZXdwb3J0KHNkLT52aWV3Lngs
IHNkLT52aWV3LnksIHNkLT52aWV3LncsIHNkLT52aWV3LmgpOwogCi0gICAgTGF5ZXJUcmVlUmVu
ZGVyZXIqIHJlbmRlcmVyID0gbGF5ZXJUcmVlUmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVy
KQorICAgIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBjb29yZGluYXRlZEdyYXBo
aWNzU2NlbmUoKTsKKyAgICBpZiAoIXNjZW5lKQogICAgICAgICByZXR1cm47CiAKLSAgICByZW5k
ZXJlci0+c2V0QWN0aXZlKHRydWUpOwotICAgIHJlbmRlcmVyLT5zZXREcmF3c0JhY2tncm91bmQo
bV9zZXREcmF3c0JhY2tncm91bmQpOworICAgIHNjZW5lLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAg
c2NlbmUtPnNldERyYXdzQmFja2dyb3VuZChtX3NldERyYXdzQmFja2dyb3VuZCk7CiAgICAgaWYg
KG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIHJlbmRlcmVyLT5wYWludFRvQ3Vy
cmVudEdMQ29udGV4dCh0cmFuc2Zvcm1Ub1NjZW5lKCkudG9UcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCAvKiBvcGFjaXR5ICovIDEsIHZpZXdwb3J0KTsKKyAgICAgICAgc2NlbmUtPnBhaW50VG9DdXJy
ZW50R0xDb250ZXh0KHRyYW5zZm9ybVRvU2NlbmUoKS50b1RyYW5zZm9ybWF0aW9uTWF0cml4KCks
IC8qIG9wYWNpdHkgKi8gMSwgdmlld3BvcnQpOwogICAgICAgICAvLyBzZC0+aW1hZ2UgaXMgdGll
ZCB0byBhIG5hdGl2ZSBzdXJmYWNlLiBUaGUgbmF0aXZlIHN1cmZhY2UgaXMgaW4gdGhlIHBhcmVu
dCdzIGNvb3JkaW5hdGVzLAogICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIGFjY291bnQgZm9yIHRo
ZSB2aWV3cG9ydCBwb3NpdGlvbiB3aGVuIGNhbGxpbmcgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91
cGRhdGVfYWRkLgogICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2Qt
PmltYWdlLCB2aWV3cG9ydC54KCksIHZpZXdwb3J0LnkoKSwgdmlld3BvcnQud2lkdGgoKSwgdmll
d3BvcnQuaGVpZ2h0KCkpOwpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgRXdrVmlldzo6ZGlzcGxh
eVRpbWVyRmlyZWQoVGltZXI8RXdrVmlldz4qKQogICAgICAgICBjYWlyb190cmFuc2xhdGUoZ3Jh
cGhpY3NDb250ZXh0LmdldCgpLCAtIHBhZ2VQb3NpdGlvbigpLngoKSwgLSBwYWdlUG9zaXRpb24o
KS55KCkpOwogICAgICAgICBjYWlyb19zY2FsZShncmFwaGljc0NvbnRleHQuZ2V0KCksIHBhZ2VT
Y2FsZUZhY3RvcigpLCBwYWdlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgIGNhaXJvX3NjYWxlKGdy
YXBoaWNzQ29udGV4dC5nZXQoKSwgZGV2aWNlU2NhbGVGYWN0b3IoKSwgZGV2aWNlU2NhbGVGYWN0
b3IoKSk7Ci0gICAgICAgIHJlbmRlcmVyLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KGdyYXBoaWNz
Q29udGV4dC5nZXQoKSk7CisgICAgICAgIHNjZW5lLT5wYWludFRvR3JhcGhpY3NDb250ZXh0KGdy
YXBoaWNzQ29udGV4dC5nZXQoKSk7CiAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBk
YXRlX2FkZChzZC0+aW1hZ2UsIDAsIDAsIHZpZXdwb3J0LndpZHRoKCksIHZpZXdwb3J0LmhlaWdo
dCgpKTsKICAgICB9CiAjZW5kaWYKQEAgLTY5NSw3ICs2OTUsNyBAQCBib29sIEV3a1ZpZXc6OmNy
ZWF0ZUdMU3VyZmFjZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKIAogYm9vbCBFd2tWaWV3Ojpl
bnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkKIHsKLSAgICBsYXllclRyZWVSZW5kZXJl
cigpLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCktPnNl
dEFjdGl2ZSh0cnVlKTsKIAogICAgIGlmICghbV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQpCiAgICAg
ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oCmluZGV4IDM3YThkMWJkYmJiYWM4MDFkZjliNTFhMjdmNjZkMjhlMTQ2ZWI3NmIuLjk5Y2U4
ZWRiNGIxYTAzZjliYTViMTdkM2I3ODgwZmQ3NTNmZjg3MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTY4LDEwICs2OCw2IEBAIGNsYXNzIFdlYlBv
cHVwTWVudVByb3h5RWZsOwogI2lmIEVOQUJMRShWSUJSQVRJT04pCiBjbGFzcyBWaWJyYXRpb25D
bGllbnRFZmw7CiAjZW5kaWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLWNsYXNz
IExheWVyVHJlZVJlbmRlcmVyOwotI2VuZGlmCiB9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTc5LDYgKzc1LDkgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgQ29sb3I7CiBjbGFz
cyBDdXJzb3I7CiBjbGFzcyBJbnRTaXplOworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
K2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTsKKyNlbmRpZgogfQogCiBjbGFzcyBFd2tD
b250ZXh0OwpAQCAtMjE5LDcgKzIxOCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaXNwbGF5VGlt
ZXJGaXJlZChXZWJDb3JlOjpUaW1lcjxFd2tWaWV3PiopOwogCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRl
cmVyKCk7CisgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRl
ZEdyYXBoaWNzU2NlbmUoKTsKICNlbmRpZgogCiAgICAgdm9pZCBpbmZvcm1JY29uQ2hhbmdlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xcXVpY2t3ZWJwYWdlLmNw
cAppbmRleCBmYTAxM2FmNTM3NjgwYTQyYjM5MzlmN2MyOGVmNzA4YTZlZmRhMGNkLi4yMDc2MWUy
Zjk1Nzg4OTVkOGQwNmEzMDQ2OGJjMWY3OWJhZmJkMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3FxdWlja3dlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXF1aWNrd2VicGFnZS5jcHAKQEAgLTIyLDcgKzIyLDYgQEAK
ICNpbmNsdWRlICJxcXVpY2t3ZWJwYWdlX3AuaCIKIAogI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmgiCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNs
dWRlICJRdFdlYlBhZ2VFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJRdFdlYlBhZ2VTR05vZGUu
aCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpAQCAtMzEsNiArMzAsNyBAQAog
I2luY2x1ZGUgInFxdWlja3dlYnZpZXdfcC5oIgogI2luY2x1ZGUgInF3ZWJraXR0ZXN0X3AuaCIK
ICNpbmNsdWRlIDxRUXVpY2tXaW5kb3c+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdy
YXBoaWNzU2NlbmUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtNzEsOCArNzEs
OCBAQCB2b2lkIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpwYWludChRUGFpbnRlciogcGFpbnRlcikK
ICAgICBpZiAoIXdlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPmxheWVyVHJlZVJlbmRl
cmVyKCkpCi0gICAgICAgIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPmxheWVyVHJl
ZVJlbmRlcmVyKCktPnBhaW50VG9HcmFwaGljc0NvbnRleHQocGFpbnRlcik7CisgICAgaWYgKGNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCktPmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgp
KQorICAgICAgICBjb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5jb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUoKS0+cGFpbnRUb0dyYXBoaWNzQ29udGV4dChwYWludGVyKTsKIH0KIAogQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkqIFFRdWlja1dlYlBhZ2VQcml2YXRlOjpjb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSgpCkBAIC04OCw3ICs4OCw3IEBAIFFTR05vZGUqIFFRdWlj
a1dlYlBhZ2U6OnVwZGF0ZVBhaW50Tm9kZShRU0dOb2RlKiBvbGROb2RlLCBVcGRhdGVQYWludE5v
ZGVEYXRhKikKICAgICBpZiAoIWQtPndlYlBhZ2VQcm94eS0+ZHJhd2luZ0FyZWEoKSkKICAgICAg
ICAgcmV0dXJuIG9sZE5vZGU7CiAKLSAgICBMYXllclRyZWVSZW5kZXJlciogcmVuZGVyZXIgPSBk
LT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5sYXllclRyZWVSZW5kZXJlcigpOwor
ICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogc2NlbmUgPSBkLT5jb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKIAog
ICAgIFF0V2ViUGFnZVNHTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PFF0V2ViUGFnZVNHTm9kZSo+
KG9sZE5vZGUpOwogCkBAIC0xMDUsNyArMTA1LDcgQEAgUVNHTm9kZSogUVF1aWNrV2ViUGFnZTo6
dXBkYXRlUGFpbnROb2RlKFFTR05vZGUqIG9sZE5vZGUsIFVwZGF0ZVBhaW50Tm9kZURhdGEqKQog
ICAgIGlmICghbm9kZSkKICAgICAgICAgbm9kZSA9IG5ldyBRdFdlYlBhZ2VTR05vZGU7CiAKLSAg
ICBub2RlLT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CisgICAgbm9kZS0+c2V0Q29vcmRpbmF0ZWRH
cmFwaGljc1NjZW5lKHNjZW5lKTsKIAogICAgIG5vZGUtPnNldFNjYWxlKGQtPmNvbnRlbnRzU2Nh
bGUpOwogICAgIG5vZGUtPnNldERldmljZVBpeGVsUmF0aW8od2luZG93LT5kZXZpY2VQaXhlbFJh
dGlvKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcv
cXJhd3dlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJh
d3dlYnZpZXcuY3BwCmluZGV4IDM2MWY3NGRhYjg1MWFkODk4ZWQzOWQyNzdhN2E2ZjQ3OWIyNTk3
MzEuLmQzNDgxZWEwMTYyYTUzZDNkMDg4M2U3ZDYzMGMzMmYzNDcwM2ExZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlldy5jcHAKQEAg
LTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5o
IgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgi
Ci0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXli
b2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCkBAIC0zNSw2ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZUdyb3Vw
LmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJxcmF3d2Vidmlld19w
X3AuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZS5oPgogI2lu
Y2x1ZGUgPFdlYktpdDIvcXJhd3dlYnZpZXdfcC5oPgogCiB2b2lkIFFSYXdXZWJWaWV3UHJpdmF0
ZTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgUVJhd1dlYlZpZXc6OnNldEFjdGl2ZShi
b29sIGFjdGl2ZSkKIHsKICAgICBkLT5tX2FjdGl2ZSA9IGFjdGl2ZTsKICAgICBkLT5tX3dlYlBh
Z2VQcm94eS0+dmlld1N0YXRlRGlkQ2hhbmdlKFdlYktpdDo6V2ViUGFnZVByb3h5OjpWaWV3V2lu
ZG93SXNBY3RpdmUpOwotICAgIGxheWVyVHJlZVJlbmRlcmVyKCktPnNldEFjdGl2ZShhY3RpdmUp
OworICAgIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpLT5zZXRBY3RpdmUoYWN0aXZlKTsKIH0K
IAogUVNpemUgUVJhd1dlYlZpZXc6OnNpemUoKSBjb25zdApAQCAtMzYzLDcgKzM2Myw3IEBAIFdL
UGFnZVJlZiBRUmF3V2ViVmlldzo6cGFnZVJlZigpCiAgICAgcmV0dXJuIHRvQVBJKGQtPm1fd2Vi
UGFnZVByb3h5LmdldCgpKTsKIH0KIAotV2ViS2l0OjpMYXllclRyZWVSZW5kZXJlciogUVJhd1dl
YlZpZXc6OmxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QKK1dlYkNvcmU6OkNvb3JkaW5hdGVkR3Jh
cGhpY3NTY2VuZSogUVJhd1dlYlZpZXc6OmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpIGNvbnN0
CiB7CiAgICAgV2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5KiBkcmF3aW5nQXJlYSA9IGQtPm1fd2Vi
UGFnZVByb3h5LT5kcmF3aW5nQXJlYSgpOwogICAgIGlmICghZHJhd2luZ0FyZWEpCkBAIC0zNzEs
MjAgKzM3MSwyMCBAQCBXZWJLaXQ6OkxheWVyVHJlZVJlbmRlcmVyKiBRUmF3V2ViVmlldzo6bGF5
ZXJUcmVlUmVuZGVyZXIoKSBjb25zdAogICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHkqIGNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5ID0gZHJhd2luZ0FyZWEtPmNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7CiAgICAgaWYgKCFjb29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LT5sYXllclRyZWVSZW5kZXJlcigpOworICAgIHJldHVybiBjb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS0+Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiB9
CiAKIHZvaWQgUVJhd1dlYlZpZXc6OnBhaW50KGNvbnN0IFFNYXRyaXg0eDQmIHRyYW5zZm9ybSwg
ZmxvYXQgb3BhY2l0eSwgdW5zaWduZWQgcGFpbnRGbGFncykKIHsKLSAgICBXZWJLaXQ6OkxheWVy
VHJlZVJlbmRlcmVyKiByZW5kZXJlciA9IGxheWVyVHJlZVJlbmRlcmVyKCk7Ci0gICAgaWYgKCFy
ZW5kZXJlcikKKyAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIHNjZW5lID0g
Y29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CisgICAgaWYgKCFzY2VuZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcmVuZGVyZXItPnNldEFjdGl2ZSh0cnVlKTsKKyAgICBzY2VuZS0+c2V0QWN0
aXZlKHRydWUpOwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHJlY3QoMCwgMCwgZC0+bV9zaXpl
LndpZHRoKCksIGQtPm1fc2l6ZS5oZWlnaHQoKSk7CiAKLSAgICByZW5kZXJlci0+cGFpbnRUb0N1
cnJlbnRHTENvbnRleHQodHJhbnNmb3JtLCBvcGFjaXR5LCB0cmFuc2Zvcm0ubWFwUmVjdChyZWN0
KSwgcGFpbnRGbGFncyk7CisgICAgc2NlbmUtPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHRyYW5z
Zm9ybSwgb3BhY2l0eSwgdHJhbnNmb3JtLm1hcFJlY3QocmVjdCksIHBhaW50RmxhZ3MpOwogfQog
CiB2b2lkIFFSYXdXZWJWaWV3OjpzZW5kS2V5RXZlbnQoUUtleUV2ZW50KiBldmVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3Au
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcmF3L3FyYXd3ZWJ2aWV3X3AuaApp
bmRleCAwMTU4MTVhZDhjNzBhOWRlMDVkODFiYTZhNjMwMjEwYjcyMmNmN2Y0Li40YWUzZTVlNTNl
YWMzNjAxNGZiODA1N2Y0OTUwZmFhZjVmYzJjMjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3Jhdy9xcmF3d2Vidmlld19wLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC9yYXcvcXJhd3dlYnZpZXdfcC5oCkBAIC00Nyw4ICs0Nyw4IEBA
IFFUX0VORF9OQU1FU1BBQ0UKIAogY2xhc3MgUVJhd1dlYlZpZXdQcml2YXRlOwogCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLWNsYXNzIExheWVyVHJlZVJlbmRlcmVyOworbmFtZXNwYWNlIFdlYkNvcmUg
eworY2xhc3MgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOwogfQogCiBjbGFzcyBRUmF3V2ViVmll
d0NsaWVudCB7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2VuZFRvdWNo
RXZlbnQoUVRvdWNoRXZlbnQqKTsKIAogcHJpdmF0ZToKLSAgICBXZWJLaXQ6OkxheWVyVHJlZVJl
bmRlcmVyKiBsYXllclRyZWVSZW5kZXJlcigpIGNvbnN0OworICAgIFdlYkNvcmU6OkNvb3JkaW5h
dGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCkgY29uc3Q7CiAKICAg
ICBRUmF3V2ViVmlld1ByaXZhdGUqIGQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmUuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRCYWNraW5nU3RvcmUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODM4YmIw
ZGIyMGQ4NzQzNGM4YTQzMWE0ZjA0ZjRmZDg2YTY2MGZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE5MCArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlv
biBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgi
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRT
dXJmYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi12b2lkIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlVGlsZTo6c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciogdGV4dHVyZU1h
cHBlcikKLXsKLSAgICBpZiAoIW1fc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmxv
YXRSZWN0IHRpbGVSZWN0KG1fdGlsZVJlY3QpOwotICAgIHRpbGVSZWN0LnNjYWxlKDEuIC8gbV9z
Y2FsZSk7Ci0gICAgYm9vbCBzaG91bGRSZXNldCA9IGZhbHNlOwotICAgIGlmICh0aWxlUmVjdCAh
PSByZWN0KCkpIHsKLSAgICAgICAgc2V0UmVjdCh0aWxlUmVjdCk7Ci0gICAgICAgIHNob3VsZFJl
c2V0ID0gdHJ1ZTsKLSAgICB9Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSB0
aGlzLT50ZXh0dXJlKCk7Ci0gICAgaWYgKCF0ZXh0dXJlKSB7Ci0gICAgICAgIHRleHR1cmUgPSB0
ZXh0dXJlTWFwcGVyLT5jcmVhdGVUZXh0dXJlKCk7Ci0gICAgICAgIHNldFRleHR1cmUodGV4dHVy
ZS5nZXQoKSk7Ci0gICAgICAgIHNob3VsZFJlc2V0ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQodGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKS53aWR0aCgpID49IG1fdGlsZVJlY3Qu
c2l6ZSgpLndpZHRoKCkgJiYgdGV4dHVyZU1hcHBlci0+bWF4VGV4dHVyZVNpemUoKS5oZWlnaHQo
KSA+PSBtX3RpbGVSZWN0LnNpemUoKS5oZWlnaHQoKSk7Ci0gICAgaWYgKHNob3VsZFJlc2V0KQot
ICAgICAgICB0ZXh0dXJlLT5yZXNldChtX3RpbGVSZWN0LnNpemUoKSwgbV9zdXJmYWNlLT5zdXBw
b3J0c0FscGhhKCkpOwotCi0gICAgbV9zdXJmYWNlLT5jb3B5VG9UZXh0dXJlKHRleHR1cmUsIG1f
c291cmNlUmVjdCwgbV9zdXJmYWNlT2Zmc2V0KTsKLSAgICBtX3N1cmZhY2UuY2xlYXIoKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU6OnNldEJhY2tCdWZmZXIoY29uc3Qg
SW50UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIFBhc3NSZWZQdHI8
Q29vcmRpbmF0ZWRTdXJmYWNlPiBidWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17Ci0g
ICAgbV9zb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBtX3RpbGVSZWN0ID0gdGlsZVJlY3Q7
Ci0gICAgbV9zdXJmYWNlT2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3VyZmFjZSA9IGJ1ZmZlcjsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6Y3JlYXRlVGlsZSh1aW50MzJfdCBp
ZCwgZmxvYXQgc2NhbGUpCi17Ci0gICAgbV90aWxlcy5hZGQoaWQsIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlVGlsZShzY2FsZSkpOwotICAgIG1fc2NhbGUgPSBzY2FsZTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZTo6cmVtb3ZlVGlsZSh1aW50MzJfdCBpZCkKLXsKLSAgICBBU1NF
UlQobV90aWxlcy5jb250YWlucyhpZCkpOwotICAgIG1fdGlsZXNUb1JlbW92ZS5hZGQoaWQpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjpyZW1vdmVBbGxUaWxlcygpCi17Ci0g
ICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVz
LmVuZCgpOwotICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRv
ciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBtX3RpbGVz
VG9SZW1vdmUuYWRkKGl0LT5rZXkpOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
Ojp1cGRhdGVUaWxlKHVpbnQzMl90IGlkLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiB0aWxlUmVjdCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IGJhY2tC
dWZmZXIsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCi17Ci0gICAgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmVUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuZmluZChpZCk7Ci0gICAgQVNTRVJU
KGl0ICE9IG1fdGlsZXMuZW5kKCkpOwotICAgIGl0LT52YWx1ZS5zZXRCYWNrQnVmZmVyKHRpbGVS
ZWN0LCBzb3VyY2VSZWN0LCBiYWNrQnVmZmVyLCBvZmZzZXQpOwotfQotCi1QYXNzUmVmUHRyPEJp
dG1hcFRleHR1cmU+IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlOjp0ZXh0dXJlKCkgY29uc3QKLXsK
LSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdGlsZXMuZW5kKCk7Ci0gICAgZm9yIChDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
LSAgICAgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRleHR1cmUgPSBpdC0+dmFsdWUudGV4dHVy
ZSgpOwotICAgICAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlOwot
ICAgIH0KLQotICAgIHJldHVybiBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+KCk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU6OnNldFNpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBzaXplKQotewotICAgIG1fc2l6ZSA9IHNpemU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmU6OnBhaW50VGlsZXNUb1RleHR1cmVNYXBwZXIoVmVjdG9yPFRleHR1cmVNYXBw
ZXJUaWxlKj4mIHRpbGVzLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBmbG9hdCBvcGFjaXR5LCBCaXRtYXBUZXh0dXJl
KiBtYXNrLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0aWxlcy5zaXplKCk7ICsraSkKLSAgICAgICAgdGlsZXNbaV0tPnBhaW50KHRleHR1cmVN
YXBwZXIsIHRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywgY2FsY3VsYXRlRXhwb3NlZFRpbGVFZGdl
cyhyZWN0LCB0aWxlc1tpXS0+cmVjdCgpKSk7Ci19Ci0KLVRyYW5zZm9ybWF0aW9uTWF0cml4IENv
b3JkaW5hdGVkQmFja2luZ1N0b3JlOjphZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QoY29uc3QgRmxv
YXRSZWN0JiB0YXJnZXRSZWN0KQotewotICAgIHJldHVybiBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
cmVjdFRvUmVjdChyZWN0KCksIHRhcmdldFJlY3QpOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFj
a2luZ1N0b3JlOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFw
cGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0sIGZsb2F0IG9wYWNpdHksIEJpdG1hcFRleHR1cmUqIG1hc2spCi17Ci0g
ICAgaWYgKG1fdGlsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCFt
X3NpemUuaXNaZXJvKCkpOwotCi0gICAgVmVjdG9yPFRleHR1cmVNYXBwZXJUaWxlKj4gdGlsZXNU
b1BhaW50OwotICAgIFZlY3RvcjxUZXh0dXJlTWFwcGVyVGlsZSo+IHByZXZpb3VzVGlsZXNUb1Bh
aW50OwotCi0gICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlzIGV2ZXJ5IHRpbWUgd2UgcGFpbnQsIGlu
IGNhc2UgdGhlIG9wYWNpdHkgaGFzIGNoYW5nZWQuCi0gICAgQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIEZsb2F0UmVjdCBj
b3ZlcmVkUmVjdDsKLSAgICBmb3IgKENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRl
cmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBD
b29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUmIHRpbGUgPSBpdC0+dmFsdWU7Ci0gICAgICAgIGlm
ICghdGlsZS50ZXh0dXJlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
dGlsZS5zY2FsZSgpID09IG1fc2NhbGUpIHsKLSAgICAgICAgICAgIHRpbGVzVG9QYWludC5hcHBl
bmQoJnRpbGUpOwotICAgICAgICAgICAgY292ZXJlZFJlY3QudW5pdGUodGlsZS5yZWN0KCkpOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBPbmx5IHNob3cg
dGhlIHByZXZpb3VzIHRpbGUgaWYgdGhlIG9wYWNpdHkgaXMgaGlnaCwgb3RoZXJ3aXNlIGVmZmVj
dCBsb29rcyBsaWtlIGEgYnVnLgotICAgICAgICAvLyBXZSBzaG93IHRoZSBwcmV2aW91cy1zY2Fs
ZSB0aWxlIGFueXdheSBpZiBpdCBkb2Vzbid0IGludGVyc2VjdCB3aXRoIGFueSBjdXJyZW50LXNj
YWxlIHRpbGUuCi0gICAgICAgIGlmIChvcGFjaXR5IDwgMC45NSAmJiBjb3ZlcmVkUmVjdC5pbnRl
cnNlY3RzKHRpbGUucmVjdCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHBy
ZXZpb3VzVGlsZXNUb1BhaW50LmFwcGVuZCgmdGlsZSk7Ci0gICAgfQotCi0gICAgLy8gdGFyZ2V0
UmVjdCBpcyBvbiB0aGUgY29udGVudHMgY29vcmRpbmF0ZSBzeXN0ZW0sIHNvIHdlIG11c3QgY29t
cGFyZSB0d28gcmVjdHMgb24gdGhlIGNvbnRlbnRzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIC8v
IFNlZSBUaWxlZEJhY2tpbmdTdG9yZS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhZGp1c3Rl
ZFRyYW5zZm9ybSA9IHRyYW5zZm9ybSAqIGFkanVzdGVkVHJhbnNmb3JtRm9yUmVjdCh0YXJnZXRS
ZWN0KTsKLQotICAgIHBhaW50VGlsZXNUb1RleHR1cmVNYXBwZXIocHJldmlvdXNUaWxlc1RvUGFp
bnQsIHRleHR1cmVNYXBwZXIsIGFkanVzdGVkVHJhbnNmb3JtLCBvcGFjaXR5LCBtYXNrLCByZWN0
KCkpOwotICAgIHBhaW50VGlsZXNUb1RleHR1cmVNYXBwZXIodGlsZXNUb1BhaW50LCB0ZXh0dXJl
TWFwcGVyLCBhZGp1c3RlZFRyYW5zZm9ybSwgb3BhY2l0eSwgbWFzaywgcmVjdCgpKTsKLX0KLQot
dm9pZCBDb29yZGluYXRlZEJhY2tpbmdTdG9yZTo6ZHJhd0JvcmRlcihUZXh0dXJlTWFwcGVyKiB0
ZXh0dXJlTWFwcGVyLCBjb25zdCBDb2xvciYgYm9yZGVyQ29sb3IsIGZsb2F0IGJvcmRlcldpZHRo
LCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiB0cmFuc2Zvcm0pCi17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zv
cm0gPSB0cmFuc2Zvcm0gKiBhZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7Ci0g
ICAgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVz
LmVuZCgpOwotICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRv
ciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB0ZXh0dXJl
TWFwcGVyLT5kcmF3Qm9yZGVyKGJvcmRlckNvbG9yLCBib3JkZXJXaWR0aCwgaXQtPnZhbHVlLnJl
Y3QoKSwgYWRqdXN0ZWRUcmFuc2Zvcm0pOwotfQotCi12b2lkIENvb3JkaW5hdGVkQmFja2luZ1N0
b3JlOjpkcmF3UmVwYWludENvdW50ZXIoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgaW50
IHJlcGFpbnRDb3VudCwgY29uc3QgQ29sb3ImIGJvcmRlckNvbG9yLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCi17Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0gKiBh
ZGp1c3RlZFRyYW5zZm9ybUZvclJlY3QodGFyZ2V0UmVjdCk7Ci0gICAgQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAo
Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmVUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICB0ZXh0dXJlTWFwcGVyLT5kcmF3UmVwYWlu
dENvdW50ZXIocmVwYWludENvdW50LCBib3JkZXJDb2xvciwgaXQtPnZhbHVlLnJlY3QoKS5sb2Nh
dGlvbigpLCBhZGp1c3RlZFRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmU6OmNvbW1pdFRpbGVPcGVyYXRpb25zKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIp
Ci17Ci0gICAgSGFzaFNldDx1aW50MzJfdD46Oml0ZXJhdG9yIHRpbGVzVG9SZW1vdmVFbmQgPSBt
X3RpbGVzVG9SZW1vdmUuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PHVpbnQzMl90Pjo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzVG9SZW1vdmUuYmVnaW4oKTsgaXQgIT0gdGlsZXNUb1JlbW92ZUVuZDsg
KytpdCkKLSAgICAgICAgbV90aWxlcy5yZW1vdmUoKml0KTsKLSAgICBtX3RpbGVzVG9SZW1vdmUu
Y2xlYXIoKTsKLQotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDo6aXRlcmF0b3Ig
dGlsZXNFbmQgPSBtX3RpbGVzLmVuZCgpOwotICAgIGZvciAoQ29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmVUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gdGlsZXNFbmQ7
ICsraXQpCi0gICAgICAgIGl0LT52YWx1ZS5zd2FwQnVmZmVycyh0ZXh0dXJlTWFwcGVyKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGlu
YXRlZEJhY2tpbmdTdG9yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODEyMGU5
ZTM4MjI1ZjY0MDk1NDYwODM2OGY0OTI0MzQ3ZDgzNGZiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGlu
YXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkQmFja2luZ1N0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw4NiArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2lm
bmRlZiBDb29yZGluYXRlZEJhY2tpbmdTdG9yZV9oCi0jZGVmaW5lIENvb3JkaW5hdGVkQmFja2lu
Z1N0b3JlX2gKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3JlLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRTdXJmYWNlOwotCi1jbGFzcyBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGUgOiBwdWJsaWMgV2ViQ29yZTo6VGV4dHVyZU1hcHBlclRp
bGUgewotcHVibGljOgotICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZShm
bG9hdCBzY2FsZSA9IDEpCi0gICAgICAgIDogVGV4dHVyZU1hcHBlclRpbGUoV2ViQ29yZTo6Rmxv
YXRSZWN0KCkpCi0gICAgICAgICwgbV9zY2FsZShzY2FsZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
aW5saW5lIGZsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQotICAgIHZvaWQg
c3dhcEJ1ZmZlcnMoV2ViQ29yZTo6VGV4dHVyZU1hcHBlciopOwotICAgIHZvaWQgc2V0QmFja0J1
ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBidWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFBv
aW50Jik7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gbV9zdXJm
YWNlOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9zb3VyY2VSZWN0OwotICAgIFdlYkNvcmU6Oklu
dFJlY3QgbV90aWxlUmVjdDsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBtX3N1cmZhY2VPZmZzZXQ7
Ci0gICAgZmxvYXQgbV9zY2FsZTsKLX07Ci0KLWNsYXNzIENvb3JkaW5hdGVkQmFja2luZ1N0b3Jl
IDogcHVibGljIFdlYkNvcmU6OlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUgewotcHVibGljOgot
ICAgIHZvaWQgY3JlYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGZsb2F0KTsKLSAgICB2b2lkIHJl
bW92ZVRpbGUodWludDMyX3QgdGlsZUlEKTsKLSAgICB2b2lkIHJlbW92ZUFsbFRpbGVzKCk7Ci0g
ICAgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFj
ZT4sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q29v
cmRpbmF0ZWRCYWNraW5nU3RvcmU+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZSk7IH0KLSAgICB2b2lkIGNvbW1pdFRpbGVPcGVyYXRpb25zKFdl
YkNvcmU6OlRleHR1cmVNYXBwZXIqKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkJpdG1hcFRl
eHR1cmU+IHRleHR1cmUoKSBjb25zdDsKLSAgICB2b2lkIHNldFNpemUoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJik7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0LCBXZWJDb3JlOjpCaXRtYXBUZXh0dXJl
Kik7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdCb3JkZXIoV2ViQ29yZTo6VGV4dHVyZU1hcHBlcios
IGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgZmxvYXQgYm9yZGVyV2lkdGgsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JikgT1ZFUlJJ
REU7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdSZXBhaW50Q291bnRlcihXZWJDb3JlOjpUZXh0dXJl
TWFwcGVyKiwgaW50IHJlcGFpbnRDb3VudCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
IE9WRVJSSURFOwotCi1wcml2YXRlOgotICAgIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlKCkKLSAg
ICAgICAgOiBtX3NjYWxlKDEuKQotICAgIHsgfQotICAgIHZvaWQgcGFpbnRUaWxlc1RvVGV4dHVy
ZU1hcHBlcihWZWN0b3I8V2ViQ29yZTo6VGV4dHVyZU1hcHBlclRpbGUqPiYsIFdlYkNvcmU6OlRl
eHR1cmVNYXBwZXIqLCBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0
LCBXZWJDb3JlOjpCaXRtYXBUZXh0dXJlKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0g
ICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXggYWRqdXN0ZWRUcmFuc2Zvcm1Gb3JSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KFdlYkNvcmU6OkZsb2F0UG9pbnQ6
Onplcm8oKSwgbV9zaXplKTsgfQotCi0gICAgdHlwZWRlZiBIYXNoTWFwPHVpbnQzMl90LCBDb29y
ZGluYXRlZEJhY2tpbmdTdG9yZVRpbGU+IENvb3JkaW5hdGVkQmFja2luZ1N0b3JlVGlsZU1hcDsK
LSAgICBDb29yZGluYXRlZEJhY2tpbmdTdG9yZVRpbGVNYXAgbV90aWxlczsKLSAgICBIYXNoU2V0
PHVpbnQzMl90PiBtX3RpbGVzVG9SZW1vdmU7Ci0gICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fc2l6
ZTsKLSAgICBmbG9hdCBtX3NjYWxlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0jZW5k
aWYKLQotI2VuZGlmIC8vIENvb3JkaW5hdGVkQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmNwcAppbmRleCAwY2MzNDI5
OTU5NmExMWQ1YzU5M2ZkMTgyNzhmNTBmNGI3YzJkNGNjLi45ODY0OTNjMzJmZjg0NjI4YTNlMGIw
ZWJiM2EwNTFiNzQxNTkzNzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHkuY3BwCkBAIC0yMiwxMyArMjIsMTMgQEAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJv
eHkuaCIKIAotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCiAjaW5jbHVkZSAiQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJMYXllclRyZWVSZW5k
ZXJlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvQ29vcmRpbmF0ZWRMYXllckluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
U3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZVVwZGF0ZUluZm8uaD4KIAogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5o
IgpAQCAtNDAsMTMgKzQwLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkoRHJh
d2luZ0FyZWFQcm94eSogZHJhd2luZ0FyZWFQcm94eSkKICAgICA6IG1fZHJhd2luZ0FyZWFQcm94
eShkcmF3aW5nQXJlYVByb3h5KQotICAgICwgbV9yZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJU
cmVlUmVuZGVyZXIodGhpcykpKQorICAgICwgbV9zY2VuZShhZG9wdFJlZihuZXcgQ29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKHRoaXMpKSkKIHsKIH0KIAogQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6On5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpCiB7Ci0gICAgbV9yZW5kZXJl
ci0+ZGV0YWNoKCk7CisgICAgbV9zY2VuZS0+ZGV0YWNoKCk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZVZpZXdwb3J0KCkKQEAgLTU2LDgxICs1Niw4MSBA
QCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojp1cGRhdGVWaWV3cG9ydCgpCiAK
IHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpc3BhdGNoVXBkYXRlKGNvbnN0
IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQogewotICAgIG1fcmVuZGVyZXItPmFwcGVuZFVw
ZGF0ZShmdW5jdGlvbik7CisgICAgbV9zY2VuZS0+YXBwZW5kVXBkYXRlKGZ1bmN0aW9uKTsKIH0K
IAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGlsZUZvckxheWVy
KENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBXZWJLaXQ6OlN1cmZhY2VVcGRhdGVJbmZvJiB1
cGRhdGVJbmZvKQordm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlVGls
ZUZvckxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IEludFJlY3QmIHRpbGVSZWN0LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5m
bykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRl
VGlsZSwgbV9yZW5kZXJlci5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlELCB1cGRhdGVJbmZvLnNjYWxl
RmFjdG9yKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1Nj
ZW5lOjpjcmVhdGVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIHVwZGF0ZUlu
Zm8uc2NhbGVGYWN0b3IpKTsKICAgICB1cGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwgdGlsZUlE
LCB0aWxlUmVjdCwgdXBkYXRlSW5mbyk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgV2ViS2l0OjpT
dXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbykKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OnVwZGF0ZVRpbGVGb3JMYXllcihDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwg
dWludDMyX3QgdGlsZUlELCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCwgY29uc3QgU3VyZmFjZVVw
ZGF0ZUluZm8mIHVwZGF0ZUluZm8pCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJU
cmVlUmVuZGVyZXI6OnVwZGF0ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCksIGxheWVySUQsIHRpbGVJ
RCwgTGF5ZXJUcmVlUmVuZGVyZXI6OlRpbGVVcGRhdGUodXBkYXRlSW5mby51cGRhdGVSZWN0LCB0
aWxlUmVjdCwgdXBkYXRlSW5mby5hdGxhc0lELCB1cGRhdGVJbmZvLnN1cmZhY2VPZmZzZXQpKSk7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjp1cGRh
dGVUaWxlLCBtX3NjZW5lLmdldCgpLCBsYXllcklELCB0aWxlSUQsIENvb3JkaW5hdGVkR3JhcGhp
Y3NTY2VuZTo6VGlsZVVwZGF0ZSh1cGRhdGVJbmZvLnVwZGF0ZVJlY3QsIHRpbGVSZWN0LCB1cGRh
dGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFjZU9mZnNldCkpKTsKIH0KIAogdm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cmVtb3ZlVGlsZUZvckxheWVyKENvb3JkaW5h
dGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRh
dGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbW92ZVRpbGUsIG1fcmVuZGVyZXIuZ2V0KCks
IGxheWVySUQsIHRpbGVJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6cmVtb3ZlVGlsZSwgbV9zY2VuZS5nZXQoKSwgbGF5ZXJJRCwgdGlsZUlE
KSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZVVwZGF0
ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFu
ZGxlJiBoYW5kbGUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVy
ZXI6OmNyZWF0ZVVwZGF0ZUF0bGFzLCBtX3JlbmRlcmVyLmdldCgpLCBhdGxhc0lELCBXZWJDb29y
ZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5kbGUpKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmlu
ZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjcmVhdGVVcGRhdGVBdGxhcywgbV9zY2VuZS5n
ZXQoKSwgYXRsYXNJRCwgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpyZW1vdmVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lEKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVVcGRhdGVBdGxhcywgbV9yZW5kZXJlci5nZXQoKSwgYXRsYXNJRCkp
OworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVt
b3ZlVXBkYXRlQXRsYXMsIG1fc2NlbmUuZ2V0KCksIGF0bGFzSUQpKTsKIH0KIAogdm9pZCBDb29y
ZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Y3JlYXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3Qg
VmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGlkcykKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShi
aW5kKCZMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXJzLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZHMpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6
OmNyZWF0ZUxheWVycywgbV9zY2VuZS5nZXQoKSwgaWRzKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OmRlbGV0ZUNvbXBvc2l0aW5nTGF5ZXJzKGNvbnN0IFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgm
TGF5ZXJUcmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVycywgbV9yZW5kZXJlci5nZXQoKSwgaWRzKSk7
CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpkZWxl
dGVMYXllcnMsIG1fc2NlbmUuZ2V0KCksIGlkcykpOwogfQogCiB2b2lkIENvb3JkaW5hdGVkTGF5
ZXJUcmVlSG9zdFByb3h5OjpzZXRSb290Q29tcG9zaXRpbmdMYXllcihDb29yZGluYXRlZExheWVy
SUQgaWQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNl
dFJvb3RMYXllcklELCBtX3JlbmRlcmVyLmdldCgpLCBpZCkpOworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0Um9vdExheWVySUQsIG1fc2NlbmUu
Z2V0KCksIGlkKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNl
dENvbXBvc2l0aW5nTGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IENvb3Jk
aW5hdGVkTGF5ZXJJbmZvJiBpbmZvKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVy
VHJlZVJlbmRlcmVyOjpzZXRMYXllclN0YXRlLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgaW5mbykp
OworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0
TGF5ZXJTdGF0ZSwgbV9zY2VuZS5nZXQoKSwgaWQsIGluZm8pKTsKIH0KIAogdm9pZCBDb29yZGlu
YXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKENvb3Jk
aW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGNoaWxk
cmVuKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRM
YXllckNoaWxkcmVuLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgY2hpbGRyZW4pKTsKKyAgICBkaXNw
YXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldExheWVyQ2hpbGRy
ZW4sIG1fc2NlbmUuZ2V0KCksIGlkLCBjaGlsZHJlbikpOwogfQogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c2V0Q29tcG9zaXRp
bmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiBmaWx0ZXJzKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRl
cmVyOjpzZXRMYXllckZpbHRlcnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7Cisg
ICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXll
ckZpbHRlcnMsIG1fc2NlbmUuZ2V0KCksIGlkLCBmaWx0ZXJzKSk7CiB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OnJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKQogewotICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3Jl
bmRlcmVyLmdldCgpLCBpZCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbSwgbV9zY2VuZS5nZXQoKSwg
aWQpKTsKIH0KLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUN1c3Rv
bUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBXZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFt
SW5mbyYgcHJvZ3JhbUluZm8pCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpj
cmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUluZm8mIHByb2dyYW1JbmZvKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtLCBtX3JlbmRlcmVyLmdldCgpLCBp
ZCwgcHJvZ3JhbUluZm8pKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmU6OmNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0sIG1fc2NlbmUuZ2V0KCksIGlk
LCBwcm9ncmFtSW5mbykpOwogfQogI2VuZGlmCiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHk6OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlbnRz
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY292ZXJlZFJlY3QpCit2b2lkIENvb3JkaW5h
dGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkaWRSZW5kZXJGcmFtZShjb25zdCBJbnRTaXplJiBjb250
ZW50c1NpemUsIGNvbnN0IEludFJlY3QmIGNvdmVyZWRSZWN0KQogewotICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpmbHVzaExheWVyQ2hhbmdlcywgbV9yZW5kZXJl
ci5nZXQoKSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZTo6Zmx1c2hMYXllckNoYW5nZXMsIG1fc2NlbmUuZ2V0KCkpKTsKICAgICB1cGRhdGVWaWV3
cG9ydCgpOwogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgIG1fZHJhd2luZ0FyZWFQ
cm94eS0+cGFnZSgpLT5kaWRSZW5kZXJGcmFtZShjb250ZW50c1NpemUsIGNvdmVyZWRSZWN0KTsK
QEAgLTE0Miw0MyArMTQyLDQzIEBAIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6
OmRpZFJlbmRlckZyYW1lKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRlCiAKIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1h
Z2VJRCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2Vu
ZTo6Y3JlYXRlSW1hZ2VCYWNraW5nLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7CiB9CiAKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnVwZGF0ZUltYWdlQmFja2luZyhDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lEIGltYWdlSUQsIGNvbnN0IFdlYkNvb3JkaW5hdGVkU3VyZmFj
ZTo6SGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVl
UmVuZGVyZXI6OnVwZGF0ZUltYWdlQmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCwg
V2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpjcmVhdGUoaGFuZGxlKSkpOworICAgIGRpc3BhdGNoVXBk
YXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6dXBkYXRlSW1hZ2VCYWNraW5nLCBt
X3NjZW5lLmdldCgpLCBpbWFnZUlELCBXZWJDb29yZGluYXRlZFN1cmZhY2U6OmNyZWF0ZShoYW5k
bGUpKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmNsZWFySW1h
Z2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQogewot
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpjbGVhckltYWdlQmFj
a2luZ0NvbnRlbnRzLCBtX3JlbmRlcmVyLmdldCgpLCBpbWFnZUlEKSk7CisgICAgZGlzcGF0Y2hV
cGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpjbGVhckltYWdlQmFja2luZ0Nv
bnRlbnRzLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRM
YXllclRyZWVIb3N0UHJveHk6OnJlbW92ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFj
a2luZ0lEIGltYWdlSUQpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OnJlbW92ZUltYWdlQmFja2luZywgbV9yZW5kZXJlci5nZXQoKSwgaW1hZ2VJRCkpOwor
ICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVtb3Zl
SW1hZ2VCYWNraW5nLCBtX3NjZW5lLmdldCgpLCBpbWFnZUlEKSk7CiB9CiAKIHZvaWQgQ29vcmRp
bmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldENvbnRlbnRzU2l6ZShjb25zdCBGbG9hdFNpemUm
IGNvbnRlbnRzU2l6ZSkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6c2V0Q29udGVudHNTaXplLCBtX3JlbmRlcmVyLmdldCgpLCBjb250ZW50c1NpemUpKTsK
KyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNldENv
bnRlbnRzU2l6ZSwgbV9zY2VuZS5nZXQoKSwgY29udGVudHNTaXplKSk7CiB9CiAKIHZvaWQgQ29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRl
ZExheWVySUQgaWQsIGNvbnN0IEdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQog
ewotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRMYXllckFu
aW1hdGlvbnMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7CisgICAgZGlzcGF0
Y2hVcGRhdGUoYmluZCgmQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRMYXllckFuaW1hdGlv
bnMsIG1fc2NlbmUuZ2V0KCksIGlkLCBhbmltYXRpb25zKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEFuaW1hdGlvbnNMb2NrZWQoYm9vbCBsb2NrZWQpCiB7
Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnNldEFuaW1hdGlv
bnNMb2NrZWQsIG1fcmVuZGVyZXIuZ2V0KCksIGxvY2tlZCkpOworICAgIGRpc3BhdGNoVXBkYXRl
KGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6c2V0QW5pbWF0aW9uc0xvY2tlZCwgbV9z
Y2VuZS5nZXQoKSwgbG9ja2VkKSk7CiB9CiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHk6OnNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQogewogICAgIC8vIEluZm9ybSB0aGUgcmVu
ZGVyZXIgdG8gYWRqdXN0IHZpZXdwb3J0LWZpeGVkIGxheWVycy4KLSAgICBkaXNwYXRjaFVwZGF0
ZShiaW5kKCZMYXllclRyZWVSZW5kZXJlcjo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9yZW5k
ZXJlci5nZXQoKSwgcmVjdCkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVk
R3JhcGhpY3NTY2VuZTo6c2V0VmlzaWJsZUNvbnRlbnRzUmVjdCwgbV9zY2VuZS5nZXQoKSwgcmVj
dCkpOwogCiAgICAgaWYgKHJlY3QgPT0gbV9sYXN0U2VudFZpc2libGVSZWN0ICYmIHRyYWplY3Rv
cnlWZWN0b3IgPT0gbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3IpCiAgICAgICAgIHJldHVybjsK
QEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5Ojpy
ZW5kZXJOZXh0RnJhbWUoKQogI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKIHZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnJlcXVlc3RBbmltYXRpb25GcmFtZSgp
CiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlcXVlc3RB
bmltYXRpb25GcmFtZSwgbV9yZW5kZXJlci5nZXQoKSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6cmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBtX3Nj
ZW5lLmdldCgpKSk7CiAgICAgdXBkYXRlVmlld3BvcnQoKTsKIH0KIApAQCAtMjA4LDMwICsyMDgs
MzAgQEAgdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6YW5pbWF0aW9uRnJhbWVS
ZWFkeSgpCiAKIHZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OmRpZENoYW5nZVNj
cm9sbFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQogewotICAgIGRpc3BhdGNo
VXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbiwg
bV9yZW5kZXJlci5nZXQoKSwgcG9zaXRpb24pKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZD
b29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRpZENoYW5nZVNjcm9sbFBvc2l0aW9uLCBtX3NjZW5l
LmdldCgpLCBwb3NpdGlvbikpOwogfQogCiAjaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCiB2b2lk
IENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCBjb25zdCBJbnRTaXplJiBjYW52YXNTaXplLCBjb25zdCBHcmFwaGljc1N1cmZh
Y2VUb2tlbiYgdG9rZW4pCiB7CiAgICAgR3JhcGhpY3NTdXJmYWNlOjpGbGFncyBzdXJmYWNlRmxh
Z3MgPSBHcmFwaGljc1N1cmZhY2U6OlN1cHBvcnRzVGV4dHVyZVRhcmdldCB8IEdyYXBoaWNzU3Vy
ZmFjZTo6U3VwcG9ydHNTaGFyaW5nOwotICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkxheWVyVHJl
ZVJlbmRlcmVyOjpjcmVhdGVDYW52YXMsIG1fcmVuZGVyZXIuZ2V0KCksIGlkLCBjYW52YXNTaXpl
LCBHcmFwaGljc1N1cmZhY2U6OmNyZWF0ZShjYW52YXNTaXplLCBzdXJmYWNlRmxhZ3MsIHRva2Vu
KSkpOworICAgIGRpc3BhdGNoVXBkYXRlKGJpbmQoJkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTo6
Y3JlYXRlQ2FudmFzLCBtX3NjZW5lLmdldCgpLCBpZCwgY2FudmFzU2l6ZSwgR3JhcGhpY3NTdXJm
YWNlOjpjcmVhdGUoY2FudmFzU2l6ZSwgc3VyZmFjZUZsYWdzLCB0b2tlbikpKTsKIH0KIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6c3luY0NhbnZhcyhDb29yZGluYXRlZExh
eWVySUQgaWQsIHVpbnQzMl90IGZyb250QnVmZmVyKQogewotICAgIGRpc3BhdGNoVXBkYXRlKGJp
bmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzeW5jQ2FudmFzLCBtX3JlbmRlcmVyLmdldCgpLCBpZCwg
ZnJvbnRCdWZmZXIpKTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU6OnN5bmNDYW52YXMsIG1fc2NlbmUuZ2V0KCksIGlkLCBmcm9udEJ1ZmZlcikpOwog
fQogCiB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpkZXN0cm95Q2FudmFzKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCkKIHsKLSAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZMYXllclRy
ZWVSZW5kZXJlcjo6ZGVzdHJveUNhbnZhcywgbV9yZW5kZXJlci5nZXQoKSwgaWQpKTsKKyAgICBk
aXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OmRlc3Ryb3lDYW52
YXMsIG1fc2NlbmUuZ2V0KCksIGlkKSk7CiB9CiAjZW5kaWYKIAogdm9pZCBDb29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eTo6c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklE
IGlkLCBpbnQgdmFsdWUpCiB7Ci0gICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldExheWVyUmVwYWludENvdW50LCBtX3JlbmRlcmVyLmdldCgpLCBpZCwgdmFsdWUp
KTsKKyAgICBkaXNwYXRjaFVwZGF0ZShiaW5kKCZDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU6OnNl
dExheWVyUmVwYWludENvdW50LCBtX3NjZW5lLmdldCgpLCBpZCwgdmFsdWUpKTsKIH0KIAogdm9p
ZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6cHVyZ2VCYWNraW5nU3RvcmVzKCkKQEAg
LTIzOSw5ICsyMzksOSBAQCB2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpwdXJn
ZUJhY2tpbmdTdG9yZXMoKQogICAgIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wcm9jZXNz
KCktPnNlbmQoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6UHVyZ2VCYWNraW5n
U3RvcmVzKCksIG1fZHJhd2luZ0FyZWFQcm94eS0+cGFnZSgpLT5wYWdlSUQoKSk7CiB9CiAKLXZv
aWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHk6OnNldEJhY2tncm91bmRDb2xvcihjb25z
dCBXZWJDb3JlOjpDb2xvciYgY29sb3IpCit2b2lkIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFBy
b3h5OjpzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGRpc3Bh
dGNoVXBkYXRlKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpzZXRCYWNrZ3JvdW5kQ29sb3IsIG1f
cmVuZGVyZXIuZ2V0KCksIGNvbG9yKSk7CisgICAgZGlzcGF0Y2hVcGRhdGUoYmluZCgmQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lOjpzZXRCYWNrZ3JvdW5kQ29sb3IsIG1fc2NlbmUuZ2V0KCksIGNv
bG9yKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29y
ZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3RQcm94eS5oCmluZGV4IGJkMGEzZWU0MDcwMmJkMjNmNzg2YTM5NTAxMmE4NjI2OWFiOWMx
MjkuLjI0YjM0NzcwYWMwODNjMzVhNTU0MDMwNGUwOTBhMDUyNThlZjU3YWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkuaApAQCAtMjQsMTIg
KzI0LDEwIEBACiAKICNpbmNsdWRlICJCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzQXJndW1lbnRDb2RlcnMuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
SW5mby5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHkuaCIKLSNpbmNsdWRlICJMYXllclRy
ZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRh
dGVJbmZvLmgiCiAjaW5jbHVkZSAiV2ViQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgpAQCAtNDIsNTggKzQwLDYw
IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
LW5hbWVzcGFjZSBXZWJLaXQgewotCituYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb29yZGlu
YXRlZExheWVySW5mbzsKLWNsYXNzIExheWVyVHJlZVJlbmRlcmVyOworY2xhc3MgU3VyZmFjZVVw
ZGF0ZUluZm87Cit9CiAKLWNsYXNzIENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5IDogcHVi
bGljIExheWVyVHJlZVJlbmRlcmVyQ2xpZW50IHsKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmVDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eShEcmF3
aW5nQXJlYVByb3h5Kik7Ci0gICAgfkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5KCk7Ci0g
ICAgdm9pZCBzZXRDb21wb3NpdGluZ0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXllcklELCBjb25z
dCBDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckNo
aWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJ
RD4mKTsKKyAgICB2aXJ0dWFsIH5Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpOworICAg
IHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICB2b2lkIHNldENv
bXBvc2l0aW5nTGF5ZXJDaGlsZHJlbihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQ+Jik7CiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQotICAgIHZvaWQgc2V0Q29tcG9zaXRpbmdMYXllckZpbHRlcnMoQ29vcmRpbmF0ZWRM
YXllcklELCBjb25zdCBXZWJDb3JlOjpGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgdm9pZCBzZXRD
b21wb3NpdGluZ0xheWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0
IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgogI2lmIEVOQUJMRShDU1NfU0hB
REVSUykKICAgICB2b2lkIGNyZWF0ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkLCBjb25zdCBX
ZWJDb3JlOjpDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYpOwogICAgIHZvaWQgcmVtb3ZlQ3VzdG9t
RmlsdGVyUHJvZ3JhbShpbnQgaWQpOwogI2VuZGlmCi0gICAgdm9pZCBjcmVhdGVDb21wb3NpdGlu
Z0xheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQgZGVs
ZXRlQ29tcG9zaXRpbmdMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsK
LSAgICB2b2lkIHNldFJvb3RDb21wb3NpdGluZ0xheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7Cisg
ICAgdm9pZCBjcmVhdGVDb21wb3NpdGluZ0xheWVycyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6Q29v
cmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZvaWQgZGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKKyAgICB2b2lkIHNldFJv
b3RDb21wb3NpdGluZ0xheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCk7CiAgICAgdm9p
ZCBzZXRDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJik7CiAgICAgdm9pZCBz
ZXRWaXNpYmxlQ29udGVudHNSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmIHRyYWplY3RvcnlWZWN0b3IpOwogICAgIHZvaWQgZGlkUmVuZGVy
RnJhbWUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiBjb3ZlcmVkUmVjdCk7Ci0gICAgdm9pZCBjcmVhdGVUaWxlRm9yTGF5ZXIoQ29v
cmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
LCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYpOwotICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVy
KENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mKTsKLSAgICB2b2lkIHJlbW92ZVRpbGVGb3JM
YXllcihDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CisgICAgdm9pZCBjcmVh
dGVUaWxlRm9yTGF5ZXIoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRl
SW5mbyYpOworICAgIHZvaWQgdXBkYXRlVGlsZUZvckxheWVyKFdlYkNvcmU6OkNvb3JkaW5hdGVk
TGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHJlbW92ZVRpbGVGb3JMYXll
cihXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCk7CiAgICAgdm9p
ZCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBjb25zdCBXZWJDb29yZGluYXRl
ZFN1cmZhY2U6OkhhbmRsZSYpOwogICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3Qg
YXRsYXNJRCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKLSAgICB2b2lk
IGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Ci0g
ICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7Cisg
ICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRCk7CisgICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCwgY29uc3QgV2ViQ29vcmRpbmF0ZWRTdXJmYWNlOjpIYW5kbGUmKTsKKyAg
ICB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmdJRCk7CisgICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRJbWFnZUJhY2tpbmdJRCk7CiAgICAgdm9pZCBkaWRSZWNlaXZlQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0UHJveHlNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNz
YWdlRGVjb2RlciYpOwogICAgIHZvaWQgZGlkQ2hhbmdlU2Nyb2xsUG9zaXRpb24oY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pOwogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQot
ICAgIHZvaWQgY3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7Ci0gICAgdm9p
ZCBzeW5jQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZmZXIpOwot
ICAgIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpOworICAgIHZvaWQgY3Jl
YXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzU3VyZmFjZVRva2VuJik7CisgICAgdm9pZCBz
eW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgZnJvbnRCdWZm
ZXIpOworICAgIHZvaWQgZGVzdHJveUNhbnZhcyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQp
OwogI2VuZGlmCi0gICAgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVy
SUQsIGludCB2YWx1ZSk7Ci0gICAgTGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVy
KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQotICAgIHZvaWQgc2V0TGF5ZXJB
bmltYXRpb25zKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckFuaW1hdGlvbnMmKTsKKyAgICB2b2lkIHNldExheWVyUmVwYWludENvdW50KFdlYkNvcmU6OkNv
b3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKKyAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2NlbmUuZ2V0KCk7IH0KKyAgICB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhXZWJDb3JlOjpDb29y
ZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7
CiAgICAgdm9pZCBzZXRBbmltYXRpb25zTG9ja2VkKGJvb2wpOwogI2lmIEVOQUJMRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRSkKICAgICB2b2lkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpOwogI2Vu
ZGlmCiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKTsK
IAotICAgIC8vIExheWVyVHJlZVJlbmRlcmVyQ2xpZW50IE1ldGhvZHMuCisgICAgLy8gQ29vcmRp
bmF0ZWRHcmFwaGljc1NjZW5lQ2xpZW50IE1ldGhvZHMuCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgT1ZF
UlJJREU7CiAjZW5kaWYKQEAgLTEwNSwxMyArMTA1LDEzIEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IGRpc3BhdGNoVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mKTsKIAogICAgIERyYXdpbmdB
cmVhUHJveHkqIG1fZHJhd2luZ0FyZWFQcm94eTsKLSAgICBSZWZQdHI8TGF5ZXJUcmVlUmVuZGVy
ZXI+IG1fcmVuZGVyZXI7CisgICAgUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZT4gbV9zY2VuZTsKICAgICBXZWJDb3JlOjpGbG9hdFJlY3QgbV9sYXN0U2VudFZpc2libGVS
ZWN0OwogICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgbV9sYXN0U2VudFRyYWplY3RvcnlWZWN0b3I7
CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAotI2VuZGlmCisjZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQogCiAjZW5kaWYgLy8gQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0UHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExh
eWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgppbmRleCBlM2U3OGIzMGIwMTkyNTUzYjA2YzY5
Mjg5MjhiMGE2YjMzZDZkNmFlLi4yMWRjMjYzNDUwM2NjZGU4NzkwNjJkNzkzMjNjNmJiYWJlNGY3
MmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVy
VHJlZUhvc3RQcm94eS5tZXNzYWdlcy5pbgpAQCAtMTksNyArMTksNyBAQAogCiAjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQogbWVzc2FnZXMgLT4gQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
UHJveHkgTGVnYWN5UmVjZWl2ZXIgewotICAgIFNldENvbXBvc2l0aW5nTGF5ZXJTdGF0ZSh1aW50
MzJfdCBpZCwgV2ViS2l0OjpDb29yZGluYXRlZExheWVySW5mbyBsYXllckluZm8pCisgICAgU2V0
Q29tcG9zaXRpbmdMYXllclN0YXRlKHVpbnQzMl90IGlkLCBXZWJDb3JlOjpDb29yZGluYXRlZExh
eWVySW5mbyBsYXllckluZm8pCiAgICAgU2V0Q29tcG9zaXRpbmdMYXllckNoaWxkcmVuKHVpbnQz
Ml90IGlkLCBWZWN0b3I8dWludDMyX3Q+IGNoaWxkcmVuKQogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKICAgICBTZXRDb21wb3NpdGluZ0xheWVyRmlsdGVycyh1aW50MzJfdCBpZCwgV2ViQ29yZTo6
RmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJzKQpAQCAtMzEsOCArMzEsOCBAQCBtZXNzYWdlcyAtPiBD
b29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgU2V0Um9v
dENvbXBvc2l0aW5nTGF5ZXIodWludDMyX3QgaWQpCiAgICAgQ3JlYXRlQ29tcG9zaXRpbmdMYXll
cnMoVmVjdG9yPHVpbnQzMl90PiBpZHMpCiAgICAgRGVsZXRlQ29tcG9zaXRpbmdMYXllcnMoVmVj
dG9yPHVpbnQzMl90PiBpZHMpCi0gICAgQ3JlYXRlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVy
SUQsIHVpbnQzMl90IHRpbGVJRCwgV2ViQ29yZTo6SW50UmVjdCB0aWxlUmVjdCwgV2ViS2l0OjpT
dXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQotICAgIFVwZGF0ZVRpbGVGb3JMYXllcih1aW50
MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNvcmU6OkludFJlY3QgdGlsZVJlY3Qs
IFdlYktpdDo6U3VyZmFjZVVwZGF0ZUluZm8gdXBkYXRlSW5mbykKKyAgICBDcmVhdGVUaWxlRm9y
TGF5ZXIodWludDMyX3QgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBXZWJDb3JlOjpJbnRSZWN0
IHRpbGVSZWN0LCBXZWJDb3JlOjpTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvKQorICAgIFVw
ZGF0ZVRpbGVGb3JMYXllcih1aW50MzJfdCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIFdlYkNv
cmU6OkludFJlY3QgdGlsZVJlY3QsIFdlYkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvIHVwZGF0ZUlu
Zm8pCiAgICAgUmVtb3ZlVGlsZUZvckxheWVyKHVpbnQzMl90IGxheWVySUQsIHVpbnQzMl90IHRp
bGVJRCkKICAgICBDcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lELCBXZWJLaXQ6Oldl
YkNvb3JkaW5hdGVkU3VyZmFjZTo6SGFuZGxlIGhhbmRsZSkKICAgICBSZW1vdmVVcGRhdGVBdGxh
cyh1aW50MzJfdCBhdGxhc0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTMxOGU0MmRlMTg1MThkMDkwOTdhNmU1Yjk0
ZWQ3ZTgzNTE4NTI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJl
ZVJlbmRlcmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5NyArMCwwIEBACi0vKgotICAgIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKLSAgICBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KLQotICAgIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAg
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNs
dWRlICJMYXllclRyZWVSZW5kZXJlci5oIgotCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRCYWNraW5n
U3RvcmUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyQmFja2luZ1N0b3Jl
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBl
ckxheWVyLmgiCi0jaW5jbHVkZSAiVXBkYXRlSW5mby5oIgotI2luY2x1ZGUgPE9wZW5HTFNoaW1z
Lmg+Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dy
YW0uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIgotI2luY2x1ZGUgIldl
YkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dy
YW0uaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmRpc3BhdGNoT25NYWluVGhyZWFkKGNv
bnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQotewotICAgIGlmIChpc01haW5UaHJlYWQo
KSkKLSAgICAgICAgZnVuY3Rpb24oKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoZnVuY3Rpb24pOwotfQotCi1zdGF0aWMgRmxvYXRQb2ludCBib3VuZGVkU2Nyb2xsUG9zaXRp
b24oY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgdmlz
aWJsZUNvbnRlbnRSZWN0LCBjb25zdCBGbG9hdFNpemUmIGNvbnRlbnRTaXplKQotewotICAgIGZs
b2F0IHNjcm9sbFBvc2l0aW9uWCA9IHN0ZDo6bWF4KHNjcm9sbFBvc2l0aW9uLngoKSwgMC4wZik7
Ci0gICAgc2Nyb2xsUG9zaXRpb25YID0gc3RkOjptaW4oc2Nyb2xsUG9zaXRpb25YLCBjb250ZW50
U2l6ZS53aWR0aCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LndpZHRoKCkpOwotCi0gICAgZmxvYXQg
c2Nyb2xsUG9zaXRpb25ZID0gc3RkOjptYXgoc2Nyb2xsUG9zaXRpb24ueSgpLCAwLjBmKTsKLSAg
ICBzY3JvbGxQb3NpdGlvblkgPSBzdGQ6Om1pbihzY3JvbGxQb3NpdGlvblksIGNvbnRlbnRTaXpl
LmhlaWdodCgpIC0gdmlzaWJsZUNvbnRlbnRSZWN0LmhlaWdodCgpKTsKLSAgICByZXR1cm4gRmxv
YXRQb2ludChzY3JvbGxQb3NpdGlvblgsIHNjcm9sbFBvc2l0aW9uWSk7Ci19Ci0KLXN0YXRpYyBi
b29sIGxheWVyU2hvdWxkSGF2ZUJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKiBsYXllcikKLXsK
LSAgICByZXR1cm4gbGF5ZXItPmRyYXdzQ29udGVudCgpICYmIGxheWVyLT5jb250ZW50c0FyZVZp
c2libGUoKSAmJiAhbGF5ZXItPnNpemUoKS5pc0VtcHR5KCk7Ci19Ci0KLUxheWVyVHJlZVJlbmRl
cmVyOjpMYXllclRyZWVSZW5kZXJlcihMYXllclRyZWVSZW5kZXJlckNsaWVudCogY2xpZW50KQot
ICAgIDogbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9pc0FjdGl2ZShmYWxzZSkKLSAgICAsIG1f
cm9vdExheWVySUQoSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkKLSAgICAsIG1fYW5pbWF0aW9u
c0xvY2tlZChmYWxzZSkKLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAg
LCBtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKGZhbHNlKQotI2VuZGlmCi0gICAgLCBtX2JhY2tn
cm91bmRDb2xvcihDb2xvcjo6d2hpdGUpCi0gICAgLCBtX3NldERyYXdzQmFja2dyb3VuZChmYWxz
ZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotfQotCi1MYXllclRyZWVSZW5kZXJl
cjo6fkxheWVyVHJlZVJlbmRlcmVyKCkKLXsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6
cGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRSZWN0JiBjbGlwUmVjdCwgVGV4dHVyZU1hcHBl
cjo6UGFpbnRGbGFncyBQYWludEZsYWdzKQotewotICAgIGlmICghbV90ZXh0dXJlTWFwcGVyKSB7
Ci0gICAgICAgIG1fdGV4dHVyZU1hcHBlciA9IFRleHR1cmVNYXBwZXI6OmNyZWF0ZShUZXh0dXJl
TWFwcGVyOjpPcGVuR0xNb2RlKTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdM
Kj4obV90ZXh0dXJlTWFwcGVyLmdldCgpKS0+c2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFz
aW5nKHRydWUpOwotICAgIH0KLQotICAgIEFTU0VSVChtX3RleHR1cmVNYXBwZXItPmFjY2VsZXJh
dGlvbk1vZGUoKSA9PSBUZXh0dXJlTWFwcGVyOjpPcGVuR0xNb2RlKTsKLSAgICBzeW5jUmVtb3Rl
Q29udGVudCgpOwotCi0gICAgYWRqdXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOwotICAgIEdy
YXBoaWNzTGF5ZXIqIGN1cnJlbnRSb290TGF5ZXIgPSByb290TGF5ZXIoKTsKLSAgICBpZiAoIWN1
cnJlbnRSb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRleHR1cmVNYXBwZXJMYXll
ciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJMYXllcihjdXJyZW50Um9vdExheWVyKTsKLQotICAg
IGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGxheWVyLT5zZXRUZXh0dXJlTWFw
cGVyKG1fdGV4dHVyZU1hcHBlci5nZXQoKSk7Ci0gICAgaWYgKCFtX2FuaW1hdGlvbnNMb2NrZWQp
Ci0gICAgICAgIGxheWVyLT5hcHBseUFuaW1hdGlvbnNSZWN1cnNpdmVseSgpOwotICAgIG1fdGV4
dHVyZU1hcHBlci0+YmVnaW5QYWludGluZyhQYWludEZsYWdzKTsKLSAgICBtX3RleHR1cmVNYXBw
ZXItPmJlZ2luQ2xpcChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjbGlwUmVjdCk7Ci0KLSAgICBp
ZiAobV9zZXREcmF3c0JhY2tncm91bmQpIHsKLSAgICAgICAgUkdCQTMyIHJnYmEgPSBtYWtlUkdC
QTMyRnJvbUZsb2F0cyhtX2JhY2tncm91bmRDb2xvci5yZWQoKSwKLSAgICAgICAgICAgIG1fYmFj
a2dyb3VuZENvbG9yLmdyZWVuKCksIG1fYmFja2dyb3VuZENvbG9yLmJsdWUoKSwKLSAgICAgICAg
ICAgIG1fYmFja2dyb3VuZENvbG9yLmFscGhhKCkgKiBvcGFjaXR5KTsKLSAgICAgICAgbV90ZXh0
dXJlTWFwcGVyLT5kcmF3U29saWRDb2xvcihjbGlwUmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgQ29sb3IocmdiYSkpOwotICAgIH0KLQotICAgIGlmIChjdXJyZW50Um9vdExheWVyLT5vcGFj
aXR5KCkgIT0gb3BhY2l0eSB8fCBjdXJyZW50Um9vdExheWVyLT50cmFuc2Zvcm0oKSAhPSBtYXRy
aXgpIHsKLSAgICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0T3BhY2l0eShvcGFjaXR5KTsKLSAg
ICAgICAgY3VycmVudFJvb3RMYXllci0+c2V0VHJhbnNmb3JtKG1hdHJpeCk7Ci0gICAgICAgIGN1
cnJlbnRSb290TGF5ZXItPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsK
LSAgICB9Ci0KLSAgICBsYXllci0+cGFpbnQoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZENs
aXAoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7Ci0KLSAgICBpZiAobGF5
ZXItPmRlc2NlbmRhbnRzT3JTZWxmSGF2ZVJ1bm5pbmdBbmltYXRpb25zKCkpCi0gICAgICAgIGRp
c3BhdGNoT25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9y
dCwgdGhpcykpOwotCi0jaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQotICAgIGlm
IChtX2FuaW1hdGlvbkZyYW1lUmVxdWVzdGVkKSB7Ci0gICAgICAgIG1fYW5pbWF0aW9uRnJhbWVS
ZXF1ZXN0ZWQgPSBmYWxzZTsKLSAgICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5
ZXJUcmVlUmVuZGVyZXI6OmFuaW1hdGlvbkZyYW1lUmVhZHksIHRoaXMpKTsKLSAgICB9Ci0jZW5k
aWYKLX0KLQotI2lmIEVOQUJMRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRSkKLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmFuaW1hdGlvbkZyYW1lUmVhZHkoKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICBtX2NsaWVudC0+YW5pbWF0aW9u
RnJhbWVSZWFkeSgpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZXF1ZXN0QW5pbWF0
aW9uRnJhbWUoKQotewotICAgIG1fYW5pbWF0aW9uRnJhbWVSZXF1ZXN0ZWQgPSB0cnVlOwotfQot
I2VuZGlmCi0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnBhaW50VG9HcmFwaGljc0NvbnRleHQo
QmFja2luZ1N0b3JlOjpQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCBwYWludGVyKQotewotICAgIGlm
ICghbV90ZXh0dXJlTWFwcGVyKQotICAgICAgICBtX3RleHR1cmVNYXBwZXIgPSBUZXh0dXJlTWFw
cGVyOjpjcmVhdGUoKTsKLSAgICBBU1NFUlQobV90ZXh0dXJlTWFwcGVyLT5hY2NlbGVyYXRpb25N
b2RlKCkgPT0gVGV4dHVyZU1hcHBlcjo6U29mdHdhcmVNb2RlKTsKLSAgICBzeW5jUmVtb3RlQ29u
dGVudCgpOwotICAgIFRleHR1cmVNYXBwZXJMYXllciogbGF5ZXIgPSB0b1RleHR1cmVNYXBwZXJM
YXllcihyb290TGF5ZXIoKSk7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KHBhaW50ZXIpOwotICAgIG1fdGV4
dHVyZU1hcHBlci0+c2V0R3JhcGhpY3NDb250ZXh0KCZncmFwaGljc0NvbnRleHQpOwotICAgIG1f
dGV4dHVyZU1hcHBlci0+YmVnaW5QYWludGluZygpOwotCi0gICAgaWYgKG1fc2V0RHJhd3NCYWNr
Z3JvdW5kKQotICAgICAgICBtX3RleHR1cmVNYXBwZXItPmRyYXdTb2xpZENvbG9yKGdyYXBoaWNz
Q29udGV4dC5jbGlwQm91bmRzKCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIG1fYmFja2dyb3Vu
ZENvbG9yKTsKLQotICAgIGxheWVyLT5wYWludCgpOwotICAgIG1fdGV4dHVyZU1hcHBlci0+ZW5k
UGFpbnRpbmcoKTsKLSAgICBtX3RleHR1cmVNYXBwZXItPnNldEdyYXBoaWNzQ29udGV4dCgwKTsK
LX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0Q29udGVudHNTaXplKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgY29udGVudHNTaXplKQotewotICAgIG1fY29udGVudHNTaXplID0gY29u
dGVudHNTaXplOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRWaXNpYmxlQ29udGVu
dHNSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBtX3Zpc2libGVDb250ZW50c1Jl
Y3QgPSByZWN0OwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjp1cGRhdGVWaWV3cG9ydCgp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9jbGllbnQpCi0gICAg
ICAgIG1fY2xpZW50LT51cGRhdGVWaWV3cG9ydCgpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRl
cmVyOjphZGp1c3RQb3NpdGlvbkZvckZpeGVkTGF5ZXJzKCkKLXsKLSAgICBpZiAobV9maXhlZExh
eWVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZpeGVkIGxheWVyIHBv
c2l0aW9ucyBhcmUgdXBkYXRlZCBieSB0aGUgd2ViIHByb2Nlc3Mgd2hlbiB3ZSB1cGRhdGUgdGhl
IHZpc2libGUgY29udGVudHMgcmVjdCAvIHNjcm9sbCBwb3NpdGlvbi4KLSAgICAvLyBJZiB3ZSB3
YW50IHRob3NlIGxheWVycyB0byBmb2xsb3cgYWNjdXJhdGVseSB0aGUgdmlld3BvcnQgd2hlbiB3
ZSBtb3ZlIGJldHdlZW4gdGhlIHdlYiBwcm9jZXNzIHVwZGF0ZXMsIHdlIGhhdmUgdG8gb2Zmc2V0
Ci0gICAgLy8gdGhlbSBieSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBh
bmQgdGhlIHBvc2l0aW9uIG9mIHRoZSB2aWV3cG9ydCB1c2VkIGZvciB0aGUgbGFzdCBsYXlvdXQu
Ci0gICAgRmxvYXRQb2ludCBzY3JvbGxQb3NpdGlvbiA9IGJvdW5kZWRTY3JvbGxQb3NpdGlvbiht
X3Zpc2libGVDb250ZW50c1JlY3QubG9jYXRpb24oKSwgbV92aXNpYmxlQ29udGVudHNSZWN0LCBt
X2NvbnRlbnRzU2l6ZSk7Ci0gICAgRmxvYXRQb2ludCByZW5kZXJlZFNjcm9sbFBvc2l0aW9uID0g
Ym91bmRlZFNjcm9sbFBvc2l0aW9uKG1fcmVuZGVyZWRDb250ZW50c1Njcm9sbFBvc2l0aW9uLCBt
X3Zpc2libGVDb250ZW50c1JlY3QsIG1fY29udGVudHNTaXplKTsKLSAgICBGbG9hdFNpemUgZGVs
dGEgPSBzY3JvbGxQb3NpdGlvbiAtIHJlbmRlcmVkU2Nyb2xsUG9zaXRpb247Ci0KLSAgICBMYXll
clJhd1B0ck1hcDo6aXRlcmF0b3IgZW5kID0gbV9maXhlZExheWVycy5lbmQoKTsKLSAgICBmb3Ig
KExheWVyUmF3UHRyTWFwOjppdGVyYXRvciBpdCA9IG1fZml4ZWRMYXllcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQotICAgICAgICB0b1RleHR1cmVNYXBwZXJMYXllcihpdC0+dmFsdWUpLT5z
ZXRTY3JvbGxQb3NpdGlvbkRlbHRhSWZOZWVkZWQoZGVsdGEpOwotfQotCi12b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbikKLXsKLSAgICBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb24gPSBw
b3NpdGlvbjsKLX0KLQotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6Y3JlYXRlQ2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYsIFBhc3NSZWZQdHI8R3JhcGhpY3NTdXJmYWNlPiBzdXJmYWNlKQotewotICAg
IEFTU0VSVChtX3RleHR1cmVNYXBwZXIpOwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5
ZXJCeUlEKGlkKTsKLSAgICBBU1NFUlQoIW1fc3VyZmFjZUJhY2tpbmdTdG9yZXMuY29udGFpbnMo
aWQpKTsKLQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJhY2tpbmdTdG9yZT4gY2Fu
dmFzQmFja2luZ1N0b3JlKFRleHR1cmVNYXBwZXJTdXJmYWNlQmFja2luZ1N0b3JlOjpjcmVhdGUo
KSk7Ci0gICAgbV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5zZXQoaWQsIGNhbnZhc0JhY2tpbmdTdG9y
ZSk7Ci0KLSAgICBjYW52YXNCYWNraW5nU3RvcmUtPnNldEdyYXBoaWNzU3VyZmFjZShzdXJmYWNl
KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb01lZGlhKGNhbnZhc0JhY2tpbmdTdG9yZS5nZXQo
KSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnN5bmNDYW52YXMoQ29vcmRpbmF0ZWRM
YXllcklEIGlkLCB1aW50MzJfdCBmcm9udEJ1ZmZlcikKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJl
TWFwcGVyKTsKLSAgICBBU1NFUlQobV9zdXJmYWNlQmFja2luZ1N0b3Jlcy5jb250YWlucyhpZCkp
OwotCi0gICAgU3VyZmFjZUJhY2tpbmdTdG9yZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZhY2VC
YWNraW5nU3RvcmVzLmZpbmQoaWQpOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU3VyZmFjZUJh
Y2tpbmdTdG9yZT4gY2FudmFzQmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwotCi0gICAgY2FudmFz
QmFja2luZ1N0b3JlLT5zd2FwQnVmZmVyc0lmTmVlZGVkKGZyb250QnVmZmVyKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6ZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQgaWQp
Ci17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZU1hcHBlcik7Ci0gICAgR3JhcGhpY3NMYXllciogbGF5
ZXIgPSBsYXllckJ5SUQoaWQpOwotICAgIEFTU0VSVChtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNv
bnRhaW5zKGlkKSk7Ci0KLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLnJlbW92ZShpZCk7Ci0g
ICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRpYSgwKTsKLX0KLSNlbmRpZgotCi12b2lkIExheWVy
VHJlZVJlbmRlcmVyOjpzZXRMYXllclJlcGFpbnRDb3VudChDb29yZGluYXRlZExheWVySUQgaWQs
IGludCB2YWx1ZSkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7
Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihsYXllciktPnNldFJlcGFpbnRDb3Vu
dCh2YWx1ZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyQ2hpbGRyZW4o
Q29vcmRpbmF0ZWRMYXllcklEIGlkLCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYg
Y2hpbGRJRHMpCi17Ci0gICAgR3JhcGhpY3NMYXllciogbGF5ZXIgPSBsYXllckJ5SUQoaWQpOwot
ICAgIFZlY3RvcjxHcmFwaGljc0xheWVyKj4gY2hpbGRyZW47Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkSURzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENvb3JkaW5hdGVkTGF5
ZXJJRCBjaGlsZElEID0gY2hpbGRJRHNbaV07Ci0gICAgICAgIEdyYXBoaWNzTGF5ZXIqIGNoaWxk
ID0gbGF5ZXJCeUlEKGNoaWxkSUQpOwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwot
ICAgIH0KLSAgICBsYXllci0+c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotfQotCi0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6c2V0TGF5ZXJGaWx0ZXJzKENv
b3JkaW5hdGVkTGF5ZXJJRCBpZCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsK
LSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChpZCk7Ci0KLSNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCi0gICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoZmlsdGVy
cyk7Ci0jZW5kaWYKLSAgICBsYXllci0+c2V0RmlsdGVycyhmaWx0ZXJzKTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6aW5qZWN0
Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cykgY29uc3QKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24gPSBmaWx0ZXJzLm9wZXJh
dGlvbnMoKS5hdChpKS5nZXQoKTsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9u
VHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgV2ViQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXN0b21PcGVyYXRpb24gPSBz
dGF0aWNfY2FzdDxXZWJDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOwotICAgICAg
ICBBU1NFUlQoIWN1c3RvbU9wZXJhdGlvbi0+cHJvZ3JhbSgpKTsKLSAgICAgICAgQ3VzdG9tRmls
dGVyUHJvZ3JhbU1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fY3VzdG9tRmlsdGVyUHJvZ3Jh
bXMuZmluZChjdXN0b21PcGVyYXRpb24tPnByb2dyYW1JRCgpKTsKLSAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5lbmQoKSk7Ci0gICAgICAgIGN1c3RvbU9wZXJh
dGlvbi0+c2V0UHJvZ3JhbShpdGVyLT52YWx1ZS5nZXQoKSk7Ci0gICAgfQotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVDdXN0b21GaWx0ZXJQcm9ncmFtKGludCBpZCwgY29uc3Qg
V2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvKQotewotICAgIEFT
U0VSVCghbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5jb250YWlucyhpZCkpOwotICAgIG1fY3VzdG9t
RmlsdGVyUHJvZ3JhbXMuc2V0KGlkLCBXZWJDdXN0b21GaWx0ZXJQcm9ncmFtOjpjcmVhdGUocHJv
Z3JhbUluZm8udmVydGV4U2hhZGVyU3RyaW5nKCksIHByb2dyYW1JbmZvLmZyYWdtZW50U2hhZGVy
U3RyaW5nKCksIHByb2dyYW1JbmZvLnByb2dyYW1UeXBlKCksIHByb2dyYW1JbmZvLm1peFNldHRp
bmdzKCksIHByb2dyYW1JbmZvLm1lc2hUeXBlKCkpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6cmVtb3ZlQ3VzdG9tRmlsdGVyUHJvZ3JhbShpbnQgaWQpCi17Ci0gICAgQ3VzdG9tRmls
dGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXRlciA9IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXMuZmlu
ZChpZCk7Ci0gICAgQVNTRVJUKGl0ZXIgIT0gbV9jdXN0b21GaWx0ZXJQcm9ncmFtcy5lbmQoKSk7
Ci0gICAgaWYgKG1fdGV4dHVyZU1hcHBlcikKLSAgICAgICAgbV90ZXh0dXJlTWFwcGVyLT5yZW1v
dmVDYWNoZWRDdXN0b21GaWx0ZXJQcm9ncmFtKGl0ZXItPnZhbHVlLmdldCgpKTsKLSAgICBtX2N1
c3RvbUZpbHRlclByb2dyYW1zLnJlbW92ZShpdGVyKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoQ1NT
X1NIQURFUlMpCi0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldExheWVyU3RhdGUoQ29vcmRp
bmF0ZWRMYXllcklEIGlkLCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYgbGF5ZXJJbmZvKQot
ewotICAgIEFTU0VSVChtX3Jvb3RMYXllcklEICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQp
OwotICAgIEdyYXBoaWNzTGF5ZXIqIGxheWVyID0gbGF5ZXJCeUlEKGlkKTsKLQotICAgIGxheWVy
LT5zZXRSZXBsaWNhdGVkQnlMYXllcihnZXRMYXllckJ5SURJZkV4aXN0cyhsYXllckluZm8ucmVw
bGljYSkpOwotICAgIGxheWVyLT5zZXRNYXNrTGF5ZXIoZ2V0TGF5ZXJCeUlESWZFeGlzdHMobGF5
ZXJJbmZvLm1hc2spKTsKLQotICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChsYXllckluZm8uYW5j
aG9yUG9pbnQpOwotICAgIGxheWVyLT5zZXRQb3NpdGlvbihsYXllckluZm8ucG9zKTsKLSAgICBs
YXllci0+c2V0U2l6ZShsYXllckluZm8uc2l6ZSk7Ci0KLSAgICBsYXllci0+c2V0VHJhbnNmb3Jt
KGxheWVySW5mby50cmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRDaGlsZHJlblRyYW5zZm9ybShs
YXllckluZm8uY2hpbGRyZW5UcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXRCYWNrZmFjZVZpc2li
aWxpdHkobGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRz
T3BhcXVlKGxheWVySW5mby5jb250ZW50c09wYXF1ZSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRz
UmVjdChsYXllckluZm8uY29udGVudHNSZWN0KTsKLSAgICBsYXllci0+c2V0Q29udGVudHNUb1Nv
bGlkQ29sb3IobGF5ZXJJbmZvLnNvbGlkQ29sb3IpOwotICAgIGxheWVyLT5zZXREcmF3c0NvbnRl
bnQobGF5ZXJJbmZvLmRyYXdzQ29udGVudCk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVmlzaWJs
ZShsYXllckluZm8uY29udGVudHNWaXNpYmxlKTsKLSAgICB0b0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyKGxheWVyKS0+c2V0Rml4ZWRUb1ZpZXdwb3J0KGxheWVySW5mby5maXhlZFRvVmlld3Bv
cnQpOwotICAgIGxheWVyLT5zZXRTaG93RGVidWdCb3JkZXIobGF5ZXJJbmZvLnNob3dEZWJ1Z0Jv
cmRlcnMpOwotICAgIGxheWVyLT5zZXREZWJ1Z0JvcmRlcihsYXllckluZm8uZGVidWdCb3JkZXJD
b2xvciwgbGF5ZXJJbmZvLmRlYnVnQm9yZGVyV2lkdGgpOwotICAgIGxheWVyLT5zZXRTaG93UmVw
YWludENvdW50ZXIobGF5ZXJJbmZvLnNob3dSZXBhaW50Q291bnRlcik7Ci0KLSAgICBpZiAobGF5
ZXJJbmZvLmZpeGVkVG9WaWV3cG9ydCkKLSAgICAgICAgbV9maXhlZExheWVycy5hZGQoaWQsIGxh
eWVyKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGlkKTsKLQotICAg
IGFzc2lnbkltYWdlQmFja2luZ1RvTGF5ZXIobGF5ZXIsIGxheWVySW5mby5pbWFnZUlEKTsKLSAg
ICBwcmVwYXJlQ29udGVudEJhY2tpbmdTdG9yZShsYXllcik7Ci0KLSAgICAvLyBOZXZlciBtYWtl
IHRoZSByb290IGxheWVyIGNsaXAuCi0gICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMobGF5ZXJJ
bmZvLmlzUm9vdExheWVyID8gZmFsc2UgOiBsYXllckluZm8ubWFza3NUb0JvdW5kcyk7Ci0gICAg
bGF5ZXItPnNldE9wYWNpdHkobGF5ZXJJbmZvLm9wYWNpdHkpOwotICAgIGxheWVyLT5zZXRQcmVz
ZXJ2ZXMzRChsYXllckluZm8ucHJlc2VydmVzM0QpOwotfQotCi1HcmFwaGljc0xheWVyKiBMYXll
clRyZWVSZW5kZXJlcjo6Z2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEIGlk
KQotewotICAgIHJldHVybiAoaWQgIT0gSW52YWxpZENvb3JkaW5hdGVkTGF5ZXJJRCkgPyBsYXll
ckJ5SUQoaWQpIDogMDsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRlTGF5ZXJz
KGNvbnN0IFZlY3RvcjxDb29yZGluYXRlZExheWVySUQ+JiBpZHMpCi17Ci0gICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IGlkcy5zaXplKCk7ICsraW5kZXgpCi0gICAgICAgIGNyZWF0
ZUxheWVyKGlkc1tpbmRleF0pOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpjcmVhdGVM
YXllcihDb29yZGluYXRlZExheWVySUQgaWQpCi17Ci0gICAgT3duUHRyPFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI+IG5ld0xheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAq
LywgdGhpcyk7Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihuZXdMYXllci5nZXQo
KSktPnNldEhhc093bkJhY2tpbmdTdG9yZShmYWxzZSk7Ci0gICAgbV9sYXllcnMuYWRkKGlkLCBu
ZXdMYXllci5yZWxlYXNlKCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpkZWxldGVM
YXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mIGxheWVySURzKQotewotICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBsYXllcklEcy5zaXplKCk7ICsraW5kZXgp
Ci0gICAgICAgIGRlbGV0ZUxheWVyKGxheWVySURzW2luZGV4XSk7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OmRlbGV0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQotewot
ICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBsYXllciA9IG1fbGF5ZXJzLnRha2UobGF5ZXJJRCk7
Ci0gICAgQVNTRVJUKGxheWVyKTsKLQotICAgIG1fYmFja2luZ1N0b3Jlcy5yZW1vdmUobGF5ZXIu
Z2V0KCkpOwotICAgIG1fZml4ZWRMYXllcnMucmVtb3ZlKGxheWVySUQpOwotI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotICAgIG1fc3VyZmFjZUJhY2tpbmdTdG9yZXMucmVtb3ZlKGxheWVySUQp
OwotI2VuZGlmCi19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OnNldFJvb3RMYXllcklEKENv
b3JkaW5hdGVkTGF5ZXJJRCBsYXllcklEKQotewotICAgIEFTU0VSVChsYXllcklEICE9IEludmFs
aWRDb29yZGluYXRlZExheWVySUQpOwotICAgIEFTU0VSVChtX3Jvb3RMYXllcklEID09IEludmFs
aWRDb29yZGluYXRlZExheWVySUQpOwotCi0gICAgbV9yb290TGF5ZXJJRCA9IGxheWVySUQ7Ci0K
LSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBBU1NF
UlQobV9yb290TGF5ZXItPmNoaWxkcmVuKCkuaXNFbXB0eSgpKTsKLSAgICBtX3Jvb3RMYXllci0+
YWRkQ2hpbGQobGF5ZXIpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpwcmVwYXJlQ29u
dGVudEJhY2tpbmdTdG9yZShHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIGlm
ICghbGF5ZXJTaG91bGRIYXZlQmFja2luZ1N0b3JlKGdyYXBoaWNzTGF5ZXIpKSB7Ci0gICAgICAg
IHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKGdyYXBoaWNzTGF5ZXIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgY3JlYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoZ3JhcGhpY3NMYXll
cik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZUlmTmVl
ZGVkKEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIpCi17Ci0gICAgaWYgKG1fYmFja2luZ1N0
b3Jlcy5jb250YWlucyhncmFwaGljc0xheWVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVm
UHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUoQ29vcmRpbmF0ZWRCYWNr
aW5nU3RvcmU6OmNyZWF0ZSgpKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUoZ3JhcGhpY3NM
YXllci0+c2l6ZSgpKTsKLSAgICBtX2JhY2tpbmdTdG9yZXMuYWRkKGdyYXBoaWNzTGF5ZXIsIGJh
Y2tpbmdTdG9yZSk7Ci0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlcihncmFwaGljc0xh
eWVyKS0+c2V0QmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OnJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKEdyYXBoaWNzTGF5ZXIqIGdyYXBo
aWNzTGF5ZXIpCi17Ci0gICAgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiBiYWNraW5n
U3RvcmUgPSBtX2JhY2tpbmdTdG9yZXMudGFrZShncmFwaGljc0xheWVyKTsKLSAgICBpZiAoIWJh
Y2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdG9HcmFwaGljc0xheWVyVGV4dHVy
ZU1hcHBlcihncmFwaGljc0xheWVyKS0+c2V0QmFja2luZ1N0b3JlKDApOwotfQotCi12b2lkIExh
eWVyVHJlZVJlbmRlcmVyOjpyZXNldEJhY2tpbmdTdG9yZVNpemVUb0xheWVyU2l6ZShHcmFwaGlj
c0xheWVyKiBncmFwaGljc0xheWVyKQotewotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdT
dG9yZT4gYmFja2luZ1N0b3JlID0gbV9iYWNraW5nU3RvcmVzLmdldChncmFwaGljc0xheWVyKTsK
LSAgICBBU1NFUlQoYmFja2luZ1N0b3JlKTsKLSAgICBiYWNraW5nU3RvcmUtPnNldFNpemUoZ3Jh
cGhpY3NMYXllci0+c2l6ZSgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y3JlYXRl
VGlsZShDb29yZGluYXRlZExheWVySUQgbGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBmbG9hdCBz
Y2FsZSkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsK
LSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFj
a2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwotICAgIEFTU0VSVChiYWNraW5nU3RvcmUpOwotICAgIGJh
Y2tpbmdTdG9yZS0+Y3JlYXRlVGlsZSh0aWxlSUQsIHNjYWxlKTsKLSAgICByZXNldEJhY2tpbmdT
dG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6
OnJlbW92ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCkK
LXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXllciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0
b3Jlcy5nZXQobGF5ZXIpOwotICAgIGlmICghYmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBiYWNraW5nU3RvcmUtPnJlbW92ZVRpbGUodGlsZUlEKTsKLSAgICByZXNldEJhY2tp
bmdTdG9yZVNpemVUb0xheWVyU2l6ZShsYXllcik7Ci0gICAgbV9iYWNraW5nU3RvcmVzV2l0aFBl
bmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRl
cmVyOjp1cGRhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFRpbGVVcGRhdGUmIHVwZGF0ZSkKLXsKLSAgICBHcmFwaGljc0xheWVyKiBsYXll
ciA9IGxheWVyQnlJRChsYXllcklEKTsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG1fYmFja2luZ1N0b3Jlcy5nZXQobGF5ZXIpOwotICAgIEFTU0VS
VChiYWNraW5nU3RvcmUpOwotCi0gICAgU3VyZmFjZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3N1cmZh
Y2VzLmZpbmQodXBkYXRlLmF0bGFzSUQpOwotICAgIEFTU0VSVChpdCAhPSBtX3N1cmZhY2VzLmVu
ZCgpKTsKLQotICAgIGJhY2tpbmdTdG9yZS0+dXBkYXRlVGlsZSh0aWxlSUQsIHVwZGF0ZS5zb3Vy
Y2VSZWN0LCB1cGRhdGUudGlsZVJlY3QsIGl0LT52YWx1ZSwgdXBkYXRlLm9mZnNldCk7Ci0gICAg
cmVzZXRCYWNraW5nU3RvcmVTaXplVG9MYXllclNpemUobGF5ZXIpOwotICAgIG1fYmFja2luZ1N0
b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5hZGQoYmFja2luZ1N0b3JlKTsKLX0KLQotdm9pZCBMYXll
clRyZWVSZW5kZXJlcjo6Y3JlYXRlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCwgUGFzc1Jl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCi17Ci0gICAgQVNTRVJUKCFtX3N1cmZh
Y2VzLmNvbnRhaW5zKGF0bGFzSUQpKTsKLSAgICBtX3N1cmZhY2VzLmFkZChhdGxhc0lELCBzdXJm
YWNlKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVtb3ZlVXBkYXRlQXRsYXModWlu
dDMyX3QgYXRsYXNJRCkKLXsKLSAgICBBU1NFUlQobV9zdXJmYWNlcy5jb250YWlucyhhdGxhc0lE
KSk7Ci0gICAgbV9zdXJmYWNlcy5yZW1vdmUoYXRsYXNJRCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVl
UmVuZGVyZXI6OmNyZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEIGlt
YWdlSUQpCi17Ci0gICAgQVNTRVJUKCFtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkp
OwotICAgIFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlKENvb3Jk
aW5hdGVkQmFja2luZ1N0b3JlOjpjcmVhdGUoKSk7Ci0gICAgbV9pbWFnZUJhY2tpbmdzLmFkZChp
bWFnZUlELCBiYWNraW5nU3RvcmUucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5k
ZXJlcjo6dXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaW1hZ2VJ
RCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IHN1cmZhY2UpCi17Ci0gICAgQVNTRVJU
KG1faW1hZ2VCYWNraW5ncy5jb250YWlucyhpbWFnZUlEKSk7Ci0gICAgSW1hZ2VCYWNraW5nTWFw
OjppdGVyYXRvciBpdCA9IG1faW1hZ2VCYWNraW5ncy5maW5kKGltYWdlSUQpOwotICAgIFJlZlB0
cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gaXQtPnZhbHVlOwotCi0g
ICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgaXMgcmVhbGl6ZWQgdG8gQ29vcmRpbmF0ZWRC
YWNraW5nU3RvcmUgd2l0aCBvbmx5IG9uZSB0aWxlIGluIFVJIFByb2Nlc3MuCi0gICAgYmFja2lu
Z1N0b3JlLT5jcmVhdGVUaWxlKDEgLyogaWQgKi8sIDEgLyogc2NhbGUgKi8pOwotICAgIEludFJl
Y3QgcmVjdChJbnRQb2ludDo6emVybygpLCBzdXJmYWNlLT5zaXplKCkpOwotICAgIC8vIFNlZSBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoKQot
ICAgIEFTU0VSVCgyMDAwID49IHN0ZDo6bWF4KHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkp
OwotICAgIGJhY2tpbmdTdG9yZS0+c2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgYmFja2luZ1N0
b3JlLT51cGRhdGVUaWxlKDEgLyogaWQgKi8sIHJlY3QsIHJlY3QsIHN1cmZhY2UsIHJlY3QubG9j
YXRpb24oKSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1ZmZlcnMuYWRkKGJh
Y2tpbmdTdG9yZSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVuZGVyZXI6OmNsZWFySW1hZ2VCYWNr
aW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBpbWFnZUlEKQotewotICAgIEFT
U0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkpOwotICAgIEltYWdlQmFja2lu
Z01hcDo6aXRlcmF0b3IgaXQgPSBtX2ltYWdlQmFja2luZ3MuZmluZChpbWFnZUlEKTsKLSAgICBS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IGl0LT52YWx1ZTsK
LSAgICBiYWNraW5nU3RvcmUtPnJlbW92ZUFsbFRpbGVzKCk7Ci0gICAgbV9iYWNraW5nU3RvcmVz
V2l0aFBlbmRpbmdCdWZmZXJzLmFkZChiYWNraW5nU3RvcmUpOwotfQotCi12b2lkIExheWVyVHJl
ZVJlbmRlcmVyOjpyZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCBp
bWFnZUlEKQotewotICAgIEFTU0VSVChtX2ltYWdlQmFja2luZ3MuY29udGFpbnMoaW1hZ2VJRCkp
OwotCi0gICAgLy8gV2UgZG9uJ3Qgd2FudCBUZXh0dXJlTWFwcGVyTGF5ZXIgcmVmZXJzIGEgZGFu
Z2xpbmcgcG9pbnRlci4KLSAgICBtX3JlbGVhc2VkSW1hZ2VCYWNraW5ncy5hcHBlbmQobV9pbWFn
ZUJhY2tpbmdzLnRha2UoaW1hZ2VJRCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjph
c3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyLCBDb29yZGluYXRl
ZEltYWdlQmFja2luZ0lEIGltYWdlSUQpCi17Ci0gICAgaWYgKGltYWdlSUQgPT0gSW52YWxpZENv
b3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIHsKLSAgICAgICAgbGF5ZXItPnNldENvbnRlbnRzVG9N
ZWRpYSgwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBJbWFnZUJhY2tpbmdNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9pbWFnZUJhY2tpbmdzLmZpbmQoaW1hZ2VJRCk7Ci0gICAgQVNTRVJUKGl0
ICE9IG1faW1hZ2VCYWNraW5ncy5lbmQoKSk7Ci0gICAgbGF5ZXItPnNldENvbnRlbnRzVG9NZWRp
YShpdC0+dmFsdWUuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpyZW1vdmVS
ZWxlYXNlZEltYWdlQmFja2luZ3NJZk5lZWRlZCgpCi17Ci0gICAgbV9yZWxlYXNlZEltYWdlQmFj
a2luZ3MuY2xlYXIoKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6Y29tbWl0UGVuZGlu
Z0JhY2tpbmdTdG9yZU9wZXJhdGlvbnMoKQotewotICAgIEhhc2hTZXQ8UmVmUHRyPENvb3JkaW5h
dGVkQmFja2luZ1N0b3JlPiA+OjppdGVyYXRvciBlbmQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVu
ZGluZ0J1ZmZlcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlZlB0cjxDb29yZGluYXRlZEJh
Y2tpbmdTdG9yZT4gPjo6aXRlcmF0b3IgaXQgPSBtX2JhY2tpbmdTdG9yZXNXaXRoUGVuZGluZ0J1
ZmZlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+Y29tbWl0VGls
ZU9wZXJhdGlvbnMobV90ZXh0dXJlTWFwcGVyLmdldCgpKTsKLQotICAgIG1fYmFja2luZ1N0b3Jl
c1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVy
OjpmbHVzaExheWVyQ2hhbmdlcygpCi17Ci0gICAgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9z
aXRpb24gPSBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Ci0KLSAgICAv
LyBTaW5jZSB0aGUgZnJhbWUgaGFzIG5vdyBiZWVuIHJlbmRlcmVkLCB3ZSBjYW4gc2FmZWx5IHVu
bG9jayB0aGUgYW5pbWF0aW9ucyB1bnRpbCB0aGUgbmV4dCBsYXlvdXQuCi0gICAgc2V0QW5pbWF0
aW9uc0xvY2tlZChmYWxzZSk7Ci0KLSAgICBtX3Jvb3RMYXllci0+Zmx1c2hDb21wb3NpdGluZ1N0
YXRlKEZsb2F0UmVjdCgpKTsKLSAgICBjb21taXRQZW5kaW5nQmFja2luZ1N0b3JlT3BlcmF0aW9u
cygpOwotICAgIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5nc0lmTmVlZGVkKCk7Ci0KLSAgICAv
LyBUaGUgcGVuZGluZyB0aWxlcyBzdGF0ZSBpcyBvbiBpdHMgd2F5IGZvciB0aGUgc2NyZWVuLCB0
ZWxsIHRoZSB3ZWIgcHJvY2VzcyB0byByZW5kZXIgdGhlIG5leHQgb25lLgotICAgIGRpc3BhdGNo
T25NYWluVGhyZWFkKGJpbmQoJkxheWVyVHJlZVJlbmRlcmVyOjpyZW5kZXJOZXh0RnJhbWUsIHRo
aXMpKTsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6cmVuZGVyTmV4dEZyYW1lKCkKLXsK
LSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1fY2xpZW50LT5yZW5kZXJOZXh0RnJhbWUoKTsK
LX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZW5zdXJlUm9vdExheWVyKCkKLXsKLSAgICBp
ZiAobV9yb290TGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fcm9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKDAgLyogZmFjdG9yeSAqLywgdGhpcyk7Ci0gICAgbV9yb290TGF5
ZXItPnNldE1hc2tzVG9Cb3VuZHMoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0Nv
bnRlbnQoZmFsc2UpOwotICAgIG1fcm9vdExheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
M0QoMCwgMCwgMCkpOwotCi0gICAgLy8gVGhlIHJvb3QgbGF5ZXIgc2hvdWxkIG5vdCBoYXZlIHpl
cm8gc2l6ZSwgb3IgaXQgd291bGQgYmUgb3B0aW1pemVkIG91dC4KLSAgICBtX3Jvb3RMYXllci0+
c2V0U2l6ZShGbG9hdFNpemUoMS4wLCAxLjApKTsKLQotICAgIEFTU0VSVChtX3RleHR1cmVNYXBw
ZXIpOwotICAgIHRvVGV4dHVyZU1hcHBlckxheWVyKG1fcm9vdExheWVyLmdldCgpKS0+c2V0VGV4
dHVyZU1hcHBlcihtX3RleHR1cmVNYXBwZXIuZ2V0KCkpOwotfQotCi12b2lkIExheWVyVHJlZVJl
bmRlcmVyOjpzeW5jUmVtb3RlQ29udGVudCgpCi17Ci0gICAgLy8gV2UgZW5xdWV1ZSBtZXNzYWdl
cyBhbmQgZXhlY3V0ZSB0aGVtIGR1cmluZyBwYWludCwgYXMgdGhleSByZXF1aXJlIGFuIGFjdGl2
ZSBHTCBjb250ZXh0LgotICAgIGVuc3VyZVJvb3RMYXllcigpOwotCi0gICAgVmVjdG9yPEZ1bmN0
aW9uPHZvaWQoKT4gPiByZW5kZXJRdWV1ZTsKLSAgICBib29sIGNhbGxlZE9uTWFpblRocmVhZCA9
IFdURjo6aXNNYWluVGhyZWFkKCk7Ci0gICAgaWYgKCFjYWxsZWRPbk1haW5UaHJlYWQpCi0gICAg
ICAgIG1fcmVuZGVyUXVldWVNdXRleC5sb2NrKCk7Ci0gICAgcmVuZGVyUXVldWUuc3dhcChtX3Jl
bmRlclF1ZXVlKTsKLSAgICBpZiAoIWNhbGxlZE9uTWFpblRocmVhZCkKLSAgICAgICAgbV9yZW5k
ZXJRdWV1ZU11dGV4LnVubG9jaygpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZW5k
ZXJRdWV1ZS5zaXplKCk7ICsraSkKLSAgICAgICAgcmVuZGVyUXVldWVbaV0oKTsKLX0KLQotdm9p
ZCBMYXllclRyZWVSZW5kZXJlcjo6cHVyZ2VHTFJlc291cmNlcygpCi17Ci0gICAgbV9pbWFnZUJh
Y2tpbmdzLmNsZWFyKCk7Ci0gICAgbV9yZWxlYXNlZEltYWdlQmFja2luZ3MuY2xlYXIoKTsKLSNp
ZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBtX3N1cmZhY2VCYWNraW5nU3RvcmVzLmNsZWFy
KCk7Ci0jZW5kaWYKLSAgICBtX3N1cmZhY2VzLmNsZWFyKCk7Ci0KLSAgICBtX3Jvb3RMYXllci5j
bGVhcigpOwotICAgIG1fcm9vdExheWVySUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRMYXllcklEOwot
ICAgIG1fbGF5ZXJzLmNsZWFyKCk7Ci0gICAgbV9maXhlZExheWVycy5jbGVhcigpOwotICAgIG1f
dGV4dHVyZU1hcHBlci5jbGVhcigpOwotICAgIG1fYmFja2luZ1N0b3Jlcy5jbGVhcigpOwotICAg
IG1fYmFja2luZ1N0b3Jlc1dpdGhQZW5kaW5nQnVmZmVycy5jbGVhcigpOwotCi0gICAgc2V0QWN0
aXZlKGZhbHNlKTsKLSAgICBkaXNwYXRjaE9uTWFpblRocmVhZChiaW5kKCZMYXllclRyZWVSZW5k
ZXJlcjo6cHVyZ2VCYWNraW5nU3RvcmVzLCB0aGlzKSk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnB1cmdlQmFja2luZ1N0b3JlcygpCi17Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAg
ICBtX2NsaWVudC0+cHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci19Ci0KLXZvaWQgTGF5ZXJUcmVlUmVu
ZGVyZXI6OnNldExheWVyQW5pbWF0aW9ucyhDb29yZGluYXRlZExheWVySUQgaWQsIGNvbnN0IEdy
YXBoaWNzTGF5ZXJBbmltYXRpb25zJiBhbmltYXRpb25zKQotewotICAgIEdyYXBoaWNzTGF5ZXJU
ZXh0dXJlTWFwcGVyKiBsYXllciA9IHRvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIobGF5ZXJC
eUlEKGlkKSk7Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYW5pbWF0aW9ucy5hbmltYXRpb25zKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29u
c3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyA9IGFuaW1hdGlvbnMuYW5pbWF0aW9ucygp
LmF0KGkpLmtleWZyYW1lcygpOwotICAgICAgICBpZiAoa2V5ZnJhbWVzLnByb3BlcnR5KCkgIT0g
QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEZpbHRlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGtleWZyYW1lcy5zaXplKCk7ICsraikgewotICAg
ICAgICAgICAgY29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqIGZpbHRlclZhbHVlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgRmlsdGVyQW5pbWF0aW9uVmFsdWUqPihrZXlmcmFtZXMuYXQoaSkpOwotICAg
ICAgICAgICAgaW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoKmZpbHRlclZhbHVlLT52
YWx1ZSgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIGxheWVyLT5zZXRBbmltYXRp
b25zKGFuaW1hdGlvbnMpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRBbmltYXRp
b25zTG9ja2VkKGJvb2wgbG9ja2VkKQotewotICAgIG1fYW5pbWF0aW9uc0xvY2tlZCA9IGxvY2tl
ZDsKLX0KLQotdm9pZCBMYXllclRyZWVSZW5kZXJlcjo6ZGV0YWNoKCkKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIG1fY2xpZW50ID0gMDsKLX0KLQotdm9pZCBMYXllclRyZWVS
ZW5kZXJlcjo6YXBwZW5kVXBkYXRlKGNvbnN0IEZ1bmN0aW9uPHZvaWQoKT4mIGZ1bmN0aW9uKQot
ewotICAgIGlmICghbV9pc0FjdGl2ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9yZW5kZXJRdWV1ZU11dGV4
KTsKLSAgICBtX3JlbmRlclF1ZXVlLmFwcGVuZChmdW5jdGlvbik7Ci19Ci0KLXZvaWQgTGF5ZXJU
cmVlUmVuZGVyZXI6OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAobV9pc0FjdGl2
ZSA9PSBhY3RpdmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEhhdmUgdG8gY2xlYXIgcmVu
ZGVyIHF1ZXVlIGluIGJvdGggY2FzZXMuCi0gICAgLy8gSWYgdGhlcmUgYXJlIHNvbWUgdXBkYXRl
cyBpbiBxdWV1ZSBkdXJpbmcgYWN0aXZhdGlvbiB0aGVuIHRob3NlIHVwZGF0ZXMgYXJlIGZyb20g
cHJldmlvdXMgaW5zdGFuY2Ugb2YgcGFpbnQgbm9kZQotICAgIC8vIGFuZCBjYW5ub3QgYmUgYXBw
bGllZCB0byB0aGUgbmV3bHkgY3JlYXRlZCBpbnN0YW5jZS4KLSAgICBtX3JlbmRlclF1ZXVlLmNs
ZWFyKCk7Ci0gICAgbV9pc0FjdGl2ZSA9IGFjdGl2ZTsKLSAgICBpZiAobV9pc0FjdGl2ZSkKLSAg
ICAgICAgZGlzcGF0Y2hPbk1haW5UaHJlYWQoYmluZCgmTGF5ZXJUcmVlUmVuZGVyZXI6OnJlbmRl
ck5leHRGcmFtZSwgdGhpcykpOwotfQotCi12b2lkIExheWVyVHJlZVJlbmRlcmVyOjpzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKQotewotICAgIG1fYmFja2dy
b3VuZENvbG9yID0gY29sb3I7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5ZXJUcmVlUmVuZGVyZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNzL0xheWVyVHJlZVJlbmRlcmVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmZDBkZTliN2ZjYjJhYTk2NTgwNWQ4
YmYzMDhmODM3NDc4MzgyOWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nvb3JkaW5hdGVkR3JhcGhpY3MvTGF5
ZXJUcmVlUmVuZGVyZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKgotICAg
IENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaWZuZGVmIExheWVyVHJlZVJlbmRlcmVyX2gKLSNkZWZpbmUgTGF5ZXJU
cmVlUmVuZGVyZXJfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUg
IkJhY2tpbmdTdG9yZS5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJJbmZvLmgiCi0jaW5j
bHVkZSAiQ29vcmRpbmF0ZWRTdXJmYWNlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgot
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJCYWNraW5nU3RvcmUuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckFuaW1hdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NTdXJmYWNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9SdW5Mb29wLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9UaW1lci5oPgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0
aXZlcy5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Y2xhc3MgQ3VzdG9tRmlsdGVyUHJvZ3JhbTsKLWNsYXNzIEN1c3RvbUZpbHRlclByb2dyYW1JbmZv
OwotY2xhc3MgVGV4dHVyZU1hcHBlckxheWVyOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgQ29vcmRpbmF0ZWRCYWNraW5nU3RvcmU7Ci1jbGFzcyBDb29yZGluYXRlZExheWVySW5m
bzsKLQotY2xhc3MgTGF5ZXJUcmVlUmVuZGVyZXJDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1
YWwgfkxheWVyVHJlZVJlbmRlcmVyQ2xpZW50KCkgeyB9Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCkgPSAw
OwotI2VuZGlmCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpZXdwb3J0KCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZW5kZXJOZXh0RnJhbWUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHB1cmdl
QmFja2luZ1N0b3JlcygpID0gMDsKLX07Ci0KLWNsYXNzIExheWVyVHJlZVJlbmRlcmVyIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExheWVyVHJlZVJlbmRlcmVyPiwgcHVibGljIFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXJDbGllbnQgewotcHVibGljOgotICAgIHN0cnVjdCBUaWxlVXBkYXRl
IHsKLSAgICAgICAgV2ViQ29yZTo6SW50UmVjdCBzb3VyY2VSZWN0OwotICAgICAgICBXZWJDb3Jl
OjpJbnRSZWN0IHRpbGVSZWN0OwotICAgICAgICB1aW50MzJfdCBhdGxhc0lEOwotICAgICAgICBX
ZWJDb3JlOjpJbnRQb2ludCBvZmZzZXQ7Ci0gICAgICAgIFRpbGVVcGRhdGUoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgc291cmNlLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiB0aWxlLCB1aW50MzJf
dCBhdGxhcywgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG5ld09mZnNldCkKLSAgICAgICAgICAg
IDogc291cmNlUmVjdChzb3VyY2UpCi0gICAgICAgICAgICAsIHRpbGVSZWN0KHRpbGUpCi0gICAg
ICAgICAgICAsIGF0bGFzSUQoYXRsYXMpCi0gICAgICAgICAgICAsIG9mZnNldChuZXdPZmZzZXQp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotICAgIH07Ci0gICAgZXhwbGljaXQgTGF5ZXJUcmVlUmVu
ZGVyZXIoTGF5ZXJUcmVlUmVuZGVyZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5MYXllclRyZWVS
ZW5kZXJlcigpOwotICAgIHZvaWQgcGFpbnRUb0N1cnJlbnRHTENvbnRleHQoY29uc3QgV2ViQ29y
ZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgV2ViQ29yZTo6VGV4dHVyZU1hcHBlcjo6UGFpbnRGbGFncyA9IDApOwotICAgIHZvaWQgcGFp
bnRUb0dyYXBoaWNzQ29udGV4dChCYWNraW5nU3RvcmU6OlBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KTsKLSAgICB2b2lkIHNldENvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKTsK
LSAgICB2b2lkIHNldFZpc2libGVDb250ZW50c1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBkaWRDaGFuZ2VTY3JvbGxQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50JiBwb3NpdGlvbik7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdm9pZCBj
cmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpHcmFwaGljc1N1cmZhY2U+KTsKLSAgICB2b2lkIHN5bmNDYW52
YXMoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCBmcm9udEJ1ZmZlcik7Ci0gICAgdm9pZCBk
ZXN0cm95Q2FudmFzKENvb3JkaW5hdGVkTGF5ZXJJRCk7Ci0jZW5kaWYKLSAgICB2b2lkIHNldExh
eWVyUmVwYWludENvdW50KENvb3JkaW5hdGVkTGF5ZXJJRCwgaW50IHZhbHVlKTsKLQotICAgIHZv
aWQgZGV0YWNoKCk7Ci0gICAgdm9pZCBhcHBlbmRVcGRhdGUoY29uc3QgRnVuY3Rpb248dm9pZCgp
PiYpOwotCi0gICAgLy8gVGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhy
ZWFkIHRvIHVzZSBiZWxvdyB0d28gbWV0aG9kcywgYmVjYXVzZSB0d28gbWV0aG9kcyBhY2Nlc3Mg
bWVtYmVycyB0aGF0IHRoZSBtYWluIHRocmVhZCBtYW5hZ2VzLiBTZWUgbV9jbGllbnQuCi0gICAg
Ly8gQ3VycmVudGx5LCBRUXVpY2tXZWJQYWdlOjp1cGRhdGVQYWludE5vZGUoKSBsb2NrcyB0aGUg
bWFpbiB0aHJlYWQgYmVmb3JlIGNhbGxpbmcgYm90aCBtZXRob2RzLgotICAgIHZvaWQgcHVyZ2VH
TFJlc291cmNlcygpOwotICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOwotCi0gICAgdm9pZCBjcmVh
dGVMYXllcnMoY29uc3QgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4mKTsKLSAgICB2b2lkIGRl
bGV0ZUxheWVycyhjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklEPiYpOwotICAgIHZvaWQg
c2V0Um9vdExheWVySUQoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAgICB2b2lkIHNldExheWVyQ2hp
bGRyZW4oQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBWZWN0b3I8Q29vcmRpbmF0ZWRMYXllcklE
PiYpOwotICAgIHZvaWQgc2V0TGF5ZXJTdGF0ZShDb29yZGluYXRlZExheWVySUQsIGNvbnN0IENv
b3JkaW5hdGVkTGF5ZXJJbmZvJik7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQg
c2V0TGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6RmlsdGVy
T3BlcmF0aW9ucyYpOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIHZvaWQg
aW5qZWN0Q2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbXMoY29uc3QgV2ViQ29yZTo6RmlsdGVyT3Bl
cmF0aW9ucyYgZmlsdGVycykgY29uc3Q7Ci0gICAgdm9pZCBjcmVhdGVDdXN0b21GaWx0ZXJQcm9n
cmFtKGludCBpZCwgY29uc3QgV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsKLSAg
ICB2b2lkIHJlbW92ZUN1c3RvbUZpbHRlclByb2dyYW0oaW50IGlkKTsKLSNlbmRpZgotCi0gICAg
dm9pZCBjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlELCBmbG9h
dCBzY2FsZSk7Ci0gICAgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMy
X3QgdGlsZUlEKTsKLSAgICB2b2lkIHVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50
MzJfdCB0aWxlSUQsIGNvbnN0IFRpbGVVcGRhdGUmKTsKLSAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0
bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPik7Ci0g
ICAgdm9pZCByZW1vdmVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lEKTsKLSAgICB2b2lkIGZs
dXNoTGF5ZXJDaGFuZ2VzKCk7Ci0gICAgdm9pZCBjcmVhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCk7Ci0gICAgdm9pZCB1cGRhdGVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+KTsKLSAgICB2
b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7
Ci0gICAgdm9pZCByZW1vdmVJbWFnZUJhY2tpbmcoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCk7
Ci0gICAgdm9pZCBzZXRMYXllckFuaW1hdGlvbnMoQ29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwotICAgIHZvaWQgc2V0QW5pbWF0aW9u
c0xvY2tlZChib29sKTsKLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBXZWJDb3Jl
OjpDb2xvciYpOwotICAgIHZvaWQgc2V0RHJhd3NCYWNrZ3JvdW5kKGJvb2wgZW5hYmxlKSB7IG1f
c2V0RHJhd3NCYWNrZ3JvdW5kID0gZW5hYmxlOyB9Ci0KLSNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCi0gICAgdm9pZCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKTsKLSNlbmRpZgot
Ci1wcml2YXRlOgotICAgIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIGxheWVyQnlJRChDb29yZGlu
YXRlZExheWVySUQgaWQpCi0gICAgewotICAgICAgICBBU1NFUlQobV9sYXllcnMuY29udGFpbnMo
aWQpKTsKLSAgICAgICAgQVNTRVJUKGlkICE9IEludmFsaWRDb29yZGluYXRlZExheWVySUQpOwot
ICAgICAgICByZXR1cm4gbV9sYXllcnMuZ2V0KGlkKTsKLSAgICB9Ci0gICAgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllciogZ2V0TGF5ZXJCeUlESWZFeGlzdHMoQ29vcmRpbmF0ZWRMYXllcklEKTsKLSAg
ICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX3Jvb3RMYXll
ci5nZXQoKTsgfQotCi0gICAgdm9pZCBzeW5jUmVtb3RlQ29udGVudCgpOwotICAgIHZvaWQgYWRq
dXN0UG9zaXRpb25Gb3JGaXhlZExheWVycygpOwotCi0gICAgLy8gUmVpbXBsZW1lbnRhdGlvbnMg
ZnJvbSBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDb250ZW50cyhjb25z
dCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgV2Vi
Q29yZTo6R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KSBPVkVSUklERSB7IH0KLQotICAgIHZvaWQgZGlzcGF0Y2hPbk1haW5UaHJlYWQoY29uc3QgRnVu
Y3Rpb248dm9pZCgpPiYpOwotICAgIHZvaWQgdXBkYXRlVmlld3BvcnQoKTsKLSNpZiBFTkFCTEUo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUUpCi0gICAgdm9pZCBhbmltYXRpb25GcmFtZVJlYWR5KCk7
Ci0jZW5kaWYKLSAgICB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwotICAgIHZvaWQgcHVyZ2VCYWNr
aW5nU3RvcmVzKCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUxheWVyKENvb3JkaW5hdGVkTGF5ZXJJRCk7
Ci0gICAgdm9pZCBkZWxldGVMYXllcihDb29yZGluYXRlZExheWVySUQpOwotCi0gICAgdm9pZCBh
c3NpZ25JbWFnZUJhY2tpbmdUb0xheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKTsKLSAgICB2b2lkIHJlbW92ZVJlbGVhc2VkSW1hZ2VCYWNraW5n
c0lmTmVlZGVkKCk7Ci0gICAgdm9pZCBlbnN1cmVSb290TGF5ZXIoKTsKLSAgICB2b2lkIGNvbW1p
dFBlbmRpbmdCYWNraW5nU3RvcmVPcGVyYXRpb25zKCk7Ci0KLSAgICB2b2lkIHByZXBhcmVDb250
ZW50QmFja2luZ1N0b3JlKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIGNyZWF0
ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lk
IHJlbW92ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKLSAg
ICB2b2lkIHJlc2V0QmFja2luZ1N0b3JlU2l6ZVRvTGF5ZXJTaXplKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXIqKTsKLQotICAgIFdlYkNvcmU6OkZsb2F0U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKLSAgICBX
ZWJDb3JlOjpGbG9hdFJlY3QgbV92aXNpYmxlQ29udGVudHNSZWN0OwotCi0gICAgLy8gUmVuZGVy
IHF1ZXVlIGNhbiBiZSBhY2Nlc3NlZCBvbnkgZnJvbSBtYWluIHRocmVhZCBvciB1cGRhdGVQYWlu
dE5vZGUgY2FsbCBzdGFjayEKLSAgICBWZWN0b3I8RnVuY3Rpb248dm9pZCgpPiA+IG1fcmVuZGVy
UXVldWU7Ci0gICAgTXV0ZXggbV9yZW5kZXJRdWV1ZU11dGV4OwotCi0gICAgT3duUHRyPFdlYkNv
cmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKLQotICAgIHR5cGVkZWYgSGFzaE1h
cDxDb29yZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3Rv
cmU+ID4gSW1hZ2VCYWNraW5nTWFwOwotICAgIEltYWdlQmFja2luZ01hcCBtX2ltYWdlQmFja2lu
Z3M7Ci0gICAgVmVjdG9yPFJlZlB0cjxDb29yZGluYXRlZEJhY2tpbmdTdG9yZT4gPiBtX3JlbGVh
c2VkSW1hZ2VCYWNraW5nczsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpHcmFwaGlj
c0xheWVyKiwgUmVmUHRyPENvb3JkaW5hdGVkQmFja2luZ1N0b3JlPiA+IEJhY2tpbmdTdG9yZU1h
cDsKLSAgICBCYWNraW5nU3RvcmVNYXAgbV9iYWNraW5nU3RvcmVzOwotCi0gICAgSGFzaFNldDxS
ZWZQdHI8Q29vcmRpbmF0ZWRCYWNraW5nU3RvcmU+ID4gbV9iYWNraW5nU3RvcmVzV2l0aFBlbmRp
bmdCdWZmZXJzOwotCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgdHlwZWRlZiBIYXNo
TWFwPENvb3JkaW5hdGVkTGF5ZXJJRCwgUmVmUHRyPFdlYkNvcmU6OlRleHR1cmVNYXBwZXJTdXJm
YWNlQmFja2luZ1N0b3JlPiA+IFN1cmZhY2VCYWNraW5nU3RvcmVNYXA7Ci0gICAgU3VyZmFjZUJh
Y2tpbmdTdG9yZU1hcCBtX3N1cmZhY2VCYWNraW5nU3RvcmVzOwotI2VuZGlmCi0KLSAgICB0eXBl
ZGVmIEhhc2hNYXA8dWludDMyX3QgLyogYXRsYXNJRCAqLywgUmVmUHRyPENvb3JkaW5hdGVkU3Vy
ZmFjZT4gPiBTdXJmYWNlTWFwOwotICAgIFN1cmZhY2VNYXAgbV9zdXJmYWNlczsKLQotICAgIC8v
IEJlbG93IHR3byBtZW1iZXJzIGFyZSBhY2Nlc3NlZCBieSBvbmx5IHRoZSBtYWluIHRocmVhZC4g
VGhlIHBhaW50aW5nIHRocmVhZCBtdXN0IGxvY2sgdGhlIG1haW4gdGhyZWFkIHRvIGFjY2VzcyBi
b3RoIG1lbWJlcnMuCi0gICAgTGF5ZXJUcmVlUmVuZGVyZXJDbGllbnQqIG1fY2xpZW50OwotICAg
IGJvb2wgbV9pc0FjdGl2ZTsKLQotICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBt
X3Jvb3RMYXllcjsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVySUQsIE93
blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiA+IExheWVyTWFwOwotICAgIExheWVyTWFwIG1f
bGF5ZXJzOwotICAgIHR5cGVkZWYgSGFzaE1hcDxDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqPiBMYXllclJhd1B0ck1hcDsKLSAgICBMYXllclJhd1B0ck1hcCBtX2Zp
eGVkTGF5ZXJzOwotICAgIENvb3JkaW5hdGVkTGF5ZXJJRCBtX3Jvb3RMYXllcklEOwotICAgIFdl
YkNvcmU6OkZsb2F0UG9pbnQgbV9yZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRpb247Ci0gICAg
V2ViQ29yZTo6RmxvYXRQb2ludCBtX3BlbmRpbmdSZW5kZXJlZENvbnRlbnRzU2Nyb2xsUG9zaXRp
b247Ci0gICAgYm9vbCBtX2FuaW1hdGlvbnNMb2NrZWQ7Ci0jaWYgRU5BQkxFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FKQotICAgIGJvb2wgbV9hbmltYXRpb25GcmFtZVJlcXVlc3RlZDsKLSNlbmRp
ZgotICAgIFdlYkNvcmU6OkNvbG9yIG1fYmFja2dyb3VuZENvbG9yOwotICAgIGJvb2wgbV9zZXRE
cmF3c0JhY2tncm91bmQ7Ci0KLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgdHlwZWRlZiBI
YXNoTWFwPGludCwgUmVmUHRyPFdlYkNvcmU6OkN1c3RvbUZpbHRlclByb2dyYW0+ID4gQ3VzdG9t
RmlsdGVyUHJvZ3JhbU1hcDsKLSAgICBDdXN0b21GaWx0ZXJQcm9ncmFtTWFwIG1fY3VzdG9tRmls
dGVyUHJvZ3JhbXM7Ci0jZW5kaWYKLX07Ci0KLX07Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0KLSNlbmRpZiAvLyBMYXllclRyZWVSZW5kZXJlcl9oCi0KLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlQ2xpZW50QmFzZS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAppbmRleCAyZWZk
YmQwZTEzOWViMDA4ODVmOTFhZWY5YjI4YzkwM2JmZGMxYzNkLi41MTE1NGJjODM3YzlmYWMzNDk1
YmI0MzZkNjRhOWE1OWUzYTBjZmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1BhZ2VDbGllbnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1BhZ2VDbGllbnRCYXNlLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkRyYXdp
bmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiRXdrVmlldy5oIgogI2luY2x1ZGUgIklucHV0
TWV0aG9kQ29udGV4dEVmbC5oIgotI2luY2x1ZGUgIkxheWVyVHJlZVJlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVm
bC5jcHAKaW5kZXggZjExZDA4ZGQwOTljODNiMGVjOGI3YzVhZWQwOWVkNjRhZGNjZTE2Yy4uZDQw
ZGExMDJkZGFiZjc4MTdhZDNiMDk5MjU3M2ZkMjBiOGQ3MzMyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9QYWdlVmlld3BvcnRDb250cm9sbGVyQ2xpZW50RWZsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmwuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAKICNpbmNsdWRlICJDb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eS5oIgogI2luY2x1ZGUgIkV3a1ZpZXcuaCIKLSNpbmNsdWRlICJM
YXllclRyZWVSZW5kZXJlci5oIgogI2luY2x1ZGUgIlBhZ2VWaWV3cG9ydENvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29v
cmRpbmF0ZWRHcmFwaGljc1NjZW5lLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC01Niw3ICs1Niw3IEBAIERyYXdpbmdBcmVhUHJveHkqIFBhZ2VWaWV3cG9ydENvbnRyb2xsZXJD
bGllbnRFZmw6OmRyYXdpbmdBcmVhKCkgY29uc3QKIAogdm9pZCBQYWdlVmlld3BvcnRDb250cm9s
bGVyQ2xpZW50RWZsOjpzZXRSZW5kZXJlckFjdGl2ZShib29sIGFjdGl2ZSkKIHsKLSAgICBkcmF3
aW5nQXJlYSgpLT5jb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eSgpLT5sYXllclRyZWVSZW5k
ZXJlcigpLT5zZXRBY3RpdmUoYWN0aXZlKTsKKyAgICBkcmF3aW5nQXJlYSgpLT5jb29yZGluYXRl
ZExheWVyVHJlZUhvc3RQcm94eSgpLT5jb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKS0+c2V0QWN0
aXZlKGFjdGl2ZSk7CiB9CiAKIHZvaWQgUGFnZVZpZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbDo6
dXBkYXRlVmlld3BvcnRTaXplKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9xdC9RdFdlYlBhZ2VTR05vZGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0
V2ViUGFnZVNHTm9kZS5jcHAKaW5kZXggZjUzNmM0MjE3NjVmMmI2NjY2YzYzMGQzMWJhMzM0Mjhh
OTU2OTcyOS4uMDAyZDAwNTA3YTRkYTYyYmY0YzhkNDllNTMzZTMxMDRjN2ExMjY3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9kZS5jcHAKQEAgLTIx
LDExICsyMSwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlF0V2ViUGFnZVNH
Tm9kZS5oIgogCi0jaW5jbHVkZSAiTGF5ZXJUcmVlUmVuZGVyZXIuaCIKICNpbmNsdWRlIDxRdEd1
aS9RUG9seWdvbkY+CiAjaW5jbHVkZSA8UXRRdWljay9RUXVpY2tJdGVtPgogI2luY2x1ZGUgPFF0
UXVpY2svUVF1aWNrV2luZG93PgogI2luY2x1ZGUgPFF0UXVpY2svUVNHU2ltcGxlUmVjdE5vZGU+
CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNzU2NlbmUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVkZSA8cHJpdmF0ZS9xc2dy
ZW5kZXJub2RlX3AuaD4KIApAQCAtMzUsMTAgKzM1LDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
CiBjbGFzcyBDb250ZW50c1NHTm9kZSA6IHB1YmxpYyBRU0dSZW5kZXJOb2RlIHsKIHB1YmxpYzoK
LSAgICBDb250ZW50c1NHTm9kZShQYXNzUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiByZW5kZXJl
cikKLSAgICAgICAgOiBtX3JlbmRlcmVyKHJlbmRlcmVyKQorICAgIENvbnRlbnRzU0dOb2RlKFBh
c3NSZWZQdHI8Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lPiBzY2VuZSkKKyAgICAgICAgOiBtX3Nj
ZW5lKHNjZW5lKQogICAgIHsKLSAgICAgICAgbGF5ZXJUcmVlUmVuZGVyZXIoKS0+c2V0QWN0aXZl
KHRydWUpOworICAgICAgICBjb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoKS0+c2V0QWN0aXZlKHRy
dWUpOwogICAgIH0KIAogICAgIHZpcnR1YWwgU3RhdGVGbGFncyBjaGFuZ2VkU3RhdGVzKCkKQEAg
LTYyLDEyICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbWlycm9yZWQgPSBwcm9qZWN0
aW9uICYmICgqcHJvamVjdGlvbikoMCwgMCkgKiAoKnByb2plY3Rpb24pKDEsIDEpIC0gKCpwcm9q
ZWN0aW9uKSgwLCAxKSAqICgqcHJvamVjdGlvbikoMSwgMCkgPiAwOwogCiAgICAgICAgIC8vIEZJ
WE1FOiBTdXBwb3J0IG5vbi1yZWN0YW5ndWxhciBjbGlwcGluZ3MuCi0gICAgICAgIGxheWVyVHJl
ZVJlbmRlcmVyKCktPnBhaW50VG9DdXJyZW50R0xDb250ZXh0KHJlbmRlck1hdHJpeCwgaW5oZXJp
dGVkT3BhY2l0eSgpLCBjbGlwUmVjdCgpLCBtaXJyb3JlZCA/IFRleHR1cmVNYXBwZXI6OlBhaW50
aW5nTWlycm9yZWQgOiAwKTsKKyAgICAgICAgY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCktPnBh
aW50VG9DdXJyZW50R0xDb250ZXh0KHJlbmRlck1hdHJpeCwgaW5oZXJpdGVkT3BhY2l0eSgpLCBj
bGlwUmVjdCgpLCBtaXJyb3JlZCA/IFRleHR1cmVNYXBwZXI6OlBhaW50aW5nTWlycm9yZWQgOiAw
KTsKICAgICB9CiAKICAgICB+Q29udGVudHNTR05vZGUoKQogICAgIHsKLSAgICAgICAgbGF5ZXJU
cmVlUmVuZGVyZXIoKS0+cHVyZ2VHTFJlc291cmNlcygpOworICAgICAgICBjb29yZGluYXRlZEdy
YXBoaWNzU2NlbmUoKS0+cHVyZ2VHTFJlc291cmNlcygpOwogICAgIH0KIAogICAgIGNvbnN0IFF0
V2ViUGFnZVNHTm9kZSogcGFnZU5vZGUoKSBjb25zdApAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBwYXJlbnQ7CiAgICAgfQogCi0gICAgTGF5ZXJUcmVlUmVuZGVyZXIq
IGxheWVyVHJlZVJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlci5nZXQoKTsgfQor
ICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0ZWRHcmFwaGlj
c1NjZW5lKCkgY29uc3QgeyByZXR1cm4gbV9zY2VuZS5nZXQoKTsgfQogCiBwcml2YXRlOgogICAg
IFFSZWN0RiBjbGlwUmVjdCgpIGNvbnN0CkBAIC0xMjYsNyArMTI2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHJlc3VsdFJlY3Q7CiAgICAgfQogCi0gICAgUmVmUHRyPExheWVyVHJlZVJl
bmRlcmVyPiBtX3JlbmRlcmVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBo
aWNzU2NlbmU+IG1fc2NlbmU7CiB9OwogCiBRdFdlYlBhZ2VTR05vZGU6OlF0V2ViUGFnZVNHTm9k
ZSgpCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIFF0V2ViUGFnZVNHTm9kZTo6c2V0U2NhbGUo
ZmxvYXQgc2NhbGUpCiAgICAgc2V0TWF0cml4KG1hdHJpeCk7CiB9CiAKLXZvaWQgUXRXZWJQYWdl
U0dOb2RlOjpzZXRSZW5kZXJlcihQYXNzUmVmUHRyPExheWVyVHJlZVJlbmRlcmVyPiByZW5kZXJl
cikKK3ZvaWQgUXRXZWJQYWdlU0dOb2RlOjpzZXRDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUoUGFz
c1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmU+IHNjZW5lKQogewotICAg
IGlmIChtX2NvbnRlbnRzTm9kZSAmJiBtX2NvbnRlbnRzTm9kZS0+bGF5ZXJUcmVlUmVuZGVyZXIo
KSA9PSByZW5kZXJlcikKKyAgICBpZiAobV9jb250ZW50c05vZGUgJiYgbV9jb250ZW50c05vZGUt
PmNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpID09IHNjZW5lKQogICAgICAgICByZXR1cm47CiAK
ICAgICBkZWxldGUgbV9jb250ZW50c05vZGU7Ci0gICAgbV9jb250ZW50c05vZGUgPSBuZXcgQ29u
dGVudHNTR05vZGUocmVuZGVyZXIpOworICAgIG1fY29udGVudHNOb2RlID0gbmV3IENvbnRlbnRz
U0dOb2RlKHNjZW5lKTsKICAgICAvLyBUaGlzIHNldHMgdGhlIHBhcmVudCBub2RlIG9mIHRoZSBj
b250ZW50IHRvIFF0V2ViUGFnZVNHTm9kZS4KICAgICBhcHBlbmRDaGlsZE5vZGUobV9jb250ZW50
c05vZGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2Vi
UGFnZVNHTm9kZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1F0V2ViUGFnZVNHTm9k
ZS5oCmluZGV4IDFiY2MyOGU0Mzk5MDJmNTlmZGM4NDlkNDA3Njg2ZTE1MDM4MTg4YjIuLjc3YWQ4
MWI2ZmMyNWQ2Yzg2NzFhZDE5NmRkMTFmNDhhODA5Y2ZjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9xdC9RdFdlYlBhZ2VTR05vZGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvcXQvUXRXZWJQYWdlU0dOb2RlLmgKQEAgLTI5LDE3ICsyOSwyMCBAQCBjbGFz
cyBRUXVpY2tJdGVtOwogY2xhc3MgUVNHU2ltcGxlUmVjdE5vZGU7CiBRVF9FTkRfTkFNRVNQQUNF
CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZTsK
K30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENvbnRlbnRzU0dOb2RlOwotY2xhc3Mg
TGF5ZXJUcmVlUmVuZGVyZXI7CiAKIGNsYXNzIFF0V2ViUGFnZVNHTm9kZSA6IHB1YmxpYyBRU0dU
cmFuc2Zvcm1Ob2RlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFF0V2ViUGFnZVNHTm9kZSgpOwog
ICAgICAgICB2b2lkIHNldEJhY2tncm91bmQoY29uc3QgUVJlY3RGJiwgY29uc3QgUUNvbG9yJik7
CiAgICAgICAgIHZvaWQgc2V0U2NhbGUoZmxvYXQpOwotICAgICAgICB2b2lkIHNldFJlbmRlcmVy
KFBhc3NSZWZQdHI8TGF5ZXJUcmVlUmVuZGVyZXI+KTsKKyAgICAgICAgdm9pZCBzZXRDb29yZGlu
YXRlZEdyYXBoaWNzU2NlbmUoUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNz
U2NlbmU+KTsKICAgICAgICAgcXJlYWwgZGV2aWNlUGl4ZWxSYXRpbygpIGNvbnN0IHsgcmV0dXJu
IG1fZGV2aWNlUGl4ZWxSYXRpbzsgfQogICAgICAgICB2b2lkIHNldERldmljZVBpeGVsUmF0aW8o
cXJlYWwgZGV2aWNlUGl4ZWxSYXRpbykgeyBtX2RldmljZVBpeGVsUmF0aW8gPSBkZXZpY2VQaXhl
bFJhdGlvOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiZWZjZGFjODUyMDEyY2ZlOTNjODdhNWE5
MzIxYTgxZDc1MzU4NDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQXJlYUFsbG9jYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNsdWRlICJBcmVhQWxs
b2NhdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1BcmVhQWxsb2NhdG9yOjpBcmVhQWxs
b2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi0gICAgOiBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fbWluQWxsb2MoMSwgMSkKLSAgICAsIG1fbWFyZ2luKDAsIDApCi17Ci19Ci0KLUFy
ZWFBbGxvY2F0b3I6On5BcmVhQWxsb2NhdG9yKCkKLXsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9y
OjpleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUgPSBt
X3NpemUuZXhwYW5kZWRUbyhzaXplKTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpleHBhbmRC
eShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSArPSBzaXplOwot
fQotCi12b2lkIEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
Ci17Ci19Ci0KLWludCBBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLVdlYkNvcmU6OkludFNpemUgQXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgaW50IHdpZHRo
ID0gc2l6ZS53aWR0aCgpICsgbV9tYXJnaW4ud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6
ZS5oZWlnaHQoKSArIG1fbWFyZ2luLmhlaWdodCgpOwotICAgIGludCBleHRyYSA9IHdpZHRoICUg
bV9taW5BbGxvYy53aWR0aCgpOwotICAgIGlmIChleHRyYSkKLSAgICAgICAgd2lkdGggKz0gbV9t
aW5BbGxvYy53aWR0aCgpIC0gZXh0cmE7Ci0gICAgZXh0cmEgPSBoZWlnaHQgJSBtX21pbkFsbG9j
LmhlaWdodCgpOwotICAgIGlmIChleHRyYSkKLSAgICAgICAgaGVpZ2h0ICs9IG1fbWluQWxsb2Mu
aGVpZ2h0KCkgLSBleHRyYTsKLQotICAgIHJldHVybiBXZWJDb3JlOjpJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0b3Io
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLSAgICA6IEFyZWFBbGxvY2F0b3IoV2ViQ29y
ZTo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkpCi17Ci0gICAgbV9yb290ID0gbmV3IE5vZGUoKTsKLSAg
ICBtX3Jvb3QtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCkpOwotICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7Ci0gICAg
bV9yb290LT5wYXJlbnQgPSAwOwotICAgIG1fcm9vdC0+bGVmdCA9IDA7Ci0gICAgbV9yb290LT5y
aWdodCA9IDA7Ci0gICAgbV9ub2RlQ291bnQgPSAxOwotICAgIHNldE1pbmltdW1BbGxvY2F0aW9u
KFdlYkNvcmU6OkludFNpemUoOCwgOCkpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6fkdl
bmVyYWxBcmVhQWxsb2NhdG9yKCkKLXsKLSAgICBmcmVlTm9kZShtX3Jvb3QpOwotfQotCi12b2lk
IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9kZShOb2RlKiBub2RlKQotewotICAgIGlmIChu
b2RlKSB7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOwotICAgICAgICBmcmVlTm9kZShu
b2RlLT5yaWdodCk7Ci0gICAgfQotICAgIGRlbGV0ZSBub2RlOwotfQotCi12b2lkIEdlbmVyYWxB
cmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkKLXsKLSAg
ICBBcmVhQWxsb2NhdG9yOjpleHBhbmQoV2ViQ29yZTo6bmV4dFBvd2VyT2ZUd28oc2l6ZSkpOwot
Ci0gICAgaWYgKG1fcm9vdC0+cmVjdC5zaXplKCkgPT0gbV9zaXplKQotICAgICAgICByZXR1cm47
IC8vIE5vIGNoYW5nZS4KLQotICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9vdC0+bGFyZ2Vz
dEZyZWUud2lkdGgoKSA+IDApIHsKLSAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMgaGF2ZSBvY2N1
cnJlZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KLSAgICAgICAgbV9yb290LT5yZWN0
ID0gV2ViQ29yZTo6SW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KTsKLSAgICAgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCByb290
IHRvIGV4cGFuZCB0aGUgdHJlZS4KLSAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OwotICAgIFNw
bGl0IHNwbGl0OwotICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgZWxzZQotICAgICAgICBzcGxpdCA9IFNwbGl0
T25ZOwotCi0gICAgd2hpbGUgKG1fcm9vdC0+cmVjdC5zaXplKCkgIT0gbV9zaXplKSB7Ci0gICAg
ICAgIGlmIChtX3Jvb3QtPnJlY3Qud2lkdGgoKSA9PSBtX3NpemUud2lkdGgoKSkKLSAgICAgICAg
ICAgIHNwbGl0ID0gU3BsaXRPblk7Ci0gICAgICAgIGVsc2UgaWYgKG1fcm9vdC0+cmVjdC5oZWln
aHQoKSA9PSBtX3NpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwot
ICAgICAgICBOb2RlKiBwYXJlbnQgPSBuZXcgTm9kZSgpOwotICAgICAgICBOb2RlKiByaWdodCA9
IG5ldyBOb2RlKCk7Ci0gICAgICAgIG1fbm9kZUNvdW50ICs9IDI7Ci0gICAgICAgIG1fcm9vdC0+
cGFyZW50ID0gcGFyZW50OwotICAgICAgICBwYXJlbnQtPnBhcmVudCA9IDA7Ci0gICAgICAgIHBh
cmVudC0+bGVmdCA9IG1fcm9vdDsKLSAgICAgICAgcGFyZW50LT5yaWdodCA9IHJpZ2h0OwotICAg
ICAgICBwYXJlbnQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKLSAgICAgICAg
cmlnaHQtPnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgcmlnaHQtPmxlZnQgPSAwOwotICAgICAg
ICByaWdodC0+cmlnaHQgPSAwOwotICAgICAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSBtX3Jvb3Qt
PnJlY3Quc2l6ZSgpOwotICAgICAgICBpZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKLSAgICAgICAg
ICAgIHBhcmVudC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9y
b290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSAqIDIs
IG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICByaWdodC0+cmVjdCA9IFdlYkNv
cmU6OkludFJlY3QobV9yb290LT5yZWN0LngoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jv
b3QtPnJlY3QueSgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jv
b3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyZW50
LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3Qu
eSgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3Qu
aGVpZ2h0KCkgKiAyKTsKLSAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVj
dChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpICsgbV9yb290LT5yZWN0LndpZHRo
KCksCi0gICAgICAgICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC5o
ZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3BsaXQgPSAoc3BsaXQgPT0gU3BsaXRPblgg
PyBTcGxpdE9uWSA6IFNwbGl0T25YKTsKLSAgICAgICAgbV9yb290ID0gcGFyZW50OwotICAgIH0K
LSAgICB1cGRhdGVMYXJnZXN0RnJlZShvbGRSb290KTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IGZpdHNXaXRoaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZTEsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNpemUyKQotewotICAgIHJldHVybiBzaXplMS53aWR0aCgpIDw9IHNpemUyLndp
ZHRoKCkgJiYgc2l6ZTEuaGVpZ2h0KCkgPD0gc2l6ZTIuaGVpZ2h0KCk7Ci19Ci0KLVdlYkNvcmU6
OkludFJlY3QgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHNpemUpCi17Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSByb3VuZGVkID0gcm91bmRBbGxv
Y2F0aW9uKHNpemUpOwotICAgIHJvdW5kZWQgPSBXZWJDb3JlOjpuZXh0UG93ZXJPZlR3byhyb3Vu
ZGVkKTsKLSAgICBpZiAocm91bmRlZC53aWR0aCgpIDw9IDAgfHwgcm91bmRlZC53aWR0aCgpID4g
bV9zaXplLndpZHRoKCkKLSAgICAgICAgfHwgcm91bmRlZC5oZWlnaHQoKSA8PSAwIHx8IHJvdW5k
ZWQuaGVpZ2h0KCkgPiBtX3NpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBXZWJDb3JlOjpJ
bnRSZWN0KCk7Ci0KLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5v
ZGUocm91bmRlZCwgbV9yb290KTsKLSAgICBpZiAocG9pbnQueCgpID49IDApCi0gICAgICAgIHJl
dHVybiBXZWJDb3JlOjpJbnRSZWN0KHBvaW50LCBzaXplKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6
SW50UmVjdCgpOwotfQotCi1XZWJDb3JlOjpJbnRQb2ludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6
YWxsb2NhdGVGcm9tTm9kZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBOb2RlKiBub2Rl
KQotewotICAgIC8vIEZpbmQgdGhlIGJlc3Qgbm9kZSB0byBpbnNlcnQgaW50bywgd2hpY2ggc2hv
dWxkIGJlCi0gICAgLy8gYSBub2RlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiB1bnVzZWQgc3Bh
Y2UgdGhhdCBpcwotICAgIC8vIGJpZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgcmVxdWVzdGVkIHNp
emUuCi0gICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgLy8gR28gZG93biBhIGxldmVsIGFuZCBk
ZXRlcm1pbmUgaWYgdGhlIGxlZnQgb3IgcmlnaHQKLSAgICAgICAgLy8gc3ViLXRyZWUgY29udGFp
bnMgdGhlIGJlc3QgY2hhbmNlIG9mIGFsbG9jYXRpb24uCi0gICAgICAgIE5vZGUqIGxlZnQgPSBu
b2RlLT5sZWZ0OwotICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBp
ZiAobGVmdCAmJiBmaXRzV2l0aGluKHNpemUsIGxlZnQtPmxhcmdlc3RGcmVlKSkgewotICAgICAg
ICAgICAgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdlc3RGcmVlKSkg
ewotICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgpIDwgcmlnaHQt
Pmxhcmdlc3RGcmVlLndpZHRoKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgbGVmdC0+bGFyZ2Vz
dEZyZWUuaGVpZ2h0KCkgPCByaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gVGhlIGxhcmdlc3RGcmVlIHZhbHVlcyBtYXkgYmUgYSBsaXR0bGUgb3Zl
cnNpemVkLAotICAgICAgICAgICAgICAgICAgICAvLyBzbyB0cnkgdGhlIGxlZnQgc3ViLXRyZWUg
YW5kIHRoZW4gdGhlIHJpZ2h0IHN1Yi10cmVlLgotICAgICAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCA9IGFsbG9jYXRlRnJvbU5vZGUoc2l6ZSwgbGVmdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChwb2ludC54KCkgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBwb2ludDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlRnJvbU5v
ZGUoc2l6ZSwgcmlnaHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub2Rl
ID0gcmlnaHQ7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBub2RlID0gbGVm
dDsKLSAgICAgICAgfSBlbHNlIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5s
YXJnZXN0RnJlZSkpCi0gICAgICAgICAgICBub2RlID0gcmlnaHQ7Ci0gICAgICAgIGVsc2UgaWYg
KGxlZnQgfHwgcmlnaHQpIHsKLSAgICAgICAgICAgIC8vIE5laXRoZXIgc3ViLW5vZGUgaGFzIGVu
b3VnaCBzcGFjZSB0byBhbGxvY2F0ZSBmcm9tLgotICAgICAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkludFBvaW50KC0xLCAtMSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihzaXplLCBu
b2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAgICAgIC8vIERvIHdlIG5lZWQgdG8gc3BsaXQg
dGhpcyBub2RlIGludG8gc21hbGxlciBwaWVjZXM/Ci0gICAgICAgICAgICBTcGxpdCBzcGxpdDsK
LSAgICAgICAgICAgIGlmIChmaXRzV2l0aGluKFdlYkNvcmU6OkludFNpemUoc2l6ZS53aWR0aCgp
ICogMiwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAg
ICAgICAgICAvLyBTcGxpdCBpbiBlaXRoZXIgZGlyZWN0aW9uOiBjaG9vc2UgdGhlIGludmVyc2Ug
b2YKLSAgICAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUncyBzcGxpdCBkaXJlY3Rpb24g
dG8gdHJ5IHRvIGJhbGFuY2UKLSAgICAgICAgICAgICAgICAvLyBvdXQgdGhlIHdhc3RlZCBzcGFj
ZSBhcyBmdXJ0aGVyIHN1YmRpdmlzaW9ucyBoYXBwZW4uCi0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPnBhcmVudAotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLT5wYXJlbnQtPmxlZnQtPnJl
Y3QueCgpID09IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3QueCgpKQotICAgICAgICAgICAgICAg
ICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUtPnBh
cmVudCkKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5yZWN0LndpZHRoKCkgPj0gbm9kZS0+cmVjdC5oZWlnaHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7Ci0gICAgICAgICAgICB9
IGVsc2UgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6ZShzaXplLndpZHRoKCkgKiAyLCBz
aXplLmhlaWdodCgpKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
U3BsaXQgYWxvbmcgdGhlIFggZGlyZWN0aW9uLgotICAgICAgICAgICAgICAgIHNwbGl0ID0gU3Bs
aXRPblg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oV2ViQ29yZTo6SW50U2l6
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgYWxvbmcgdGhlIFkgZGlyZWN0aW9uLgotICAgICAg
ICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIENhbm5vdCBzcGxpdCBmdXJ0aGVyIC0gYWxsb2NhdGUgdGhpcyBub2RlLgot
ICAgICAgICAgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gV2ViQ29yZTo6SW50U2l6ZSgwLCAw
KTsKLSAgICAgICAgICAgICAgICB1cGRhdGVMYXJnZXN0RnJlZShub2RlKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZS0+cmVjdC5sb2NhdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBTcGxpdCB0aGUgbm9kZSwgdGhlbiBnbyBhcm91bmQgYWdhaW4gdXNpbmcgdGhl
IGxlZnQgc3ViLXRyZWUuCi0gICAgICAgICAgICBub2RlID0gc3BsaXROb2RlKG5vZGUsIHNwbGl0
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIENhbm5vdCBwb3NzaWJseSBmaXQg
aW50byB0aGlzIG5vZGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gV2ViQ29yZTo6SW50UG9pbnQoLTEsIC0xKTsKLX0KLQotR2VuZXJhbEFyZWFBbGxv
Y2F0b3I6Ok5vZGUqIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUKLSAgICAoTm9kZSog
bm9kZSwgU3BsaXQgc3BsaXQpCi17Ci0gICAgTm9kZSogbGVmdCA9IG5ldyBOb2RlKCk7Ci0gICAg
Tm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOwotICAgIG1fbm9kZUNvdW50ICs9IDI7Ci0gICAgbGVm
dC0+cGFyZW50ID0gbm9kZTsKLSAgICBsZWZ0LT5sZWZ0ID0gMDsKLSAgICBsZWZ0LT5yaWdodCA9
IDA7Ci0gICAgcmlnaHQtPnBhcmVudCA9IG5vZGU7Ci0gICAgcmlnaHQtPmxlZnQgPSAwOwotICAg
IHJpZ2h0LT5yaWdodCA9IDA7Ci0gICAgbm9kZS0+bGVmdCA9IGxlZnQ7Ci0gICAgbm9kZS0+cmln
aHQgPSByaWdodDsKLQotICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgewotICAgICAgICBsZWZ0
LT5yZWN0ID0gV2ViQ29yZTo6SW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55KCks
Ci0gICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgp
KTsKLSAgICAgICAgcmlnaHQtPnJlY3QgPSBXZWJDb3JlOjpJbnRSZWN0KGxlZnQtPnJlY3QubWF4
WCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIs
IG5vZGUtPnJlY3QuaGVpZ2h0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlZnQtPnJlY3Qg
PSBXZWJDb3JlOjpJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAg
ICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOwotICAg
ICAgICByaWdodC0+cmVjdCA9IFdlYkNvcmU6OkludFJlY3Qobm9kZS0+cmVjdC54KCksIGxlZnQt
PnJlY3QubWF4WSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0
LmhlaWdodCgpIC8gMik7Ci0gICAgfQotCi0gICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5y
ZWN0LnNpemUoKTsKLSAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7
Ci0gICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSByaWdodC0+bGFyZ2VzdEZyZWU7Ci0gICAgcmV0dXJu
IGxlZnQ7Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVl
KE5vZGUqIG5vZGUpCi17Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgewotICAg
ICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IFdlYkNvcmU6OkludFNpemUoCi0gICAgICAgICAgICBz
dGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgpLCBub2RlLT5yaWdodC0+bGFy
Z2VzdEZyZWUud2lkdGgoKSksCi0gICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJn
ZXN0RnJlZS5oZWlnaHQoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKQotICAg
ICAgICAgICAgKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnJlbGVh
c2UoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBMb2NhdGUgdGhlIG5v
ZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4KLSAgICBOb2RlKiBub2RlID0g
bV9yb290OwotICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gcmVjdC5sb2NhdGlvbigpOwot
ICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChub2RlLT5sZWZ0ICYmIG5vZGUtPmxlZnQt
PnJlY3QuY29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmxlZnQ7Ci0g
ICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT5yZWN0LmNvbnRhaW5z
KHBvaW50KSkKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKLSAgICAgICAgZWxzZSBp
ZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2ludCBpcyBjb21wbGV0ZWx5IG91dHNp
ZGUgdGhlIHRyZWUuCi0gICAgfQotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVuIHdvcmsgdXB3YXJkcyB0aHJvdWdo
IHRoZSB0cmVlCi0gICAgLy8gcmVjb21iaW5pbmcgYW5kIGRlbGV0aW5nIG5vZGVzIHVudGlsIHdl
IHJlYWNoIGEgc2libGluZwotICAgIC8vIHRoYXQgaXMgc3RpbGwgYWxsb2NhdGVkLgotICAgIG5v
ZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7Ci0gICAgd2hpbGUgKG5vZGUtPnBh
cmVudCkgewotICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0ID09IG5vZGUpIHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5wYXJl
bnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQtPmxhcmdlc3RGcmVl
ICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKLSAgICAgICAgZnJl
ZU5vZGUobm9kZS0+bGVmdCk7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsKLSAgICAg
ICAgbV9ub2RlQ291bnQgLT0gMjsKLSAgICAgICAgbm9kZS0+bGVmdCA9IDA7Ci0gICAgICAgIG5v
ZGUtPnJpZ2h0ID0gMDsKLSAgICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNp
emUoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHRoZSByZXN0IG9mIG91ciBhbmNlc3RvcnMgaGF2
ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBmcmVlIHNpemUiLgotICAgIHVwZGF0ZUxhcmdlc3RGcmVl
KG5vZGUpOwotfQotCi1pbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9kZSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlCi0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9B
cmVhQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDE2NTZiYjhhZTEwMDY4OGEzNDY2MjZlNGQzMzMzYzYwYjllODkzODcuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
LSAqCi0gKi8KLQotI2lmbmRlZiBBcmVhQWxsb2NhdG9yX2gKLSNkZWZpbmUgQXJlYUFsbG9jYXRv
cl9oCi0KLSNpbmNsdWRlIDxJbnRQb2ludC5oPgotI2luY2x1ZGUgPEludFJlY3QuaD4KLSNpbmNs
dWRlIDxJbnRTaXplLmg+Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWlubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJlcikKLXsK
LSAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28gZm9yIGFu
IGludGVnZXIuCi0gICAgLS1udW1iZXI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAxOwotICAg
IG51bWJlciB8PSBudW1iZXIgPj4gMjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7Ci0gICAg
bnVtYmVyIHw9IG51bWJlciA+PiA4OwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7Ci0gICAg
bnVtYmVyKys7Ci0gICAgcmV0dXJuIG51bWJlcjsKLX0KLQotaW5saW5lIEludFNpemUgbmV4dFBv
d2VyT2ZUd28oY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShuZXh0
UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhlaWdodCgpKSk7
Ci19Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFz
cyBBcmVhQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBcmVhQWxsb2NhdG9yKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2aXJ0dWFsIH5BcmVhQWxsb2NhdG9yKCk7Ci0K
LSAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQot
ICAgIFdlYkNvcmU6OkludFNpemUgbWluaW11bUFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X21pbkFsbG9jOyB9Ci0gICAgdm9pZCBzZXRNaW5pbXVtQWxsb2NhdGlvbihjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzaXplKSB7IG1fbWluQWxsb2MgPSBzaXplOyB9Ci0KLSAgICBXZWJDb3JlOjpJ
bnRTaXplIG1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9Ci0gICAgdm9pZCBzZXRN
YXJnaW4oY29uc3QgV2ViQ29yZTo6SW50U2l6ZSAmbWFyZ2luKSB7IG1fbWFyZ2luID0gbWFyZ2lu
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsK
LSAgICB2b2lkIGV4cGFuZEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLQotICAgIHZpcnR1
YWwgV2ViQ29yZTo6SW50UmVjdCBhbGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQot
ICAgIHZpcnR1YWwgaW50IG92ZXJoZWFkKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBXZWJD
b3JlOjpJbnRTaXplIG1fc2l6ZTsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWluQWxsb2M7Ci0g
ICAgV2ViQ29yZTo6SW50U2l6ZSBtX21hcmdpbjsKLQotICAgIFdlYkNvcmU6OkludFNpemUgcm91
bmRBbGxvY2F0aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKLX07Ci0KLWNsYXNz
IEdlbmVyYWxBcmVhQWxsb2NhdG9yIDogcHVibGljIEFyZWFBbGxvY2F0b3IgewotcHVibGljOgot
ICAgIGV4cGxpY2l0IEdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUm
KTsKLSAgICB2aXJ0dWFsIH5HZW5lcmFsQXJlYUFsbG9jYXRvcigpOwotCi0gICAgdm9pZCBleHBh
bmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIFdlYkNvcmU6OkludFJlY3QgYWxsb2Nh
dGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwotICAgIHZvaWQgcmVsZWFzZShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0Jik7Ci0gICAgaW50IG92ZXJoZWFkKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0g
ICAgZW51bSBTcGxpdCB7IFNwbGl0T25YLCBTcGxpdE9uWSB9OwotCi0gICAgc3RydWN0IE5vZGUg
ewotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Q7Ci0gICAgICAgIFdlYkNvcmU6OkludFNp
emUgbGFyZ2VzdEZyZWU7Ci0gICAgICAgIE5vZGUqIHBhcmVudDsKLSAgICAgICAgTm9kZSogbGVm
dDsKLSAgICAgICAgTm9kZSogcmlnaHQ7Ci0gICAgfTsKLQotICAgIE5vZGUqIG1fcm9vdDsKLSAg
ICBpbnQgbV9ub2RlQ291bnQ7Ci0KLSAgICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7Ci0g
ICAgV2ViQ29yZTo6SW50UG9pbnQgYWxsb2NhdGVGcm9tTm9kZShjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiwgTm9kZSopOwotICAgIE5vZGUqIHNwbGl0Tm9kZShOb2RlKiwgU3BsaXQpOwotICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jZW5kaWYg
Ly8gQXJlYUFsbG9jYXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYzNkNzhiMThmMWIwODc5OGU2NWE1OTE4YTRmMjA0MjAzYWYxMDA1NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MSArMCwwIEBACi0vKgotIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIENvcHlyaWdo
dCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
I2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oIgotCi0jaW5jbHVkZSAiQmFja2lu
Z1N0b3JlLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNzYWdl
cy5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgotI2luY2x1ZGUgIkZsb2F0UXVhZC5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgotI2luY2x1ZGUg
IlBhZ2UuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1
ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2lmbmRlZiBOREVCVUcKLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hh
bmdlLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIENvb3JkaW5h
dGVkTGF5ZXJJRCB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChHcmFwaGljc0xheWVyKiBsYXllcikKLXsK
LSAgICByZXR1cm4gbGF5ZXIgPyB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihsYXllciktPmlk
KCkgOiAwOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlTGF5
ZXJTdGF0ZSgpCi17Ci0gICAgbV9zaG91bGRTeW5jTGF5ZXJTdGF0ZSA9IHRydWU7Ci0gICAgaWYg
KGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUFuaW1hdGlvbnMo
KQotewotICAgIG1fc2hvdWxkU3luY0FuaW1hdGlvbnMgPSB0cnVlOwotICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Ci19Ci0KLXZv
aWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpkaWRDaGFuZ2VDaGlsZHJlbigpCi17Ci0gICAg
bV9zaG91bGRTeW5jQ2hpbGRyZW4gPSB0cnVlOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAg
Y2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Ci19Ci0KLSNpZiBFTkFCTEUoQ1NT
X0ZJTFRFUlMpCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlRmlsdGVy
cygpCi17Ci0gICAgbV9zaG91bGRTeW5jRmlsdGVycyA9IHRydWU7Ci0gICAgaWYgKGNsaWVudCgp
KQotICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlzKTsKLX0KLSNlbmRp
ZgotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6ZGlkQ2hhbmdlSW1hZ2VCYWNraW5n
KCkKLXsKLSAgICBtX3Nob3VsZFN5bmNJbWFnZUJhY2tpbmcgPSB0cnVlOwotICAgIGlmIChjbGll
bnQoKSkKLSAgICAgICAgY2xpZW50KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRTaG91bGRVcGRhdGVWaXNpYmxlUmVj
dCgpCi17Ci0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IHRydWU7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICB0b0Nvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbigpW2ldKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJs
ZVJlY3QoKTsKLSAgICBpZiAocmVwbGljYUxheWVyKCkpCi0gICAgICAgIHRvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyKHJlcGxpY2FMYXllcigpKS0+c2V0U2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Qo
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmRpZENoYW5nZUdlb21ldHJ5
KCkKLXsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgc2V0U2hvdWxkVXBkYXRlVmlz
aWJsZVJlY3QoKTsKLX0KLQotQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQotICAgIDogR3JhcGhpY3NM
YXllcihjbGllbnQpCi0jaWZuZGVmIE5ERUJVRwotICAgICwgbV9pc1B1cmdpbmcoZmFsc2UpCi0j
ZW5kaWYKLSAgICAsIG1fc2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QodHJ1ZSkKLSAgICAsIG1fc2hv
dWxkU3luY0xheWVyU3RhdGUodHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0NoaWxkcmVuKHRydWUp
Ci0gICAgLCBtX3Nob3VsZFN5bmNGaWx0ZXJzKHRydWUpCi0gICAgLCBtX3Nob3VsZFN5bmNJbWFn
ZUJhY2tpbmcodHJ1ZSkKLSAgICAsIG1fc2hvdWxkU3luY0FuaW1hdGlvbnModHJ1ZSkKLSAgICAs
IG1fZml4ZWRUb1ZpZXdwb3J0KGZhbHNlKQotICAgICwgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFk
anVzdG1lbnQoZmFsc2UpCi0gICAgLCBtX3BlbmRpbmdWaXNpYmxlUmVjdEFkanVzdG1lbnQoZmFs
c2UpCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgLCBtX2lzVmFsaWRDYW52YXMoZmFs
c2UpCi0gICAgLCBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24oTm9uZSkKLSNlbmRpZgotICAgICwg
bV9jb29yZGluYXRvcigwKQotICAgICwgbV9jb21wb3NpdGVkTmF0aXZlSW1hZ2VQdHIoMCkKLSAg
ICAsIG1fY2FudmFzUGxhdGZvcm1MYXllcigwKQotICAgICwgbV9hbmltYXRpb25TdGFydGVkVGlt
ZXIodGhpcywgJkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVy
RmlyZWQpCi17Ci0gICAgc3RhdGljIENvb3JkaW5hdGVkTGF5ZXJJRCBuZXh0TGF5ZXJJRCA9IDE7
Ci0gICAgbV9pZCA9IG5leHRMYXllcklEKys7Ci19Ci0KLUNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6fkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllcigpCi17Ci0gICAgaWYgKG1fY29vcmRpbmF0b3Ip
IHsKLSAgICAgICAgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgICAgIG1fY29vcmRpbmF0b3It
PmRldGFjaExheWVyKHRoaXMpOwotICAgIH0KLSAgICBBU1NFUlQoIW1fY29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmcgJiYgIW1fbWFpbkJhY2tpbmdTdG9yZSk7Ci0gICAgd2lsbEJlRGVzdHJveWVkKCk7
Ci19Ci0KLWJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRDaGlsZHJlbihjb25zdCBW
ZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZHJlbikKLXsKLSAgICBib29sIG9rID0gR3JhcGhp
Y3NMYXllcjo6c2V0Q2hpbGRyZW4oY2hpbGRyZW4pOwotICAgIGlmICghb2spCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQoR3JhcGhpY3NMYXll
ciogbGF5ZXIpCi17Ci0gICAgR3JhcGhpY3NMYXllcjo6YWRkQ2hpbGQobGF5ZXIpOwotICAgIGRp
ZENoYW5nZUNoaWxkcmVuKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjph
ZGRDaGlsZEF0SW5kZXgoR3JhcGhpY3NMYXllciogbGF5ZXIsIGludCBpbmRleCkKLXsKLSAgICBH
cmFwaGljc0xheWVyOjphZGRDaGlsZEF0SW5kZXgobGF5ZXIsIGluZGV4KTsKLSAgICBkaWRDaGFu
Z2VDaGlsZHJlbigpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRkQ2hp
bGRBYm92ZShHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGluZykKLXsK
LSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEFib3ZlKGxheWVyLCBzaWJsaW5nKTsKLSAgICBk
aWRDaGFuZ2VDaGlsZHJlbigpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
YWRkQ2hpbGRCZWxvdyhHcmFwaGljc0xheWVyKiBsYXllciwgR3JhcGhpY3NMYXllciogc2libGlu
ZykKLXsKLSAgICBHcmFwaGljc0xheWVyOjphZGRDaGlsZEJlbG93KGxheWVyLCBzaWJsaW5nKTsK
LSAgICBkaWRDaGFuZ2VDaGlsZHJlbigpOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6cmVwbGFjZUNoaWxkKEdyYXBoaWNzTGF5ZXIqIG9sZENoaWxkLCBHcmFwaGljc0xheWVy
KiBuZXdDaGlsZCkKLXsKLSAgICBib29sIG9rID0gR3JhcGhpY3NMYXllcjo6cmVwbGFjZUNoaWxk
KG9sZENoaWxkLCBuZXdDaGlsZCk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGRpZENoYW5nZUNoaWxkcmVuKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZW1vdmVGcm9tUGFyZW50KCkKLXsKLSAgICBpZiAo
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKiBwYXJlbnRMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyKHBhcmVudCgpKSkKLSAgICAgICAgcGFyZW50TGF5ZXItPmRpZENoYW5nZUNoaWxk
cmVuKCk7Ci0gICAgR3JhcGhpY3NMYXllcjo6cmVtb3ZlRnJvbVBhcmVudCgpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0UG9zaXRpb24oY29uc3QgRmxvYXRQb2ludCYg
cCkKLXsKLSAgICBpZiAocG9zaXRpb24oKSA9PSBwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBH
cmFwaGljc0xheWVyOjpzZXRQb3NpdGlvbihwKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0QW5jaG9yUG9pbnQoY29uc3Qg
RmxvYXRQb2ludDNEJiBwKQotewotICAgIGlmIChhbmNob3JQb2ludCgpID09IHApCi0gICAgICAg
IHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldEFuY2hvclBvaW50KHApOwotICAgIGRp
ZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpz
ZXRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAodGhpcy0+c2l6ZSgpID09
IHNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNldFNpemUoc2l6
ZSk7Ci0KLSAgICBpZiAobWFza0xheWVyKCkpCi0gICAgICAgIG1hc2tMYXllcigpLT5zZXRTaXpl
KHNpemUpOwotICAgIGRpZENoYW5nZUdlb21ldHJ5KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyOjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQp
Ci17Ci0gICAgaWYgKHRyYW5zZm9ybSgpID09IHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdy
YXBoaWNzTGF5ZXI6OnNldFRyYW5zZm9ybSh0KTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwot
fQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q2hpbGRyZW5UcmFuc2Zvcm0o
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCi17Ci0gICAgaWYgKGNoaWxkcmVuVHJhbnNm
b3JtKCkgPT0gdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q2hp
bGRyZW5UcmFuc2Zvcm0odCk7Ci0gICAgZGlkQ2hhbmdlR2VvbWV0cnkoKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFByZXNlcnZlczNEKGJvb2wgYikKLXsKLSAgICBp
ZiAocHJlc2VydmVzM0QoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xh
eWVyOjpzZXRQcmVzZXJ2ZXMzRChiKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhib29sIGIpCi17
Ci0gICAgaWYgKG1hc2tzVG9Cb3VuZHMoKSA9PSBiKQotICAgICAgICByZXR1cm47Ci0gICAgR3Jh
cGhpY3NMYXllcjo6c2V0TWFza3NUb0JvdW5kcyhiKTsKLSAgICBkaWRDaGFuZ2VHZW9tZXRyeSgp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0RHJhd3NDb250ZW50KGJv
b2wgYikKLXsKLSAgICBpZiAoZHJhd3NDb250ZW50KCkgPT0gYikKLSAgICAgICAgcmV0dXJuOwot
ICAgIEdyYXBoaWNzTGF5ZXI6OnNldERyYXdzQ29udGVudChiKTsKLQotICAgIGRpZENoYW5nZUxh
eWVyU3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRl
bnRzVmlzaWJsZShib29sIGIpCi17Ci0gICAgaWYgKGNvbnRlbnRzQXJlVmlzaWJsZSgpID09IGIp
Ci0gICAgICAgIHJldHVybjsKLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Zpc2libGUo
Yik7Ci0gICAgaWYgKG1hc2tMYXllcigpKQotICAgICAgICBtYXNrTGF5ZXIoKS0+c2V0Q29udGVu
dHNWaXNpYmxlKGIpOwotCi0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNPcGFxdWUoYm9vbCBiKQotewotICAg
IGlmIChjb250ZW50c09wYXF1ZSgpID09IGIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9t
YWluQmFja2luZ1N0b3JlKQotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPnNldFN1cHBvcnRz
QWxwaGEoIWIpOwotICAgIEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzT3BhcXVlKGIpOwotICAg
IGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5
ZXI6OnNldEJhY2tmYWNlVmlzaWJpbGl0eShib29sIGIpCi17Ci0gICAgaWYgKGJhY2tmYWNlVmlz
aWJpbGl0eSgpID09IGIpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBoaWNzTGF5ZXI6OnNl
dEJhY2tmYWNlVmlzaWJpbGl0eShiKTsKLSAgICBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkp
Ci17Ci0gICAgaWYgKHRoaXMtPm9wYWNpdHkoKSA9PSBvcGFjaXR5KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRPcGFjaXR5KG9wYWNpdHkpOwotICAgIGRpZENoYW5n
ZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENv
bnRlbnRzUmVjdChjb25zdCBJbnRSZWN0JiByKQotewotICAgIGlmIChjb250ZW50c1JlY3QoKSA9
PSByKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHcmFwaGljc0xheWVyOjpzZXRDb250ZW50c1Jl
Y3Qocik7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNOZWVkc0Rpc3BsYXkoKQotewotI2lmIFVTRShHUkFQ
SElDU19TVVJGQUNFKQotICAgIGlmIChtX2NhbnZhc1BsYXRmb3JtTGF5ZXIpCi0gICAgICAgIG1f
cGVuZGluZ0NhbnZhc09wZXJhdGlvbiB8PSBTeW5jQ2FudmFzOwotI2VuZGlmCi0KLSAgICBpZiAo
Y2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwot
Ci0gICAgYWRkUmVwYWludFJlY3QoY29udGVudHNSZWN0KCkpOwotfQotCi12b2lkIENvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKQotewotI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIGlmIChtX2NhbnZh
c1BsYXRmb3JtTGF5ZXIpIHsKLSAgICAgICAgQVNTRVJUKG1fY2FudmFzVG9rZW4uaXNWYWxpZCgp
KTsKLSAgICAgICAgaWYgKCFwbGF0Zm9ybUxheWVyKSB7Ci0gICAgICAgICAgICBtX3BlbmRpbmdD
YW52YXNPcGVyYXRpb24gfD0gRGVzdHJveUNhbnZhczsKLSAgICAgICAgICAgIG1fcGVuZGluZ0Nh
bnZhc09wZXJhdGlvbiAmPSB+Q3JlYXRlQ2FudmFzOwotICAgICAgICB9ICBlbHNlIGlmICgobV9j
YW52YXNTaXplICE9IHBsYXRmb3JtTGF5ZXItPnBsYXRmb3JtTGF5ZXJTaXplKCkpIHx8IChtX2Nh
bnZhc1Rva2VuICE9IHBsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCkpKSB7Ci0g
ICAgICAgICAgICAvLyBtX2NhbnZhc1Rva2VuIGNhbiBiZSBkaWZmZXJlbnQgdG8gcGxhdGZvcm1M
YXllci0+Z3JhcGhpY3NTdXJmYWNlVG9rZW4oKSwgZXZlbiBpZiBtX2NhbnZhc1BsYXRmb3JtTGF5
ZXIgZXF1YWxzIHBsYXRmb3JtTGF5ZXIuCi0gICAgICAgICAgICBtX3BlbmRpbmdDYW52YXNPcGVy
YXRpb24gfD0gUmVjcmVhdGVDYW52YXM7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAocGxhdGZvcm1MYXllcikKLSAgICAgICAgICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlv
biB8PSBDcmVhdGVBbmRTeW5jQ2FudmFzOwotICAgIH0KLQotICAgIG1fY2FudmFzUGxhdGZvcm1M
YXllciA9IHBsYXRmb3JtTGF5ZXI7Ci0gICAgLy8gbV9jYW52YXNUb2tlbiBpcyB1cGRhdGVkIG9u
bHkgaGVyZS4gSW4gZGV0YWlsLCB3aGVuIEdyYXBoaWNzQ29udGV4dDNEIGlzIGNoYW5nZWQgb3Ig
cmVzaGFwZWQsIG1fY2FudmFzVG9rZW4gaXMgY2hhbmdlZCBhbmQgc2V0Q29udGVudHNUb0NhbnZh
cygpIGlzIGFsd2F5cyBjYWxsZWQuCi0gICAgbV9jYW52YXNTaXplID0gbV9jYW52YXNQbGF0Zm9y
bUxheWVyID8gbV9jYW52YXNQbGF0Zm9ybUxheWVyLT5wbGF0Zm9ybUxheWVyU2l6ZSgpIDogSW50
U2l6ZSgpOwotICAgIG1fY2FudmFzVG9rZW4gPSBtX2NhbnZhc1BsYXRmb3JtTGF5ZXIgPyBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXItPmdyYXBoaWNzU3VyZmFjZVRva2VuKCkgOiBHcmFwaGljc1N1cmZh
Y2VUb2tlbigpOwotICAgIEFTU0VSVCghKCFtX2NhbnZhc1Rva2VuLmlzVmFsaWQoKSAmJiBtX2Nh
bnZhc1BsYXRmb3JtTGF5ZXIpKTsKLQotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgY2xpZW50
KCktPm5vdGlmeUZsdXNoUmVxdWlyZWQodGhpcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShw
bGF0Zm9ybUxheWVyKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotYm9v
bCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldEZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgbmV3RmlsdGVycykKLXsKLSAgICBpZiAoZmlsdGVycygpID09IG5ld0ZpbHRlcnMpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGRpZENoYW5nZUZpbHRlcnMoKTsKLSAgICByZXR1cm4g
R3JhcGhpY3NMYXllcjo6c2V0RmlsdGVycyhuZXdGaWx0ZXJzKTsKLX0KLSNlbmRpZgotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3Qg
Q29sb3ImIGNvbG9yKQotewotICAgIGlmIChtX2xheWVySW5mby5zb2xpZENvbG9yID09IGNvbG9y
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9sYXllckluZm8uc29saWRDb2xvciA9IGNvbG9yOwot
ICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnNldFNob3dEZWJ1Z0JvcmRlcihib29sIHNob3cpCi17Ci0gICAgaWYgKGlzU2hvd2lu
Z0RlYnVnQm9yZGVyKCkgPT0gc2hvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NM
YXllcjo6c2V0U2hvd0RlYnVnQm9yZGVyKHNob3cpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUo
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFNob3dSZXBhaW50Q291
bnRlcihib29sIHNob3cpCi17Ci0gICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgPT0g
c2hvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0U2hvd1JlcGFp
bnRDb3VudGVyKHNob3cpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvbnRlbnRzVG9JbWFnZShJbWFnZSogaW1hZ2Up
Ci17Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmV3TmF0aXZlSW1hZ2VQdHIgPSBpbWFnZSA/IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIDogMDsKLSAgICBpZiAobmV3TmF0aXZlSW1h
Z2VQdHIpIHsKLSAgICAgICAgLy8gVGhpcyBjb2RlIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQg
cG9pbnRlciBlcXVhbGl0eSBvbiBhIE5hdGl2ZUltYWdlUHRyIGlzIGEgdmFsaWQgd2F5IHRvIHRl
bGwgaWYgdGhlIGltYWdlIGlzIGNoYW5nZWQuCi0gICAgICAgIC8vIFRoaXMgYXNzdW1wdGlvbiBp
cyB0cnVlIGluIFF0LCBHVEsgYW5kIEVGTC4KLSAgICAgICAgaWYgKG5ld05hdGl2ZUltYWdlUHRy
ID09IG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIG1fY29tcG9zaXRlZEltYWdlID0gaW1hZ2U7Ci0gICAgICAgIG1fY29tcG9zaXRlZE5h
dGl2ZUltYWdlUHRyID0gbmV3TmF0aXZlSW1hZ2VQdHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9jb21wb3NpdGVkSW1hZ2UgPSAwOwotICAgICAgICBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0
ciA9IDA7Ci0gICAgfQotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0Q29udGVudHNUb0ltYWdlKGlt
YWdlKTsKLSAgICBkaWRDaGFuZ2VJbWFnZUJhY2tpbmcoKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnNldE1hc2tMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKLXsKLSAg
ICBpZiAobGF5ZXIgPT0gbWFza0xheWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdyYXBo
aWNzTGF5ZXI6OnNldE1hc2tMYXllcihsYXllcik7Ci0KLSAgICBpZiAoIWxheWVyKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBsYXllci0+c2V0U2l6ZShzaXplKCkpOwotICAgIGxheWVyLT5zZXRD
b250ZW50c1Zpc2libGUoY29udGVudHNBcmVWaXNpYmxlKCkpOwotICAgIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciogY29vcmRpbmF0ZWRMYXllciA9IHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVy
KGxheWVyKTsKLSAgICBjb29yZGluYXRlZExheWVyLT5kaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0g
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2hvdWxkRGlyZWN0bHlDb21wb3NpdGVJbWFnZShJbWFnZSogaW1hZ2UpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmlzQml0bWFwSW1hZ2UoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgZW51bSB7IGtNYXhEaW1lbnN0aW9uRm9yRGlyZWN0Q29tcG9zaXRp
bmcgPSAyMDAwIH07Ci0gICAgaWYgKGltYWdlLT53aWR0aCgpID4ga01heERpbWVuc3Rpb25Gb3JE
aXJlY3RDb21wb3NpdGluZyB8fCBpbWFnZS0+aGVpZ2h0KCkgPiBrTWF4RGltZW5zdGlvbkZvckRp
cmVjdENvbXBvc2l0aW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldFJlcGxpY2F0ZWRCeUxh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQotewotICAgIGlmIChsYXllciA9PSByZXBsaWNhTGF5
ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3JhcGhpY3NMYXllcjo6c2V0UmVwbGljYXRl
ZEJ5TGF5ZXIobGF5ZXIpOwotICAgIGRpZENoYW5nZUxheWVyU3RhdGUoKTsKLX0KLQotdm9pZCBD
b29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldE5lZWRzRGlzcGxheSgpCi17Ci0gICAgc2V0TmVl
ZHNEaXNwbGF5SW5SZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSkpOwotfQotCi12
b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlKQotICAgICAg
ICBtX21haW5CYWNraW5nU3RvcmUtPmludmFsaWRhdGUoSW50UmVjdChyZWN0KSk7Ci0KLSAgICBk
aWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0KLSAgICBhZGRSZXBhaW50UmVjdChyZWN0KTsKLX0KLQot
Q29vcmRpbmF0ZWRMYXllcklEIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2lkOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
Zmx1c2hDb21wb3NpdGluZ1N0YXRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAo
IW1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSkgewotICAgICAgICBpZiAo
Y2xpZW50KCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+bm90aWZ5Rmx1c2hSZXF1aXJlZCh0aGlz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXIqIG1hc2sgPSB0b0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihtYXNrTGF5ZXIoKSkpCi0g
ICAgICAgIG1hc2stPmZsdXNoQ29tcG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQot
ICAgIGlmIChDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIqIHJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihyZXBsaWNhTGF5ZXIoKSkpCi0gICAgICAgIHJlcGxpY2EtPmZsdXNoQ29t
cG9zaXRpbmdTdGF0ZUZvclRoaXNMYXllck9ubHkoKTsKLQotICAgIG1fY29vcmRpbmF0b3ItPnN5
bmNGaXhlZExheWVycygpOwotCi0gICAgZmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVy
T25seSgpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsg
KytpKQotICAgICAgICBjaGlsZHJlbigpW2ldLT5mbHVzaENvbXBvc2l0aW5nU3RhdGUocmVjdCk7
Ci19Ci0KLUNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciogdG9Db29yZGluYXRlZEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENvb3Jk
aW5hdGVkR3JhcGhpY3NMYXllcio+KGxheWVyKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXI6OnN5bmNDaGlsZHJlbigpCi17Ci0gICAgaWYgKCFtX3Nob3VsZFN5bmNDaGlsZHJl
bikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0NoaWxkcmVuID0gZmFsc2U7Ci0g
ICAgVmVjdG9yPENvb3JkaW5hdGVkTGF5ZXJJRD4gY2hpbGRJRHM7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQotICAgICAgICBjaGlsZElEcy5hcHBl
bmQodG9Db29yZGluYXRlZExheWVySUQoY2hpbGRyZW4oKVtpXSkpOwotCi0gICAgbV9jb29yZGlu
YXRvci0+c3luY0xheWVyQ2hpbGRyZW4obV9pZCwgY2hpbGRJRHMpOwotfQotCi0jaWYgRU5BQkxF
KENTU19GSUxURVJTKQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnN5bmNGaWx0ZXJz
KCkKLXsKLSAgICBpZiAoIW1fc2hvdWxkU3luY0ZpbHRlcnMpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX3Nob3VsZFN5bmNGaWx0ZXJzID0gZmFsc2U7Ci0gICAgbV9jb29yZGluYXRvci0+c3luY0xh
eWVyRmlsdGVycyhtX2lkLCBmaWx0ZXJzKCkpOwotfQotI2VuZGlmCi0KLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzeW5jSW1hZ2VCYWNraW5nKCkKLXsKLSAgICBpZiAoIW1fc2hvdWxk
U3luY0ltYWdlQmFja2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0ltYWdl
QmFja2luZyA9IGZhbHNlOwotCi0gICAgaWYgKG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyKSB7
Ci0gICAgICAgIEFTU0VSVCghc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpKTsKLSAgICAgICAgQVNT
RVJUKG1fY29tcG9zaXRlZEltYWdlKTsKLQotICAgICAgICBib29sIGltYWdlSW5zdGFuY2VSZXBs
YWNlZCA9IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcgJiYgKG1fY29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmctPmlkKCkgIT0gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmdldENvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQobV9jb21wb3NpdGVkSW1hZ2UuZ2V0KCkpKTsKLSAgICAgICAgaWYgKGltYWdl
SW5zdGFuY2VSZXBsYWNlZCkKLSAgICAgICAgICAgIHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRl
ZCgpOwotCi0gICAgICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykgewotICAgICAg
ICAgICAgbV9jb29yZGluYXRlZEltYWdlQmFja2luZyA9IG1fY29vcmRpbmF0b3ItPmNyZWF0ZUlt
YWdlQmFja2luZ0lmTmVlZGVkKG1fY29tcG9zaXRlZEltYWdlLmdldCgpKTsKLSAgICAgICAgICAg
IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPmFkZEhvc3QodGhpcyk7Ci0gICAgICAgICAgICBt
X2xheWVySW5mby5pbWFnZUlEID0gbV9jb29yZGluYXRlZEltYWdlQmFja2luZy0+aWQoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmctPm1hcmtEaXJ0eSgp
OwotICAgIH0gZWxzZQotICAgICAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKLQot
ICAgIC8vIHN5bmNJbWFnZUJhY2tpbmcoKSBjaGFuZ2VkIG1fbGF5ZXJJbmZvLmltYWdlSUQuCi0g
ICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c3luY0xheWVyU3RhdGUoKQotewotICAgIGlmICghbV9zaG91bGRTeW5jTGF5ZXJTdGF0
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc2hvdWxkU3luY0xheWVyU3RhdGUgPSBmYWxzZTsK
LSAgICBtX2xheWVySW5mby5maXhlZFRvVmlld3BvcnQgPSBmaXhlZFRvVmlld3BvcnQoKTsKLQot
ICAgIG1fbGF5ZXJJbmZvLmJhY2tmYWNlVmlzaWJsZSA9IGJhY2tmYWNlVmlzaWJpbGl0eSgpOwot
ICAgIG1fbGF5ZXJJbmZvLmNoaWxkcmVuVHJhbnNmb3JtID0gY2hpbGRyZW5UcmFuc2Zvcm0oKTsK
LSAgICBtX2xheWVySW5mby5jb250ZW50c09wYXF1ZSA9IGNvbnRlbnRzT3BhcXVlKCk7Ci0gICAg
bV9sYXllckluZm8uY29udGVudHNSZWN0ID0gY29udGVudHNSZWN0KCk7Ci0gICAgbV9sYXllcklu
Zm8uZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50KCk7Ci0gICAgbV9sYXllckluZm8uY29udGVu
dHNWaXNpYmxlID0gY29udGVudHNBcmVWaXNpYmxlKCk7Ci0gICAgbV9sYXllckluZm8ubWFzayA9
IHRvQ29vcmRpbmF0ZWRMYXllcklEKG1hc2tMYXllcigpKTsKLSAgICBtX2xheWVySW5mby5tYXNr
c1RvQm91bmRzID0gbWFza3NUb0JvdW5kcygpOwotICAgIG1fbGF5ZXJJbmZvLm9wYWNpdHkgPSBv
cGFjaXR5KCk7Ci0gICAgbV9sYXllckluZm8ucHJlc2VydmVzM0QgPSBwcmVzZXJ2ZXMzRCgpOwot
ICAgIG1fbGF5ZXJJbmZvLnJlcGxpY2EgPSB0b0Nvb3JkaW5hdGVkTGF5ZXJJRChyZXBsaWNhTGF5
ZXIoKSk7Ci0gICAgbV9sYXllckluZm8udHJhbnNmb3JtID0gdHJhbnNmb3JtKCk7Ci0KLSAgICBt
X2xheWVySW5mby5hbmNob3JQb2ludCA9IG1fYWRqdXN0ZWRBbmNob3JQb2ludDsKLSAgICBtX2xh
eWVySW5mby5wb3MgPSBtX2FkanVzdGVkUG9zaXRpb247Ci0gICAgbV9sYXllckluZm8uc2l6ZSA9
IG1fYWRqdXN0ZWRTaXplOwotCi0gICAgbV9sYXllckluZm8uc2hvd0RlYnVnQm9yZGVycyA9IGlz
U2hvd2luZ0RlYnVnQm9yZGVyKCk7Ci0gICAgaWYgKG1fbGF5ZXJJbmZvLnNob3dEZWJ1Z0JvcmRl
cnMpCi0gICAgICAgIHVwZGF0ZURlYnVnSW5kaWNhdG9ycygpOwotICAgIG1fbGF5ZXJJbmZvLnNo
b3dSZXBhaW50Q291bnRlciA9IGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCk7Ci0KLSAgICBtX2Nv
b3JkaW5hdG9yLT5zeW5jTGF5ZXJTdGF0ZShtX2lkLCBtX2xheWVySW5mbyk7Ci19Ci0KLXZvaWQg
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzZXREZWJ1Z0JvcmRlcihjb25zdCBDb2xvciYgY29s
b3IsIGZsb2F0IHdpZHRoKQotewotICAgIEFTU0VSVChtX2xheWVySW5mby5zaG93RGVidWdCb3Jk
ZXJzKTsKLSAgICBtX2xheWVySW5mby5kZWJ1Z0JvcmRlckNvbG9yID0gY29sb3I7Ci0gICAgbV9s
YXllckluZm8uZGVidWdCb3JkZXJXaWR0aCA9IHdpZHRoOwotfQotCi12b2lkIENvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcjo6c3luY0FuaW1hdGlvbnMoKQotewotICAgIGlmICghbV9zaG91bGRTeW5j
QW5pbWF0aW9ucykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91bGRTeW5jQW5pbWF0aW9u
cyA9IGZhbHNlOwotCi0gICAgbV9jb29yZGluYXRvci0+c2V0TGF5ZXJBbmltYXRpb25zKG1faWQs
IG1fYW5pbWF0aW9ucyk7Ci19Ci0KLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLXZvaWQgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpzeW5jQ2FudmFzKCkKLXsKLSAgICBkZXN0cm95Q2FudmFz
SWZOZWVkZWQoKTsKLSAgICBjcmVhdGVDYW52YXNJZk5lZWRlZCgpOwotCi0gICAgaWYgKCEobV9w
ZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgU3luY0NhbnZhcykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+U3luY0NhbnZhczsKLQotICAgIGlmICgh
bV9pc1ZhbGlkQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nvb3JkaW5hdG9yLT5z
eW5jQ2FudmFzKG1faWQsIG1fY2FudmFzUGxhdGZvcm1MYXllcik7Ci19Ci0KLXZvaWQgQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyOjpkZXN0cm95Q2FudmFzSWZOZWVkZWQoKQotewotICAgIGlmICgh
KG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmIERlc3Ryb3lDYW52YXMpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pc1ZhbGlkQ2FudmFzKSB7Ci0gICAgICAgIG1fY29vcmRpbmF0b3It
PmRlc3Ryb3lDYW52YXMobV9pZCk7Ci0gICAgICAgIG1faXNWYWxpZENhbnZhcyA9IGZhbHNlOwot
ICAgIH0KLQotICAgIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiAmPSB+RGVzdHJveUNhbnZhczsK
LX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZUNhbnZhc0lmTmVlZGVk
KCkKLXsKLSAgICBpZiAoIShtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJiBDcmVhdGVDYW52YXMp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9jYW52YXNQbGF0Zm9ybUxheWVyKTsK
LSAgICBpZiAoIW1faXNWYWxpZENhbnZhcykgewotICAgICAgICBtX2Nvb3JkaW5hdG9yLT5jcmVh
dGVDYW52YXMobV9pZCwgbV9jYW52YXNQbGF0Zm9ybUxheWVyKTsKLSAgICAgICAgbV9pc1ZhbGlk
Q2FudmFzID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBtX3BlbmRpbmdDYW52YXNPcGVyYXRpb24gJj0g
fkNyZWF0ZUNhbnZhczsKLX0KLSNlbmRpZgotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpCi17Ci0gICAgQVNTRVJU
KG1fY29vcmRpbmF0b3ItPmlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0KLSAgICAvLyBTZXRz
IHRoZSB2YWx1ZXMuCi0gICAgY29tcHV0ZVBpeGVsQWxpZ25tZW50KG1fYWRqdXN0ZWRQb3NpdGlv
biwgbV9hZGp1c3RlZFNpemUsIG1fYWRqdXN0ZWRBbmNob3JQb2ludCwgbV9waXhlbEFsaWdubWVu
dE9mZnNldCk7Ci0KLSAgICBzeW5jSW1hZ2VCYWNraW5nKCk7Ci0gICAgc3luY0xheWVyU3RhdGUo
KTsKLSAgICBzeW5jQW5pbWF0aW9ucygpOwotICAgIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVS
ZWN0KCk7Ci0gICAgc3luY0NoaWxkcmVuKCk7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAg
IHN5bmNGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB1cGRhdGVDb250ZW50QnVmZmVycygpOwotI2lm
IFVTRShHUkFQSElDU19TVVJGQUNFKQotICAgIHN5bmNDYW52YXMoKTsKLSNlbmRpZgotfQotCi1i
b29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6aW1hZ2VCYWNraW5nVmlzaWJsZSgpCi17Ci0g
ICAgQVNTRVJUKG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcpOwotICAgIHJldHVybiB0aWxlZEJh
Y2tpbmdTdG9yZVZpc2libGVSZWN0KCkuaW50ZXJzZWN0cyhjb250ZW50c1JlY3QoKSk7Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVk
ZWQoKQotewotICAgIGlmICghbV9jb29yZGluYXRlZEltYWdlQmFja2luZykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwotICAgIG1fY29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmctPnJlbW92ZUhvc3QodGhpcyk7Ci0gICAgbV9jb29yZGluYXRlZEltYWdlQmFja2lu
Zy5jbGVhcigpOwotICAgIG1fbGF5ZXJJbmZvLmltYWdlSUQgPSBJbnZhbGlkQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRDsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVk
QmFja2luZ1N0b3JlUGFpbnRCZWdpbigpCi17Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyOjpzZXRSb290TGF5ZXIoYm9vbCBpc1Jvb3QpCi17Ci0gICAgbV9sYXllckluZm8uaXNS
b290TGF5ZXIgPSBpc1Jvb3Q7Ci0gICAgZGlkQ2hhbmdlTGF5ZXJTdGF0ZSgpOwotfQotCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9y
eVZlY3Rvcihjb25zdCBGbG9hdFBvaW50JiB0cmFqZWN0b3J5VmVjdG9yKQotewotICAgIGlmICgh
bV9tYWluQmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX21haW5CYWNraW5n
U3RvcmUtPnNldFRyYWplY3RvcnlWZWN0b3IodHJhamVjdG9yeVZlY3Rvcik7Ci0gICAgc2V0TmVl
ZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCi17Ci0gICAgaWYgKHNob3Vs
ZEhhdmVCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgbV9wZW5kaW5nQ29udGVudHNTY2FsZUFkanVz
dG1lbnQgPSB0cnVlOwotfQotCi1mbG9hdCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmVmZmVj
dGl2ZUNvbnRlbnRzU2NhbGUoKQotewotICAgIHJldHVybiBzZWxmT3JBbmNlc3RvckhhdmVOb25B
ZmZpbmVUcmFuc2Zvcm1zKCkgPyAxIDogZGV2aWNlU2NhbGVGYWN0b3IoKSAqIHBhZ2VTY2FsZUZh
Y3RvcigpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRqdXN0Q29udGVu
dHNTY2FsZSgpCi17Ci0gICAgQVNTRVJUKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSk7Ci0gICAg
aWYgKCFtX21haW5CYWNraW5nU3RvcmUgfHwgbV9tYWluQmFja2luZ1N0b3JlLT5jb250ZW50c1Nj
YWxlKCkgPT0gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBCZXR3ZWVuIGNyZWF0aW5nIHRoZSBuZXcgYmFja2luZyBzdG9yZSBhbmQgcGFpbnRpbmcg
dGhlIGNvbnRlbnQsCi0gICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZHJvcCB0aGUgcHJldmlvdXMg
b25lIGFzIHRoYXQgbWlnaHQgcmVzdWx0IGluCi0gICAgLy8gYnJpZWZseSBzZWVpbmcgZmxpY2tl
cmluZyBhcyB0aGUgb2xkIHRpbGVzIG1heSBiZSBkcm9wcGVkIGJlZm9yZQotICAgIC8vIHNvbWV0
aGluZyByZXBsYWNlcyB0aGVtLgotICAgIG1fcHJldmlvdXNCYWNraW5nU3RvcmUgPSBtX21haW5C
YWNraW5nU3RvcmUucmVsZWFzZSgpOwotCi0gICAgLy8gTm8gcmVhc29uIHRvIHNhdmUgdGhlIHBy
ZXZpb3VzIGJhY2tpbmcgc3RvcmUgZm9yIG5vbi12aXNpYmxlIGFyZWFzLgotICAgIG1fcHJldmlv
dXNCYWNraW5nU3RvcmUtPnJlbW92ZUFsbE5vblZpc2libGVUaWxlcygpOwotfQotCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6Y3JlYXRlQmFja2luZ1N0b3JlKCkKLXsKLSAgICBtX21h
aW5CYWNraW5nU3RvcmUgPSBhZG9wdFB0cihuZXcgVGlsZWRCYWNraW5nU3RvcmUodGhpcywgQ29v
cmRpbmF0ZWRUaWxlQmFja2VuZDo6Y3JlYXRlKHRoaXMpKSk7Ci0gICAgbV9tYWluQmFja2luZ1N0
b3JlLT5zZXRTdXBwb3J0c0FscGhhKCFjb250ZW50c09wYXF1ZSgpKTsKLSAgICBtX21haW5CYWNr
aW5nU3RvcmUtPnNldENvbnRlbnRzU2NhbGUoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKLX0K
LQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlm
IChyZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBhaW50R3JhcGhpY3NMYXll
ckNvbnRlbnRzKCpjb250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlUGFpbnRFbmQoY29uc3QgVmVjdG9yPEludFJlY3Q+JiB1
cGRhdGVkUmVjdHMpCi17Ci0gICAgaWYgKGlzU2hvd2luZ1JlcGFpbnRDb3VudGVyKCkgJiYgIXVw
ZGF0ZWRSZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY29vcmRpbmF0b3ItPnNldExheWVyUmVw
YWludENvdW50KGlkKCksIGluY3JlbWVudFJlcGFpbnRDb3VudCgpKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlSGFzUGVuZGluZ1RpbGVDcmVh
dGlvbigpCi17Ci0gICAgc2V0TmVlZHNWaXNpYmxlUmVjdEFkanVzdG1lbnQoKTsKLSAgICBpZiAo
Y2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT5ub3RpZnlGbHVzaFJlcXVpcmVkKHRoaXMpOwot
fQotCi1JbnRSZWN0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6dGlsZWRCYWNraW5nU3RvcmVD
b250ZW50c1JlY3QoKQotewotICAgIHJldHVybiBJbnRSZWN0KDAsIDAsIHNpemUoKS53aWR0aCgp
LCBzaXplKCkuaGVpZ2h0KCkpOwotfQotCi1zdGF0aWMgdm9pZCBjbGFtcFRvQ29udGVudHNSZWN0
SWZSZWN0SXNJbmZpbml0ZShGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGNvbnRlbnRz
UmVjdCkKLXsKLSAgICBpZiAocmVjdC53aWR0aCgpID49IExheW91dFVuaXQ6Om5lYXJseU1heCgp
IHx8IHJlY3Qud2lkdGgoKSA8PSBMYXlvdXRVbml0OjpuZWFybHlNaW4oKSkgewotICAgICAgICBy
ZWN0LnNldFgoY29udGVudHNSZWN0LngoKSk7Ci0gICAgICAgIHJlY3Quc2V0V2lkdGgoY29udGVu
dHNSZWN0LndpZHRoKCkpOwotICAgIH0KLQotICAgIGlmIChyZWN0LmhlaWdodCgpID49IExheW91
dFVuaXQ6Om5lYXJseU1heCgpIHx8IHJlY3QuaGVpZ2h0KCkgPD0gTGF5b3V0VW5pdDo6bmVhcmx5
TWluKCkpIHsKLSAgICAgICAgcmVjdC5zZXRZKGNvbnRlbnRzUmVjdC55KCkpOwotICAgICAgICBy
ZWN0LnNldEhlaWdodChjb250ZW50c1JlY3QuaGVpZ2h0KCkpOwotICAgIH0KLX0KLQotSW50UmVj
dCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlVmlzaWJsZVJlY3Qo
KQotewotICAgIC8vIE5vbi1pbnZlcnRpYmxlIGxheWVycyBhcmUgbm90IHZpc2libGUuCi0gICAg
aWYgKCFtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaXNJbnZlcnRpYmxlKCkpCi0gICAgICAg
IHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICAvLyBSZXR1cm4gYSBwcm9qZWN0aW9uIG9mIHRoZSB2
aXNpYmxlIHJlY3QgKHN1cmZhY2UgY29vcmRpbmF0ZXMpIG9udG8gdGhlIGxheWVyJ3MgcGxhbmUg
KGxheWVyIGNvb3JkaW5hdGVzKS4KLSAgICAvLyBUaGUgcmVzdWx0aW5nIHF1YWQgbWlnaHQgYmUg
c3F1ZXdlZCBhbmQgdGhlIHZpc2libGUgcmVjdCBpcyB0aGUgYm91bmRpbmcgYm94IG9mIHRoaXMg
cXVhZCwKLSAgICAvLyBzbyBpdCBtaWdodCBzcHJlYWQgZnVydGhlciB0aGFuIHRoZSByZWFsIHZp
c2libGUgYXJlYSAoYW5kIHRoZW4gZXZlbiBtb3JlIGFtcGxpZmllZCBieSB0aGUgY292ZXIgcmVj
dCBtdWx0aXBsaWVyKS4KLSAgICBBU1NFUlQobV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtID09IG1f
bGF5ZXJUcmFuc2Zvcm0uY29tYmluZWQoKS5pbnZlcnNlKCkpOwotICAgIEZsb2F0UmVjdCByZWN0
ID0gbV9jYWNoZWRJbnZlcnNlVHJhbnNmb3JtLmNsYW1wZWRCb3VuZHNPZlByb2plY3RlZFF1YWQo
RmxvYXRRdWFkKG1fY29vcmRpbmF0b3ItPnZpc2libGVDb250ZW50c1JlY3QoKSkpOwotICAgIGNs
YW1wVG9Db250ZW50c1JlY3RJZlJlY3RJc0luZmluaXRlKHJlY3QsIHRpbGVkQmFja2luZ1N0b3Jl
Q29udGVudHNSZWN0KCkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHJlY3QpOwotfQot
Ci1Db2xvciBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnRpbGVkQmFja2luZ1N0b3JlQmFja2dy
b3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29udGVudHNPcGFxdWUoKSA/IENvbG9y
Ojp3aGl0ZSA6IENvbG9yOjp0cmFuc3BhcmVudDsKLX0KLQotUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQ+IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIHVpbnQzMl90JiBhdGxhcywgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAg
ICBBU1NFUlQobV9jb29yZGluYXRvcik7Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3ItPmlzRmx1
c2hpbmdMYXllckNoYW5nZXMoKSk7Ci0gICAgcmV0dXJuIG1fY29vcmRpbmF0b3ItPmJlZ2luQ29u
dGVudFVwZGF0ZShzaXplLCBjb250ZW50c09wYXF1ZSgpID8gQ29vcmRpbmF0ZWRTdXJmYWNlOjpO
b0ZsYWdzIDogQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhhLCBhdGxhcywgb2Zmc2V0
KTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZVRpbGUodWludDMy
X3QgdGlsZUlELCBjb25zdCBTdXJmYWNlVXBkYXRlSW5mbyYgdXBkYXRlSW5mbywgY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwot
ICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkpOwotICAg
IG1fY29vcmRpbmF0b3ItPmNyZWF0ZVRpbGUoaWQoKSwgdGlsZUlELCB1cGRhdGVJbmZvLCB0aWxl
UmVjdCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjp1cGRhdGVUaWxlKHVp
bnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mIHVwZGF0ZUluZm8sIGNvbnN0
IEludFJlY3QmIHRpbGVSZWN0KQotewotICAgIEFTU0VSVChtX2Nvb3JkaW5hdG9yKTsKLSAgICBB
U1NFUlQobV9jb29yZGluYXRvci0+aXNGbHVzaGluZ0xheWVyQ2hhbmdlcygpKTsKLSAgICBtX2Nv
b3JkaW5hdG9yLT51cGRhdGVUaWxlKGlkKCksIHRpbGVJRCwgdXBkYXRlSW5mbywgdGlsZVJlY3Qp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVtb3ZlVGlsZSh1aW50MzJf
dCB0aWxlSUQpCi17Ci0gICAgQVNTRVJUKG1fY29vcmRpbmF0b3IpOwotICAgIEFTU0VSVChtX2Nv
b3JkaW5hdG9yLT5pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzKCkgfHwgbV9pc1B1cmdpbmcpOwotICAg
IG1fY29vcmRpbmF0b3ItPnJlbW92ZVRpbGUoaWQoKSwgdGlsZUlEKTsKLX0KLQotdm9pZCBDb29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnVwZGF0ZUNvbnRlbnRCdWZmZXJzKCkKLXsKLSAgICBpZiAo
IXNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkgewotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUu
Y2xlYXIoKTsKLSAgICAgICAgbV9wcmV2aW91c0JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3Rt
ZW50KSB7Ci0gICAgICAgIGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLSAgICAgICAgbV9wZW5kaW5n
Q29udGVudHNTY2FsZUFkanVzdG1lbnQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGlz
IHRoZSBvbmx5IHBsYWNlIHdlIChyZSljcmVhdGUgdGhlIG1haW4gdGlsZWQgYmFja2luZyBzdG9y
ZSwgb25jZSB3ZQotICAgIC8vIGhhdmUgYSByZW1vdGUgY2xpZW50IGFuZCB3ZSBhcmUgcmVhZHkg
dG8gc2VuZCBvdXIgZGF0YSB0byB0aGUgVUkgcHJvY2Vzcy4KLSAgICBpZiAoIW1fbWFpbkJhY2tp
bmdTdG9yZSkKLSAgICAgICAgY3JlYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICBpZiAobV9wZW5k
aW5nVmlzaWJsZVJlY3RBZGp1c3RtZW50KSB7Ci0gICAgICAgIG1fcGVuZGluZ1Zpc2libGVSZWN0
QWRqdXN0bWVudCA9IGZhbHNlOwotICAgICAgICBtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyV2l0
aFRpbGVzSWZOZWVkZWQoKTsKLSAgICB9Ci0KLSAgICBtX21haW5CYWNraW5nU3RvcmUtPnVwZGF0
ZVRpbGVCdWZmZXJzKCk7Ci0KLSAgICAvLyBUaGUgcHJldmlvdXMgYmFja2luZyBzdG9yZSBpcyBr
ZXB0IGFyb3VuZCB0byBhdm9pZCBmbGlja2VyaW5nIGJldHdlZW4KLSAgICAvLyByZW1vdmluZyB0
aGUgZXhpc3RpbmcgdGlsZXMgYW5kIHBhaW50aW5nIHRoZSBuZXcgb25lcy4gVGhlIGZpcnN0IHRp
bWUKLSAgICAvLyB0aGUgdmlzaWJsZVJlY3QgaXMgZnVsbCBwYWludGVkIHdlIHJlbW92ZSB0aGUg
cHJldmlvdXMgYmFja2luZyBzdG9yZS4KLSAgICBpZiAobV9tYWluQmFja2luZ1N0b3JlLT52aXNp
YmxlQXJlYUlzQ292ZXJlZCgpKQotICAgICAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFy
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpwdXJnZUJhY2tpbmdTdG9y
ZXMoKQotewotI2lmbmRlZiBOREVCVUcKLSAgICBUZW1wb3JhcnlDaGFuZ2U8Ym9vbD4gdXBkYXRl
TW9kZVByb3RlY3RvcihtX2lzUHVyZ2luZywgdHJ1ZSk7Ci0jZW5kaWYKLSAgICBtX21haW5CYWNr
aW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX3ByZXZpb3VzQmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0K
LSAgICByZWxlYXNlSW1hZ2VCYWNraW5nSWZOZWVkZWQoKTsKLQotICAgIGRpZENoYW5nZUxheWVy
U3RhdGUoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OnNldENvb3JkaW5h
dG9yKFdlYktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBjb29yZGluYXRvcikK
LXsKLSAgICBtX2Nvb3JkaW5hdG9yID0gY29vcmRpbmF0b3I7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpCi17Ci0gICAg
aWYgKHNob3VsZEhhdmVCYWNraW5nU3RvcmUoKSkKLSAgICAgICAgbV9wZW5kaW5nVmlzaWJsZVJl
Y3RBZGp1c3RtZW50ID0gdHJ1ZTsKLX0KLQotYm9vbCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
Omhhc1BlbmRpbmdWaXNpYmxlQ2hhbmdlcygpCi17Ci0gICAgaWYgKG9wYWNpdHkoKSA8IDAuMDEg
JiYgIW1fYW5pbWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVy
dHlPcGFjaXR5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICh0b0Nvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcihjaGlsZHJlbigpW2ldKS0+aGFzUGVuZGluZ1Zpc2libGVDaGFuZ2Vz
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBib29sIHNob3VsZFN5
bmNDYW52YXMgPSBmYWxzZTsKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBzaG91bGRT
eW5jQ2FudmFzID0gbV9wZW5kaW5nQ2FudmFzT3BlcmF0aW9uICYgU3luY0NhbnZhczsKLSNlbmRp
ZgotCi0gICAgaWYgKCFtX3Nob3VsZFN5bmNMYXllclN0YXRlICYmICFtX3Nob3VsZFN5bmNDaGls
ZHJlbiAmJiAhbV9zaG91bGRTeW5jRmlsdGVycyAmJiAhbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5n
ICYmICFtX3Nob3VsZFN5bmNBbmltYXRpb25zICYmICFzaG91bGRTeW5jQ2FudmFzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdGlsZWRCYWNraW5nU3RvcmVWaXNpYmxlUmVj
dCgpLmludGVyc2VjdHModGlsZWRCYWNraW5nU3RvcmVDb250ZW50c1JlY3QoKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgYm9vbCBpc0ludGVncmFsKGZsb2F0IHZhbHVlKQotewotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSA9PSB2YWx1ZTsKLX0KLQotRmxvYXRQb2ludCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCkKLXsKLSAg
ICBGbG9hdFBvaW50IG9mZnNldDsKLSAgICBmb3IgKGNvbnN0IEdyYXBoaWNzTGF5ZXIqIGN1cnJM
YXllciA9IHRoaXM7IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5wYXJlbnQoKSkK
LSAgICAgICAgb2Zmc2V0ICs9IGN1cnJMYXllci0+cG9zaXRpb24oKTsKLQotICAgIHJldHVybiBv
ZmZzZXQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpjb21wdXRlUGl4ZWxB
bGlnbm1lbnQoRmxvYXRQb2ludCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYgc2l6ZSwgRmxvYXRQb2lu
dDNEJiBhbmNob3JQb2ludCwgRmxvYXRTaXplJiBhbGlnbm1lbnRPZmZzZXQpCi17Ci0gICAgaWYg
KGlzSW50ZWdyYWwoZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKSkgewotICAgICAgICBwb3NpdGlv
biA9IG1fcG9zaXRpb247Ci0gICAgICAgIHNpemUgPSBtX3NpemU7Ci0gICAgICAgIGFuY2hvclBv
aW50ID0gbV9hbmNob3JQb2ludDsKLSAgICAgICAgYWxpZ25tZW50T2Zmc2V0ID0gRmxvYXRTaXpl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uUmVs
YXRpdmVUb0Jhc2UgPSBjb21wdXRlUG9zaXRpb25SZWxhdGl2ZVRvQmFzZSgpOwotCi0gICAgRmxv
YXRSZWN0IGJhc2VSZWxhdGl2ZUJvdW5kcyhwb3NpdGlvblJlbGF0aXZlVG9CYXNlLCBtX3NpemUp
OwotICAgIEZsb2F0UmVjdCBzY2FsZWRCb3VuZHMgPSBiYXNlUmVsYXRpdmVCb3VuZHM7Ci0KLSAg
ICAvLyBTY2FsZSBieSB0aGUgZWZmZWN0aXZlIHNjYWxlIGZhY3RvciB0byBjb21wdXRlIHRoZSBz
Y3JlZW4tcmVsYXRpdmUgYm91bmRzLgotICAgIHNjYWxlZEJvdW5kcy5zY2FsZShlZmZlY3RpdmVD
b250ZW50c1NjYWxlKCkpOwotCi0gICAgLy8gUm91bmQgdG8gaW50ZWdlciBib3VuZGFyaWVzLgot
ICAgIC8vIE5PVEU6IFdoZW4gdXNpbmcgZW5jbG9zaW5nSW50UmVjdCAoYXMgbWFjKSBpdCB3aWxs
IGhhdmUgZGlmZmVyZW50IHNpemVzIGRlcGVuZGluZyBvbiBwb3NpdGlvbi4KLSAgICBGbG9hdFJl
Y3QgYWxpZ25lZEJvdW5kcyA9IHJvdW5kZWRJbnRSZWN0KHNjYWxlZEJvdW5kcyk7Ci0KLSAgICAv
LyBDb252ZXJ0IGJhY2sgdG8gbGF5ZXIgY29vcmRpbmF0ZXMuCi0gICAgYWxpZ25lZEJvdW5kcy5z
Y2FsZSgxIC8gZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKLQotICAgIC8vIENvbnZlcnQgYmFj
ayB0byBsYXllciBjb29yZGluYXRlcy4KLSAgICBhbGlnbm1lbnRPZmZzZXQgPSBiYXNlUmVsYXRp
dmVCb3VuZHMubG9jYXRpb24oKSAtIGFsaWduZWRCb3VuZHMubG9jYXRpb24oKTsKLQotICAgIHBv
c2l0aW9uID0gbV9wb3NpdGlvbiAtIGFsaWdubWVudE9mZnNldDsKLSAgICBzaXplID0gYWxpZ25l
ZEJvdW5kcy5zaXplKCk7Ci0KLSAgICAvLyBOb3cgd2UgaGF2ZSB0byBjb21wdXRlIGEgbmV3IGFu
Y2hvciBwb2ludCB3aGljaCBjb21wZW5zYXRlcyBmb3Igcm91bmRpbmcuCi0gICAgZmxvYXQgYW5j
aG9yUG9pbnRYID0gbV9hbmNob3JQb2ludC54KCk7Ci0gICAgZmxvYXQgYW5jaG9yUG9pbnRZID0g
bV9hbmNob3JQb2ludC55KCk7Ci0KLSAgICBpZiAoYWxpZ25lZEJvdW5kcy53aWR0aCgpKQotICAg
ICAgICBhbmNob3JQb2ludFggPSAoYmFzZVJlbGF0aXZlQm91bmRzLndpZHRoKCkgKiBhbmNob3JQ
b2ludFggKyBhbGlnbm1lbnRPZmZzZXQud2lkdGgoKSkgLyBhbGlnbmVkQm91bmRzLndpZHRoKCk7
Ci0KLSAgICBpZiAoYWxpZ25lZEJvdW5kcy5oZWlnaHQoKSkKLSAgICAgICAgYW5jaG9yUG9pbnRZ
ID0gKGJhc2VSZWxhdGl2ZUJvdW5kcy5oZWlnaHQoKSAqIGFuY2hvclBvaW50WSArIGFsaWdubWVu
dE9mZnNldC5oZWlnaHQoKSkgLyBhbGlnbmVkQm91bmRzLmhlaWdodCgpOwotCi0gICAgYW5jaG9y
UG9pbnQgPSBGbG9hdFBvaW50M0QoYW5jaG9yUG9pbnRYLCBhbmNob3JQb2ludFksIG1fYW5jaG9y
UG9pbnQueigpICogZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpKTsKLX0KLQotdm9pZCBDb29yZGlu
YXRlZEdyYXBoaWNzTGF5ZXI6OmNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCkKLXsKLSAg
ICAvLyBXaGVuIHdlIGhhdmUgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uLCB3ZSBuZWVkIHRvIHVwZGF0
ZSB2aXNpYmxlIHJlY3QgZXZlcnkgZnJhbWUgdG8gYWRqdXN0IHRoZSB2aXNpYmxlIHJlY3Qgb2Yg
YSBiYWNraW5nIHN0b3JlLgotICAgIGJvb2wgaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uID0g
c2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKTsKLSAgICBpZiAoIW1f
c2hvdWxkVXBkYXRlVmlzaWJsZVJlY3QgJiYgIWhhc0FjdGl2ZVRyYW5zZm9ybUFuaW1hdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaG91bGRVcGRhdGVWaXNpYmxlUmVjdCA9IGZhbHNl
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJlbnRUcmFuc2Zvcm0gPSB0cmFuc2Zvcm0o
KTsKLSAgICBpZiAoaGFzQWN0aXZlVHJhbnNmb3JtQW5pbWF0aW9uKQotICAgICAgICBjbGllbnQo
KS0+Z2V0Q3VycmVudFRyYW5zZm9ybSh0aGlzLCBjdXJyZW50VHJhbnNmb3JtKTsKLSAgICBtX2xh
eWVyVHJhbnNmb3JtLnNldExvY2FsVHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0pOwotCi0gICAg
bV9sYXllclRyYW5zZm9ybS5zZXRBbmNob3JQb2ludChtX2FkanVzdGVkQW5jaG9yUG9pbnQpOwot
ICAgIG1fbGF5ZXJUcmFuc2Zvcm0uc2V0UG9zaXRpb24obV9hZGp1c3RlZFBvc2l0aW9uKTsKLSAg
ICBtX2xheWVyVHJhbnNmb3JtLnNldFNpemUobV9hZGp1c3RlZFNpemUpOwotCi0gICAgbV9sYXll
clRyYW5zZm9ybS5zZXRGbGF0dGVuaW5nKCFwcmVzZXJ2ZXMzRCgpKTsKLSAgICBtX2xheWVyVHJh
bnNmb3JtLnNldENoaWxkcmVuVHJhbnNmb3JtKGNoaWxkcmVuVHJhbnNmb3JtKCkpOwotICAgIG1f
bGF5ZXJUcmFuc2Zvcm0uY29tYmluZVRyYW5zZm9ybXMocGFyZW50KCkgPyB0b0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllcihwYXJlbnQoKSktPm1fbGF5ZXJUcmFuc2Zvcm0uY29tYmluZWRGb3JDaGls
ZHJlbigpIDogVHJhbnNmb3JtYXRpb25NYXRyaXgoKSk7Ci0KLSAgICBtX2NhY2hlZEludmVyc2VU
cmFuc2Zvcm0gPSBtX2xheWVyVHJhbnNmb3JtLmNvbWJpbmVkKCkuaW52ZXJzZSgpOwotCi0gICAg
Ly8gVGhlIGNvbWJpbmVkIHRyYW5zZm9ybSB3aWxsIGJlIHVzZWQgaW4gdGlsZWRCYWNraW5nU3Rv
cmVWaXNpYmxlUmVjdC4KLSAgICBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotfQot
Ci1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRyYXdzQ29udGVudCgpICYmIGNvbnRlbnRzQXJlVmlzaWJs
ZSgpICYmICFtX3NpemUuaXNFbXB0eSgpOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6c2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdAot
ewotICAgIGlmIChtX2FuaW1hdGlvbnMuaGFzQWN0aXZlQW5pbWF0aW9uc09mVHlwZShBbmltYXRl
ZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBp
ZiAoIXBhcmVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdG9Db29y
ZGluYXRlZEdyYXBoaWNzTGF5ZXIocGFyZW50KCkpLT5zZWxmT3JBbmNlc3Rvckhhc0FjdGl2ZVRy
YW5zZm9ybUFuaW1hdGlvbigpOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZmaW5lVHJhbnNmb3JtcygpCi17Ci0gICAgaWYgKG1fYW5p
bWF0aW9ucy5oYXNBY3RpdmVBbmltYXRpb25zT2ZUeXBlKEFuaW1hdGVkUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0pKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghbV9sYXllclRyYW5z
Zm9ybS5jb21iaW5lZCgpLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyKHBhcmVudCgpKS0+c2VsZk9yQW5jZXN0b3JIYXZlTm9uQWZm
aW5lVHJhbnNmb3JtcygpOwotfQotCi1ib29sIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YWRk
QW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEludFNp
emUmIGJveFNpemUsIGNvbnN0IEFuaW1hdGlvbiogYW5pbSwgY29uc3QgU3RyaW5nJiBrZXlmcmFt
ZXNOYW1lLCBkb3VibGUgZGVsYXlBc05lZ2F0aXZlVGltZU9mZnNldCkKLXsKLSAgICBBU1NFUlQo
IWtleWZyYW1lc05hbWUuaXNFbXB0eSgpKTsKLQotICAgIGlmICghYW5pbSB8fCBhbmltLT5pc0Vt
cHR5T3JaZXJvRHVyYXRpb24oKSB8fCB2YWx1ZUxpc3Quc2l6ZSgpIDwgMiB8fCAodmFsdWVMaXN0
LnByb3BlcnR5KCkgIT0gQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSAmJiB2YWx1ZUxp
c3QucHJvcGVydHkoKSAhPSBBbmltYXRlZFByb3BlcnR5T3BhY2l0eSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOwotICAgIGJvb2wgaWdub3Jl
ZEhhc0JpZ1JvdGF0aW9uOwotCi0gICAgaWYgKHZhbHVlTGlzdC5wcm9wZXJ0eSgpID09IEFuaW1h
dGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0pCi0gICAgICAgIGxpc3RzTWF0Y2ggPSB2YWxpZGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFsdWVMaXN0LCBpZ25vcmVkSGFzQmlnUm90YXRpb24pID49
IDA7Ci0KLSAgICBtX2xhc3RBbmltYXRpb25TdGFydFRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCkg
LSBkZWxheUFzTmVnYXRpdmVUaW1lT2Zmc2V0OwotICAgIG1fYW5pbWF0aW9ucy5hZGQoR3JhcGhp
Y3NMYXllckFuaW1hdGlvbihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsIGFuaW0s
IG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSwgbGlzdHNNYXRjaCkpOwotICAgIG1fYW5pbWF0aW9u
U3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICBkaWRDaGFuZ2VBbmltYXRpb25zKCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpw
YXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSB0aW1lKQot
ewotICAgIG1fYW5pbWF0aW9ucy5wYXVzZShhbmltYXRpb25OYW1lLCB0aW1lKTsKLSAgICBkaWRD
aGFuZ2VBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpy
ZW1vdmVBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQotewotICAgIG1fYW5p
bWF0aW9ucy5yZW1vdmUoYW5pbWF0aW9uTmFtZSk7Ci0gICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygp
OwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6c3VzcGVuZEFuaW1hdGlvbnMo
ZG91YmxlIHRpbWUpCi17Ci0gICAgbV9hbmltYXRpb25zLnN1c3BlbmQodGltZSk7Ci0gICAgZGlk
Q2hhbmdlQW5pbWF0aW9ucygpOwotfQotCi12b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgbV9hbmltYXRpb25zLnJlc3VtZSgpOwotICAgIGRp
ZENoYW5nZUFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cj4qKQotewotICAgIGNsaWVudCgpLT5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRoaXMsIG1fbGFz
dEFuaW1hdGlvblN0YXJ0VGltZSk7Ci19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
R3JhcGhpY3NMYXllci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGRjZmVlYjAyZGVkODlhYjkwNzU3OTM0MDMzZjBjNzdiYzNjZWMyNDgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSBDb3B5
cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLQotI2lmbmRlZiBDb29yZGluYXRlZEdyYXBo
aWNzTGF5ZXJfaAotI2RlZmluZSBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfaAotCi0jaW5jbHVk
ZSAiQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuaCIKLSNpbmNsdWRlICJDb29yZGluYXRlZExheWVy
SW5mby5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkVGlsZS5oIgotI2luY2x1ZGUgIkZsb2F0UG9p
bnQzRC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0xh
eWVyQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NMYXllclRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlRpbGVkQmFj
a2luZ1N0b3JlLmgiCi0jaW5jbHVkZSAiVGlsZWRCYWNraW5nU3RvcmVDbGllbnQuaCIKLSNpbmNs
dWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgotI2luY2x1ZGUgIlVwZGF0ZUluZm8uaCIKLSNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCi0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0jaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc1N1cmZhY2VUb2tlbi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8V2Vi
Q29yZS9SdW5Mb29wLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOwotY2xhc3MgR3JhcGhpY3NMYXllckFuaW1hdGlvbnM7Ci19
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJD
bGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgYm9vbCBpc0ZsdXNoaW5nTGF5ZXJDaGFuZ2Vz
KCkgY29uc3QgPSAwOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRUaWxlQ2xpZW50Ci0gICAgdmlydHVh
bCB2b2lkIGNyZWF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNv
bnN0IFN1cmZhY2VVcGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWlu
dDMyX3QgdGlsZUlEKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNp
YmxlQ29udGVudHNSZWN0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDb29y
ZGluYXRlZEltYWdlQmFja2luZz4gY3JlYXRlSW1hZ2VCYWNraW5nSWZOZWVkZWQoV2ViQ29yZTo6
SW1hZ2UqKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKENvb3JkaW5hdGVk
TGF5ZXJJRCwgY29uc3QgQ29vcmRpbmF0ZWRMYXllckluZm8mKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHN5bmNMYXllckNoaWxkcmVuKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgVmVjdG9yPENv
b3JkaW5hdGVkTGF5ZXJJRD4mKSA9IDA7Ci0jaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZp
cnR1YWwgdm9pZCBzeW5jTGF5ZXJGaWx0ZXJzKENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2Vi
Q29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpID0gMDsKLSNlbmRpZgotI2lmIFVTRShHUkFQSElDU19T
VVJGQUNFKQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklE
LCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jQ2Fu
dmFzKENvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVzdHJveUNhbnZhcyhDb29yZGluYXRlZExheWVySUQpID0gMDsKLSNl
bmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldExheWVyUmVwYWludENvdW50KENvb3JkaW5hdGVk
TGF5ZXJJRCwgaW50KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGF5ZXJBbmltYXRpb25z
KENvb3JkaW5hdGVkTGF5ZXJJRCwgY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFuaW1hdGlv
bnMmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoTGF5ZXIoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzeW5jRml4ZWRMYXll
cnMoKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4gYmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBDb29yZGluYXRl
ZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9pbnQmKSA9
IDA7Ci19OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvb3JkaW5hdGVkR3Jh
cGhpY3NMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyCi0gICAgLCBwdWJsaWMgVGlsZWRCYWNr
aW5nU3RvcmVDbGllbnQKLSAgICAsIHB1YmxpYyBXZWJLaXQ6OkNvb3JkaW5hdGVkSW1hZ2VCYWNr
aW5nOjpIb3N0Ci0gICAgLCBwdWJsaWMgV2ViS2l0OjpDb29yZGluYXRlZFRpbGVDbGllbnQgewot
cHVibGljOgotICAgIGV4cGxpY2l0IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcihHcmFwaGljc0xh
eWVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKCk7Ci0K
LSAgICAvLyBSZWltcGxlbWVudGF0aW9ucyBmcm9tIEdyYXBoaWNzTGF5ZXIuaC4KLSAgICB2aXJ0
dWFsIGJvb2wgc2V0Q2hpbGRyZW4oY29uc3QgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkQXRJbmRleChHcmFwaGljc0xheWVyKiwgaW50KSBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRBYm92ZShHcmFwaGljc0xheWVyKiwg
R3JhcGhpY3NMYXllciopIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZEJlbG93
KEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0xheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBi
b29sIHJlcGxhY2VDaGlsZChHcmFwaGljc0xheWVyKiwgR3JhcGhpY3NMYXllciopIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGcm9tUGFyZW50KCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0QW5jaG9yUG9pbnQoY29uc3QgRmxvYXRQb2ludDNEJikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldFNpemUoY29uc3QgRmxvYXRTaXplJikgT1ZFUlJJREU7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGlsZHJlblRyYW5zZm9ybShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVz
ZXJ2ZXMzRChib29sKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWFza3NUb0JvdW5k
cyhib29sKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0RHJhd3NDb250ZW50KGJvb2wp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1Zpc2libGUoYm9vbCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzT3BhcXVlKGJvb2wpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZmFjZVZpc2liaWxpdHkoYm9vbCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldE9wYWNpdHkoZmxvYXQpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgdm9pZCBzZXRDb250ZW50c1JlY3QoY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRDb250ZW50c1RvSW1hZ2UoSW1hZ2UqKSBPVkVSUklERTsKLSAgICB2aXJ0
dWFsIHZvaWQgc2V0Q29udGVudHNUb1NvbGlkQ29sb3IoY29uc3QgQ29sb3ImKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd0RlYnVnQm9yZGVyKGJvb2wpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRTaG93UmVwYWludENvdW50ZXIoYm9vbCkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBib29sIHNob3VsZERpcmVjdGx5Q29tcG9zaXRlSW1hZ2UoSW1hZ2UqKSBjb25zdCBP
VkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNUb0NhbnZhcyhQbGF0Zm9ybUxh
eWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1hc2tMYXllcihHcmFwaGljc0xh
eWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlcGxpY2F0ZWRCeUxheWVyKEdy
YXBoaWNzTGF5ZXIqKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5
KCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheUluUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNOZWVk
c0Rpc3BsYXkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGV2aWNlT3JQYWdlU2NhbGVG
YWN0b3JDaGFuZ2VkKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGZsdXNoQ29tcG9zaXRp
bmdTdGF0ZShjb25zdCBGbG9hdFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hDb21wb3NpdGluZ1N0YXRlRm9yVGhpc0xheWVyT25seSgpIE9WRVJSSURFOwotI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKLSAgICB2aXJ0dWFsIGJvb2wgc2V0RmlsdGVycyhjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJikgT1ZFUlJJREU7Ci0jZW5kaWYKLSAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0
aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEFuaW1h
dGlvbiosIGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lk
IHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoZG91YmxlIHRpbWUpIE9WRVJSSURFOwotICAg
IHZpcnR1YWwgdm9pZCByZXN1bWVBbmltYXRpb25zKCkgT1ZFUlJJREU7Ci0KLSAgICBGbG9hdFBv
aW50IGNvbXB1dGVQb3NpdGlvblJlbGF0aXZlVG9CYXNlKCk7Ci0gICAgdm9pZCBjb21wdXRlUGl4
ZWxBbGlnbm1lbnQoRmxvYXRQb2ludCYgcG9zaXRpb24sIEZsb2F0U2l6ZSYsIEZsb2F0UG9pbnQz
RCYgYW5jaG9yUG9pbnQsIEZsb2F0U2l6ZSYgYWxpZ25tZW50T2Zmc2V0KTsKLQotICAgIHZvaWQg
c2V0VmlzaWJsZUNvbnRlbnRSZWN0VHJhamVjdG9yeVZlY3Rvcihjb25zdCBGbG9hdFBvaW50Jik7
Ci0KLSAgICB2b2lkIHNldFJvb3RMYXllcihib29sKTsKLQotICAgIFdlYktpdDo6Q29vcmRpbmF0
ZWRMYXllcklEIGlkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldEZpeGVkVG9WaWV3cG9ydChib29s
IGlzRml4ZWQpIHsgbV9maXhlZFRvVmlld3BvcnQgPSBpc0ZpeGVkOyB9Ci0KLSAgICBJbnRSZWN0
IGNvdmVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFpbkJhY2tpbmdTdG9yZSA/IG1fbWFpbkJh
Y2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX21haW5CYWNraW5nU3RvcmUtPmNvdmVyUmVjdCgp
KSA6IEludFJlY3QoKTsgfQotCi0gICAgLy8gVGlsZWRCYWNraW5nU3RvcmVDbGllbnQKLSAgICB2
aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nU3RvcmVQYWludEJlZ2luKCkgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHRpbGVkQmFja2luZ1N0b3JlUGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgSW50UmVjdCYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9y
ZVBhaW50RW5kKGNvbnN0IFZlY3RvcjxJbnRSZWN0PiYgcGFpbnRlZEFyZWEpIE9WRVJSSURFOwot
ICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tpbmdTdG9yZUhhc1BlbmRpbmdUaWxlQ3JlYXRpb24o
KSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVDb250ZW50
c1JlY3QoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEludFJlY3QgdGlsZWRCYWNraW5nU3RvcmVW
aXNpYmxlUmVjdCgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ29sb3IgdGlsZWRCYWNraW5nU3Rv
cmVCYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBPVkVSUklERTsKLQotICAgIC8vIENvb3JkaW5hdGVk
VGlsZUNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwg
Y29uc3QgV2ViS2l0OjpTdXJmYWNlVXBkYXRlSW5mbyYsIGNvbnN0IEludFJlY3QmKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGlsZSh1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdl
YktpdDo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBJbnRSZWN0JikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZVRpbGUodWludDMyX3QgdGlsZUlEKSBPVkVSUklERTsKLSAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBiZWdpbkNvbnRlbnRVcGRhdGUoY29u
c3QgSW50U2l6ZSYsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRQb2ludCYpIE9WRVJSSURFOwotCi0g
ICAgdm9pZCBzZXRDb29yZGluYXRvcihXZWJLaXQ6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNs
aWVudCopOwotCi0gICAgdm9pZCBzZXROZWVkc1Zpc2libGVSZWN0QWRqdXN0bWVudCgpOwotICAg
IHZvaWQgcHVyZ2VCYWNraW5nU3RvcmVzKCk7Ci0gICAgYm9vbCBoYXNQZW5kaW5nVmlzaWJsZUNo
YW5nZXMoKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoR1JBUEhJQ1NfU1VSRkFDRSkKLSAgICBlbnVt
IFBlbmRpbmdDYW52YXNPcGVyYXRpb24gewotICAgICAgICBOb25lID0gMHgwMCwKLSAgICAgICAg
Q3JlYXRlQ2FudmFzID0gMHgwMSwKLSAgICAgICAgRGVzdHJveUNhbnZhcyA9IDB4MDIsCi0gICAg
ICAgIFN5bmNDYW52YXMgPSAweDA0LAotICAgICAgICBDcmVhdGVBbmRTeW5jQ2FudmFzID0gQ3Jl
YXRlQ2FudmFzIHwgU3luY0NhbnZhcywKLSAgICAgICAgUmVjcmVhdGVDYW52YXMgPSBDcmVhdGVB
bmRTeW5jQ2FudmFzIHwgRGVzdHJveUNhbnZhcwotICAgIH07Ci0KLSAgICB2b2lkIHN5bmNDYW52
YXMoKTsKLSAgICB2b2lkIGRlc3Ryb3lDYW52YXNJZk5lZWRlZCgpOwotICAgIHZvaWQgY3JlYXRl
Q2FudmFzSWZOZWVkZWQoKTsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIHNldERlYnVnQm9y
ZGVyKGNvbnN0IENvbG9yJiwgZmxvYXQgd2lkdGgpIE9WRVJSSURFOwotCi0gICAgYm9vbCBmaXhl
ZFRvVmlld3BvcnQoKSBjb25zdCB7IHJldHVybiBtX2ZpeGVkVG9WaWV3cG9ydDsgfQotCi0gICAg
dm9pZCBkaWRDaGFuZ2VMYXllclN0YXRlKCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VBbmltYXRpb25z
KCk7Ci0gICAgdm9pZCBkaWRDaGFuZ2VHZW9tZXRyeSgpOwotICAgIHZvaWQgZGlkQ2hhbmdlQ2hp
bGRyZW4oKTsKLSNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdm9pZCBkaWRDaGFuZ2VGaWx0
ZXJzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGRpZENoYW5nZUltYWdlQmFja2luZygpOwotCi0gICAg
dm9pZCBzeW5jTGF5ZXJTdGF0ZSgpOwotICAgIHZvaWQgc3luY0FuaW1hdGlvbnMoKTsKLSAgICB2
b2lkIHN5bmNDaGlsZHJlbigpOwotI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIHN5
bmNGaWx0ZXJzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIHN5bmNJbWFnZUJhY2tpbmcoKTsKLSAgICB2
b2lkIGNvbXB1dGVUcmFuc2Zvcm1lZFZpc2libGVSZWN0KCk7Ci0gICAgdm9pZCB1cGRhdGVDb250
ZW50QnVmZmVycygpOwotCi0gICAgdm9pZCBjcmVhdGVCYWNraW5nU3RvcmUoKTsKLSAgICB2b2lk
IHJlbGVhc2VJbWFnZUJhY2tpbmdJZk5lZWRlZCgpOwotCi0gICAgLy8gQ29vcmRpbmF0ZWRJbWFn
ZUJhY2tpbmc6Okhvc3QKLSAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5nVmlzaWJsZSgpIE9W
RVJSSURFOwotICAgIGJvb2wgc2hvdWxkSGF2ZUJhY2tpbmdTdG9yZSgpIGNvbnN0OwotICAgIGJv
b2wgc2VsZk9yQW5jZXN0b3JIYXNBY3RpdmVUcmFuc2Zvcm1BbmltYXRpb24oKSBjb25zdDsKLSAg
ICBib29sIHNlbGZPckFuY2VzdG9ySGF2ZU5vbkFmZmluZVRyYW5zZm9ybXMoKTsKLSAgICB2b2lk
IGFkanVzdENvbnRlbnRzU2NhbGUoKTsKLQotICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlVmlzaWJs
ZVJlY3QoKTsKLSAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxlKCk7Ci0KLSAgICB2b2lk
IGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cj4qKTsKLQotICAgIFdlYktpdDo6Q29vcmRpbmF0ZWRMYXllcklEIG1faWQ7Ci0gICAgV2ViS2l0
OjpDb29yZGluYXRlZExheWVySW5mbyBtX2xheWVySW5mbzsKLSAgICBHcmFwaGljc0xheWVyVHJh
bnNmb3JtIG1fbGF5ZXJUcmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9jYWNo
ZWRJbnZlcnNlVHJhbnNmb3JtOwotICAgIEZsb2F0U2l6ZSBtX3BpeGVsQWxpZ25tZW50T2Zmc2V0
OwotICAgIEZsb2F0U2l6ZSBtX2FkanVzdGVkU2l6ZTsKLSAgICBGbG9hdFBvaW50IG1fYWRqdXN0
ZWRQb3NpdGlvbjsKLSAgICBGbG9hdFBvaW50M0QgbV9hZGp1c3RlZEFuY2hvclBvaW50OwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIGJvb2wgbV9pc1B1cmdpbmc7Ci0jZW5kaWYKLSAgICBib29sIG1f
c2hvdWxkVXBkYXRlVmlzaWJsZVJlY3Q6IDE7Ci0gICAgYm9vbCBtX3Nob3VsZFN5bmNMYXllclN0
YXRlOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jQ2hpbGRyZW46IDE7Ci0gICAgYm9vbCBtX3No
b3VsZFN5bmNGaWx0ZXJzOiAxOwotICAgIGJvb2wgbV9zaG91bGRTeW5jSW1hZ2VCYWNraW5nOiAx
OwotICAgIGJvb2wgbV9zaG91bGRTeW5jQW5pbWF0aW9uczogMTsKLSAgICBib29sIG1fZml4ZWRU
b1ZpZXdwb3J0IDogMTsKLSAgICBib29sIG1fcGVuZGluZ0NvbnRlbnRzU2NhbGVBZGp1c3RtZW50
IDogMTsKLSAgICBib29sIG1fcGVuZGluZ1Zpc2libGVSZWN0QWRqdXN0bWVudCA6IDE7Ci0jaWYg
VVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgYm9vbCBtX2lzVmFsaWRDYW52YXMgOiAxOwotICAg
IHVuc2lnbmVkIG1fcGVuZGluZ0NhbnZhc09wZXJhdGlvbiA6IDM7Ci0jZW5kaWYKLQotICAgIFdl
YktpdDo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50KiBtX2Nvb3JkaW5hdG9yOwotICAg
IE93blB0cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9tYWluQmFja2luZ1N0b3JlOwotICAgIE93blB0
cjxUaWxlZEJhY2tpbmdTdG9yZT4gbV9wcmV2aW91c0JhY2tpbmdTdG9yZTsKLQotICAgIFJlZlB0
cjxJbWFnZT4gbV9jb21wb3NpdGVkSW1hZ2U7Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbV9jb21wb3Np
dGVkTmF0aXZlSW1hZ2VQdHI7Ci0gICAgUmVmUHRyPFdlYktpdDo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+IG1fY29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc7Ci0KLSAgICBQbGF0Zm9ybUxheWVyKiBt
X2NhbnZhc1BsYXRmb3JtTGF5ZXI7Ci0jaWYgVVNFKEdSQVBISUNTX1NVUkZBQ0UpCi0gICAgSW50
U2l6ZSBtX2NhbnZhc1NpemU7Ci0gICAgR3JhcGhpY3NTdXJmYWNlVG9rZW4gbV9jYW52YXNUb2tl
bjsKLSNlbmRpZgotICAgIFRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4gbV9hbmltYXRp
b25TdGFydGVkVGltZXI7Ci0gICAgR3JhcGhpY3NMYXllckFuaW1hdGlvbnMgbV9hbmltYXRpb25z
OwotICAgIGRvdWJsZSBtX2xhc3RBbmltYXRpb25TdGFydFRpbWU7Ci19OwotCi1Db29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXIqIHRvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIq
KTsKLQotfQotI2VuZGlmCi0KLSNlbmRpZiAvLyBDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXJfSApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmcuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDQzMTQ5MzI1Y2E1YTc2ZGM5
NWI0NzUyY2Q2ZWQyZmY5YjZhNmY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0Nvb3JkaW5hdGVkSW1hZ2VCYWNraW5nLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDE2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdl
QmFja2luZy5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQ29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmdJRCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Z2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRChJbWFnZSogaW1hZ2UpCi17Ci0gICAgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcga2Vl
cHMgYSBSZWZQdHI8SW1hZ2U+IG1lbWJlciwgc28gdGhlIHNhbWUgSW1hZ2UgcG9pbnRlciBjYW4g
bm90IHJlZmVyIHR3byBkaWZmZXJlbnQgaW5zdGFuY2VzIHVudGlsIENvb3JkaW5hdGVkSW1hZ2VC
YWNraW5nIHJlbGVhc2VzIHRoZSBtZW1iZXIuCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJRD4oaW1hZ2UpOwotfQotCi1QYXNzUmVmUHRyPENvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nPiBDb29yZGluYXRlZEltYWdlQmFja2luZzo6Y3JlYXRlKENvb3Jk
aW5hdG9yKiBjbGllbnQsIFBhc3NSZWZQdHI8SW1hZ2U+IGltYWdlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoY2xpZW50LCBpbWFnZSkpOwotfQot
Ci1Db29yZGluYXRlZEltYWdlQmFja2luZzo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRp
bmF0b3IqIGNsaWVudCwgUGFzc1JlZlB0cjxJbWFnZT4gaW1hZ2UpCi0gICAgOiBtX2Nvb3JkaW5h
dG9yKGNsaWVudCkKLSAgICAsIG1faW1hZ2UoaW1hZ2UpCi0gICAgLCBtX2lkKGdldENvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nSUQobV9pbWFnZS5nZXQoKSkpCi0gICAgLCBtX2NsZWFyQ29udGVudHNU
aW1lcih0aGlzLCAmQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZp
cmVkKQotICAgICwgbV9pc0RpcnR5KGZhbHNlKQotICAgICwgbV9pc1Zpc2libGUoZmFsc2UpCi17
Ci0gICAgLy8gRklYTUU6IFdlIHdvdWxkIG5lZWQgdG8gZGVjb2RlIGEgc21hbGwgaW1hZ2UgZGly
ZWN0bHkgaW50byBhIEdyYXBoaWNzU3VyZmFjZS4KLSAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9i
LzEwMTQyNgotCi0gICAgbV9jb29yZGluYXRvci0+Y3JlYXRlSW1hZ2VCYWNraW5nKGlkKCkpOwot
fQotCi1Db29yZGluYXRlZEltYWdlQmFja2luZzo6fkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nKCkK
LXsKLX0KLQotdm9pZCBDb29yZGluYXRlZEltYWdlQmFja2luZzo6YWRkSG9zdChIb3N0KiBob3N0
KQotewotICAgIEFTU0VSVCghbV9ob3N0cy5jb250YWlucyhob3N0KSk7Ci0gICAgbV9ob3N0cy5h
cHBlbmQoaG9zdCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbW92ZUhv
c3QoSG9zdCogaG9zdCkKLXsKLSAgICBzaXplX3QgcG9zaXRpb24gPSBtX2hvc3RzLmZpbmQoaG9z
dCk7Ci0gICAgQVNTRVJUKHBvc2l0aW9uICE9IG5vdEZvdW5kKTsKLSAgICBtX2hvc3RzLnJlbW92
ZShwb3NpdGlvbik7Ci0KLSAgICBpZiAobV9ob3N0cy5pc0VtcHR5KCkpCi0gICAgICAgIG1fY29v
cmRpbmF0b3ItPnJlbW92ZUltYWdlQmFja2luZyhpZCgpKTsKLX0KLQotdm9pZCBDb29yZGluYXRl
ZEltYWdlQmFja2luZzo6bWFya0RpcnR5KCkKLXsKLSAgICBtX2lzRGlydHkgPSB0cnVlOwotfQot
Ci12b2lkIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjp1cGRhdGUoKQotewotICAgIHJlbGVhc2VT
dXJmYWNlSWZOZWVkZWQoKTsKLQotICAgIGJvb2wgY2hhbmdlZFRvVmlzaWJsZTsKLSAgICB1cGRh
dGVWaXNpYmlsaXR5SWZOZWVkZWQoY2hhbmdlZFRvVmlzaWJsZSk7Ci0gICAgaWYgKCFtX2lzVmlz
aWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFjaGFuZ2VkVG9WaXNpYmxlKSB7Ci0g
ICAgICAgIGlmICghbV9pc0RpcnR5KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlm
IChtX25hdGl2ZUltYWdlUHRyID09IG1faW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkpIHsKLSAgICAgICAgICAgIG1faXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9zdXJmYWNlID0gQ29vcmRpbmF0ZWRTdXJmYWNl
OjpjcmVhdGUobV9pbWFnZS0+c2l6ZSgpLCBtX2ltYWdlLT5jdXJyZW50RnJhbWVIYXNBbHBoYSgp
ID8gQ29vcmRpbmF0ZWRTdXJmYWNlOjpTdXBwb3J0c0FscGhhIDogQ29vcmRpbmF0ZWRTdXJmYWNl
OjpOb0ZsYWdzKTsKLSAgICBpZiAoIW1fc3VyZmFjZSkgewotICAgICAgICBtX2lzRGlydHkgPSBm
YWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEludFJlY3QgcmVjdChJbnRQb2lu
dDo6emVybygpLCBtX2ltYWdlLT5zaXplKCkpOwotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+
IGNvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dChyZWN0KTsKLSAgICBj
b250ZXh0LT5kcmF3SW1hZ2UobV9pbWFnZS5nZXQoKSwgQ29sb3JTcGFjZURldmljZVJHQiwgcmVj
dCwgcmVjdCk7Ci0KLSAgICBtX25hdGl2ZUltYWdlUHRyID0gbV9pbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKLQotICAgIC8vIElmIHNlbmRpbmcgdGhlIG1lc3NhZ2UgZmFpbHMs
IHRyeSBhZ2FpbiBpbiB0aGUgbmV4dCB1cGRhdGUuCi0gICAgYm9vbCBzdWNjZXNzID0gbV9jb29y
ZGluYXRvci0+dXBkYXRlSW1hZ2VCYWNraW5nKGlkKCksIG1fc3VyZmFjZSk7Ci0gICAgbV9pc0Rp
cnR5ID0gIXN1Y2Nlc3M7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnJlbGVh
c2VTdXJmYWNlSWZOZWVkZWQoKQotewotICAgIC8vIFdlIG11c3Qga2VlcCBtX3N1cmZhY2UgdW50
aWwgVUkgUHJvY2VzcyByZWFkcyBtX3N1cmZhY2UuCi0gICAgLy8gSWYgbV9zdXJmYWNlIGV4aXN0
cywgaXQgd2FzIGNyZWF0ZWQgaW4gdGhlIHByZXZpb3VzIHVwZGF0ZS4KLSAgICBtX3N1cmZhY2Uu
Y2xlYXIoKTsKLX0KLQotc3RhdGljIGNvbnN0IGRvdWJsZSBjbGVhckNvbnRlbnRzVGltZXJJbnRl
cnZhbCA9IDM7Ci0KLXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OnVwZGF0ZVZpc2liaWxp
dHlJZk5lZWRlZChib29sJiBjaGFuZ2VkVG9WaXNpYmxlKQotewotICAgIGJvb2wgcHJldmlvdXNJ
c1Zpc2libGUgPSBtX2lzVmlzaWJsZTsKLQotICAgIG1faXNWaXNpYmxlID0gZmFsc2U7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2hvc3RzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
IChtX2hvc3RzW2ldLT5pbWFnZUJhY2tpbmdWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgIG1faXNW
aXNpYmxlID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgYm9vbCBjaGFuZ2VkVG9JbnZpc2libGUgPSBwcmV2aW91c0lzVmlzaWJsZSAmJiAhbV9pc1Zp
c2libGU7Ci0gICAgaWYgKGNoYW5nZWRUb0ludmlzaWJsZSkgewotICAgICAgICBBU1NFUlQoIW1f
Y2xlYXJDb250ZW50c1RpbWVyLmlzQWN0aXZlKCkpOwotICAgICAgICBtX2NsZWFyQ29udGVudHNU
aW1lci5zdGFydE9uZVNob3QoY2xlYXJDb250ZW50c1RpbWVySW50ZXJ2YWwpOwotICAgIH0KLQot
ICAgIGNoYW5nZWRUb1Zpc2libGUgPSAhcHJldmlvdXNJc1Zpc2libGUgJiYgbV9pc1Zpc2libGU7
Ci0KLSAgICBpZiAobV9pc1Zpc2libGUgJiYgbV9jbGVhckNvbnRlbnRzVGltZXIuaXNBY3RpdmUo
KSkgewotICAgICAgICBtX2NsZWFyQ29udGVudHNUaW1lci5zdG9wKCk7Ci0gICAgICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gdXBkYXRlIHRoZSB0ZXh0dXJlIGlmIHdlIGRpZG4ndCByZW1vdmUgdGhl
IHRleHR1cmUuCi0gICAgICAgIGNoYW5nZWRUb1Zpc2libGUgPSBmYWxzZTsKLSAgICB9Ci19Ci0K
LXZvaWQgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OmNsZWFyQ29udGVudHNUaW1lckZpcmVkKFdl
YkNvcmU6OlRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopCi17Ci0gICAgbV9jb29yZGlu
YXRvci0+Y2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhpZCgpKTsKLX0KLQotfQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFkYjJhMDJlYjgyZGYyN2Q5MTBmNWE5
Y2NiMGE3MGNlNzQzNGY0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZEltYWdlQmFja2luZy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0KLSNpZm5kZWYgQ29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdfaAotI2RlZmluZSBDb29yZGluYXRlZEltYWdlQmFja2luZ19oCi0KLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllckluZm8uaCIKLSNpbmNs
dWRlICJDb29yZGluYXRlZFN1cmZhY2UuaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvVGltZXIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIENvb3JkaW5hdGVk
SW1hZ2VCYWNraW5nIDogcHVibGljIFJlZkNvdW50ZWQ8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+
IHsKLXB1YmxpYzoKLSAgICBjbGFzcyBDb29yZGluYXRvciB7Ci0gICAgcHVibGljOgotICAgICAg
ICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIHVwZGF0ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lELCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmdJRCkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSW1hZ2VC
YWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpID0gMDsKLSAgICB9OwotCi0gICAgY2xh
c3MgSG9zdCB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaW1hZ2VCYWNraW5n
VmlzaWJsZSgpID0gMDsKLSAgICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q29vcmRpbmF0
ZWRJbWFnZUJhY2tpbmc+IGNyZWF0ZShDb29yZGluYXRvciosIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SW1hZ2U+KTsKLSAgICB2aXJ0dWFsIH5Db29yZGluYXRlZEltYWdlQmFja2luZygpOwotCi0gICAg
c3RhdGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgZ2V0Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmdJRChXZWJDb3JlOjpJbWFnZSopOwotICAgIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0KLSAgICB2b2lkIGFkZEhvc3QoSG9zdCopOwotICAg
IHZvaWQgcmVtb3ZlSG9zdChIb3N0Kik7Ci0KLSAgICAvLyBXaGVuIGEgbmV3IGltYWdlIGlzIHVw
ZGF0ZWQgb3IgYW4gYW5pbWF0ZWQgZ2lmIGlzIHByb2dyZXNzZWQsIENvb3JkaW5hdGVkR3JhcGhp
Y3NMYXllciBjYWxscyBtYXJrRGlydHkoKS4KLSAgICB2b2lkIG1hcmtEaXJ0eSgpOwotCi0gICAg
Ly8gQ3JlYXRlLCByZW1vdmUgb3IgdXBkYXRlIGl0cyBiYWNraW5nLgotICAgIHZvaWQgdXBkYXRl
KCk7Ci0KLXByaXZhdGU6Ci0gICAgQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcoQ29vcmRpbmF0b3Iq
LCBQYXNzUmVmUHRyPFdlYkNvcmU6OkltYWdlPik7Ci0KLSAgICB2b2lkIHJlbGVhc2VTdXJmYWNl
SWZOZWVkZWQoKTsKLSAgICB2b2lkIHVwZGF0ZVZpc2liaWxpdHlJZk5lZWRlZChib29sJiBjaGFu
Z2VkVG9WaXNpYmxlKTsKLSAgICB2b2lkIGNsZWFyQ29udGVudHNUaW1lckZpcmVkKFdlYkNvcmU6
OlRpbWVyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiopOwotCi0gICAgQ29vcmRpbmF0b3IqIG1f
Y29vcmRpbmF0b3I7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBtX2ltYWdlOwotICAgIFdl
YkNvcmU6Ok5hdGl2ZUltYWdlUHRyIG1fbmF0aXZlSW1hZ2VQdHI7Ci0gICAgQ29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCBtX2lkOwotICAgIFZlY3RvcjxIb3N0Kj4gbV9ob3N0czsKLQotICAgIFJl
ZlB0cjxDb29yZGluYXRlZFN1cmZhY2U+IG1fc3VyZmFjZTsKLQotICAgIFdlYkNvcmU6OlRpbWVy
PENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBtX2NsZWFyQ29udGVudHNUaW1lcjsKLQotICAgIGJv
b2wgbV9pc0RpcnR5OwotICAgIGJvb2wgbV9pc1Zpc2libGU7Ci0KLX07Ci0KLX0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdfSApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggZjE1
YWU3NjBjNmY5M2Q0MmE5MWVkNDNkMGVkYzFkMjc2MzNlOTljZi4uNmU1ZmI1NzIzMWM5Yjg5NWYy
ZjA2ZWE0MTUxMzAxNjk4ODEwYTQ1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCkBAIC0zMSwxMSArMzEsOSBAQAog
I2luY2x1ZGUgIkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5oIgogCiAjaW5jbHVkZSAiQ29vcmRp
bmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmgiCiAjaW5jbHVkZSAiQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0UHJveHlNZXNz
YWdlcy5oIgogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIlN1cmZhY2VVcGRhdGVJbmZvLmgiCiAjaW5jbHVkZSAiV2Vi
Q29vcmRpbmF0ZWRTdXJmYWNlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgi
CiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtNDksNiArNDcsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3Vy
ZmFjZVVwZGF0ZUluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCkBAIC03MTAsMTMg
KzcwOSwxMyBAQCBib29sIExheWVyVHJlZUhvc3Q6OnN1cHBvcnRzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0OjpjcmVhdGVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxl
SUQsIGNvbnN0IFN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiB0aWxlUmVjdCkKK3ZvaWQgQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjpjcmVhdGVU
aWxlKENvb3JkaW5hdGVkTGF5ZXJJRCBsYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdl
YkNvcmU6OlN1cmZhY2VVcGRhdGVJbmZvJiB1cGRhdGVJbmZvLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiB0aWxlUmVjdCkKIHsKICAgICBtX3Nob3VsZFN5bmNGcmFtZSA9IHRydWU7CiAgICAgbV93
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3RQcm94eTo6Q3Jl
YXRlVGlsZUZvckxheWVyKGxheWVySUQsIHRpbGVJRCwgdGlsZVJlY3QsIHVwZGF0ZUluZm8pKTsK
IH0KIAotdm9pZCBDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0
ZWRMYXllcklEIGxheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUlu
Zm8mIHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQordm9pZCBD
b29yZGluYXRlZExheWVyVHJlZUhvc3Q6OnVwZGF0ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklEIGxh
eWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8m
IHVwZGF0ZUluZm8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHRpbGVSZWN0KQogewogICAgIG1f
c2hvdWxkU3luY0ZyYW1lID0gdHJ1ZTsKICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdFByb3h5OjpVcGRhdGVUaWxlRm9yTGF5ZXIobGF5ZXJJRCwg
dGlsZUlELCB0aWxlUmVjdCwgdXBkYXRlSW5mbykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAppbmRleCBiZDY2ZTRhNzBjMjJj
MzY3MjUzMzhhOTJmZDBjZjc2OTAzNmQ0NjM2Li43Mjk3ZWVkODFlMDVhMmVlMGYwMDVlZWEzZGY4
MTg4NWZlYzNmMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJlZUhvc3QuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29y
ZGluYXRlZExheWVyVHJlZUhvc3QuaApAQCAtMjIsMzAgKzIyLDMyIEBACiAKICNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCiAKLSNpbmNsdWRlICJDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
aCIKLSNpbmNsdWRlICJDb29yZGluYXRlZEltYWdlQmFja2luZy5oIgogI2luY2x1ZGUgIkxheWVy
VHJlZUNvbnRleHQuaCIKICNpbmNsdWRlICJMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEltYWdl
QmFja2luZy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckNsaWVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1VwZGF0ZUF0bGFzLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiAjaWYgRU5BQkxFKENT
U19TSEFERVJTKQogI2luY2x1ZGUgIldlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eS5oIgogI2Vu
ZGlmCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKK30K
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIENvb3JkaW5hdGVkU3VyZmFjZTsKLWNsYXNz
IFVwZGF0ZUluZm87CiBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBDb29yZGluYXRlZExheWVyVHJl
ZUhvc3QgOiBwdWJsaWMgTGF5ZXJUcmVlSG9zdCwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVu
dAotICAgICwgcHVibGljIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVudAotICAgICwgcHVi
bGljIENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDb29yZGluYXRvcgotICAgICwgcHVibGljIFVw
ZGF0ZUF0bGFzQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGlj
c0xheWVyQ2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tp
bmc6OkNvb3JkaW5hdG9yCisgICAgLCBwdWJsaWMgV2ViQ29yZTo6VXBkYXRlQXRsYXNDbGllbnQK
ICAgICAsIHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyRmFjdG9yeQogI2lmIEVOQUJMRShD
U1NfU0hBREVSUykKICAgICAsIFdlYkN1c3RvbUZpbHRlclByb2dyYW1Qcm94eUNsaWVudApAQCAt
NzcsMTIgKzc5LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VSZW5kZXJpbmco
KSB7IG1faXNTdXNwZW5kZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZVJlbmRl
cmluZygpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOyBzY2hlZHVsZUxheWVyRmx1c2goKTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc+IGNyZWF0
ZUltYWdlQmFja2luZ0lmTmVlZGVkKFdlYkNvcmU6OkltYWdlKikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiBjcmVhdGVJ
bWFnZUJhY2tpbmdJZk5lZWRlZChXZWJDb3JlOjpJbWFnZSopIE9WRVJSSURFOwogCiAgICAgdmly
dHVhbCBib29sIGlzRmx1c2hpbmdMYXllckNoYW5nZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXM7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVGls
ZShDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90IHRpbGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0
ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZVRpbGUoQ29vcmRpbmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFN1cmZhY2VV
cGRhdGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVUaWxlKENvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlVGlsZShXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIHVpbnQzMl90
IHRpbGVJRCwgY29uc3QgV2ViQ29yZTo6U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRpbGUoV2ViQ29yZTo6Q29vcmRp
bmF0ZWRMYXllcklELCB1aW50MzJfdCB0aWxlSUQsIGNvbnN0IFdlYkNvcmU6OlN1cmZhY2VVcGRh
dGVJbmZvJiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVUaWxlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgdWludDMyX3QgdGlsZUlEKTsKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHJlbmRlck5leHRGcmFtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBw
dXJnZUJhY2tpbmdTdG9yZXMoKTsKQEAgLTkwLDI1ICs5MiwyNSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVDb29yZGluYXRlZExheWVyVHJlZUhvc3RNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlRGVjb2RlciYpOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3RvcnkqIGdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgT1ZF
UlJJREU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyU3RhdGUoQ29vcmRpbmF0ZWRMYXll
cklELCBjb25zdCBDb29yZGluYXRlZExheWVySW5mbyYpOwotICAgIHZpcnR1YWwgdm9pZCBzeW5j
TGF5ZXJDaGlsZHJlbihDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFZlY3RvcjxDb29yZGluYXRl
ZExheWVySUQ+Jik7Ci0gICAgdmlydHVhbCB2b2lkIHNldExheWVyQW5pbWF0aW9ucyhDb29yZGlu
YXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJBbmltYXRpb25zJik7Cisg
ICAgdmlydHVhbCB2b2lkIHN5bmNMYXllclN0YXRlKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgY29uc3QgV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllckluZm8mKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc3luY0xheWVyQ2hpbGRyZW4oV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBW
ZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklEPiYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRMYXllckFuaW1hdGlvbnMoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBjb25zdCBXZWJD
b3JlOjpHcmFwaGljc0xheWVyQW5pbWF0aW9ucyYpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykK
LSAgICB2aXJ0dWFsIHZvaWQgc3luY0xheWVyRmlsdGVycyhDb29yZGluYXRlZExheWVySUQsIGNv
bnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3luY0xh
eWVyRmlsdGVycyhXZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIGNvbnN0IFdlYkNvcmU6OkZp
bHRlck9wZXJhdGlvbnMmKTsKICNlbmRpZgogI2lmIFVTRShHUkFQSElDU19TVVJGQUNFKQotICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQ
bGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHN5bmNDYW52YXMoQ29v
cmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCB2b2lkIGRlc3Ryb3lDYW52YXMoQ29vcmRpbmF0ZWRMYXllcklEKSBPVkVSUklERTsK
KyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJ
RCwgV2ViQ29yZTo6UGxhdGZvcm1MYXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBz
eW5jQ2FudmFzKFdlYkNvcmU6OkNvb3JkaW5hdGVkTGF5ZXJJRCwgV2ViQ29yZTo6UGxhdGZvcm1M
YXllciopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95Q2FudmFzKFdlYkNvcmU6
OkNvb3JkaW5hdGVkTGF5ZXJJRCkgT1ZFUlJJREU7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0TGF5ZXJSZXBhaW50Q291bnQoQ29vcmRpbmF0ZWRMYXllcklELCBpbnQpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRMYXllclJlcGFpbnRDb3VudChXZWJDb3JlOjpDb29yZGluYXRl
ZExheWVySUQsIGludCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaExheWVyKFdl
YkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwgdm9pZCBzeW5j
Rml4ZWRMYXllcnMoKTsKIAotICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgQ29v
cmRpbmF0ZWRTdXJmYWNlOjpGbGFncywgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBv
aW50Jik7CisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4g
YmVnaW5Db250ZW50VXBkYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBXZWJDb3JlOjpDb29y
ZGluYXRlZFN1cmZhY2U6OkZsYWdzLCB1aW50MzJfdCYgYXRsYXNJRCwgV2ViQ29yZTo6SW50UG9p
bnQmKTsKIAogICAgIC8vIFVwZGF0ZUF0bGFzQ2xpZW50Ci0gICAgdmlydHVhbCBib29sIGNyZWF0
ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFzSUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJm
YWNlPikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZVVwZGF0ZUF0bGFzKHVpbnQz
Ml90IGF0bGFzSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZF
UlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKHVpbnQzMl90IGF0bGFz
SUQpOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQpAQCAtMTE2LDcgKzEx
OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBzZXRCYWNrZ3JvdW5kQ29s
b3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBPVkVSUklERTsKIAotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENvb3JkaW5hdGVkU3VyZmFjZT4gY3JlYXRlQ29vcmRpbmF0ZWRTdXJmYWNlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmLCBDb29yZGluYXRlZFN1cmZhY2U6OkZsYWdzKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+IGNyZWF0ZUNvb3JkaW5hdGVk
U3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6Q29vcmRpbmF0ZWRTdXJm
YWNlOjpGbGFncyk7CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDb29yZGluYXRlZExheWVy
VHJlZUhvc3QoV2ViUGFnZSopOwpAQCAtMTMwLDEwICsxMzIsMTAgQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIGZsb2F0IHBhZ2VTY2FsZUZhY3RvcigpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgLy8g
Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNvb3JkaW5hdG9yCi0gICAgdmlydHVhbCB2b2lkIGNy
ZWF0ZUltYWdlQmFja2luZyhDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgdXBkYXRlSW1hZ2VCYWNraW5nKENvb3JkaW5hdGVkSW1hZ2VCYWNraW5n
SUQsIFBhc3NSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGNsZWFySW1hZ2VCYWNraW5nQ29udGVudHMoQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmdJ
RCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUltYWdlQmFja2luZyhDb29yZGlu
YXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1h
Z2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQpIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVJbWFnZUJhY2tpbmcoV2ViQ29yZTo6Q29vcmRpbmF0ZWRJ
bWFnZUJhY2tpbmdJRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZFN1cmZhY2U+KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJJbWFnZUJhY2tpbmdDb250ZW50cyhXZWJD
b3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZ0lEKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlSW1hZ2VCYWNraW5nKFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nSUQp
IE9WRVJSSURFOwogCiAgICAgdm9pZCBmbHVzaFBlbmRpbmdJbWFnZUJhY2tpbmdDaGFuZ2VzKCk7
CiAKQEAgLTE4MCwxMSArMTgyLDExIEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXI+IG1fcGFnZU92ZXJsYXlMYXllcjsKIAogICAgIEhhc2hTZXQ8V2ViQ29yZTo6
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKj4gbV9yZWdpc3RlcmVkTGF5ZXJzOwotICAgIFZlY3Rv
cjxDb29yZGluYXRlZExheWVySUQ+IG1fbGF5ZXJzVG9DcmVhdGU7Ci0gICAgVmVjdG9yPENvb3Jk
aW5hdGVkTGF5ZXJJRD4gbV9sYXllcnNUb0RlbGV0ZTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8Q29v
cmRpbmF0ZWRJbWFnZUJhY2tpbmdJRCwgUmVmUHRyPENvb3JkaW5hdGVkSW1hZ2VCYWNraW5nPiA+
IEltYWdlQmFja2luZ01hcDsKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklE
PiBtX2xheWVyc1RvQ3JlYXRlOworICAgIFZlY3RvcjxXZWJDb3JlOjpDb29yZGluYXRlZExheWVy
SUQ+IG1fbGF5ZXJzVG9EZWxldGU7CisgICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkNvb3Jk
aW5hdGVkSW1hZ2VCYWNraW5nSUQsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFj
a2luZz4gPiBJbWFnZUJhY2tpbmdNYXA7CiAgICAgSW1hZ2VCYWNraW5nTWFwIG1faW1hZ2VCYWNr
aW5nczsKLSAgICBWZWN0b3I8T3duUHRyPFVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNlczsK
KyAgICBWZWN0b3I8T3duUHRyPFdlYkNvcmU6OlVwZGF0ZUF0bGFzPiA+IG1fdXBkYXRlQXRsYXNl
czsKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBIYXNoU2V0PFdlYkN1c3RvbUZpbHRl
clByb2dyYW1Qcm94eSo+IG1fY3VzdG9tRmlsdGVyUHJvZ3JhbXM7CkBAIC0yMTEsOCArMjEzLDgg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fYW5pbWF0aW9uc0xvY2tlZDsKIH07CiAKLX0KK30gLy8g
bmFtZXNwYWNlIFdlYktpdAogCi0jZW5kaWYKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAKICNlbmRpZiAvLyBDb29yZGluYXRlZExheWVyVHJlZUhvc3RfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
Q29vcmRpbmF0ZWRUaWxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVkVGlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFjMGI1NjYyNmU4MWYxMGIxODc2MmI5OGYzNjU4MDRmOGUzMjYxNjcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxl
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29vcmRpbmF0ZWRUaWxlLmgi
Ci0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiU3VyZmFjZVVwZGF0
ZUluZm8uaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZUNsaWVudC5oIgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBjb25zdCB1
aW50MzJfdCBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQgPSAwOwotCi1Db29yZGluYXRlZFRpbGU6
OkNvb3JkaW5hdGVkVGlsZShDb29yZGluYXRlZFRpbGVDbGllbnQqIGNsaWVudCwgVGlsZWRCYWNr
aW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBDb29yZGluYXRlJiB0aWxlQ29vcmRp
bmF0ZSkKLSAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fdGlsZWRCYWNraW5nU3RvcmUo
dGlsZWRCYWNraW5nU3RvcmUpCi0gICAgLCBtX2Nvb3JkaW5hdGUodGlsZUNvb3JkaW5hdGUpCi0g
ICAgLCBtX3JlY3QodGlsZWRCYWNraW5nU3RvcmUtPnRpbGVSZWN0Rm9yQ29vcmRpbmF0ZSh0aWxl
Q29vcmRpbmF0ZSkpCi0gICAgLCBtX0lEKEludmFsaWRDb29yZGluYXRlZFRpbGVJRCkKLSAgICAs
IG1fZGlydHlSZWN0KG1fcmVjdCkKLXsKLX0KLQotQ29vcmRpbmF0ZWRUaWxlOjp+Q29vcmRpbmF0
ZWRUaWxlKCkKLXsKLSAgICBpZiAobV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQpCi0g
ICAgICAgIG1fY2xpZW50LT5yZW1vdmVUaWxlKG1fSUQpOwotfQotCi1ib29sIENvb3JkaW5hdGVk
VGlsZTo6aXNEaXJ0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFtX2RpcnR5UmVjdC5pc0VtcHR5
KCk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlOjppbnZhbGlkYXRlKGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKLXsKLSAgICBJbnRSZWN0IHRpbGVEaXJ0eVJlY3QgPSBpbnRlcnNlY3Rpb24o
ZGlydHlSZWN0LCBtX3JlY3QpOwotICAgIGlmICh0aWxlRGlydHlSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9kaXJ0eVJlY3QudW5pdGUodGlsZURpcnR5UmVjdCk7Ci19
Ci0KLVZlY3RvcjxJbnRSZWN0PiBDb29yZGluYXRlZFRpbGU6OnVwZGF0ZUJhY2tCdWZmZXIoKQot
ewotICAgIGlmICghaXNEaXJ0eSgpKQotICAgICAgICByZXR1cm4gVmVjdG9yPEludFJlY3Q+KCk7
Ci0KLSAgICBTdXJmYWNlVXBkYXRlSW5mbyB1cGRhdGVJbmZvOwotICAgIE93blB0cjxHcmFwaGlj
c0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IG1fY2xpZW50LT5iZWdpbkNvbnRlbnRVcGRhdGUo
bV9kaXJ0eVJlY3Quc2l6ZSgpLCB1cGRhdGVJbmZvLmF0bGFzSUQsIHVwZGF0ZUluZm8uc3VyZmFj
ZU9mZnNldCk7Ci0gICAgaWYgKCFncmFwaGljc0NvbnRleHQpCi0gICAgICAgIHJldHVybiBWZWN0
b3I8SW50UmVjdD4oKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnRyYW5zbGF0ZSgtbV9kaXJ0eVJl
Y3QueCgpLCAtbV9kaXJ0eVJlY3QueSgpKTsKLSAgICBncmFwaGljc0NvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZShtX3RpbGVkQmFja2luZ1N0b3JlLT5jb250ZW50c1NjYWxlKCksIG1fdGlsZWRCYWNr
aW5nU3RvcmUtPmNvbnRlbnRzU2NhbGUoKSkpOwotICAgIG1fdGlsZWRCYWNraW5nU3RvcmUtPmNs
aWVudCgpLT50aWxlZEJhY2tpbmdTdG9yZVBhaW50KGdyYXBoaWNzQ29udGV4dC5nZXQoKSwgbV90
aWxlZEJhY2tpbmdTdG9yZS0+bWFwVG9Db250ZW50cyhtX2RpcnR5UmVjdCkpOwotCi0gICAgdXBk
YXRlSW5mby51cGRhdGVSZWN0ID0gbV9kaXJ0eVJlY3Q7Ci0gICAgdXBkYXRlSW5mby51cGRhdGVS
ZWN0Lm1vdmUoLW1fcmVjdC54KCksIC1tX3JlY3QueSgpKTsKLSAgICB1cGRhdGVJbmZvLnNjYWxl
RmFjdG9yID0gbV90aWxlZEJhY2tpbmdTdG9yZS0+Y29udGVudHNTY2FsZSgpOwotICAgIGdyYXBo
aWNzQ29udGV4dC5yZWxlYXNlKCk7Ci0KLSAgICBzdGF0aWMgdWludDMyX3QgaWQgPSAxOwotICAg
IGlmIChtX0lEID09IEludmFsaWRDb29yZGluYXRlZFRpbGVJRCkgewotICAgICAgICBtX0lEID0g
aWQrKzsKLSAgICAgICAgLy8gV2UgbWF5IGdldCBhbiBpbnZhbGlkIElEIGR1ZSB0byB3cmFwLWFy
b3VuZCBvbiBvdmVyZmxvdy4KLSAgICAgICAgaWYgKG1fSUQgPT0gSW52YWxpZENvb3JkaW5hdGVk
VGlsZUlEKQotICAgICAgICAgICAgbV9JRCA9IGlkKys7Ci0gICAgICAgIG1fY2xpZW50LT5jcmVh
dGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1f
Y2xpZW50LT51cGRhdGVUaWxlKG1fSUQsIHVwZGF0ZUluZm8sIG1fcmVjdCk7Ci0KLSAgICBWZWN0
b3I8SW50UmVjdD4gdXBkYXRlZFJlY3RzOwotICAgIHVwZGF0ZWRSZWN0cy5hcHBlbmQobV9kaXJ0
eVJlY3QpOwotICAgIG1fZGlydHlSZWN0ID0gSW50UmVjdCgpOwotICAgIHJldHVybiB1cGRhdGVk
UmVjdHM7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlOjpzd2FwQmFja0J1ZmZlclRvRnJvbnQo
KQotewotICAgIC8vIEhhbmRsZWQgYnkgdGlsZWRCYWNraW5nU3RvcmVQYWludEVuZC4KLX0KLQot
Ym9vbCBDb29yZGluYXRlZFRpbGU6OmlzUmVhZHlUb1BhaW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9JRCAhPSBJbnZhbGlkQ29vcmRpbmF0ZWRUaWxlSUQ7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0
ZWRUaWxlOjpwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JikKLXsKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotdm9pZCBDb29yZGluYXRlZFRpbGU6OnJlc2l6ZShj
b25zdCBJbnRTaXplJiBuZXdTaXplKQotewotICAgIG1fcmVjdCA9IEludFJlY3QobV9yZWN0Lmxv
Y2F0aW9uKCksIG5ld1NpemUpOwotICAgIG1fZGlydHlSZWN0ID0gbV9yZWN0OwotfQotCi1Db29y
ZGluYXRlZFRpbGVCYWNrZW5kOjpDb29yZGluYXRlZFRpbGVCYWNrZW5kKENvb3JkaW5hdGVkVGls
ZUNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQotewotfQotCi1QYXNzUmVm
UHRyPFdlYkNvcmU6OlRpbGU+IENvb3JkaW5hdGVkVGlsZUJhY2tlbmQ6OmNyZWF0ZVRpbGUoV2Vi
Q29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIHRpbGVkQmFja2luZ1N0b3JlLCBjb25zdCBXZWJDb3Jl
OjpUaWxlOjpDb29yZGluYXRlJiB0aWxlQ29vcmRpbmF0ZSkKLXsKLSAgICByZXR1cm4gQ29vcmRp
bmF0ZWRUaWxlOjpjcmVhdGUobV9jbGllbnQsIHRpbGVkQmFja2luZ1N0b3JlLCB0aWxlQ29vcmRp
bmF0ZSk7Ci19Ci0KLXZvaWQgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZDo6cGFpbnRDaGVja2VyUGF0
dGVybihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShUSUxFRF9C
QUNLSU5HX1NUT1JFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRUaWxlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZFRpbGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmUxNWNjNzcyYjUzMWVhMWE0YTczNDFj
MWQwNDZiNjUwOGY2Y2NmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9Db29yZGluYXRlZFRpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvb3JkaW5hdGVkVGlsZV9oCi0jZGVm
aW5lIENvb3JkaW5hdGVkVGlsZV9oCi0KLSNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKLQot
I2luY2x1ZGUgIlRpbGUuaCIKLSNpbmNsdWRlICJUaWxlZEJhY2tpbmdTdG9yZS5oIgotI2luY2x1
ZGUgIldlYkNvcmUvSW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbWFn
ZUJ1ZmZlcjsKLWNsYXNzIFRpbGVkQmFja2luZ1N0b3JlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQ2xpZW50OwotY2xhc3MgU3VyZmFjZVVwZGF0ZUlu
Zm87Ci0KLWNsYXNzIENvb3JkaW5hdGVkVGlsZSA6IHB1YmxpYyBXZWJDb3JlOjpUaWxlIHsKLXB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaWxlPiBjcmVhdGUoQ29vcmRpbmF0ZWRUaWxl
Q2xpZW50KiBjbGllbnQsIFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlKiB0aWxlZEJhY2tpbmdT
dG9yZSwgY29uc3QgQ29vcmRpbmF0ZSYgdGlsZUNvb3JkaW5hdGUpIHsgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDb29yZGluYXRlZFRpbGUoY2xpZW50LCB0aWxlZEJhY2tpbmdTdG9yZSwgdGlsZUNvb3Jk
aW5hdGUpKTsgfQotICAgIH5Db29yZGluYXRlZFRpbGUoKTsKLQotICAgIGJvb2wgaXNEaXJ0eSgp
IGNvbnN0OwotICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0g
ICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHVwZGF0ZUJhY2tCdWZmZXIoKTsKLSAgICB2b2lk
IHN3YXBCYWNrQnVmZmVyVG9Gcm9udCgpOwotICAgIGJvb2wgaXNSZWFkeVRvUGFpbnQoKSBjb25z
dDsKLSAgICB2b2lkIHBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKLQotICAgIGNvbnN0IENvb3JkaW5hdGUmIGNvb3JkaW5hdGUoKSBjb25z
dCB7IHJldHVybiBtX2Nvb3JkaW5hdGU7IH0KLSAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBy
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgdm9pZCByZXNpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpOwotCi1wcml2YXRlOgotICAgIENvb3JkaW5hdGVkVGlsZShDb29yZGlu
YXRlZFRpbGVDbGllbnQqLCBXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IENvb3Jk
aW5hdGUmKTsKLQotICAgIENvb3JkaW5hdGVkVGlsZUNsaWVudCogbV9jbGllbnQ7Ci0gICAgV2Vi
Q29yZTo6VGlsZWRCYWNraW5nU3RvcmUqIG1fdGlsZWRCYWNraW5nU3RvcmU7Ci0gICAgQ29vcmRp
bmF0ZSBtX2Nvb3JkaW5hdGU7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBtX3JlY3Q7Ci0KLSAgICB1
aW50MzJfdCBtX0lEOwotICAgIFdlYkNvcmU6OkludFJlY3QgbV9kaXJ0eVJlY3Q7Ci0KLSAgICBP
d25QdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IG1fbG9jYWxCdWZmZXI7Ci19OwotCi1jbGFzcyBD
b29yZGluYXRlZFRpbGVDbGllbnQgewotcHVibGljOgotICAgIHZpcnR1YWwgfkNvb3JkaW5hdGVk
VGlsZUNsaWVudCgpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVUaWxlKHVpbnQzMl90IHRp
bGVJRCwgY29uc3QgU3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaWxlKHVpbnQzMl90IHRpbGVJRCwgY29uc3Qg
U3VyZmFjZVVwZGF0ZUluZm8mLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVUaWxlKHVpbnQzMl90IHRpbGVJRCkgPSAwOwotICAgIHZpcnR1YWwg
UGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IGJlZ2luQ29udGVudFVwZGF0ZShj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgdWludDMyX3QmIGF0bGFzSUQsIFdlYkNvcmU6OkludFBv
aW50JikgPSAwOwotfTsKLQotY2xhc3MgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZCA6IHB1YmxpYyBX
ZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZUJhY2tlbmQgewotcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFdlYkNvcmU6OlRpbGVkQmFja2luZ1N0b3JlQmFja2VuZD4gY3JlYXRlKENvb3Jk
aW5hdGVkVGlsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFB0cihuZXcgQ29vcmRpbmF0
ZWRUaWxlQmFja2VuZChjbGllbnQpKTsgfQotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6VGlsZT4g
Y3JlYXRlVGlsZShXZWJDb3JlOjpUaWxlZEJhY2tpbmdTdG9yZSosIGNvbnN0IFdlYkNvcmU6OlRp
bGU6OkNvb3JkaW5hdGUmKTsKLSAgICB2b2lkIHBhaW50Q2hlY2tlclBhdHRlcm4oV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Ci0KLXByaXZhdGU6
Ci0gICAgZXhwbGljaXQgQ29vcmRpbmF0ZWRUaWxlQmFja2VuZChDb29yZGluYXRlZFRpbGVDbGll
bnQqKTsKLSAgICBDb29yZGluYXRlZFRpbGVDbGllbnQqIG1fY2xpZW50OwotfTsKLQotCi19IC8v
IG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQot
Ci0jZW5kaWYgLy8gQ29vcmRpbmF0ZWRUaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRh
dGVBdGxhcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MmQzMmZjNmZmYzEw
MmNmNmQ0YTY0M2Y1YzMyODc4NGQ2YjU3MWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAs
MCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0
cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMu
Ci0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0K
LSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJVcGRhdGVBdGxhcy5oIgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKFVwZGF0ZUF0bGFzQ2xpZW50
KiBjbGllbnQsIGludCBkaW1lbnNpb24sIENvb3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MgZmxhZ3Mp
Ci0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2luYWN0aXZpdHlJblNlY29uZHMoMCkK
LXsKLSAgICBzdGF0aWMgdWludDMyX3QgbmV4dElEID0gMDsKLSAgICBtX0lEID0gKytuZXh0SUQ7
Ci0gICAgSW50U2l6ZSBzaXplID0gbmV4dFBvd2VyT2ZUd28oSW50U2l6ZShkaW1lbnNpb24sIGRp
bWVuc2lvbikpOwotICAgIG1fc3VyZmFjZSA9IENvb3JkaW5hdGVkU3VyZmFjZTo6Y3JlYXRlKHNp
emUsIGZsYWdzKTsKLQotICAgIC8vIEZJWE1FOiBDdXJyZW50bHksIGlmIHNlbmRpbmcgdGhlIG1l
c3NhZ2UgZmFpbHMsIFVwZGF0ZUF0bGFzIGdpdmVzIHVwIGRyYXdpbmcgYW55dGhpbmcgaW1wbGlj
aXRseS4KLSAgICBpZiAoIW1fY2xpZW50LT5jcmVhdGVVcGRhdGVBdGxhcyhtX0lELCBtX3N1cmZh
Y2UpKQotICAgICAgICBtX3N1cmZhY2UuY2xlYXIoKTsKLX0KLQotVXBkYXRlQXRsYXM6On5VcGRh
dGVBdGxhcygpCi17Ci0gICAgaWYgKG1fc3VyZmFjZSkKLSAgICAgICAgbV9jbGllbnQtPnJlbW92
ZVVwZGF0ZUF0bGFzKG1fSUQpOwotfQotCi12b2lkIFVwZGF0ZUF0bGFzOjpidWlsZExheW91dElm
TmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fYXJlYUFsbG9jYXRvcikgewotICAgICAgICBtX2FyZWFB
bGxvY2F0b3IgPSBhZG9wdFB0cihuZXcgR2VuZXJhbEFyZWFBbGxvY2F0b3Ioc2l6ZSgpKSk7Ci0g
ICAgICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWluaW11bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwg
MzIpKTsKLSAgICB9Ci19Ci0KLXZvaWQgVXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJzKCkKLXsK
LSAgICBtX2FyZWFBbGxvY2F0b3IuY2xlYXIoKTsKLX0KLQotUGFzc093blB0cjxHcmFwaGljc0Nv
bnRleHQ+IFVwZGF0ZUF0bGFzOjpiZWdpblBhaW50aW5nT25BdmFpbGFibGVCdWZmZXIodWludDMy
X3QmIGF0bGFzSUQsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUsIEludFBvaW50JiBvZmZz
ZXQpCi17Ci0gICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzID0gMDsKLSAgICBidWlsZExheW91dElm
TmVlZGVkKCk7Ci0gICAgSW50UmVjdCByZWN0ID0gbV9hcmVhQWxsb2NhdG9yLT5hbGxvY2F0ZShz
aXplKTsKLQotICAgIC8vIE5vIGF2YWlsYWJsZSBidWZmZXIgd2FzIGZvdW5kLCByZXR1cm5pbmcg
bnVsbC4KLSAgICBpZiAocmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dD4oKTsKLQotICAgIGlmICghbV9zdXJmYWNlKQotICAgICAgICByZXR1
cm4gUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQ+KCk7Ci0KLSAgICBhdGxhc0lEID0gbV9JRDsK
LQotICAgIC8vIEZJWE1FOiBVc2UgdHJpLXN0YXRlIGJ1ZmZlcnMsIHRvIGFsbG93IGZhc3RlciB1
cGRhdGVzLgotICAgIG9mZnNldCA9IHJlY3QubG9jYXRpb24oKTsKLSAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBtX3N1cmZhY2UtPmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dChyZWN0KTsKLQotICAgIGlmIChzdXBwb3J0c0FscGhhKCkpIHsKLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7Ci0gICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZmlsbFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBzaXpl
KSwgQ29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGdyYXBoaWNzQ29udGV4dC5yZWxlYXNlKCk7Ci19Ci0KLX0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVkNTg2M2I4NGQwZDhkYmFjY2JhZTM5YjEyZTIzNDE0ODMzODc2
MmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRs
YXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChDKSAy
MDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENvcHly
aWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwot
Ci0jaWZuZGVmIFVwZGF0ZUF0bGFzX2gKLSNkZWZpbmUgVXBkYXRlQXRsYXNfaAotCi0jaW5jbHVk
ZSAiQXJlYUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkNvb3JkaW5hdGVkU3VyZmFjZS5oIgotI2lu
Y2x1ZGUgIkludFNpemUuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEludFBvaW50Owot
fQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgVXBkYXRlQXRsYXNDbGllbnQgewotcHVi
bGljOgotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVVcGRhdGVBdGxhcyh1aW50MzJfdCBhdGxhc0lE
LCBQYXNzUmVmUHRyPENvb3JkaW5hdGVkU3VyZmFjZT4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlVXBkYXRlQXRsYXModWludDMyX3QgYXRsYXNJRCkgPSAwOwotfTsKLQotY2xhc3MgVXBk
YXRlQXRsYXMgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKLXB1Ymxp
YzoKLSAgICBVcGRhdGVBdGxhcyhVcGRhdGVBdGxhc0NsaWVudCosIGludCBkaW1lbnNpb24sIENv
b3JkaW5hdGVkU3VyZmFjZTo6RmxhZ3MpOwotICAgIH5VcGRhdGVBdGxhcygpOwotCi0gICAgaW5s
aW5lIFdlYkNvcmU6OkludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS0+c2l6
ZSgpOyB9Ci0KLSAgICAvLyBSZXR1cm5zIGEgbnVsbCBwb2ludGVyIG9mIHRoZXJlIGlzIG5vIGF2
YWlsYWJsZSBidWZmZXIuCi0gICAgUGFzc093blB0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+
IGJlZ2luUGFpbnRpbmdPbkF2YWlsYWJsZUJ1ZmZlcih1aW50MzJfdCYgYXRsYXNJRCwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpOwotICAgIHZvaWQg
ZGlkU3dhcEJ1ZmZlcnMoKTsKLSAgICBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7IHJldHVy
biBtX3N1cmZhY2UtPnN1cHBvcnRzQWxwaGEoKTsgfQotCi0gICAgdm9pZCBhZGRUaW1lSW5hY3Rp
dmUoZG91YmxlIHNlY29uZHMpCi0gICAgewotICAgICAgICBBU1NFUlQoIWlzSW5Vc2UoKSk7Ci0g
ICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyArPSBzZWNvbmRzOwotICAgIH0KLSAgICBib29s
IGlzSW5hY3RpdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgY29uc3QgZG91YmxlIGluYWN0aXZl
U2Vjb25kc1RvbGVyYW5jZSA9IDM7Ci0gICAgICAgIHJldHVybiBtX2luYWN0aXZpdHlJblNlY29u
ZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2U7Ci0gICAgfQotICAgIGJvb2wgaXNJblVzZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYXJlYUFsbG9jYXRvcjsgfQotCi1wcml2YXRlOgotICAgIHZvaWQg
YnVpbGRMYXlvdXRJZk5lZWRlZCgpOwotCi1wcml2YXRlOgotICAgIFVwZGF0ZUF0bGFzQ2xpZW50
KiBtX2NsaWVudDsKLSAgICBPd25QdHI8R2VuZXJhbEFyZWFBbGxvY2F0b3I+IG1fYXJlYUFsbG9j
YXRvcjsKLSAgICBSZWZQdHI8Q29vcmRpbmF0ZWRTdXJmYWNlPiBtX3N1cmZhY2U7Ci0gICAgZG91
YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kczsKLSAgICB1aW50MzJfdCBtX0lEOwotfTsKLQotfQot
I2VuZGlmCi0jZW5kaWYgLy8gVXBkYXRlQXRsYXNfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>